2024年4月15日发(作者:寇学智)
C语言第三课 for循环例子
[ 2009-3-10 0:24:00 | By: 曹金华 ]
14
推荐
1.有一只猴子吃一堆果子,已知每天吃昨天剩下的果子的一半再多一个,直到第10天才吃完。问原
来这堆果子有多少个?
题目变换:关于小明分糖果题;关于楼层小球弹跳后求楼高题。
本题题目分析:第10天才吃完,那就是说第11天剩下0个。
设第10天没吃之前还有x个,依题意,可得:x-(1/2x+1)=0 ——>x=2
同样的道理,设第9天没吃之前还有x个,可得:x-(1/2x+1)=2 ——>x=(2+1)*2;
从这两个表达式可以看出,s(i)=2*(s(i+1)+1);这个表达式说明了前后两天果子数之间的关系。
程序:
#i nclude
main()
{
int i,s=0;
for(i=10;i>0;i--)
s=2*(s+1);
printf("s=%dn",s);
getch();
} 程序说明:
for循环变量用于控制循环次数,可以换成for(i=1;i<=10;i++)
2. 国际象棋棋盘有64格,若在第1格放1粒谷;第2格放2粒谷;第3格放4粒谷;第4格放8粒
谷……如此一直放到第64格。假设2000000粒谷有一顿重,问需要多少吨谷才够放?
第几格 1 2 3 4 …… 64
每格粒数 1 2 4 8 …… ?
总粒数 1 3 7 15 …… ?
规律:每一格粒数应为前一格粒数的2倍。n=n*2;
每一格总粒数应为前一格总粒数加上当前格的粒数。s=s+n;
再加上循环,用于控制循环的次数;
程序
#i nclude
main()
{
int i;
float n,s;
i=1;
n=1.0;
s=1.0;
for(i=2;i<=64;i++)
{n=n*2;s=s+n;}
printf("s=%fn",s/2000000);
getch();
} 程序说明:
1) 本程序主要难点在于发现前后两格之间粒数的关系,在求得总粒数之前,必须先求出当前格的粒
数。然后再进行累加。
2) 循环变量主要用于控制循环的次数。
3. 有一个数列,已知第一个数是0,第二个数是1。从第三个数开始每一个数是它前面两个数之和。
求出这个数列的第3个至第24个数各是多少?
分析:
第几项 (1) (2) (3) (4) …… (24)
第
几
项
的
值 0 1 ? ? …… ?
a b c=a+b ? …… ?
a
新第一项 b
新第二项 c=a+b …… ?
…… ?
…… c=a+b
首先求第三个数,c=a+b=0+1=1; 求第四个数时,为了继续使用c=a+b;需要把第三项的值赋给b,第
二项的值赋给a。如此循环,直至求出第24项。
程序:
main()
{
int a,b,c,i;
a=0;b=1;
for(i=3;i<=24;i++)
{
c=a+b;
printf(“%6d”,c);
a=b;
b=c;
}
} 程序解释:
1) 循环变量i的作用是用于计算循环的次数,本身与循环体无关,因此我们也可以写成:for(i=1;i
<=22;i++)
2) 如果需要把第1,2个数也输出来,可以在for循环之前输入:printf(“0 1”);
3) 不能将最后两个赋值语句颠倒。
4. 求1+x/1!+x2/2!+x3/3!+……+xn/n!=?
分析:第0项是1,第一项是x/1,第二项是(x*x)/(1*2),第二项/第一项=x/2;
第二项是(x*x)/(1*2),第三项是(x*x*x)/(1*2*3),第三项/第二项=x/3;
…………
第n-1项是xn-1/(n-1)!,第n项是xn/n!,则第n项/第n-1项=x/n;
由此可以看出,我们为了求和,必须先求出第n项的值:
s(n)=s(n-1)*x/n;这个式子是我们解题的关键步骤。
程序
#i nclude
main()
{
int i,n,x;
float t,s;
printf("please input the result of nn");
scanf("%d",&n);
printf("please input the result of xn");
scanf("%d",&x);
t=1.0;s=1.0;
for(i=1;i<=n;i++)
{
t=t*x/i;
s=s+t;
}
printf("s=%fn",s);
} 程序说明:
1) 在使用scanf函数前应用一条printf语句进行提示;
2) 解题的关键在于循环体的求出:
t=t*x/i; s=s+t;
5. 5.双重循环的使用(循环的嵌套使用)
双重循环的引入:
for(a=1;a<=3;a++)
{
for(b=1;b<=4;b++)
printf(“%d*%d=%d”,a,b,a*b);
printf(“n”);
}
执行过程:
a 1 2 3
b 1 2 3 4 1 2 3 4 1 2 3 4
令a<=3为条件1,b<=4为条件2。
当a=1时,先执行b循环:
b=1,输出,然后b=2,输出,直到b=4时,输出,然后b=5条件2为假,退出循环2,执行换行输出,
返回循环1,此时,a++.
当a=2时,先执行b循环:
b=1,输出,然后b=2,输出,直到b=4时,输出,然后b=5条件2为假,退出循环2,执行换行输出,
返回循环1,此时,a++.
当a=3时,先执行b循环:
b=1,输出,然后b=2,输出,直到b=4时,输出,然后b=5条件2为假,退出循环2,执行换行输出,
返回循环1,此时,a++.
a=4,不符合条件1,退出循环。
2024年4月15日发(作者:寇学智)
C语言第三课 for循环例子
[ 2009-3-10 0:24:00 | By: 曹金华 ]
14
推荐
1.有一只猴子吃一堆果子,已知每天吃昨天剩下的果子的一半再多一个,直到第10天才吃完。问原
来这堆果子有多少个?
题目变换:关于小明分糖果题;关于楼层小球弹跳后求楼高题。
本题题目分析:第10天才吃完,那就是说第11天剩下0个。
设第10天没吃之前还有x个,依题意,可得:x-(1/2x+1)=0 ——>x=2
同样的道理,设第9天没吃之前还有x个,可得:x-(1/2x+1)=2 ——>x=(2+1)*2;
从这两个表达式可以看出,s(i)=2*(s(i+1)+1);这个表达式说明了前后两天果子数之间的关系。
程序:
#i nclude
main()
{
int i,s=0;
for(i=10;i>0;i--)
s=2*(s+1);
printf("s=%dn",s);
getch();
} 程序说明:
for循环变量用于控制循环次数,可以换成for(i=1;i<=10;i++)
2. 国际象棋棋盘有64格,若在第1格放1粒谷;第2格放2粒谷;第3格放4粒谷;第4格放8粒
谷……如此一直放到第64格。假设2000000粒谷有一顿重,问需要多少吨谷才够放?
第几格 1 2 3 4 …… 64
每格粒数 1 2 4 8 …… ?
总粒数 1 3 7 15 …… ?
规律:每一格粒数应为前一格粒数的2倍。n=n*2;
每一格总粒数应为前一格总粒数加上当前格的粒数。s=s+n;
再加上循环,用于控制循环的次数;
程序
#i nclude
main()
{
int i;
float n,s;
i=1;
n=1.0;
s=1.0;
for(i=2;i<=64;i++)
{n=n*2;s=s+n;}
printf("s=%fn",s/2000000);
getch();
} 程序说明:
1) 本程序主要难点在于发现前后两格之间粒数的关系,在求得总粒数之前,必须先求出当前格的粒
数。然后再进行累加。
2) 循环变量主要用于控制循环的次数。
3. 有一个数列,已知第一个数是0,第二个数是1。从第三个数开始每一个数是它前面两个数之和。
求出这个数列的第3个至第24个数各是多少?
分析:
第几项 (1) (2) (3) (4) …… (24)
第
几
项
的
值 0 1 ? ? …… ?
a b c=a+b ? …… ?
a
新第一项 b
新第二项 c=a+b …… ?
…… ?
…… c=a+b
首先求第三个数,c=a+b=0+1=1; 求第四个数时,为了继续使用c=a+b;需要把第三项的值赋给b,第
二项的值赋给a。如此循环,直至求出第24项。
程序:
main()
{
int a,b,c,i;
a=0;b=1;
for(i=3;i<=24;i++)
{
c=a+b;
printf(“%6d”,c);
a=b;
b=c;
}
} 程序解释:
1) 循环变量i的作用是用于计算循环的次数,本身与循环体无关,因此我们也可以写成:for(i=1;i
<=22;i++)
2) 如果需要把第1,2个数也输出来,可以在for循环之前输入:printf(“0 1”);
3) 不能将最后两个赋值语句颠倒。
4. 求1+x/1!+x2/2!+x3/3!+……+xn/n!=?
分析:第0项是1,第一项是x/1,第二项是(x*x)/(1*2),第二项/第一项=x/2;
第二项是(x*x)/(1*2),第三项是(x*x*x)/(1*2*3),第三项/第二项=x/3;
…………
第n-1项是xn-1/(n-1)!,第n项是xn/n!,则第n项/第n-1项=x/n;
由此可以看出,我们为了求和,必须先求出第n项的值:
s(n)=s(n-1)*x/n;这个式子是我们解题的关键步骤。
程序
#i nclude
main()
{
int i,n,x;
float t,s;
printf("please input the result of nn");
scanf("%d",&n);
printf("please input the result of xn");
scanf("%d",&x);
t=1.0;s=1.0;
for(i=1;i<=n;i++)
{
t=t*x/i;
s=s+t;
}
printf("s=%fn",s);
} 程序说明:
1) 在使用scanf函数前应用一条printf语句进行提示;
2) 解题的关键在于循环体的求出:
t=t*x/i; s=s+t;
5. 5.双重循环的使用(循环的嵌套使用)
双重循环的引入:
for(a=1;a<=3;a++)
{
for(b=1;b<=4;b++)
printf(“%d*%d=%d”,a,b,a*b);
printf(“n”);
}
执行过程:
a 1 2 3
b 1 2 3 4 1 2 3 4 1 2 3 4
令a<=3为条件1,b<=4为条件2。
当a=1时,先执行b循环:
b=1,输出,然后b=2,输出,直到b=4时,输出,然后b=5条件2为假,退出循环2,执行换行输出,
返回循环1,此时,a++.
当a=2时,先执行b循环:
b=1,输出,然后b=2,输出,直到b=4时,输出,然后b=5条件2为假,退出循环2,执行换行输出,
返回循环1,此时,a++.
当a=3时,先执行b循环:
b=1,输出,然后b=2,输出,直到b=4时,输出,然后b=5条件2为假,退出循环2,执行换行输出,
返回循环1,此时,a++.
a=4,不符合条件1,退出循环。