《深圳大学C语音课件第四章-顺序结构举例演示教学》由会员分享,可在线阅读,更多相关《深圳大学C语音课件第四章-顺序结构举例演示教学(23页珍藏版)》请在金锄头文库上搜索。
1、1深圳大学C语音课件第四章-顺序结构举例2#include #include void main ( )void main ( ) char ch, ch1, ch2; char ch, ch1, ch2; /变量定义变量定义变量定义变量定义 ch = getchar(); ch = getchar(); /读取一字符读取一字符读取一字符读取一字符 putchar(n); putchar(n); /换行换行换行换行 ch1 = z - (z - ch + 1) % 26; ch1 = z - (z - ch + 1) % 26; /求前驱字符求前驱字符求前驱字符求前驱字符 ch2 = a +
2、(ch - a + 1) % 26; ch2 = a + (ch - a + 1) % 26; /求后继字符求后继字符求后继字符求后继字符 printf(ch1 = %c, ch2 = %cn,ch1,ch2); printf(ch1 = %c, ch2 = %cn,ch1,ch2); /显示结果显示结果显示结果显示结果 具体程序如下:具体程序如下:具体程序如下:具体程序如下:ch1 = v, ch2 = xch1 = v, ch2 = x运行结果运行结果运行结果运行结果( (假设输入字母为假设输入字母为假设输入字母为假设输入字母为w)w)w)w): a ab bc cd de ef fz z
3、y yx x. . . .3第第4章章 选择结构程序设计选择结构程序设计4关系运算符、逻辑运算符、条件运算符1. 1. 关系运算符和关系表达式关系运算符和关系表达式关系运算符和关系表达式关系运算符和关系表达式 关系运算符关系运算符含含 义义优优 先先 级级结结 合合 性性大于大于这些关系运算符这些关系运算符等优先级,但比等优先级,但比下面的优先级下面的优先级高高左结合性左结合性= (和和=之间没有空格)之间没有空格)大于或等于大于或等于小于小于= ( c d x 3 / 2 a + 1 c d x 3 / 2 a + 1 0 ? 1 : (x 0 ? -1 : 0)3. 条件运算符与表达式条件
4、运算符与表达式一般形式:一般形式: expr1 ? expr2 : expr3功能:相当于条件语句功能:相当于条件语句例:小写字母转盘。例:小写字母转盘。例:小写字母转盘。例:小写字母转盘。#include #include #include #include void main ( )void main ( ) char ch, ch1, ch2; char ch, ch1, ch2; / /变量定义变量定义变量定义变量定义 ch = getchar ( ); ch = getchar ( ); / /读取一字符读取一字符读取一字符读取一字符 putchar (n); putchar (n)
5、; / /换行换行换行换行 ch1 = ( ch1 = (ch = = ach = = a ? ? z : ch 1 z : ch 1); ); / /求前驱字符求前驱字符求前驱字符求前驱字符 ch2 = ( ch2 = (ch = = zch = = z ? ? a : ch + 1 a : ch + 1); ); / /求后继字符求后继字符求后继字符求后继字符 printf (ch1 = %c, ch2 = %cn, ch1, ch2); printf (ch1 = %c, ch2 = %cn, ch1, ch2); / /显示结果显示结果显示结果显示结果 8选择结构的程序设计 1. if
6、1. if语句语句语句语句 简单简单简单简单ifififif语句形式语句形式语句形式语句形式 if (if (if (if (表达式表达式表达式表达式) ) ) ) 语句语句语句语句; ; ; ;l l 格式格式格式格式: : : :l l 执行流程:执行流程:执行流程:执行流程:语句语句语句语句表达式表达式表达式表达式TF例如:下面的程序段是输入两个整数,输出其中的大数。例如:下面的程序段是输入两个整数,输出其中的大数。例如:下面的程序段是输入两个整数,输出其中的大数。例如:下面的程序段是输入两个整数,输出其中的大数。 int a, b, max; int a, b, max; printf
7、 (input two numbers: ); printf (input two numbers: ); scanf (%d%d, &a, &b); scanf (%d%d, &a, &b); max = a; max = a; if (max b) if (max b)if (a b) printf (max = %dn, a); printf (max = %dn, a); else else printf (max = %dn, b); printf (max = %dn, b);91. if1. if语句语句语句语句 if_else_if if_else_if if_else_if
8、if_else_if形式形式形式形式 if(if(if(if(表达式表达式表达式表达式1) 1) 1) 1) 语句语句语句语句1;1;1;1;else if (else if (else if (else if (表达式表达式表达式表达式2) 2) 2) 2) 语句语句语句语句2;2;2;2;else if (else if (else if (else if (表达式表达式表达式表达式3) 3) 3) 3) 语句语句语句语句3;3;3;3;else else else else 语句语句语句语句n;n;n;n;l l 格式格式格式格式: : : :l l 执行流程:执行流程:执行流程:执行流
9、程:表达式表达式表达式表达式1 1 1 1语句语句语句语句1 1 1 1语句语句语句语句2 2 2 2F表达式表达式表达式表达式2 2 2 2表达式表达式表达式表达式3 3 3 3F语句语句语句语句3 3 3 3语句语句语句语句n n n nTFTT例如:下面的程序段是判断输入字符的种类。例如:下面的程序段是判断输入字符的种类。例如:下面的程序段是判断输入字符的种类。例如:下面的程序段是判断输入字符的种类。 char c; char c; printf (Enter a character: ); printf (Enter a character: ); c = getchar ( ); c
10、 = getchar ( ); if if ( (c 0x20c = 0 & c = 0 & c = A & c = A & c = a & c = a & c = z) ) printf (The character is a lower lettern);printf (The character is a lower lettern); else else printf (The character is other charactern);printf (The character is other charactern);10例例例例 输入两数并判断其大小关系输入两数并判断其大小关系
11、输入两数并判断其大小关系输入两数并判断其大小关系 #include #include void main ( )void main ( ) int x, y; int x, y; printf (Enter integer x, y: );printf (Enter integer x, y: ); scanf (%d, %d, &x, &y); scanf (%d, %d, &x, &y); if (x != y) if (x != y) if (x y) printf (X Yn);if (x y) printf (X Yn); else printf (X Yn); else print
12、f (X Yn); else else printf (X = Yn); printf (X = Yn); ifififif语句嵌套:语句嵌套:语句嵌套:语句嵌套:11 if () if () if () else else else 语言规定,在缺省语言规定,在缺省语言规定,在缺省语言规定,在缺省 时,时,时,时,elseelseelseelse总总总总是和它上面离它最近的未配对的是和它上面离它最近的未配对的是和它上面离它最近的未配对的是和它上面离它最近的未配对的ifififif配对配对配对配对 例:考虑下面程序输出结果例:考虑下面程序输出结果例:考虑下面程序输出结果例:考虑下面程序输出结果
13、: : void main( )void main( ) int x = 100, a = 10, b = 20; int x = 100, a = 10, b = 20; int v1 = 5, v2 = 0; int v1 = 5, v2 = 0; if (a b) if (a = 90 : printf (A); break; case score = 90 : printf (A); break; case score = 80 & score = 80 & score = 70 & score = 70 & score = 60 & score = 60 & score 70 : p
14、rintf (“E); break;printf (“E); break; default : printf (“F); break; default : printf (“F); break; case case 后面包含变量后面包含变量后面包含变量后面包含变量15l l 使用使用使用使用switchswitchswitchswitch语句注意事项语句注意事项语句注意事项语句注意事项 (5) (5) (5) (5) casecasecasecase后面的后面的后面的后面的“常量表达式常量表达式常量表达式常量表达式”仅起语句标号作用,仅起语句标号作用,仅起语句标号作用,仅起语句标号作用,系统系
15、统系统系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断。一旦找到入口标号,就从此标号开始执行,不再进行标号判断。一旦找到入口标号,就从此标号开始执行,不再进行标号判断。一旦找到入口标号,就从此标号开始执行,不再进行标号判断。 #include #include void main ( ) void main ( ) char ch; char ch; ch = getchar( ); ch = getchar( ); switch ( ch ) switch ( ch ) case Y : printf (Yesn); break; case Y : printf (Yesn); b
16、reak; case N : printf (Non); break; case N : printf (Non); break; case A : printf (Alln); break; case A : printf (Alln); break; default : printf (Yes,No or Alln); default : printf (Yes,No or Alln); 运行结果:运行结果:运行结果:运行结果: NoNo/假设输入为:假设输入为:假设输入为:假设输入为:N N #include #include void main ( ) void main ( ) ch
17、ar ch; char ch; ch = getchar ( ); ch = getchar ( ); switch ( ch ) switch ( ch ) case Y : printf (Yesn); break; case Y : printf (Yesn); break; case N : printf (Non); case N : printf (Non); case A : printf (Alln); break; case A : printf (Alln); break; default : printf (Yes,No or Alln); default : print
18、f (Yes,No or Alln); /假设输入为:假设输入为:假设输入为:假设输入为:N N运行结果:运行结果:运行结果:运行结果: NoNo ALL ALL16l l 使用使用使用使用switchswitchswitchswitch语句注意事项语句注意事项语句注意事项语句注意事项 (6) (6) (6) (6)多个多个多个多个casecasecasecase子句,可共用同一语句(组)。子句,可共用同一语句(组)。子句,可共用同一语句(组)。子句,可共用同一语句(组)。 例:例:例:例:当当当当a a a a的值是的值是的值是的值是1 1 1 1、2 2 2 2、3 3 3 3时,将时,将
19、时,将时,将b b b b的值加的值加的值加的值加2;2;2;2; 当当当当a a a a的值是的值是的值是的值是4 4 4 4、5 5 5 5、6 6 6 6时,将时,将时,将时,将b b b b的值减的值减的值减的值减2 2 2 2。 int a, b = 4;int a, b = 4; scanf (%d, &a); scanf (%d, &a); 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:
20、 case 5: case 6: b -= 2; break; case 6: b -= 2; break; default: b *= 2; break; default: b *= 2; break; printf (b = %dn, b); printf (b = %dn, b);17l l 使用使用使用使用switchswitchswitchswitch语句注意事项语句注意事项语句注意事项语句注意事项 (9) switch (9) switch (9) switch (9) switch语句可以嵌套。语句可以嵌套。语句可以嵌套。语句可以嵌套。 void main ( ) void ma
21、in ( ) int x = 1, y = 0, a = 0, b = 0; int 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+; printf (
22、na = %d, b = %d, a, b); printf (na = %d, b = %d, a, b); 运行结果:运行结果:运行结果:运行结果:a = 2a = 2,b = 1b = 1 18选择结构程序设计举例 【例】【例】【例】【例】已知某公司员工的保底薪水为已知某公司员工的保底薪水为已知某公司员工的保底薪水为已知某公司员工的保底薪水为500500500500,某月所接,某月所接,某月所接,某月所接工程的利润工程的利润工程的利润工程的利润profitprofitprofitprofit(整数)与利润提成的关系如下所示(整数)与利润提成的关系如下所示(整数)与利润提成的关系如下所示(
23、整数)与利润提成的关系如下所示(计量单位:元)。计算员工的当月薪水。(计量单位:元)。计算员工的当月薪水。(计量单位:元)。计算员工的当月薪水。(计量单位:元)。计算员工的当月薪水。 工程利润工程利润profit提成比率提成比率profit1000没有提成没有提成1000profit2000提成提成10%2000profit5000提成提成15%5000profit10000提成提成20%10000profit提成提成25%程序应该这样来设计:程序应该这样来设计:程序应该这样来设计:程序应该这样来设计: 首先定义首先定义首先定义首先定义3 3 3 3个变量分别存放员工所接工程的个变量分别存放员
24、工所接工程的个变量分别存放员工所接工程的个变量分别存放员工所接工程的利润利润利润利润、提成比例和当月薪水提成比例和当月薪水提成比例和当月薪水提成比例和当月薪水; 调用调用调用调用scanfscanfscanfscanf函数接受用户输入员工所接工程的利润;函数接受用户输入员工所接工程的利润;函数接受用户输入员工所接工程的利润;函数接受用户输入员工所接工程的利润; 然后根据上表的规则,计算该员工当月的提成比率。然后根据上表的规则,计算该员工当月的提成比率。然后根据上表的规则,计算该员工当月的提成比率。然后根据上表的规则,计算该员工当月的提成比率。 最后计算该员工当月的薪水(最后计算该员工当月的薪水
25、(最后计算该员工当月的薪水(最后计算该员工当月的薪水(保底薪水保底薪水保底薪水保底薪水+ + + +所接工程的利润所接工程的利润所接工程的利润所接工程的利润* * * *提成比率提成比率提成比率提成比率),),),),并输出结果。并输出结果。并输出结果。并输出结果。19#include #include void main ( )void main ( ) long profit; long profit; / /所接工程的利润所接工程的利润所接工程的利润所接工程的利润 float ratio; float ratio; / /提成比率提成比率提成比率提成比率 float salary = 5
26、00; float salary = 500; / /薪水,初始值为保底薪水薪水,初始值为保底薪水薪水,初始值为保底薪水薪水,初始值为保底薪水500500 printf (Input profit: );printf (Input profit: ); / /提示输入所接工程的利润提示输入所接工程的利润提示输入所接工程的利润提示输入所接工程的利润 scanf (%ld, &profit);scanf (%ld, &profit); / /输入所接工程的利润输入所接工程的利润输入所接工程的利润输入所接工程的利润 / /计算提成比率计算提成比率计算提成比率计算提成比率ratioratio if i
27、f ( (profit = 1000profit = 1000) ) ratio = 0; ratio = 0; if if ( (1000 profit & profit = 20001000 profit & profit = 2000) ) ratio = ratio = (float)(float)0.10;0.10; if if ( (2000 profit & profit = 50002000 profit & profit = 5000) ) ratio = ratio = (float)(float)0.15;0.15; if if ( (5000 profit & prof
28、it = 100005000 profit & profit = 10000) ) ratio = ratio = (float)(float)0.20;0.20; if if ( (10000 profit10000 profit) ) ratio = ratio = (float)(float)0.25;0.25; salary += profit * ratio; salary += profit * ratio; / /计算当月薪水计算当月薪水计算当月薪水计算当月薪水 printf (salary = %.2fn, salary); printf (salary = %.2fn, sa
29、lary); / /输出结果输出结果输出结果输出结果 运行结果:运行结果:运行结果:运行结果:Input profit: 4000Input profit: 4000 salary = 1100.00salary = 1100.00方法一:使方法一:使方法一:使方法一:使用用用用ifififif语句语句语句语句0.100.100.100.10默认为默认为默认为默认为doubledoubledoubledouble型,不进行强制类型,不进行强制类型,不进行强制类型,不进行强制类型转换将产生警告型转换将产生警告型转换将产生警告型转换将产生警告信息!信息!信息!信息!工程利润工程利润profit提成
30、比率提成比率profit1000没有提成没有提成1000profit2000提成提成10%2000profit5000提成提成15%5000profit10000提成提成20%10000profit提成提成25%20#include #include void main ( )void main ( ) long profit; long profit; / /所接工程的利润所接工程的利润所接工程的利润所接工程的利润 float ratio; float ratio; / /提成比率提成比率提成比率提成比率 float salary = 500; float salary = 500; / /
31、薪水,初始值为保底薪水薪水,初始值为保底薪水薪水,初始值为保底薪水薪水,初始值为保底薪水500500 printf (Input profit: ); printf (Input profit: ); / /提示输入所接工程的利润提示输入所接工程的利润提示输入所接工程的利润提示输入所接工程的利润 scanf (%ld, &profit); scanf (%ld, &profit); / /输入所接工程的利润输入所接工程的利润输入所接工程的利润输入所接工程的利润 / /计算提成比率计算提成比率计算提成比率计算提成比率 if if (profit = 1000) (profit = 1000) r
32、atio = 0;ratio = 0; else ifelse if (profit = 2000) (profit = 2000) ratio = (float)0.10;ratio = (float)0.10; else ifelse if (profit = 5000) (profit = 5000) ratio = (float)0.15;ratio = (float)0.15; else ifelse if (profit = 10000) (profit = 10000) ratio = (float)0.20;ratio = (float)0.20; elseelse ratio
33、 = (float)0.25ratio = (float)0.25; ; salary += profit * ratio; salary += profit * ratio; / /计算当月薪水计算当月薪水计算当月薪水计算当月薪水 printf (salary = %.2fn, salary); printf (salary = %.2fn, salary); / /输出结果输出结果输出结果输出结果 方法二:使方法二:使方法二:使方法二:使用用用用if_else ifif_else ifif_else ifif_else if语句语句语句语句工程利润工程利润profit提成比率提成比率pro
34、fit1000没有提成没有提成1000profit2000提成提成10%2000profit5000提成提成15%5000profit10000提成提成20%10000profit提成提成25%21方法三:使方法三:使方法三:使方法三:使用用用用switchswitchswitchswitch语句语句语句语句算法设计要点:算法设计要点:算法设计要点:算法设计要点: 为使用为使用为使用为使用switchswitch语句,必须将利润语句,必须将利润语句,必须将利润语句,必须将利润profitprofit与提成的关系转换成某些整与提成的关系转换成某些整与提成的关系转换成某些整与提成的关系转换成某些整
35、数与提成的关系。数与提成的关系。数与提成的关系。数与提成的关系。 分析本题可知,提成的变化点都是分析本题可知,提成的变化点都是分析本题可知,提成的变化点都是分析本题可知,提成的变化点都是10001000的整数倍(的整数倍(的整数倍(的整数倍(10001000、20002000、50005000、),将),将),将),将利润利润利润利润profitprofit整除整除整除整除10001000: profit 1000 profit 1000 对应对应对应对应0 0、1 1 1000 1000 profit 2000 profit 2000 对应对应对应对应1 1、2 2 2000 2000 pr
36、ofit 5000 profit 5000 对应对应对应对应2 2、3 3、4 4、5 5 5000 5000 profit 10000 profit 10000 对应对应对应对应5 5、6 6、7 7、8 8、9 9、1010 10000 10000 profit profit 对应对应对应对应1010、1111、1212、 为解决相邻两个区间的重叠问题,最简单的方法就是:为解决相邻两个区间的重叠问题,最简单的方法就是:为解决相邻两个区间的重叠问题,最简单的方法就是:为解决相邻两个区间的重叠问题,最简单的方法就是:利润利润利润利润profitprofit先减先减先减先减1 1(最小增量),然
37、后再整除(最小增量),然后再整除(最小增量),然后再整除(最小增量),然后再整除10001000即可即可即可即可: profit 1000 profit 1000 对应对应对应对应0 0 1000 1000 profit 2000 profit 2000 对应对应对应对应1 1 2000 2000 profit 5000 profit 5000 对应对应对应对应2 2、3 3、4 4 5000 5000 profit 10000 profit 10000 对应对应对应对应5 5、6 6、7 7、8 8、9 9 10000 10000 profit profit 对应对应对应对应1010、111
38、1、1212、工程利润工程利润profit提成比率提成比率profit1000没有提成没有提成1000profit2000提成提成10%2000profit5000提成提成15%5000profit10000提成提成20%10000profit提成提成25%22#include #include void main ( )void main ( ) long profit; long profit; / /所接工程的利润所接工程的利润所接工程的利润所接工程的利润 int grade;int grade; float ratio; float ratio; / /提成比率提成比率提成比率提成比率
39、 float salary = 500; float salary = 500; / /薪水,初始值为保底薪水薪水,初始值为保底薪水薪水,初始值为保底薪水薪水,初始值为保底薪水500500 printf (Input profit: );printf (Input profit: ); / /提示输入所接工程的利润提示输入所接工程的利润提示输入所接工程的利润提示输入所接工程的利润 scanf (%ld, &profit);scanf (%ld, &profit); / /输入所接工程的利润输入所接工程的利润输入所接工程的利润输入所接工程的利润方法三:使方法三:使方法三:使方法三:使用用用用sw
40、itchswitchswitchswitch语句语句语句语句 / /将利润将利润将利润将利润-1-1、再整除、再整除、再整除、再整除10001000,转化成,转化成,转化成,转化成switchswitch语句中的语句中的语句中的语句中的casecase标号标号标号标号 grade = (profit - 1) / 1000; grade = (profit - 1) / 1000; switchswitch ( grade ) ( grade ) / /计算提成比率计算提成比率计算提成比率计算提成比率 casecase 0: ratio = 0; break; 0: ratio = 0; br
41、eak; / profit1000/ profit1000 casecase 1: ratio = (float)0.10; break; 1: ratio = (float)0.10; break; / 1000/ 1000profit2000profit2000 casecase 2: 2: casecase 3: 3: case case 4: ratio = (float)0.15; break; 4: ratio = (float)0.15; break; / 2000/ 2000profit5000profit5000 casecase 5: 5: case case 6: 6:
42、casecase 7: 7: casecase 8: 8: casecase 9: ratio = (float)0.20; break; 9: ratio = (float)0.20; break; / 5000/ 5000profit10000profit10000 defaultdefault: ratio = (float)0.25; : ratio = (float)0.25; / 10000/ 10000profitprofit salary += profit * ratio; salary += profit * ratio; / /计算当月薪水计算当月薪水计算当月薪水计算当月
43、薪水 printf (salary = %.2fn, salary); printf (salary = %.2fn, salary); / /输出结果输出结果输出结果输出结果 profit 1000 profit 1000 对应对应对应对应0 01000 1000 profit 2000 profit 2000 对应对应对应对应1 12000 2000 profit 5000 profit 5000 对应对应对应对应2 2、3 3、4 45000 5000 profit 10000 profit 10000 对应对应对应对应5 5、6 6、7 7、8 8、9 91000010000 profit profit 对应对应对应对应1010、1111、1212、23此课件下载可自行编辑修改,仅供参考!此课件下载可自行编辑修改,仅供参考!感谢您的支持,我们努力做得更好!谢谢感谢您的支持,我们努力做得更好!谢谢