程序设计与C语言(第二版)章-课件.ppt

上传人(卖家):ziliao2023 文档编号:7252958 上传时间:2023-11-03 格式:PPT 页数:200 大小:1.94MB
下载 相关 举报
程序设计与C语言(第二版)章-课件.ppt_第1页
第1页 / 共200页
程序设计与C语言(第二版)章-课件.ppt_第2页
第2页 / 共200页
程序设计与C语言(第二版)章-课件.ppt_第3页
第3页 / 共200页
程序设计与C语言(第二版)章-课件.ppt_第4页
第4页 / 共200页
程序设计与C语言(第二版)章-课件.ppt_第5页
第5页 / 共200页
点击查看更多>>
资源描述

1、第4章 语句及控制结构第第4章语句及控制结构章语句及控制结构 4.1 C语言语句语言语句 4.2 简单语句简单语句 4.3 输入输入/输出功能语句输出功能语句 4.4 条件语句条件语句 4.5 循环语句循环语句 4.6 转向语句转向语句 习题习题4 第4章 语句及控制结构4.1 C 语语 言言 语语 句句C语言中,语句的含义也非常广泛。任何数据成分,只要以分号结尾,就称为语句,甚至只有一个分号也称为语句(空语句)。分号是C语言中语句的标志。一个语句可分写成多行,只要未遇到分号就认为还在同一个语句中;反之,在一行中也可以写多个语句。也就是说,C程序的书写是相当自由的。不过为了醒目起见,最好一行只

2、写一条语句,并且根据不同的语法成分,错落有致地加以排列,这样会更好地增加程序的可读性。本章我们将详述C中的语句。在学习一种语言时,要对其使用的语法规则、语义含义等深刻理解,灵活运用。表4-1 中先给出了C语言中语句的类别、名称及一般形式。第4章 语句及控制结构第4章 语句及控制结构4.2 简单语句简单语句4.2.1 空语句空语句空语句在程序中只用一个分号表示:;它什么也不做。它主要用在:转向语句的转向点;循环语句的循环体。若循环体为空,则其循环的动作全在循环头中进行。第4章 语句及控制结构4.2.2 表达式语句表达式语句表达式是由运算符和运算对象构成的式子,本身并没有执行的功能,但如果在它的后

3、面加上一个分号,就变成了语句,可以被执行了。虽然表达式的种类很多,但最常见的表达式语句多为赋值语句和函数调用语句。例如:i=3;x=PI*r*r;+i;printf(Hello!);其中前三个为赋值语句,第四个为函数调用语句。x+3;也是个表达式语句,实现x和3 相加,但它未改变x的内容,也未引起其他变化,因此对这个语句的执行没有实际意义。第4章 语句及控制结构【例例 4-1】交换两个变量的值。解题思路:解题思路:要交换两个变量的值,必须借助第三者。设有两个变量a和b,当把a的数据直接赋给b时就会破坏b中的内容,而通过第三个变量作中间过渡,就可以避免这种情况的发生,如图 4-1 所示。第4章

4、语句及控制结构图 4-1 交换两个变量值的示意图第4章 语句及控制结构程序实现如下:include main()int a,b,c;a=4,b=8;printf(a=%d,b=%d n,a,b);c=a;a=b;b=c;printf(a=%d,b=%d n,a,b);return 0;第4章 语句及控制结构运行输出:a=4,b=8 a=8,b=4其中,a=4,b=8;是逗号表达式(包含了赋值)语句。在前后两个表达式的运算互不相关的时候,可以用逗号运算符把它们连起来,当然也可以用分号。第4章 语句及控制结构4.2.3 复合语句复合语句把多条语句用花括号括起来即构成所谓的复合语句,例如:sum=s

5、um+i+j;i+;j-;第4章 语句及控制结构复合语句对内部来说有多条语句,对外部来说它又是一个整体,算是一个语句。复合语句通常用做循环语句的循环体或条件语句的分支。例如,在上例中假设只有在a大于b时才交换它们的值,则可以写为 if(ab)c=a;a=b;b=c;第4章 语句及控制结构4.3 输入输入/输出功能语句输出功能语句C语言没有提供专门的输入/输出语句,但是却提供了有输入/输出功能的函数,通过函数调用就可以达到输入/输出的目的。函数属于表达式的一部分,因此函数调用语句也是表达式语句的一种。要使用这些输入/输出函数,必须要把有关函数的信息告诉程序。告诉的方法是在程序头部加上includ

6、e 说明。“stdio.h”是一个头文件,stdio代表“standard input and output(标准输入/输出)”,即用系统提供的标准输入/输出设备来进行输入/输出。标准输入设备有键盘,标准输出设备有屏幕、打印机等。扩展名“h”代表head,说明该文件是头文件。include是包含,它表示在编译以前先把头文件stdio.h包含进来,程序中就可以使用标准输入/输出函数了。第4章 语句及控制结构4.3.1 字符输入字符输入/输出功能语句输出功能语句1.getchar函数函数该函数形式为:getchar()getchar是函数名,后面圆括号内是空的,说明该函数没有参数。该函数的使用形式

7、是:字符变量=getchar();其功能是从键盘上敲入一个字符,然后把它赋给字符变量。需注意的是,所键入的字符并不立 即赋给字符变量,只有在输入一个回车符后,字符变量才能得到字符。要想使字符变量立即得到所键入的字符,可用getch()函数。单独调用getchar()函数不能得到字符,但有其他用途,比如在程序的最后增加getchar();语句,可便于在用户界面观察程序的执行结果。第4章 语句及控制结构2.putchar函数函数该函数形式为:putchar(字符对象)putchar是函数名,其参数可以是一个字符常量或字符变量。该函数的功能是向终端输出一个字符。因整型和字符型是通用的,所以putch

8、ar函数也能够把代表某个字符编码的整数作为一个字符输出。第4章 语句及控制结构【例例 4-2】字符输入/输出。include main()char ch1,ch2,ch3;ch1=getchar();ch2=getchar();ch3=getchar();putchar(ch1);putchar();putchar(ch2);putchar();putchar(ch3);putchar(n);putchar(101);putchar(66);putchar();putchar(n);return 0;第4章 语句及控制结构运行程序:输入:abc 输出为:ab cAB其中,101是A的八进制编码

9、,66是B的十进制编码,输出结果中的表示一个空格,下同。注意注意:如果输入时按了空格键或回车键,则getchar函数会把空格符或换行符作为字符读入。有时还可以直接用getchar和putchar输入和输出字符,不需要再定义一个字符变量,例如:putchar(getchar();此时,getchar()函数作为putchar()函数的参数被调用,它输入的字符不经转手就被putchar输出了。第4章 语句及控制结构4.3.2 格式化输入格式化输入/输出功能语句输出功能语句getchar、putchar函数只能对字符进行输入/输出,而对其他类型的数据就必须用格式输入/输出函数进行输入/输出。1.pr

10、intf函数函数这是一个格式化的输出函数,它使用的一般格式是:printf(控制格式,输出列表)前面我们已知,输出的对象必须有相应的控制字符限定修饰才能输出,那么C中都有哪些控制字符呢?我们在这里主要介绍以下控制字符:d,o,x,u,c,s,f,e,g,p。不同的控制字符用以输出不同类型的数据。表 4-2 给出了要输出的数据类型与其控制格式之间的对应关系。第4章 语句及控制结构第4章 语句及控制结构1)%d格式(1)%d格式用来输出十进制整数,按数据的实际长度输出。(2)可以对输出数据所占字节位数加以限制,方法是在%和d之间加一整数,整数可正可负。正整数表示输出数据在所给空间中右对齐,左边留出

11、空格;负整数表示左对齐,右边留出空格。当输出数据位数大于所给空间时,则可突破位数的限制,按其实际大小全部输出,例如:printf(a=%5d,13);输出为:a=13 printf(a=%-5d,13);输出为:a=13 printf(a=%3d,12345);输出为:a=12345第4章 语句及控制结构(3)%ld格式。当输出的数据大于 32 767 时,不能再用%d格式,这时应该用长格式%ld输出。例如:printf(a=%ld,1234567);的输出为:a=1234567。也可以对长格式的位数加以限制,方法如(2)。第4章 语句及控制结构2)%o格式%o以八进制形式输出整数,其机理是把

12、整数在内存中的ASCII编码由低位向高位三位一组进行分节,每一节用一个八进制数码表示,这样如果原来的数据为负,则符号位的 1 也被作为八进制数的一部分加以处理了。例如:int a=-1;printf(%d,%o n,a,a);的输出为:-1,177777。a=-1的内存形式为因此,用八进制格式输出整数时以正整数为宜。1111111111111111第4章 语句及控制结构3)%x格式(或%X)%x以十六进制形式输出整数,其机理和八进制输出一样,只是它将对二进制编码按四位一组进行分节,每节用一个十六进制数码表示,同样也不考虑符号。如:int a=-1;printf(%d,%o,%xn,a,a,a)

13、;的输出为:-1,177777,ffff。4)%u格式%u以十进制形式输出无符号整数。可以用%u格式输出定义为其他整数类型的数据,用其他输出整数的格式也可以输出定义为无符号整数的数据,只是要注意,这两种情况只能在正整数的区间内使用。第4章 语句及控制结构【例例 4-3】格式化输出。include main()int i=-2;unsigned int u=65535;printf(u=%d,%o,%x,%u n,u,u,u,u);printf(i=%d,%o,%x,%u n,i,i,i,i);return 0;第4章 语句及控制结构运行输出:u=-1,177777,ffff,65535 i=-

14、2,177776,fffe,65534由例4-3的运行输出可以看出,%u格式是把最高位也作为数值位处理的,而%d格式是把最高位当成符号位来处理的。第4章 语句及控制结构5)%c格式%c格式输出一个字符,和字符ASCII编码对应的整数也以字符形式输出,并可以为其指定长度。例如 char c=a;printf(c=%c,%c n,c,97);printf(c=%5c n,c);则结果为:c=a,a c=a第4章 语句及控制结构6)%s格式%s格式用来输出字符串。(1)%s格式按实际大小输出字符串,但若字符串中含有0字符,则输出到0截止,即并不把双引号中的内容全部输出。例如:printf(s=%s

15、n,China);输出:s=China printf(s=%s n,China0Japan);输出:s=China字符0后的内容被舍掉,0本身也不输出。如果字符串中有控制字符,则控制字符也会发挥作用。例如:printf(%s n,China n Japan);则输出为:China Japan第4章 语句及控制结构(2)指定输出字符串的长度,规则如前。例如:printf(s=%6s,book);输出:s=book(右对齐)printf(s=%-6s,book);输出:s=book (左对齐)printf(s=%2s,book);输出:s=book(突破限制)(3)输出字符串前端的部分字符格式%.

16、s。这种格式指明:在m列宽度中输出字符串的前n个字符,当mn时,有m=n。例如:printf(s=%5.3s,China);输出:s=Chiprintf(s=%-5.3s,China);输出:s=Chiprintf(s=%2.3s,China);HT5SS输出:s=Chi第4章 语句及控制结构7)%f格式%f格式以小数形式输出单精度、双精度类型的浮点数。(1)以%f格式输出浮点数时,整数部分全部输出,小数部分输出 6 位,但输出的不一定全是有效数字。对单精度数只有左边 7 位有效,而对双精度数只有前 16 位有效。(2)也可以指定输出的宽度和小数位数,例如:printf(f=%10.2f n,

17、123.456);输出:f=123.46输出宽度中包含小数点位数,小数部分进行四舍五入。printf(f=%-10.2f,123.456);输出:f=123.46printf(f=%1.2f,123.456);输出:f=123.46当所给宽度小于数据位数时会自动突破位数的限制,这时数据的整数部分全部输出,小数部分按要求输出。第4章 语句及控制结构8)%e格式(或%E)%e格式以指数形式输出浮点数,包括单精度数和双精度数。输出时,尾数的整数部分只有 1 位,系统自动指定尾数的小数部分的宽度和指数部分的宽度。对此不同的系统有不同的规定。对Turbo C来说,小数部分 6 位,指数部分 4 位(包括

18、字母e或E,1 位阶符,2 位阶码)。例如:printf(f=%e,123.456);输出:f=1.234560e+02也可以指定输出宽度和尾数的小数位数:printf(f=%10.2e,123.456);输出:f=1.23e+02 第4章 语句及控制结构同样,当总宽度定义得小时会被突破。当有小数部分时,输出至少要用 6 位:尾数的整数 1 位,小数点 1 位,指数部分的 4 位。这 6 位再加上小数部分指定的位数,即为实际使用的位数,例如:printf(f=%6.2e,123.456);输出:f=1.23e+02输出占用了 8 位。第4章 语句及控制结构9)%g格式(或%G)%g格式用于输出

19、尾数中不带无效 0 的浮点数,以尽可能地少占输出宽度。例如:printf(g=%g,123.4);输出:g=123.4这种输出更符合人们的阅读习惯。10)%p格式%p格式用于输出变量的地址,而变量的地址是由编译程序分配的。通过查看变量的地址,可以知道变量在内存中的相对位置。例如:int a,b;printf(&a=%p,&b=%pn,&a,&b);输出:&a=FFD4,&b=FFD2第4章 语句及控制结构11)对printf函数控制字符的进一步说明(1)以上介绍了 10 种控制字符的一般用法,为了满足特殊的要求,还可以对控制字符加一些特殊的修饰。修饰符或标志共有 6 种,如表 4-3 所示。第

20、4章 语句及控制结构第4章 语句及控制结构标志的具体用法看下面的例子。【例例 4-4】标志的具体用法。include main()printf(%+d t%+d n,786,-786);/*输出:+786 -786*/printf(a=%d t a=%d n,5,-5);/*输出:a=5 a=-5*/printf(%o n,1427);/*输出:02623*/printf(%x n,1427);/*输出:0 x593*/printf(%g n,1427.00);/*输出:1427*/第4章 语句及控制结构printf(%g n,1427.00);/*输出:1427.00*/printf(%+0

21、9d,125);/*输出:+00000125*/printf(%*.*f,7,2,87.4573);/*输出:87.46*/printf(%-+09d,125);/*输出:+125,此时0占位符不起作用,只有在域宽大于数据位数且是右对齐时,0占位符才起作用*/return 0;第4章 语句及控制结构其中:%+09d中的9是输出总域宽,包括在正数前所加的“+”字符,0 表示用 0 来填充;printf(%*.*f,7,2,87.4573);中的*号表示的数值是由后面的参数提供的,两个*号分别和7、2相对应,也就是%7.2f这样的格式。采用格式串中用不定宽度表示而后由参数确定的格式有一定的灵活性。

22、第4章 语句及控制结构(2)精度说明。我们已介绍过用%f和%e对浮点数的输出作精度说明,同样对%d和%g控制符我们也可以作精度说明。%d的精度说明是指至少要打印的数字位数,例如:printf(%.9d,123);输出:000000123多余的位数用 0 填充。%g的精度说明是指输出的有效数字的最大位数,例如:printf(%.3g,12.389);输出:12.4第4章 语句及控制结构(3)程序中易出现的错误:把除%X、%G、%E外的控制字符写成大写,如%D等。试图用%c格式输出字符串的第一个字符。如:printf(%c,China);这样输出不了C。试图用%s格式输出字符。如:printf(%

23、s n,a);结果也是错误的。第4章 语句及控制结构2.scanf函数函数scanf函数能对各种类型的数据变量进行格式化输入。scanf函数的一般格式为:scanf(控制格式,输入列表)前面我们已知,scanf的输入列表中是以逗号分开的变量的地址,即每个变量名前面必须加一个地址运算符&。而在控制格式串中必须有和后面地址相对应的控制字符,里面还可以出现非控制字符,如果出现有非控制字符,则在输入时必须也把它们输入,否则就会发生输入错误。例如:int a,b,c;scanf(%d,%d,%d,&a,&b,&c);第4章 语句及控制结构格式控制串中除有三个格式控制符%d外,还有两个逗号,这两个逗号在输

24、入时也必须输入,即必须按如下格式输入:3,4,5 如果输入时以 3 4 5 形式敲入,则会出现错误。为了避免这种错误,在控制串中最好不要加入其他成分,以免在输入时忘掉或不匹配。如果在输入格式控制串中没有其他字符,如:scanf(%d%d%d,&a,&b,&c);则输入时就可以非常灵活多样。例如,可以作 345 这样的输入,也可以随意换行,作 3 45这样的输入,只要能把两个整数分开即可。第4章 语句及控制结构表 4-4 列出了输入的数据与其所用的控制符之间的对应关系。第4章 语句及控制结构在表 4-4 中的基本输入控制符之前还可以再加如表 4-5 所示的修饰符。第4章 语句及控制结构例如:in

25、t a,b;scanf(%2d%*3d%*2c%2d,&a,&b);若输入:12345&67 则结果为a=12,b=67。%*3d会把 345 舍掉,%*2c会把&舍掉。应注意,和%*3d对应的应该是三位数字,和%*2c对应的应该是两个字符。这种方法主要用于对已有数进行选取,一般不用。第4章 语句及控制结构注意:注意:(1)用%c格式输入时,敲入的任何字符,包括空格,均作为有效字符输入。(2)用scanf输入时,应做到变量类型、输入格式和输入数据三者相一致。例如有变量定义:int a,b,c;long int l1,l2,l3;float x,y,z;double d1,d2,d3;输入数据和

26、控制格式不一致时会出错。例如对于 scanf(%d%d%d,&a,&b,&c);输入:23.46571.8 则a、b、c均无正确的整数值。第4章 语句及控制结构 用短格式输入长变量时会出错,如 scanf(%d%d,&l1,&l2);scanf(%f%f,&d1,&d2);用长格式输入短变量时也会出错,如 scanf(%ld%ld,&a,&b);scanf(&lf&lf,&x,&y);对长变量只能用长格式进行输入,下面的写法是正确的:scanf(%ld%ld,&l1,&l2);scanf(%lf%lf,&d1,&d2);对格式化输入/输出的具体细节在上机时应多加注意和练习,这样才能逐渐明白和掌

27、握。第4章 语句及控制结构【例例 4-5】输入一个字符,求其先导字符和后继字符。编程思路:编程思路:对字符的输入,既可以用getchar函数,也可以用“%c”控制格式;输出时既可以用putchar函数,也可以用“%c”作格式输出。字符是有序类型,故可求其先导和后继,前后字符的ASCII编码相差为 1。第4章 语句及控制结构include main()char c,ch,pre,pos;c=getchar();pre=c-1;putchar(pre);putchar(,);putchar(c);putchar(n);scanf(%c,&ch);pos=ch+1;printf(%c,%c,ch,p

28、os);return 0;第4章 语句及控制结构运行输出:ii h,i i,j注意:注意:输入时一定要敲入两个字符再按回车键,这样一个字符给变量c,一个字符给ch。如果只输入一个字符就按回车键,则把这个字符交给了变量c,而把回车符交给了变量ch,它就输出不出来了。凡涉及字符输入时都要考虑这种情况。第4章 语句及控制结构【例例 4-6】输入一个球的半径,求其体积;输入一个圆柱体的底面半径和高,求圆柱体的表面积。编程思路:编程思路:找出和问题有关的量,每个量用一个变量表示。本题需要定义 5 个变量:球半径rg,球体积volume,圆柱底面半径rs,高h,表面积area。写出数学公式:,r34vol

29、ume3ghr2rs2s2area 第4章 语句及控制结构 把代数公式转换成C语言的表达式形式:volume=4*rg*rg*rg/3 area=2*rs*rs+2*rs*h C语言中没有这个字符,必须用一个常数代换它,因为对它要使用多次,所以可以把它定义为符号常量,方法如下:define PI 3.141593于是可写出程序如下:第4章 语句及控制结构include define PI 3.141593 main()float area,volume,rg,rs,h;printf(Input radium of global:n);scanf(%f,&rg);volume=4*PI*rg*r

30、g*rg/3;printf(Input radium and hight of column:n);scanf(%f%f,&rs,&h);area=2*PI*rs*rs+2*PI*rs*h;printf(The volume=%10.2f n,volume);printf(The area=%-10.2f n,area);return 0;第4章 语句及控制结构运行输出:Input radium of global:3.5 Input radium and hight of column:4.2 4.5 The volume=179.59 (右对齐)The area=229.59(左对齐)第4

31、章 语句及控制结构【例例4-7】输入一个三位数,分别以十进制格式(%d)和字符格式(%c)输出其百位、个位、十位数字。编程思路:编程思路:首先运用求模(%)和整除(/)运算求出个位、十位、百位上的数字。根据数字和相应数字字符之间的关系确定与个位、十位和百位上的数字对应的字符。数字和相应数字字符的关系如下:数字+0=相应数字字符如7+0=7,9+0=9。第4章 语句及控制结构程序如下:include main()int n,ge,shi,bai;printf(Input an integer:n);scanf(%d,&n);ge=n%10;shi=(n/10)%10;bai=n/100;prin

32、tf(bai:%dn,bai);printf(digit:%d%d%dn,bai,shi,ge);printf(chara:%c%c%cn,bai+0,shi+0,ge+0);return 0;第4章 语句及控制结构运行输出:Input an integer:379 digit:379 chara:379第4章 语句及控制结构4.4 条件语句条件语句C语言中有两种条件语句:双分支的if语句和多分支的switch语句。根据不同的情况恰当地使用它们,可以提高编程效率。4.4.1 if语句语句1.if语句的一般形式语句的一般形式if语句的一般形式是:if(表达式)语句1 else 语句2if语句的语

33、义如图 4-2 所示。第4章 语句及控制结构图 4-2 if语句的语义第4章 语句及控制结构首先对表达式求值,若值为真就执行语句1,否则就执行语句2。说明说明:(1)语句 1 和语句 2 可以是简单语句,也可以是复合语句。else前若是简单语句则必须由分号结束,不要认为分号会把整个if语句拦腰截断,事实上不加分号在C语言中反而是错误的。(2)语句 2 也可以没有,这时的if语句结构称为单路结构;若两个分支都有则称为双路结构。【例例 4-8】输入三角形的三边,求三角形的面积。第4章 语句及控制结构编程思路:编程思路:定义 4 个变量a,b,c和area,分别表示三角形的三条边与面积。由三边求三角

34、形面积的公式是:其中,在C语言中写为s=(a+b+c)/2。开平方要调用C语言提供的内部函数sqrt(),有关这个函数的性质在math.h头文件中说明,因此在程序中应该把这个头文件包含进来。根据数学知识,三角形任意两边之和大于第三边,因此对输入的三边必须进行判断,以保证输入的三边能够构成一个有意义的三角形。c)b)(sa)(ss(sarea2cbas第4章 语句及控制结构程序如下:include include main()float a,b,c,area,s;printf(Input 3 edges:n);scanf(%f%f%f,&a,&b,&c);if(a+bc&b+ca&a+cb)s=

35、(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);printf(The area=%.2f,area);第4章 语句及控制结构 else printf(Input error!n);return 0;运行输出:Input 3 edges:2 3 7 Input error!再运行一次:Input 3 edges:3 5 7 The area=6.50第4章 语句及控制结构2.if语句的嵌套语句的嵌套在if语句中,它的任一分支又可以是一个if语句,这样就形成了嵌套的if语句,其一般形式为:if(条件1)语句1 else if(条件2)语句2 else if(条件n)

36、语句n else 语句n+1其语义如图 4-3 所示。第4章 语句及控制结构图 4-3 嵌套的if语句的语义第4章 语句及控制结构写嵌套的写嵌套的if语句时应注意以下问题:语句时应注意以下问题:(1)if和else应配对出现,每一个else和离它最近且尚未匹配的if相匹配。(2)应在条件为真时执行一个操作,而在条件为假时再去测试下一个条件。不要在某条件成功后再接着去测试下一个条件,这样做的话,在嵌套层次数多时会失去智力上的控制,即不要写成下面的形式:if 条件1 if 条件2 if 条件3 else else else 第4章 语句及控制结构(3)在嵌套的多个条件中,应尽量把求值为真的概率最大

37、的条件放在前面优先判断,这样可以提高if语句的运行效率。例如:在学生成绩的登记中,90 分以上为A,8090分为B,7080分为C,6070分为D。如果8090分之间的学生最多,就应先对这个分数段进行处理:if(score=80&score=90)printf(A);printf(Very good!n);第4章 语句及控制结构else if(score=70)printf(C);else printf(D);这样写是为了避免在嵌套层数过多时语句不断向右缩而使一行的空间不断减少,从而不得不使语句折行,那样就破坏了程序的可读性,因此我们推荐上面这种写法,即不管嵌套多少层,都使else处在同一列上

38、。在条件score=90成立的情况下有两条语句,它们构成了复合语句,因此要用花括号括起来,如果缺少花括号,则会出现错误。第4章 语句及控制结构【例例4-9】输入一个字符,若为数字字符,则输出Number;若为大写字母,则输出Upper;若为小写字母,则输出Lower;若为回车换行符,则输出ReturnLine,其他字符则输出Other。编程思路:编程思路:用嵌套的if语句对输入的字符进行连续判断。C语言中没有集合运算符,要判断一个对象是否属于某个集合,应该列出这个集合的上下界,这要用关系运算符和逻辑运算符来描述范围。第4章 语句及控制结构程序如下:include main()char ch;p

39、rintf(Input a character:n);ch=getchar();if(ch=0&ch=A&ch=a&ch=A&ch=Z,而不能写成A=chb。第4章 语句及控制结构 在if结构的条件部分后面加分号,这样在单路选择中会出现逻辑错误,在双路选择中会出现语法错误。例如:if(ab);printf(OK):原意为当a大于b时打印OK,现在的情况是不管a是否大于b都打印OK。if(ab);printf(Yes);else printf(No);这时会出现语法错误。第4章 语句及控制结构3.if语句中条件表达式的灵活设置语句中条件表达式的灵活设置因为C语言中是用非 0 和 0 来表示真和假

40、的,所以条件的表示可以有多种形式:(1)用一个数值表示条件。如:int m;scanf(%d,&m);if(!m)printf(Yes);其中if(!m)等价于if(m=0)。(2)将赋值运算和条件判断结合起来。如:char ch;if(ch=getchar()!=n)putchar(ch);这里先调用getchar函数,输入一个字符,赋给ch,再判断ch是否为回车符,若不是回车符则将其输出。第4章 语句及控制结构(3)用复合的逻辑表达式表示条件。如:if(score70&score80)printf(B);此时常犯的错误是写成数学中的不等式形式:if(70scoreb?a:b;,其功能是把a

41、、b中的最大者赋给变量max,用if语句来实现即为:if(ab)max=a;else max=b;在条件不太复杂的情况下,用条件表达式比较简单,但如果条件复杂,嵌套层数较多时,还是用if语句为好。在程序设计中,将if语句和条件表达式结合起来使用会使程序变得简练。第4章 语句及控制结构【例例 4-10】猜数游戏。程序预置一个常数(称为幻数),让用户猜,猜对时给出正确信息,否则会给出是大了还是小了的提示。include main()int magic=618,guess;printf(Input your guess:n);scanf(%d,&guess);if(guess!=magic)gues

42、smagic?printf(High):printf(Low);else 第4章 语句及控制结构 printf(*Right*n);printf(%d is the magic number.n,magic);return 0;运行输出:Input your guess:600 Low第4章 语句及控制结构再运行:Input your guess:700 High再运行:Input your guess:618 *Right*618 is the magic number.这里的条件表达式语句相当于一个内嵌的if语句。第4章 语句及控制结构4.4.2 switch语句语句if语句是双分支结构,

43、如果要连续地测试多个条件,就需要用嵌套的if语句来实现。如果嵌套层次过多,不仅写起来麻烦,而且还不清晰。对于这类问题,用switch语句可以很好地解决。switch语句是一种多分支结构,其一般形式是:switch(表达式)case 常量1:语句1 case 常量2:语句2 case 常量n:语句n default:语句n+1 第4章 语句及控制结构switch语句的语义如图 4-4 所示。它的含义是:首先对表达式e进行计算,如果其值是e1,则转去执行语句s1。如s1后面有break语句,则switch语句结束;如s1后面无break语句,则在switch内部继续向下执行s2。如果e的值不为e1

44、,而为e2,则转去执行e2后面的s2语句,执行完s2后的情况如上。如e的值与e1,e2,en全不相同,就去执行语句sn+1。处在switch语句中最后位置上的语句,其后面加不加break效果相同,程序执行到此处都会退出switch语句。第4章 语句及控制结构图4-4 switch语句的语第4章 语句及控制结构说明说明:(1)switch语句中的表达式的类型只能是有序类型。(2)e1,e2,en是表达式的求值结果,必须互不相同。(3)可以有多个常量共同拥有一个语句的情况,如:case 1:case 2:case 3:printf(123);break;(4)default指出当表达式求值结果和所

45、有常量均不相同时要执行的动作。它的位置可以放在switch中的任何地方,不一定放在最后。第4章 语句及控制结构(5)语句si(i=1,2,n)可以是一条语句,也可以是多条语句,是多条语句时不必用花括号括起来。【例例 4-11】用switch语句输出学生的分数等级。设分数大于等于 90 分为A等,7090 分为B等(含 70),6070分为C等(含 60),60分以下为D等,分数为浮点数。编程思路:编程思路:switch后的表达式必须是有序类型而且求出的结果应当是一个个离散的值,而不是一个数值范围。应该想办法把一个范围转换成一个确定的值,这是使用switch语句的关键。在这里我们可以把分数除以

46、10 再取整,即可变成离散的数值,就可以用switch语句解决了。第4章 语句及控制结构include main()int i;float score;printf(Input a score n);scanf(%f,&score);i=score/10;第4章 语句及控制结构switch(i)case 9:case 10:printf(A);break;case 7:case 8:printf(B);break;case 6:printf(C);break;default:printf(D);return 0;第4章 语句及控制结构运行输出:Input a score 87.5 B再运行:I

47、nput a score 99.8 A输入的分数是实数,但通过赋值语句就变成了整型,整型是有序类型,并且i具有有限的离散值。printf(D);语句后面可以不要break,但如果把其他地方的break全去掉,则当输入分数95.9时,会连续地输出ABCD,因此一定要注意break的使用。第4章 语句及控制结构4.5 循环语句循环语句到目前为止我+们所遇到的程序都是简单程序,解决的问题都很简单。要解决复杂问题,并充分发挥计算机快速的优势,那么程序中很可能要用到循环语句。掌握好循环语句就可编出高质量的程序。C语言提供了三种循环语句:for语句、while语句和do_while语句。下面分别加以讨论。

48、第4章 语句及控制结构4.5.1 for语句语句for语句的基本形式如下:for(表达式e1;表达式e2;表达式e3)语句s其中,表达式e2的类型为逻辑型,表达式e1和表达式e3都不是逻辑型,在其中不能使用比较运算符与逻辑运算符。for语句的语义如图 4-5 所示。它的含义是:首先对表达式e1求值,然后判断表达式e2是否为真,如为真就去执行语句s,接着对表达式e3求值,再回去判断e2,直到e2为假时退出for循环。先看一个简单的例子。第4章 语句及控制结构图 4-5 for语句的语义第4章 语句及控制结构【例例 4-12】求 1100 之间所有奇数之和。include main()int i,

49、sum=0;for(i=1;i=100;i+=2)sum+=i;printf(sum=%d n,sum);return 0;运行输出:sum=2500第4章 语句及控制结构在该例的for循环头中有三个表达式,它们被两个分号分开。循环头的组成部分如下:循环控制变量 控制变量的终值 for(i=1;i=100;i+=2)for关键字 控制变量初值 递增控制变量第4章 语句及控制结构可以看出能否循环是由循环控制变量决定的。一进入循环,首先对控制变量置初值,这个初值是否合适,还要由表达式e2对它进行判断,只有在e2为真的情况下才能去执行循环体。若一开始条件就假,则循环体一次也不执行。在每次循环之后,控

50、制变量的值都要加以改变,这个改变量是决定能否继续循环或是否会无穷循环的关键,一定要使它的值逐渐向循环终值方向变化。当表达式e3计算完之后,再回来计算表达式e2,若e2为真则继续循环,否则退出循环。for循环头中的三个表达式可以缺省,可以缺一个,缺两个,甚至三个全缺,但不管怎么缺,其中的两个分号不能缺,而且这三个表达式的功能也一定要在或前或后的其他地方以其他的形式表现出来。第4章 语句及控制结构另外,在表达式 e1 和表达式 e3 的地方可以只有一个表达式,也可以有多个用逗号分开的表达式,并且还可以包含和循环无关的其他表达式。第4章 语句及控制结构下面是几种不同的表示方法:(1)表达式e1 和表

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(程序设计与C语言(第二版)章-课件.ppt)为本站会员(ziliao2023)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|