控制流顺序结构选择结构.ppt_第1页
控制流顺序结构选择结构.ppt_第2页
控制流顺序结构选择结构.ppt_第3页
控制流顺序结构选择结构.ppt_第4页
控制流顺序结构选择结构.ppt_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

第4章 顺序和选择结构程序设计,4.1 结构化程序设计 4.2 语句与分程序 4.3 顺序结构程序设计 4.4 选择结构程序设计 4.5 switch语句 4.6 程序举例,4.1 结构化程序设计,(1)顺序结构 顺序结构就是一组逐条执行的可执行语句。按照书写顺序,自上而下的执行。 (2)选择结构(分支结构) 选择结构是一种先对给定条件进行判断,并根据判断的结果执行相应命令的结构。,(3) 循环结构 循环结构是指多次重复执行同一组命令的结构。 具有循环结构的程序一般必须指定循环的终止条件,以便对程序的循环进行有效的控制,以免进入无限循环(或称死循环)的状态。,C程序的执行部分由执行语句构成。 执行语句的种类 表达式语句 函数调用语句 控制流语句 复合语句(或称分程序) 空语句,4.2 语句与复合语句,最简单的可执行语句。只要在表达式后面加上分号就可以了。 例如: +i; x=y; 尽量避免写无意义的表达式。,表达式语句,函数调用语句,由函数名、实际参数以及分号构成。 例如: printf(“welcome“); printf是函数名,“welcome”是实际参数。函数名既可以是C语言提供的库函数名,也可以是我们自己定义的函数名。,复合语句和分程序结构,复合语句是用 和 把数据说明语句和若干个有序的执行语句组合在一起而构成。 其一般格式为: 数据说明; 语句; 复合语句在语法上相当于一个简单语句,在程序中可以作为一个独立语句来看待,因此又称为分程序。,控制流语句,控制流语句是用于控制程序流程的语句,控制流语句一般指那些改变了顺序结构的语句。 C语言的控制语句 分支语句(if 和 switch) 循环语句(while,do-while,for) 转向语句(break,goto,continue,return) 熟练掌握控制语句是学会程序设计的基础。,空语句,C语言中有一个很特殊的语句,即空语句。空语句,顾名思义,就是什么也不存在的语句,只有一个分号: ; 尽管空语句不会有任何命令执行,但仍然是一个有用的语句。常用于循环语句中,使循环体为空。 例如:for (sum=0,i=0;i=9;i+;sum=sum+i);,4.3 顺序结构程序设计,顺序程序设计的步骤可以归纳为: (1) 用预处理命令包含文件或进行宏定义(不是必须的,根据具体情况); (2) 定义变量(分配内存空间); (3)为变量赋初值(可以用赋值语句或输入函数); (4) 计算; (5) 输出结果(用输出函数)。,例4.1 编写程序,输入x和y,交换它们的值,并输出交换前后的数。 #include “ stdio.h“ void main() int x,y,temp; printf(“Please input to int number:“); scanf(“%d%d“, ,4.4 选择结构程序设计,4.4.1 问题的提出 4.4.2 if形式 4.4.3 if else 形式 4.4.4 else if 形式 4.4.5 嵌套的if语句,4.4.1 问题的提出,用数学公式可以这样描述: x x=0 y = -x x0 y是x的绝对值,如果x大于等于0,绝对值就是x自己;否则,绝对值就是取x的负值。这个数学问题用顺序结构是不能解决的。只有用选择结构才能解决问题。,4.4.2 if形式 单分支结构,if 形式是最简单的条件语句。 语法: if (表达式) 语句1; 下一条语句; 功能:检测表达式,如果表达式的值为非0 (真),则执行语句1,然后执行下一条语句; 如果表达式的值为0(假),直接执行下一条语 句。,条件表达式,注意: (1) 表达式必须用圆括号括起来,不能省略。 (2) 表达式可以使用关系表达式, 例如:if (x10)表示如果x大于10; (3)表达式可以使用逻辑运算符连接关系表达式, 例如:if (ab) &(b=c);还可以是一般的表达式, (4) 表达式甚至是一个常量或一个变量, 例如:if (x)和if (1) 只要x 或1的值为非0,表达式即为真。,例4.2使用if形式编写程序:输入x,求出并输出x的绝对值。 #include “ stdio.h“ /*-abs(x)-*/ void main() int x; scanf(“%d“, ,例4.3使用if形式编写程序:若ab将两个数的位置调换;否则,保持不变。 #include “ stdio.h“ /*-swap a and b-*/ void main() int a,b,temp; scanf(“%d%d“, ,例4.4请判断下面程序的执行结果,并解释该程序的功能。 #include “ stdio.h“ void main() int a=10,b=20,x; x=a; if (ab) x=b; printf(“%dn“,x); ,4.4.3 if else 形式双分支结构,if else 形式的语法是: if (表达式) 语句1; else 语句2; 下一条语句; 功能:检测表达式,如果值为非0(真),则执行语句1,然后执行下一条语句;如果值为0(假),执行语句2,再执行下一条语句。,例4.5解决求商的问题。 #include “ stdio.h“ /*-a divided by b-*/ void main() int a,b; scanf(“%d%d“, ,例4.6:将输入字符的大写字符转换成小写字符输出,小写字符原样输出。 #include “stdio.h“ /*-lowercase-*/ void main() int c; c=getchar(); if (c=A ,例4.7 请判断下面程序的执行结果。 #include “stdio.h“ void main() int a=30,b=20,x; if (ab) x=a; printf(“%dn“,a); else x=b; printf(“%dn“,b); ,4.4.4 if语句的嵌套,例如我们要解决这样一个问题:输入一个整 数,根据输入值,输出数的范围属于大于0、小 于0还是等于0。 x的范围实际上是三种情况,我们先用if else 解决这个问题:,if (x=0) printf (“ x=0“); else if (x0“); ,else if的语法: if (表达式1) 语句1; else if (表达式2) 语句2; else if (表达式3) 语句3; else if (表达式n) 语句n; else 语句n+1; 一条语句;,功能:按表达式的顺序进行判断,最早值为真的表达式将引起执行相应语句,并且不再继续判断其它条件,跳转到下一条语句执行。若全部 表达式为假,则执行语句n+1。 if (x0) printf (“ x=0“); else if (x0“);,例4.8 根据输入的百分制按五分制的成绩输出。百分制与五分制之间的关系见下表。 百分制 五分制 90 100 5 80 89 4 60 79 3 0 59 2,#include “stdio.h“ void main() int score; char grade; printf(“please input score:”);/*请输入分数*/ scanf(“%d“, ,修改例4.8,排除不可能的分数。 #include “stdio.h“ void main() int score; char grade; printf(“please input score:“); scanf(“%d“, ,if (表达式1) if (表达式2) 语句1; else 语句2;,if (表达式1) & (表达式2) 语句1; if (!表达式1) 语句2 ;,if (表达式1) if (表达式2) 语句1; else 语句2; ,if (表达式1) & (表达式2) 语句1; if (表达式1) & (!表达式2) 语句2 ;,if (表达式1) if (表达式2) 语句1; else 语句2 else到底与哪个if结合呢?因为这时有两种可能, 这就产生了所谓的二义性。C语言规定:else与离 它最近的if 结合。,例4.9 输入一个数,若该数为正整数并且是偶数,打印“是正的偶数”,否则打印“非正整数”。 #include “stdio.h” void main() int x; printf(“Please input one integer:“); scanf(“%d“, ,输入一个数,若该数为正整数并且是偶数,打印“是正的偶数”,否则打印“正整数并且是奇数”。 #include “stdio.h” void main() int x; printf(“Please input one integer:“); scanf(“%d“, ,4.5 switch语句,switch语句属于多路分支结构。 switch的常用形式: switch (条件表达式) case 常量表达式1:语句1;break; case 常量表达式2:语句2;break; case 常量表达式3:语句3;break; case 常量表达式n:语句n;break; default 语句n+1; break; ,功能:首先计算条件表达式的值,然后找到与其相等的常量表达式的case分支去执行语句,然后退出switch语句,若没有与条件表达式相等的常量表达式,则执行default语句后面的语句n+1。default 语句可省略。若语句i后不含break,继续执行下一条语句i+1,不用判断常量表达式。,注意: (1) case分支中的语句i后面的break语句一般情况下不要省略,因为没有break语句,程序不能跳出switch语句,而是执行下一条case语句后面的语句,直到遇到break才能终止switch的执行。 switch (s) case +:a=a+b; case - :a=a*b;break; case *:a=a-b;break; case /:a=a/b;break ,(2) 条件表达式和常量表达式的数据类型必须一致,常量表达式中不能包含变量。实际上,switch语句的重点就在于如何构造条件表达式,并让它的值正好能够匹配n个常量表达式的值。 (3) 多个case 可以共同使用相同的语句i。 switch (s) case 1: case 2: case 4: case 5: printf(“%d“,x);break; ,(4) 每个常量表达式应不相等,case部分与default的顺序可自由书写。若每个case后包含break,则顺序不影响最后的执行结果。反之,则有可能影响执行结果,switch (s) case 1: printf(“1“); case 2: printf(“2“); case 3: printf(“3“); 结果?,switch (s) case 1:printf(“1“);break; case 2:printf(“2“);break; case 3:printf(“3“);break; 结果?,例:s=2;,(5) 语句i可以用复合语句,而且允许省略花括号。 (6) switch语句可以嵌套,即在一个switch语句中嵌套另一个switch语句,但是要注意break只能跳出最内层的switch语句。 例4.11 用switch完成:根据输入的百分制按五分制的成绩输出。,#include “stdio.h“ void main() int score,s,sum; char grade; printf(“please input score:“); scanf(“%d“, ,例4.11 根据输入字符(0到F,用%c接收)显示与该字符所表示的十六进制数相对应的十进制数。(例如输入A,输出10;输入0,输出0。),#include “stdio.h“ void main() char i; printf(“nplease input 0F :“); scanf(“%c“, ,我国的个人所得税税率表:,4.7 程序举例,例:全月应纳税所得额=月收入800。例如某人月收入1320,减去800元,全月应纳税所得额为520元,由税率表知,其中500元税率为5%,另20元的税率为10%,所以此人应纳个人所得税27元。 void main() double salary,s,tax; printf(“please input your salary one month:“); scanf(“%lf“,else if (s=20000) tax=(s-5000)*0.20+3000*0.15+1500*0.1+500*0.05; elseif(s=40000) tax=(s20000)*0.25+15000*0.20+3000*0.15+1500*0.1 +500*0.05; elseif(s=60000) tax=(s40000)*0.3+20000*.25+15000*.20+3000*.15 +1500*.1+500*.05; else if (

温馨提示

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

评论

0/150

提交评论