1. 程式人生 > >用c語言實現1+2+3+...+n求和

用c語言實現1+2+3+...+n求和

  在做藍橋杯題的時候,做到最簡單的等差數列求和,我就先用for迴圈寫了一個程式,其中的核心就是很簡單的

sum += i;

具體的函式如下:
#include <stdio.h>

int main()
{
	int n;
	int i;
	int sum = 0;
	printf ("輸入一個整數 n = ");
	scanf ("%d",&n);
	
	for (i = 1; i <= n; i++)
	{
		sum += i;
	}
	printf ("序列求和 sum = %d\n",sum);
	return 0;
}
由此函式的for迴圈,我想到了也可以用別的迴圈結構來寫,便整理了一下,寫了下來。

此程式是計算由1+2+...+10的和。

#include <stdio.h>

void main()
{
	int i;
	//for語句 
	int s1 = 0;
	for (i=1; i<=10; i++)
	{
		s1 += i;
	}
	printf ("s1=%d\n",s1);
	
	//while語句
	i = 1;
	int s2 = 0;
	while (i<=10)
	{
		s2 += i;
		i++;
	} 
	printf ("s2=%d\n",s2);
	
	//do...while語句
	i = 1;
	int s3 = 0;
	do
	{
		s3 += i;
		i++;
	} while(i<=10);
	printf("s3=%d\n",s3);
}

之後,我自己在計算結果與編譯執行的結果是否一樣時,用到了高斯公式,即“和=(首項+末項)*項數/2”,這樣便可以不需用到迴圈了,由此也可縮短了程式碼,但是若是別的數列,還是應該先找到它的規律,再用迴圈來做。
#include <stdio.h>

int main()
{
	long long n;
	scanf ("%lld",&n);
	long long sum = 0;
	sum = (1+n)*n/2;
	printf ("%lld\n",sum);
	return 0;
}

此外說明的是,由於是提交到做題網站上,定義數時用的是long long 型別,在用它所給的編譯器,輸出時,用“%l64d”,我試過了,
編譯能通過,但執行時,是不行的,得用“%lld”才可以。但是對於與long long 型別相同的__int64可以用“%l64d”輸出。