大学C语言程序设计二版(电子工业)_第1页
大学C语言程序设计二版(电子工业)_第2页
大学C语言程序设计二版(电子工业)_第3页
大学C语言程序设计二版(电子工业)_第4页
大学C语言程序设计二版(电子工业)_第5页
已阅读5页,还剩25页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、大学C/C+语言程序设计 第4章 选择结构程序设计第4章 选择结构程序设计4.1 if语句4.2 switch 语句 C语言的语句可分为以下四类: 简单语句、空语句、复合语句和流程控制语句。 简单语句又分为:表达式语句和函数调用语句。 x+y%4; z-;x=a/2+fabs( b );printf(“hello!”); 复合语句:用一对花括号 将多条语句组合在一起,在语法上相当于一条语句。 . int x,y; x =exp(3); y=pow(2,4) ; printf(“x=%d,y=%dn”, x,y);.4.1 if语句(条件选择语句)if语句的三种形式(1)形式一:单分支 一般格式

2、:if(表达式) 语句;例if (xy) max=x; 执行过程:实验教程P18页6题(if 单分支结构)#include stdio.h main( ) int a=8,b=7,c=9,t=0; if(ab) t=a;a=b;b=t; if(ac) t=a;a=c;c=t; if(bc) t=b;b=c;c=t; printf(%5d%5d%5dn,a,b,c); kj17 输出结果: 9 8 7三个数降序输出实验教程P18页6题(if 单分支结构)#include stdio.h main( ) int a=8,b=7,c=9,t=0; if(ab) t=a;a=b;b=t; if(ac)

3、 t=a;a=c;c=t; if(by) max=x; else max=y; printf(“%d”,max);(2)形式二:双分支一般格式:if (表达式) 语句1; else 语句2;执行过程:#include main() int x,y; printf(Enter an integer:); scanf(%d,&x); if(x=0) y=x; printf(%d.absolute value:%dn,x,y); kj18例: 求一个数的绝对值运行:Enter an integer:-12 -12.absolute value :12if(x0) y= -x;else y=x;如:i

4、f(a=b&x=y) printf(“a=b,x=y”); if(3) printf(“OK”); if(a) printf(“%d”,a);if后面的表达式类型任意(关键:非0为真)if或else后面的语句可以是复合语句else 不可以单独使用例 考虑下面程序的输出结果: #include main() int x,y; scanf(“%d,%d”,&x,&y); if(xy) x-; y-; else x+; y+; printf(“%d,%dn”,x,y); kj19Compile Error!if后只能管一条语句说明:(3)形式三:多分支一般格式:if(表达式1) 语句1; else

5、if(表达式2) 语句2; else if(表达式n) 语句n; else 语句n+1;执行过程: 实验教程P18页4题(if 多分支结构)#include “stdio.h”main( ) int a=1,b=2,c=3,d=4; if(abc) printf(“%dn”,d); else if(c-b)=a) printf(“%dn”,2*d); else printf(“%dn”,4*d); kj20例.编程实现:给出一百分制成绩,要求输出成绩等级A、B、C、D。90分以上为A等,8980分为B等,7970分为C等,6960分为D等。假定成绩为实型数据。#includemain() fl

6、oat score; scanf(%f,& score); if (score =90) printf(“An”); if (score =80& score =70& score =60& score 70) printf(“Dn”); kj21例:百分制成绩的等级划分问题之解法1:仅用if单分支语句实现#includemain() float score; scanf(f, &score); if(score=90) printf(An); else if(score=80) printf(Bn); else if(score=70) printf(Cn); else printf(Dn)

7、; kj22解法2:用if多分支语句实现if语句嵌套:如果if(表达式)或else后面的语句又包含一个或多个if语句,就称为if语句的嵌套。内嵌的if-else语句内嵌if-else语句if语句的两层嵌套结构如下:if(表达式1) if(表达式1_1) 语句1_1; else 语句1_2;else if(表达式2_1) 语句2_1; else 语句2_2;修改1: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”); kj22cif else 配对原则:缺省 时,else总是和它上面离它最近的未配对的if配对例:修改程序,使之 满足 1.

8、 a,b,c相等时输出 :a=b=c; 2. a!=b时输出a!=b if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);想改变if else默认配对方法:加 例: 计算分段函数。 x + 2 x= x -10 x *2 10 = x 0 x / 2 x 10 kj23 if(x=0) if(x=-10) y=x+2; else y=x-2; else if(x=10) y=x*2; else y=x/2; if(x=-10) y=x+2;else if(x=0) y=x-2; else if(x0 。常量可以是整数或字符。例 switc

9、h(score) case 9: printf(“A”); case 8: printf(“B”); case 7: printf(“C”); case 6: printf(“D”); default : printf(“E”); kj24运行结果:score为9时,输出: ABCDE如果score分别为3,2,1呢?说明:语句标号作用,必须用break跳出case后可包含多个可执行语句,且不必加 多个case可共用一组执行语句如: case A:printf(“score90n”);break; case B: case C: printf(“score60n”); break; .swit

10、ch可嵌套,其中的break语句只能退出本层的switch语句体 例 :. int score; scanf(“%d”,&score); switch(score/10) case 9: printf(“A”); break; case 8: printf(“B”); break; case 7: printf(“C”); break; case 6: printf(“D”); break;. kj24运行结果:score为95时,输出: A例:百分制成绩的等级划分之解法3:用switch语句实现main ( ) int a=1, b=0;switch(a)case 1: switch (b)

11、 case 0: printf(*0*); break; case 1: printf(*1*); break; case 2: printf(*2*); break; kj25运行结果:*0*2*例(习题9):根据程序写出运行结果?例: 输入两个整数和一个四则运算符,要求输出计算结果。#includevoid main() int num1, num2; char sign; scanf(“d , c,d, &num1, &sign, &num2); switch(sign) case +: printf(dn, num1+num2); break; case -: printf(dn, n

12、um1-num2); break; case *: printf(dn, num1*num2); break; case /: printf(dn, num1/num2); break; default: printf(input errorn); kj264.3 实 例 解 析例1:根据程序写出运行结果答案:2答案:13 #include main ( ) int x=2,y=-1,z=2; if(xy) if(y0) z=0; else z+=1; printf(“%dn“,z); kj22e#include main ( ) int i=10; switch(i) case 9:i+=1

13、; case 10:i+=1; case 11:i+=1; default:i+=1; printf(%dn,i);例:根据输入的年份和月份,计算该月有多少天?(考虑闰年和平年的情况)#include main() int year,month,day; printf(“input the year and month:”); scanf(“%d,%d”,&year,&month);/输入年份和月份 switch(month) case 4: case 6: case 9: case 11: day=30;break; case 2: if (year%4=0&year%100!=0|year

14、%400=0) day=29; else day=28; break; default:day=31;break; printf(“The month is %d dayn”,day);/输出该月的天数#include #include main() float a,b,c,m,n,x1,x2; scanf(%f%f%f,&a,&b,&c); n=-b/(2*a); m=b*b-4*a*c; if(m=0) x1=x2=n; printf(x1=x2=%fn,x1); else if(m0) x1=n+sqrt(m)/(2*a); x2=n-sqrt(m)/(2*a); printf(x1=%f,x2=%fn,x1,x2); else x1=n;x2=sqrt(fabs(m)/(2*a); printf(x1=%f+%fi,x2=%f-%fin,x1,x2,x1,x2); kj28输入:a=1,b=3,c=2 输出

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论