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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值