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
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
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
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
int main()
{int i,sum=0,m,n;scanf("%d",&n);for(i=1;i<=n;i++) //for(i=0;i0;i--){scanf("%d",&m);sum=sum+m;}	printf("sum=%d\n",sum);return 0;
}

现在,针对高斯那个求和问题,我们是不是可以轻易写出程序了。

#include
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
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
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
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语句一共可以有多少种写法??


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部