上机实验五循环结构 参考答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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()函数的格式控制符均为”m”, 假如均改为”%d”, 输出结果有何不同?
输出的数据无间隔
源程序2:用while语句实现
#include
void main()
{ int i,x1,x2,x;
x1=x2=1;
printf(mm,x1,x2); /*输出前2项*/
i= 3 ;
while( i<=20 ){
x=x1+x2;
printf(m,x);
*/项10每行输出/* printf(\
); ) !(i_x0010_) (if
读书破万卷下笔如有神
x1= x2 ; x2= x ;
i++ ;
}
}
源程序3:用do-while语句实现
-5。x的值,计算下列算式的值,直到最后一项的绝对值小于10【实验题2】程序填充:输入double 型变量23456xxxxxs?x??????...2!3!4!5!6!源程序如下:
读书破万卷下笔如有神
编译、连接并运行程序,输入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的位数、以及从低位到高位的各位数字。本题则是从高位向低位逐步分解各个数位,关键是先求出这个整数是几位数?
下笔如有神读书破万卷k-2k-1,1010,就可得到最高位的数字;然后对剩余部分除以如果已知number是k位数,那么该整数整除k-3 ,…实例如下:10得到下一个数位上的数字;再对剩余部分除以
k-1高位数字number/power 最高位权重power=10余数被除数number k 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的值来求各个数位的数字
k-1时,不直接使用数学库函数pow(10,k),而是用为什么在该程序中,问题2:求最高位的权重power=10for循环来解决幂运算?
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);
}
}