一、实验目的
(一)掌握C语言关系表达式和逻辑表达式的运算和使用;
(二)正确使用条件控制语句(if语句、switch语句)进行选择结构程序设计。
二、预习要求
(一)关系运算符和关系表达式、逻辑运算符和逻辑表达式;
(二)if语句的三种形式(单分支、双分支、多分支),以及if语句的嵌套;
(三)switch语句的形式。
三、实验内容
(一)输入下面两段程序并运行,掌握case语句中break语句的作用。
1. /* c3-2.c */ 2. /* 不含break的switch */ 3. #include "stdio.h" 4. void main( ) 5. { int a,m=0,n=0,k=0; 6. scanf("%d",&a); 7. switch(a) 8. { case 1: m++; 9. case 2: 10. case 3: n++; 11. case 4: 12. case 5: k++; 13. } 14. printf("%d,%d,%d\n",m,n,k); 15. }
1. /* c3-3.c */ 2. /* 含break的switch */ 3. #include "stdio.h" 4. void main( ) 5. { int a,m=0,n=0,k=0; 6. scanf("%d",&a); 7. switch(a) 8. { case 1: m++; break; 9. case 2: 10. case 3: n++; break; 11. case 4: 12. case 5: k++; 13. } 14. printf("%d,%d,%d\n",m,n,k); 15. }
分别从键盘上输入1、3、5,写出程序运行的结果。
(二)完善程序,从键盘上输入x的值,按下式计算y的值。
编程提示:注意逻辑表达式的正确表达方法,数学中的1≤x<10应使用C语言的逻辑表达式(x>=1 && x<10)来表示。
下面是用多分支选择结构实现本题的程序结构:
1. /* c3-4.c if 语句实现的多分支结构 */ 2. #include "stdio.h" 3. void main( ) 4. { int x,y; //定义变量; 5. scanf("%d",&x); //输入x; 6. if ( x<1 ) 7. y=x; //按y=x为变量y赋值; 8. else if( x>=1 && x<10 ) 9. y=2*x-1; //按y=2x-1为变量y赋值; 10. else 11. y=3*x-11; //按y=3x-11为变量y赋值; 12. printf("y=%f\n",y); 13. }
注意:在赋值语句中2x应该写成2*x。
(三)编写程序,给出一个百分制成绩,要求输出相应的等级A、B、C、D、E。90分以上为'A',80~89分为'B',70~79分为'C',60~69分为'D',60分以下为'E'。
编程提示:
1.先定义一个整型变量存放百分制成绩、定义一个字符型变量存放相应的等级成绩;
2.输入百分制成绩;
3.将百分制成绩按10分,分档作为switch语句中括号内的表达式;
4.按 case 10:
case 9:
case 8:
case 7:
case 6:
default:
这六种匹配情况分别选择不同的入口;
5.输出转换后的等级成绩。
1. #include "stdio.h" 2. int main() 3. { 4. int score; 5. printf("请输入分数:"); 6. scanf("%d",&score); 7. score=score/10; 8. switch(score) 9. { 10. case 10:printf("A");break; 11. case 9:printf("A");break; 12. case 8:printf("B");break; 13. case 7:printf("C");break; 14. case 6:printf("D");break; 15. default:printf("E"); 16. return 0; 17. } 18. }
(四)下面程序运行时从键盘上分别输入(20,15),(15,20),写出运行结果。
1. /* c3-5.c 分支结构中的复合语句*/ 2. #include "stdio.h" 3. void main( ) 4. { int a,b,t; 5. t = 0; 6. scanf("%d,%d",&a,&b); 7. if (a>b) 8. { t = a ; 9. a = b ; 10. b = t ; 11. } 12. printf("a=%d,b=%d\n",a,b) ; 13. }
四、实验注意事项
(一)C程序中表示比较运算的等号用“==”表示,赋值运算符用“=”表示,不能将赋值号“=”用于比较运算。
(二)控制表达式是指任何合法的C语言表达式(不只限于关系或逻辑表达式),只要表达式的值为“非零”,则为“真”,“零”则为“假”
(三)在if语句的嵌套结构中,else与if的配对原则是:每个else总是与同一个程序中、在前面出现的、而且距它最近的一个尚未配对的if构成配对关系。
(四)case及后面的常量表达式,实际仅是起标号作用。控制表达式的值与某个情况常量一旦匹配,那么,在执行下面语句的过程中,只要不遇到break语句,就一直执行下去,而不再判别是否匹配。允许出现多个“case”与一组语句相对应的情况。
五、思考题
三角形成立条件判断及面积计算。
已知三边能围成三角形的条件是:任意两边之和大于第三边。
已知三边求三角形面积的公式:p=(a+b+c)/2, s=sqrt(p*(p-a)*(p-b)*(p-c))
1. #include "stdio.h" 2. #include "math.h" 3. int main() 4. { 5. int a,b,c,p,area; 6. printf("请输入a,b,c的值:"); 7. scanf("%d %d %d",&a,&b,&c); 8. if((a+b)>c&&(a+c)>b&&(b+c)>a) 9. { 10. p=(1.0/2)*(a+b+c); 11. area=sqrt(p*(p-a)*(p-b)*(p-c)); 12. printf("三角形的面积为:%d",area); 13. } 14. else 15. printf("该三角形不存在!\n"); 16. return 0; 17. }