第二章_C语言程序的基本结构_第1页
第二章_C语言程序的基本结构_第2页
第二章_C语言程序的基本结构_第3页
第二章_C语言程序的基本结构_第4页
第二章_C语言程序的基本结构_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

第二章C程序的基本结构 第二章C程序的基本结构 2 1分支结构2 2关系运算和逻辑运算2 3循环结构2 4break和continue语句2 5goto语句2 6经典算法举例 2 1分支结构 为什么需要分支结构顺序结构只能解决一些简单的问题 遇到需要进行条件判断的问题 就必须采用分支结构来处理 例 请输出2个数中的较大的数 2 1 1单分支结构 语法形式if 表达式 语句 执行过程先计算表达式的值 若为真 非0值 则执行其后的语句 若值为0 则继续向下执行其他语句注意 语句可以是一条 也可以是多条 例1 输入一个字符 并输出 其中有一个条件是如果该字符是小写的英文字母 则需把它转换成大写字母再输出 includevoidmain charch ch getchar if ch a 如果条件满足后还想再输出该字母的前导字符和后继字符怎么做 includevoidmain inta b t printf inputa b scanf d d 例2 输入2个整数 按由小到大的顺序输出 例3 输入三个整数 把最大的输出 includevoidmain inta b c max printf inputa b c scanf d d d 作业 输入3个整数 按由小到大的顺序输出 2 1 2双分支结构 语法形式if 表达式 语句1 else语句2 执行过程先计算表达式的值 若为真 非0值 执行if后的语句1 若为假 值为0 执行else后的语句2 includevoidmain intx y printf inputx y scanf d d 例4 输入2个整数 请输出其中的较大的数 例5 编程求解函数 includevoidmain intx y printf inputx scanf d 2 1 3多分支结构 语法形式if 表达式1 语句1 elseif 表达式2 语句2 elseif 表达式3 语句3 elseif 表达式n 语句n else语句n 1 执行过程按顺序求各表达式的值 如果某一表达式的值为真 非0 那么执行其后相应的语句 执行完后整个if语句结束 其余语句则不被执行 如果没有一个表达式的值为真 那么执行最后的else语句 最后的else部分可有可无 例6 编程求解函数 include includevoidmain doublex y printf Inputx scanf lf 写成elseif x 3 可以吗 2 1 4if语句的嵌套 概念 指if语句的if块或else块中 又包含一个if语句 可以是各种形式的 作用 对复杂条件进行判断 实现多分支选择形式 多种多样 1 if 表达式1 if 表达式2 语句 2 if 表达式1 语句1elseif 表达式2 语句2 3 if 表达式1 语句1elseif 表达式2 语句2else语句3 4 if 表达式1 if 表达式2 语句1else语句2 二义性 规定 else总是与它前面最近的且未曾配对的if配对 1 if 表达式1 if 表达式2 语句1 else 语句2 2 if 表达式1 if 表达式2 语句1 else 语句2 对第4种形式可以有两种理解方式 要想实现这种方式应该怎么做 if 表达式1 if 表达式2 语句1 else语句2 例7 编程求解函数 程序1 if x 0 y 1 elseif x 0 y 0 elsey 1 程序2 if x 0 if x 0 y 1 elsey 0 elsey 1 程序3 y 1 if x 0 if x 0 y 1 elsey 0 改正程序3 y 1 if x 0 if x 0 y 1 elsey 0 关于if语句的说明 表达式一般为关系表达式或逻辑表达式 但在C语言中它也可以是任意的数值表达式 语句1 语句2 等是if语句的 内嵌语句 是if语句中的一部分 每个语句都要以 结束 else只能与if配对使用 仅else本身不能单独作为一个语句使用 if 3 n 1 if a printf d a if n 3 3 x 1 elsex 1 if x 5 y x elsey 2 x 1 if x 5 y x elsey 2 x 1 将出现语法错误 关于if语句的说明 续 If后的语句可以是一个语句也可以是若干个语句 这时要用花括号括起来构成复合语句 注 复合语句的花括号后不能再写分号 复合语句在语法上是一个整体 相当于一个语句 例 if a b t a a b b t 2 1 5条件运算符 条件运算符 C中唯一的三目运算符 优先级 高于赋值运算符结合性 右结合条件表达式的形式 表达式1 表达式2 表达式3执行过程首先求表达式1的值 若为真 非0 则求表达式2的值 且整个表达式的值为表达式2的值 若表达式1为假 0 则求表达式3的值 且整个表达式的值为表达式3的值 说明条件表达式不能完全取代if语句 只有在if语句中内嵌语句为赋值语句 且两个分支都给同一个变量赋值时才能代替if语句 条件表达式中 表达式1 表达式2和表达式3的类型可以不同 若表达式2和表达式3类型不同 则整个条件表达式的值应为二者中较高的类型 例 x a b a b 1 x a b a b 1 a b a c d c d a b a c d c d if a b max a elsemax b max a b a b x 2 1 1 1 5值为1 0 x 1 a 10值为97 例8 输入一个字符 如果是大写字母 转换为小写 如果不是则不转换 输出最后得到的字符 includevoidmain charch scanf c 2 1 6switch语句 请将输入的百分制成绩 转换成五分制成绩输出 转换标准如下 对于这种类型的问题 需要讨论的情况比较多 如果用if嵌套的层次会比较多 程序可读性不好 这时通常会使用多分支选择语句switch 语法格式switch 表达式 case常量表达式1 语句1 case常量表达式2 语句2 case常量表达式n 语句n default 语句n 1 执行过程先计算表达式的值 测试该值是否与某常量表达式的值相同 若有相同者 流程转向其后面的语句执行若无 再看有没有default部分 若有default 则执行其后面的语句 若无default 则switch语句什么也不做 流程转向其后继语句 例 includevoidmain intk scanf d if k 1 printf Executingcase1 n elseif k 2 printf Executingcase2 n elseif k 3 printf Executingcase3 n elseprintf Executingdefault n includevoidmain intk scanf d 说明switch后的表达式一般多为整型或字符型表达式各个case后常量表达式的值必须互不相同各个case和default的出现次序不影响执行结果 case后的语句为复合语句时可省略花括号 case后常量表达式只起语句标号的作用 每个case之后通常都有一个break 使流程跳出switch语句多个case可以共用一组执行语句switch语句可以嵌套 但有多层switch语句时 break只能退出本层的switch语句体 case6 case7 printf Reset n break 但不能写成 case6 7 例9 将输入的百分制成绩s 转换成五分制成绩输出 includevoidmain intgrade printf inputgrade scanf d 2 2关系运算和逻辑运算 关系运算符 x 3 a y 1 x a 例 c a b等价于c a b a b c等价于 a b ca bc等价于a b c 注意 字符数据按其ASCII码值进行比较 a b 避免2个实数作 或 的比较允许写成3 x 6这样吗 在数学上表示什么 当x取不同值时 该表达式 逻辑运算符 结合性 是右结合性 和 是左结合性优先级 由高到低为 高于关系运算符 和 低于关系运算符逻辑表达式 用逻辑运算符连接关系表达式或逻辑量而成的式子值 只有两种 逻辑真 或 逻辑假 结果 以数值1代表 真 以数值0代表 假 进行判断时 非零值代表 真 零值代表 假 例 表示x 1 1 区间 应写为 x 1 x 1 非 算术运算符关系运算符 和 赋值运算符 高 低 逻辑运算的真值表 ab a ba ba b非0非00011非0001010非01001001100 注意 a和b可以是任意表达式 在判断逻辑量的真假时 用非0代表真 0代表假 而在判断逻辑运算的结果时 用1代表真 0代表假 例 写出满足下列要求的表达式ch是小写英文字母 答案 ch a ch a ch A ch Z x为零 答案 关系表达式 x 0或答案 逻辑表达式 xx不为零答案 x 0或x例 判断某一年是否是闰年 判断条件 能被4整除 但不能被100整除 或能被4整除 又能被400整除 在逻辑表达式的求解中 并不是所有的逻辑运算符都被执行 只是在必须执行下一个逻辑运算符才能求出表达式的解时 才执行该运算符 例 a 2 3循环结构 请编程求解以下2个问题 请在屏幕上输出10行星号 每行星号由8个 组成 请输出1 10这十个整数 includevoidmain printf n printf n printf n includevoidmain printf d 1 printf d 2 printf d 10 使每个语句形式上保持一样 改为 inti 1 printf d i i printf d i i printf d i i C语言有三种循环语句 while语句 当型循环do while语句 直到型循环for语句 功能强大 经常使用 while循环语法形式 while 表达式 语句 执行过程 见图 用循环怎么实现上述两个程序 includevoidmain inti i 1 while i 10 printf n i includevoidmain printf n printf n printf n includevoidmain inti i 1 while i 10 printf d i i includevoidmain printf d 1 printf d 2 printf d 10 如果输出1 100呢 怎么改 使用while语句要注意 表达式中使用的循环控制变量必须赋初值表达式必须用 括起来循环体为多条语句时 必须用 把它们括起来循环体中必须有使循环趋向结束的语句 includevoidmain inti i 1 while i 10 printf n i 例10 求1 2 3 100的和 includevoidmain inti sum sum 0 i 1 while i 100 sum sum i i printf sum d n sum 变量i一方面用来控制循环次数 同时又作为求和运算中的一个运算对象 计算1 2 3 n n为任意正整数 和 例 计算1 3 5 n n为奇数 的和 例11 求某个班英语成绩的平均分 该班学生人数和每个学生的成绩由键盘输入 includevoidmain inti n floats sum ave sum 0 i 1 scanf d do while循环语法形式 do语句 while 表达式 执行过程 见图 注意事项 同while 例12 用do while语句实现求1 100的和 includevoidmain inti sum sum 0 i 1 do sum sum i i while i 100 printf sum d n sum while循环和do while循环的比较 whiledo while 1 先判断条件再执行循环体 1 先执行循环体再判断条件 2 循环体可能一次也不执行 2 至少执行一次循环体 voidmain intsum 0 i scanf d voidmain intsum 0 i scanf d for循环语法形式for 表达式1 表达式2 表达式3 语句 执行过程 1 计算表达式1 只执行一次 2 计算表达式2 若值为真则执行循环体 再执行第 3 步 若值为假则结束循环 3 计算表达式3 再重复执行第 2 步 while和for while 表达式 语句 for exp1 exp2 exp3 语句 exp1 while exp2 语句 exp3 sum 0 i 1 while i 100 sum sum i i sum 0 for i 1 i 100 i sum sum i 例 将1 100求和的while循环转换为用for循环实现 例13 求正整数n的阶乘n n由键盘输入 includevoidmain intn i doublefact printf inputn scanf d 循环的嵌套 一个循环体内又包含另一个完整的循环结构 称为循环嵌套 内层的循环中还可以嵌套循环 构成多重循环 while while for for do do while while while for for do while while do while 例14 输出如图所示的矩形 includevoidmain printf n printf n printf n printf n includevoidmain inti 1 j while i 4 j 1 while j 5 putchar j putchar n i 内外层循环的控制变量不能重名 includemain inti j i 1 while i 4 for j 1 j 5 j putchar putchar n i includemain inti j for i 1 i 4 i for j 1 j 5 j putchar putchar n 例 上述程序用for实现 几种循环的比较C语言中的三种循环结构 一般情况下可以相互代替用while和do while时 循环变量的初始化应在while和do while之前完成 而for语句一般在表达式1中实现循环变量的初始化在循环的执行过程中 应不断的改变循环控制表达式的值 以便逐步形成使它为0的条件 否则将可能出现死循环三种循环可以相互嵌套 形成多重循环 外循环可以包含多个或多重内循环 循环之间可以并列但不能相交 并列的循环控制变量可以同名 但嵌套的循环控制变量不能同名不允许用其它的控制语句把程序流程从循环体外转入循环体内 但必要时可以用break goto等语句把流程从循环体内转到循环体外 break语句格式 break 功能 中止当前循环语句或switch语句的执行说明 若是多重循环 break只能使流程跳出离break最近的一层 break只用于switch语句和循环语句 2 4break语句和continue语句 例15 计算r 1到r 10时的圆面积 直到面积大于100为止 includevoidmain floatr area for r 1 r100 break printf 6 2f n area 输出结果 3 1412 5628 2650 2478 50 while break continue语句格式 continue 功能 提前结束本次循环体的执行 不再执行循环体中continue后面的语句 接着进行下一次是否执行循环的判定说明 continue语句只能用于循环语句中 它是一种具有特殊功能的转移语句 continue与break不同 continue语句只结束本次循环 而不是终止整个循环的执行 而break语句则结束整个循环 不再判断循环条件是否成立 例16 输入30个字符 统计其中数字字符的个数 includevoidmain inti sum 0 charch for i 1 i 9 continue sum printf d n sum while continue 例17 把10到20之间能被3整除的数输出 includevoidmain intn for n 10 n 20 n if n 3 0 continue printf d n 121518 判断m是否是素数可以让m被2 3 4 去除 若能被其中的任何一个整数整除 则证明不是素数 相反 若不能被其中的任何一个整数整除 则证明是素数 例18 输入一个大于3的正整数 判断该数是否为素数 include includevoidmain intm i k scanf d i k 1 例 如果要打印3 100之间的全部素数 怎么做 for m 3 m 100 m 2 k sqrt m for i 2 i k i if m k 0 break if i k 1 printf 5d m goto语句goto语句是一种使程序的流程无条件转移的语句一般形式为 goto语句标号 语句标号是由用户自行定义的标识符 由字母 数字 下划线组成 且第一个字符必须为字母或下划线 不能用整数来做标号 例如 gotolabel 1 goto123 goto语句的功能是无条件地跳转到语句标号所指定的本函数内的那条语句 2 5goto语句 例19 用if语句和goto语句构成循环 求1 100的和 includevoidmain inti sum i 1 sum 0 loop if i 100 sum sum i i gotoloop printf sum d n sum 例20 输出 组成的直角三角形 includevoidmain inti j for i 1 i 4 i for j 1 j i j putchar putchar n 特点 第i行有i个星号 2 6经典算法举例 例21 求Fibonacci数列1 1 2 3 5 8 的前20个数 includevoidmain inti f1 f2 f3 f1 f2 1 printf 8d 8d f1 f2 for i 3 i 20 i f3 f1 f2 f1 f2 f2 f3 printf 8d f3 if i 4 0 putchar n 分析数列的规律 从第3个数开始 每个数是其前两个数之和 输出结果 11235813213455891442333776109871597258441816765 例20 猴子吃桃问题 猴子第一天摘下若干个桃子 当即吃了一半 还不过瘾 又多吃了一个 第二天早上又将剩下的桃子吃掉一半 又多吃了一个 以后每天早上都吃了前一天剩下的一半零一个 到第10

温馨提示

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

评论

0/150

提交评论