2014年全國計算機等級考試上半年的考試已經結束了,下半年的計算機等級考試將會在9月20日至24日舉行,下個月將開始進行報名,同時計算機等級考試上半年成績已經公布,考生可通過自己所在省份的人事網查詢上半年3月份考試成績。
一、循環(huán)語句
(一)、for循環(huán) 它的一般形式為:
for(<初始化>;<條件表過式>;<增量>)
語句;
初始化總是一個賦值語句,它用來給循環(huán)控制變量賦初值;條件表達式是一個關系表達式,它決定什么時候退出循環(huán);增量定義循環(huán)控制變量每循環(huán)一次后按什么方式變化。這三個部分之間用;分開。
例如:
for(i=1;i<=10;i++)
語句;
上例中先給i賦初值1,判斷i是否小于等于10,若是則執(zhí)行語句,之后值增加1。再重新判斷,直到條件為假,即i>10時,結束循環(huán)。
注意:
(1).for循環(huán)中語句可以為語句體,但要用{和}將參加循環(huán)的語句括起來。
(2).for循環(huán)中的初始化、條件表達式和增量都是選擇項,即可以缺省,但;不能缺省。省略了初始化,表示不對循環(huán)控制變量賦初值。省略了條件表達式,則不做其它處理時便成為死循環(huán)。省略了增量,則不對循環(huán)控制變量進行操作,這時可在語句體中加入修改循環(huán)控制變量的語句。
(3).for循環(huán)可以有多層嵌套。
例如:
for(;;) 語句;
for(i=1;;i+=2) 語句;
for(j=5;;) 語句;
這些for循環(huán)語句都是正確的。
main()
{
int i,j;
printf(i j\n);
for(i=0;i<2;i++)
for(j=0;j<3;j++)
printf(%d %d\n,i,j);
}
輸出結果為:
i j
0 0
0 1
0 2
1 0
1 1
1 2
用for循環(huán)求1+2+……+100的和:
main()
{
int sn=0,i;
for(i=1;i<=100;i++)
sn+=i; /*1+2+……+100*/
printf(%d\n,sn);
}
從程序可以看出,使用循環(huán)語句可以大大簡化代碼。
(二)、while循環(huán) 它的一般形式為:
while(條件)
語句;
while循環(huán)表示當條件為真時,便執(zhí)行語句。直到條件為假才結束循環(huán)。并繼續(xù)執(zhí)行循環(huán)程序外的后續(xù)語句。
例如:
#include stdio.h
main()
{
char c;
c='\0'; /*初始化c*/
while(c!='\n') /*回車結束循環(huán)*/
c=getche(); /*帶回顯的從鍵盤接收字符*/
}
上例中,while循環(huán)是以檢查c是否為回車符開始,因其事先被初始化為空,所以條件為真,進入循環(huán)等待鍵盤輸入字符;一旦輸入回車,則c='\n',條件為假,循環(huán)便告結束。與for循環(huán)一樣,while循環(huán)總是在循環(huán)的頭部檢驗條件,這就意味著循環(huán)可能什么也不執(zhí)行就退出。
注意:
(1).在while循環(huán)體內也允許空語句。
例如:
while((c=getche())!='\n');
這個循環(huán)直到鍵入回車為止。
(2).可以有多層循環(huán)嵌套。
(3).語句可以是語句體, 此時必須用{和}括起來。
用while循環(huán)求1+2+……+100的和:
main()
{
int sn=0,i=0;
while(++i<=100)
sn+=i; /*求1+2+……+100*/
printf(%d\n,sn);
}
(三)、do--while循環(huán) 它的一般格式為:
do
{
語句塊;
}
while(條件);
這個循環(huán)與while循環(huán)的不同在于:它先執(zhí)行循環(huán)中的語句,然后再判斷條件是否為真,如果為真則繼續(xù)循環(huán);如果為假,則終止循環(huán)。因此,do-while循環(huán)至少要執(zhí)行一次循環(huán)語句。
同樣當有許多語句參加循環(huán)時,要用{和}把它們括起來。
用do--while循環(huán)求1+2+……+100的和:
main()
{
int sn=0,i=1;
do
sn+=i; /*求1+2+……+100*/
while(++i<=100);
printf(%d\n,sn);
}
從上面三個程序看出,使用for,while和do--while求解同樣的問題,基本思路都差不多,只是在第一次計算時,注意初值。
二、循環(huán)控制
(一)、break語句
break語句通常用在循環(huán)語句和開關語句中。當 break用于開關語句switch中時,可使程序跳出switch而執(zhí)行switch以后的語句;如果沒有break語句,則將成為一個死循環(huán)而無法退出。break在switch中的用法已在前面介紹開關語句時的例子中碰到,這里不再舉例。
當break語句用于do-while、for、while循環(huán)語句中時,可使程序終止循環(huán)而執(zhí)行循環(huán)后面的語句,通常break語句總是與if語句聯在一起。即滿足條件時便跳出循環(huán)。
例如:
main()
{
int sn=0,i;
for(i=1;i<=100;i++)
{
if(i==51) break; /*如果i等于51,則跳出循環(huán)*/
sn+=i; /*1+2+……+50*/
}
printf(%d\n,sn);
}
可以看出,最終的結果是1+2+……+50。因為在i等于51的時候,就跳出循環(huán)了。自己寫寫怎樣在while和do--while循環(huán)中增加break語句。
注意:
1. break語句對if-else的條件語句不起作用。
2. 在多層循環(huán)中,一個break語句只向外跳一層。
例如:
main()
{
int i,j;
printf(i j\n);
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{
if(j==2) break;
printf(%d %d\n,i,j);
}
}
輸出結果為:
i j
0 0
0 1
1 0
1 1
當i==0,j==2時,執(zhí)行break語句,跳出到外層的循環(huán),i變?yōu)?。
(二)、continue語句
continue語句的作用是跳過循環(huán)本中剩余的語句而強行執(zhí)行下一次循環(huán)。
continue語句只用在for、while、do-while等循環(huán)體中, 常與if條件語句一起使用,用來加速循環(huán)。
例如:
main()
{
int sn=0,i;
for(i=1;i<=100;i++)
{
if(i==51) continue; /*如果i等于51,則結束本次循環(huán)*/
sn+=i; /*1+2+……+50+52+……+100*/
}
printf(%d\n,sn);
}
從程序中可以看出,continue語句只是當前的值沒有執(zhí)行,也就是說當前的值跳過去了,接著執(zhí)行下次循環(huán)。
main()
{
int i,j;
printf(i j\n);
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{
if(j==1) continue;
printf(%d %d\n,i,j);
}
}
輸出結果為:
i j
0 0
0 2
1 0
1 2
(三)、goto語句
goto語句是一種無條件轉移語句,與BASIC中的goto語句相似。goto語句的使用格式為:
goto 標號;
其中標號是Turbo C 2.0中一個有效的標識符,這個標識符加上一個:一起出現在函數內某處,執(zhí)行goto語句后,程序將跳轉到該標號處并執(zhí)行其后的語句。標號既然是一個標識符,也就要滿足標識符的命名規(guī)則。另外標號必須與goto語句同處于一個函數中,但可以不在一個循環(huán)層中。通常goto語句與if條件語句連用,當滿足某一條件時,程序跳到標號處運行。goto語句通常不用,主要因為它將使程序層次不清,且不易讀,但在多層嵌套退出時,用goto語句則比較合理。
main()
{
int sn=0,i;
for(i=1;i<=100;i++)
{
if(i==51) goto loop; /*如果i等于51,則跳出循環(huán)*/
sn+=i; /*1+2+……+50*/
}
loop: ;
printf(%d\n,sn);
}
可以看出,這兒的goto語句和break作用很類似。
這兒的loop: ;
printf(%d\n,sn);
也可以寫成loop: printf(%d\n,sn);
main()
{
int sn=0,i;
for(i=1;i<=100;i++)
{
if(i==51) goto loop; /*如果i等于51,則跳出本次循環(huán)*/
sn+=i; /*1+2+……+50+52+……+100*/
loop: ;
}
printf(%d\n,sn);
}
可以看出這兒的loop語句和continue的作用類似。
但是某些情況下又必須使用goto語句,否則會讓程序大大臃腫。如:
main()
{
int i,j,k;
printf(i j k\n);
for(i=0;i<2;i++)
for(j=0;j<3;j++)
for(k=0;k<3;k++)
{
if(k==2) goto loop;
printf(%d %d %d\n,i,j,k);
}
loop: ;
}
輸出結果為:
i j k
0 0 0
0 0 1
如果不使用goto語句,而使用break,continue語句,應該這樣
main()
{
int i,j,k;
printf(i j\n);
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
for(k=0;k<3;k++)
{
if(k==2) break;
printf(%d %d %d\n,i,j,k);
}
if(k==2) break;
}
if(k==2) break;
}
}
輸出結果為:
i j k
0 0 0
0 0 1
所以在同時跳出多層循環(huán)時,應該使用goto語句。記住,所有的goto語句其實都是可以用break,continue代替的。
下面舉幾個例子:
1.求兩個整數的最大公約數。例如10和15的最大公約數是5。
分析:最大公約數一定小于等于最小的那個數一半,同時能被兩數整除。
main()
{
int num1,num2,i,min;
scanf(%d%d,&num1,&num2);
min=num1
for(i=min/2;i>0;i--)
if(num1%i==0&&num2%i==0) break;
printf(最大公約數為%d\n,i);
}
2.求1!+2!+……+n!(n<10)
main()
{
int n,i;
long temp=1,sn=0; /*從9!以后,所得的值就超過了int范圍*/
scanf(%d,&n);
for(i=1;i<=n;i++)
{
temp*=i;
sn+=temp; /*如果沒有這一步,求的就是n!*/
}
printf(%ld\n,sn);
}
那么想想,如果求1!+3!+5!+……+n!應該怎么辦?
3.判斷一個整數是不是素數(素數就是只能被本身和1整除的數)。
#include math.h
main()
{
int num,i,flag=0;
scanf(%d,&num);
for(i=2;i
{
flag=0; /*標志變量復位*/
if(num%i==0)
{
flag=1;
break;
}
}
if(flag==0) printf(是素數\n);
else printf(不是素數\n);
}
可以說,在所有的C語言書上,都有判斷素數的例題。它的編程思想是:把一個變量作為標志變量,用來標志是不是素數;循環(huán)體是從2到sqrt(num),因為如果一個數不是素數的話,一定能分解成num=num1*num2,它們中的最小值一定小于sqrt(num),所以循環(huán)的時候只要到 sqrt(num)就可以了。同時要注意變量復位的問題。
在計算機培訓欄目中我們整理了大量的輔導資料,包括網絡工程師、軟件工程師、電腦維修的基本常識輔導材料,還有計算機等級考試培訓課程等內容。