20吴琛实验三.docx
- 文档编号:25740712
- 上传时间:2023-06-12
- 格式:DOCX
- 页数:19
- 大小:96.55KB
20吴琛实验三.docx
《20吴琛实验三.docx》由会员分享,可在线阅读,更多相关《20吴琛实验三.docx(19页珍藏版)》请在冰豆网上搜索。
20吴琛实验三
实验三循环控制
实验课程名:
高级语言程序设计(C)
专业班级:
电气本二学号:
20姓名:
吴琛
实验时间:
2012-4-18实验地点:
K4-202指导教师:
吴建设
一、实验目的和要求
1.熟练掌握用while语句、dowhile语句和for语句实现循环的方法。
2.掌握在程序设计中用循的方法实现一些常用算法。
并进一步学习调试程序的方法。
二、实验内容
1、任务名称
程序求和:
1+…+100,填空,实现该功能。
源代码:
#include
voidmain()
{
ints,i;
s=0;
for(i=1;i<=100;i++)
s=s+i;
printf("1+...+100=%d\n",s);
printf("学号:
20姓名:
吴琛实验三第一题");
}
思考:
(1)第5行能不能去掉?
其作用是什么?
不能,定义和的初始值。
(2)不用for语句,用while语句改写该程序,实现同样的功能。
#include
voidmain()
{
ints=0,i=1;
while(i<=100)
{
s=s+i;
i++;
}
printf("1+...+100=%d\n",s);
printf("学号:
20姓名:
吴琛实验三第一题");
}
运行结果:
(需要截图)
运行结果分析:
根据for循环的语句形式和while循环语句形式输入即可。
2、任务名称
比较下列两个程序。
(验证)
源代码:
/*第一个程序*/
#include
voidmain()
{inti,n,sum=0;
scanf("%d",&i);
n=i;
while(i<=10)
{sum+=i;
i++;
}
printf("%d+...+10=%d",n,sum);
printf("学号:
20姓名:
吴琛实验三第三题");
}
/*第二个程序*/
#include
voidmain()
{inti,n,sum=0;
scanf("%d",&i);
n=i;
do
{sum+=i;
i++;
}while(i<=10);
printf("%d+...+10=%d",n,sum);
printf("学号:
20姓名:
吴琛实验三第三题");
}
分别运行这两题,若输入7,这两个程序的结果分别是多少?
若输入12,这两个程序的结果又分别是多少?
比较为什么会有这样的区别?
第一个程序循环次数至少零次,即先判断后执行,第二个程序循环次数至少1次,即先执行后判断。
运行结果:
(需要截图)
运行结果:
运行结果:
运行结果:
运行结果分析:
输入程序,区分while和do….while语句的区别。
3、任务名称、
预习下面程序,若输入12345,分析输出结果是多少?
上机验证。
源代码:
#include
voidmain()
{longdata;
scanf("%ld",&data);
while(data)
{printf("%ld,",data%10);
data=data/10;
}
printf("学号:
20姓名:
吴琛实验三第一题");
}
运行结果:
(需要截图)
运行结果分析:
根据程序输入程序即可。
4、任务名称
实现求Fibonacci数列的前n个数。
(验证、调试)
运行程序,写出运行结果;采用单步跟踪技术运行该程序,观察一下变量的变化。
思考:
(1)f1、f2这两个变量为什么定义为longint型?
(2)第5行和第6行的相互作用,你会用这种方式来实现输入吗?
(3)注意第9行的输出“%ld”中的“1”是字母“L”的小写形式,不是数字1。
源代码:
#include
voidmain()
{longintf1,f2;
inti,n;
printf("Inputn:
");
scanf("%d",&n);
f1=f2=1;
for(i=1;i {printf("%ld\t%ld\n",f1,f2); f1=f1+f2; f2=f2+f1; } printf("学号: 20姓名: 吴琛实验三第四题"); } 运行结果: (需要截图) 运行结果分析: 利用循环处理问题,重复利用变量名输入程序,运行即可。 5、任务名称 预习下面程序,写出预习结果并上机验证。 (验证) 源代码: #include voidmain() {inti,j,x; {x++; for(j=0;j<3;j++) for(i=0,x=0;i<2;i++) {if(j%2)continue; x++; } x++; } printf("x=%d\n",x); printf("学号: 20姓名: 吴琛实验三第五题"); } 思考: 用一句话概括if(j%2)语句的作用。 通过选择语句判断下一条语句是否执行,若j除以2的余数为0则跳出循环。 运行结果: (需要截图) 运行结果分析: 嵌套for循环的执行过程及continue语句的作用。 6、任务名称 .输入一批考试分数,用1作为结束标志,若输入大于100分,则提示重新输入,然后计算最高分、最低分与平均分。 请调试、检查程序中的错误,并改正之。 #include voidmain() {intmark; intn=0;sum=0; intmax=100;min=0; for(;;); {scanf("%d",&mark); if(mark>100) {printf("Mark>100,Pleasereinput\n"); break; } if(mark=-1) break; n++; sum=sum+mark; if(mark>max) max=mark; if(mark min=mark; } sum=sum/n; printf("max=%d,min=%d,aver=%d\n",max,min,sum); } 思考: (1)“一批数据”是几个数据? 输入的数据如何结束? 程序中哪一行是实现结束这个要求的,写出该语句。 通过bresk跳出循环语句。 (2)程序中哪个语句是实现”若输入大于100分,则提示重新输入”这个要求的,写出该语句。 if(mark>100) {printf("Mark>100,Pleasereinput\n"); break; (3)写出您的测试数据及运行结果,注意输入的数据序列中最后一个应是-1。 改正后的程序: #include voidmain() {intmark; intn=0,sum=0; intmax=0,min=100; for(;;) {scanf("%d",&mark); if(mark>100) {printf("Mark>100,Pleasereinput\n"); continue; } if(mark==-1) break; n++; sum=sum+mark; if(mark>max) max=mark; if(mark min=mark; } sum=sum/n; printf("max=%d,min=%d,aver=%d\n",max,min,sum); printf("学号: 20姓名: 吴琛实验三第六题"); } 运行结果: (需要截图) 运行结果分析: 分析if选择和for循环嵌套的语句 7、任务名称 编程: 输入20个1~90的整数,分类统计1~30、31~60、61~90的数各有多少个? 编程点拨: (1)count1计1~30的个数,count2计31~60的个数,count3计61~90的个数。 (2)用for循环20次实现该程序的功能: 输入一个整数x,判断该数所在的范围,若x是1~30,则count1加1;若x是31~60,则count2加1;若x是61~90,则count3加1。 (3)最后,输出统计的结果。 #include voidmain() {intcount1=0,count2=0,count3=0; inti,x; printf(“Pleaseinput20numbers: ”); for(i=0;i<20;i++) {scanf(“%d”,&x); ………/*补充完成程序*/ } /*输出统计结果*/ …………… } 源代码: #include voidmain() {intcount1=0,count2=0,count3=0; inti,x; printf("Pleaseinput20numbers: \n"); for(i=0;i<20;i++) {scanf("%d",&x); if(x>=1&&x<=31) count1++; if(x>=31&&x<=60) count2++; if(x>=61&&x<=90) count3++; } printf("count1=%d,count2=%d,count3=%d\n",count1,count2,count3); printf("学号: 20姓名: 吴琛实验三第七题"); } 运行结果: (需要截图) 运行结果分析: 利用if语句的循环语句套用来编写程序。 8、任务名称 编程: 素数是除了1和其本身以外,不能被其他自然数整除的自然数。 从键盘输入一个数,判断该数是不是素数? 编程点拨: a)输入这个数x。 b)用for循环2~x-1,用2~x-1的每一个数去除x,若有一个数整除x,则说明x不是素数;否则,x就是素数。 c)最后,将判断结果输出。 #include voidmain() {inti,x; printf("Enteronenaturalinteger: "); scanf("%d",&x); for(i=2;i …………… } 补充后的程序: #include voidmain() {intn,s,i,k; printf("n=? "); scanf("%d",&n); i=2; s=1; while(i<=n) {for(s=2;s<=i-1;s++) if(i%s==0)break; if(s>=i-1)printf("%d",i); i++; } printf("学号: 20姓名: 吴琛实验三第八题"); } 先判断,再用if语句就行了 思考: 其实,只需要判断2~ 之间的整数能否整除x就可以判断x是否为素数,此时,如何修改程序? 源代码: #include voidmain() { inti,j,a; scanf("%d",&i); for(j=2;j {a=i%j; if(a==0) {printf("不是素数"); break; } if(j==i) printf("是素数"); } 运行结果: (需要截图) 运行结果分析: 用for循环2~x-1,用2~x-1的每一个数去除x,若有一个数整除x,则说明x不是素数;否则,x是素数。 9、任务名称 .编程: 显示所有的水仙花数。 谓水仙花数,是指一个3位数,其各位数字立方和等于该数字本身。 例,153是水仙花数,因为153=13+53+33。 有两种解题思路,选择其中之一编程实现: (1)利用三重循环,将这三个数通过一定的运算符连接成一个3位数,然后判断是否是水仙花数。 for(i=1;i<=9;i++) for(j=0;j<=9;j++) for(k=0;k<=9;k++) 注意,因水仙花是一个三位数,百位i是从1开始,不能从0开始,十位j和个数位k可以从0开始。 (2)利用一个循环,对100~999范围内的每个3位数逐位分离后进行判断。 for(i=100;i<999;i++) {a=i/100; b=(i-a*100)/10; c=i%10; ……… } 源代码: (1) #include voidmain() { inti,j,k; for(i=1;i<10;i++) for(j=0;j<10;j++) for(k=0;k<10;k++) if((i*100+j*10+k)==((i*i*i)+(j*j*j)+(k*k*k))) printf("%d%d%d",i,j,k); getch(); printf("学号: 20姓名: 吴琛实验三第九题\n"); } (2)#include voidmain() { inti,x,y,z; for(i=100;i<=999;i++) { x=i%10; y=(i/10)%10; z=(i/100)%10; if(x*x*x+y*y*y+z*z*z==i) printf("%d\n",i); } printf("学号: 20姓名: 吴琛实验三第九题\n"); } 运行结果: (需要截图) 运行结果分析: 利用三重循环,将这三个数通过一定的运算符连接成一个3位数,然后判断是否是水仙花数。 10、任务名称 10.编程: 输出下列图形。 分析: 这是由星号构成的5行5列的三角形图形。 每一行的星号数量为: 1、3、5、7、9。 考虑两点,一是每一行上星号的生成规则,二是每一行第一个星号字符的输出位置。 每一行的星号与行号有关,即2*i+1,其中i是行号;每一行的输出位置比上一行少一个空格,可以这样实现: for(j=1;j<=40-i;j++)printf(“%c”,‘’),其中i是行号。 源代码: #include #defineN5 voidmain() {inti,j; for(i=0;i { for(j=0;j { if(j elseprintf("*"); } printf("\n"); } printf("学号: 20姓名: 吴琛实验三第十题\n"); } 运行结果: (需要截图) 运行结果分析: 通过数列排列编写图形。 三、结论(写本次实验的收获) 1.掌握用while语句、dowhile语句和for语句实现循环的方法。 2.掌握在程序设计中用循的方法实现一些常用算法。 并进一步学习调试程序的方法。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 20 实验
