1. 程式人生 > >for語句——通過計數來控制迴圈

for語句——通過計數來控制迴圈

高斯計算: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!=123n

#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;
}

重中之重:儲存階乘值的變數p要初始化為1,而儲存相加和的變數sum要初始化為0.

思考,for語句一共可以有多少種寫法??