1、湖北理工学院14本科c语言实验报告实验二逻辑结构程序设计实验二 逻辑结构程序设计实验课程名:C语言程序设计专业班级: 14电气工程2班 学号: 201440210237 姓名: 熊帆 实验时间: 4.7-4.21 实验地点: K4-208 指导教师: 祁文青 一、实验目的和要求1.了解C语言表示逻辑量的方法(以0代表“假”,以非代表“真” )。2.学会正确使用逻辑运算符和逻辑表达。3.熟练掌握if语句和switch语句.4.学习调试程序。二、实验内容1源程序中包含有一些错误,调试下列程序,使之具有如下功能:输入a、b、c三个整数,求最小值。# include “stdio.h” void ma
2、in( )int a,b,c;scanf(%d%d%d,a,b,c);if(ab)&(ac)if(bc)printf(min=%dn,b);else printf(min=%dn,c);if(ab)&(ac)printf(min=%dn,a);解答:(1)源代码:#includestdio.hvoid main( ) int a,b,c; scanf(%d%d%d,&a,&b,&c); if(ab)&(ac) printf(min=%dn,a); else if(ba)&(bc) printf(min=%dn,b); else if(cb)&(ca) printf(min=%dn,c);(2)
3、运行结果: (3)运行结果分析:答:原程序中scanf语句中没有加地址符&,有些分号为全角,应该换成半角,并且原程序中的if语句不够全面,导致输入2 1 3时无输出结果,经修改,任意输入三个不同的整数,均可输出与实际相符的正确结果。 2.参考上一题,编写一个C程序,求a、b、c、d四个数中的最大者。编程点拨:多定义一个变量,并一开始令变量max=a;if(maxmax) max=b; if(cmax) max=c; if(dmax) max=d; printf(最大的数是%dn,max); return 0;(2)运行结果:(3)运行结果分析:首先max=a,即51,然后执行第一条if语句,b
4、=21,bmax为假,执行下一条if语句,c=3,cmax为假,执行下一条if语句,d=98,dmax为真,执行花括号里面的语句,max=d,即a与d互换,max变为d,即98,输出最大的数是98. 3.输入4个整数,要求按由小到大顺序输出。得到正确结果后,修改程序使之按由大到小顺序输出。相关知识:输入函数scanf()的使用;简单的排序算法;通过中间变量t交换a和b值的方法:t=a; a=b; b=t;。解答:(1)源代码:#include int main() float a,b,c,d,t; printf(请输入四个正整数:n); scanf(%f%f%f%f,&a,&b,&c,&d);
5、 if(ab) t=a; a=b; b=t; if(ac) t=a; a=c; c=t; if(ad) t=a; a=d; d=t; if(bc) t=b; b=c; c=t; if(bd) t=b; b=d; d=t; if(cd) t=c; c=d; d=t; printf(%5.2f,%5.2f,%5.2f,%5.2fn,a,b,c,d); return 0;(2)运行结果: (3)运行结果分析:首先a=25,b=11,c=6,d=64,ab为真,从而a、b互换,现在a=11,b=25,c=6,d=64,ac为真,从而a、c互换,现在a=6,b=25,c=11,d=64,然后ad为假,不
6、执行接在它下面花括号里面的内容,再,bc为真,从而b、c互换,现在a=6,b=11,c=25,d=64,接下来bd和cd均为假,最终执行输入语句,输出结果如上图所示。4.根据以下函数关系,对输入的每个x值,计算出相应的y值。 当X取其他值时解答:(1)源代码:#include#includeint main() double x,y; printf(请输入一个x值n); scanf(%lf,&x); if(x=0&x=3&x=4) y=fabs(x)+2; else y=sin(x*x); printf(y=%fn,y); return 0;(2)运行结果: (3)运行结果分析:试验了3个值,
7、x分别等于0,3,5 经验证均与实际情况相符合。5模仿第4题,写程序实现以下函数:用scanf函数输入x的值,求y值。运行程序,输入x的值(分别为x1、1x10、x10三种情况),检查输出的y值是否正确。解答:(1)源代码:#include#includeint main() double x,y; printf(请输入自变量x的值n); scanf(%lf,&x); if(x=1&x=10) y=2*x-1; else y=3*x-11; printf(y的值为%fn,y); return 0;(2)运行结果:(3)运行结果分析:试验了3个值,分别为0,8,100,输出结果均与实际运算相符合
8、6.阅读分析以下程序的功能。#include void main( ) int choice; int value; printf(Convert:n); /* 显示菜单 */printf( 1:decimal to hexadecimaln );printf( 2:hexadecimal to decimaln );printf( 3:decimal to octaln ); printf( 4:octal to decimaln);printf(enter your choice: );scanf(%d,&choice); switch (choice) case 1: /* 选中1时处理
9、 */ printf(enter decimal value:); scanf(%d,&value); printf(%d in hexadecimal is:%xn,value,value); break;case 2: /* 选中2时处理 */ printf(enter hexadecimal value:); scanf(%x,&value); printf(%x in decimal is:%dn,value,value); break; case 3: /* 选中3时处理 */ printf(enter decimal value:); scanf(%d,&value); print
10、f(%d in octal is:%on,value,value); break; case 4: /* 选中4时处理 */XX文库 - 让每个人平等地提升自我 printf(enter octal value:); scanf(%o,&value); printf(%o in decimal is:%dn,value,value); break; 解答:(1)运行结果: (2)运行结果分析:该程序为一个实现进制转换功能的程序,choice1对应十进制转十六进制,choice2对应十六进制转十进制,choice3对应十进制转八进制,choice4对应八进制转十进制。实验的时候选了choice2
11、,即实现将一个十六进制的数转换为十进制,如上图所示,验证情况如下图。7. 模仿第6题,要求对输入的数字17转换成文字星期几,对其它数字不转换。例如,输入5时,程序应该输出Friday。解答:(1)源代码:#include int main( ) int day; printf(转换n); /* 显示菜单 */ printf(请输入一个数字:n); scanf(%d,&day); if(day7) printf(请再次输入n); switch (day) case 1: /* 选中1时处理 */ printf(Mondayn); break; case 2: /* 选中2时处理 */ print
12、f(Tuesdayn); break; case 3: /* 选中3时处理 */ printf(Wednesdayn); break; case 4: /* 选中4时处理 */ printf(Thursdayn); break; case 5: /* 选中4时处理 */ printf(Fridayn); break; case 6: /* 选中4时处理 */ printf(Saturdayn); break; case 7: /* 选中4时处理 */ printf(Sundayn); break;return 0; (2)运行结果: (3)运行结果分析:输入一个1到7阿拉伯数字,将它转换为星期几。实验的时候,输入一个数字7,输出结果为Sunday。当输入一个小于0或大于7的数字时,例如12,输出结果为“请再次输入”。三、结论本次试验主要涉及用if语句处理选择结构以及用switch语句实现多分支选择结构,深刻体现了选择结构程序设计的思想以及方法的多样性与灵活性。还涉及到了用C语言来表现数学中的分段函数问题。说明:1.电子实验报告填写好后,以学生的学号+实验项目名作为该word文件名保存,例如某学生学号为20080001,姓名为某某,本次实验名称是:实验一 顺序结构程序设计,则本次实验报告的保存文件名为:01某某实验一.doc。2.在规定的时间内,学生将本报告提交给实验指导教师。