1、实验 2 顺序结构与逻辑运算学号: 姓名: 实验日期:1. 实验目的和要求(1)掌握数据输入/输出函数的使用,能正确使用各种格式转换符。(2)熟悉顺序结构程序中语句的执行过程,并学会基本调试程序方法。(3)能够正确使用逻辑运算符和逻辑表达式。(4)学会运用逻辑表达式或关系表达式等表示条件。(5)熟练掌握 if 语句和 switch 语句,掌握条件表达式构成的选择结构。(6)熟练掌握跟踪调试程序,针对具体数据组织输入测试数据,观察程序运行能否得到预期的输出结果。(7)学会编写简单程序。2. 实验内容:实验指导书中的实验三和实验四3. 实验步骤及结果实验三部分:3-1-1 该程序的功能是:输出 m
2、=345,n=2.560000,并计算输出(n*100)程序运行结果画面如下:#includemain()int m=345;float n=2.56;printf(“m=%d,n=%f,n*100=%fn“,m,n,n*100);3-1-2 该程序的功能是:输入三个数赋给 a,b,c,输出这三个数,并计算输出 s=a*b 和v=a*b*c 的值程序运行结果画面如下:#includemain()double a,b,c,s,v;scanf(“%lf,%lf,%lf“,s=a*b;v=a*b*c;printf(“%lf,%lf,%lfn“,a,b,c);printf(“s=%lfn“,s);pr
3、intf(“v=%lfn“,v);3-2-1 该程序的功能是:输入两个整数 m,n,输出 m,n 并使其输出时每个数输出宽度为6,两数之间逗号间隔;并输出 x,y 并使其每个数输出宽度为 7,小数位数为 2。程序运行结果画面如下:#includemain()int m,n;float x=3.5,y=6.2;scanf(“%d,%d“,printf(“m=%6d,n=%6dn“,m,n);printf(“x=%7.2f,y=%7.2fn“,x,y);3-2-2 该程序的功能是:赋给 a,b,m,n,p,q 数值,并输出 a,b,m,n 的整型数值和 p,q 的浮点型数值。程序运行结果画面如下:
4、#includemain()int a,b;long m,n;float p,q;scanf(“%d,%dn“,scanf(“%f,%fn“,scanf(“%ldn%ld“,printf(“a=%d,b=%dn m=%ld,n=%ldn“,a,b,m,n);printf(“p=%f,q=%fn“,p,q);3-3 注意:这道程序我们不按书中提示进行,而在 VC 环境下进行调试。语法错误和逻辑错误的区别何在?语法错误有错误提示,程序不可运行;逻辑错误无错误提示,程序可运行,但得不到你想求得的答案。如何启动单步调试?在菜单栏中选择“组建” ,然后在下拉菜单中选择“开始调试” ,然后选择“Step
5、Into” 。要使程序运行到“ss=(k”这一行暂停下来,该如何操作? 点到“ss=(k” 这一行,按 F9,设置一个断点。怎样终止调试状态(程序复位)?在菜单栏中选择“调试” ,然后选择“Stop Debugging” 。单步调试状态下,向下运行一条语句的操作方法(分两种情况回答,第一种,跟踪到自定义函数内部,第 2 种,不跟踪到自定义函数内部):第一种选择“Step Into”,跟踪到自定义函数内部;第 2 种选择“Step over”,不跟踪到自定义函数内部在本题中,假设要在运行第 2 条语句(即 scanf 语句后) ,要马上观察 i,j,k,ss,m,n的变量的值,操作方法:在菜单栏
6、中选择“组建” ,然后在下拉菜单中选择“开始调试” ,然后选择“Step Into”,在 watch 窗口的名称下的框中输入要马上观察的“i,j,k,ss,m,n” ,请把观察这些变量时的画面粘贴到下面:#includemain()int i,j,k,ss,m=1,n=1;scanf(“%d%d“,m+=i+;n*=-j;ss=(k=m+2,n-5,k+n);printf(“%d“,ss);通过这道题单步调试,你对 i+和+i 及 i和i 应该有了更直观的理解,他们的区别在于:i+和 i是在使用变量后加(减)一,+i 和i 是在使用变量前加(减)一。3-4 请回答书中问题问题(1)都可以。问题
7、(2)用 printf 函数,c1 、c2 输出的格式符用%d 。问题(3)不可以程序运行结果画面如下:#includemain()char c1,c2;c1=getchar();c2=getchar();putchar(c1);putchar(c2);printf(“n“);printf(“%c%cn“,c1,c2);3-5 我使用的算法:运用求商的整数部分和求余数进行分钟的转换运行结果画面:#includemain()int x,h,m;printf(“输入需转换的分钟数:“);scanf(“%d“,h=x/60;m=x%60;printf(“%d 小时%d 分钟“,h,m);3-7 我使
8、用的算法:进行千分位转换,四舍五入。运行结果画面:#includemain()double x;scanf(“%lf“,printf(“%7.2fn“,x);实验四部分4-1-a 该程序的功能是:输入两个数:a 、b,判断 a*a+b*b 的值,若 a*a+b*b 的值等于 3或 1,则 y=a+b;若 a*a+b*b 的值等于 0,则 y=b-a;若 a*a+b*b 的值等于其他值,则输出“eerror”;最后输出 y 的值。运行结果画面:#includemain()int a,b,y;scanf(“%d%d“,switch(a*a+b*b)case 3:case 1:y=a+b;break
9、;case 0:y=b-a;break;default :printf(“errorn“);printf(“%d“,y);4-1-b 该程序的功能是:输入两个数:a、b,判断 a 的值,若 a 的值等于 10,则 y=a-b;若a 的值等于 11,则 y= a*b;若 a 的值等于其他值,则 y=a+b;最后计算输出 y 的值。运行结果画面:#includemain()int a,b,y;scanf(“%d%d“,switch(a)default :y=a+b;break;case 10:y=a-b;break;case 11:y=a*b;break;printf(“%d“,y);4-1-c
10、该程序的功能是:输入两个数:a、b,判断 a+b 的值,若 a+b 的值等于 10,则y=a+b;若 a+b 的值等于 11,则 y= a-b;若 a+b 的值等于其他值,则输出“eerror ”;最后计算输出 y 的值。运行结果画面:#includemain()int a,b,y;scanf(“%d%d“,switch(a+b)case 10:y=a+b;break;case 11:y=a-b;break;default :printf(“errorn“);break;printf(“%d“,y);4-2-1 运行结果画面:#includemain()int x,y;scanf(“%d“,i
11、f(x-5scanf(“%d“,if(x-5运行结果画面:#includemain()int a,M;scanf(“%d“,M=a0?a:-a;printf(“abs(a)=%dn“,M);4-4 运行结果画面:#includemain()int c,t,m;printf(“input the number of coat and trousers your want buy:n“);scanf(“%d%d“,if(t=c)if(c=50)m=c*80;else m=c*90;elseif(ct)if(t=50)m=t*80+(c-t)*60;else m=c*80+(t-c)*45;else
12、 if(c=50)m=t*90+(c-t)*60;else m=c*90+(t-c)*45;printf(“%dn“,m);4-5 我使用的算法:输入三边,然后判断是否构成三角形,能构成三角形后再判断三角形类型。运行结果画面:#includemain()float x,y,z;int i;printf(“输入三条边长:“);scanf(“%f%f%f“,if(x+yzif(i=1)if(x=yelse if(x=y|y=z)printf(“此三角形为等腰三角形n“);else printf(“此三角形为不等边三角形n“);if(i=0)printf(“这三边不构成三角形n“);4-5 我使用的算法:用求余的方法,若赋给 x 的值除以 5 和除以 7 的余数都为 0,则输出yes,否则输出 no。运行结果画面:#includemain()int x;scanf(“%d“,if(x%5=0elseprintf(“non“);4 实验小结通过实验我的 C 语言能力的到了进一步的提高:(1) 学会了基本的程序调试;(2) 掌握了 IF 和 SWITCH 语句的应用;(3) 掌握数据输入/输出函数的使用,能正确使用各种格式转换符(4) 知道了逻辑运算符、逻辑表达式、关系表达式的运用(5) 可以进行简单的程序的编写