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

下载本文档

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

文档简介

1,算法 进行某一工作的方法和步骤称为算法 算法的组成要素 操作 算术运算、关系运算、函数运算等 控制结构 顺序结构 选择结构 循环结构,第2章 C语言的基本控制结构,2,算法的图形表示,流程图图形元素,算法的描述,3,用流程图表示算法,4,用N-S图表示算法,5,2.1 顺序结构,顺序结构是指按照语句的书写顺序依次执行每条语句的语句结构,语句格式: ,6,赋值运算,基本的赋值运算 x = y + 100 ; x = x+10 ; = 是赋值号(赋值运算符),不是等号 赋值号左侧必须是已定义的变量名不能是表达式 右侧表达式中的每个因子项必须有明确的值 若右侧表达式的结果与左侧变量的类型不一致,编译器将会把表达式结果的类型转换成左侧变量的类型 赋值运算的结果是表达式的结果 赋值运算为右结合:a=b=c=d=5;,7,例1-4:根据给定的圆半径,计算圆的面积和周长,#include main( ) float radius, area, perimeter; radius = 20; area = radius*radius*3.14159; perimeter = 2*radius*3.14159; printf(“The radius of the circle is %fn“, radius); printf(“The area of the circle is %fn“, area); printf(“The perimeter of the circle is %fn“, perimeter); ,8,复合赋值运算 格式: 变量名 运算符= 表达式 等价于 变量名=变量名 运算符 表达式 例如:a+=5; 等价于 a=a+5; a-=5; 等价于 a=a-5; a*=5; 等价于 a=a*5; a/=5; 等价于 a=a/5; a%=5; 等价于 a=a%5;,9,2.2 选择结构,选择结构是指根据某种条件选取不同操作的处理方式 选择结构两个基本部分组成 对选择条件的描述 对处理分支的描述,10,关系运算与逻辑运算,关系运算符,如果关系运算的结果为1,表示“真” 如果关系运算的结果为0,表示“假” 字符型数据用它们的ASCII码进行比较,11,关系表达式 关系表达式是用关系运算符将两个表达式连接起来的式子 关系表达式的值是0 或 1,关系表达式 表达式的值 A a 假(0) 3 8 假(0) 5.2 != 4.1 真(1) m = M 假(0) x y 取决于x 和 y 的值 a+bb+c 取决于a、b和c的值,12,举例,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,13,逻辑运算符 逻辑运算符的操作对象是逻辑值 C语言中0表示“假”,非0表示“真”,逻辑表达式 逻辑表达式的值为逻辑值(1或0) 在程序中应书写逻辑表达式的地方可以写其他表达式,C语言把它的值当作逻辑值处理 处理原则:表达式的值不为0则代表“真” 为0则代表“假”,14,举例,若有 int a = 4, b = 5; 则 !a 的值为0(假) a ,15,举例,运算符的优先次序,16,举例,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),17,运算符与表达式小结,运算 操作对象 运算结果 算术运算 数值型 数值型 (其他类型也作为数值) 关系运算 表达式 0(假)或1(真) (不同类型按数值比较) 逻辑运算 表达式 0(假)或1(真) (均按真(非0)或假(0)处理) 赋值运算 表达式 表达式值放入变量,18,格式一 if ( ) ,if 语句,19,格式二 if ( ) else ,if 语句,若每个分支含有多条语句,则应用 括起,20,#include main( ) int input, output; printf( “nEnter a integer:” ); scanf( “%d”, ,例2-1 分析整数绝对值的计算过程,21,#include main( ) int x, y; printf( “nEnter 2 integers:” ); scanf( “%d%d”, ,例2-2 通过键盘输入的坐标点,判断该坐标点处于第几象限,22,多路选择和switch语句运算,switch语句的语法格式,switch ( ) case : case : case : default : ,执行的基本过程,23,switch语句说明 所有的case常量不允许重复 在实际应用中,为使每个分支互不影响,在每个case分支的语句序列的最后加break语句,其作用是跳出switch语句,不再执行下面的case分支;否则将继续向下执行,而不再判断case常量,24,例2-3 输入一个格式为 x+y 的表达式,输出结果,#include main( ) double a, b, c; char op; printf( “n Enter a expression ” ); scanf( “%lf%c%lf”, ,25,switch语句中只有一个表达式,有多种取值(离散值),用于区分各种不同情况 嵌套if结构有多个表达式,表达式的值只当作“真”或“假”处理 在只有一个判断,但有多种可能性的情况下,才可以使用switch结构 当有多种不同条件需要判断时,应使用if的嵌套 if嵌套结构适用于所有多分支情况;switch语句只适用于特定的多分支情况,switch与嵌套if 的区别,26,作业,上机题 P59 本章习题 4 P59 上机练习 1 P61 编程题 1,27,2.3 循环结构,C语言中有3种循环语句 while 语句 for 语句 do-while 语句 循环都是有条件的,只有条件满足时才应该循环。当条件不满足时则应停止循环。因此在循环体中,或循环语句本身应能够改变循环条件。 可以用break语句从循环中跳出,28,语法格式 while ( ) ,while 语句,循环中的语句也称为“循环体” 若循环体中含多条语句,则应用 括起,思考题 : 循环体有可能一次都不执行吗?,29,分析 若用1000个变量存放1000个数太烦琐。每个数只用一次(累加),不必保存,只需保存累加和与数据的个数 一个变量保存累加和;一个变量接受键盘输入的数;一个变量用于计数 思路 在循环中每次输入一个数据,立即累加起来,同时计数,1000次后停止循环 循环之后用累加和除以1000,例2-5:从键盘输入1000个整数,计算它们的平均值,30,#include main( ) int sum = 0, k = 1, x; printf( “nEnter 1000 integers:” ); while( k = 1000 ) scanf( “%d”, ,要点 用于累加的变量sum在循环中使用了自己上一次的值,所以要在循环之前赋初始值,31,while 语句的特点,表达式为“真”则执行循环体一次;为“假”则结束循环 先判断表达式的值,后执行循环体 循环体内应有改变循环条件的语句,并且有机会执行 如果循环中使用的某些变量需要有初始值,则初始值的赋值应在while语句之前完成,32,for 语句,语法格式 for ( ; ; ) ,33,for (表达式1;表达式2;表达式3) 循环体,for 循环语句个部分的含义,只在循环开始时计算一次,用于设置初值,在每次执行循环体之前计算,根据计算结果决定是否执行循环体,是循环的条件,在循环中反复执行的程序内容,在循环体执行完一次后计算,用于修改循环条件,34,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中,思考题 : 循环体有可能一次都不执行吗?,35,分析 本题实际是求最大值 用一个变量存放最大值;一个变量接收键盘输入 思路 先假设1个当前最大值,再依次与其他字符比较,若某个字符更大,则以该字符为当前最大,继续与后面的字符比较,直到全部比较完毕,例2-6 从键盘读入5个字符,找出其中ASCII值最大的字符,将其输出10次,36,#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初始值必须有机会被实际的最大值取代,37,例B-1 从键盘读入一个整数n,计算并输出n!,#include main() int k,n; long s; s=1; printf(“Enter an integer:“); scanf(“%d“, ,思路 从1开始在循环中累乘 乘数每次加1,要点 在循环中每次用到了上次累乘的结果,在第1次累乘之前,应在循环前为s赋初始值 对于累乘,初始值应为1,38,for 语句的特点,表达式为“真”则执行循环体一次;为“假”则结束循环 先判断表达式的值,后执行循环体 循环体内不应有改变循环条件的语句,循环条件的改变通常由for中的“表达式3”来实现 如果在循环体内有改变循环条件的语句,则会与for中的表达式3同时起作用 循环中使用的某些变量需要有初始值时,可利用for中的“表达式1”实现 当已知循环次数时使用for循环比较方便,39,do while 语句,语法格式 do while ( ) ;,40,分析 输入的字符个数不确定,按回车后输入结束,所以程序中要判断输入的是否为回车符 需对输入的字符计数,字符不必保存 需要变量:一个用于计数;一个用于接收输入的字符 思路 在循环中输入字符 每次输入的字符都判其是否为回车符,若是,则结束循环 判输入的字符是否是数字,是则计数器变量加1,例2-7 从键盘输入一行字符,统计其中包含的数字字符个数,并输出,41,#include main( ) int ch, num = 0; printf( “Enter a line text:” ); do ch= getchar( ); if( 9 = ch ,要点 计数器num要赋初始值,且初始值为0 只有符合条件的字符才计数 判输入是否为回车符决定是否继续循环,42,do - while 语句的特点,先执行循环体一次,然后判断循环条件 表达式为“真”则循环 循环体内应有改变循环条件的语句,并且有机会执行 如果循环中使用的某些变量需要有初始值,则初始值的赋值应在do - while语句之前完成,43,while和do.while循环语句的区别,while语句先判断,后执行循环体 do.while语句先执行循环体,后做判断 while语句的循环体有可能一次也不执行 do.while语句的循环体至少执行一次 do.while语句的最后要有一个分号,44,三种循环语句的比较,三种循环都判断表达式的值,表达式为“真”时才执行循环体一次 while、for循环先判断循环条件,然后执行循环体一次;do while循环则先执行循环体一次,再判断条件 while和do while循环只判断条件,设置循环的初始状态的语句要写在循环之前;在循环体内要有改变循环条件的语句 for循环的初值设置和改变循环条件的语句都可以写在for语句中,而不必写在循环之前和循环之内,如果在循环体内有改变循环条件的语句,则会与for中的表达式3同时起作用,例2-8:输入一个整数n,打印输出一个由n个字符星号*组成的等腰三角形; 例如,当输入4时,输出如下所示的三角形,循环语句应用实例,* *_* *_*_* *_*_*_*,分析 三角形的行数为n 每行第1个字符的位置不同(前面的空格数不同) 每行第1个和最后1个字符为“*” 其他字符由“_”、“*”相间排列 第 i 行有 i 个“*”,i-1个“_” 思路 2层循环,外循环改变行,循环n次; 内循环输出每行的字符 内循环的循环次数与行数有关 内循环要考虑输出不同的字符,46,#include main( ) int n, i, j; printf( “Enter the side of the triangle:” ); scanf( “%d”, ,* *_* *_*_* *_*_*_*,47,循环语句小结,循环都是有条件的,只有条件满足(表达式为“真” )时才执行循环体一次;当条件不满足时则停止循环。因此在循环体中,或循环语句本身应能够改变循环条件 有3种循环语句 for 语句、 while 语句、 do-while 语句 for 、 while 先判断循环条件,后执行循环体; do while 先执行循环体一次,再判断条件 while和do while 只判断条件,设置循环初始状态的语句要写在循环之前,在循环体内要有改变循环条件的语句 for循环的初值设置和改变循环条件的语句都可以写在for语句中,而不必写在循环之前和循环之内 可以用break语句跳出循环,48,本章作业,自测题 P58 本章习题 1、2、3 P56 本章自测题 一、选择题,二、填空题 上机题 P56 上机练习2 P57 编程题2,49,分析 本题与例2-5类似。每个数只用一次,不必保存,只需保存累加和与满足条件的数据的个数 一个变量保存累加和;一个变量接受键盘输入的数;一个变量用于计数 思路 在循环中每次输入一个数据,若是偶数则累加起来,并计数,100次后停止循环 累加和除以偶数的个数 用判断一个数除以2的余数是否为0的方法判断该数是否为偶数,P55-6 从键盘输入100个整数,统计其中偶数的平均值,50,#include #define N 100 (或10个) main( ) int x,k,sum=0,n=0; for(k=0;k0) printf(“%fn“,1.0*sum/n); ,要点 用求余数的方法判断是否为偶数 只对偶数累加、计数 在循环内累加、计数;在循环后求平均 累加器、计数器要在循环之前赋初值 累加器、计数器的初值为0 要考虑所有数都不符合条件的情况,51,P55-8 从键盘输入1个正整数,判断是否为素数,分析 用素数的定义来判别,用2x/2试除x,若都不能整除,则x是素数,否则不是素数 一次试除成功(不能整除),并不能说明x是素数,只有所有试除都成功,才能断定x是素数;但一次试除失败(能整除),则可断定x不是素数 思路 在循环中进行试除 若某次试除失败,则结束循环,输出“不是素数” 若试除完毕,均未出现失败,则输出“是素数” 即:有2种情况结束循环(均应反映在循环条件中) 试除失败(非正常结束循环) 正常结束循环 循环结束后判是哪种情况,输出相应信息,52,#include main( ) int x,k,yes; yes=1; k=2; printf(“Enter an integer(1):“); scanf(“%d“, ,要点 yes=1表示是素数;yes=0表示不是素数 先假定x是素数,再试图否定它,若不能否定,则x是素数 当某次试除失败,要令yes=0 yes=1的赋值要在循环之前完成,53,P55-9 输出100以内所有素数,每行5个,分析 在上例基础上令x从2变化到100即可(增加一层循环) 输出改为只输出素数,对每行输出进行计数 思路 增加一层循环(外循环),循环变量x从2到100 增加一个计数器,控制每行输出个数,54,#include main( ) int x,k,yes,n=0; for( x=2; x100; x+) yes=1; k=2; while(k=x/2 ,要点 外循环改变x n的变化与循环无关(单独计数) n到5后除输出回车符外,还要把n清0 注意缩进,55,使用if-else应该注意的问题,在if中的每条语句后面都要有分号,但if ( )后面和else的后面不能有分号 else子句要与if 配对使用 当在if和else后面有多个操作语句时,要用花括号括起来构成复合语句, 后面不加分号,if (ab) x=a; y=b; else y=a; x=b;,if (ab) x=a; y=b; else y=a; x=b; ,if (ab) x=a; y=b; else y=a; x=b;,56,控制结构的嵌套,各种选择结构、循环结构可以自我嵌套,也可以相互嵌套 必须完整嵌套 选择结构嵌套其他结构 只能完

温馨提示

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

评论

0/150

提交评论