收藏 分享(赏)

C语言第四章(上).ppt

上传人:cw6mk8 文档编号:8464649 上传时间:2019-06-29 格式:PPT 页数:54 大小:315KB
下载 相关 举报
C语言第四章(上).ppt_第1页
第1页 / 共54页
C语言第四章(上).ppt_第2页
第2页 / 共54页
C语言第四章(上).ppt_第3页
第3页 / 共54页
C语言第四章(上).ppt_第4页
第4页 / 共54页
C语言第四章(上).ppt_第5页
第5页 / 共54页
点击查看更多>>
资源描述

1、THE C PROGRAMMING LANGUAGE,C语句概述,1. 控制语句( 9种) : 完成一定的控制功能if ( ) else 条件语句( 双分支选择语句)switch 多分支选择语句for ( ) while ( ) 循环语句do while ( )continue 结束本次循环语break 终止语句goto 转向语句return 从函数返回语句,C语句概述,2. 函数调用语句 : 由一个函数调用加一个分号构成 如: printf(“very good!”);,3. 表达式语句 : 由表达式加分号构成如: x=12 ; ( 赋值表达式语句 ),4. 空语句 : 由一个分号构成 ,

2、它什么也不做 ;,5. 复合语句 : 用 括起来的语句序列如 int temp ;temp = x ;x = y ;y = temp ;,注意 : 1. 复合语句是一个整体, 相当于一条语句 2. 一个复合语句中可以包含其他的复合语句 3. 在复合语句的花括号后不要再加分号 3. 复合语句中可定义变量 , 但此变量只在该复合语句内有效,0.本章内容,控制语句 选择语句 循环语句 中断控制语句 基本结构程序设计 顺序结构 选择结构 循环结构,0.本章内容,控制结构 选择结构 三种结构形式 单分支、双分支、多分支 两种语句格式 if(else if) else switch break语句在swi

3、tch中的作用 嵌套选择结构,1.选择结构,选择结构的特征 程序的流程由多路分支组成 在程序的一次执行过程中,根据不同情况只有一条支路被选中执行 其他的分支上的语句被直接跳过 选择结构的要素 语句 if语句 switch语句 条件,1.选择结构,选择结构的要素 条件 由关系表达式或由关系表达式组合而成的逻辑表达式 用数值1表示逻辑“真”,用0表示逻辑“假” 在判断条件时又以非0为“真“,以0为“假“ 少数情况下也可以是算术表达式 这个表达式的结果将决定程序下一步的执行顺序 例 C1是否为小写字母的条件是: X在1,10和200,210之间为真, 否则为假的条件是:,(c1=a)&(c1=z),

4、( (x=1)&(x=200)&(x=210) ) ),2.if语句,if语句是一种非常重要的程序流程控制语句 它可以使程序根据不同的条件执行不同的操作 if 语句共有三种形式 简单if ifelse ifelseif,2.if语句,简单if语句,if 语句的两种形式1. 单分支形式: if ( 表达式 ) 语句,执行过程: 先计算表达式的值, 如果值为1, 就执行其后的语句, 如果值为0, 就继续向下执行.,2. 双分支形式: if ( 表达式 ) 语句1 else 语句2,执行过程: 先计算表达式的值, 如果值为1, 就执行其后的语句1, 如果值为0, 就执行else后的语句2,2.if语

5、句,简单if语句 语句格式: if(表达式) s1; 表达式表示对一个条件的判断 表达式的结果为0或1 通常为关系表达式或逻辑表达式 也可以直接表示成某一数值 表达式必须用括号 s1从语法上应是一条语句 当在此执行多条语句,必须用大括号将它们括起来,构成复合语句 语法上它仍然是一条语句,2.if语句,简单if语句 例 if(x=y,2.if语句,简单if语句 例: 两个整数相除,main()演示41.Cint a,b;printf(“enter two numbers:”);scanf(“%d%d”,2.if语句,简单if语句 例: 计算一个整数的绝对值,main() int a,absa;p

6、rintf(“enter one number:”);scanf(“%d”,&a);absa=a;if(a0) absa=-a;printf(“|%d|=%d”,a,absa);,2.if语句,【例3】题可改写为:,main() int a,absa;printf(“enter one number:”);scanf(“%d”,main() int a,absa;printf(“enter one number:”);scanf(“%d”,&a);absa=a;if(a0) absa=-a;printf(“|%d|=%d”,a,absa);,2.if语句,【例4】:求分段函数值,main()f

7、loat x,y;scanf(“%f”, ,【例5】:输入整数a和b,若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数之和。 演示43.C,main() int a,b,x,y;scanf(“%d%d”,&a,&b);x=a*a+b*b;if(x100) y=x/100;printf(“%d”,y);else printf(“%d”,a+b); ,main() int a,b;scanf(“%d%d”,&a,&b);if( a*a+b*b 100) printf(“%d”,(a*a+b*b)/100);else printf(“%d”,a+b); ,2.if语句,2.if语

8、句,ifelse if语句 对于一个问题可能需要从多方面进行判断,有多种可能的情况进行处理 语句格式:,if(表达式 e1 ) 语句S1 ;else if (表达式e2) 语句S2 ;else if(表达式e3) 语句S3 ; else 语句Sn ;,2.if语句,ifelse if语句 执行过程示意图,e1,语句S1,e2,语句S2,en,语句Sn,语句Sn+1,提示: 这是一条语句 属于双分支结构的嵌套,2.if语句,例:求分段函数的值,2.if语句,源程序,#include “math.h” #include“stdio.h”main() float x,y;printf(“enter

9、a x:”);scanf(“%f”,&x);if(x1.0) y=x*x+2*x+sin(X);else if(x10.0) y=2*x-1;else y=sqrt(3*x*x-1);printf(“x=%f,y=%f”,x,y);,2.if语句,If语句嵌套 if 语句体中又包含一个或多个if语句,称为if语句的嵌套 在简单if语句和if_else语句形式中,s1或s2可以是任意合法语句 当s1或s2也是if语句,就构成嵌套的if语句 嵌套形式,if (e1)if(e2) s1;else s2;else s3;,if (e1) if(e2) s1;else s2;,if (e1) s1;el

10、se if(e2) s2;else s3;,2.if语句,If语句嵌套 C语言规定的原则 从最内层开始,else总是与它前面最近的同一复合语句内的不带else 的if结合 如果if和 else的数目不统一,可以加明确配对关系 提示 嵌套中的if与 else的配对关系非常重要 对多重if,最容易犯的错误就是if与 else配对错误 即使(表达式)的后面只有一条语句,也尽量不要省略花括号 这样做的目的不单单是为了解决if和else配对的问题,更主要是为了以后对程序进行修改做准备,2.if语句,If语句嵌套形式,在if 语句中又包括一个或多个if 语句,1. if (表达式1) if (表达式2)

11、语句,2. if (表达式1) 语句1 else if (表达式2) 语句2,3. if (表达式件1) 语句1else if (表达式2) 语句2 else 语句3,4. if (表达式1)if (表达式2) 语句1else 语句2,对第4种形式可以有两种理解方式: (1) if (表达式1) if (表达式2) 语句1 else 语句2 ,(2) if (表达式1) if (表达式2) 语句1 else 语句2,2.if语句,If语句嵌套,例如:if (x)if(y) printf (“ yn”);else if (z) printf(“zn”);else printf (“xn”);,i

12、f (x) if(y) printf (“ yn”);else if (z) printf(“zn”); else printf(“xn”); 不仅解决了问题,也使程序结构 和层次清晰。,如果要实现例中书写形式的意图, 可写成如下形式:if (x) if(y) printf (“ yn”); else if (z) printf(“zn”);else printf(“xn”); ,2.if语句,If语句嵌套 程序的书写缩排 所谓缩排,就是上一行与下一行相比,行首向右缩进 若干字符 适当的缩排使程序的结构、层次清晰、一目了 然,增加程序的易读性。 复合语句在 if 结构中的使用if 语句中有时需

13、要执行的语句不止一条,需要采用复合语句 无论包括多少条语句,复合语句从逻辑上将被看成是一条语句 复合语句在分支结构和循环结构中,使用的非常普遍,十分广泛,2.if语句,例:阅读程序回答问题,#include main()int a,b,m,n;scanf(“%d%d”,1)当输入为-1 2,程序的运行结果为多少?,2)当输入为1 0,程序的运行结果为多少?,3)为了输出n=4,变量a和b应具备的条件是什么?,m=1 n=2,m=2 n=3,0ab,2.if语句,例:从键盘上输入每个学生三门课程的成绩,计算其平均值 当平均成绩高于90分时,输出A; 平均分在80-89之间,输出B; 平均分在70

14、-79之间,输出C; 平均分在60-69之间,输出D; 平均成绩不及格(小于60分)时输出E,2.if语句,程序代码,main( )int inp1,inp2,inp3,sum, ave;printf(“Enter students scores in three tests:n”);scanf(“%d%d%d”,2.if语句,使用if语句,使用if语句,if (ave = 90) printf(“A”);if (ave = 80,if (ave = 90) printf(“A”);else if (ave = 80) printf(“B”);else if (ave = 70) printf

15、(“C”);else if (ave = 60) printf(“D”);else printf(“E”);,2.if语句,提示 if 语句中花括号“ ”与分号“;”的使用 一般地,语句部分需要采用括起来 其中各条语句后必须有“;”表示其结束 当仅有一条语句时,“”可以省略 表达式的使用 常见的表达式是逻辑表达式或关系表达式 也可以是任意的数值类型 整型、实型、字符型、指针型数据等 因为在 if 中只要表达式的值为非0,则认为是“真(逻辑1)”。否则,被认 为是“假(逻辑0)” 多分支语句的选择 用 if语句嵌套实现的多分支结构,分支较 多;容易使程序冗长不清晰;可读性差 应使用 C语言提供的

16、switch开关语句专门处理多分支结构 可以简化程序的结构, 程序简洁,3.switch语句,switch语句 功能 可以根据某一表达式的不同取值,直接进行多分支选择处理 语句格式,语句格式:switch (表达式e)case 常量表达式a1: 语句序列S1;break;case 常量表达式a2: 语句序列S2;break;case 常量表达式an: 语句序列Sn;break;default: 语句S;,3.switch语句,switch语句 执行示意图,3.switch语句,switch语句 执行过程 首先计算表达式的值 表达式的结果只能是整数、字符或枚举量 将e的值依次与每一个 case后

17、的常量表达式ai(a1,a2,aian)进行比较 常量表达式ai不允许重复 如果相等,执行常量表达式ai后的语句序列Si 若si结束处有break语句,则跳出switch语句,执行结束 若没有break语句,在执行完Si后将无条件的继续执行下一条case语句的语句 此时并不再检查后面的case后的标号ai是否与e的值相等 如果未找到与之匹配的常量表达式ai,则做如下处理 若有default语句,则执行default后的语句序列S后结束 若没有default语句, switch语句直接结束(什么也没有做),3.switch语句,switch语句,例 void main ( ) int x, y

18、;printf(“input a number:n”);scanf(“%d” , ,如果输入x为 2 则输出: 20300,如果输入x为 6 则输出: 0,3.switch语句,switch语句,void main ( ) int x, y ;printf(“input a number:n”);scanf(“%d” , ,如果输入x为 2 则输出: 20,3.switch语句,switch语句 提示 特殊情况下,如果switch表达式的多个值都需要执行相同的语句可以采用下面的格式,switch (i)case 1:case 2:case 3:语句1;break;case 4:语句2;brea

19、k;case 5:case 6:语句3;break;default :语句4;,/*执行过程: 当整型变量i的值为1、2或3时, 执行语句1; 当整型变量i的值为4时执行语句2; 当整型变量i的值为5、6时,执行 语句3, 否则执行语句4。*/,3.switch语句,switch语句 例:输入月份打印1999年该月有多少天,#include main( ) int month;int day;printf(“please input the month number:”);scanf(“%d”,&month);,switch (month) case 1:case 3:case 5:case

20、7:case 8:case 10:case 12: day=31; break:case 4:case 6:case 9:case 11:day=30;break;case 2:day=28;break;default: day=-1:,if (day= =-1) printf(“invalid month input!n”);else printf(“1999.%d has %d daysn”,month,day);,3.switch语句,switch语句 提示 switch后面括号中可以是任何表达式,取其整数部分与各常量表达式进行比较 常量表达式中不能出现变量,且类型必须是整型、字符型或枚

21、举型 各常量表达式互不相同 语句si可以是一条或多条语句,多条语句时不必用 将它们括起来 语句si处也可以没有语句,程序执行到此会自动向下顺序执行 采用一个break语句或return语句退出switch语句是必要的 default语句一般出现在所有case语句之后,也可以出现在case语句之前或两个case语句之间 default语句可以缺省 使用switch语句的前提条件是条件表达式必须是基于同一个整型(或字符型)变量 实型和字符串都是不允许的,3.switch语句,switch语句 什么时候用一条switch语句比用多条if语句更好? switch语句与if语句不同switch语句只能对

22、等式进行测试 if 语句可以计算关系表达式或逻辑表达式等 如果有两条以上基于同一个整型变量的条件表达式,那么最好使用switch语句 例如,if(x=1)printf(”x is equal to one.n”);elseif(x=2)printf(”x is equal to two.n”);elseif(x=3)printf(”x is equal to three.n”);else printf(”x is not equal to one,two,three.n”);,3.switch语句,switch语句,不如使用如下switch代码,它更易于阅读和维护:switch(x)case

23、1:printf(”x is equal to one.n”);break;case 2:printf(”x is equal to two.n”);break;case 3:printf(”x is equal to three.n”);break;default:printf(”x is not equal to one,two,three.n”);,3.switch语句,switch嵌套语句 在switch语句中,每个case后面可以出现另一个switch语句,从而形成嵌套switch语句 例,阅读下面程序:计算结果#include main()int a=2,b=7,c=5;switc

24、h(a0)case 1:switch(b0)case 1:printf(“”);break;case 2:printf(“!”);break; case 2:switch(c=5)case 0:printf(“*”);break;case 1:printf(“#”);break;default:printf(“$”);break; default:printf(“,执行结果:#&,4.例题,main() int a,b,c;printf(“input a,b,c:n”);scanf(“%d%d%d”,&a,&b,&c);if (ab) min=a;else min=b;if (cmin) mi

25、n=c;printf(“the result is %dn”,min); ,例1:输入三个数,找出并打印最小数 算法如下 设3个数分别是a、b和c 将a、b中较小者赋值给min 用min与c进行比较,取其中较小者重新赋值给min 将min作为最后结果输出,4.例题,例2:编写一个程序根据用户输入的三角形的三边判定三角形的类型并求其面积 算法分析 设三角形的三变为a,b,c 是否能组成三角形 条件 a+bc&a+cb&b+ca 如果组成三角形 计算三角形的面积 判断是什么类型三角形? 等边三角形 等腰三角形 直角三角形 一般三角形,4.例题,程序代码,#include“stdio.h” #inc

26、lude“math.h” main() float a,b,c; float s,area;printf(“a,b,c=”);scanf(“%f,%f,%f”,4.例题,例3:编写一个程序,完成两个数的四则运算(数与运算符由键盘给入) 分析 调用输入函数输入操作数和运算符 四则运算规则,#includde main() float x,y;char op;printf(“ntype in your expression:”);scanf(“%f%c%f”,4.例题,switch(op) 演示49.C case +:printf“%6.2f%c%6.2f=%6.2fn”,x,op,y,x+y);

27、break;case -:printf(“%6.2f%c%6.2f=%6.2fn”,x,op,y,x-y); break;case *:printf(“%6.2f%c%6.2f=%6.2fn”,x,op,y,x*y);break;case /:if(y=0) printf(“error!n”);else printf(“%6.2f%c%6.2f=%6.2fn”,x,op,y,x/y); break;default:printf(“espression error!n”:); ,5.小测试,1:下述程序段中,无语法错误的是,A)int a=2,b=0;switch(a) case b+1:a-;

28、break;case b=5: a+=10;break;,B)char x=A,y;switch(x) case A:y+;break;case -1: y=5;,C)int a,b=5;switch(b) case b0:a=1;break;case b=0: a=0;break;,D)#define M 10int a=1,b;switch(a) case M-9:b+=5;break;case 1: b=1;break;,5.小测试,2.以下程序的运行结果是:main( ) int x1=3, x2=0, x3=0;if (x1=x2+x3)printf(“* * * *“);else

29、printf(“# # # #“); A.输出:* * * * B.输出:# # # # C.存在语法错误 D.无输出结果,5.小测试,4.为了避免在嵌套的条件语句if-else中产生二义性,C语言规定:else总是与 A.缩排位置相同的if配对 B.其之前最近且不带else的if配对 C.其之前最近的if配对 D.第一个if配对,5.若执行以下程序时从键盘上输入3 4,则输出结果是 main( ) int a,b,s; scanf(“%d%d“, A. 14 B. 16 C. 18 D. 20,main() int x=5;if(x-5)printf(“%dn“,x);else printf

30、(“%dn“,x+); ,5.小测试,答案:4,main() int a=-1,b=1,k;if(+a0) ,5.小测试,答案:1 0,main() int a=15,b=21,m=0;switch(a%3)case 0:m+;break;case 1:m+;switch(b%2)default:m+;case 0:m+;break;printf(“%dn“,m); ,5.小测试,答案:1,main() int x=10,y=20,t=0;if(x=y)t=x;x=y;y=t;printf(“%d,%dn“,x,y); ,5.小测试,答案:20,0,main() int a=58;if(a50)printf(“%dn“,a);if(a40)printf(“%dn“,a);if(a30)printf(“%dn“,a); ,5.小测试,答案:585858,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报