从零开始学编程---第一步-C语言(十一)
题目
用for语句计算s=1+2+3+...+99+100
如何开始?
首先定义一变量s,用来装数与数相加的和
再定义一变量a 用来装1,2,3,...99,100的数字
初始化s=0;
s=s+a a=1 s=0+1 此时s=1 再a++
s=s+a a=2 s=1+2 a++
s=s+a a=3 s=(1+2)+3 a++
s=s+a a=4 s=(1+2+3)+4 a++
.............
由此可见,我们只要让a从1循环到100就可以了
for(a=1;a<=100;a++)
程序为
#include <stdio.h>
main()
{
int a,s=0; //这里s初始化为0
for(a=1;a<=100;a++) //这里a是初始化为1
s=s+a;
printf("s=%d\n",s);
}
结果是5050
注意s=s+a可以省略为s=+a
s=s+a 可能有人不明白 其实跟a=a+1一个道理
这样理解: 新S的值(未知)=旧S的值+a 跟数学完全不是一个道理
这个程序你可以看到s=1+2+3+...+99+100的运算过程
#include <stdio.h>
main()
{
int a,s=0;
for(a=1;a<=100;a++)
{
s+=a;
printf("s=%d+%d\n",s,a);
}
}
运行后你会发现第一句是s=1+1,而不是s=0+1
我来解释一下,当循环第一次
s+=a; s=0+1 这里的s已经为1
printf("s=%d+%d\n",s,a); 所以这里打印的S是1
所以一开始就是打印s=1+1
我们需要修改一下,
printf("s=%d+%d\n",s,a);
s+=a;
调换个顺序就不会出现此现象
最终程序
#include <stdio.h>
main()
{
int a,s=0;
for(a=1;a<=100;a++)
{
printf("s=%d+%d\n",s,a);
s+=a;
}
}
还有一种方法打印1+2+3+...+99+100的运算过程
看程序
#include <stdio.h>
main()
{
int a,b,s1,s=0;
for(a=1,b=1;a<=100,b<=100;a++,b++)
{
s+=a;
s1=(b-1)*(b/2);
printf("%d=%d+%d\n",s,s1,a);
}
}
这个大概大家很难看懂
首先a的变量是做什么用的大家应该都知道
那么b,s1变量是做什么的
其实程序不要b,s1也能完成程序结果
b,s1这里的作用是显示运算过程,b为循环变量(控制循环),s1为旧s值的变量
变量
s=s+a 理解为:新S的值=旧s的值+a 这里旧s变量就是s1的变量
也就是s=s1+a 这里s1只是字面量(显示用的),并不在程序里运算,真正运算的其实还是变量s和变量a
s1怎么来的?
经过我们推算前几个表达式
1=0+1
3=1+2
6=2+3
10=6+4
15=8+5
21=15+6
。。。。。 (后面不需要你在推算拉)
中间数字(也就是s1)从第1个表达式到第100个表达式的数字是
0,1,2,6,8,15..........
要依次打印这些数字,可要动点脑筋了,这就需要高中数学所学的数列知识了
我们可以根据这组数字的规律,推出这组数字数列公式为(n-1)*(n/2);也就是可以推出第N个的数字是几
既然总共只有100个算术表达式,那这组数列也就是100个数字
这时我们就需要循环了
s1=(n-1)*(n/2);我们要从第一个数字开始依次打印s1的值,直到第100个数字
所以需要一个循环变量来控制循环
for(b=1;b<=100:b++)
s1=(b-1)*(b/2); 这里要把b看成n
当然你完全可以用a代替b,因为a的循环控制和b的循环控制一样
如下
#include <stdio.h>
main()
{
int a,s1,s=0;
for(a=1;a<=100;a++)
{
s+=a;
s1=(a-1)*(a/2);
printf("%d=%d+%d\n",s,s1,a);
}
}
这样很简洁,很清晰,之所以加个变量b是为了让你们更好的理解s1那层循环
这个程序可见还是要有一定数学功底才能做的出,数列知识也许大家都忘了
提示:我这个程序可能讲解的不详细,如果让你越看越晕,那你最好别再看下去了这个程序,不然会陷在里面,编程的算法很多,有很多方法来解决,现在不明白这个不代表以后不明白,这个包含了一定的数学知识,现在如果实在不明白,你可以忽略,并不影响你接下来的学习,
另外,说个死循环的例子
for(b=1;b<=100;b++)
{
b=(b-1)*(b/2);
printf("s=%d\n",b);
}
这种是死循环,你能看出来吗?
当第一次循环 b=1 b=(b-1)*(b/2); b=0 打印 然后返回for再b++ b又等于1
如此反复,b一直从0和1跳,没有结束循环的条件,则死循环
用了一会for语句,你应该发现了for有强大的控制功能
比如
for(a=1,b=1;a<=100,b<=100;a++,b++)
你就可以看到for括号里可以包含多个赋值语句,控制语句,以及表达式
for(a=1;a<=100;a++) 相当于for(a=1;a<=100;a=a+1)
这种只是我们最基本用的,你必须掌握这种
以后还有多种形式,我们会渐渐接触到
补充一句:for(a=1;a<=100;a++) 和for(a=1;a<=100;++a) 一样的
再来一题:输入一个数,从0开始,输出n个连续的偶数和奇数
例如我输入9 它就打印
0 2 4 6 8
1 3 5 7 9
这题怎么入手?首先先弄清偶数列和奇数列的规律,这就需要我们的数学所学过的数列知识了,也许大家不记得了
偶数列从0开始的数列公式为 2(n-1) 从2开始就是2n
奇数从1开始的数列公式为 2n-1
现在关键是怎么循环
定义变量a存储偶数和奇数,变量n为我们输入的数
先循环偶数 初始化a=0 这样我就可以用2n公式
for(a=0;a<=n;a++)
printf("%d ",2*n );
这样子可以了吗?
错,你会发现如果n=2 它就会输入 0 2 4 这不是我们想要的,我们要它输入的是0,2
所以我们得控制一下n的值 让它变小 我们让程序每循环一次就n--
for(a=0;a<=n;a++,n--)
printf("%d ",2*n );
输入2 n=2
当a=0时 a<=2满足条件 打印0 返回for 接着a++ n-- 此时a=1;n=1
当a=1时 a<=1满足条件 打印2 返回for 接着a++ n-- 此时a=2;n=0
当a=2 a<=0条件不满足 退出循环
打印出来的就是0,2
奇数循环也是这样控制
但先初始化a=1
for(a=1;a<=n;a++,n--)
printf("%d ",2*n-1);
但是这样会得不到我们能想要的结果
为什么?因为上面偶数循环中n早已我们n--变成了0,此时n=0,不是我们所输入的n=2
那么n怎么回归成我们一开始输入的数?
很简单,定义一个变量t,在我们输入后,就把n的值先存放到t里面
然后
for(a=1,n=t;a<=n;a++,n--)
n就回归到我们之前输入的值了
程序如下
#include <stdio.h>
main()
{
int a,n,s=0,t;
puts("请输入一个数");
scanf("%d",&n);
t=n;
printf("偶数列:");
for(a=0;a<=n;a++,n--)
{
printf("%d ",2*a);
}
putchar('\n');
printf("奇数列:");
for(a=1,n=t;a<=n;a++,n--)
{
printf("%d ",2*a-1);
}
putchar('\n');
}
注意是先t=n 后n=t 等号的含义你知道的
必须2*n和2*n-1
另外还有一种简单的方法,你们也更容易理解
我们知道能被2整除的是偶数,不能被2整除的就是奇数
程序如下
#include <stdio.h>
main()
{
int a,n,s=0,t;
puts("请输入一个数");
scanf("%d",&n);
t=n;
printf("偶数列:");
for(a=0;a<=n;a++)
{
if(a%2==0)
printf("%d ",a);
}
putchar('\n');
printf("奇数列:");
for(a=1,n=t;a<=n;a++)
{
if(a%2!=0)
printf("%d ",a);
}
putchar('\n');
}
知道%的意思吧,这个程序不需要n--控制循环条件,程序更容易理解
我为什么不把偶数奇数写在同一循环里,那是因为打印的时候不能按你想象的去打印,它循环一次会同时打印偶数和奇数
我们还可以不仅打印n连续奇数和偶数,而且计算偶数项所有的和和奇数项所有的和
这个你们应该能做出来吧
程序如下
#include <stdio.h>
main()
{
int a,n,s=0,t;
puts("请输入一个数");
scanf("%d",&n);
t=n;
printf("偶数列:");
for(a=0;a<=n;a++)
{
if(a%2==0)
{printf("%d ",a);
s+=a;
}
}
printf("\n偶数项的和:%d",s);
s=0;
putchar('\n');
printf("奇数列:");
for(a=1,n=t;a<=n;a++)
{
if(a%2!=0)
{printf("%d ",a);
s+=a;
}
}
putchar('\n');
printf("奇数项的和:%d\n",s);
}
我再用while完成相同的功能
#include <stdio.h>
main()
{
int a,n,s=0,oushu=0,jishu=0;
puts("请输入一个数");
scanf("%d",&n);
a=1;
while(a<=n)
{
s+=a;
if(a%2==0)
oushu+=a;
else
jishu+=a;
a++;
}
printf("%d个数相加为%d,偶数和为%d,奇数和为%d\n",n,s,oushu,jishu);
}
最新内容
热点内容
- QQ群
- 返回首页
- 返回顶部