大学C语言第5章选择结构的程序设计资料_第1页
大学C语言第5章选择结构的程序设计资料_第2页
大学C语言第5章选择结构的程序设计资料_第3页
大学C语言第5章选择结构的程序设计资料_第4页
大学C语言第5章选择结构的程序设计资料_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、选择结构(jigu)的程序设计共三十六页第一节 用if语句设计选择结构程序第二节 用switch语句设计多分支结构程序第三节 无条件转向(zhunxing)第四节 应用实例共三十六页提出(t ch)问题二重(r zhn)分支的条件语句 if多重分支的条件语句 switch自然语言:如果 那么 否则C语言:分支语句第一节 if语句根据学生分数判断是否及格?根据学生分数如何进行分级?如何解决?共三十六页if语句格式 if ( 表达式 ) 语句1;else 语句2;if语句的执行(zhxng)流程表达式执行语句2执行语句1成立不成立第一节 if语句(yj)共三十六页 例:求 a 和 b 两数中较大(

2、jio d)的一个。#include main( ) /* 求a和b的最大值 */ int a,b,max; printf(Input a and b=); scanf(%d%d,&a, &b); /* 输入 a 、 b */ if ( ab ) /* 如果ab,将a存入max */ max = a; else /* 否则, 将b存入max */ max = b; printf(The max of a and b : %dn, max);第一节 if语句(yj)共三十六页条件表达式的值为非零,表示条件成立。 if语句中进行条件判断的“表达式”,必须(bx)用括号“( )”括起来且不可省略。a

3、 bmax=bmax=a成立不成立第一节 if语句(yj)共三十六页 例:求 a 和 b 两数中较大(jio d)的一个。#include main( ) /* 求a和b的最大值 */ int a,b,max; printf(Input a and b=); scanf(%d%d,&a, &b); max = a; if ( max b ) max = b; printf(The max of a and b : %dn, max);第一节 if语句(yj)共三十六页max bmax=bmax=a成立不成立if语句格式(g shi)中的表达式2可以省略。if(表达式) 语句1;第一节 if语句

4、(yj)共三十六页例:从键盘输入被除数a和除数(ch sh)b,求商。 main( ) int a,b; printf(Enter two numbers: ); scanf(%d%d, &a, &b); if (b!=0) printf(%dn, a/b); else printf(cannot divide by zero.n); 将条件(tiojin)改为:b?if(b) 当b不等于零时执行此句,当b等于零时执行此句,第一节 if语句共三十六页 if语句的嵌套 在if语句的“语句1”或“语句2”中又包含着if语句。例如程序:比较(bjio)两个整数的大小 #include main( )

5、 int x, y; printf (Enter integer X and Y:); scanf (%d%d, &x, &y); if ( x != y ) if ( x y ) printf (XYn); else printf (Xb) /* 1 */ if(ac) /* 2 */ if(ad) flag=1; /* 3 */ else flag=2; /* 4 */ else flag=3; /* 5 */问题:第四行和第五行的else语句和那一个(y )if语句相匹配呢?分析:匹配方案可以有很多种:(2-4,1-5)、 (3-4,2-5)、(1-4,2-5)、第一节 if语句(yj)

6、共三十六页 嵌套if语句匹配规则(guz): 在嵌套的if-else语句中,else子句总是与上面的、离它最近的、且在同一复合语句中还没有配对的if子语配对。第一节 if语句(yj) if(ab) /* 1 */ if(ac) /* 2 */ if(ad) flag=1; /* 3 */ else flag=2; /* 4 */ else flag=3; /* 5 */共三十六页书写程序时采用缩进(su jn)格式,表示配对关系。 if( ab ) if( ac ) if( ad ) flag=1; else flag=2; else flag=3;?程序含义?当 a 最大时,flag=1当

7、d 最大时,flag=2当 cab 时,flag=3第一节 if语句(yj)共三十六页 if( ab ) if( ac ) if( ad ) flag=1; else flag=2; /* 以上是一个(y )完整的复合语句 */ else flag=3; 程序含义:当 a=b 时,flag=3 当 a 最大时,flag=1 当 d 最大时,flag=2第一节 if语句(yj)共三十六页注意(zh y):缩进格式不改变执行顺序。 if( a=b ) if( b=c ) printf(a=b=cn); else printf(”a!=bn”); 尽管书写格式如此,真实的正确的含义是: if( a=

8、b ) if( b=c ) printf(a=b=cn); else printf(“a!=bn”); 第一节 if语句(yj)共三十六页通过加 ,可以改变(gibin)配对关系: if( a=b ) if( b=c ) printf(a=b=cn); else printf(”a!=bn”); 第一节 if语句(yj) 加 后成为一个语句。共三十六页例:已知银行整存整取存款月息利率分别为: 一年期 0.1875% 二年期 0.225% 三年期 0.27% 五年期 0.3% 其他:0 要求输入存钱的本金和期限,求到期时利息与本金合计。银行到期利息计算公式:利息本金月息利率12存款年限 程序中应

9、当(yngdng)根据存款的年限确定利率第一节 if语句(yj)共三十六页 #include main( ) int year; float money,rate,total; /* 本金(bnjn),月利率,本利合计*/ printf(Input money and year =?); scanf(%f%d, &money, &year); /* 输入本金和年限 */ if(year = 1) rate=0.001875; /* 根据年限定利率 */ else if( year = 2 ) rate=0.00225; else if( year = 3 ) rate=0.0027; else

10、 if( year = 5 ) rate=0.003; else rate=0.0; total = money + money * rate *12 * year; printf( Total = %.2fn, total);第一节 if语句(yj)共三十六页 例:通过键盘输入字符,将输入的字符分为控制、数字、大写(dxi)字母、小写字母和其他字符等五类。 ASCII码表中的前32个字符为控制字符, 0 9为数字, A Z为大写字母, a z为小写字母, 其它。第一节 if语句(yj)共三十六页 #include main ( ) char c; printf (Enter a charac

11、ter:); c=getch( ); if(c=0 & c=A & c=a & c=z ) printf(nIs a lower character.n); else printf(nIs a other character.n);例C5_105第一节 if语句(yj)共三十六页 if语句与条件运算(yn sun)的关系 例:求一个数字的绝对值if( y0 )x=-y;elsex=y;(y0)?x=-y:x=y;等价(dngji)等价x=(y0 ? a/b : a0 ? a/b : a0 ? a+b : a-b ;表达式1 表达式2表达式3第一节 if语句(yj)共三十六页 switch语句格

12、式(g shi) switch (表达式) case 常量1: 语句序列1 case 常量2: 语句序列2 default: 语句序列n+1 第二节 switch语句(yj)共三十六页执行语句序列1=常量1?计算表达式的值相等不相等执行语句序列2=常量2?相等不相等执行语句序列n+1有default?有没有第二节 switch语句(yj)共三十六页 switch语句(yj)格式 switch (表达式) case 常量1: 语句序列1 case 常量2: 语句序列2 default: 语句序列n+1 语句(yj)标号第二节 switch语句可执行语句共三十六页switch (number) c

13、ase 1:statement 1;break;case 2:statement 2;break;case 3:statement 3;break;default:statement 4;statement 5;当number的值为2时第二节 switch语句(yj)共三十六页switch语句使用注意事项1.switch语句与if语句不同,仅能判断一种关系:是否恒等。2.switch语句中的“case 常量:“是语句标号。3.switch语句中case子句的常量可以是整型常量、字符型常量、枚举(mi j)型数据,或是整型常量表达式,不允许是变量。4.在同一个switch中,case子句的常量不

14、能相同;在嵌套的switch语句中,不同层次的switch之间,可有相同的常量。第二节 switch语句(yj)共三十六页5.default子句可以省略。6.case 和 default 子句只能在switch语句中使用,且 case和 default 只起标号(bioho)作用,可出现在switch中的任何位置。7.case 和 default 子句后面的语句序列允许由多个可执行语句组成,且不必用“ ”括起来,也可以为空语句。8.switch 语句中的 break 语句不是必须。注意区别。第二节 switch语句(yj)共三十六页例:计算存款本利(bn l)。采用switch改写。 #inc

15、lude main( ) int year; float money,rate,total printf(Input money and year =?); scanf(%f%d, &money, &year); switch ( year ) case 1: rate = 0.001875; break; case 2: rate = 0.00225; break; case 3: rate = 0.0027; break; case 5: rate = 0.003; break; default: rate = 0; total = money + money * rate *12 * y

16、ear; printf( Total = %.2fn, total);第二节 switch语句(yj)共三十六页例:输入年份year和月month,求该月天数(tinsh)。如何判断闰年? 闰年:能够被 4 整除且不能被 100 整除的年份 或 能够被 400 整除的年份 例如:1996年是闰年 2000年是闰年 1900年是平年判断闰年的C语言公式year % 4 = 0 & year % 100 != 0 | year % 400 = 0 当year = 1996 时,结果为 1 当year = 1997 时,结果为 0 当year = 1900 时,结果为 0 当year = 2000

17、时,结果为 1 第三节 示例(shl)共三十六页main( ) int year, month, days; scanf(%d%d, &year, &month); switch (month) case 1: case 3: case 5: case 7: case 8: case 10: case 12: days=31; break; /* 处理“大”月 */ case 4: case 6: case 9: case 11: days=30; break; /* 处理“小”月 */ case 2: if ( year%4=0 & year%100!=0 | year%400=0 ) da

18、ys=29; /* 如果是闰年(rnnin) */ else days=28; /* 不是闰年 */ break; default: /* 月份错误 */ printf(Input error!n); days=0; if(days!=0) printf(”%d,%d is ddaysn,year,month,days);1. 省略case子句(z j)之后的语句。2. 注意break语句的作用。第三节 示例共三十六页省略break语句 flag=-1; /* error marker */ switch (i) case 1: case 2: case 3: flag=0; /* no er

19、ror */ break; case 4: flag=1; /* error #1 */ case 5: error(flag); /* error process */ break; default: flag=2; /* other error */ /* 假定函数error是出错处理函数 */当 i=1,2,3时:flag = 0;退出(tuch)。当 i=5 时:flag = -1;调用 erorr(flag);退出。当 i=4 时:flag = 1;调用 error(flag);退出。第二节 switch语句(yj)共三十六页例:请编写一个程序计算表达式: data1 op data

20、2 的值。 例如(lr),从键盘输入 5 + 4 , 程序输出 9 ; 从键盘输入 12 / 4 , 程序输出 3 。 第三节 示例(shl)共三十六页 main ( ) float data1, data2; /*定义操作数变量(binling)*/ char op; /*定义操作符变量*/ printf(Enter your expression:); scanf (”%f%c%f”, &data1, &op, &data2); /* 输入表达式 */第三节 示例(shl)共三十六页 switch ( op ) /* 根据操作符分别进行处理 */ case + : /* 处理加法 */ printf(%.2f+%.2f=%.2fn, data1,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论