C语言的基本控制结构.ppt_第1页
C语言的基本控制结构.ppt_第2页
C语言的基本控制结构.ppt_第3页
C语言的基本控制结构.ppt_第4页
C语言的基本控制结构.ppt_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

第2章 C语言的基本控制结构,算法 进行某一工作的方法和步骤称为算法 算法的组成要素 操作 算术运算、关系运算、逻辑运算、函数运算等 控制结构 顺序结构 选择结构 循环结构,算法的图形表示,流程图图形元素,算法的描述,2.1 顺序结构,语句格式: 常见表达式包含:算术运算、关系运算、逻辑运算表达式,赋值表达式,函数调用表达式,顺序结构是指按照语句的书写顺序依次执行每条语句的语句结构,2.2 选择结构,应用问题 根据不同条件,完成不同的计算处理 语言支持 条件判断的支持 关系运算、逻辑运算 选择结构 选择结构的描述 对选择条件的描述 对处理分支的描述,例1:分析整数绝对值的计算过程。,#include main( ) int input, output; printf( “nEnter a integer:” ); scanf( “%d”, ,条件: 关系运算表达式,条件分支(真、假),#include main( ) int x, y; printf( “请输入两个整数:” ); scanf( “%d%d”, ,说明x和y是整数,条件: 关系运算表达式,条件分支(真、假),例2:要求:输入两个整数,进行比较;输出比较结果(“等于”,“大于”或“小于”),main ( ) int x, y ; printf (“Enter x : ”); scanf ( “%d”, ,算法: s1:输入一个整数 s2:若 x 0,执行 y x s3:若 x = 0,执行 y 2 s4:若 x 0,执行 y 3 * x s5:输出 x,y,选择结构-if语句,格式:(双分支) if ( 条件表达式 ) 语句 /*真分支*/ else 语句 /*假分支*/ 或者 (单分支) if ( 条件表达式 ) 语句 /*真分支*/ 关键字(保留字) 系统已经使用的标识符,如: if else int float ,常用关系运算符 大于 小于 = 小于等于 = 等于 = (双等号) 不等 !=,优先级低,单分支if 语句的执行过程是: 先求 “表达式”的值,其值为真(非0)时,则执行 “语句” ,然后执行 if 语句后的下一条语句;其值为假(0)时,则直接执行 if 语句后的下一条语句。,单分支执行过程,双分支 if 语句的执行过程是: 先求 “表达式”的值; 其值为真(非0)时,则执行 “语句1” ,然后执行 if 语句后的下一条语句; 其值为假(0)时,则执行 “ 语句2”,然后执行 if 语句后的下一条语句。,非0,0,其他语言现象,else 子句 和最近的 if 语句匹配 分程序结构(复合语句) 用大括号 和 括起来的一组语句 常用于条件分支的描述 注意:若某个分支含有多条语句,则必须用 括起 程序书写格式(强烈推荐) 每个语句占一行 采用缩进格式描述条件分支和复合语句 用制表符(TAB)进行缩进,关系运算与逻辑运算,关系运算符,关系表达式 用关系运算符将两个表达式连接起来的式子 关系表达式的值是0 或 1,0为假,1为真。,举例,a b = c 等价于 ( a b ) = c a b != b b ) != ( b a 值为0(假) (a的ASCII码是97) z = (1+3) 7 z的值为1(真) 判断整型变量value是否为偶数 value%2=0 判断整型变量a是否能被5整除 a%5=0 注意:字符型数据用它们的ASCII码进行比较,例1:用逻辑表达式来表达数学式:0 x 10 C语言:x = 0 & x = 10,例2:用逻辑表达式表达下列关系:x -10 或 x10 C语言: x = 10,例3:若a=1,b=4,c = 5,求逻辑表达式 ! a + b c & b != c 的值。 (只考虑&的左端),逻辑运算符,逻辑运算符的操作对象是逻辑值(1或0) C语言中0表示“假”,非0表示“真” 运算符的优先级: !级别最高,&次之,|最低。 ! 是单目运算符,优先级与其他单目运算符相同。 & 和 |是双目运算符,低于各关系运算符。,逻辑表达式,判断结果只有两种可能:“真”或“假”。 在程序中应书写逻辑表达式的地方可以写其他表达式,C语言把它的值当作逻辑值处理 处理原则:表达式的值不为0则代表“真” 为0则代表“假”,逻辑运算符与逻辑表达式,逻辑运算规则: !表达式 “表达式”看作逻辑值,以该值的否定为最后结果。 表达式1 & 表达式2 只有两个表达式的值都非0时,结果为1,否则为0。 表达式1 | 表达式2 只有两个表达式的值都为0时,结果为0,否则为1。 逻辑表达式的计算结果都是整型的 0 或 1。,运算符的先后顺序:,! 算术运算符 关系运算符 & | 赋值运算符,例:,举例,x能被3或5整除 (x%3=0)|(x%5=0) x能被3且5整除 (x%3=0)&(x%5=0) 由a、b、c是否可以构成一个三角形 (a+bc)&(a+cb)& (b+ca) 判ch中的字符是否为大写字母 (A=ch)&(ch=Z),多重选择的实现,题目 从键盘输入三个数,找出最大的一个数。 问题的分析 数据对象(a, b, c, max) 算法流程,a b,a c,F,F,T,T,maxa,maxc,b c,F,T,maxb,maxc,输入三个数,输出max,实现代码,#include main() int a, b, c, max; printf(“nEnter 3 integers separated by space: “); scanf(“%d%d%d“, ,if 语句的嵌套使用,if 语句的嵌套问题: if 语句的分支形式,可以嵌套,但容易产生问题。问题出在条件后直接又出现分支语句。 例: if (x 0) if (y 1) z = 1; else z = 2; /*这个部分属于哪个 if?*/ C规定:每个 else 部分总与它前面最近的(没有配对的) if 配对。,上例写法不好,易被误解。 如果想else部分属于外层的if,可以采用下面加花括号的写法: if (x 0) if (y 1) z = 1; else z = 2;,多情况选择的实现,题目: 输入一个格式为 x+y 的二元算术运算表达式,输出这个表达式的计算结果。,switch 的使用,#include main( ) float x, y; char op; scanf( “%f%c%f”, ,多路选择,结束case分支,程序读解,新的语言现象 switch语句:按照条件表达式求值结果,决定转向哪个case的执行 case分支:当条件式的值等于开关值(必须是常量)时,执行 default分支:在所有case不匹配时,执行 (可缺省) break语句:用于结束case分支的执行,转向switch后续语句的执行,switch 语句,一般形式: switch( e ) /* 条件式 */ case c1: /* 常量 */ stmt1 。 case cn stmtn default: stmt0 /* 语句组 */ /* 语句组中常使用break */,注意:switch语句的每一个case判断,都只负责指明流程分支的入口点,而不负责指定分支的出口点,出口点由编程人员用相应的跳转语句来表明。 break是流程跳转语句。,2.3 循环结构,考虑计算任务 从键盘读入5个整数,输出它们的和; 设计思路 设置一个整型变量,保存整数的和 设置另一个变量,保存刚读入的整数 每读入一个整数,将它累加到整数和 实现需求 为5个整数的处理提供循环控制,程序例,为实现循环,设置变量 i,保存循环次数(计数器)。 while 语句 检查条件i 5 控制循环终止 循环条件成立时 执行循环体中语句 循环条件不成立时 执行后面的语句,#include main( ) int sum, x; int i; /* 循环变量 */ sum = 0; i = 0; while( i 5 ) scanf( “%d”, ,循环语句,格式 while ( 条件表达式 ) 语句 /*循环体*/ 控制逻辑 表示为流程图 循环主要用于在指定条件下重复执行某些操作的情形,上例的另一种实现方法(实现2),讨论 内存空间的使用 实现1:3个整型变量 实现2:6个整型变量 算法 实现1:存储概念 实现2:数学概念 程序运行和数学计算 区别:存储器和赋值的概念 提倡用实现1方法,#include main( ) int x1, x2, x3, x4, x5, sum; scanf( “%d%d%d%d%d”, ,例2-5:从键盘输入10个整数,计算它们的平均值。,#include main( ) int sum = 0, i = 1; int x; /* 保存当前输入的数据 */ printf( “nEnter 10 integers:” ); while( i = 10 ) scanf( “%d”, ,还可写成: (double)sum/(i-1),while 语句的特点,表达式为“真”则执行循环体一次;为“假”则结束循环 先判断表达式的值,后执行循环体 循环体内应有改变循环条件的语句,并且有机会执行 如果循环中使用的某些变量需要有初始值,则初始值的赋值应在while语句之前完成,for 语句,语法格式: for(初值表达式; 条件表达式; 改变量表达式) /* 循环体 */,只在循环开始时计算一次,在每次执行循环体之前先计算,再根据计算结果决定是否执行循环体,在循环体执行完一次后计算,用于修改循环条件,for 语句 三要素 初值 条件 改变量 执行过程,for 循环常见的应用形式,for(循环变量赋初值; 循环条件; 循环变量增量) 例如 s=0; for(i=1; i=100; i+) s=s+i; 可以计算 1+2+3+100,结果在s中 再如 t=1; n=5; for(i=1; i=n; i+) t=t*i; 可以计算 5! ,结果在t中,思考题 : 循环体有可能一次都不执行吗?,分析 本题实际是求最大值 用一个变量存放最大值;一个变量接收键盘输入 思路 先假设1个当前最大值,再依次与其他字符比较,若某个字符更大,则以该字符为当前最大,继续与后面的字符比较,直到全部比较完毕,例2-6 从键盘读入5个字符,找出其中ASCII值最大的字符,将其输出10次,#include main( ) int i, x, max = 0; for( i=0; i max ) max= x; for( i=0; i10; i+ ) putchar( max ); ,问题 为何要在循环前为max赋值 max可以赋其他值吗? 结论 因为字符的ASCII码均0,可以选一个比所有字符ASCII码都小的值做为初始的最大值,要点 用当前最大值max与所有x比较,若某个x更大,则把该x放到max中 设置的max初始值必须有机会被实际的最大值取代,for语句的说明:,for后面括号中的表达式可以部分或全部省略,但两个分号不能省 省略表达式1或表达式3,则同while 省略表达式2,则为死循环(条件永真) 循环体语句可以是一条语句,也可以是一条复合语句,循环语句- do-while,语法 do stmt while( e ); stmt 循环体 e 循环条件 C语言中的逻辑值 0 代表假 非0 代表真,stmt,e,= 0,Y,N,循环语句-do while,说明: 循环体至少被执行一次 循环体仅有一条语句时,可不用 ,多条语句一定要用 ,例2-7:从键盘输入一行字符,统计其中包含的数字字符个数,并输出。,分析 输入的字符个数不确定,按回车后输入结束,所以程序中要判断输入的是否为回车符 需对输入的字符计数,字符不必保存 需要变量:一个用于计数;一个用于接收输入的字符 思路 在循环中输入字符 每次输入的字符都判其是否为回车符,若是,则结束循环 判输入的字符是否是数字,是则计数器变量加1,#include main( ) int ch, num = 0; printf( “Enter a line text:” ); do ch= getchar( ); if( 9 = ch ,要点 计数器num要赋初始值,且初始值为0 只有符合条件的字符才计数 判输入是否为回车符决定是否继续循环,三种循环的比较,共同点: 都具备三要素 不同点 for 、while 的循环体有可能一次也不执行 do- while 循环体中的语句至少执行一次 do.while 语句的最后要有一个分号,2.4 循环控制语句,break 语句 出现在循环体中,用于终止循环(最内层); 出现在switch语句中,用于终止多路选择; continue 语句 出现在循环体中,用于终止循环体的本次执行(最内层) goto 语句 goto label; 转向执行label指定的语句 label: 定义在某个语句前; 破坏程序的结构化,不推荐使用;,break语句,break语句 用来从循环体内跳出,即提前结束循环。 main() int i; for(i=100;i=0;i-) if (i%13)=0) break; printf(“%dn”,i); ,结果: 91,continue语句,continue语句 只能用在循环语句中,遇到continue语句,则结束这次循环,结果: 7 9 10,main() int x; for(x=7;x=10;x+) if(x=8) continue; printf(“%dn”,x); ,例2-8:输入一个整数n,打印输出一个由n个字符星号*组成的等边三角形; 例如,当输入4时,输出如下所示的三角形: * *_* *_*_* *_*_*_*,思路:需2层循环,外循环改变行,循环n次; 内循环输出每行的字符。,本题自学,数据对象: int n (三角形的边长) int i (当前的行号) 操作步骤: S1. 读入三角形边长 S2. 以 i 为当前行号,进行 n 次循环 打印输出 n-i 个空格 重复下列操作 i 次 输出一个*号;如果不是第 i 次循环,则再输出一个_字符。 输出换行符,#include main( ) int n, i, j; printf( “Enter the side of the triangle:” ); scanf( “%d”, ,内循环的循环次数与行数有关 内循环要考虑输出不同的字符,语言小结(一),变量说明 int double float char 算术运算(左结合) + - * / % 加 减 乘 除 求余 数据类型的约束:结果取精度高的类型 关系运算 = != = = 等于 不等 大于 小于 大于等于 小于等于 逻辑运算 & | ! 逻辑与 逻辑或 逻辑非,语言小结(二),控制语句 if 语句 switch语句 while 语句 for语句 do while 语句 循环控制跳转语句 break 语句 continue 语句 目的:更方便地进行算法描述 赋值 变量 = 表达式 包含命令(预处理) #include 标准输入输出函数 #include 标准数学函数,闰年的判定条件,闰年是根据地球绕太阳一周的时间计算的。地球绕太阳一周的时间是365天5小时48分46秒。为了使一年里的天数为整数,把365天定为

温馨提示

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

评论

0/150

提交评论