实验二 选择结构程序设计
一、实验目的和要求
1. 掌握关系表达式和逻辑表达式的使用。 2. 熟悉选择结构程序设计。
3. 熟练使用if语句进行程序设计。
4. 使用switch语句实现多分支选择结构。
二、实验设备
PC机 Visual C++6.0
三、实验内容 (一)实验准备
1.从程序流程的角度来看,程序可以分为三种基本结构, 即顺序结构、分支(选择)结构、循环结构。 2.If-else语句:
一般形式为: if(表达式) 语句1; else
语句2;
该语句用于实现分支结构,根据表达式的值选择语句1或语句2中的一条执行。首先求解表达式,如果表达式的值为“真”,则执行语句1;如果表达式的值为“假”,则执行语句2. 2.switch语句
switch语句可以处理多分支选择问题,根据其中break语句的使用方法,一般分为三种情况。 (二)实验项目 1. 计算a+|b| #include
int a,b,z;
printf(\ scanf(\ if (b>=0){ b=b; } else{ b=-b; } z=a+b;
printf(\
return 0 ; }
2 判断一个整数是否可以被3和5整除 #include
int a ;
printf(\scanf(\if (a%3==0){
printf(\可以被3整除:\\n\} else{
if (a%5==0){
printf(\可以被5整除:\\n\}
else {
printf(\不可以被5整除,也不可以被3整除:\\n\ } }
3.从键盘输入一个字符型数据,若输入一个数字字符('0'-'9'),则将其转换成相应的整数显示出来;若输入其它字符,则显示出错信息。 #include
int a ;
printf(\ scanf(\ if((0<=a)&&(a<=9)) {
printf(\ } else {
printf(\这个字符不是个整数:\\n\ }
return 0 ; }
4.编写一个程序,其功能为:从键盘输入三个数x、y、z,判断x+y=z是否成立,若成立输出“x+y=z”的信息,否则输出“x+y!=z”的信息。 #include
int x,y,z;
printf (\请输入x,y,z:\\n\ scanf (\ if (x+y==z) {
printf (\ } else {
printf (\ }
return 0; }
5.编写一个程序,其功能为:输入三个整数,输出最大数和最小数。 #include
int a,b,c,x,y;
printf (\请输入三个数字:\\n\ scanf (\ x=0; if (a>b) {
x=a; if (x>c) {
x=x; } else {
x=c; } } else {
x=b; if(x>c) {
x=x; } else {
x=c; }
} y=0;
if (a
y=a; if (y y=y; } else { y=c; } } else { y=a; if(y>c) { y=c; } else { y=y; } } printf (\最大数是%d,最小值是%d\\n\ return 0; } 6.如下两个线性方程组的两个未知数为x1和x2: ax1+bx2=m cx1+dx2=n 该方程的唯一解为(ad-cb不等于零时): 请编写一个程序,读取a、b、c、d的值,计算x1和x2的值。如果ad-cd等于零,应给出适当的提示信息。 #include int a,b,c,d,m,n,x1,x2; printf(\请输入方程组a,b,c,d,m,n\\n\ scanf(\ if(a*d-c*b==0) { printf(\此方程组无解\\n\ } else { x1=(m*d-b*n)/(a*d-c*b); x2=(n*a-m*c)/(a*d-b*c); printf(\此方程组的解为%d和%d\\n\ } return 0; } 7.某产品生产成本c=c1+mc2,其中c1为固定成本,c2为单位产品可变成本。当生产数量m<10000时,c1=20000元,c2=10元;当生产数量m≥10000时,c1=40000元,c2=5元;编写一个程序,其功能为:分别计算出生产数量为6000以及25000时,总生产成本及单位生产成本。 #include int c,c1,c2,m; printf(\请输入生产数量m:\\n\ scanf(\ if (m<10000) { c1=20000; c2=10; } else { c1=40000; c2=5; } c=c1+m*c2; printf(\生产成本为%d\\n\ return 0; } 8.编写一个程序,计算下列函数: x y= x<1 1≤x<10 2x-1 3x-11 X≥10 #include int x,y; printf (\ scanf (\ if (x<1) {y=x;} else { if(x>=10) {y=3*x-11; } else {y=2*x-1; } } printf (\return 0; } 9. 编写一个程序,其功能为:从键盘输入一个字符,判别该字符的类别,并输出向相应信息。 #include char i; scanf(\ if (i<32) {printf (\此字符为控制字符\\n\ else { if((i>='0')&&(i<='9')) {printf (\此字符为数字字符\\n\ else { if((i>='A')&&(i<='Z')) {printf (\此字符为大写字母\\n\ else { if((i>='a')&&(i<='z')) {printf (\此字符为小写字母\\n\ else { printf(\此字符为其他字符\\n\ } } } } return 0; } 10.编写一个程序,其功能为:从键盘输入一元二次方程ax2+bx+c=0的各项系数a、b、c的值,判断方程实数解的不同情况,分别求解方程,并输出(结果保留两位小数,如无实根给出相应的信息)。 应用如下规则: (1)若a、b的值为零,则没有解; (2)若a为零,只有一个实数解; (3)若b2-4ac为负数,则没有实数解;若b2-4ac为正数,有两个实数解;若b2-4ac为零,有两个相等的实数解。 #include float a,b,c; double x1,x2; printf (\ scanf (\ if((a==0)&&(b==0)) {printf (\此方程没有解\\n\ else { if(a==0) { printf(\此方程有一个实根\\n\ else {if((b*b-4*a*c)<0) {printf (\此方程无实根\\n\ else { if((b*b-4*a*c)==0) {x1=((-b)/(2*a)); printf(\此方程有两个相等实根: x1=x2=%lf\\n\ } else {x1=(-b+(sqrt(b*b-4*a*c)))/(2*a); x2=(-b-(sqrt(b*b-4*a*c)))/(2*a); printf(\此方程有两个实根: x1=%lf x2=%lf\\n\ } } } } return 0; } 11.编写程序,输入三角形三边 a、b、c,判断a、b、c能否构成三角形,若不能则输出相应的信息,若能则判断组成的是等腰、等边、直角还是一般三角形。 #include int a,b,c; printf(\ scanf(\ if((a+b>c)&&(a+c>b)&&(b+c>a)) { if(a==b&&b==c&&a==c) {printf(\能构成等边三角形\\n\ } else { if(a==b||b==c||a==c) {printf(\能构成等腰三角形\\n\ } else { if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b) {printf(\能构成直角三角形\\n\ } else {printf(\能构成一般三角形\\n\ } } } } else {printf(\不能构成三角形\\n\ } return 0; } 12.某个电力公司对其用户的收费规定如下: 用电数量 收费标准 0~200 x*0.5元 201~400 100+(x-200)*0.65元 401~600 230+(x-400)*0.8元 601以上 390+(x-600)*1.0元 编写程序,对于一个输入的用电数量,计算用户的缴费额。 #include double x,y; printf(\ scanf(\ if(x<0) {printf(\输入的数据有误!\\n\ else { if(x>=0&&x<=200) {y=x*0.5; } else { if(x>=201&&x<=400) {y=100+(x-200)*0.65; } else { if(x>=401&&x<=600) {y=230+(x-400)*0.8; } else {y=390+(x-600)*1.0; } } printf(\ } return 0; } 13某个服装展示厅对所卖商品打折规定如下: ------------------------------------------------------------ 购买总额 折扣 ------------------------------------------- 机加工产品 手工产品 0~100 - 5% 101~200 5% 7.5% 201~300 7.5% 10.0% 大于300 10.0% 15.0% -------------------------------------------------------------- 编写程序输入购买总额,计算并输顾客实际应付的货款。 #include \int main(void) { double x,y; int lb; printf(\请输入顾客购买总额x:\\n\ scanf(\ printf(\请输入顾客购买类别lb:\\n\ scanf(\ if(x<0) printf(\输入购买总额数据有误!\ else { if(x>=0&&x<=100) { if(lb==0) y=x; else if(lb==1) y=x*0.05; else printf(\输入购买类别数据有误!\ } else if(x>=101&&x<=200) { if(lb==0) y=x*0.5; else if(lb==1) y=x*0.075; else printf(\输入购买类别数据有误!\ } else if(x>=201&&x<=300) { if(lb==0) y=x*0.075; else if(lb==1) y=x*0.1; else printf(\输入购买类别数据有误!\ } else { if(lb==0) y=x*0.1; else if(lb==1) y=x*0.15; else printf(\输入购买类别数据有误!\ } printf(\ } return 0; } 14编程在屏幕上显示一张如下所示的时间表: *******Time******* 1morning 2afternoon 3night Please enter your choice: 根据用户输入的时间序号显示相应的问候信息,选择1时显示“Good morning”, 选择2时显示“Good afternoon”, 选择3时显示“Good night”,对于其他选择显示“Selection error!”。 #include int xh; printf(\ printf(\ printf(\ printf(\ printf(\请输入您的选择(1、2、3):\ scanf(\ switch(xh) { case 1: printf(\ case 2: printf(\ case 3: printf(\ default: printf(\ } return 0; } 15编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式: 操作数1 运算符op 操作数2 计算表达式的值,指定的运算符为加(+)、减(-)、乘(*)、除(/) #include float x,y,z; char op; printf(“请输入表达式:”); scanf(“%f,%c,%f”,&x,&op,&y); if (op==‘+’) z=x+y; if (op==‘-’) z=x-y; if(op==‘*’) z=x*y; if (op==‘/’) {if (y!=0) z=x/y; else printf(“除数为0”);} printf(“%f%c%f=%f\\n”,x,op,y,z); } #include { float x,y,z; char op; printf(“请输入表达式:”); scanf(“%f,%c,%f”,&x,&op,&y); switch(op) { case ‘+’: z=x+y; case ‘-’: z=x-y; case ‘*’: z=x*y; case ‘/’: {if (y!=0) z=x/y; else printf(“除数为0”);} } printf(“%f%c%f=%f\\n”,x,op,y,z); return 0; } 16输入某学生的成绩,经处理后给出学生的等级,等级分类如下: 90分以上(包括90): A 80至90分(包括80):B 70至80分(包括70):C 60至70分(包括60):D 60分以下: E 方法一:(用if语句的嵌套) ##include float score; printf(\请输入成绩:\ scanf(\ if(score>=0&&score<=100) if(score>=90) printf(\ else if(score>=80) printf(\ else if(score>=70) printf(\ else if(score>=60) printf(\ else printf(\ else printf(\成绩输入有误!\return 0; } 方法二:用switch语句 #include float score; int p; printf(\请输入成绩:\ scanf(\ p=(int)(score/10); if(score>=0&&score<=100) switch(p) { case 10: case 9: printf(\ case 8: printf(\ case 7: printf(\ case 6: printf(\ default: printf(\ } else printf(\成绩输入有误!\return 0; } 四、实验小结 通过本次实验我进一步熟悉了C语言操作环境,学习了两种条件语句,弄清了语句格式和使用方法。学会了分别使用使用if嵌套语句和switch语句实现功能,其中在使用if嵌套时要注意分清层次,明白else所对应的应当是离得最近的if语句,防止发生逻辑错误。条件判断语句可以结合逻辑运算符更好得实现。