在做蓝桥杯题的时候,做到最简单的等差数列求和,我就先用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”输出。