实验三 参考答案

2020-04-21 00:42

实验三 循环结构程序设计(参考答案)

1、设计程序sy3-1.c ,要求打印小学九九乘法表。 算法分析:

根据九九乘法表可知,该表共有9行,第i行有i个表达式,而且表达式中的操作数和行、列数相关,因此可以用嵌套的双重循环来实现,外循环控制行数(循环变量从1到9),内循环控制每行的表达式个数(循环变量从1变到i)。 参考答案:

# include void main() {

int i,j;

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

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

printf(\ printf(\ } }

运行结果:

2、设计程序sy3-2.c ,要求编程计算x,其中x和n均由键盘输入2。 算法分析:

要计算x的n次方,即是n次x相乘,其中x可以是整型或实型,而n必须是整型;另外要考虑结果的类型,若x和n比较大,一般的int型容易产生溢出。 参考答案:

# include void main() { int i,n;

float x,p=1; /*累乘器要赋初值1*/ printf(\

scanf(\ /*以逗号分隔输入的已知数据x和n的值*/ for(i=1;i<=n;i++)

p=p*x;

printf(\}

n

运行结果:

3、设计程序sy3-3.c,已知祖父年龄70岁,长孙20岁,次孙15岁,幼孙5岁,问要过多少年,三个孙子的年龄之和同祖父的年龄相等,试用单重循环结构编程实现。 算法分析:

这个程序可以用穷举法来实现,1年、2年、3年……,每加一年都判断三个孙子的年龄之和是否同祖父的年龄相等,若相等则不加了,这个时候所加的年数为我们需要的结果。 参考答案:

# include void main() {

int i,a,b,c,d;

a=20; b=15; c=5; d=70; i=1;

while(a+i+b+i+c+i!=d+i)

i++;

printf(\} 运行结果:

4、设计程序sy3-4.c ,有一数列:2/1,3/2,5/3,8/5,…求出这个数列的前10项之和。 算法分析:

这是一个序列累加的算法,第一项的值是2/1,之后每一项的规律是:分母为前一项的分子,分子为前一项分子分母之和;另外注意在除运算中若分子分母都为整数则结果也为整数,显然在这道题中分子分母的类型应为实型。 参考答案:

# include void main() {

int i;

float s=0,a=2,b=1,c,t; for(i=1;i<=10;i++) { t=a/b; s=s+t; c=a; a=a+b; b=c;

/*计算确定分子分母后当前项的值*/ /*将当前项t的值累加到求和变量s当中*/ /*将前一项的分子暂存于c变量中*/

/*修改下一项的分子为前一项分子分母之和*/ /*修改下一项的分母为前一项的分子*/

}

printf(\

} 运行结果:

5、设计程序sy3-5.c ,一球从200米高度自由落下,每次落地后反跳回原高度的四分之一,再落下。编程求它第10次落地时共经过的路程及第10次落地后反弹的高度。 算法分析:

该题也是进行多次加操作、求最终和的问题。在这里要定义一个变量(s)记录小球反复落地总共经历的高度,还要定义一个变量(h)表示小球每次反弹起来的高度。需要注意的一点是,小球第一次落地时经历的路程为初始高度,即s初值为200,在第一次落地后,s中每次累加的是两倍的h值(弹起和再落下),这个过程只需再重复九次即可。 参考答案:

# include void main()

{

float s=200,h=s/4; int i;

for(i=2;i<=10;i++) { s=s+2*h; h=h/4; }

printf(\ printf(\} 运行结果:

/*记录第一次落地经过的路程和第一次反弹的高度*/

6、设计程序sy3-6.c ,要求求出满足“百位减去十位等于个位”的所有三位整数,并按一行5个数输出结果。 算法分析:

该算法可用循环穷举所有的三位整数,逐一判断是否满足条件,并设置一个计数器,计找到的满足条件数的个数,当计数器为5的倍数的时候输出回车换行。 参考答案:

# include void main() {

int n=0,a,b,c,i; //计数器n要赋初值0 for(i=100;i<=999;i++) //穷举所有的三位整数 {

a=i/100; //分解百位 b=i/10; //分解十位 c=i; //分解个位 if(a-b==c)

{ printf(\

//输出满足条件的数

n++;

if(n%5==0) printf(\ }

}

printf(\} 运行结果:

7、设计程序sy3-7.c ,要求从键盘上输入整数m和k,输出大于且紧靠m的k个素数。 算法分析:

该题用到判素数的算法,从输入的m+1开始往上找,找够k个结束。 参考答案:

# include # include void main() {

int m,k,i,j,q;

printf(\scanf(\for(m=m+1; k>0 ;m++) { q=sqrt(m); //可以为q=m-1或q=m/2

for(j=2;j<=q;j++) if(m%j==0) break; if(j>q)

{ printf(\ k--; } }

printf(\}

运行结果:

8、中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?请编程解决该问题。(文件名存为sy3-8.c) 算法分析:

设鸡翁、鸡母、鸡雏的个数分别为x,y,z,题意给定共100钱要买百鸡,若全买公鸡最多买20只,显然x的值在0~20之间;同理,y的取值范围在0~33之间,可得到下面的不定方程:

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

所以此问题可归结为求这个不定方程的整数解。由程序设计实现不定方程的求解与手工计算不同。在分析确定方程中未知数变化范围的前提下,可通过对未知数可变范围的穷举,验证方程在什么情况下成立,从而得到相应的解。 参考答案:

# include

void main() {

int x,y,z;

for(x=0;x<=20;x++) for(y=0;y<=33;y++)

{ z=100-x-y; //鸡的数目够100

if( z%3==0 && x*5+y*3+z/3==100 ) //购买鸡的钱够100,注意z必须是3的整数倍 printf(\ y:%d z:%d\\n\ //输出此种组合 } } 运行结果:

9、编写程序sy3-9.c ,输入一个正整数,计算并显示该整数的各位数字之和,例如,整型数1987的各位数字之和是1+9+8+7,等于25。 算法分析:

由于输入的整数位数不确定,所以用条件型循环while,逐一累加整数的个位,然后舍弃个位。 参考答案:

# include void main() { int s=0; long n;

printf(\ scanf(\


实验三 参考答案.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2015生物竞赛详解 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: