《C语言培训》PPT课件.ppt_第1页
《C语言培训》PPT课件.ppt_第2页
《C语言培训》PPT课件.ppt_第3页
《C语言培训》PPT课件.ppt_第4页
《C语言培训》PPT课件.ppt_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

第 4 章 选择结构,4.1 关系运算和逻辑运算 4.2 if 语句和用 if 语句构成的选择结构 4.3 条件表达式构成的选择结构 4.4 switch 语句以及用 switch 语句和 break 语句构成的选择结构 4.5 语句标号 和 goto 语句,关系运算符(共6种) 用于比较两个数据的大小,被比较的数据可以是数值型,也可以 是字符型等。,4.1 关系运算和逻辑运算, (大于) = (大于等于) = = (等于) 优先级相同(低) != (不等于) 优先级别:低于算术运算符,但高于赋值运算符。 结合方向:自左而右。,关系表达式及关系表达式的值 用关系运算符连接的两个表达式称为关系表达式。如: 3=3+53+2b a+bb+c (a=3)(b=5) ab)(bc) 关系表达式的值:1 或 0 (在C中,没有逻辑常量) 逻辑真 整型数据 1 逻辑假 整型数据 0,例1:设a=3, b=2, c=1 则: ab 其值为? c = a b 其值为 ?,1,1,例2: 3=3+53+25b=ba*bb,说明 (1)区别: = 条件运算符 = 赋值运算符 (2)字符数据的比较按其ASCII码进行。 d E (3)一般不用“= ”来判定二个实数是否相等。 若变量a,b为实型,判定a,b相等可用: fabs(a-b)eps 其中eps是用户给定的一个充分小的数。,如: a=1234.5679; b=1234.5679 fabs(a-b)1e-6 (即 | a-b| 10-6),5.2 逻辑运算符和逻辑表达式,逻辑运算符 ! 逻辑非 高 ( 单目运算符,自右而左 ) & 逻辑与 ( 双目运算符,自左而右, | 逻辑或 低 优先级低于关系运算符 ),运算的规则 非 运算:非真为假,非假为真。 与 运算:两运算量均为真,结果为真,其它均为假。 或 运算:两运算量均为假,结果为假,其它均为真。,逻辑表达式(可以包含多个逻辑运算符) 例:设 a=2,c=a,f=3.0, x=1, y=2 !(c =a) ay & c,!1 0 1| 0 1 ! ( 1& 0) ! 0 1 0&b|xy&c 0&b|0&c 0,说明 (1)在进行判别时 非零数真 (包括字符型数据,只要其ASCII值非零) 0 假 如: a=4,则 !a的值为 0 若 a=0, b=5, 则 a&b的值为 0 !a|b 的值为 1 (2)逻辑运算结果 逻辑真: 1 逻辑假: 0 如: -2 & 3 1 !3 0,思考 设:a=1 , c=3; 问:执行 a|(c=5)后,表达式的值: ? 变量c的值:? 执行 a &(c=5)后,表达式的值: ? 变量c的值:?,逻辑表达中,并非所有的运算符都被执行: (1)a&b&c 当a为0,则不再判别b和c,结果为0(假)。 当a为真(非零),才需判别b的值;当a,b都为真时才判别c的值; (2)a|b|c 当a为真(非零),则不再判别b和c,结果为1。 当a为假,才判别b;当a和b 都为假,才判别c。,1,3,1,5,问: 当a=1,b=2,c=3,d=4,m=n=1时 执行 (m=ab)&(n=cd)后,变量m值为 n值为,1,0,思考题: 数学关系式 : 3x10 用C语言的表达式如何描述?,1. 3=3 & x10,x 10,思考:能描述20x30或x-100的C语言表达式是什么?,20x&x30|x-100,答表达式为:,4.2 if 语句和用 if语句构成的选择结构,功能:通过判断所给条件,决定执行给出的两种操作之一。,1、if语句的三种形式,形式一: if (表达式) 语句,例 输入两个数,分别放入x和y中, 若两数不相等,则输出其中的 大数;若两数相等,则输出字符 串 x=y 和 x 的值。 #include “stdio.h” main( ) int x, y; printf(“Enter x,y:n”); scanf(“%d,%d”,其中: 表达式可以是关系、 逻辑、算术表达式等。 语句可以是复合语句。,形式二: if(表达式) 语句1 else 语句2,其中: 表达式可以是关系、 逻辑、算术表达式等。 语句可以是复合语句。,例 从键盘输入一个整数,判断该数是否能被 3 整除。若能,打印 YES;不能被 3 整除,打印 NO,#include “stdio.h” main( ) int a; printf(“请输入一个整数:n“); scanf(“%d“,&a); if (a%3=0) printf(“a=%d YESn“, a ); else printf(“n=%d NOn“, a ); ,程序演示,例 从键盘输入三角形的三边,判断是否能构成三角形,若能则输出其面积,若不能输出不能构成三角形。,#include “math.h” main( ) float a,b,c,area,s; printf(“please input a,b,c number:n”); scanf(“%f,%f,%f”, ,程序演示,形式三: if(表达式1 ) 语句1 else if(表达式 2) 语句2 else if( 表达式3) 语句3 else 语句4,例 根据考试成绩的百分制分数段打印出相应的等级。,#include main( ) float score ; printf(“ input score: “); scanf(“%f“, ,方法二,if(e1) if(e2) 语句1 else 语句2 else if(e3) 语句3 else 语句4,4.2.2 if语句的嵌套,if(e1) if(e2) 语句1 else 语句2 else if(e3) 语句3,在if语句中又包含一个或多个if语句称为if嵌套。一般,形式如下:,说明 if与else配对问题,如: if(e1) if(e1) if(e2) if(e2) 语句1 语句1 else else 语句2 语句2,C语言规定, else总是与上面最近的if配对。 若要改变这种默认的配对关系,在相应的if语句上加花括号。,例 有一函数,编一程序,输入一个x值,输出y值。,程序1: main( ) int x,y; scanf(“%d“,&x); if (x0) y=-1; else if (x=0) y=0; else y=1; printf(“x=%d,y=%dn“, x, y); ,程序2: main( ) int x,y; scanf(“%d“,&x); if (x=0) if (x0) y=1; else y=0; else y= -1; printf(“x=%d,y=%dn“, x, y); ,程序演示,如果if语句是以下形式: if (表达式1) x =表达式2; else x =表达式3;,即:表达式1的值为“真”或为“假”,都只执行一个赋值语句,且给同一个变量赋值,可用以用条件表达式来实现。,4.3 条件表达式构成的选择结构,例:若有以下语句: if(ab) max=a; else max=b;,条件运算符和条件表达式 表达式1?表达式2 :表达式3 作 用:在两个表达式的值中选择其一。 优先级别:高于赋值运算符,但低于逻辑运算符。 说明 (1)条件运算符:“ ? :” 要求三个运算量(唯一的三目运算)。 (2)执行过程: 非零(真)求表达式2,即为整个表达式的值 求表达式1 零 (假) 求表达式3,即为整个表达式的值,例1:计算 a+|b| 的值,x = 表达式1 ? 表达式2 :表达式3;,main( ) int a, b, c; scanf(“%d , %d”, ,运行输入:3,-4 输出结果:3+|-4|= 7,例:条件运算符嵌套 2 ? 1 : 0 ? 3 : 4 (结合方向:自右而左) 等价 2?1 : ( 0 ? 3 : 4 ),其值为1,( 2?1 : 0) ? 3 : 4,其值为3,错误,设有语句 int x=3,y=1,z=5; 则下面表达式的执行结果是: x=(yz)? x+2 : x-2, 3, x+5,结果:6,switch (表达式) case 常量表达式1: 语句1 case 常量表达式2: 语句2 case 常量表达式n: 语句n default: 语句n+1 /*可选*/ ,4.4 switch语句以及用switch语句和break语句构成的选择结构,switch (表达式) case 常量表达式1: 语句1 case 常量表达式2: 语句2 case 常量表达式n: 语句n default: 语句n+1 /*可选*/ ,4.4 switch语句以及用switch语句和break语句构成的选择结构,4.4.2 switch语句 执行过程,执行过程: 1.计算switch后表达式的值,若该值等于某个case后常量表达式的值,则转向该case后的执行语句,并顺序执行其它case 后的语句; 2.若表达式的值不等于任何case后面的常量表达式的值,则转向default 后面的语句去执行。如没有default部分,则转向switch的后续语句。,switch (表达式) case 常量表达式1: 语句1 case 常量表达式2: 语句2 case 常量表达式n: 语句n default: 语句n+1 /*可选*/ ,例: 根据从键盘输入的学生成绩,输出对应的等级。,main( ) float score ; int n; printf(“ input score: “); scanf(“%f“, ,4.4.3 在switch语句体中使用 break 语句,例子: 根据从键盘输入的学生成绩,输出对应的等级。,main( ) float score ; int n; printf(“ input score: “); scanf(“%f“, ,#include main( ) float score ; printf(“ input score: “); scanf(“%f“, ,n为整型表达式,例 根据考试成绩的等级打印出百分制分数段。 P99,程序演示,main( ) char grade ; printf(“ input AE: “); scanf(“%c“, ,n为字符型 表达式,程序演示,switch语句允许嵌套。 switch( ) switch( ) ,补充:,看成一条语句,结果: a=2, b=1,一般形式: goto 标号; 功能:将执行流程转到以该标号为前缀的语句去执行。,C语言允许在任何语句前添加标号,以作为goto语句的转向目标。 标号:语句; 其中:标号的命名规则与变量完全相同。,4.5 语句标号 和 goto 语句,例 以计算 1+2+3+100 的值。,用if - goto构成循环,main( ) int i=1, sum=0; loop:if(i=100) sum += i ; i+; goto loop; printf(”sum= %d n“,sum); ,第 5 章 循环结构,5.1 while语句和用while语句构成的循环结构 5.2 do-while语句和用do-while语句构成的循环结构 5.3 for 语句和用 for 语句构成的循环结构 5.4 循环结构的嵌套 5.5 break 语句与continue语句在循环中的作用 5.6 程序举例,5.1 while语句和用while语句构成的循环结构,一般形式: while (表达式) 语句,循环体,说明 1. 循环体也可以是复合语句。 2. 循环体中应有使循环趋于结束的语句(也可在表达式中实现)。 3. 如果表达式的值一开始就为0(假),则循环体将一次也不执行。,例5.1 求12+22+32+n2,直到累加和大于或等于10000为止。,#include “stdio.h” main ( ) int i=0, sum=0; while (sum10000) sum+= i * i; i+=1; printf(“n=%dnsum=%dn“, i-1, sum);,使循环趋于结束,程序演示,例5.2 计算pi/4=1-1/3+1/5-1/7+1/9-公式求的近似值,直 到 最后一项的绝对值小于10-6为止 。,#define EPS 1.0e-6 #include main( ) int s; float n, t, pi; t=1,pi=0;n=1.0;s=1; while(fabs(t)=EPS) pi=pi+t; n=n+2; s=-s; t=s/n; pi=pi*4; printf(“pi=%10.6fn”,pi); ,程序执行结果:pi=3.141594,一般形式: do 循环体语句 while(表达式) ;,分号,该语句先执行循环体,再判断表达式的值。因此,循环体语句至少被执行一次。,5.2 do-while语句和用do-while语句构成的循环结构,程序演示,例5.4 计算 Fibonacci(意大利数学家)数列,直到某项大于1000为止,并输 出该项值。 Fibonacci数列为: 1,1,2,3,5,8,。其特点是,前两个数是 1、1, 自第三个数开始,每个数都是其前两个数之和。,算法: i=1 f 1 =1 i=2 f 2 =1 i=3 f i= fi-1+f i-2,月份 1 2 3 4 5 6,数量 1 1 2 3 5 8,程序演示,注意和课本比较,for(表达式1;表达式2;表达式3) 循环体语句,注意 “表达式1”仅在循环开始前,执行一次。,5.3 for 语句和用 for 语句构成的循环结构,for语句最简单、最易理解的形式,for(循环变量赋初值;循环条件;循环变量增值) 循环体语句,例 5.5:求1+2+3+4+100,main( ) int i, sum=0; for( i=1;i=100;i+ ) sum=sum+i; printf(“sum=%d”,sum); ,printf(“i=%d”, i);,说明 for语句中的三个表达式都可以省略,但其中的分号一定要保留。 表达式1和表达式3既可以是一个简单表达式或逗号表达式。,main( ) int i, sum; for(i=1,sum=0;i=100;sum+=i ,i+ ) ; printf(“sum=%d”,sum); ,空语句,例 5.6 编写程序,计算半径为0.5mm、1.0mm、1.5mm、2.0mm、 2.5mm 时的圆的面积。,一个循环内包含另一个完整的循环结构,称为循环嵌套。,5.4 循环结构的嵌套,(1)内层循环必须完全包含在外层循环中,不得交叉。,do for(; ;) while(e);,for (; ;) while(e) ,(2) 内、外层循环不能使用相同的循环变量。,for(i=0;) for(i=0; ) 错误 ,并列情况下允许 for(i=0;) for(i=0;) ,例 5.7 两打印输出以下菱形图案,#include “conio.h“ main( ) int i, j, k ; clrscr( ) ; for(i=1;i=4;i+) for(j=1; j=(4-i); j+) printf(“ “); for(k=1; k=(2*i-1) ; k+) printf(“*“); printf(“n“); ,* * * * * * * * * * * * * * * * * * * * * * * * *,for(i=1;i=3;i+) for(j=1; j=i; j+) printf(“ “); for (k=1; k=7-2*i; k+) printf(“*“); printf(“n“); ,【算法】 判断m是否素数,可以让m除以2到m-1之间的每一个数,如果m能被2到m-1之间的某个数整除,则说明m不是素数,否则,m一定是素数。,补充: 从键盘输入一个大于2的整数m,判断m是不是素数(只能被1和它本身整除的数是素数)。,开始,输入数m,m=2,k,2 i,i=k,m%i=0,Y,i=k+1,m是素数,Y,m不是素数,N,结束,N,Y,Y,N,i+1 i,N,程序演示,【算法】 判断m是否素数,可以让m除以2到m-1之间的每一个数,如果m能被2到m-1之间的某个数整除,则说明m不是素数,否则,m一定是素数。,#include “math.h“ main( ) int k, m, i ; printf(“Enter number:n”); scanf(“%d”, else printf(“%d is a prime numbern“,m); ,补充: 从键盘输入一个大于2的整数m,判断m是不是素数(只能被1和它本身整除的数是素数)。,算法:,开始,m=00,k,Y,2 i,i=k,Y,m%i=0,i+1 i,N,Y,N,i=k+1,m是素数,m不是素数,结束,Y,N,m+1 m,2 m,例 5.8 求2到100以内的全部质数(素数),N,程序演示,例 5.8 求2到100以内的全部质数(素数),break 一般形式: break; 功能:终止switch语句或循环语句的执行,使流程转入其后续语句执行。,switch(n) case 1: case 2: x=10;break; case 3: ,for( i=1; ;i+ ) sum=sum+i; if (i=100) break; ,注 break语句跳出的不是 if语句,而是跳出包含此if语句的循环体或switch语句。,5.5 break 语句与continue语句在循环中的作用,例5.9 计算 s=1+2+3+i, 直到累加到 s 大于5000为止,并给出 s 和 i 的值。,程序演示,#include “stdio.h” main( ) int i,s; s=0; for(i=1; ;i+) s=s+i; if(s5000) break; printf(“s=%d,i=%dn”,s,i); ,程序运行结果:,s=5050, i=100,说明 在switch或循环语句嵌套使用的情况下,break 只能终止它所在switch或循环语句,而不能直接跳出(或终止)多层循环,如:,break;,for() for() if() break; ,continue 一般形式:

温馨提示

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

评论

0/150

提交评论