c语言循环结构上机习题

  • 格式:doc
  • 大小:91.50 KB
  • 文档页数:12

下载文档原格式

  / 16
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、计算n的阶乘(n!),n的取值在1~10之间。分别使用while、do…while和for 语句实现。(三个程序)

给循环变量赋初值

循环条件

循环体

循环变量的增值

2、输入一行字符,分别统计输入了多少个字母、数字、空格和其他字符。

3、假设函数f(x)=3x2+2x+1,试利用for循环语句分别求出1<=x<=9的f(1)~f(9)各函数值。

4、有分数序列2/1,3/2,5/3,8/5,13/8,21/13…求这个数列的前20项和。

(分析提示:每个分子等于前一个数据分子与分母的和,每个分母等于前一个数据的分子)

5、输出显示1~100之间可以被n整除的所有整数,运行时n由键盘输入。要求每一行显示5个数,并且统计一共有多少个整数能被n整除。

6、下面程序的功能是从键盘上输入若干学

生的学习成绩,统计并输出最高成绩和最低成绩,当输入为负数时结束输入。

main()

{ float x,amax,amin;

scanf("%f",&x);

amax=x;

amin=x;

while( ①)

{ if(x>amax) amax=x;

if( ②) amin=x;

scanf("%f",&x);

}

printf("\namax=%f\namin=%f\n",amax,a min);

}

7、使用循环语句输出以下图形

8、有一个数学等式:AB*CD=BA*DC,式中的一个字母代表一位数字,试找出所有符合上述要求的乘积式并打印输出。

8、一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问

一百只鸡中公鸡、母鸡、小鸡各多少)。

分析:

这是一个古典数学问题,设一百只鸡中公鸡、母鸡、小鸡分别为x,y,z,问题化为三元一次方程组:

100=x*5+y*3+z/3

100=x+y+z

这里x,y,z为正整数,且z是3的倍数;由于鸡和钱的总数都是100,可以确定x,y,z 的取值范围:

1) x的取值范围为1~20

2) y的取值范围为1~33

3) z的取值范围为3~99,步长为3

对于这个问题我们可以用穷举的方法,遍历x,y,z的所有可能组合,最后得到问题的解。

数据要求

问题中的常量:无

问题的输入:无

问题的输出:

int x,y,z /*公鸡、母鸡、小鸡的只数*/ 初始算法

1.初始化为1;

2.计算x循环,找到公鸡的只数;

3.计算y循环,找到母鸡的只数;

4.计算z循环,找到小鸡的只数;

5.结束,程序输出结果后退出。

算法细化

算法的步骤1实际上是分散在程序之中的,由于用的是for循环,很方便的初始条件放到了表达式之中了。

步骤2和3是按照步长1去寻找公鸡和母鸡的个数。

步骤4的细化

4.1 z=1

4.2 是否满足百钱,百鸡

4.2.1 满足,输出最终百钱买到的百鸡的结果

4.2.2 不满足,不做处理4.3 变量增加,这里注意步长为3 程序代码如下

#include "stdio.h"

main()

{

int x,y,z;

for(x=1;x<=20;x++)

{

for(y=1;y<=33;y++)

{

for(z=3;z<=99;z+=3)

{

if((5*x+3*y+z/3==100)&&(x+y+z==100))/*是否满足百钱和百鸡的条件*/ printf("cock=%d,hen=%d,chicken=%d\n ",x,y,z);

}

}

}

}

分析

程序运行结果如下:

cock=4,hen=8,chicken=78

cock=8,hen=11,chicken=81

cock=12,hen=4,chicken=84

对于这个问题实际上可以不用三重循环,而是用二重循环,因为公鸡和母鸡数确定后,小鸡数就定了,即。请同学们自己分析二重

循环和三重循环的运行次数,做为练习自己调试这一方法。

程序修改:

1、统计使用三重循环的循环次数

2、使用二重循环完成,并统计循环次数

#include

int main()

{

int i1,i2,j1,j2,a,b,c,d;

for(i1=11;i1<=99;i1++)

for(j1=i1+1;j1<=99;j1++)

{a=i1/10;

b=i1%10;

c=j1/10;

d=j1%10;

if(a!=b&&a!=c&&a!=d&&b!=c&&b!=d&& c!=d)

{ i2=b*10+a;

j2=d*10+c;}

if(i1*j1==i2*j2)

{

printf("%d*%d=%d*%d\t",i1,j1,i2,j2);

} }

return 0;

}

#include

void main()

{

int a,b,c,d;

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

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