实验五循环结构程序设计.docx
《实验五循环结构程序设计.docx》由会员分享,可在线阅读,更多相关《实验五循环结构程序设计.docx(15页珍藏版)》请在冰点文库上搜索。
![实验五循环结构程序设计.docx](https://file1.bingdoc.com/fileroot1/2023-7/6/c761386e-df1a-449e-873e-3e6027bc3d8b/c761386e-df1a-449e-873e-3e6027bc3d8b1.gif)
实验五循环结构程序设计
实验五循环结构程序设计
(4学时)
【实验前做的操作】
在本人所用计算机的逻辑盘(如D:
盘或E:
盘)上建立一个以本人姓名为名称的文件夹,然后在此父文件夹下建立子文件夹,名称为“实验五”,用来零时存放实验五需要上交的有关文件。
【实验目的】
1、掌握循环结构程序设计的基本思想。
2、理解循环结构程序段中语句的执行过程。
3、了解goto语句和if语句构成循环的设计方法。
4、掌握用for、while、do-while语句实现循环(一重循环和多重(重点是双重)循环))程序设计。
5、掌握for、while、do-while三种循环的区别和联系及它们之间的灵活转换。
6、在程序设计过程中实现一些常用算法。
7、进一步练习程序的跟踪调试技术,掌握运行到光标处的调试方法。
8、巩固利用VC++对C程序的查错方法,进一步提高修改程序错误的能力。
【实验内容】
一、程序运行到光标处的跟踪调试和变量值的监视练习(可不上交、但必须操作、理解,掌握其方法)
1、程序运行到光标处的跟踪调试和变量值的监视示例(请仔细按以下各步骤进行操作):
编程计算表达式“1+2+3+……+100”的值。
源程序(有错误的程序)
#include
voidmain()
{
inti,sum;
for(i=1,i<=100,i++)
sum=sum+i;
printf("sum=%d\n",sum);
}
运行结果(改正后程序的运行结果)
sum=5050
(1)输入源程序,并以error5_1.c文件名保存,编译程序,出现第一个错误信息:
missing';'before')'
双击该错误信息,箭头指向“for”这一行,错误信息指出在for语句的括号里面应使用“;”,对for语句括号里面进行仔细分析,发现把“;”写成了“,”。
把“,”改为“;”后,重新编译,连接,都正确。
(2)开始调试,如果调试工具栏不可见,采用实验四或实验二介绍的方法,调出该工具栏(见实验四图4.2所示)。
(3)鼠标单击第6行,光标就在第六行前面闪烁,这就是当前的光标位置(如图5.1所示)。
图5.1光标在程序中位置
(4)单击
(RuntoCursor(Ctrl+F10)),程序运行到光标的位置(如图5.3所示)。
此过程中,出现图5.2“生成可执行文件”的对话框时,选“是(Y)”按钮。
图5.2生成“error5_1.exe”文件
在变量窗口中,第一次循环时i的值为1,正确,而sum的值是-858993460,不正确。
仔细分析程序,发现sum没有赋初值。
在for语句前面加一条语句sum=0;,重新编译、连接,然后重做(3)和(4),图5.4显示sum的值为0,正确。
图5.3程序运行到光标的位置
图5.4程序运行到光标的位置,观察“sum”的值
(5)把光标设在“}”的前面,鼠标单击
,程序运行到光标处“}”的前面(如图5.5所示),变量窗口中,sum的值是5050,正确。
(6)鼠标单击终止调试图标
(StopDebugging(Shaft+F5)),程序调试结束。
图5.5程序运行到光标的位置,观察最后“sum”的值
2、程序运行到光标处的跟踪调试和变量值的监视练习:
改错:
计算下列表达式的值(保留2位小数)。
(源程序名可定为error5_2.c)
y=1/(1*3)+(1*3)/(2*4)+(2*4)/(3*5)+…+(8*10)/(9*11)
输入输出示例:
Inputn:
10
y=6.46
提示:
(1)模仿示例,采用运行到光标(RuntoCursor(Ctrl+F10))调试程序,并观察变量值的变化。
(2)注意整数与整数相除的情况。
源程序(有错误的程序——不是语法错误,而是算法错误或逻辑错误)
#include
voidmain()
{intn,i;
floatsum;
sum=0;
printf("Inputn:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
if(i==1)
sum=1/3;
else
sum+=(i-1)*(i+1)/(i*(i+2));
printf("Sum=%0.2f\n",sum);
}
3、程序的跟踪调试和变量值的监视练习:
下面程序的功能是计算n!
。
输入下面程序,并以factor.c文件名保存
main()
{inti,n,s=1;
printf("Pleaseentern:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
s=s*i;
printf("%d!
=%d\n",n,s);
}
多次运行程序,每次改变n的值(从小到大,如4,7,10,……,20等等),思考哪些结果是正确的,n的值为多少时,输出了错误的结果?
如20!
=-2102132736,这显然是错误的,为什么?
为了找到程序的错误,可以通过单步执行来观察变量的变化。
分析产生这种现象的原因,把程序改正过来,并保存,再用n=20进行实验,分析所得到的结果。
二、编程练习(必须上交)
利用VC++编写程序,并调试、运行,直到输出正确结果。
编程练习1:
注意:
这里提供了以填空的形式出现源程序参考清单,目的是给同学们一个思路。
最好不要将此源程序清单复制到VC++中,否则会出现多处语法错误。
同学们可以据此思路来填写有关语句,从而完成程序。
在调试程序时,一定要运用前面学过的方法。
(1)编一个C程序,计算并输出数列:
1、3、5、…、2n-1、…的前n项之和,其中的n由键盘输入。
(要求分别用for、while、do-while语句来完成)
方法一:
用for语句实现(源文件名为for_c.c)
main()
{longs,n,k,i;
scanf("____________________",&n);
k=2*n-1;
_____________________;
for(i=1;i<=k;i++,_________________)s+=i;
printf("1+3+…+%ld=%ld\n",k,s)
}
方法二:
用while语句实现(源文件名while_c.c)
main()
{longs________________________,n,i=1;
scanf("%ld",&n);
while(_______________________)
{s+=i;
_____________________;
}
printf("1+3+…+%ld=%ld\n",2*n-1,s);
}
方法三:
用dowhile语句实现(源文件名do_while.c)
main()
{longs=0,n,i=___________________;
scanf("%ld",&n);
do
{s+=i_____________________;
i++;
}while(____________________);
printf("1+3+…+%ld=%ld\n",2*n-1,s);
}
(2)以下两个程序的功能均是:
求出200以内的整数中能同时被3和7整除的最大数。
请填空,并调试验证结果。
1)解法一:
main()
{inti;
for( ; ; )
if( )
break;
printf("%d",i);
}
将填空后完整的程序以文件名为aliquot1.c保存
2)解法二:
main()
{inti,n;
for( ; ;i++)
if( )
n=i;
printf("%d",n);
}
将填空后完整的程序以文件名为aliquot2.c保存
编程练习2:
(1)以下程序完成的功能是输出如下所示的图形,通过模仿此程序的功能,完成下面两道题。
程序清单:
#include“stdio.h”
voidmain()
{
inti,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
printf(“%d”,i);
printf(“\n”);
}
}
请编写两个程序分别输出下列两个图形:
将编写好的程序以文件名为picture1.c保存。
将编写好的程序以文件名为picture2.c保存。
(2)以下程序打印如下图案,程序运行后,输入4给变量n,请填空。
【说明】:
该程序完成的功能只是打印“*”图案,图中的“10个空格”字样是说明第四行的第一个“*”离屏幕的第一列之间的距离有10个空格。
#include"stdio.h"
#defineS''
voidmain()
{intn,i,j;
printf("Entern:
");
scanf(___________________);
for(i=1;i<=n;i++)
{for(j=1;j<=10;j++)putchar(S);/*说明图案从屏幕的第10列开始处打印输出*/
for(j=1;__________;j++)putchar(S);
for(j=1;__________;j++)putchar('*');
________________________;
}
for(i=1;i<=n-1;i++)
{for(j=1;j<=10;j++)putchar(S);
for(j=1;_____________;j++)putchar(S);
for(j=1;____________;j++)putchar('*');
________________________;
}
}
将填空好的完整程序以文件名star.c保存。
编程练习3:
将下面用for循环实现的程序改为while循环结构和do-while循环结构。
并将改写好的程序依次以文件名while2.c和until.c保存。
【程序清单:
】
#include“stdio.h”
voidmain()
{
inti,j;
for(i=1;i<=5;i++)
{
for(j=1;j<=20;j++)
printf(“%d“,j);
printf(“\n”);
}
}
该程序的功能是:
在一行内输出整数1到20,并连续输出5行。
该程序的运行结果是:
1234567891011121314151617181920
1234567891011121314151617181920
1234567891011121314151617181920
1234567891011121314151617181920
1234567891011121314151617181920
编程练习4:
(1)有1、3、5、7四个数字,能组成多少个互不相同且无重复数字的三位数?
分别是几?
要求每行输出6个数。
将编写好的程序以文件名zuhe.c保存。
(2)用for循环和逗号运算符输出下列字符串:
azbycxdwevfugthsirjqkplomn
将编写好的程序以文件名comma.c保存。
编程练习5:
实验教材:
(P11-18:
实验4循环结构程序设计)
二、实验内容
第14题
其中第
(1)、(3)、(4)、(7)、(8)、(10)为必做题,其余为选做题
★为了方便本人使用,不妨将源程序备份到网盘或可移动存储器上(如U盘、手机卡等)
三、课外练习(源程序名可依实验总体要求及本人的习惯确定,可不上交)
A、实验教材
第1部分:
C语言上机实验
实验4循环结构程序设计
未做过的但需要上机操作才能理解的内容
第2部分:
习题
习题5循环结构程序设计(P60-68)
需要上机操作才能理解的内容
B、理论教材
1。
本章各知识点及例题中需要上机操作才能理解的内容和需要上机验证的内容
2.本章习题中需要上机操作才能理解的内容和需要上机验证的内容
注:
1)以上程序题与实验教材的程序题要求是一样的
2)理论教材中习题与实验教材中的习题相同的题目只要求作一次
★强烈建议:
先理解消化例题及习题(书上提供了答案),然后再做编程题。
因为这样效果会好些。