第3章C程序的基本控制结构_第1页
第3章C程序的基本控制结构_第2页
第3章C程序的基本控制结构_第3页
第3章C程序的基本控制结构_第4页
第3章C程序的基本控制结构_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

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

文档简介

1、13.1 3.1 顺序结构顺序结构3.2 3.2 选择结构选择结构3.3 3.3 循环结构循环结构23.1.1 程序控制基本结构程序控制基本结构PAB真真假假 选选 择择 结结 构构 AB 顺顺 序序 结结 构构 PA假假真真 循循 环环 结结 构构 程序设计语言的三种基本控制结构: 顺序、选择、循环顺序、选择、循环。 3基本控制结构的特点:(1)整个结构只有一个入口和一个出口;(2)一个完整的结构可以嵌套在另外一个结构中,充当该结构的一个组成部分;(3)结构中的所有组成部分都应该能够被执行。4BA图图3.1 3.1 顺序结构执行流程顺序结构执行流程 顺序结构是最基本的控制结构,是由一组顺序执

2、行的程序块所组成。程序流程图如下所示。3.1.2 顺序结构顺序结构5 顺序结构是最基本的控制结构,是由一组顺序执行的程序块所组成。而最简单的程序块又是有若干语句所构成。 3.1.3 C程序的语句程序的语句 C C语言的语句可分为以下四类:语言的语句可分为以下四类:(1)(1)简单语句简单语句(2)(2)空语句空语句(3)(3)复合语句复合语句(4)(4)流程控制语句流程控制语句61.1.表达式语句表达式语句: : 由一个表达式加上一个分号构成。由一个表达式加上一个分号构成。如:如:A+; A+; x=1; x=1; p+=q p+=q* *4+5; 4+5; y=42?6:1; y=42?6:

3、1; 2.2.函数调用语句函数调用语句: : 由函数调用表达式加分号构成。由函数调用表达式加分号构成。 如:如:printf(“%d”,a); printf(“%d”,a); scanf(“%f”,&b);scanf(“%f”,&b);73.3.空语句空语句 由一个分号表示,一般形式为:由一个分号表示,一般形式为: ; 空语句在语法上是一条语句,但执行时不做空语句在语法上是一条语句,但执行时不做任何操作。任何操作。 例如:例如: while(getchar()!=n) ; 8 语句1; 语句n; 4.4.复合语句复合语句 用一对花括号,把若干条语句括起来,就用一对花括号,把若干

4、条语句括起来,就形成了一条复合语句。形式如下:形成了一条复合语句。形式如下:复合语句多用于流程控制语句中。复合语句多用于流程控制语句中。可以是可以是 简单语句、空语简单语句、空语句、复合语句、流程控句、复合语句、流程控制语句制语句9例如,分析以下程序的执行结果。例如,分析以下程序的执行结果。void main() int a,b,temp; scanf(%d%d,&a,&b); temp=a; a=b; b=temp; printf(%d,%d,a,b); 输入:输入:14 8 输出:输出:8,1410一格式输出函数一格式输出函数 printf( ) 简介简介 printf(

5、)用来按指定的格式输出数据,是内存与显示器用来按指定的格式输出数据,是内存与显示器之间进行数据交换的主要手段。之间进行数据交换的主要手段。其一般调用格式为:其一般调用格式为: printf(“printf(“格式控制字符串格式控制字符串”,输出项目清单,输出项目清单););例如,例如,int i=97;printf(“i=%d,%cn”, i, i );常量、变量常量、变量或表达式或表达式11格式控制字符串格式控制字符串 包括三类符号包括三类符号:1.1.普通字符:输出时按原样输出,用于提示信息的输出。普通字符:输出时按原样输出,用于提示信息的输出。2.2.转义字符:指明特定的操作。转义字符:

6、指明特定的操作。(详见课本(详见课本P15 P15 转义字符表)转义字符表) 常用的有常用的有: : n、t、a、” 等等。等等。 3.3.格式转换说明符:按规定的格式输出数据。格式转换说明符:按规定的格式输出数据。(详见课本(详见课本P34P34) 常用的有常用的有: : %d、%o、%x、%f、%c、%s、%等等。等等。12格式转换说明符格式转换说明符功功 能能%d (或或i) 以带符号的十进制形式输出整数以带符号的十进制形式输出整数%u 以无符号的十进制形式输出整数以无符号的十进制形式输出整数%o 以八进制无符号形式输出整数以八进制无符号形式输出整数%x (或或X) 以十六进制无符号形式

7、输出整数以十六进制无符号形式输出整数%f 以小数形式输出浮点数,隐含输出以小数形式输出浮点数,隐含输出6位小数位小数%e(或或E) 以指数形式以指数形式 -m.ddddde+nn 输出浮点数输出浮点数%c 输出一个字符输出一个字符%s 输出字符串输出字符串% 输出百分号(输出百分号(%) 13例如,分析以下程序段的输出结果。例如,分析以下程序段的输出结果。int a=12,b=25;floatx=12.5;printf(“a=%d,b=%dnx=%fn”,a,b,x);printf(“Hello!”);输出结果:输出结果: a=12, b=25 x=12.500000 Hello!14格式转换

8、说明符的修饰:格式转换说明符的修饰:(1 1)% m .n type% m .n type其中:其中:m m 规定输出字段的最小宽度;规定输出字段的最小宽度;n n 规定输出最小有效位数。规定输出最小有效位数。例例1 1:printf(“%3d,%6d,%6.5dn”,1234,1234,1234);printf(“%3d,%6d,%6.5dn”,1234,1234,1234); 输出结果为:输出结果为:1234, 1234, 01234例例2:printf(“%10f,%10.2f,%.2fn”,123.456,123.456,123.4); 输出结果为:输出结果为:123.456000,

9、123.46,123.4015注意注意: :如果在如果在“%”%”和和 m.n m.n 之间加一个之间加一个 0 0,则在规定字段宽,则在规定字段宽度度 内左边多余的空位以内左边多余的空位以 0 0 来填充,而不是空格。来填充,而不是空格。例例3:3: printf(“%04d,%010.2f,%010.3en”,125,12.3,123.5); 输出结果为:输出结果为:0125, 0000012.30, 001.24e+02(2) % l|htype(2) % l|htype l- l-代表输出长整型或双精度型数据的值。代表输出长整型或双精度型数据的值。 h-h-代表输出短整型数据的值。代表

10、输出短整型数据的值。例如,例如,printf(“%d,8ldn”,7000,70000l);printf(“%15.8lfn”,12.34567889);16思考:思考:printf(“%d,%u,%o,%xn”,-1,-1,-1,-1); 的输出结果?的输出结果?输出结果为:输出结果为:-1,65535,177777,ffff-1,65535,177777,ffff-1-1在计算机内存中的存储形式:在计算机内存中的存储形式:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1按二进制补码形式按二进制补码形式17二、字符输出函数二、字符输出函数使用格式:使用格式:putchar( c

11、 )函数功能:向标准输出设备输出一个字符,并返回输出字符函数功能:向标准输出设备输出一个字符,并返回输出字符 的的ASCIIASCII值。值。例如:例如: # include main( ) int i=97; int ch=a; putchar(i); putchar(n); putchar(ch);程序输出结果:程序输出结果:a aa a参数可以是参数可以是字符型常量字符型常量、变量变量或或0 0 255255的整型常量的整型常量、变量变量181 1. 格式输入函数格式输入函数 scanf( ) scanf( ) 简介简介 用来按用户指定格式接收输入数据,是内存与显示器进行数据交换的主要手

12、段。其一般调用形式为: scanf(“scanf(“格式控制字符串格式控制字符串”,”,输入变量地址清单);输入变量地址清单);例如,例如,scanf(“%d%d%f”, &a, &b, &x); 关于关于scanf( )scanf( )函数的几点说明:函数的几点说明: (1) (1) 格式控制字符串通常只包含格式转换说明符,格式控制字符串通常只包含格式转换说明符, 其形式和含义与其形式和含义与printf( ) printf( ) 类似。类似。 (2) (2) 输入数据时,可以用输入数据时,可以用“空格空格”、“tab tab 键键”、“回车键回车键”作为数据项之间的

13、分隔符。作为数据项之间的分隔符。19(3) (3) 格式控制字符串中,如果有其他字符,则在输入时格式控制字符串中,如果有其他字符,则在输入时 必须原样照着输入。必须原样照着输入。 例如,例如,scanf(“%d,%d”,&a,&b);scanf(“%d,%d”,&a,&b); (4) (4) 格式转换说明符与输入项在个数、类型上必须对应格式转换说明符与输入项在个数、类型上必须对应 一致,否则将不能正确输入。一致,否则将不能正确输入。 例如,例如,scanf(“%d%d”,&a,&b);scanf(“%d%d”,&a,&b); 若从

14、键盘输入:若从键盘输入:12.678 2612.678 26 则则 b b 不能得到正确结果。不能得到正确结果。 输入形式必须是:输入形式必须是:123123,23423420 2. 2.字符输入函数:字符输入函数:使用格式:使用格式:getchar( void )函数功能:从输入设备上接收一个字符,并返回该字符函数功能:从输入设备上接收一个字符,并返回该字符 的的ASCIIASCII值。值。例如:例如: # include main( ) int ch; ch=getchar( ); putchar(ch);运行该程序时输入:运行该程序时输入: a a 回车回车则执行程序后输出:则执行程序后

15、输出: a a 213.1.6 3.1.6 顺序结构程序举例顺序结构程序举例 例例3.1 输入圆的半径,输出圆的周长和面积。输入圆的半径,输出圆的周长和面积。分析:分析: 1. .定义实型变量r、l、s用于存放半径、周长、面积;2.调用输入函数,输入r:3.分别利用周长公式和面积公式求出l、s;4.调用输出函数输出l、s。22程序如下:程序如下:#include main() float r,l,s; scanf(“ %f ”,&r); l = 2 * 3.14159 * r; s = 3.14159 *r * r; printf(“n l=%.4f”,l); printf(“n s=

16、%.4f”,s); 文件包含预处理命令文件包含预处理命令变量定义变量定义输入数据输入数据输出数据输出数据23编程练习:编程练习: 已知三角形的三边长,求三角形的面积。已知三角形的三边长,求三角形的面积。分析:分析:定义三个变量定义三个变量a,b,c表示三角形三边长;表示三角形三边长;应用海伦公式求面积:应用海伦公式求面积: L=(a+b+c)/2; S=sqrt(L*(L-a)*(L-b)*(L-c)(1) (3) 输出计算结果。输出计算结果。24分析:分析:1.定义三个字符变量ch1,ch2,ch3;2.调用字符输入函数,接收键盘输入的三个字符;3.按相反的顺序输出三个字符。例例3.2 3.

17、2 输入三个字符,将它们反序输出。输入三个字符,将它们反序输出。例如,输入例如,输入 a b c, a b c, 输出输出c b ac b a25程序如下:程序如下:#include main() char ch1, ch2,ch3; ch1=getchar(); ch2=getchar(); ch3=getchar(); putchar(ch3); putchar(ch2); putchar(ch1); 26分析:分析: 1.输入小写字母并存入变量a; 2.转换成大写 a=a-32; 3.输出结果 a。例例3.3 3.3 从键盘输入一个小写字母,用大写形式从键盘输入一个小写字母,用大写形式

18、输出该字母。输出该字母。27#include “stdio.h”void main() char a; 程序如下:程序如下: printf(“Input a lowercase letter:”); a = getchar(); a = a-32; printf(“%c n”,a);28作业:作业: 完成完成实训指导书实训指导书P26 实验部分的实验部分的 【练习【练习1】【练习【练习3】。293.2 3.2 选择结构程序设计选择结构程序设计3.2.1 3.2.1 关系运算符与关系表达式关系运算符与关系表达式3.2.2 3.2.2 逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式3.2.3 if3

19、.2.3 if语句语句3.2.4 3.2.4 条件表达式条件表达式3.2.5 switch3.2.5 switch语句语句3.2.6 3.2.6 程序举例程序举例30教学目的和基本要求:教学目的和基本要求:要求学生掌握选择结构程序设计,嵌套程序设计,学会运用if语句及switch语句。 教学重点:教学重点:if语句、嵌套程序。 31很多问题是顺序结构解决不了的。例如:计算分段函数:x在大于等于0和小于0两种不同的情况时,函数将用不同的表达式来求y的值,这时就需要在计算y的值之前,先对x的值进行判断,C语言中用选择语句来实现这一判断。算法N-S图如右上图所示。x0 x0Y YN Ny=3-xy=

20、3-xy=2xy=2xN-S图32 1 1、6 6种关系运算符:种关系运算符: = = != = = != 2 2、关系表达式:用关系运算符将表达式连接起来的式子、关系表达式:用关系运算符将表达式连接起来的式子 优先级:优先级: 结合性:结合性:自左至右自左至右; 表达式的值:表达式的值: 若为真,则结果为若为真,则结果为1 1; 若为假,则结果为若为假,则结果为0 0。35 35 的值:的值:3+433+43* *4 4 的值:的值:3+(43)3+(43)* *4 4 的值:的值: 3.2.1 3.2.1 关系运算符和关系表达式关系运算符和关系表达式( (参见课本参见课本P44 4.1P4

21、4 4.1节节) )例如,求如下关系表达式的值:例如,求如下关系表达式的值:01333注意:注意: 不能用数学里习惯的关系运算符连用表示区间不能用数学里习惯的关系运算符连用表示区间关系!关系!例如例如:(1)(1)设设x=1; x=1; 表达式表达式 2x4 2x4 的值为:的值为: (2)(2)设设x=3x=3; 表达式表达式 2x4 2x & & | 结合性:结合性:自左至右自左至右; 表达式的值:表达式的值: 若为真,则结果为若为真,则结果为1 1; 若为假,则结果为若为假,则结果为0 0。 3.2.2 3.2.2 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式 ( (参见

22、课本参见课本P45 4.2P45 4.2节节) ) 1 1、3 3种逻辑运算符:种逻辑运算符: & & (与)(与) | | (或)(或) ! !(非)(非) 逻辑量可以是整型、实型、字符型和指针类型,逻辑量可以是整型、实型、字符型和指针类型,其中,其中,0 0,0.00.0,0,NULL0,NULL代表代表假假,其余逻辑量代表,其余逻辑量代表真真。35例:例: 已知,已知,int a=5; float b=3.5;判断以下表达式的值:判断以下表达式的值:(1) !a (2) a & b(3) a b (4) (a 0) 0110 要表示数学关系式:要表示数学关系式:2

23、x4 2x4 , 则正确的则正确的C C语言表达式语言表达式应写为:应写为: 2x & x 3 & 2 | 8 3 & 2 | 8 35 3) & 2) | & 2) | (8 8 (4 - !54 - !5) 上述表达式等价于:上述表达式等价于:37例如:例如: (1)a = 0; b = 1; (1)a = 0; b = 1; c = a+ & ( b = 3 ); c = a+ & ( b = 3 ); 执行后执行后: a: a为为 ,b,b为为 ,c,c为为 。 逻辑与优化:逻辑与优化: 在逻辑表达式的求解中,并不是所有的逻辑运算

24、符在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是都被执行,只是在必须执行下一个逻辑运算符才能求出在必须执行下一个逻辑运算符才能求出表达式的解时,表达式的解时,才执行该运算符。才执行该运算符。110(2)a = 1; b = 1; c=0;(2)a = 1; b = 1; c=0; d = -a d = -a b- b- (c = b+3 ); (c = b+3 ); 执行后执行后: a: a为为 ,b,b为为 ,c,c为为 ,d,d为为 。000138例如:例如: (1) n(1) n是小于是小于m m的偶数:的偶数: (2)year(2)year是闰年是闰年: : (能被(能被4

25、 4整除但不能被整除但不能被100100整除整除, ,或能被或能被400400整除)整除)逻辑表达式一般用于控制语句中的条件:逻辑表达式一般用于控制语句中的条件:n m & n % 2 = 0 year % 4 = 0 & year % 100 != 0 | year % 400 = 039C C语言中的选择语句的实现有:语言中的选择语句的实现有:(1) if(1) if语句语句(2) switch(2) switch语句语句(3) (3) 条件表达式条件表达式403.2.3 if3.2.3 if语句语句真真假假语句语句表达式表达式1.if1.if语句的单分支形式:语句的单分支

26、形式:说明:说明:1. 1. 条件表达式的值为条件表达式的值为1 1或或0 0,且必须用,且必须用( )( )括住;括住; 2. 2. 若有多条语句(复合语句)时,须用若有多条语句(复合语句)时,须用 括住。括住。 3. (3. (条件表达式条件表达式) )后不要加分号;后不要加分号;if (条件表达式条件表达式) 语句;语句;if (条件表达式条件表达式) 语句;语句; 语句;语句; 41void main() int num; printf(“Please input a number:n”); scanf(“%d ”, &num); if (num y ) t = x; x =

27、y; y = t; printf(“x= %d,y=%d”, x,y ); 例例2 2:任意输入两个整数按由小到大的顺序输出。:任意输入两个整数按由小到大的顺序输出。分析:分析: (1) 输入两个数据输入两个数据x,y ; (2) 如果如果xy 则交换则交换x和和y的值的值 ; (3) 按按x在前在前y在后的顺序,输出在后的顺序,输出x 和和y 的值。的值。 432. if语句的双分支形式:语句的双分支形式:if (表达式表达式) 语句语句1else 语句语句2首先先判断表达式的值首先先判断表达式的值若为非若为非0则执行语句则执行语句1若为若为0则执行语句则执行语句2表达式表达式语句语句1真真

28、假假语句2语句语句2执行过程:执行过程:if语句的双分支形式,在语法上语句的双分支形式,在语法上视为一条语句。视为一条语句。44main() float x , y; scanf(“%f ”, &x); if ( x 0 ) y = 3 - x ; else y = 2 * x ; printf(“y= %.2fn”, y ); 例例3 3:计算分段函数:计算分段函数45%提示:参见课本提示:参见课本P57P57【练一练】,体会判断输入字符类别。【练一练】,体会判断输入字符类别。463.3.多分支选择语句一般形式:多分支选择语句一般形式: ifif( (表达式表达式1)1)语句语句1

29、1;else ifelse if( (表达式表达式2)2)语句语句2 2; else ifelse if( (表达式表达式n)n)语句语句n n; elseelse语句语句n+1n+1 47语句的执行流程:语句的执行流程: 测试表达式测试表达式1 1测试表达式测试表达式3 3测试表达式测试表达式2 2测试表达式测试表达式n n语句语句1 1语句语句2 2语句语句3 3语句语句n n语句语句n+1n+1=0=0=0=0=0=0=0=000000000先判断表达式先判断表达式1的值的值非非0就执行下面的语句就执行下面的语句为为0就执行下一个判断就执行下一个判断一直这样做下去一直这样做下去直到得出最

30、后结果直到得出最后结果48例例4 4 输入某学生的成绩,经处理后给出成绩的等级,等输入某学生的成绩,经处理后给出成绩的等级,等级分类如下:级分类如下: 90分以上(包括分以上(包括90):):A 80至至90分(包括分(包括80):):B 70至至80分(包括分(包括70):):C 60至至70分(包括分(包括60):):D 60分以下:分以下: E分析:根据输入的学生成绩,要输出对应的等级,可以分析:根据输入的学生成绩,要输出对应的等级,可以使用多分支选择结构语句使用多分支选择结构语句if else if else实现。实现。 【源程序源程序】如下页。49#includevoid main(

31、) int score; char grade; printf(nplease input a student score:); scanf(%d,&score); if (score=90) grade=A; else if (score=80) grade=B; else if (score=70) grade=C; else if (score=60) grade=D; else grade=E; printf(nthe students grade:%cn,grade);504. if 4. if 语句的嵌套语句的嵌套一般形式一般形式: :ifif( (表达式表达式1)1)if

32、if( (表达式表达式2)2)语句语句1 1;elseelse语句语句2 2;elseelseifif( (表达式表达式3)3)语句语句3 3;elseelse语句语句4 4;用用if语句作为上一层语句作为上一层if语句的语句语句的语句1和语句和语句2的结构,称为的结构,称为if语句的嵌套语句的嵌套。51语句的执行流程:语句的执行流程:表达式表达式2表达式表达式1表达式表达式3语句语句1语句语句2语句语句3语句语句4非非000非非00非非052例例5 5 输入三个整型数,找出其中最大的和最小的数。输入三个整型数,找出其中最大的和最小的数。main( ) int a,b,c,max,min;sc

33、anf(%d,%d,%d,&a,&b,&c);max=min=a;if ( bmax ) max=b;else if ( bmax ) max=c;elseif ( cmin ) min=c;printf(max=%d,min=%dn,max,min); 53elseelse 总是与它前面离它最近总是与它前面离它最近的未配对的的未配对的ifif 匹配。匹配。例例 如如: : if(e1)if(e1) if(e2) if(e2)语句语句1;1; elseelse语句语句2;2;语句语句1 1非非0 0e1e1非非0 00 0e2e2语句语句2 20 0在使用在使用ifif

34、语句的嵌套应注意:语句的嵌套应注意:if()if()if()else.else.else.54编程题编程题: :(猜数游戏)猜数游戏) 按将要猜的数放在变量按将要猜的数放在变量 magic magic 中,程序运行时,提示游中,程序运行时,提示游戏者通过键盘输入自己猜的数戏者通过键盘输入自己猜的数guessguess。1.1.猜对了,屏幕显示猜对了,屏幕显示“ “ RightRight!”,否则不予显示。,否则不予显示。2.2.猜对了,屏幕显示猜对了,屏幕显示“ “ RightRight!”,否则显示,否则显示“ “ Wrong! ” Wrong! ” 。3.3.猜对了,屏幕显示猜对了,屏幕显

35、示“ “ RightRight!”,否则除了显示,否则除了显示 “ “WrongWrong!”外,还显示猜大了或猜小了的信息,以帮助游戏者继续往正外,还显示猜大了或猜小了的信息,以帮助游戏者继续往正确处猜。确处猜。练习题练习题55 求值规则:求值规则: (1)(1)先求解表达式先求解表达式1 1的值;的值; (2)(2)若为真若为真( (非非0),0),求解表达式求解表达式2 2,并把表达式,并把表达式2 2的值的值 作为整个条件表达式的值;作为整个条件表达式的值; (3)(3)若为假若为假(0),(0),求解表达式求解表达式3 3,并把表达式,并把表达式3 3的值作的值作 为整个条件表达式的

36、值。为整个条件表达式的值。 3.2.4 3.2.4 条件运算符条件运算符( (三元运算符三元运算符) ) ? :? : 形式为形式为: : ? ? :3如何用条件表达式表示如何用条件表达式表示: : if(ab) max=a;if(ab) max=a; else max=b; else max=b;max=( ab? a: b)max=( ab? a: b)56又如:又如: y = x10 ? x/10 : x0 ? x: -xy = x10 ? x/10 : x0 ? x: -x 当当x x的值为整型的的值为整型的1515时,表达式的结果为:时,表达式的结果为: 当当x x的值为整型的的值为

37、整型的5 5时,表达式的结果为:时,表达式的结果为:1 15 5例如例如: int max,: int max,a=5a=5,b=3;b=3; max=ab?a:b max=ab?a:b 求求maxmax的值的值maxmax的值为的值为5 5 优先级:条件运算优先级:条件运算 赋值运算赋值运算 结合性:自右至左;结合性:自右至左;573.2.5 Switch语句语句 在某些情况下,需要根据表达式的在某些情况下,需要根据表达式的不同值不同值来判断执行哪一分支。可利用来判断执行哪一分支。可利用switchswitch语句,可语句,可以更方便的完成。以更方便的完成。 58 switch switch

38、 语句的一般格式为:语句的一般格式为: switchswitch(表达式)(表达式) case case 常量表达式常量表达式1 1:语句:语句1 1; case case 常量表达式常量表达式2 2:语句:语句2 2; case case 常量表达式常量表达式3 3:语句:语句3 3; case case 常量表达式常量表达式n n:语句:语句n n; default: default: 语句语句n+1n+1; 1. switch 1. switch 语句语句 不含变量的不含变量的常量表达式,且常量表达式,且值值必须互不相同必须互不相同casecase和常量和常量表达式之间用表达式之间用空格

39、空格隔开隔开语句标号语句标号当省略当省略default时,如果匹配时,如果匹配不成功,就直接退出不成功,就直接退出switch。59switch switch 语句的执行过程:语句的执行过程:(1)先计算表达式的值,(2)然后将此值依次与各个case中的常量表达式进行匹配。(3)如果遇到与该值相等的常量表达式,就执行该case标号后的语句,直到整个switch语句结束;(4)如果没有与该值相等的常量表达式,并且存在default,就执行default中的语句;如果不包含default,又没有成功匹配,就什么也不执行,直接跳出switch。60程序如下:程序如下:例例1 1从键盘输入不同字母,显

40、示不同国家的名字。从键盘输入不同字母,显示不同国家的名字。#include stdio.hmain() char ch; ch=getchar(); switch(ch) case a: printf(American); case b: printf(Britainn); case c: printf(Chinan); default: printf(Japann); 61 为了实现多分支,在执行了满足条件的语句后,使流程跳出为了实现多分支,在执行了满足条件的语句后,使流程跳出switchswitch分支结构,而不继续执行其后续的分支结构,而不继续执行其后续的casecase语句,语句,只要

41、在每个只要在每个 case case 语句后语句后面增加面增加 break break 语句语句即可。即可。#include stdio.hmain() char ch; ch=getchar(); switch(ch) case a:printf(American); break; case b:printf(Britainn); break; case c:printf(Chinan); break; default: printf(Japann); 上例可改写如下:上例可改写如下:62如:如: case a: case A: printf(“American”); break; case

42、 b: case B: printf(“Britainn”); break;.注意:注意:(1 1)在增加了)在增加了breakbreak语句后,语句后,casecase语句出现的次序并不影响语句出现的次序并不影响 执行结果。执行结果。(2 2)多个)多个casecase可共用一组执行语句。可共用一组执行语句。63 例例2 2:根据前例,用:根据前例,用switch switch 语句编程实现根据输入的学生语句编程实现根据输入的学生的成绩判断等级。的成绩判断等级。分析:分析: 设设score为整型数,利用两个整数相除,结果为整型数,利用两个整数相除,结果自动取整的特性,自动取整的特性,scor

43、e和和 score /10 有如下对应有如下对应关系:关系: score score/10 90以上以上 10, 9 7089 7 , 8 6069 6 60以下以下 5,4,3,2,1,0 因此因此,可以用可以用score /10的值来确定分支。的值来确定分支。64#include main( ) int score; scanf(%d ,&score); switch (score /10) case 10: case 9: printf(%d: An, score);break; case 8: case 7: printf(%d: Bn, score);break; case

44、6: printf(%d: Cn, score);break; default: printf(%d: Dn, score); 程序如下:程序如下:65练习:读程序写结果。练习:读程序写结果。#includemain( ) char i; scanf(“%c”,&i); switch(i) case a: i+; printf(“%c”,i);break; case b: i+; printf(“%c”,i); default: i=i+2;printf(“%c”,i); 1. 1. 输入:输入:a a输出:输出:b b2. 2. 输入:输入:b b输出:输出:cece3. 3. 输入

45、:输入:c c输出:输出:e e66练习题:用练习题:用swichswich语句编程模拟计算器程序。用户输入运算语句编程模拟计算器程序。用户输入运算数和四则运算符,输出计算结果。数和四则运算符,输出计算结果。 例如,输入:例如,输入:+ 4 5 + 4 5 输出:输出:4 + 5 = 94 + 5 = 9分析:分析: 根据输入的运算符不同来进行不同的运算,是一个典根据输入的运算符不同来进行不同的运算,是一个典型的多分支选择结构。型的多分支选择结构。 可用可用switchswitch语句用于判断运算符,并执行相应的语句,语句用于判断运算符,并执行相应的语句,最后输出运算结果。当输入运算符不是最后

46、输出运算结果。当输入运算符不是 + +、- -、* *、/ /时,给时,给出错误提示。出错误提示。 67参考程序如下:参考程序如下:#includemain()int f1,f2,result;char ch;scanf(%c%d%d,&ch,&f1,&f2);printf(The equation is:%d%c%dn,f1,ch,f2);switch(ch)case +:result=f1+f2;break;case -:result=f1-f2;break;case *:result=f1*f2;break;case /:result=f1/f2;break;de

47、fault:result=-9999;if(result!=-9999)printf(%d%c%d=%dn,f1,ch,f2,result);elseprintf(Input error!n);68例例4.8 4.8 求方程求方程axax2 2+bx+c = 0 +bx+c = 0 的实数解。的实数解。 分析:根据分析:根据3 3个系数的不同情况,方程的根有如下几种情况。个系数的不同情况,方程的根有如下几种情况。(1 1) a = 0a = 0, 不是二次方程;不是二次方程;(2 2) b b2 2-4ac = 0-4ac = 0, 有两个相等的实根;有两个相等的实根;(3 3) b b2 2

48、-4ac 0-4ac 0, 有两个不等的实根,求有两个不等的实根,求x1x1和和x2x2;(4 4) b b2 2-4ac 0-4ac 0, 没有实数解。没有实数解。69程序如下:程序如下:#include main() float a,b,c,x1,x2,disc; printf(input a,b,c:); scanf(%f%f%f,&a,&b,&c); disc=b*b-4*a*c; if(fabs(a)1e-6) printf(The equation is not a quadratic.n); else if(disc0) printf(The equati

49、on has not real root.n); else if(fabs(disc)1e-6) printf(The equation has two equal roots:%8.4fn,-b/(2*a); else x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf(The equation has distinct real roots:%8.4f,%8.4f,x1,x2); 本节结束本节结束!70上节内容回顾:上节内容回顾:结构化程序设计的三种基本结构:结构化程序设计的三种基本结构:PAB真真假假 选选 择择 结结 构构

50、AB 顺顺 序序 结结 构构 PA假假真真 循循 环环 结结 构构 71l whilewhile语句语句l do-whiledo-while语句语句l forfor语句语句条件循环条件循环计数循环计数循环72v一般格式一般格式:while (表达式表达式) 循环体语句;循环体语句;v执行流程执行流程:表达式表达式 循环体循环体假假真真while73例例 分析以下程序的执行结果。分析以下程序的执行结果。/*5-1.c*/#include main() int i=1; while(i=5) printf(%d ,i); i+; i=5printf(“%d”,i);真真i=1 开开 始始 程序输出

51、结果:程序输出结果: 1 2345i+;i=2i=3i=4i=5i=61=52=53=54=55=56=5假假 结结 束束 74例例 分析以下程序的执行结果。分析以下程序的执行结果。 循环结构程序的组成:循环结构程序的组成:/*5-1.c*/#include main() int i=1; while(i=5) printf(%d ,i); i+; 循环控制循环控制条件条件循环变量循环变量增值增值循环变量循环变量赋初值赋初值思考思考1 1:循环构成的各个部分的位置是否是固定的?:循环构成的各个部分的位置是否是固定的?75/*5-1.c*/#include main() int i=1; whi

52、le(i=5) printf(%d ,i); i+; 思考思考2 2:打印打印1-1001-100之间的所有整数?之间的所有整数? 奇数?奇数? 偶数?偶数?i=100i=2i+=2例例 分析以下程序的执行结果。分析以下程序的执行结果。 循环结构程序的组成:循环结构程序的组成:76问题分析:问题分析:1+2+3+4+1001+2+3+4+100121003sum = 0 + 1sum = 1 + 2sum = 3 + 3sum = + 100sum = +n n可写出循环体语句为:可写出循环体语句为:sum=sum+i;printf(“%d”, 1+2+3+100);i:i:循环控制变量循环控

53、制变量 sum:sum:累加和变量累加和变量 问题变为问题变为有规律重复执行有规律重复执行累加求和累加求和的过程的过程前一步前一步累加累加求和的结果求和的结果 该步该步累加累加求和的结果求和的结果例例 用用whilewhile循环求循环求 1001nn77通过以上分析,程序即可编写出来。通过以上分析,程序即可编写出来。思考思考3 3:如何编程实现:如何编程实现 求求 n n 的阶乘的阶乘 ?/*5-2.c*/#include main() int i=1,sum=0; while(i=100) sum=sum+i; i+; printf(“sum=%d n”, sum);78例:分析如下循环语

54、句的执行结果例:分析如下循环语句的执行结果: :i=1;while (i=100) putchar(*);i+; 这个循环永远不会结束这个循环永远不会结束,因为循环控制变量因为循环控制变量i没有没有在循环体内被改变,在循环体内被改变,i+; 不属于循环体。不属于循环体。 循环语句中一定要注循环语句中一定要注意表达式的值是否能在意表达式的值是否能在循环执行过程中被改变,循环执行过程中被改变,以免造成死循环。以免造成死循环。79do循环体语句;循环体语句;while (表达式表达式); 1.1.一般形式一般形式:表达式表达式 循环体循环体假假真真do注意:注意:分号不能丢分号不能丢1.1.执行循环

55、体语句执行循环体语句3.3.表达式的值为非零,返回第表达式的值为非零,返回第1 1步步4.4.表达式的值为零,结束循环表达式的值为零,结束循环2.2.计算表达式计算表达式2.2.执行流程执行流程:80例例 用用do-whiledo-while循环求循环求 1001nn#include main() int i=1,sum=0; do sum=sum+i; i+; while(i=100); printf(“sum=%d n”, sum);由于由于do-while语句至语句至少要被执行一次,特少要被执行一次,特别要注意别要注意i和和sum的取值的取值问题!问题!813. While3. Whil

56、e与与do-whiledo-while语句的区别:语句的区别: (1 1)while while 循环是先判断后执行,而循环是先判断后执行,而do-whiledo-while循环是先执行后循环是先执行后判断,即先执行循环体,再计算测试表达式的值。判断,即先执行循环体,再计算测试表达式的值。 例如:例如:int x=-1;int x=-1;while(!x)while(!x) x=x x=x* *x;x;printf(“ %dn”, printf(“ %dn”, x);x);int x=-1;int x=-1;do do x=x x=x* *x;x;while(!x);while(!x);pri

57、ntf(“ %dn”, x);printf(“ %dn”, x); (2 2)在)在while while 循环中,循环中,while(while(测试表达式测试表达式) )后面不带后面不带“;”; 而在而在do-whiledo-while循环中,循环中,while(while(测试表达式测试表达式) )后面必须带后面必须带“;”,它表示该语句的语法结束。它表示该语句的语法结束。823.3.3 for3.3.3 for语句语句 for(for(表达式表达式1;1;表达式表达式2;2;表达式表达式3) 3) 循环体语句循环体语句一般形式:一般形式:循环变量循环变量初始化初始化循环控制循环控制条件

58、条件修改循环修改循环变量变量83for for 语句执行流程图:语句执行流程图:计算表达式计算表达式2 2计算表达式计算表达式1 1计算表达式计算表达式3 3执行循环体执行循环体非非0 00 0forfor(表达式(表达式1 1;表达式;表达式2 2;表达式;表达式3 3) 循环体语句循环体语句84例例: 求求 1+2 +99+100#includemain( ) int i,s=0; for(i=1;i=99;i+) s=s+i; printf(“s=%d”,s); 程序如下:程序如下:i=1i=100s=s+ii+假真注意:注意:for 语句用于实现当型循环结构,它是先判断后执行。语句用于

59、实现当型循环结构,它是先判断后执行。因此,有可能循环体执行因此,有可能循环体执行0 0次。次。85从上面的程序我们看到,从上面的程序我们看到,for语句中:语句中:表达式表达式1:通常是给循环变量赋初值通常是给循环变量赋初值表达式表达式2:循环是否继续执行的判别表达式,这个表达循环是否继续执行的判别表达式,这个表达式通常与某一个(或多个)变量的值有关,随着这个式通常与某一个(或多个)变量的值有关,随着这个(些)变量的值的改变,表达式的结果发生变化,这(些)变量的值的改变,表达式的结果发生变化,这个(些)变量被称为循环因变量。个(些)变量被称为循环因变量。表达式表达式3:通常用于改变循环因变量的

60、值。通常用于改变循环因变量的值。 1. 1.表达式的省略:表达式的省略:forfor语句的变形:语句的变形:86(1)(1)省略表达式省略表达式1 1:#includemain( ) int i=1,s=0; for(;i=99;i+) s=s+i; printf(“s=%d”,s); (2)(2)省略表达式省略表达式3 3:#includemain( ) int i,s=0; for(i=1;i=99;) s=s+i;i+; printf(“s=%d”,s); (3)(3)同时省略表达式同时省略表达式1 1、3 3#includemain( ) int i=1,s=0; for(;i=99;) s=s+i;i+; printf(“s=%d”,s); 表达式表达式2也可以省略也可以省略但在循环体中要借助但在循环体中要借助Break 语句来实现循语句来实现循环的结束。环的结束。注意:注意:表达表达式省略,式省略,分分号不能省号不能省。872. 2. 循环体可以是空语句循环体可以是空语句例如:例如:main( )

温馨提示

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

评论

0/150

提交评论