while語句

1、while語句的格式
使用for語句編寫程序時通常須要事先知道循環次數,若是遇到不能肯定循環次數的問題時可使用while語句。while語句用於「當知足某一條件時進行循環」的狀況
 
while語句的格式:while 布爾表達式 do 語句;
while語句的執行過程是:先求布爾表達式的值,當其值是真時,進入循環執行do後面的語句;而後返回再求布爾表達式的值,若布爾表達式的值是真,再次執行do後面的語句;若是布爾表達式的值是假就退出循環,執行while下面的語句。
 
注意事項:
一、爲了使while循環正常終止,在循環體內必定要有改變布爾表達式值的語句,以使布爾值有可能爲假,從而結束循環;不然將會致使循環沒法結束的「死循環」狀態
二、循環體是多個語句時,需用begin和end將它們括起來造成一條複合語句。
三、若是循環開始時,布爾表達式就爲假,則不執行循環體,直接退出while語句。
 
例1:有一張紙,其厚度爲0.1毫米,將它對摺多少次,其厚度將超過珠穆朗瑪峯的高度。
var
  i:byte;
  r:real;
begin
  i:=0;
  r:=0.0001;
  while r<8848 do begin
    r:=r*2;
    i:=i+1;
  end;
  writeln(i);
end.
 
例2:輸入一個正整數,求這個正整數的各位數字之和。
var
  n,ans:integer;
begin
  readln(n);
  ans:=0;
  while n>0 do begin
    ans:=ans+n mod 10;
    n:=n div 10;
  end;
  writeln(ans);
end.
 
例3:輸入一個正整數,將這個正整數的各位數字逆序輸出。
var
  n:integer;
begin
  readln(n);
  while n>0 do begin
    write(n mod 10);
    n:=n div 10;
  end;
end.
 
思考:如何優化,使得輸入120,輸出21。
 
例4:輸入兩個正整數,求這兩個正整數的最大公約數。
分析:採用展轉相除法求m和n的最大公約數,即:設m=n+r(0<=r<n),則m和n的最大公約數與n和r的最大公約數相同,當r等於0,這時的n就是m和n的最大公約數。若r不等於0,再對n和r重複上面過程,直到r=0爲止。
例如:求231和63的最大公約數
231 mod 63=42
63 mod 42=21
42 mod 21=0
因此42和21的最大公約數爲21,由此得出231和63的最大公約數也爲21。
 
var
  a,b,c:integer;
begin
  readln(a,b);
  while b>0 do begin
    c:=a mod b;
    a:=b;
    b:=c;
  end;
  writeln(a);
end.
 
思考:你會求兩個數的最小公倍數嗎?
 
例5:輸入一個大於1的天然數N,將N分解成質因數的乘積。
例如:
N=120
120=2*2*2*3*5
 
var
  n,i:integer;
  f:boolean;
begin
  readln(n);
  write(n,'=');
  f:=false;
  i:=2;
  while n>=i do begin
    while n mod i=0 do begin
      if f then write('*') else f:=true;
      write(i);
      n:=n div i;
    end;
    i:=i+1;
  end;
end.
 
例6:求2到1000之間的素數,一行打印十個素數。
var
  i,k:integer;
  prime:boolean;
begin
  for i:=2 to 1000 do begin
    prime:=true;
    k:=2;
    while (k<=trunc(sqrt(i))) and prime do begin
      if i mod k=0 then prime:=false;
      k:=k+1;
    end;
    if prime then write(i:8);
  end;
end.
 
2、做業
一、zerojudge:
基礎題:a02四、a03八、a12一、a14七、a14九、a73八、d070、d35六、d69三、d899
思考題:a21五、a30七、b330、c07九、d25五、d593
 
二、利用公式π/4=1-1/3+1/5-1/7+……,求π的值,要求精確到最後一項小於0.0001爲止。
三、打印輸出一百到一億之間的,既是徹底平方數又是迴文數的全部正整數(徹底平方數是一個正整數的平方數,迴文數即爲左右對稱的正整數)。例如:121,它是11的平方,也是左右對稱的天然數。
四、輸入兩個正整數,求這兩個正整數的最小公倍數。(設這兩個數分別是m和n,另設一個整型變量i,則m*i就是m的i倍。令i向n變化,每次增長1,在此過程當中,當m*i能被n整除時,m*i即爲所求。)
相關文章
相關標籤/搜索