C语言第四章

上传人:油条 文档编号:47621445 上传时间:2018-07-03 格式:PPT 页数:88 大小:403KB
返回 下载 相关 举报
C语言第四章_第1页
第1页 / 共88页
C语言第四章_第2页
第2页 / 共88页
C语言第四章_第3页
第3页 / 共88页
C语言第四章_第4页
第4页 / 共88页
C语言第四章_第5页
第5页 / 共88页
点击查看更多>>
资源描述

《C语言第四章》由会员分享,可在线阅读,更多相关《C语言第四章(88页珍藏版)》请在金锄头文库上搜索。

1、第四章 控制结构本章要点n关系运算符和逻辑运算符nif语句和switch语句nwhile语句、do while语句和for语句nbreak语句和continue语句 本章学习目标 n了解结构化程序设计的基本思想n掌握C语言的基本控制结构和基本控制语句的 使用方法n熟练掌握使用基本控制语句进行结构化程序设 计的方法n掌握break语句和continue语句的使用方法n掌握一些常用的算法4.1 关系运算符和关系表达式 n4.1.1 关系运算符n关系运算符用于判断两个数据之间的某个关系 是否成立。C语言提供了六种关系运算符:大于 = 大于等于 = 等于 != 不等于n关系运算的结果是逻辑值:成立(真

2、)或不成 立(假)。 53 运算结果为真 35 运算结果为假使用关系运算符需要注意n(1)注意书写格式n“=”是表示判断两个数据数值是否相等,一 定要和赋值运算符“=”区分开。 n(2)注意运算符优先级和结合性n“”,“=”,“b+ca(b+c)a=bca=(bc)a=bca=(bc)n(3)关系运算符均是二元运算符,一个关系 运算符的两个操作数类型要相同,如果类型不 一致,系统将自动进行类型转换。 A=65 运算结果为真 0=0 运算结果为假4.1.2 关系表达式n关系表达式是指利用关系运算符将两个表达式 连接起来形成的式子。n关系运算的结果为逻辑值,由于C语言中没有 逻辑类型,因此当运算结

3、果为真时,用整数1 表示,当运算结果为假时,用整数0表示。n关系表达式的值也是一个逻辑值,即1或0。假设变量已如下定义: int a=3,b=2,c=1,d=5,f; ab 表达式值为1 ab=c 等价于(ab)=c,表达式的值为1 b+cb 等价于d=(ab),d的值为1 f=abcd 等价于f=(ab)c)d),f的值为0 4.2 逻辑运算符和逻辑表达式n4.2.1 逻辑运算符n逻辑与运算 b=5; !a 表达式值为0 ab=2;c=3;d=4;m=1;n=1; (m=ab) if(x!=0)printf (“x is not equal to 0”);if(!x)printf (“x i

4、s equal to 0”); if(x=0)printf (“x is not equal to 0”);if (1) printf (“this expression is always true”);n【例4-1】已知符号函数的定义形式如下,编写 程序,根据输入的x值,输出相应的y值。/*程序4-1*/ #include void main() int x, y; printf(“Please input the value of x:”); scanf(“%d”, if(x0) y=1; printf(“ the value of y is %d n”, y); n需要注意,根据if语

5、句的语法要求,在小括号 后面是单独一条语句,而不是多条语句。如果 当表达式为真值时,需要执行多条语句应该使 用复合语句。n复合语句的格式为: 若干条语句 n复合语句是通过一对大括号包围多条语句来实 现,复合语句将被作为一条语句来处理。 i+;sum+=i; n注意,其中的每条语句均以分号结束,而复合 语句本身没有分号。4.3.2 else子句 if(表达式) 语句1 else 语句2n如果括号内的表达式为真,则执行括号后面的 语句1。当表达式值为假,则执行else后面的语 句2;语句1和语句2只能有一个能被执行。n【例4-2】输入两个整数,将较大者输出。/*程序4-2*/ #include v

6、oid main () int a, b, max;printf(“Please input the data a and b:”);scanf(“%d, %d”,if(a=b)max=a;elsemax=b;printf(“The max is %dn”, max); 4.3.3 if语句嵌套 n编写程序时我们会遇到根据多个不同的条件, 分别去执行不同操作的情况。这时就需要使用 嵌套的if语句来实现了。n在if语句内部和else子句内部可以包含任何类型 的语句,通过在if语句和else子句内部嵌套其它 if语句可以形成if语句的嵌套形式 。两级if语句嵌套的一般格式n执行过程n如果表达式1成

7、立,并且表达 式2成立,则执行语句1;n如果表达式1成立,并且表达 式2不成立,则执行语句2;n如果表达式1不成立,并且表 达式3成立,则执行语句3;n如果表达式1不成立,并且表 达式3不成立,则执行语句4 ;if(表达式1)if(表达式2)语句1;else语句2; else if(表达式3)语句3;else语句4;n【例4-3】编写程序,要求从键盘输入一个字符 ,判断其类型,将字符分为四种类型:小写字 母、大写字母、数字或者其他字符。/*程序4-3*/ #include void main() char ch;printf(“Please input a letter:”);scanf(“%

8、c”, if(ch=Aprintf(“Please input a number:”);scanf(“%d”,gw=num%10; /*把个位取出赋值给变量gw*/sw=num/10%10; /*把十位取出赋值给变量sw*/bw=num/100%10; /*把百位取出赋值给变量bw*/qw=num/1000; /*把千位取出赋值给变量qw*/if(qw!=0)printf(“四位数n”);elseif(bw!=0)printf(“三位数n”);elseif(sw!=0)printf(“二位数n”);elseprintf(“一位数n”); n在程序4-3和程序4-4中,我们都是在else子句内

9、部嵌套if语句,这种嵌套形式通常称为级联式if 语句。许多程序员在书写级联式if语句时,通 常不采用缩进的格式,例如程序4-4可以修改为 下面的程序。/*程序4-5*/ #include void main() int num,gw,sw,bw,qw;printf(“Please input a number:”);scanf(“%d”,gw=num%10; /*把个位取出赋值给变量gw*/sw=num/10%10; /*把十位取出赋值给变量sw*/bw=num/100%10; /*把百位取出赋值给变量bw*/qw=num/1000; /*把千位取出赋值给变量qw*/if(qw!=0)prin

10、tf(“四位数n”);else if(bw!=0)printf(“三位数n”);else if(sw!=0)printf(“二位数n”);elseprintf(“一位数n”); 4.3.4使用if语句应注意的问题n(1)在(表达式)后面或else关键字后面加分号 通常会导致出现语义错误。n单独使用一个分号表示一个空语句void main() int x;x=1;if(x=1) ; /*这里多加了个分号*/printf(“x等于1n”);elseprintf(“x不等于1n”); 当尝试对该程序进行编译时,C语言编译器会报告 “illegal else without matching if”的

11、语法错误。 void main() int x;x=1;if(x=1)printf(“x等于1n”);else ; /*这里多加了个分号*/printf(“x不等于1n”); 该程序运行后的输出结果为: x等于1 x不等于1这并不是我们所期望得到的输出结果 n(2)如果if语句内部或else子句内部需要放置 多条语句,必须将这多条语句构成一个复合语 句,这样才能符合if语句的语法格式。 n【例4-5】输入三个整数,将其降序排序后 输出。/*程序4-6*/ #include void main() int a,b,c,t;printf(“input the data:”);scanf(“%d,%

12、d,%d”,if (ab)?a:b;上述语句执行后,变量min的值为1,max的值 为2。n使用条件表达式可以代替一些简单的if语句。 if(ab) max=a; else max=b;max=(ab)?a:b; if(ab) printf(“%d”,a); else printf(“%d”,b);printf(“%d”,(ab)?a:b);n条件运算符的优先级高于赋值运算符和逗号运 算符,低于所有其它运算符。其结合方向为自 右向左。x0?1:x0?1:(x void main() int day;printf(“please input a digit ”);scanf(“%d“, swit

13、ch (day)case 1: printf(“Mondayn“);break;case 2: printf(“Tuesdayn“); break;case 3: printf(“Wednesdayn“); break;case 4: printf(“Thursdayn“); break;case 5: printf(“Fridayn“); break;case 6: printf(“Saturdayn“); break;case 7: printf(“Sundayn“); break;default: printf(“data errorn“); 4.3.6 break语句n在switch语

14、句中,每个分支标号后的一组语句 中的最后一条语句通常是break语句。n从程序4-7可以看出,break语句的作用是使程 序跳出switch语句,继续执行switch语句后面 的其它语句。n如果程序4-7中去掉了break语句,我们将得到 不合理的执行结果。/*程序4-7*/ #include void main() int day;printf(“please input a digit ”);scanf(“%d“, switch (day)case 1: printf(“Mondayn“);case 2: printf(“Tuesdayn“); case 3: printf(“Wednes

15、dayn“); case 4: printf(“Thursdayn“); case 5: printf(“Fridayn“); case 6: printf(“Saturdayn“); case 7: printf(“Sundayn“); default: printf(“data errorn“); 程序运行后,假设 我们输入3,然后 程序会输出: Wednesday Thursday Friday Saturday Sunday data errorn产生这种的结果的原因在于switch语句是一种“ 基于比较的转移”。当控制表达式的值与某个 常量表达式的值相等时,程序便转移到相应的 分支标号处,开始执行分支标号后的语句(这 里,分支标号仅起到标识目标语句位置的作用 ,不能实现对多个处理分支的分割)。当执行 完一个处理分支内的语句后,如果没有break 语句,程序将直接进入下一个处理分支,然后 继续执行下一个分支内的语句。n有时我们可以利用这个特点,使得多个处理分 支可以共享一组语句。n【例4-7】输入1至7中的一个数值,然后打印出 该数值对应工作日或休息日。/*程序4-8*/ #include void main() int day;printf(“please input a digit ”);scanf(“%d

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号