c语言for循环作用,C语言for语句循环[转]

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=%d\n",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=%f\n",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(“m”,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 n\n");

scanf("%d",&n);

printf("please input the result of x\n");

scanf("%d",&x);

t=1.0;s=1.0;

for(i=1;i<=n;i++)

{

t=t*x/i;

s=s+t;

}

printf("s=%f\n",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,退出循环。

============================================================

5.2

多重循环程序设计案例

案例5.4

九九乘法表

【项目任务】

实现九九乘法表。

【设计思路】

实现九九乘法表的流程图如图5-3所示。

图5-3 九九乘法表流程图

【程序代码】

#include

main()

{

int i,j;

for(i=1;i<=9;i++)

{

for(j=1;j<=i;j++)

printf("%d*%d=%-3d",j,i,i*j);

printf("\n");

}

}

【运行结果】

1*1=1

1*2=2

2*2=4

1*3=3

2*3=6

3*3=9

1*4=4

2*4=8 3*4=12

4*4=16

1*5=5 2*5=10

3*5=15 4*5=20 5*5=25

1*6=6 2*6=12

3*6=18 4*6=24 5*6=30 6*6=36

1*7=7 2*7=14

3*7=21 4*7=28 5*7=35 6*7=42 7*7=49

1*8=8 2*8=16

3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64

1*9=9

2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

【知识拓展】

1.一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。

2.在一个循环体内如果有多个语句,应该用大括号括起来,这样就构成了复合语句。

案例5.5

金字塔图形

【项目任务】

输出以下图形。

*

***

*****

*******

*********

【设计思路】

从以上图形可以看出,每一行的星号数为该行行数乘以2再减1,每一行前面的空格数为5减去该行行数。用变量i控制行数,用变量j控制行前的空格数以及打印的星号数,循环5次。

【程序代码】

#include

main()

{

int i,j;

for(i=1;i<=5;i++)

{

for(j=1;j<=5-i;j++)

printf(" ");

for(j=1;j<=2*i-1;j++)

printf("*");

printf("\n");

}

}

【运行结果】

*

***

*****

*******

*********

【知识拓展】

1.该程序中临时变量i和j不断地被重新赋值,原值均被新值所替代。

2.一般来说,对于输出图形的任务,只要认真找出其中的规律,按照规律来编写代码就相对容易了。

3.参照给出的案例,编写相应的程序代码,输出以下图形。

* * * * *

* * * *

*

* * * * *

* * * * *

* * * * *

案例5.6

杨辉三角形

【项目任务】

输出以下杨辉三角形(要求输出6行)。

1

1

1

1

2 1

1

3 3 1

1

4 6 4 1

1

5 10 10 5 1

【设计思路】

(1)杨辉三角形最本质的特征是:它的竖直边和斜边都是由数字1组成的,而其余数则是等于这个数正上一行与左上一行的两个数之和。从杨辉三角形的特点出发,可以总结出:第n行有n+1个值(设起始行为第0行)。

(2)对于第n行的第j个值:(n>=2)

① 当j=1或j=n+1时,其值为1。

②当j!=1且j!=n+1时,其值为第n-1行的第j-1个值与第j个值之和。

【程序代码】

#include

#define N 6

main()

{

int n,i,j,k,a[N][N];

for(i=0;i

{

a[i][0]=1;

a[i][i]=1;

}

for(i=2;i

for(j=1;j<=i-1;j++)

a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=0;i

{

for(j=0;j<=i;j++)

printf("%-4d",a[i][j]);

printf("\n");

}

}

【运行结果】

1

1

1

1

2 1

1

3 3 1

1

4 6 4 1

1 5 10 10 5 1

【知识拓展】

1.本程序用到了二维数组,其定义的形式为:

类型说明符 数组名[常量表达式][常量表达式]

2.程序中,首先使用一个循环体对数组中代表杨辉三角形的两边赋值为1,第二个多重循环体的作用是对数组中代表杨辉三角形的非1数字进行计算和赋值。计算完毕后,值被存储在二维数组的相应位置,第三个多重循环体的作用是打印数组的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值