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!=123…n
#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语句一共可以有多少种写法??
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!