上机实验五循环结构-参考答案

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

上机实验五循环结构程序设计

学号: 姓名:

一.目的要求

1.掌握用for、while、do-while语句实现循环的基本技巧;

2.掌握循环次数不确定的解题技巧;

3.掌握break语句、continue语句在循环语句中的作用以及不同之处;

4.掌握多重循环的编程技巧。

二.实验内容

【实验题1】. 程序填空:分别用for、while、do-while语句编程,输出菲波那契数列的前20项,要求每行输出10项。

源程序1:用for语句实现

编译、连接并运行该程序,则显示

思考:line 5和line 8行中printf()函数的格式控制符均为”%6d”, 假如均改为”%d”, 输出结果有何不同?

输出的数据无间隔

源程序2:用while语句实现

#include

void main()

{ int i,x1,x2,x;

x1=x2=1;

printf("%6d%6d",x1,x2); /*输出前2项*/

i= 3 ;

while( i<=20 ){

x=x1+x2;

printf("%6d",x);

if(!(i%10) ) printf("\n"); /*每行输出10项*/

x1= x2 ; x2= x ;

i++ ;

}

}

源程序3: 用do-while 语句实现

【实验题2】程序填充:输入double 型变量x 的值,计算下列算式的值,直到最后一项的绝对值小于10-5。

23456

...2!3!4!5!6!

x x x x x s x =++++++ 源程序如下:

编译、连接并运行程序,输入0.5, 则显示:;输入 1 ,则显示:;输入1.7,则显示:。略

line 21中的表达式“f*=i”,等同于表达式“f=f*i ”;同理,line 11中的表达式“s= s+item”也可替换为“s+=item ”.

【实验题3】程序填空:验证哥德巴赫猜想——任何一个大于6的偶数均可表示为两个素数之和。例如:6=3+3,8=3+5,10=5+5,…,18=7+11。要求将6-100之间的偶数均表示为素数之和,一行输出5组。

【分析】

1. 本程序采用双层循环:外层循环负责对6~100之间的偶数逐个输出加法式子;内层循环负责为一个特定的偶数k, 找出相应的素数a和b.

2. 对于偶数k(k>=6),符合条件的两个素数a和b必然位于区间[3, k-1].(为什么不从2开始?)

3. 由于k=a+b,通过内层循环试探性地找出第一个加数a后,第二个加数b可用推算而得,再调用函数prime()来判断a、b是否是素数,如果两者均为素数,则停止寻找素数,并输出k=a+b.

源程序如下:

【实验题4】程序填空:输入一个整数,从高位开始逐位分割各位数字,如输入7358,则输出7 3 5 8(20XX年春笔试真题)

【分析】

我们已经学习了如何用整除运算和求余运算求出一个整数number的位数、以及从低位到高位的各位数字。本题则是从高位向低位逐步分解各个数位,关键是先求出这个整数是几位数?

如果已知number是k位数,那么该整数整除10k-1,就可得到最高位的数字;然后对剩余部分除以10k-2,得到下一个数位上的数字;再对剩余部分除以10k-3,…实例如下:

被除数number k 最高位权重power=10k-1高位数字number/power 余数7358 4 1000 7 358

358 3 100 3 58

58 2 10 5 8

8 1 1 8 0

0 -----------结束!

源程序如下:

编译、连接并运行程序,

输入-79,输出:;如果输入4,则输出;如果输入27354,则输出。

问题1:为在Line 7要复制number,而不直接使用number来求位数k?

后面的程序中还需要用到number的值来求各个数位的数字

问题2:为什么在该程序中,求最高位的权重power=10k-1时,不直接使用数学库函数pow(10,k),而是用for循环来解决幂运算?

pow()函数的返回值为double型,不适合后面的while循环中的整除和求余运算

【实验题5】程序设计:百文百鸡问题:已知公鸡每只5文钱,母鸡每只3文钱,小鸡1文钱3只,请输出用100文买100只鸡的全部解,即公鸡、母鸡、小鸡应各买几只?---请参照搬砖问题。

源程序:

源程序:

#include

void main( )

{ int cock, hen,chick;

for( cock=0; cock<=20; cock++)

for( hen=0; hen<=55; hen++)

{

chick= 100- cock –hen;

if( cock*5 + hen*3 + chick/3 == 100)

printf( " cock: %d, hen %d, chick: %d \n", cock, hen, chick);

}

}

相关文档
最新文档