输入输出示例:
Input month of 2005: 10 2005年10月有31天 提示:
1)该程序应该运行13次,分别输入1-12月,以及除此之外的数 2)运行时调试跟踪月份的变化
3)编程时注意不同月份可以有相同的天数 思考:输入年和月,如何求该月的天数?
6.改错,对2个整数进行乘、除和求余运算。 输入输出示例:
输入x 运算符 y : 21 % 8 21 Mod 8 = 5
源程序(有错误的程序) #include
prnitf(“输入x 运算符 y:”); scanf(“%d%c%d”,&x,&sign,&y); if(sign=?*?)
printf(“%d * %d = %d\\n”,x,y,x*y); else if
printf(“%d * %d = %d\\n”,x,y,x*y); else if
printf(“%d * %d = %d\\n”,x,y,x*y); else
printf(“运算符输入错误”); }
提示:在程序调试中,在变量窗口和Watch窗口中观察变量值的变化。
实验报告要求
将以上各题的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。
16
实验四 循环结构程序设计 (一)
实验目的
1.熟练使用while、do-while语句实现循环程序设计
2.理解循环条件和循环体,以及for、while和do-while语句的相同及不同之处 3.掌握嵌套循环程序设计
4.熟练掌握下拉菜单Debug的程序调试方法 实验内容
1.调试示例:输入2个正整数m,n,输出它们的最小公倍数和最大公约数。 源程序(有错误的程序) #include
printf(“input m n\\n”);
while(scanf(“%d%d”,&m,&n),m<0 && n<0); j=m;
while(j/n!=0) j=j+m; k=(m*n)/j;
printf(“最小公倍数是%d\\n最大公约数是%d\\n”,j,k); }
运行结果(改正后程序的运行结果) Input m n: 3 7 最小公倍数是21 最大公约数是1
“编译”菜单中的调试命令和调试工具栏中按钮的功能是一样的,可以使用“编译”菜单来调试程序。
1)输入并保存上述程序后,再进行编译和连接,没有出现错误信息。 2)调试程序开始,设置3个断点,执行“编译”->“开始调试”->入 “-3 7”
去命令,运行程序,输
3)程序执行到第一个断点,变量窗口显示m=-3,n=7,说明有错。因为如果输入负数,必须重新输入,直到输入2个正数为止。
注意:此时菜单栏中新出现一个“Debug”菜单,包括了调试工具栏中所有的调试工具,用
17
户可以选择使用“Debug”菜单或调试工具栏来调试程序。作用相同。
4)单击图标或按组合键Shift+F5停止调试,通过仔细分析,发现循环条件中m<0 && n<0应该是m<0||n<0。
注意:此时,不一定要停止调试,用户可以在Watch窗口输入m=3,再继续调试。
5)把&&改为||,重新编译和连接,然后单击图标或组合键Ctrl+Shift+F5重新开始调试,再单击图标或F5键,输入-3 7后,箭头如果不动,说明需要重新输入数据。
6)重新输入数据3 7,程序执行到第一个断点,观察变量窗口,m=3,n=7,没有错误。 7)继续单击,程序运行到第2个断点,变量窗口显示最小公倍数j的值是3,显然错误,说明第1个断点到第2个断点之间有错误。
8)单击图标或按组合键Shift+F5停止调试,仔细分析程序,发现循环条件j/n!=0错误,因为只有被n除尽的j才是最小公倍数,循环条件应该是j%n!=0。
9)重新编译、连接,并取消第一个断点,再单击图标或组合键Ctrl+Shift+F5重新开始调试,再单击图标或F5键,程序运行到新的第一个断点。
10)变量窗口显示最小公倍数j的值是21,最小公倍数计算正确。
11)单击图标或F5键,程序运行到最后一个断点,变量窗口显示最大公约数k的值是1,最大公约数计算正确。
12)单击图标或按组合键Shift+F5停止调试。
2.编程,输入一批整数,先求出其中的偶数和及奇数和,然后输出偶数和与奇数和的差.
输入输出示例:
输入一批整数:10 11 20 33 Ctrl+Z Sub=-14
提示:从键盘输入Ctrl+Z,表示一批数据输入结束
思考:如何从输入的数中找出一个最小的数。#include
while(scanf(\if(n%2==0) sub+=n; else sub-=n;
printf(\return 0; } 3.编程,输入1个正实数eps,计算并输出下式的值,十到最后一项的绝对值小于eps。
s?1?11111?????... 59131721输入输出示例: Input eps:0.00001 S = 0.866977
思考:如果条件改为前后2项的绝对值的差小于eps,如何编程。#include
18
{ s+=t; n+=4; q*=-1; t=q/n; } s*=1; printf(\ printf(\}
7. 编程,输入1个实数x,计算并输出下式的值,直到最后一项小于10-5。要求定义和
调用函数fact(n)计算n的阶乘,以及定义和调用函数mypow(x,n)计算xn。
x2x4x6s?1????...
2!4!6!输入输出示例: X=2
S=3.761949
提示:输入不同的正整数和负整数验证结果
x2x3x4???...的值。 思考:如何计算s?1?2!3!4!
8. 编程,输入一个整数,求它的各位数字之和及位数。例如123的各位数字之和是6,
位数是3. 输入输出示例:
输入一个整数:-12345
-12345有5位数,各位数字之和是15
提示:n表示一个整数,则n取个位数,n=n/10去掉个位数,组成一个新数。 思考:如果要把每位数字转换为字符输出,如何编程。
9. 改错,输入2个整数,分别将其逆向输出。 输入输出示例: 123 -321 123的逆向是321 -321的逆向是-123
源程序(有错误的程序) #include
if(n>=0) return y; else return –y; }
void main() { int n,m;
19
Scanf(“%d%d”,&n,&m);
Printf(“%d的逆向是%d\\t”,n,fun(n)); Printf(“%d的逆向是%d\\t”,m,fun(m)); }
提示:模仿1调试程序,在变量窗口中观察变量值的变化,读者还可以在Watch窗口输入不同变量的值来验证程序的正确性。
实验报告要求
将以上各题的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。
20