(三)、goto語(yǔ)句
goto語(yǔ)句是一種無(wú)條件轉(zhuǎn)移語(yǔ)句,與BASIC中的goto語(yǔ)句相似。goto語(yǔ)句的使用格式為:
goto 標(biāo)號(hào);
其中標(biāo)號(hào)是Turbo C 2.0中一個(gè)有效的標(biāo)識(shí)符,這個(gè)標(biāo)識(shí)符加上一個(gè):一起出現(xiàn)在函數(shù)內(nèi)某處,執(zhí)行g(shù)oto語(yǔ)句后,程序?qū)⑻D(zhuǎn)到該標(biāo)號(hào)處并執(zhí)行其后的語(yǔ)句。標(biāo)號(hào)既然是一個(gè)標(biāo)識(shí)符,也就要滿(mǎn)足標(biāo)識(shí)符的命名規(guī)則。另外標(biāo)號(hào)必須與goto語(yǔ)句同處于一個(gè)函數(shù)中,但可以不在一個(gè)循環(huán)層中。通常goto語(yǔ)句與if條件語(yǔ)句連用,當(dāng)滿(mǎn)足某一條件時(shí),程序跳到標(biāo)號(hào)處運(yùn)行。goto語(yǔ)句通常不用,主要因?yàn)樗鼘⑹钩绦驅(qū)哟尾磺,且不易讀,但在多層嵌套退出時(shí),用goto語(yǔ)句則比較合理。
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語(yǔ)句和break作用很類(lèi)似。
這兒的loop: ;
printf(%d\n,sn);
也可以寫(xiě)成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語(yǔ)句和continue的作用類(lèi)似。
但是某些情況下又必須使用goto語(yǔ)句,否則會(huì)讓程序大大臃腫。如:
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: ;
}
輸出結(jié)果為:
i j k
0 0 0
0 0 1
如果不使用goto語(yǔ)句,而使用break,continue語(yǔ)句,應(yīng)該這樣
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;
}
}
輸出結(jié)果為:
i j k
0 0 0
0 0 1
所以在同時(shí)跳出多層循環(huán)時(shí),應(yīng)該使用goto語(yǔ)句。記住,所有的goto語(yǔ)句其實(shí)都是可以用break,continue代替的。
下面舉幾個(gè)例子:
1.求兩個(gè)整數(shù)的最大公約數(shù)。例如10和15的最大公約數(shù)是5。
分析:最大公約數(shù)一定小于等于最小的那個(gè)數(shù)一半,同時(shí)能被兩數(shù)整除。
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(最大公約數(shù)為%d\n,i);
}
2.求1!+2!+……+n!(n<10)
main()
{
int n,i;
long temp=1,sn=0; /*從9!以后,所得的值就超過(guò)了int范圍*/
scanf(%d,&n);
for(i=1;i<=n;i++)
{
temp*=i;
sn+=temp; /*如果沒(méi)有這一步,求的就是n!*/
}
printf(%ld\n,sn);
}
那么想想,如果求1!+3!+5!+……+n!應(yīng)該怎么辦?
3.判斷一個(gè)整數(shù)是不是素?cái)?shù)(素?cái)?shù)就是只能被本身和1整除的數(shù))。
#include math.h
main()
{
int num,i,flag=0;
scanf(%d,&num);
for(i=2;i {
flag=0; /*標(biāo)志變量復(fù)位*/
if(num%i==0)
{
flag=1;
break;
}
}
if(flag==0) printf(是素?cái)?shù)\n);
else printf(不是素?cái)?shù)\n);
}
可以說(shuō),在所有的C語(yǔ)言書(shū)上,都有判斷素?cái)?shù)的例題。它的編程思想是:把一個(gè)變量作為標(biāo)志變量,用來(lái)標(biāo)志是不是素?cái)?shù);循環(huán)體是從2到sqrt(num),因?yàn)槿绻粋(gè)數(shù)不是素?cái)?shù)的話,一定能分解成num=num1*num2,它們中的最小值一定小于sqrt(num),所以循環(huán)的時(shí)候只要到sqrt(num)就可以了。同時(shí)要注意變量復(fù)位的問(wèn)題。
相關(guān)推薦:計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言教程匯總計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言常見(jiàn)知識(shí)點(diǎn)總結(jié)
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |