1.while語句
while語句用來構成當型循環,多用於解決循環次數事先不確定的問題。形式:
while(表達式)
{
循環體
}
功能:先判斷表達式值的真假,若爲真(非零)時,就執行循環體;否則,退出循環結構。
結構:
① 從何處來 ② 到何處去 ③ 如何修改循環變量 ④ 在條件滿足情況下做什麼事情;
循環的初始值+循環條件+循環體+循環變量的增量+具有唯一真值的表達式
流程:如圖所示
注意:
-
while語句中的表達式一般是關係表達式或邏輯表達,也可以是數值表達式或字符表達式,只要其值爲真(非0)即可繼續執行循環體
-
循環體語句可以爲任意類型,循環體如果包含一個以上的語句,應該用花括號起來,以複合語句的形式出現。如果不用花括號,則while語句的範圍只到while後面第一個分號處。
-
在循環體中應該有使循環趨向於結束的語句,以避免死循環
-
允許while語句的循環體中包含另一個while語句,從而形成循環的嵌套
例1:輸入一行字符,按字母、數字、和其他分成三類,分別統計各類字符的數目('\n’)不在統計範圍內。
3個整型變量,爲其統計各自數目的計算器
int a, //字母
int b, //數字
int c //其它
算法分析:
① 將各位計數器變量值置爲0;
② 讀入字符
③ 檢查c是否換行符,如果不是,則檢查c符合哪種字符條件,並將相應計數器變量的值加1,然後轉步驟③循環;如果c是換行符,則結束循環,轉爲步驟⑤
④ 輸出結果
#include "stdio.h"
main()
{
printf("請輸入一行字符:\n");
char c;
int a=0,b=0,d=0;
while((c=getchar())!='\n')
{
if(c>='a'&&c<='z'||c>'A'&&c<'Z')
{
a++;
}
else
{
if(c>='0'&&c<='9')
{
b++;
}
else
{
d++;
}
}
}
printf("字母有:%d\n",a);
printf("數字有:%d\n",b);
printf("符號有:%d\n",d);
return 0;
}
例2:輸入一正文,統計正文包含的行數、字數、字符數
算法分析:
(1)將標誌位state置爲初值0,表示字符不在子字,各計數器變量均爲0;
(2)讀一個字符c,如果不是EOF,則進行:
① 字符數+1;
② 若c是行數則行數+1;
③ 若c是空格符、換行符、製表符,則將標誌置爲0,表示c字符不在字中;若c爲非空白符,如果標誌位爲0(表示c是字符的第一個字符)則將字數+1,並修改標誌位爲1(表示當前字符c是一個字中的字符)
④ 循環步驟2
⑤ 如果c是EOF,則循環結束,轉步驟3
(3)輸出結果
#include "stdio.h"
#define IN 1
#define OUT 0
main()
{
int c,nl,nw,nc,state; //nc:字符數 nl:行數 //nw:字數
state=OUT;
nl=nw=nc=0;
printf("請輸入內容並以ctrl+z爲結束:\n");
while((c=getchar())!=EOF) //不等於-1,即爲真
{
++nc;
if(c=='\n')
{
++nl;
}
if(c=='\t'||c==' '||c=='\n')
{
state=OUT;
}
else
{
if(state==OUT)
{
state=IN;
++nw;
}
}
}
printf("字符數:%d\n",nc);
printf("行 數:%d\n",nl);
printf("字 數:%d\n",nw);
return 0;
}