第2章 分支结构 P26 2.1 if语句 2.2 switch语句 2.3 用条件运算符转换大小写字母 2.4 程序举例 *贯穿教学全过程的实例
2.1 if语句 P27 2.1.1 学习使用关系运算符和if语句 2.1.2 认识省略else的if语句 2.1.3 学会使用逻辑运算符 2.1.5 学会使用if-else if形式的嵌套if语句 返回
2.1.1 学习使用关系运算符和if语句 P27 【实例2.1】编写程序,判断输入的整数是否为6,若是,显示“Right!”和“Great!”,否则显示“Wrong!”和“Sorry!”。
if(a==6) 开始 输入a值 a==6 显示“Right!” 显示“Great!” 显示“Wrong!” 显示“Sorry!” 结束 假 真 if(a==6)
#include <stdio.h> main() { int a=0; printf("Input a:"); scanf("%d",&a); if(a==6) { printf("Right!\n"); printf("Great!\n"); } else { printf("Wrong!\n"); printf("Sorry!\n"); 关系运算符 “>” “>=” “<” “<=” “==” “!=” 第1次运行结果: Input a:6<回车> Right! Great!
#include <stdio.h> main() { int a=0; printf("Input a:"); scanf("%d",&a); if(a==6) { printf("Right!\n"); printf("Great!\n"); } else { printf("Wrong!\n"); printf("Sorry!\n"); 第2次运行结果: Input a:5<回车> Wrong! Sorry!
2.1.2 认识省略else的if语句 P29 【实例2.2】编写程序,随意输入两个整数存放在变量a和b中,最后保证变量a中存放两个数中较大者,b中存放较小者。
a<b 假 真 交换a和b 开始 输入a和b值 结束 输出a和b值
#include <stdio.h> main() { int a=0,b=0,t=0; printf("Input a and b:"); scanf("%d%d",&a,&b); if(a<b) { t=a; a=b; b=t; } printf("a=%d,b=%d\n",a,b); 第1次运行结果: Input a and b:6 8<回车> a=8,b=6
#include <stdio.h> main() { int a=0,b=0,t=0; printf("Input a and b:"); scanf("%d%d",&a,&b); if(a<b) { t=a; a=b; b=t; } printf("a=%d,b=%d\n",a,b); 第2次运行结果: Input a and b:8 6<回车> a=8,b=6
2.1.3 学会使用逻辑运算符 P31 【实例2.3】编写程序,判断某人的体重是否在50公斤至55公斤之间,若在此范围之内,显示“Ok”,否则显示“No”。 编程思路 “w>=50 && w<=55”表示w的值是否同时满足“w>=50”和“w<=55”。
第1次运行结果: Input w:53.5<回车> w=53.5 Yes #include <stdio.h> main() { float w=0.0; printf("Input w:"); scanf("%f",&w); printf("w=%.1f\n",w); if(w>=50 && w<=55) printf("Yes\n"); else printf("No\n"); } 逻辑运算符 && || !
第2次运行结果: Input w:60.7<回车> w=60.7 No #include <stdio.h> main() { float w=0.0; printf("Input w:"); scanf("%f",&w); printf("w=%.1f\n",w); if(w>=50 && w<=55) printf("Yes\n"); else printf("No\n"); }
2.1.4 学会使用嵌套的if语句 P32 【实例2.4】编写程序完善实例2.3,若所输入的体重大于0且小于200,再判断该体重是否在50公斤至55公斤之间,若在此范围之内,显示“Ok”,否则显示“No”;若所输入的体重不大于0或不小于200,则显示“Data over!”。
开始 输入w w>0且w<200 Yes Data over! 结束 假 真 w≥50且w≤55 No
#include <stdio.h> main() { float w=0.0; printf("w:"); scanf("%f",&w); printf("w=%.1f\n",w); if(w>0 && w<200) if(w>=50 && w<=55) printf("Yes\n"); else printf("No\n"); printf("Data over!\n"); } 嵌套的if语句 第1次运行结果: w:53.5<回车> w=53.5 Yes
#include <stdio.h> main() { float w=0.0; printf("w:"); scanf("%f",&w); printf("w=%.1f\n",w); if(w>0 && w<200) if(w>=50 && w<=55) printf("Yes\n"); else printf("No\n"); printf("Data over!\n"); } 第2次运行结果: w:60.7<回车> w=60.7 No
#include <stdio.h> main() { float w=0.0; printf("w:"); scanf("%f",&w); printf("w=%.1f\n",w); if(w>0 && w<200) if(w>=50 && w<=55) printf("Yes\n"); else printf("No\n"); printf("Data over!\n"); } 第3次运行结果: w:201.7<回车> w=201.7 Data over!
2.1.5 学会使用if-else if形式的嵌套if语句 P34 【实例2.5】编写程序,求下面分段函数的值,要求x的值从键盘输入。 x+2 (0≤x<5) y= 0 (x<0) x2-3 (5≤x<10) 10 (x≥10)
x<0 假 真 x<5 x<10 y=x2-3 y=10 y=x+2 y=0 输入x 显示x和y的值
#include <stdio.h> main() { float x=0,y=0; printf("Input x:"); scanf("%f",&x); if(x<0) y=0; else if(x<5) y=x+2; if(x<10) y=x*x-3; else y=10; printf("x=%f,y=%f\n",x,y); } if(x<0) y=0; else if(x<5) y=x+2; else if(x<10) y=x*x-3; else y=10;
2.2 switch语句 P36 2.2.1 认识switch语句 2.2.2 多个case语句相同情况的处理 返回
P36 2.2.1 认识switch语句 【实例2.6】编写程序,从键盘输入一个字符,当输入的字符为“1”或“2”或“3”时,分别显示“Yes”、“No”、“Cancel”,输入其他字符时显示“Illegal!”。
a=? 2 其他 3 1 输入a值 开始 “Yes” “No” “Cancel” “Illegal!” 结束
#include <stdio.h> main() { char a='\0'; printf("1:Yes 2:No 3:Cancel\n"); a=getchar(); switch(a) { case '1': printf("Yes\n"); break; case '2': printf("No\n"); break; case '3': printf("Cancel\n"); break; default: printf("Illegal!\n"); break; } printf("Press any key to end......"); getch(); a的值决定执行哪个分支 4个分支
2.2.2 多个case语句相同情况的处理 P39 【实例2.7】假设要处理的年份是2006年,编写程序,输入该年的某月份,输出该月的天数。
编程思路 一、三、五、七、八、十、十二月份的天数是31。 二月份的天数是28。 四、六、九、十一月份的天数是30。 要输出某月的天数,需要处理13个分支。
#include <stdio.h> main() { int month=0,day=0; printf("Input month:"); scanf("%d",&month); switch(month) { …… } if(day!=-1) printf("%d,%d\n",month,day); else printf("Illegal!\n"); } 见后一页,如果非法月份,给day赋-1
switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: day=31; break; case 2: day=28; break; case 4: case 6: case 9: case 11: day=30; break; default: day=-1; }
2.2.3 用switch语句的技巧计算分段函数的值 P40 【实例2.8】改写实例2.5。编写程序,求下面分段函数的值,要求x的值从键盘输入。 x+2 (当0≤x<5时) y= 0 (当x<0时) x2-3 (当5≤x<10时) 10 (当x≥10时)
“x<0”1 “0≤x<5”2 “5≤x<10”3 “x≥10”4 编程思路 将范围转化为具体的值。 “x<0”1 “0≤x<5”2 “5≤x<10”3 “x≥10”4 k=1*(x<0)+2*(x>=0 && x<5) +3*(x>=5 && x<10)+4*(x>=10) 当关系表达式为“真”时,表达式的值为1 当关系表达式为“假”时,表达式的值为0 如x的值为-1时,“x<0”为“真”,因此其值为1;“x>=10”为“假”,其值为0
“x<0”1 “0≤x<5”2 “5≤x<10”3 “x≥10”4 编程思路 将范围转化为具体的值。 “x<0”1 “0≤x<5”2 “5≤x<10”3 “x≥10”4 k=1*(x<0)+2*(x>=0 && x<5) +3*(x>=5 && x<10)+4*(x>=10) 当逻辑表达式为“真”时,表达式的值为1 当逻辑表达式为“假”时,表达式的值为0 如x的值为3时,“x>=0 && x<5”为“真”,因此其值为1;“x>=5 && x<10”为“假”,其值为0
“x<0”1 “0≤x<5”2 “5≤x<10”3 “x≥10”4 编程思路 将范围转化为具体的值。 “x<0”1 “0≤x<5”2 “5≤x<10”3 “x≥10”4 k=1*(x<0)+2*(x>=0 && x<5) +3*(x>=5 && x<10)+4*(x>=10) 当x的值为3时,“x>=0 && x<5”为“真”,其值为1;“x<0”、“x>=5 && x<10”、“x>=10”均为“假”,其值均为0 因此k的值为2(k=1*0+2*1+3*0+4*0)
“x<0”1 “0≤x<5”2 “5≤x<10”3 “x≥10”4 编程思路 将范围转化为具体的值。 “x<0”1 “0≤x<5”2 “5≤x<10”3 “x≥10”4 k=1*(x<0)+2*(x>=0 && x<5) +3*(x>=5 && x<10)+4*(x>=10) 当x的值为6时,“x>=5 && x<10”为“真”,其值为1;“x<0”、“x>=0 && x<5” 、“x>=10”均为“假”,其值均为0 因此k的值为3(k=1*0+2*0+3*1+4*0)
“x<0”1 “0≤x<5”2 “5≤x<10”3 “x≥10”4 编程思路 将范围转化为具体的值。 “x<0”1 “0≤x<5”2 “5≤x<10”3 “x≥10”4 k=1*(x<0)+2*(x>=0 && x<5) +3*(x>=5 && x<10)+4*(x>=10) 当x的值为11时,k的值多少? 4(k=1*0+2*0+3*0+4*1)
“x<0”1 “0≤x<5”2 “5≤x<10”3 “x≥10”4 编程思路 将范围转化为具体的值。 “x<0”1 “0≤x<5”2 “5≤x<10”3 “x≥10”4 k=1*(x<0)+2*(x>=0 && x<5) +3*(x>=5 && x<10)+4*(x>=10) 当x的值为-1时,k的值多少? 1(k=1*1+2*0+3*0+4*0)
“x<0”1 “0≤x<5”2 “5≤x<10”3 “x≥10”4 编程思路 将范围转化为具体的值。 “x<0”1 “0≤x<5”2 “5≤x<10”3 “x≥10”4 k=1*(x<0)+2*(x>=0 && x<5) +3*(x>=5 && x<10)+4*(x>=10) 4个范围的特点:不重叠 当“x<0”时,k的值为1 当“x>=0 && x<5”时,k的值为2 当“x>=5 && x<10”时,k的值为3 当“x>=10”时,k的值为4
#include <stdio.h> main() { float x=0,y=0; int k=0; printf("Input x:"); scanf("%f",&x); k=1*(x<0)+2*(x>=0 && x<5) +3*(x>=5 && x<10)+4*(x>=10); switch(k) { …… } 见后一页
switch(k) { case 1: y=0; break; case 2: y=x+2; break; case 3: y=x*x-3; break; case 4: y=10; break; } printf("x=%f,y=%f\n",x,y);
2.3 用条件运算符转换大小写字母 P41 【实例2.9】编写程序,输入1个字符,判断该字符是否是大写字母,若是,将其转换为小写字母。 编程思路 根据ch中的字符是否满足“ch≥'A' 且 ch≤'Z'”来判断该字符是否为大写字母。 返回
#include <stdio.h> main() { char ch='\0'; printf("Input a character:"); ch=getchar(); ch=ch>='A' && ch<='Z' ? ch+32 : ch; putchar(ch); } 条件运算符 等价于: if(ch>='A' && ch<='Z') ch=ch+32;
P42 2.4 程序举例 2.4.1 掌握3个数中求最大数的方法 2.4.2 掌握3个数排序的方法 2.4.3 熟悉菜单设计操作 返回
2.4.1 掌握3个数中求最大数的方法 P42 【实例2.10】编写程序,输入3个整数,找出其中最大数。
#include <stdio.h> main() { int a=0,b=0,c=0,max=0; printf("Input a,b,c:"); scanf("%d%d%d",&a,&b,&c); max=a; if(max<b) max=b; if(max<c) max=c; printf("%d,%d,%d,%d\n",a,b,c,max); }
2.4.2 掌握3个数排序的方法 P43 【实例2.11】编写程序,输入3个整数,将它们按小到大的顺序排序。
#include <stdio.h> main() { int a=0,b=0,c=0,t=0; printf("Input a,b,c:"); scanf("%d%d%d",&a,&b,&c); printf("a=%d,b=%d,c=%d\n",a,b,c); if(a>b) { t=a; a=b; b=t; } if(b>c) { t=b; b=c; c=t; } }
2.4.3 熟悉菜单设计操作 P43 【实例2.12】编写程序,在如下菜单中选择一个运算类型,并进行相应的运算。如选择了加法,则进行求和运算。 Please choose + : addition - : subtraction * : multiplication / : division
#include <stdio.h> main() { float a=5.0,b=2.0,c=0.0; char sym='\0'; printf("Please choose\n"); printf("+ : addition\n"); printf("- : subtraction\n"); printf("* : multiplication\n"); printf("/ : division\n");
sym=getchar(); printf("%f%c%f=",a,sym,b); switch(sym) { case '+': c=a+b; break; case '-': c=a-b; break; case '*': c=a*b; break; case '/': c=a/b; break; } printf("%f\n",c);
贯穿教学全过程的实例 P45 根据教材第45~46页上机操作 返回