《chap03-分支结构.ppt》由会员分享,可在线阅读,更多相关《chap03-分支结构.ppt(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、本章要点本章要点n什么是分支结构?它的作用是什么?什么是分支结构?它的作用是什么?nswitch 语句中的语句中的 break 起什么作用?起什么作用?n逻辑运算和关系运算的相同之处是什么?逻辑运算和关系运算的相同之处是什么?它们之间又有什么不同?它们之间又有什么不同?n字符型数据在内存中是如何存储的?字符型数据在内存中是如何存储的?3.1 简单的猜数游戏简单的猜数游戏3.1.1 程序解析程序解析3.1.2 二分支结构和二分支结构和if else语句语句3.1.3 多分支结构和多分支结构和else if 语句语句 例例3-1 简单的猜数游戏。输入你所猜的整数简单的猜数游戏。输入你所猜的整数(假
2、定(假定1 1100100内),与计算机产生的被猜数比内),与计算机产生的被猜数比较,若相等,显示猜中;若不等,显示与被猜较,若相等,显示猜中;若不等,显示与被猜数的大小关系。数的大小关系。3.1.1 程序解析程序解析# include int main(void) int mynumber = 38; int yournumber; printf(Input your number: ); scanf(%d, &yournumber); if(yournumber = mynumber) printf(Ok! you are right!n); else if(yournumber mynu
3、mber ) printf(Sorry! your number is bigger than my number!n); else printf(Sorry! your number is smaller than my number!n); return 0;多层缩进的书写格式多层缩进的书写格式使程序层次分明使程序层次分明 Input your number:48 Sorry! your number is bigger than my number!Input your number:38Ok! you are right!3.1.2 二分支结构和二分支结构和 if-else 语句语句i
4、f (表达式表达式) 语句语句1else 语句语句2if (表达式表达式) 语句语句1语句语句1表达式表达式语句语句2真真(非非0)假假(0)语句语句1表达式表达式真真(非非0)假假(0)一条语句一条语句判断数字的奇偶性判断数字的奇偶性例例3-2 输入输入1个整数,判断该数是奇数还是偶数。个整数,判断该数是奇数还是偶数。number % 2 = 0读入一个整数读入一个整数if (该数能被该数能被2整除整除) 则该数为偶数则该数为偶数else 该数为奇数该数为奇数源程序源程序-判断数字的奇偶性判断数字的奇偶性#include int main(void) int number; printf(E
5、nter a number: ); scanf(%d, &number); if(number % 2 = 0) printf(”The number is even. n); else printf(”The number is odd. n); return 0;Enter a number: 329 The number is odd.Enter a number: 1028The number is even.统计学生的成绩统计学生的成绩例例3-3 输入一个正整数输入一个正整数n,再输入,再输入n个学生的个学生的成绩,计算平均分,并统计不及格成绩的成绩,计算平均分,并统计不及格成绩的个
6、数。个数。for(i = 1; i = n; i+) 输入输入1个学生的成绩个学生的成绩 grade 累加成绩累加成绩 total 统计不及格成绩的个数统计不及格成绩的个数count#include int main(void) int count, i, n; double grade, total; printf(Enter n: ); scanf(%d, &n); total = 0; count = 0; for(i = 1; i = n; i+) printf(Enter grade #%d: , i); scanf (%lf, &grade); total = total + gr
7、ade; if(grade 60) count+; printf(Grade average = %.2fn, total/n); printf(Number of failures = %dn, count); return 0;源程序源程序-统计成绩统计成绩Enter n: 4 Enter grade #1: 67 Enter grade #2: 54 Enter grade #3: 88 Enter grade #4: 73 Grade average = 70.50Number of failures = 1此处省略此处省略elseif (表达式表达式1) 语句语句1;else if
8、(表达式表达式2) 语句语句2;else if (表达式表达式n-1) 语句语句n-1;else 语句语句n;3.1.3 多分支结构和多分支结构和else if 语句语句else-if 语句是最常用的实现多分支(多路选语句是最常用的实现多分支(多路选择)的方法择)的方法 if (表达式表达式1) 语句语句1else if(表达式表达式2) 语句语句2else if(表达式表达式n-1) 语句语句n-1else 语句语句n假假表达式表达式1表达式表达式2语句语句1语句语句2语句语句n-1语句语句n真 表达式表达式n-1假假真真 假假假假真 n个分支需要个分支需要n-1次比较次比较else if
9、语句语句更改例更改例2-4中的分段计算水费的问题中的分段计算水费的问题 例例3-4 例例2-4中提出的分段计算水费的问题。中提出的分段计算水费的问题。居民应交水费居民应交水费y(y(元元) )与月用水量与月用水量x(x(吨吨) )的函数的函数关系式修正如下,并编程实现。关系式修正如下,并编程实现。 15510521503400,x.x.x,x,xf(x)y源程序源程序-分段计算水费分段计算水费# include int main(void) double x, y; printf(Enter x:); scanf(%lf, &x); if (x 0) y = 0; else if (x = 1
10、5) y = 4 * x / 3; else y = 2.5 * x - 10.5; printf(f(%.2f) = %.2fn, x, y); return 0;Enter x: -0.5f(-0.50) = 0.00 Enter x: 9.5f(9.50) = 12.67Enter x: 21.3f(21.30) = 42.75004( )01532.510.515xxyf xxxxEnter x: ?3.2 四则运算四则运算3.2.1 程序解析程序解析3.2.2 字符类型字符类型3.2.3 字符型数据的输入和输出字符型数据的输入和输出3.2.4 逻辑运算逻辑运算例例3-5 求解简单的四
11、则运算表达式。求解简单的四则运算表达式。 输入一个形式如输入一个形式如“操作数操作数 运算符运算符 操作数操作数”的四的四则运算表达式,输出运算结果。则运算表达式,输出运算结果。3.2.1 程序解析程序解析# include int main(void) double value1, value2; char op; printf(Type in an expression: ); scanf(%lf%c%lf, &value1, &op, &value2); if(op = +) printf(=%.2fn, value1 + value2); else if(op = -) printf(
12、=%.2fn, value1 - value2); else if(op = *) printf(=%.2fn, value1 * value2); else if(op = /) printf(=%.2fn, value1 / value2); else printf(Unknown operatorn); return 0;例例3-5 输入一个形式如输入一个形式如“操作操作数数 运算符运算符 操作数操作数”的四则运的四则运算表达式,输出运算结果。算表达式,输出运算结果。Type in an expression: 3.1+4.8 =7.903.2.2 字符类型字符类型( op = + )(
13、 op = - )字符型数据字符型数据字符变量:字符变量:op字符常量字符常量: + - * / char op; 字符常量字符常量 a z A Z 0 9 nASCII字符集:列出所有可用的字符字符集:列出所有可用的字符每个字符:惟一的次序值(每个字符:惟一的次序值( ASCII 码)码)0-9A-Za-z区分数字区分数字1和数字字符和数字字符1字符变量字符变量 char op; 定义字符变量定义字符变量op,用于存放字符型数据。用于存放字符型数据。op = +;将字符型常量将字符型常量+赋值给字符型变量赋值给字符型变量opop3.2.3 字符型数据的输入和输出字符型数据的输入和输出n调用调
14、用scanf和和printf输入输出字符输入输出字符double value1, value2;char operator;printf(“Type in an expression: ”); scanf(“%lf%c%lf”, &value1, &op, &value2);printf(“%.2f %c %.2f”, value1, op, value2); Type in an expression: 10.0+5.61 10.00 + 5.61 输入时,操作数和运算符之间不能出现空格(输入时,操作数和运算符之间不能出现空格( ) n字符输入函数字符输入函数getchar()输入输入一个一
15、个字符字符char ch;ch = getchar( );n字符输出函数字符输出函数putchar()输出输出一个一个字符字符putchar(输出参数输出参数);字符常量或字符变量字符常量或字符变量char ch;ch = getchar(); putchar (ch); putchar (?);aa?只能处理单个字符的输入和只能处理单个字符的输入和输出,调用一次函数,只能输出,调用一次函数,只能输入或输出一个字符。输入或输出一个字符。3.2.4 逻辑运算逻辑运算char ch;printf(Enter a character: ); ch = getchar(); if (ch = a &
16、ch = A & ch = -1 并且并且 x = -1 & x = 1-1 = x 1)&(y1) (x1)|(y1) (x1)!(x1) 即即 x= a) & (ch = a & ch = a & ch = A & ch = Z) 判断判断ch 是否为英文字母,分大小写是否为英文字母,分大小写条件的表示条件的表示例例3-6 写出满足下列条件的写出满足下列条件的C表达式。表达式。nch 是空格或者回车。是空格或者回车。ch = | ch = nnnumber是偶数。是偶数。number % 2 = 0nyear 是闰年,即是闰年,即 year 能被能被 4 整除但不能被整除但不能被 100
17、整除,或整除,或 year 能被能被 400 整除。整除。 (year%4 = 0 & year%100 != 0) | (year%400 = 0) #include int main(void) int digit, i, letter, other; char ch; digit = letter = other = 0; printf(“Enter 10 characters: ); for(i = 1; i = a & ch = A & ch = 0 & ch = 9) /* 如果如果ch是数字字符是数字字符 */ digit +; else other +; printf(“let
18、ter=%d,digit=%d,other=%dn”, letter, digit, other); return 0;例例3-7 输入输入10个字符,统计个字符,统计其中英文字母、数字字符其中英文字母、数字字符和其他字符的个数。和其他字符的个数。 input 10 characters: Reold 123?letter=5, digit=3, other=2 3.3 查询自动售货机中商品的价格查询自动售货机中商品的价格 3.3.1 程序解析程序解析3.3.2 switch语句语句3.3.3 多分支结构多分支结构例例3-8 查询自动售货查询自动售货机中商品的价格机中商品的价格3.3.1 程序
19、解析程序解析 假设自动售货机出售假设自动售货机出售4种商品,薯片种商品,薯片(crisps)、爆米花爆米花(popcorn)、巧克力巧克力(chocolate)和可乐和可乐(cola),售价售价分别是每份分别是每份3.0、2.5、4.0和和3.5元。元。在屏幕上显示以下菜单,用户可以连续查询商品的价格,在屏幕上显示以下菜单,用户可以连续查询商品的价格,当查询次数超过当查询次数超过5次时,自动退出查询;不到次时,自动退出查询;不到5次时,次时,用户可以选择退出。用户可以选择退出。当用户输入编号当用户输入编号14,显示相应商品的价格;输入,显示相应商品的价格;输入0,退出查询;输入其他编号,显示价
20、格为退出查询;输入其他编号,显示价格为0。1 Select crisps2 Select popcorn 3 Select chocolate4 Select cola 0 Exit#include int main(void) int choice, i; double price; for( i = 1; i = 5; i+) printf(1 Select crisps n); printf(2 Select popcorn n); printf(3 Select chocolate n); printf(4 Select cola n); printf(0 exit n); print
21、f(Enter choice: ); scanf(%d, &choice); if(choice = 0) break; switch (choice) case 1: price=3.0; break; case 2: price=2.5; break; case 3: price=4.0; break; case 4: price=3.5; break; default: price=0.0; break; printf(price = %0.1fn, price); printf(Thanks n); 1 Select crisps2 Select popcorn 3 Select ch
22、ocolate4 Select cola 0 ExitEnter choice: 1price = 3.01 Select crisps2 Select popcorn 3 Select chocolate4 Select cola 0 ExitEnter choice: 7price = 0.01 Select crisps2 Select popcorn 3 Select chocolate4 Select cola 0 ExitEnter choice: 0Thanks3.3.2 switch语句语句 处理多分支选择问题,处理多分支选择问题,3种情况种情况1、在、在switch语句的每个
23、语句段中都使用语句的每个语句段中都使用break语句语句switch(表达式表达式) case 常量表达式常量表达式1:语句段:语句段1; break; case 常量表达式常量表达式2:语句段:语句段2; break; . case 常量表达式常量表达式n:语句段:语句段n ; break; default : 语句段语句段n+1; break;switch(表达式表达式) case 常量表达式常量表达式1:语句段:语句段1; break; case 常量表达式常量表达式2:语句段:语句段2; break; . case 常量表达式常量表达式n:语句段:语句段n; break; defaul
24、t : 语句段语句段n+1; break;表达式的值表达式的值=常量表达式常量表达式 2 的值的值表表达达式式语句段语句段1语句段语句段2语句段语句段n语句段语句段n+1表达式的值表达式的值=常量表达式常量表达式 1 的值的值表达式的值表达式的值=常量表达式常量表达式 n 的值的值其他其他breakbreakbreakbreakswitch (choice) case 1: price=3.0; break; case 2: price=2.5; break; case 3: price=4.0; break; case 4: price=3.5; break; default: price=
25、0.0; break;用用else-if 如何实现?如何实现?求解简单表达式求解简单表达式例例3-9 输入一个形式如输入一个形式如“操作数操作数 运算符运算符 操作操作数数”的四则运算表达式,输出运算结果。的四则运算表达式,输出运算结果。 (要求用要求用switch语句实现语句实现)例如:例如:输入:输入:3.1+4.8输出:输出:7.9源程序源程序# include int main(void) char op; double value1, value2; printf(Type in an expression: ); scanf(%lf%c%lf, &value1, &op, &val
26、ue2); switch(op) case +: printf(=%.2fn, value1+value2); break; case -: printf(=%.2fn, value1-value2); break; case *: printf(=%.2fn, value1*value2); break; case /: printf(=%.2fn, value1/value2); break; default: printf(Unknown operatorn); break; return 0; Type in an expression: 3.1+4.8=7.9如果除数为如果除数为0?
27、2、在、在switch中不使用中不使用breakswitch(表达式表达式) case 常量表达式常量表达式1:语句段:语句段1; case 常量表达式常量表达式2:语句段:语句段2; . case 常量表达式常量表达式n:语句段:语句段n; default : 语句段语句段n+1;switch(表达式表达式) case 常量表达式常量表达式1:语句段:语句段1; case 常量表达式常量表达式2:语句段:语句段2; . case 常量表达式常量表达式n:语句段:语句段n; default : 语句段语句段n+1;switch (choice) case 1: price=3.0; case
28、2: price=2.5; case 3: price=4.0; case 4: price=3.5; default: price=0.0;表达式的值表达式的值=常量表达式常量表达式 2 的值的值表表达达式式语句段语句段1语句段语句段2语句段语句段n语句段语句段n+1表达式表达式的值的值= =常量表达式常量表达式 1 的值的值表达式的值表达式的值=常量表达式常量表达式 n 的值的值其他其他price=?3、在、在switch的某些语句段中使用的某些语句段中使用break例例3-10 输入输入10个字符,分别统计出其中空格个字符,分别统计出其中空格或回车、数字字符和其他字符的个数。或回车、数字
29、字符和其他字符的个数。比较:比较:例例3-7 输入输入10个字符,统计其中英文个字符,统计其中英文字母、数字字符和其他字符的个数。字母、数字字符和其他字符的个数。int main(void) int blank, digit, i, other; char ch; blank = digit = other = 0; printf(Enter 10 characters: ); for(i = 1; i = 10; i+) ch = getchar(); switch (ch) case : case n: blank +; break; case 0 : case 1 : case 2 :
30、case 3 : case 4 : case 5 : case 6 : case 7 : case 8 : case 9 : digit +; break; default: other +; break; printf(blank=%d, digit=%d, other=%dn, blank, digit, other); return 0;Enter 10 characters: Reold 123?blank=1, digit=3, other=63.3.3 多分支结构多分支结构 n分支结构一般分为二分支和多分支两种结构分支结构一般分为二分支和多分支两种结构n二分支结构用基本的二分支结构
31、用基本的 if 语句实现语句实现n多分支结构用实现方法:多分支结构用实现方法:else if 语句语句switch语句语句嵌套的嵌套的 if - else语句语句嵌套的嵌套的 if-else 语句语句if (表达式表达式) 语句语句1else 语句语句2 if 语句语句 if 语句语句if(表达式表达式1)if(表达式表达式2) 语句语句1else 语句语句2 elseif(表达式表达式3) 语句语句3 else 语句语句4 嵌套的嵌套的 if else 语句语句if(表达式表达式1)if(表达式表达式2) 语句语句1else 语句语句2 elseif(表达式表达式3) 语句语句3 else
32、语句语句4 表达式表达式1表达式表达式3语句语句4真真 假假表达式表达式2语句语句3语句语句1语句语句2真真 真真 假假假假例例3-11求解简单表达求解简单表达式。要求对除数为式。要求对除数为0的的情况作特别处理。情况作特别处理。# include int main(void) double value1, value2; char op; printf(Type in an expression: ); scanf(%lf%c%lf, &value1, &op, &value2); if(op = +) printf(=%.2fn, value1 + value2); else if(op
33、= -) printf(=%.2fn, value1 - value2); else if(op = *) printf(=%.2fn, value1 * value2); else if(op = /) if(value2 != 0) /* 嵌套的嵌套的if,判断除数是否为,判断除数是否为0 */ printf(=%.2fn, value1 / value2); else printf(Divisor can not be 0!n); else printf(Unknown operator!n); return 0;Type in an expression: 3.1+4.8 =7.9Ty
34、pe in an expression: 3.4/0 Divisor can not be 0!else 和和 if 的匹配的匹配if(表达式表达式1)if(表达式表达式2) 语句语句1else 语句语句2 elseif(表达式表达式3) 语句语句3 else 语句语句4 if(表达式表达式1)if(表达式表达式2) 语句语句1 elseif(表达式表达式3) 语句语句3 else 语句语句4 else 与最靠近它的、没有与别的与最靠近它的、没有与别的 else 匹配过的匹配过的 if 匹配匹配if(表达式表达式1)if(表达式表达式2) 语句语句1 elseif(表达式表达式3) 语句语句3
35、 else 语句语句4 改变改变else 和和 if 的配对的配对例例3-12 改写下列改写下列 if 语句,使语句,使 else 和第和第1个个 if 配对。配对。 if (x 2) if (x 1) y = x + 1; else y = x + 2;if (x 2) if (x 1) y = x + 1; else y = x + 2;if (x 2) if (x 1) y = x + 1; else;else y = x + 2;每条语句的执行条件每条语句的执行条件? 本章总结本章总结n分支结构:分支结构:if-else语句语句else ifn分支结构:分支结构: switch语句语句case后为常量表达式后为常量表达式break的使用的使用n数据类型:数据类型:char型型n运算符与表达式运算符与表达式逻辑运算符、关系运算符逻辑运算符、关系运算符逻辑表达式逻辑表达式n分支结构程序的综合设计分支结构程序的综合设计正确理解正确理解if语句和语句和switch语句语句的执行机制;的执行机制;掌握各类关系表达式、逻辑掌握各类关系表达式、逻辑表达式的运用;表达式的运用;能合理运用分支语句熟练编写能合理运用分支语句熟练编写分支结构类的程序;分支结构类的程序;
限制150内