当前位置:文档之家› 实验3选择结构程序设计

实验3选择结构程序设计

《C语言程序设计》实验报告----------------------------------------------------------------------------------------------实验3选择结构程序设计一.实验目的1.了解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。

2.学会正确使用逻辑运算符和逻辑表达式3.熟练掌握if语句和switch语句;4.结合程序掌握一些简单的算法。

5.学习调试程序二.实验内容和步骤1.基础知识和概念(1)分析下面程序,掌握关系表达式的运算规则。

#include <stdio.h>int main(){char ch='w';int a=2,b=3,c=1,d,x=10;printf("%d",a>b==c);printf("%d",d=a>b);printf("%d",ch>'a'+1);printf("%d",d=a+b>c);printf("%d",3<=x<=5);printf("%d\n",b-1==a!=c);return 0;}总结与反思:1.运用关系运算符比较的结果,真为1,假为0;2.注意掌握运算符的优先顺序;3. (3<=x)<=5结果为真=1,(1==1)!=1结果为假=0(2)分析运行下面的程序,掌握逻辑表达式的运算规则。

#include <stdio.h>int main(){char ch='w';int a=2,b=0,c=0;float x=3.0;printf("%d",a&&b);printf("%d",a||b&&c);printf("%d",!a&&b);printf("%d",a||3+10&&2);printf("%d",!(x==2));printf("%d",!x==2);printf("%d\n",ch||b);return 0;}总结与反思:1.运用逻辑运算符比较的结果,真为1,假为0;2.逻辑与&&优先级11大于逻辑或||优先级12(3)分析运行下面的程序,掌握关系及逻辑混合表达式的运算规则。

#include <stdio.h>int main(){int a=3,b=5,c=8;if(a++<3&&c--!=0) b=b+1;printf("a=%d\tb=%d\tc=%d\n",a,b,c);return 0;}总结与反思:该程序中的条件判断表达式“a++<3&&c--!0”是一个逻辑表达式,关系表达式“a++<3”的值为假,因此后一部分“c--!=0”不再计算。

2.程序改错和填空(1)给定程序c3-4.c的功能是,对于以下函数:y=x(x<1)y=2x-1(1<=x<10)y=3x-11(x>=10)用scanf函数输入x的值,求y的值。

#include <stdio.h>int main(){int x,y;scanf("%d",&x);if (x<1) y=x;else if (1<=x&&x<10) y=2*x-1;else y=3*x-11;printf("y=%d\n",y);return 0;}反思与总结:1.在紧跟着if选择语句的条件表达式的圆括号之后没有分号;2.定义的x是int型,键入的x=0.5时,y就会向零取整等于0,而不是0.5!(2)以下给定程序c3-5.c的功能是输入一个年份,判断该年是否为闰年。

#include <stdio.h>int main(){int year,leap;printf("Please enter a year:");scanf("%d",&year);if (year%4!=0) leap=0;else if ((year%100)!=0) leap=1;else if ((year%400)!=0) leap=0;else leap=1;if(leap)printf("%d is a leap year\n",year);elseprintf("%d is not a leap year\n",year);return 0;}总结与反思:1.错误不一定只在语法结构上,也可能在逻辑思维上;2.能被4整除但不能被100整除的year或者能被400整除的year是闰年。

(3)以下给定程序c3-6.c的功能是实现两个浮点数的四则运算。

#include <stdio.h>main(){float d1,d2;char op;printf("输入d1 op d2");scanf("%f%c%f",&d1,&op,&d2);switch(op){float temp;case '+' :temp=d1+d2;printf("%f %c %f=%f\n",d1,op,d2,temp);break;case '-' :temp=d1-d2;printf("%f %c %f=%f\n",d1,op,d2,temp);break;case '*' :temp=d1*d2;printf("%f %c %f=%f\n",d1,op,d2,temp);break;case '/' :temp=d1/d2;printf("%f %c %f=%f\n",d1,op,d2,temp);break;default:printf("错误!\n");}return 0;}总结与反思:在本题中op代表了四则运算运算符号,temp代表了浮点数结果。

3.程序设计题(1)从键盘上输入某学生的考试成绩,要求输出成绩等级A、B、C、D、E。

学生的成绩可分成5个等级,90~100分为A级,80~89分为B级,70~79分为C级,60~69分为D级,0~59分为E级,要求在输出负数时,给出错误提示。

#include<stdio.h>int main(){int x;scanf("%d",&x);if(x>100||x<0) printf("输入数据错\n");elseswitch(x/10)如果漏写了else,运行结果就变成:{case 6:printf("D\n");break;case 7:printf("C\n");break;case 8:printf("B\n");break;case 9:case 10:printf("A\n");break;default:printf("E\n");break; 正确的运行结果应为:}return 0;}总结与反思:1.先判断数据是否合理,再switch,正好解决了100与101的区别问题。

2.case后面的表达式一定是常量表达式,其值的类型一般为整型或可自动转为整型的类型(例如字符型)(2)根据输入的三角形的三条边判断是否能组成三角形,若可以则输出它的面积和三角形的类型。

#include<stdio.h>#include<math.h>int main(){float a,b,c,p,s;scanf("%f,%f,%f",&a,&b,&c);p=0.5*(a+b+c);s=sqrt(p*(p-a)*(p-b)*(p-c));if(a+b<=c||a+c<=b||b+c<=a) printf("不能构成三角形\n");else if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a) printf("是直角三角形\ns=%f\n",s);else if(a==c&&b==c) printf("是等边三角形\ns=%f\n",s);else if(a==b||a==c||b==c) printf("是等腰三角形\ns=%f\n",s);else printf("是一般三角形\ns=%f\n",s);return 0;}总结与反思:1.\n的位置是放在格式说明部分的引号里面 2.运用数学公式别忘了#include<math.h>3.第一步要把所有需要用到的变量先全部定义出来,才能进行下一步(比如scanf)(3)输入某职工的工资,根据不同档次扣除工资所得税,然后计算实发工资。

#include<stdio.h>int main(){float fs,rs;scanf("%f",&fs);if(fs<850) rs=fs;else if(fs<=1500) rs=fs-0.01*fs;else if(fs<=2000) rs=fs-0.015*fs;else rs=fs-0.02*fs;printf("rs=%.2f\n",rs);return 0;}总结与反思:1.用scanf输入,&总是忘记!2.在界定if···else语句后的复合语句时别忘了加花括号{;}(4)对于一个不多于5位的正整数,1.求出它是几位数;2.分别打印出每一位数字;3.按逆序打印出各位数字。

#include <stdio.h>int main(){int a,b,c,d,e,n;printf("请输入一个五位数以下的正整数\n");scanf("%d",&n);a=n/10000;b=(n-a*10000)/1000;c=(n-a*10000-b*1000)/100;d=(n-a*10000-b*1000-c*100)/10;e=(n-a*10000-b*1000-c*100-d*10);if (n<0||n>99999) printf("输入错误\n");else if (9999<n) printf("这是五位数\n%d%d%d%d%d\n",e,d,c,b,a);else if (999<n) printf("这是四位数\n%d%d%d%d\n",e,d,c,b);else if (99<n) printf("这是三位数\n%d%d%d\n",e,d,c);else if (9<n) printf("这是两位数\n%d%d\n",e,d);else printf("这是一位数\n%d\n",e);return 0;}总结与反思:注意取各个位数的方法。

相关主题