for語句——通過計數來控制迴圈
阿新 • • 發佈:2018-11-08
高斯計算:1+2+。。。+100
- 問題:聰明的他是如何進行計算的呢?
1+100=101, 2+99=101。。。50+51=101,一共50個101,所以101*50=5050就可以了。
其實,學完這節課之後,你會有更簡單的方法來求得類似問題的解。
思考:1+2+3+4+5=?
步驟1:定義一個變數sum=0來儲存求和的結果,定義一個變數n,初始值為1.
步驟2:sum=sum+n;
步驟3:n的值增1,即n++;
步驟4:如果n的值小於等於5,則轉步驟2;否則,輸出sum。
#include<stdio.h> int main() { int sum=0,n; for(n=1;n<=5;n++) sum=sum+n; printf("sum=%d\n",sum); return 0; }
該程式就是用for語句來實現迴圈的,sum=sum+n;語句一共執行了5次,每次的n是不同的,通過5次執行該語句,實現了5個數據的累加。
再來看一個例項
【例項】從鍵盤輸入5個整數,計算並輸出它們求和的結果。
#include<stdio.h>
int main()
{
int a,b,c,d,e,sum=0;
scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
sum=a+b+c+d+e;
printf("sum=%d\n",sum);
return 0;
}
上述方法的弊端:如果要計算100個從鍵盤輸入的整數的和呢?難道要定義100個變數來儲存這100個整數的值嗎?顯然是可以的,但又太愚蠢了。正確的做法是:
#include<stdio.h>
int main()
{
int i,sum=0,m;
for(i=1;i<=5;i++) //for(i=0;i<5;i++) //for(i=5;i>0;i--)
{
scanf("%d",&m);
sum=sum+m;
}
printf("sum=%d\n",sum);
return 0;
}
可以通過單步執行來檢視具體執行情況。每一個迴圈的過程,i,m和sum的值均是變化的。語句sum=sum+m; 右側的sum是執行讀操作,獲取它的值,而左側的sum是執行寫操作,把相加後的值寫到sum的空間中。
for語句是一種通過計數來控制迴圈的方法。達到數目了,迴圈結束。
- 試想:如果想計算從鍵盤輸入n個整數的和。該怎麼做呢?n的值未知。
#include<stdio.h>
int main()
{
int i,sum=0,m,n;
scanf("%d",&n);
for(i=1;i<=n;i++) //for(i=0;i<n;i++) //for(i=n;i>0;i--)
{
scanf("%d",&m);
sum=sum+m;
}
printf("sum=%d\n",sum);
return 0;
}
現在,針對高斯那個求和問題,我們是不是可以輕易寫出程式了。
#include<stdio.h>
int main()
{
int i,sum=0;
for(i=1;i<=100;i++)
{
sum=sum+i;
}
printf("sum=%d\n",sum);
return 0;
}
**
深層次思考:如何快速計算1+2+3+。。。。+100的值呢?
**
可以通過50次迴圈,第一次,sum加上1和100,最後一次sum加上50和51。
#include<stdio.h>
int main()
{
int i,j,sum=0;
for(i=1,j=100;i<=j;i++,j--) //通過逗號表示式給i和j賦初值
{
sum=sum+i+j;
}
printf("sum=%d\n",sum);
return 0;
}
接著思考:如果要計算2+4+6+。。。+n???
#include<stdio.h>
int main()
{
int i,sum=0,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
sum=sum+2*i;
}
printf("sum=%d\n",sum);
return 0;
}
如果要計算:n!=123…n
#include<stdio.h>
int main()
{
int i,p=1,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
p=p*i;
}
printf("%d!=%d\n",n,p);
return 0;
}