实验二逻辑结构程序设计实验课程名:高级语言程序设计ΙΙ专业班级:学号:姓名:实验时间:16-3-30 实验地点:K4 指导教师:一、实验目的及要求1.了解C语言表示逻辑量的方法(以0代表“假”,以非代表“真”)。
2.学会正确使用逻辑运算符和逻辑表达。
3.熟练掌握if语句和switch语句.4.学习调试程序。
二、实验内容(1)源程序c30105.c中包含有一些错误,调试下列程序,使之具有如下功能:输入a、b、c三个整数,求最小值。
# include “stdio.h”void main( ){ int a,b,c;scanf("%d%d%d",a,b,c);if((a>b)&&(a>c))if(b<c)printf("min=%d\n",b);elseprintf("min=%d\n",c);if((a<b)&&(a<c))printf("min=%d\n",a);}再次运行程序,输入为“2,1,3”,程序输出却是“min=2”。
用单步执行的方法,马上发现变量a、b、c的值是不对的,原因是程序要求输入数据的分隔符是空格(还允许使用回车或<Tab>键)。
改正输入数据的分隔方式后,程序没有输出,还是用单步执行的方法,监视程序的执行过程,发现程序中条件设计有误,经过改正的程序如下:# include “stdio.h”void main(){ int a,b,c;scanf("%d%d%d",&a,&b,&c);if((a<b)&&(a<c))printf("min=%d\n",a)else if((b<a)&&(b<c))printf("min=%d\n",b);else if((c<a)&&(c<b))printf("min=%d\n",c);elseprintf("No find minimum\n");}上述程序是按在三个数中仅有一个最小值时才称其为最小值进行设计的。
另外,注意程序的书写格式,一定要采用缩进格式,即不同层次(分支)的语句左起的空格不同,这样可以有效地提高程序的可读性。
相关知识:①类似a<b<c表达式的表示方法;②if语句的嵌套;③调试工具的使用。
④求最值的简单算法。
(二)实验任务2(1)程序代码:# include <stdio.h>void main(){ int a,b,c,d;scanf("%d%d%d%d",&a,&b,&c,&d);if((a>b)&&(a>c)&&(a>d))printf("max=%d\n",a);else if((b>c)&&(b>d))printf("max=%d\n",b);else if(c>d)printf("max=%d\n",c);elseprintf("max=%d\n",d);}(2)程序运行结果:(3)程序分析://先比较a与bcd大小,当a比其它三个都大时则输出a。
同理,当a最小时,再比较b与cd的大小,以此类推。
最后按顺序依次输出这四个数。
(三)实验任务3(1)程序代码:# include<stdio.h>int main(){int a[4];int i,j,t;printf("input 4 numbers:\n");for(i=0;i<4;i++)scanf("%d",&a[i]);printf("\n");for(j=0;j<3;j++)for(i=0;i<3-j;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("The sort numbers:\n");for(i=0;i<4;i++)printf("%d ",a[i]);printf("\n");return 0; }(2)程序运行结果:由小到大顺序:由大到小输出:(3)程序分析:采用“起泡法”排序算法和嵌套的for 语句;当执行外循环第一次循环时,j=0,然后执行第一次内循环,此时i=0,在if 语句中将a 【i 】和a 【i+1】比较……这时第一趟过程完成。
当执行第二次外循环时,J=1,开始第二趟过程。
内循环条件是i<3-J,由于j=1,因此相当于i<2,即i 由0到1。
其余类推。
(四)实验任务4根据以下c30108.c 函数关系,对输入的每个x 值,计算出相应的y 值。
(1)程序代码:# include <stdio.h> # include <math.h> # define p 3.141592 void main() {float x,y,z;scanf("%f",&x); if((x>=0)&&(x<=1)) y=exp(sqrt(x))-1;else if((x>=3)&&(x<=4)) y=x+2;else {z=pow(x,2)*(p/180);y=sin(z);} printf("x=%f\ny=%f\n",x,y); }(2)运行结果:⎪⎩⎪⎨⎧+-=)sin(2||12x x e yx4310≤≤≤≤x x当x 取其他值时(3)程序分析: 因为输入的是数字,所以应该先将数字转化为弧度制,故在程序开头先定义符号常量P 为3.141592,之后运行x 取不同值时所对应的程序,自后输出相应结果。
(五)5模仿第4题,写程序实现以下函数:⎪⎩⎪⎨⎧≥-≤≤-<=)10(113)101(12)1(x x x x x x y(1)程序代码:# include <stdio.h># include <math.h> int main() {float x,y;scanf("%f",&x); if(x<1) y=x;else if((1<=x)&&(x<=10)) y=2*x-1; else y=3*x-11;printf("x=%f\n,y=%f\n",x,y); }(2)运行结果:(3)程序分析:使用if嵌套语句,(六)实验任务6(1)程序代码:#include <stdio.h>void main( ){ int choice;int value;printf("Convert:\n"); /* 显示菜单*/printf(" 1:decimal to hexadecimal\n ");printf(" 2:hexadecimal to decimal\n ");printf(" 3:decimal to octal\n ");printf(" 4:octal to decimal\n");printf("enter your choice: ");scanf("%d",&choice);switch (choice){ c ase 1: /* 选中1时处理*/printf("enter decimal value:");scanf("%d",&value);printf("%d in hexadecimal is:%x\n",value,value);break;case 2: /* 选中2时处理*/printf("enter hexadecimal value:");scanf("%x",&value);printf("%x in decimal is:%d\n",value,value);break;case 3: /* 选中3时处理*/printf("enter decimal value:");scanf("%d",&value);printf("%d in octal is:%o\n",value,value);break;case 4: /* 选中4时处理*/printf("enter octal value:");scanf("%o",&value);printf("%o in decimal is:%d\n",value,value);break;}}(2)运行结果:(3)程序分析:该程序实现了不同进制间的转换,首先提示输入1~4中的一个数用来选择想实现几进制到几进制间的转换,例如首先输入1,程序会提醒输入一个你想转换的数字,之后程序会将你所输入的十进制数转换为二进制数。
(七)实验任务7(1)程序代码:# include <stdio.h>int main(){char DATE;scanf("%c",&DATE);printf("The Day Is:\n");switch(DATE){case'1':printf("Monday\n");break;case'2':printf("Tuesday\n");break;case'3':printf("Wednsday\n");break;case'4':printf("Thursday\n");break;case'5':printf("Friday\n");break;case'6':printf("Saturday\n");break;case'7':printf("Sunday\n");break;default:printf("enter date error!\n\a");}}(2)运行结果:(3)程序分析:日期date定义为字符变量,从键盘中输入1~7中任意一个数,switch得到date的值并把它和各case中给定的值(‘1’‘2’,‘3’,‘4’,‘5’,‘6’,‘7’之一)相比较,如果其中之一相同,则执行该case后面的语句(即printf后的语句)。