16 实验3 顺序结构程序设计 一、实验目的 ● 掌握输入函数的用法。 ● 掌握用顺序结构进行简单的程序设计。 ● 掌握数学函数的应用。 ● 掌握赋值运算符和自增、自减运算符。 二、调试内容 1.程序改错(一) #include "stdio.h" main() { /*该行需添加对变量的声明*/ a=3; printf("%d\n",a); } 改正错误,得到正确结果,进而避免在程序设计中出现类似的错误。 2.程序改错(二) #include "stdio.h" main() { float a; a=3.7; printf("A=%f\n",A); /* 该 行 有 1 处错误*/ } 分析讨论: 最后一条语句中的第一个大写字母A 为何不需要修改? 3.程序改错(三) #include "stdio.h" main() { int a; scanf("%f",a); / * 该 行 有 2 处错误*/ printf("a=%d\n",a); } 17 分析讨论: 要使变量a的值是1,应如何做? 需要改动程序吗? 4.下面程序希望通过键盘输入数据,使变量a的值是1,变量b的值是10 #include "stdio.h" main() { int a,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b); } 分析讨论: (1)对于上面的程序,分别输入下面的几组数据来查看结果,从而理解数据输入形式 是必须与scanf函数中给定的格式相匹配的。 A.1 10↙ B.1,10↙ C.a=1,b=10↙ D.a=1b=10↙ E.1↙ 10↙ (2)如果输入语句(第5行)改为 scanf("%d,%d",&a,&b); 仍然按照前面给定的5种输入形式,哪个是正确的? (3)如果输入语句(第5行)改为 scanf("a=%d,b=%d",&a,&b); 仍然按照前面给定的5种输入形式,哪个是正确的? 5.程序改错(四) 已知三角形的三边长(假设能够组成三角形),用海伦公式求三角形的面积。 设三角形的3边长为a、b、c,用海伦公式计算三角形面积的方法为: (1)计算三角形周长之半s=a+b+c 2 。 (2)计算三角形面积area= s(s-a)(s-b)(s-c)。 #include "stdio.h" /*该行需添加一个文件包含命令*/ main() { float a,b,c,s,area; scanf("%f%f%f",&a,&b,&c); s=a+b+c/2; /*该行有1 处错误*/ area=sart(s(s-a)*(s-b)*(s-c)); /*该行有2 处错误*/ 18 printf("area=%f\n",area); } 测试数据为3、4、5时,修改后正确程序的运行结果为 3 4 5 ↙ area=6.000000 6.程序改错(五) #include "stdio.h" main() { float a=b=7.6; /*该行有错误*/ ++a; b--; printf("a=%f,b=%f\n",a,b); } 本程序中a、b均为float型变量。 三、编程题 (1)将华氏温度转化为摄氏温度和绝对温度。下面公式中c表示摄氏温度,f表示华 氏温度,k表示绝对温度。 c=59 (f-32) k=273.16+c 在程序中使用scanf函数输入f的值,然后计算c和k的值。程序运行两次,为f输 入的值分别是:①35.6;②100。注意程序中数据类型和输入、输出语句的格式,在表达式 中要避免出现整型量相除。 答案:①35.6↙ c=1.999999,k=275.159999 ②100↙ c=37.777779,k=310.937778 (2)输入一个浮点型数据,输出对该数进行四舍五入、保留2位小数后的值。例如, 输入1.5678,则输出1.57。 (3)编程序计算半径为r的圆的面积和球的体积。例如,π的近似值取为3.1415926, 为半径r输入6.39时,求得圆的面积和球的体积分别为128.277817和1092.926985。 (4)已知浮点型变量x=1.5,y=2.8,编程分别计算并输出下面表达式的值。 ①12 sin25°+x2cos30° ② x+2y-e3x+|x| 在本程序中,将分别用到sin、cos、sqrt、exp和fabs这5个数学函数。使用数学函数 19 时,一定要在主函数main()的前面用下面的命令包含数学函数库。 #include "math.h" 答案:①2.159866(π的近似值取为3.1415926) ② -85.852549 四、选做题 1.运行程序 #include "stdio.h" main() { int x,y; scanf("%2d%2d",&x,&y); printf("%d\n",x+y); } 程序运行时输入数据: 13579 分析讨论: 理解指定输入宽度时数据的截取方式。 2.自增、自减运算符的应用 程序1: #include "stdio.h" main() { int m,n; m=1; n=10; printf("%d,%d\n",++m,n++); printf("m=%d,n=%d\n",m,n); } 程序2: #include "stdio.h" main() { int m,n,p,q; float a,b; m=1; n=10; 20 a=12.5; b=21.68; p=m++;q=++n; a--;--b; printf("m=%d,n=%d,p=%d,q=%d,a=%f,b=%f\n",m,n,p,q,a,b); } 分析讨论: (1)通过结果理解自增、自减运算符处于变量前和变量后对表达式值的不同影响。 (2)自增、自减运算符处于变量前和变量后对变量值有无不同影响? (3)把程序的倒数第3行改为(a+b)--;或者--6;是否可以? 进而分析自增、自 减运算符的操作对象是否可以是表达式或常量?