实验四 循环结构【带答案】
- 格式:doc
- 大小:67.50 KB
- 文档页数:7
实验4-2 循环结构【知识点回顾】1.continue语句1)功能:当运行到该语句时,它将导致本周期剩余的循环部分被忽略,提前开始下一循环周期。
如果continue语句处于嵌套结构中,它仅仅影响包含它的最里层的结构。
2)说明:如果它不是简化了代码,反而使代码更复杂难懂,就不要使用continue。
一般,如果将循环剩余部分放在一个else代码块中,则可避免使用continue。
2.break语句1)功能:循环中的break语句导致程序提前终止并退出本层循环。
如果break语句位于嵌套循环中,它只影响包含它的最里层的循环。
2)说明:注意循环中的break语句使得本循环结构流程拥有两个出口,通常,这意味着不同的情况,需要在循环结束时根据不同情况作出不同的处理。
3)流程图:见上方右侧图3.循环的嵌套【典型例题】1.例1,以下两个程序均为打印出一个左下三角阵,打印内容不同,注意仅有两行代码不同。
#include<stdio.h>#define CHAR '*'main(){int row, i,j;/*用户输入行数(送给变量row)*/printf("please input a integer: ");scanf("%d", &row);/*控制row行输出*/for(i=1; i<=row; i++){//打印i个指定字符CHARfor(j=1; j<=i; j++){putchar(CHAR);}//回车换行printf("\n");}printf("\n");} #include<stdio.h>#define CHAR 'A' //不同main(){int row, i,j;/*用户输入行数(送给变量row)*/printf("please input a integer: ");scanf("%d", &row);/*控制row行输出*/for(i=1; i<=row; i++){//打印i个指定字符CHARfor(j=1; j<=i; j++){putchar(CHAR+i-1);//不同}//回车换行printf("\n");}printf("\n");}设计思路如下图:2.例2,以下程序打印两个等腰三角形,如下图所示。
实验三循环结构程序设计班级学号姓名完成日期课(内、外)总计本实验用时间一、实验目的1、熟练掌握while语句,do-while语句和for语句的格式和功能,能够用这些语句实现循环结构程序设计的方法。
2、熟练掌握循环语句嵌套使用的基本形式,能够用循环语句实现多重循环。
3、掌握在循环结构程序设计中使用break语句和continue语句改变程序流程。
4、通过编程和调试程序,加深对while语句、do…while语句和for语句的理解,学习编程和测试的基本方法。
5、实验前复习while语句、do…while语句和for语句的概念。
二、实验内容1. 打印100-200之间的所有素数程序代码:#include <stdio.h>#include <math.h>void main(){ int i,j,m,flag;m=0;for(i=101;i<200;i+=2){flag=1;for(j=2;j<=(int)sqrt(i);j++)if(i % j ==0){ flag=0;break;}if(flag==1){ printf("%4d",i);m++;}if(m%5==0) printf("\n");}}printf("\n这样的数有%d个\n",m);}对程序进行测试,并观察运行结果。
将程序的运行情况写在下面。
『运行结果:』2. 编程输出如下上三角形式的九九乘法表。
1 2 3 4 5 6 7 8 9- - - - - - - - -1 2 3 4 5 6 7 8 94 6 8 10 12 14 16 189 12 15 18 21 24 2716 20 24 28 32 3625 30 35 40 4536 42 48 5449 56 6364 7281程序代码:#include <stdio.h>void main(){ int i,j;for(i=1;i<10;i++)printf("%-4d",i);printf("\n");for(i=1;i<10;i++)printf("%-4c",'-');printf("\n");for(i=1;i<10;i++){ for(j=1;j<i;j++)printf("%-4c",' ');for(j=i;j<10;j++)printf("%-4d",i*j);printf("\n");}}对程序进行测试,并观察运行结果。
实习四循环结构一、实习目的1.深刻理解循环结构的思想,熟练掌握for循环、while循环、do-while循环;2.能熟练运用循环结构、循环嵌套(结合分支结构)编程,解决求和、穷举、递推、求定积分、方程近似解等问题;3.熟悉循环执行的过程,掌握优化程序、提高程序运行效率的基本思想和方法。
二、实习内容1.例5-2,体会逗号表达式的应用;2.认真阅读第66-69页内容,验证其中的内容;3.试用for循环改写例5-5、例5-6程序;4.例5-9,体会程序的格式控制方法;5.例5-10,注意循环的嵌套及嵌套程序的缩进格式书写与编辑;6.例5-11到5-19用到了程序设计中的各种常用算法,请自己上机实习体会。
三、注意事项1.熟练掌握各种循环的结构,理解循环执行的过程;2.循环前有时需要为某些变量赋初值,如求和需要令累加器变量初值为0,求阶乘需要令累积器变量初值为1,否则变量初值是不确定的,导致结果错误;3.要防止发生死循环。
写程序时必须保证控制循环的表达式的值是不断改变的,最终会变到使循环条件为假而结束循环。
for循环一般通过修改表达式3,使表达式2为假;while循环、do while循环是在循环体中加入使循环趋于结束的语句而使循环结束;4.正确理解循环嵌套,外层循环变量每变化一次,内层循环变量从头开始;5.for循环结束后,循环变量不是等于终值,而是超过终值。
while、do while循环结束后循环变量终值如何,不能一概而论,由程序中语句和表达式决定;6.原设计N次循环,结果一次也不执行,这肯定是一开始循环条件就不满足。
如:⑴ for(;i<=100;i++){…},循环开始没有为i赋值,而i的实际值可能又>100;⑵ for(i=100;i<1;i--){…},表达式2写错了,条件一开始就不成立;7.死循环是条件表达式恒为真,遇到这种情况可用功能键终止循环,以下情况可以造成死循环:⑴漏掉循环变量值的修改语句,如:for(i=1;i<=100;) {…},缺少了表达式3,如果循环体中也没有i的增值语句,则i的值永远不会超过终值100;⑵循环体中对循环变量重新赋值,如:for(i=1;i<=100;i++){…;i=4;}由于循环体中i的值被改为4,所以其值永远不会大于终值。
第6章循环结构程序设计1.以下叙述正确的是()A、do-while语句构成的循环不能用其它语句构成的循环代替。
B、d o-while语句构成的循环只能用break语句退出。
C、用do-while语句构成的循环,在while后的表达式为非零时结束循环。
D、用do-while语句构成的循环,在while后的表达式为零时结束循环。
答案:D2.以下程序的输出结果是( )A、10,1 9,2B、9,8 7,6C、10,9 9,0D、10,10 9,1main( ){int x=10,y=10,i;for(i=0;x>8;y=++i)printf("%d,%d",x--,y);}答案:D注解:循环执行2次,由x控制循环的执行次数;输出值为两次循环过程中x每次的自减值和y在for语句的第三个表达式中得到的i自增变化后的值。
3.以下程序的输出结果是( )A、2 0B、3 1C、3 2 1D、2 1 0main( ){ int n=4;while(n--) printf("%d ",--n);}答案:A4.以下程序的输出结果是( )A、#*#*#B、#####C、*****D、*#*#*main( ){ int i;for(i=1;i<6;i++){ if(i%2) {printf("#");continue;}printf("*");}printf("\n");}答案:A注解:循环控制变量i的值从1变化到5,i为1、3、5时,i%2为1,if语句的条件为真,则执行if后的子句,输出#,然后执行continue语句,终止本次循环的执行,进入下一轮循环,i为2、4时,i%2为0,if语句的条件为假,则if后的子句并不执行,直接输出*,所以最后的输出为#*#*#。
5.以下程序的输出结果是( )A、编译不通过,无输出B、acegC、acegiD、abcdefghimain( ){ int i;for(i='A';i<'I';i++,i++) printf("%c",i+32);printf(" \n");}答案:B注解:循环控制变量i的取值为A、C、E、G,将它们转化为小写字母的格式输出。
实验四循环结构【实验目的】1.掌握For语句和while循环语句的使用。
2.掌握循环的规则及其执行过程。
3.掌握如何控制循环条件,防止死循环或不循环。
【实验内容】1.编写程序,找出7的倍数中十位数为2的所有3位数。
x=100while x<1000:y=x/100a=(x-100*y)/10z=x-100*y-10*aif (10*y+a-2*z)%7==0 and a==2:print xx+=1else:x+=1 或:x=100while x<1000:if x%7==0 and x//10%10==2:print xx+=1或:for x in range(100,1000):if x%7==0 and x//10%10==2:print x2.编写程序用Print语句输出2000年至2500年间的所有闰年,要求每行输出8个。
y=2001count=0flag=Truewhile flag:if y%4==0 and y%100!=0 or y%400==0:if count%8==0:printprint y,y+=1count+=1else:y+=1if y==2500:flag=False3.编写程序解决爱因斯坦台阶问题:有人走一台阶,若以每步走两级则最后剩下一级;若每步走三级则剩两级;若每步走四级则剩三级;若每步走五级则剩四级;若每步走六级则剩五级;若每步走七级则刚好不剩。
问台阶至少共有多少级?L=[]for x in range(0,1000):if x%2==1 and x%3==2 and x%4==3 and x%5==4 and x%6==5 and x%7==0:L.append(x)print min(L)至少共有119级4.我国有13亿人口,如果按人口年增长0.8%计算,多少年后将达到26亿?n=13y=0while n<26:y+=1n=n*(1+0.008)print y(87年)5.编程计算1!+2!+3!+...+10!的结果。
实验标题:循环实验1 完善程序A_计算s=1+1/2+1/3+…+1/n的值实验内容和要求:【程序功能】从键盘输入正整数n,计算1+1/2+1/3+…+1/n并存放到考生文件夹中,删除扩展名为dsp、ncb、dsw、plg、opt、obj和exe等文件。
main(){int i,n;float sum=0;printf("please input n: ");scanf("%d",&n);for(i=1; i<=n ;i++)sum=sum+ 1.0/n ;printf("n=%d,sum= %.2f ",n,sum);system("pause");}实验标题:循环实验2 完善程序A_输出九九乘法表实验内容和要求:【程序功能】输出如下格式的九九乘法表1 12 2 43 3 6 94 4 8 12 165 5 10 15 20 256 6 12 18 24 30 367 7 14 21 28 35 42 498 8 16 24 32 40 48 56 649 9 18 27 36 45 54 63 72 811 2 3 4 5 6 7 8 9 【要求】最左边一列为行序号,最下面一行为列序号,其它数据为对应行序号与列序号的乘积。
将源程序保存为文件xh2.c,并存放到考生文件夹中,删除扩展名为dsp、ncb、dsw、plg、opt、obj和exe等文件。
main (){int i, j;for (i = 1; i <=9; i++) /*对列进行循环*/{printf ("%-3d", i); /*输出列的序号*/for (j = 1; j<=i ; j++) /*输出三角形乘法表*/printf ("%-3d", i*j );printf ("\n");}printf (" ");for (i = 1; i <=9; i++) /*输出最下面一行的列序号*/printf ("%3d",i);system("pause");}实验标题:循环实验3 完善程序B_输出m到n之间的素数并统计素数个数实验内容和要求:【程序功能】从键盘输入正整数m和n,显示m到n之间的所有素数。
实验4循环结构——参考答案实验四循环结构程序设计参考程序⼀、程序调试⽅法实验上机题⽬:编写程序利⽤公式:!!2!112n x x xe n++++= 求xe 的近似值。
找出并改正以下源程序中错误,得出正确的运⾏结果。
#includevoid main(){int i;float a,e,x;printf("请输⼊x 的值:");scanf("%d",&x); //改为 scanf("%f",&x);e=0; //改为 e=1;i=0; //改为 i=1;a=1;while(a>1e-6); //去掉尾部的分号{a=a*x/i;e=e+a;i++;}printf("循环次数为:%d 次,e 的%d 次⽅为:%f\n",i,x,e);//改为printf("循环次数为:%d 次,e 的%.2f 次⽅为:%f\n",i,x,e);}程序正确的运⾏结果为:请输⼊x 的值:1.0循环次数为:11次,e 的1.00次⽅为:2.718282Press any key to continue⼆、编写程序1、分别利⽤三种循环语句编程,求1+2+3+…50之和。
参照例⼦4-12 (1)while 循环 #includevoid main(){int sum=0,i=1;while(i<=50){sum=sum+i;i++;}printf("1+2+3+...50=%d\n",sum);}(2)do~while循环#includevoid main(){int sum=0,i=1;do{sum=sum+i;i++;}while(i<=50);printf("1=2+3+...50=%d\n",sum);}(3)for循环#includevoid main(){int sum=0,i;for(i=1;i<=50;i++)sum=sum+i;printf("1+2+3+...50=%d\n",sum);}2、编程,输⼊10个整数,求其中正数的个数及其平均值(精确到⼩数点后两位)。
实验四循环结构程序设计2(参考答案)(1)编写程序sy4-1.c,输入n,计算并输出如下多项式的值:S n=1+1/2!+1/3!+1/4!+…+1/n!。
例如输入n为15时,输出1.718282。
算法分析:第一项可以看成1/1!,用循环控制累加n个分式,分式的分母是i!,分子固定为1。
参考答案:# include <stdio.h>void main(){double s=0,p=1;int i,n;scanf("%d",&n);for(i=1;i<=n;i++){p = p * i ; //计算分母i!s = s + 1 / p ; //累加}printf("s=%lf\n",s);}运行结果:(2)编写程序sy4-2.c,输入n,根据以下公式计算s:,例如当n=11时,结果为1.833333。
算法分析:该多项式的分母是累加。
参考答案:# include <stdio.h>void main(){double sn=0,s=0;int i,n;scanf("%d",&n);for(i=1;i<=n;i++){s = s + i ; //计算分母1~i的累加和sn = sn + 1 / s ;}printf("sn=%lf\n",sn);}运行结果:(3)编写程序sy4-3.c,计算3~n之间所有素数的平方根之和,要求:输入n,输出结果。
例如,输入n 的值是100,则输出结果是148.874270。
注意n应在2~100之间。
算法分析:穷举3~n之间的数找素数,若是素数则累加她的平方根。
参考答案:# include <stdio.h># include <math.h>void main(){int i,j,n,flag;double s=0;scanf("%d",&n);for(i=3;i<n;i++) //穷举3~n之间找素数{flag=1; //假设当前的i是素数,标志变量设为1for(j=2;j<i;j++) //穷举要判断是否是素数的i的除数,范围2~i-1if(i%j==0) //若i能被j整除,则不是素数{ flag=0; break; } //标志变量改为0,并终止循环if( flag == 1 )s = s + sqrt( i ); //若i是素数,则累加sqrt(i)}printf("s=%f\n",s);}运行结果:(4)编写程序sy4-4.c,根据以下公式求p的值,(m与n为两个正整数且m>n)。
实验四循环结构程序设计(解答)1.改错题(1)下列程序的功能为:求1~100之和(和值为5050)并输出。
请纠正程序中存在错误,使程序实现其功能,程序以文件名sy4_1.c存盘。
#include <stdio.h>main(){int i,sum=0;i=1;while(i<100)sum=sum+i;i++;printf(“The sum from 1 to 100 is %d\n”,sum);}改正后的程序:#include <stdio.h>main(){int i,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("The sum from 1 to 100 is %d\n",sum);}(2)下列程序的功能为:倒序打印26个英文字母。
请纠正程序中存在错误,使程序实现其功能,程序以文件名sy4_2.c存盘。
#include <stdio.h>main(){char x;x='z';while(x!='a'){printf("%3d",x);x++;}}改正后的程序:#include <stdio.h>main(){char x;x='z';while(x!='a'-1) 或while(x>='a') 或 while(x!=96){printf("%3c",x);x- -;}}(3)下列程序的功能为:输出如下的图形,要求顶端的*定位在第21字符位置,请纠正程序中存在错误,使程序实现其功能,程序以文件名sy4_3.c存盘。
****************#include <stdio.h>void main(){ int i,j;for (i=0;i<4;i++){ for (j=0;j<=20;j++)printf("\n");for (j=0;j<2*i+1;j++)printf("*");}}改正后的程序:#include <stdio.h>void main(){ int i,j;for (i=0;i<4;i++){ for (j=0;j<=20-i;j++)printf(" ");for (j=0;j<2*i+1;j++)printf("*");printf("\n");}}2.程序填空(1)下列程序的功能为:用辗转相除法求两个正整数的最大公约数;请填写适当的符号或语句,使程序实现其功能,程序以文件名sy4_4.c存盘。