200 likes | 420 Views
第 4 章. 复习前几章内容:. 一、 C 的数据类型. 复习前几章内容:. 二、常量与变量 整形常量、实型常量、字符常量、字符串常量、符号常量 整形变量( int 、 long 等)、实型变量( float 、 double )、字符型变量( char ). 三、 C 的运算符与表达式 ( 优先级和结合性 ) • 算术运算符 (+ - * / % ++ --) • 关系运算符 (> < == >= <= !=) • 逻辑运算符 (! && ||)
E N D
复习前几章内容: 一、C的数据类型
复习前几章内容: 二、常量与变量 整形常量、实型常量、字符常量、字符串常量、符号常量 整形变量(int、long等)、实型变量(float、double)、字符型变量(char) 三、C的运算符与表达式(优先级和结合性) •算术运算符 (+ - * / % ++ --) •关系运算符 (> < == >= <= !=) •逻辑运算符 (! && ||) •赋值运算符 (= 及其扩展赋值运算符) •条件运算符 (? :) •逗号运算符 (,) •指针运算符 (* 和 &)
复习前几章内容: 四、程序的三种基本控制结构: 顺序结构、选择结构(if、switch)、循环结构(do……while、while、for) 五、C语句可分为以下五类: 表达式语句、函数调用语句、控制语句(三大类九种)、复合语句、空语句 六、数据输入输出函数: 字符输出函数——putchar 函数 字符输入函数——getchar函数 格式输出函数——printf函数 格式输入函数——scanf函数
第四章选择结构C程序设计 4.1 if结构 4.1.1 if语句(单分支结构) 4.1.2 if…else…语句(双分支结构) 4.1.3 if…else…if语句(多分支结构) 4.2 switch结构 本章小结 退出
4.1 if结构 4.1.1 if语句(单分支结构) if语句有单分支、双分支和多分支等结构,根据问题的不同,选择适当的结构。 if语句单分支结构的一般形式: if(表达式) 语句; 说明: (1) if语句中的“表达式”必须用“(”和“)”括起来。 (2) 表达式一般为关系表达式、逻辑表达式,也可为算术表达式,其值按非零为 Ture(真),零为False(假)进行判断。 (3) 单分支if语句的执行过程是先判断表达式是否为真,如果为真则执行语句, 如果为假,则不执行语句。 (4) 如果当条件成立要执行多个语句,就要使用“{ }”来构成复合语句。 例如,键盘输入一个整数a,若a>=0则输出“正数”,反之不输出任何信息结束程序。 #include<stdio.h> main( ) { int a; scanf(“%d”,&a); if(a>=0) printf(“正数”); }
4.1 if结构 4.1.2 if…else…语句(双分支结构) if语句双分支结构的一般形式:if(表达式) 语句1; else 语句2; 说明: (1) else子句必须与if配对使用,不能单独使用。 (2) 当if和else下面的语句由多个语句组成时,要使用“{ }”来构成复合语句。 (3) 双分支if语句的执行过程是:首先计算if后面表达式的值,若结果为非零值,则执行if下的语句1而不执行语句2;否则不执行语句1而执行语句2。因此语 句1和语句2只有一个会被执行。 例如,键盘输入一个整数a,若a>=0则输出“正数”,反之输出“负数”。 main( ) { int a; scanf(“%d”,&a); if(a>=0) printf(“正数”); else printf(“负数”); }
4.1 if结构 4.1.2 if…else…语句(双分支结构) 举例:输入x、y的值,并当x<y时交换x、y的值,并输出x、y; main() {float x,y,temp; scanf(“x=%f y=%f”,&x,&y); if (x>y) else {temp=x; x=y; y=temp; } Printf(“x=%f y=%f\n”,x,y); }
4.1 if结构 4.1.2 if…else…语句(双分支结构) 举例:从键盘输入年份year(4位十进制数),判断其是否闰年。闰年的条件:能被4整除、但不能被100整除,或者能被400整除。 main() {int year; printf(“plrase input the year:”); scanf(“%d”,&year); if ((year%4==0 && year%100!=0) || (year%400==0)) printf(“%d is a leap year.\n”,year); else printf(“%d is not a leap year.\n”,year); }
4.1 if结构 4.1.3 if…else…if语句(多分支结构) if语句构成多分支结构的一般形式:if(表达式1) if(表达式2) 语句2; else 语句3 else if(表达式4) 语句4 else 语句5; 说明: (1) if语句中的if和else部分均是可嵌套的。 (2) if语句嵌套时,else子句与if的匹配原则:就近配对原则 (3) 为明确匹配关系,避免匹配错误,使用行缩进的格式。 返回
4.1 if结构 4.1.3 if…else…if语句(多分支结构) 举例:编程输入一个x的值,输出y的值; -1 (x<0) y= 0 (x=0) 1 (x>0) main() {int x,y; scanf(”%d”,&x); if (x<0) y=-1; else if(x==0) y=0; else y=1; printf(“x=%f y=%f\n”,x,y); } if (x>=0) if (x>0) y=1; else y=0; else y=-1;
4.1 if结构 4.1.3 if…else…if语句(多分支结构) 输出成绩等级:90=<cj<=100:优秀;cj>=80:良好;cj>=70:中等;cj>=60:及格;0=<cj<60:不及格;否则:出错。 if (cj>100 || cj<0) printf(“cj error!”) else if (cj>=90) printf(“cj youxiu”); else if (cj>=80) printf(“cj lianghao”); else if (cj>=70) printf(“cj zhongdeng”); else if (cj>=60) printf(“cj jige”); else printf(“cj bujige”); 讲解书本61页的例4.3和例4.4
4.1 if结构 4.1.3 if…else…if语句(多分支结构) 课后习题:求ax^2+bx+c=0的解,a,b,c从键盘输入。(按上课老师讲的思路) printf("x1=x2=%f\n",x1);} else if (d>0) {x1=(-b+sqrt(d))/(2*a); x2=(-b-sqrt(d))/(2*a); printf("x1=%f,x2=%f\n",x1,x2);} else {x1=-b/(2*a); x2=sqrt(fabs(d))/(2*a); printf("x1=%f+%fi\n",x1,x2); printf("x2=%f-%fi\n",x1,x2);} } #include "math.h" main() {float a,b,c,x1,x2,d; printf("enter number a,b,c:"); scanf("%f %f %f",&a,&b,&c); d=b*b-4*a*c; if (a==0) {x1=x2=-c/b; printf("x1=x2=%f\n",x1);} else if (d==0) {x1=x2=-b/(2*a);
4.2 switch结构 C语言提供了switch语句直接处理多分支选择。 1.switch语句的格式 switch(表达式) { case 常量表达式1:语句组1;break; case 常量表达式2:语句组2;break; ...... case 常量表达式n:语句组n;break; default:语句组n+1;break; }
4.2 switch结构 2.switch语句的执行过程 (1)计算switch后面“表达式”的值,当其与某个case后面的“常量表达式”的值相同 时,就执行该case后面的语句(组);当执行到break语句时,跳出switch语 句,转向执行switch语句的下一条。 (2)如果没有任何一个case后面的“常量表达式”的值,与“表达式”的值匹配,则执 行default 后面的语句(组)。然后,再执行switch语句的后续语句。 (3)switch语句中可以省略default子句。在这种情况下,当所有情况都不满足时,将不执行任何语句组,直接跳出switch语句。 例如,#include<stdio.h> main() {int k=2; switch(k){ case 1:putchar(‘P’); case 2: case 3: putchar(‘Q’);break; default: putchar(‘S’); } 程序运行输出结果为:Q
4.2 switch结构 举例:根据学生成绩分类A、B、C、D输出具体分数; A—85~100;B—70~84;C—60~69;D—<60; main() {char g; printf(“please input a grade:”); scanf(“%c”,&g); switch(g) {case ‘A’:printf(“85~100\n”);break; case ‘B’:printf(“70~84\n”);break; case ‘C’:printf(“60~69\n”);break; case ‘D’:printf(“<60\n”);break; default:printf(“input error\n”);break; } }
4.2 switch结构 • 3.关于switch语句的说明 • switch后面的“表达式”,可以是int、char或枚举型中的一种。 • 每个case后面“常量表达式”的值,必须各不相同,否则会出现相互矛盾的 现象(即对表达式的同一值,有两种或两种以上的执行方案)。 • 各case及default子句的先后次序不影响程序执行结果。 • 多个case子句可共用同一语句(组)。 • 用switch语句实现的多分支结构程序,也可以用if语句或if语句的嵌套实现 • 如果case后面的语句组不跟随break语句,则在执行该语句组后,将不判断后面的条件,直接执行其后面的各语句组。 • 4、分析书本P73-P75的例4.6和例4.7。 返回
本 章 小 结 本章系统的介绍了选择结构。选择结构一般由if语句提供两种分支的选择,if语句的嵌套可以实现多分支的选择;switch语句是根据表达式的不同取值而执行不同分支的多种选择。需要说明的是在实现多分支结构时用switch语句比用if语句嵌套来实现要简洁,但由于switch语句中的表达式类型仅限于整型、字符型或枚举型,因此实际编程中有些多分支结构还需要用if语句嵌套来实现。 返回
本 章 作 业 本学期上机作业请大家把调试出来的正确程序结果写在作业本上上交。 第一周上机作业: 1、求ax^2+bx+c=0的解,a,b,c从键盘输入。(按上课老师讲的思路) 2、输入任意一个数,若为正数,求其平方根;若为负数,求其绝对值;否则输出“BYE,BYE”!。 3、输入一个大写字母,改成小写输出。 *4、给出百分制成绩分数,输出对应等级A~E。 90~100—A;80~89—B;70~79—C;60~69—D;60以下—E;其他—出错; 书本作业: 完成第三章、第四章课后题除了编程题以外的其他作业,完成作业时有困难可以借助上机课上机验证,但是要明白为什么?
本 章 作 业 本学期上机作业请大家把调试出来的正确程序结果写在作业本上上交。 第二周上机作业: 1、输入一个四位正整数,求各位数字之和; 2、输入一个职工的月薪salary,计算并输出应交的个人所得税tax=rate*(salary-850)。其中rate的计算方法:见书本P69。 3、输入一个字符,如果它是小写字符,则把它变成大写字符,如果是大写字符,则把它变成小写字符;其他字符不变。 书本作业: 完成第三章、第四章课后题除了编程题以外的其他作业,完成作业时有困难可以借助上机课上机验证,但是要明白为什么?