Goto語句的實用性,教你突出重重包圍!

基本上所有學過c語言編程的都會發現,編程書上對goto的描述基本是一筆帶過,有的甚至直接指出不建議在程序裡使用goto語句來進行編程。而讓許多人奇怪的是goto語句從字義表面上看似乎是“非常好用的”。這常讓許多新手編程者摸不著頭腦。

Goto語句的實用性,教你突出重重包圍!

記得以前曾有人問過陽哥(頭條號:陽哥說IT),說:記得編程書上都不推薦用goto語句的,但是看很多源代碼,goto也用的很多。有時候自己寫一個模塊,也覺得此時用goto是最方便的一種方式。那麼,又是從什麼方面,使得goto語句不被鼓勵使用呢?是維護性,或編譯器的角度等等?

在這裡陽哥(頭條號:陽哥說IT)就簡單的說下這“奇怪的”goto語句的兩個用途:

  1. 與if語句一起構成循環結構。
  2. 從多層循環的內層循環跳到外層循環。

可能到這,大家有些不夠了解含義,那現在咱們用一個實例來更加清晰的瞭解一下這個用法。

用goto語句求解平方和

實例說明:任意給出一個自然數k,數k不為0,計算其各位數字的平方和k1,再計算k1的各位數字的平方和k2,......,如此重複,最終得到數1或145,此時再做數的平方和運算,他最終的結果是1或145.編程效果如下圖:


Goto語句的實用性,教你突出重重包圍!


編程如下:

#include

/*引用預處理命令,預處理包含stdio.h的頭文件*/

main()

/*定義一個主函數,所有程序在執行前都開始於主函數,且結束於主函數*/

{

long a[10],n,i;

/*定義長整型變量n和i,長整型數組[10],其包含10個元素*/

p:printf("please input a number:\n");

/*對於p循環:請輸入一個數*/

scanf("%ld",&n);

/*輸入這個數n*/

if(n==0)

/*如果n等於0*/

goto p;

/*則跳出這個循環,重新輸入*/

while(n!=1&&n!=145)

/*當n值不等於1和不等於145時*/

{

printf("n=%ld->",n);

/*輸出 n->,其中,%ld指的是長整型標識*/

i=1;

/*i值賦1*/

while(n>0)

/*當n大於0時*/

{

a[i++]=n%10;

/*將n的個位數字存放到a的數組之中*/

n/=10;

/*取n除10後的數值,並繼續循環*/

}

n=0;

/*n值賦0*/

i--;

/*i值累減*/

while(i>=1)

/*當i>=1時*/

{

printf("%ld*%ld",a[i],a[i]);

/*輸出兩個相同元素的乘積*/

if(i>1)

/*如果i>1*/

printf("+");

/*輸出+*/

n+=a[i]*[i];

/*n等於兩元素相乘的累加*/

i--;

/*i值繼續累減*/

}

printf("=%ld\n",n);

/*輸出長整型值,其含義是將最終求得的平方和n輸出*/

}

return 0;

/*返回空值,0指空,沒有,即將0返回給主函數main,其目的是告訴給main函數此程序執行完了*/

}


Goto語句的實用性,教你突出重重包圍!


如果大家有問題,歡迎大家留言討論,我都會一一解答呦,歡迎關注,給你不一樣的自己!


分享到:


相關文章: