《计算机c语言.》由会员分享,可在线阅读,更多相关《计算机c语言.(61页珍藏版)》请在金锄头文库上搜索。
1、第三章 C语言程序的基本控制结构,本章目录,4.1 程序的三种基本控制结构,4.2 顺序结构,4.3 选择结构,4.4 循环结构,4.1 程序的三种基本控制结构,程序的三种基本结构是:顺序结构、选择(分支)结构、循环结构。任何一个结构化程序都可以由三种基本控制结构来表示,下面是这三种结构的流程图,见图4.1到4.3。,入口,出口,入口,出口,真,假,图4.1 顺序结构,图4.2 选择(分支)结构,入口,出口,图4.3 循环结构,上述三种基本控制结构的共同特定是具有单入口和单出口。 还有一种goto语句,又叫转向语句,在本章的4.4.5小节中将会讲解到。我们在编写程序时,力求使用前三种基本结构语
2、句。,4.2 顺序结构,顺序结构是最简单的一种程序结构,它通常由说明语句、表达式语句、函数调用语句和输入输出语句组成,是一种按程序的书写顺序依次执行的结构。一般也出现在选择结构或循环结构的语句体内,总之整个程序都存在顺序结构。 1. 表达式语句空和语句 任何一个表达式,后面加一个分号就够成表达式语句,是C语言程序中最常用的语句。例如: x=a+b; (赋值表达式语句) +i; (算术表达式语句) printf(“%d”,a); (函数调用语句) 等等,都是表达式语句。 特别是在表达式语句中,如果没有表达式只有分号,即 ; 则是一个空语句。空语句在语法上是一个语句,但不执行任何操作。,4.2 顺
3、序结构,2 .复合语句 在顺序结构中,语句常常以复合语句的形式出现在程序中。复合语句是指由两条或两条以上的语句用花括号括起来的语句序列。如果该语句序列中含有说明语句,这样的复合语句又称为分程序。复合语句在语法上作为一条语句,可以出现在任何单一语句可以出现的地方。复合语句的形式如下: 说明语句部分 执行语句部分 其中,说明语句可以没有,如果有则放在执行语句的前面。例如,下面的复合语句实现交换两个变量的值: int temp; temp=a; a=b; b=temp; 该语句中定义的变量temp,只在本复合语句内有效。,4.2 顺序结构, 3 .顺序结构程序设计,顺序结构程序通常是由说明语句、表达
4、式语句、函数语句和输入输出语句组成的一种顺序执行的程序结构。以前所举的程序例子都是顺序结构的程序。,例4.1从键盘输入一个字符,求它的前一字符和后一字符,并输出它们的ASCII码。 分析 求输入字符的前导和后续字符,只需将输入字符的ASCII码值减1或加1,分别按照字符和整数格式输出即可。 程序如下: #include main() int c1,c2; scanf(%c, ,4.2 顺序结构,运行结果:,4.3选择结构,选择结构又称为分支结构,它根据对给定条件的判断,来选择某一个分支执行。C语言提供了解决这类问题的两个基本语句:if语句(条件语句)和switch语句(开关语句)。 因为在进入
5、程序分支结构前需要进行条件判断,所以我们需要先学习关系运算和逻辑运算的有关内容。,4.3选择结构, 1.关系运算和关系表达式 1关系运算符 C语言提供了一组关系运算符,如表4.1所示。它们用来比较两个运算对象之间的大小关系 。,关系运算符都是二元(双目)运算符,它们的优先级比算术运算符低,高于赋值运算符。在关系运算符中,、=同级,它们高于= =和!=。关系运算符的结合规则都有是自左至右。,4.3选择结构, 2关系表达式 用关系运算符将两个表达式连接起来就构成了关系表达式。如: ab , x= =y , a+b=c+b 都是合法的关系表达式。 关系表达式的值是一个逻辑值,即“真”或“假”。C语言
6、没有专门的逻辑型数据,而是用1(或非0)表示真,用0表示假。因此表达式3b的值则取决于a,b的值,但只可能是真或假(非0或0)两种情况之一。 下面我们来看一个例子:(设a=3,b=5): c=5-3a+1=4=4,关系不成立,其值为0,即 c=0b a的ASCII码值为97,b为98,关系不成立,值为0。 a50 关系不成立,值为0,4.3选择结构, 2.逻辑运算和逻辑表达式,1逻辑运算符 逻辑运算符是用来对运算对象进行逻辑运算的。C语言提供了三种逻辑运算符,如表4.2所示。,表4.2 逻辑运算符,4.3选择结构,! 逻辑非,单目运算符,自右至左结合。其运算规则是:当运算量为0,运算结果为1;
7、反之,当运算量为,运算结果为。 c=(a=xy) 运算结果:,程序中变量a的值经过运算后为0,对于 这种if语句的的执行过程见图4.4。,假(0),真(非0),图4.4,4.3选择结构,2 .if(表达式),语句1 else 语句2 例如: if(x=y) printf(“ok”); else printf(“no”); 见图4.5,图4.5,真,假,4.3选择结构,3 if(表达式1) 语句1 else if(表达式2) 语句2 else if(表达式3) 语句3 else if(表达式m) 语句m else 语句n 流程图见图4.6。,图4.6,4.3选择结构,例如: if (score=
8、85) p=A; else if (score=70) p=B; else if (score=60) p=C; else p=D;,说明: 1)三种形式的if 语句中在if 后面都有“表达式”,一般为逻辑表达式或关系表达式。也可以是其它类型的表达式,只要能够判断最后确定的值为真或假就行了。 2)else子句不能作为语句单独使用,它必须是if 语句的一部分,与if 配对使用。else语句只能和它最近的上面的if进行配对结合。 3)在if和else后面可以只含一个内嵌的操作语句,这时可以不用花括号“”括起来,也可以有多个操作语句,此时必须用花括号“”将几个语句括起来成为一个复合语句。,4.3选择
9、结构,例4.3 幼儿园里三个小朋友站队要求小个站在前面,高个站在后面。 分析:我们可以把个子最小的小朋友放在a位置上,较高的小朋友放在b位置上,个子最高的小朋友放在c位置上。输入三个数,a,b,c,要求按由小到大的顺序输出。先比较a和b,若a大于b,则a与b对换,再比较a和c,若a大于c,则a与c对换,这时a的值是最小的,最后比较b和c,若b大于c,则b与c对换。这样操作之后就使abc的关系成立。然后顺序输出a,b,c既可。,4.3选择结构,程序如下: main() float a,b,c,t; scanf(%f,%f,%f, 运行结果:,4.3选择结构,2 if语句的嵌套,在if语句中又可包
10、含一个或多个if 语句,这种形式称为if语句的嵌套。一般形式如下: if() if() 语句1 else 语句2 else if() 语句1 else 语句2,应当注意if 与else的配对关系。else总是与它上面的最近的if配对。如果if与else的数目不一样,为实现程序设计者的企图,可以加花括弧来确定配对关系。例如: if() if() 语句1 else 语句2 这时花括号“ ”限定了内嵌if 语句的范围,因此else与第一个if配对。,4.3选择结构,例4.4 有一函数 -1 (x60) 编写程序,输入一个x值,输出y值。 程序如下:,#include main() int x,y;
11、printf(Please input a mumber:n); scanf(%d, ,4.3选择结构,运行结果:,本题还有其它方法,请读者试着编一下。,4.3选择结构, 4. switch语句,上节介绍的if语句,一般适用于有两个的选择的情况,尽管也可以通过if嵌套形式实现多多个的选择。但这种方式由于嵌套层次过多,影响了程序的可读性。C语言提供了一种更方便于多分支选择的switch语句,称开关语句。它的一般形式如下:,switch(表达式) case 常量表达式1:语句1 break; case 常量表达式2:语句2 break; case 常量表达式n:语句n break; default
12、:语句n+1 ,其中,switch、case、default和break均为C语言的保留字, 内的break可以不写。switch 后面的表达式通常为整型、字符型或枚举型。常量表达式又称开关常数或分支标号,必须是与表达式类型对应一致的整数、字符或枚举常数。语句1n+1,可以是单个语句,也可以是多个语句,如果是多个语句也不必用括起来。default 和语句组n+部分可以省略。,4.3选择结构,switch语句的执行过程是: 1首先计算switch后面圆括号内表达式的值,然后依次与各个case后面的常量表达式的值相比较,若一致就执行该case后面的语句,直到遇到break语句,此时switch语句
13、执行结束,就转出switch语句,执行后面的语句; 2当表达式的值与case后面的常量表达式的值都不一致,则执行default后面的语句,switch语句执行结束,转出switch语句,执行后面的语句;如果没有default部分,则不执行switch语句中的任何语句,而直接转出switch语句,执行后面的语句。 每个case代表一个分支,所包含的语句代表该分支所要执行的功能。但是,如果语句组中没有break语句,程序就一直执行,从而进入下一个分支,这在C语言中是允许的,但一个好的习惯是在每个语句组中以break结束,从而保持各分支的独立性。,4.3选择结构,例如:以下程序段。 char gar
14、d=B; switch(grade) case A:printf(90100);break; case B:printf(8089);break; case C:printf(7079);break; case D:printf(6069);break; default:printf(不及格);break; ,在使用switch语句时,应注意以下几点: 1)switch后面括号内的“表达式”,ANSI标准允许它为任何类型。 2)每一个以case的常量表达式的值必须互不相同,否则就会出现互相矛盾的现象。 3)各个case和default的出现次序不影响执行结果。,4.3选择结构,4)多个case
15、可以共用一组执行语句,相当于部分case没有break语句。如: switch(num) case 5: case 4: case 3: printf(“%d=3n”,num);break; case 2: case 1: printf(“%d=1n”,num);break; default: printf(“error”); ,程序中当num等于5,4,3的时候,3条case语句共用了一组执行语句,当num等于2,1的时候,2条case语句共用了一组执行语句。,4.3选择结构, 4. switch语句,例4.5 利用switch语句对五分制和百分制的关系编写编程 main() char grade; scanf(%c, 运行结果:,4.3选择结构,当然if语句和switch语句都能实现多分支选择结构的编程,可以根据编程者的想法进行编写C程序语句。,例4.6长途电话计费方式为,3分钟收费0.6元(不足3分钟,按3分钟计费),以后超过1分钟增收0.3元(不