上机实验五循环结构-参考答案 下载本文

内容发布更新时间 : 2024/6/24 20:07:10星期一 下面是文章的全部内容请认真阅读。

读书破万卷 下笔如有神

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

学号:

姓名:

一.目的要求

1. 掌握用for、while、do-while语句实现循环的基本技巧; 2. 掌握循环次数不确定的解题技巧;

3. 掌握break语句、continue语句在循环语句中的作用以及不同之处; 4. 掌握多重循环的编程技巧。

二.实验内容

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

源程序1: 用for语句实现

#include void main() { int i,x1,x2,x; x1=x2=1; printf(\ /*Line 5: 输出前2项*/ for(i= 3 ; i<=20; i++){ x=x1+x2; printf(\ /*Line 8*/ if( i==0 ) printf(\/*每行输出10项*/ x1= x2 ; x2= x ; } } 编译、连接并运行该程序,则显示

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

源程序2: 用while语句实现

#include void main()

{ int i,x1,x2,x; x1=x2=1;

printf(\ /*输出前2项*/ i= 3 ;

while( i<=20 ){ x=x1+x2;

printf(\ if( !(i) ) printf(\ /*每行输出10项*/

读书破万卷 下笔如有神

x1= x2 ; x2= x ; i++ ; } }

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

#include void main() { int i,x1,x2,x; x1=x2=1; printf(\ /*输出前2项*/ i= 3 ; do{x=x1+x2; printf(\ if( !(i) ) printf(\ /*每行输出10项*/ x1= x2 ; x2= x ; i++ ; }while( i<=20 ); }

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

x2x3x4x5x6s?x??????...

2!3!4!5!6!源程序如下:

#include #include double fact( int n); /*函数说明*/ void main() { int i; double x,item,s=0; printf(\ /*输入实数x */ i=1; do{ item= pow(x,i) / fact(i) ; /*用数学库函数pow()和自定义函数fact(),求加项item*/ s= s+item; /*line 11*/ i++; }while( fabs(item) >= 0.00005 ); /*循环条件:加项item的绝对值不小于10-5*/ printf(\ /*输出算式的值,保留4位小数*/ } /* 自定义函数fact() */ double fact( int n) { int i; double f=1; for(i=1; i<=n; i++) f*= i; /*line 21*/ return f; } 读书破万卷 下笔如有神

编译、连接并运行程序,输入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.

源程序如下:

#include #include int prime( int n); void main() { int a,b,k ; for(k=6; k<=100; k+=2 ){ //逐个处理6~100之间的偶数k for( a=3; a sqrt(n) ) return 1; //n是素数,返回1 else return 0; //若为假,n不是素数返回0 }

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

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