最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

C语言第三课 for循环例子

IT圈 admin 39浏览 0评论

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,退出循环。

发布评论

评论列表 (0)

  1. 暂无评论