




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章 选择结构程序设计 第第4 4章已讨论章已讨论 程序结构程序结构 顺序结构顺序结构 选择结构选择结构 循环结构循环结构 本章讨论本章讨论 第第6 6章讨论章讨论 5.1 C程序中语句的分类 语言程序的执行部分是由语句组成的。程序的功能也语言程序的执行部分是由语句组成的。程序的功能也 是由执行语句实现的。是由执行语句实现的。C C语言中的语句可以分为以下语言中的语句可以分为以下5 5类:类: 表达式语句表达式语句 由表达式加上分号由表达式加上分号“ “;” ”组成。其一般形式为:组成。其一般形式为:表达式;表达式; 函数调用语句函数调用语句 由函数名、实际参数加上分号由函数名、实际参数加上分号“;”组成。其一般形组成。其一般形 式为:式为:函数名函数名( (实际参数表实际参数表) ); while (while (getchargetchar( ) != n ) ( ) != n ) ; ; 本语句的功能是,只要从键盘输入的字符不是回车则本语句的功能是,只要从键盘输入的字符不是回车则 重新输入。这里的循环体为重新输入。这里的循环体为空语句空语句。 空语句空语句 只有分号只有分号“;”组成的语句称为空语句。空语句是什么组成的语句称为空语句。空语句是什么 也不执行的语句。在程序中空语句可用来作空循环体。也不执行的语句。在程序中空语句可用来作空循环体。 l l 说明:说明: (1) “”“”后不加分号后不加分号 (2) (2) 语法上和单一语句相同语法上和单一语句相同 (3) (3) 复合语句可嵌套复合语句可嵌套 (4) (4) 复合语句内定义的变量只能在复合语句内使复合语句内定义的变量只能在复合语句内使 用。用。 复合语句复合语句 用用 括起来的一组语句括起来的一组语句。 intint a = 2, b = 3, c; a = 2, b = 3, c; c = a + b; c = a + b; printfprintf (“c = % (“c = %dndn“, c);“, c); l l 一般形式为:一般形式为: 数据说明部分;数据说明部分; 执行语句部分;执行语句部分; #include void main ( )void main ( ) intint x = 10, y = 20, z; x = 10, y = 20, z; z = x + y; z = x + y; intint z; z; z = x * y; z = x * y; printfprintf (“z = % (“z = %dndn“, z); “, z); /输出复合语句中输出复合语句中z z的值的值 printfprintf (“z = % (“z = %dndn“, z); “, z); /输出复合语句外输出复合语句外z z的值的值 输出结果:输出结果: z = 200z = 200 z = 30z = 30 控制语句控制语句 用来实现一定的控制功能的语句称为用来实现一定的控制功能的语句称为控制语句控制语句 。C C语语 言用控制语句来实现选择结构和循环结构。语言有九种言用控制语句来实现选择结构和循环结构。语言有九种 控制语句。可分成以下三类:控制语句。可分成以下三类: if( )else if( )else switchswitch for( )for( ) while( )while( ) dowhile( )dowhile( ) continuecontinue breakbreak gotogoto returnreturn 分支分支 循环循环 辅助控制辅助控制 本章讨论本章讨论 5.2 关系运算符、逻辑运算符、条件运算符 1. 1. 关系运算符和关系表达式关系运算符和关系表达式 关系运算符含 义优 先 级结 合 性 大于这些关系运算符等优 先级,但比下面的优 先级高 左结合性 = (和=之间没有空格)大于或等于 c d x 3 / 2 a + 1 c d x 3 / 2 a + 1 a + b c a + b 等价于:等价于: a b != c a b != c 等价于:等价于: a = b c a = b c 等价于:等价于: a 2 2 b | c a b = 2; c = 3;a = 1; b = 2; c = 3; 问:问:d = a != c = a b (a b) = c b + c b f = a b c /表达式值表达式值1 1 /表达式值表达式值1 1 /表达式值表达式值0 0 /d = 1/d = 1 /f = 0/f = 0 关系运算注意: 例例 若若a = 0; b = 0.5; x = 0.3;a = 0; b = 0.5; x = 0.3; 则则 a a 2 7 85 2 7 8在在C C中是中是 允许的,值为允许的,值为 0 0 例例 intint i = 1, j = 7, a; i = 1, j = 7, a; a = i + (j % 4 != 0); a = i + (j % 4 != 0); 则则a =a = 2 2 例例 a0 a0 结果为结果为 A100 A100 结果为结果为 1 1 0 0 例例 应避免对应避免对实数实数作相等或不等的判断作相等或不等的判断 如如 1.0/3.0*3.0=1.0 1.0/3.0*3.0=1.0 结果为结果为 可改写为:可改写为:fabs(1.0/3.0*3.0-1.0) b |=%dn”,b0?a+b:a-b); 例例 (a=b)?Y:N(a=b)?Y:N (x%2=1)?1:0 (x%2=1)?1:0 (x=0)?x:-x (x=0)?x:-x (c=a xb; x 0, 0,表达式值为表达式值为 aa xy?1:1.5 /xy , xy?1:1.5 /xy ,值为值为1.0; 1.0; xb)if (ab) printf(“%d”,aprintf(“%d”,a); ); else else printf(“%d”,bprintf(“%d”,b); ); printf(“%d”,aprintf(“%d”,ab?a:b);b?a:b); 例:小写字母转盘。例:小写字母转盘。 #include #include intint main ( ) main ( ) char char chch, ch1, ch2; , ch1, ch2; / /变量定义变量定义 chch = = getchargetchar ( ); ( ); / /读取一字符读取一字符 putcharputchar (n); (n); / /换行换行 ch1 = ch1 = chch = a ? z : = a ? z : chch - 1; - 1; / /求前驱字符求前驱字符 ch2 = ch2 = chch = z ? a : = z ? a : chch + 1; + 1; / /求后继字符求后继字符 printfprintf (“ch1 = %c, ch2 = % (“ch1 = %c, ch2 = %cncn“, ch1, ch2); “, ch1, ch2); / /显示结果显示结果 输出结果(假设输入为输出结果(假设输入为w w) : ch1 = v, ch2 = xch1 = v, ch2 = x 运算符总结: 总体上讲,单目运算符都是同等优先级的,具有右结合总体上讲,单目运算符都是同等优先级的,具有右结合 性,并且优先级比双目运算符和三目运算符都高。性,并且优先级比双目运算符和三目运算符都高。 三目运算符的优先级比双目运算符要低,但高于赋值运三目运算符的优先级比双目运算符要低,但高于赋值运 算符和逗号运算符。算符和逗号运算符。 逗号运算符的优先级最低,其次是赋值运算符。逗号运算符的优先级最低,其次是赋值运算符。 只有单目运算符、赋值运算符和条件运算符具有右结合只有单目运算符、赋值运算符和条件运算符具有右结合 性,其它运算符都是左结合性。性,其它运算符都是左结合性。 双目运算符中,算术运算符的优先级最高,逻辑运算符双目运算符中,算术运算符的优先级最高,逻辑运算符 的优先级最低。的优先级最低。 单目运算符单目运算符 高高 算术运算符算术运算符 移位运算符移位运算符 关系运算符关系运算符 位运算符位运算符 逻辑运算符逻辑运算符 条件运算符条件运算符 赋值运算符赋值运算符 逗号运算符逗号运算符 低低 到现在为止,我们已经学习了到现在为止,我们已经学习了3030多个运算符。掌握它多个运算符。掌握它 们的优先级关系特别重要。优先级的记忆规则:们的优先级关系特别重要。优先级的记忆规则: 5.3 选择结构的程序设计 1. if1. if语句语句 简单简单ifif语句形式语句形式 if (if (表达式表达式) ) 语句语句; ; l l 格式格式: : l l 执行流程:执行流程: 语句语句 表达式表达式 TF 例如:下面的程序段是输入两个整数,输出其中的大数。例如:下面的程序段是输入两个整数,输出其中的大数。 intint a, b, max; a, b, max; printfprintf (“input two numbers: “); (“input two numbers: “); scanfscanf (“% (“%d%dd%d“, “, max = a; max = a; if (max b)if (a b) printfprintf (“max = % (“max = %dndn“, a);“, a); else else printfprintf (“max = % (“max = %dndn“, b);“, b); 1. if1. if语句语句 if_else_ifif_else_if形式形式 if(if(表达式表达式1) 1) 语句语句1;1; else if (else if (表达式表达式2) 2) 语句语句2;2; else if (else if (表达式表达式3) 3) 语句语句3;3; else else 语句语句n;n; l l 格式格式: : l l 执行流程:执行流程: 表达式表达式1 1 语句语句1 1语句 语句2 2 F 表达式表达式2 2 表达式表达式3 3 F 语句语句3 3语句语句n n T F T T 例如:下面的程序段是判断输入字符的种类。例如:下面的程序段是判断输入字符的种类。 char c;char c; printfprintf (“Enter a character: “); (“Enter a character: “); c = c = getchargetchar ( ); ( ); if if (c = 0 (“x 0”); 例例: : if (x 0) if (x 0) printfprintf (“x 0”); (“x 0”); if (a = 5) if (a = 5) 语句;语句; / /表达式的值永远为非表达式的值永远为非0 0, 所以其后的语句总是要执行的所以其后的语句总是要执行的 if (b) if (b) 语句;语句; / /等价于等价于if (b != 0) if (b != 0) 语句;语句; 例例: : if (a b) if (a b) a+; a+; b+; b+; else else a = 0; a = 0; b = 1; b = 1; 例例: : if (a b) if (a b) a+; a+; b+; b+; else else a = 0; a = 0; b = 1; b = 1; 例例: : #include void main ( ) void main ( ) intint x = 0; x = 0; if ( if (x = 0x = 0) ) printfprintf (“x = 0n”); (“x = 0n”); else else printfprintf (“x != 0n”); (“x != 0n”); 例例: : #include void main ( ) void main ( ) intint x = 0; x = 0; if ( if (x = 0x = 0) ) printfprintf (“x = 0n”); (“x = 0n”); else else printfprintf (“x != 0n”); (“x != 0n”); 运行结运行结果:果:x = 0x = 0运行结运行结果:果:x != 0x != 0 ifif语句嵌套语句嵌套: l l 一般形式:一般形式: if (expr1)if (expr1) if (expr2) statement1if (expr2) statement1 else statement2 else statement2 elseelse if (expr3) statement3if (expr3) statement3 else statement4 else statement4 内嵌内嵌if if 内嵌内嵌if if if (expr1)if (expr1) if (expr2) if (expr2) statement1 statement1 else else statement2 statement2 内嵌内嵌if if if (expr1)if (expr1) if (expr2) if (expr2) statement1 statement1 elseelse statement3 statement3 内嵌内嵌if if if (expr1)if (expr1) statement1 statement1 elseelse if (expr3) if (expr3) statement3 statement3 else else statement4 statement4 内嵌内嵌if if if () if () if () else else else 语言规定,在缺省语言规定,在缺省 时,时,elseelse总是和它上总是和它上 面离它最近的未配对的面离它最近的未配对的ifif配对配对 例例: : #include void main ( ) void main ( ) intint a = 1, b = -1; a = 1, b = -1; if (a 0)if (a 0) if (b 0)if (b 0) a+; a+; elseelse a-; a-; printfprintf (“a = % (“a = %dndn“); “); 例例: : #include void main ( ) void main ( ) intint a = 1, b = -1; a = 1, b = -1; if (a 0)if (a 0) if (b 0) if (b 0) a+; a+; elseelse a-; a-; printfprintf (“a = % (“a = %dndn“);“); 运行结运行结果:果:a = 0a = 0 运行结运行结果:果:a = 1a = 1 l l if_elseif_else 配对原则配对原则 例:例: if (a=b)if (a=b) if(b=c) if(b=c) printf(“aprintf(“a=b=c”);=b=c”); else else printf(“aprintf(“a!=b”);!=b”); 修改:修改: if (a=b)if (a=b) if(b=c) if(b=c) printf(“aprintf(“a=b=c”);=b=c”); else else printf(“aprintf(“a!=b”);!=b”); 实现实现if else if else 正确配对方法:加正确配对方法:加 2. switch2. switch语句(开关分支语句)语句(开关分支语句) l l 一般形式:一般形式: switch ( switch ( 表达式表达式) ) case E case E 1 1 : : 语句组语句组 1;1; break; break; case E case E 2 2 : : 语句组语句组 2;2; break; break; . . case E case E n n : : 语句组语句组 n;n; break; break; default: default: 语句组语句组 ; ; break; break; l l 执行过程:执行过程: switchswitch 表达式表达式 语句组语句组1 1语句组语句组2 2语句组语句组n n语句组语句组 . E E 1 1 E E 2 2 E En n defaultdefault casecase l l 使用使用switchswitch语句注意事项语句注意事项 (1) switch(1) switch后面的后面的“表达式表达式”,可以是,可以是intint、charchar和枚举和枚举 型中的一种,但不可为浮点型。型中的一种,但不可为浮点型。 float a, b = 4.0;float a, b = 4.0; scanfscanf (“%f“, (“%f“, switch ( a ) switch ( a ) case 1: b = b + 1; break; case 1: b = b + 1; break; case 2: b = b - 1; break; case 2: b = b - 1; break; printfprintf (“b = % (“b = %fnfn“, b);“, b); 不可为浮点型不可为浮点型 表达式表达式 intint a, b = 4; a, b = 4; scanfscanf (“%d“, (“%d“, switch (a) switch (a) case 1: b = b + 2; break; case 1: b = b + 2; break; case 2: b = b * 2; break; case 2: b = b * 2; break; case 1: b = b + 2; break; case 1: b = b + 2; break; printfprintf (“b = % (“b = %dndn“, b);“, b); l l 使用使用switchswitch语句注意事项语句注意事项 (2) case(2) case后面语句(组)可加后面语句(组)可加 也可以不加也可以不加 ,但一,但一 般不加般不加 。 (3) (3) 每个每个casecase后面后面“常量表达式常量表达式”的值,必须各不相同的值,必须各不相同 ,否则会出现相互矛盾的现象。,否则会出现相互矛盾的现象。 switch ( i )switch ( i ) case 1: b = b + 1; break; case 1: b = b + 1; break; / / 可加可不加可加可不加 case 2: b = b - 1; break;case 2: b = b - 1; break; case 1case 1在前面已使用在前面已使用 l l 使用使用switchswitch语句注意事项语句注意事项 (4) (4) 每个每个casecase后面必须是后面必须是“常量表达式常量表达式”,表达式中不,表达式中不 能包含变量。能包含变量。 例:按成绩分成例:按成绩分成A A、B B、C C、D D、E E、F F几个等级。几个等级。 char score;char score; printfprintf (“Enter Score: “); (“Enter Score: “); scanfscanf (“%d“, (“%d“, switch (score) switch (score) case score = 90 : case score = 90 : printfprintf (“A“); break; (“A“); break; case score = 80 ; chch = = getchgetch ( ); ( ); switch ( switch ( chch ) ) case Y : case Y : printfprintf (“Yesn“); break; (“Yesn“); break; case N : case N : printfprintf (“Non“); break; (“Non“); break; case A : case A : printfprintf (“Alln“); break; (“Alln“); break; default : default : printfprintf (“ (“Yes,NoYes,No or Alln“); or Alln“); 运行结果:运行结果: NoNo /假设输入为:假设输入为:N N #include void main ( ) void main ( ) char char chch; ; chch = = getchgetch ( ); ( ); switch ( switch ( chch ) ) case Y : case Y : printfprintf (“Yesn“); break; (“Yesn“); break; case N : case N : printfprintf (“Non“); (“Non“); case A : case A : printfprintf (“Alln“); break; (“Alln“); break; default : default : printfprintf (“ (“Yes,NoYes,No or Alln“); or Alln“); /假设输入为:假设输入为:N N 运行结果:运行结果: NoNo ALL ALL l l 使用使用switchswitch语句注意事项语句注意事项 (6)(6)多个多个casecase子句,可共用同一语句(组)。子句,可共用同一语句(组)。 例:当例:当a a的值是的值是1 1、2 2、3 3时,将时,将b b的值加的值加2 2,当,当a a的值是的值是4 4、5 5 、6 6时,将时,将b b的值减的值减2 2。 intint a, b = 4; a, b = 4; scanfscanf (“%d“, (“%d“, switch (a) switch (a) case 1: case 1: case 2: case 2: case 3: b += 2; break; case 3: b += 2; break; case 4: case 4: case 5: case 5: case 6: b -= 2; break; case 6: b -= 2; break; default: b *= 2; break; default: b *= 2; break; printfprintf (“b = % (“b = %dndn“, b);“, b); l l 使用使用switchswitch语句注意事项语句注意事项 (7) (7) case子句和default子句如果都带有break子句,那 么它们之间顺序的变化不会影响switch语句的功能。 #include intint main ( ) main ( ) char char chch; ; chch = = getchargetchar ( ); ( ); switch ( switch ( chch ) ) case Y : case Y : printfprintf (“Yesn“); (“Yesn“); break; break; case N : case N : printfprintf (“Non“); (“Non“); break; break; case A : case A : printfprintf (“Alln“); (“Alln“); break; break; default : default : printfprintf (“ (“Yes,NoYes,No or or Alln“); Alln“); break; break; #include intint main ( ) main ( ) char char chch; ; chch = = getchargetchar ( ); ( ); switch ( switch ( chch ) ) case Y : case Y : printfprintf (“Yesn“); (“Yesn“); break; break; default : default : printfprintf (“ (“Yes,NoYes,No or Alln“); or Alln“); break; break; case N : case N : printfprintf (“Non“); (“Non“); break;break; case A : case A : printfprintf (“Alln“); (“Alln“); break; break; l l 使用使用switchswitch语句注意事项语句注意事项 (8) switch(8) switch语句可以嵌套。语句可以嵌套。 void main ( )void main ( ) intint x = 1, y = 0, a = 0, b = 0; x = 1, y = 0, a = 0, b = 0; switch ( x ) switch ( x ) case 1: case 1: switch ( y )switch ( y ) case 0: a+; break; case 0: a+; break; case 1: b+; break; case 1: b+; break; case 2: a+; b+; break; case 2: a+; b+; break; case 3: a+; b+; case 3: a+; b+; printfprintf (“ (“nana = %d, b = %d“, a, b); = %d, b = %d“, a, b); 运行结果:运行结果: a = 2a = 2,b = 1b = 1 5.4 选择结构程序设计举例 【例例1 1】已知某公司员工的保底薪水为已知某公司员工的保底薪水为500500,某月所接,某月所接 工程的利润工程的利润profitprofit(整数)与利润提成的关系如下所示(整数)与利润提成的关系如下所示 (计量单位:元)。计算员工的当月薪水。(计量单位:元)。计算员工的当月薪水。 工程利润profit提成比率 profit1000没有提成 1000profit2000提成10% 2000profit5000提成15% 5000profit10000提成20% 10000profit提成25% 程序应该这样来设计:程序应该这样来设计: 首先要定义一个变量用来存放员工所接工程的利润;首先要定义一个变量用来存放员工所接工程的利润; 其次提示用户输入员工所接工程的利润,并调用其次提示用户输入员工所接工程的利润,并调用scanfscanf函数接受用户输函数接受用户输 入员工所接工程的利润;入员工所接工程的利润; 然后根据上表的规则,计算该员工当月的提成比率。然后根据上表的规则,计算该员工当月的提成比率。 最后计算该员工当月的薪水(保底薪水最后计算该员工当月的薪水(保底薪水+ +所接工程的利润所接工程的利润* *提成比率),提成比率), 并输出结果。并输出结果。 #include intint main ( ) main ( ) intint profit; profit; / /所接工程的利润所接工程的利润 float ratio; float ratio; / /提成比率提成比率 float salary = 500; float salary = 500; / /薪水,初始值为保底薪水薪水,初始值为保底薪水500500 printfprintf (“Input profit: “); (“Input profit: “); / /提示输入所接工程的利润提示输入所接工程的利润 scanfscanf (“%ld“, (“%ld“, / /输入所接工程的利润输入所接工程的利润 / /计算提成比率计算提成比率 if if (profit void main ( )void main ( ) intint profit; profit; / /所接工程的利润所接工程的利润 float ratio; float ratio; / /提成比率提成比率 float salary = 500; float salary = 500; / /薪水,初始值为保底薪水薪水,初始值为保底薪水500500 printfprintf (“Input profit: “); (“Input profit: “); / /提示输入所接工程的利润提示输入所接工程的利润 scanfscanf (“%ld“, (“%ld“, / /输入所接工程的利润输入所接工程的利润 / /计算提成比率计算提成比率 if if (profit intint main ( ) main ( ) intint profit; profit; / /所接工程的利润所接工程的利润 intint grade; grade; float ratio; float ratio; / /提成比率提成比率 float salary = 500; float salary = 500; / /薪水,初始值为保底薪水薪水,初始值为保底薪水500500 printfprintf (“Input profit: “); (“Input profit: “); / /提示输入所接工程的利润提示输入所接工程的利润 scanfscanf (“%ld“, (“%ld“, / /输入所接工程的利润输入所接工程的利润 方法三:使方法三:使用用switchswitch语句语句 / /将利润将利润-1-1、再整除、再整除10001000,转化成,转化成switchswitch语句中的语句中的casecase标号标号 grade = (profit - 1) / 1000; grade = (profit - 1) / 1000; switchswitch ( grade ) ( grade ) / /计算提成比率计算提成比率 casecase 0: ratio = 0; break; 0: ratio = 0; break; /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职称计算机模拟题库及参考答案详解【A卷】
- 2025年绿色建筑材料市场推广与政策支持下的绿色建筑市场风险防控与应对策略研究报告
- 2025年工业互联网平台云计算资源动态分配在智能供应链管理中的应用策略研究报告
- 中小学假期安全教育班会怎么开展(34篇)
- 中小学学校管理制度(30篇)
- 17.2直角三角形 练习(含解析) 2025-2026学年冀教版(2024)八年级数学上册
- 教育教学经验交流会校长讲话稿:推动经验共享共建打造集体智慧课堂生态
- 2025年创新药BD投资策略分析报告:GLP-1赛道研发全景BD展望
- 屋面防水施工
- 输液港课件教学课件
- 产品报价单(5篇)
- 河南省毕业年困难毕业生求职创业补贴申请表(人工审核用)
- 无人机专业介绍课件
- 大班语言活动《失踪的鼻子》绘本故事早期阅读PPT课件【幼儿教案】
- 英语课程标准2022版电子版
- 资产质量分析
- 检验科进修总结(2篇)
- 打印复印费明细
- GB/T 9798-2005金属覆盖层镍电沉积层
- 《编程猫系列》第1课-Hello-编程猫(课件)
- 高一上学期月考语文试题(八套)
评论
0/150
提交评论