1、本人版权所有,盗版必究。目目录录C C语言程序设计初步语言程序设计初步数据描述与基本操作数据描述与基本操作C C程序的流程控制程序的流程控制函数函数数组数组指针指针结构体和共用体结构体和共用体位运算位运算文件文件综合应用综合应用第三章第三章 C程序的流程控制程序的流程控制3.1 算法3.2 用C语句描述算法3.3 选择型程序设计3.4 循环型程序设计3.1.1 算法的组成要素与基本性质算法的组成要素与基本性质1 1、算法的组成要素:、算法的组成要素:n操作n控制结构顺序顺序 选择选择 循环循环ABCCAAC假真真假真假BA4程序设计-2005秋3.2 用用C语句描述算法语句描述算法 语句语句
2、函数函数 文件模块文件模块 程序程序 (语句都以分号结束)(语句都以分号结束)5程序设计-2005秋5类类C语句语句n表达式语句表达式语句n赋值语句;函数调用语句;空语句;复合表达式语句n控制语句控制语句n条件语句 if()else if()n多分支选择语句 switchn循环语句for()while()do while()n限制转向语句限制转向语句nbreak中止循环或分支;ncontinue结束本次循环;nreturn从函数返回ngoto转移语句转移语句n其他:其他:n声明语句;n复合语句:把多个单语句用 括起来6程序设计-2005秋3.3 选择型程序设计选择型程序设计3.3.1-3.3.
3、2 ifelse结构结构一、一、功能功能:对表达式进行判断,若为“真”(非零),就执行if分结构(语句1);否则(值为0),就执行else分结构(语句2)。说明说明:表达式为关系表达式、逻辑表达式或数值数据;语句可为单句或复合语句。真真 假假if(表达式表达式)语句语句 1else语句语句 2语句 1语句 2表达式7程序设计-2005秋二、二、功能功能:若表达式为“真”(非零),则执行语句,否则执行 if 语句的下一语句。语句if (表达式表达式)语句语句表达式假假真真8程序设计-2005秋例:例:例1:键盘输入一个数,求其绝对值。例2:从键盘上输入两个数,求最大数。从键盘上输入三个数,求最大
4、数。例3:键盘输入某年,输出该年是否闰年。9程序设计-2005秋If(表达式表达式1)语句语句1else if(表达式表达式2)语句语句2 else if(表达式表达式3)语句语句3 .else if(表达式表达式n)语句语句n else 语句语句n+1If-else的嵌套:else总与最近的if匹配,层层对应。因此在if 中嵌套时最好有else语句,或用括号将内嵌的语句括起来。真假表达式1表达式2表达式n语句n+1语句n语句2语句1真真假假例:例:例:从键盘上输入一个学生三门课程的成绩,计算其平均成绩高于80分时,输出A;平均成绩在7080分之间,输出B;6070之间时,输出C;平均成绩不及
5、格(小于 60分)时,输出*。真假score=80score=70等级A真假输入scorescore=60等级B等级D等级C11程序设计-2005秋例:例:例:求一元二次方程ax2+bx+c=0的根。b=0输出“无解”输出单根:x=-c/b假真disc0输出两复数根 输出两实根真假a=0真假 disc=b*b-4*a*c12程序设计-2005秋3.3.3 switch语句语句导入:导入:例1:键盘输入数字月份,输出该月的英文。算法分析:输入月份判断某月输出该月英文开始结束13程序设计-2005秋格式一:格式一:switch(表达式表达式)case 常量表达式常量表达式1:语句块语句块1;bre
6、ak;case 常量表达式常量表达式2:语句语句块块2;break;.case 常量表达式常量表达式n:语句语句块块n;break;default:语句块语句块n+1;break;说明:说明:计算switch的表达式,并以此值去依次找与之匹配的case分支,找到后将流程转到该case 分支并执行后面语句块;找不到匹配的case分支,则执行default分支中的语句块。常量表达式为 int,char 型;各 case 分支中常量表达式值各不相同,各case分支的顺序可换;default分支可省略;case分支若为空,则匹配时分支若为空,则匹配时执行下一执行下一case分支,即多个分支,即多个 c
7、ase分支可公用分支可公用;switch语句可嵌套。switchswitch控制结构控制结构表达式语句块1常量表达式1语句块2常量表达式2语句块i常量表达式i:语句块n常量表达式n:语句块n+1defaultbreak;break;break;break;break;break;break;break;break;break;break语句必不可少吗?语句必不可少吗?14程序设计-2005秋格式二:格式二:switch(表达式表达式)case 常量表达式常量表达式1:语句块语句块1;case 常量表达式常量表达式2:语句语句块块2;.case 常量表达式常量表达式n:语句语句块块n;defau
8、lt:语句块语句块n+1;注意:注意:如果switch的判断表达式的值与case常量表达式i的值匹配,在执行后面的语句块i之后,并不立即退出switch结构,而是继续执行语句块i+1,语句块i+2,语句块n语句块n+1应用。如:将整数转换成字符串。表达式语句块1常量表达式1语句块2常量表达式2语句块i常量表达式i语句块n常量表达式n语句块n+1defaultswitchswitch控制结构控制结构15程序设计-2005秋例1:键盘输入数字某月,输出该月的英文。例2:键盘输入某年某月,输出该年该月有多少天。例3:键盘输入某年某月某日,输出这是该年第多少天。输入月份输入月份判断某月判断某月输出该月
9、英文输出该月英文开始开始结束结束16程序设计-2005秋思考题:n题1:给一个百分制成绩输出相应的成绩等级A、B、C、D、E。A:90-100;B:80-89;C:70-79;D:60-69;E:0-59n题2:编写一程序。在屏幕上显示一菜单,并根据用户的选择执行相应的功能。17程序设计-2005秋迭代:不断用新值代替旧值迭代:不断用新值代替旧值,或由旧值递推出新值的过程或由旧值递推出新值的过程.n迭代的要素:迭代的要素:n初值初值n迭代公式迭代公式n迭代次数或迭代终止标志迭代次数或迭代终止标志n例:n人口增长n兔子繁殖n一元方程的迭代解法3.4 循环型程序设计循环型程序设计3.4.1 迭代与
10、穷举算法迭代与穷举算法18程序设计-2005秋3.4.1 迭代与穷举算法(续)迭代与穷举算法(续)n穷举:对问题的所有状态都一一测试,直到找穷举:对问题的所有状态都一一测试,直到找到解或所有可能状态都测试过为止。到解或所有可能状态都测试过为止。n例:n录取新生n百钱买百鸡n搬砖19程序设计-2005秋3.4.2 while 结构结构while(表达式表达式)循环体循环体说明:说明:循环体中必须有语句能改变表达式的值循环体中必须有语句能改变表达式的值,否则死循环;否则死循环;循环体可为单句或复句。循环体可为单句或复句。表达式表达式循环体循环体真真假假20程序设计-2005秋例:例:例1:求1到1
11、00 的整数的和。例2:设有一张无穷大的纸,厚0.1mm,问对折多少次才能达到珠峰高度(8848m)?例3:爱因斯坦的阶梯问题例4:欧几里德算法求最大公约数例5:牛顿迭代法求平方根21程序设计-2005秋3.4.3 dowhile 结构结构说明:说明:n循环体中必须有语句能改变表达式的值,否则死循环;循环体中必须有语句能改变表达式的值,否则死循环;n循环体可为单句或复句;循环体可为单句或复句;n循环体至少执行一次循环体至少执行一次。表达式表达式循环体循环体真真假假do 循环体循环体 while(表达式表达式)22程序设计-2005秋3.4.4 for 结构结构for(表达式表达式1;表达式;表
12、达式2;表达式;表达式3)循环体循环体相当于:表达式2表达式1循环体表达式3初始化循环终止条件循环变量更值表达式表达式1;while(表达式表达式2)循环体循环体 表达式表达式3;真真假假23程序设计-2005秋说明:说明:表达式表达式2多为关系、逻辑表达式或数值、字符型数据,多为关系、逻辑表达式或数值、字符型数据,表达式表达式1、3可为赋值、逗号表达式等;可为赋值、逗号表达式等;表达式表达式1、3皆可省略,此时等价为皆可省略,此时等价为 while 语句语句,但分号不但分号不可省略。表达式可省略。表达式1、2、3都省略,即都省略,即 for(;)循环体循环体,相当于相当于 while(1)循
13、环体循环体,即死循环;,即死循环;表达式表达式3或循环体中必须有语句改变表达式或循环体中必须有语句改变表达式2的值,否的值,否则死循环。循环体为空语句时即则死循环。循环体为空语句时即 for(表达式表达式1;表达式;表达式2;);24程序设计-2005秋例:例:例1:求1到100 的整数的和。例2:设有一张无穷大的纸,厚0.1mm,问对折多少次才能达到珠峰高度(8848m)?例3:打印九九乘法表例4:兔子繁殖问题,fibonacci数列例5:梯形法求数值积分n累加求和:和置累加求和:和置0n累乘求积:积置累乘求积:积置125程序设计-2005秋例:打印九九乘法表打印九九乘法表。一级算法:二级求
14、精:打印表头;打印表头;for(i=1;i=9;i+)换行;换行;打印第打印第 i 行行;打印第打印第 i 行行:for(j=1;j=i;j+)/*打印第 j 个乘式*/printf(“%d*%d=%2d”,j,i,j*i);printf(“t”);例:(穷举穷举)张丘建张丘建算经算经“百鸡问题百鸡问题”:鸡翁值钱,鸡母值钱,鸡雏值钱。百钱买百鸡,问级翁、鸡母、鸡雏各几何?一级算法:一级算法:for(cock=0;cock=19;cock+)找满足方程组的找满足方程组的hen,chick;二级求精:二级求精:找满足方程组的找满足方程组的hen,chick for(hen=0;hen=33;he
15、n+)找满足方程组的找满足方程组的 chick;三级求精:三级求精:找满足方程组的找满足方程组的 chickchick=100-cock -hen;if(5.0*cock+3.0*hen+chick/3.0)=100.0)printf(“n%d cock%d hen%d chick”,cock,hen,chick);方程组方程组 cock+hen+chick=100 cock*5+hen*3+chick/3=100例:Fibonacci数列数列兔子繁殖问题兔子繁殖问题(迭代迭代)设有一对新生兔子,从第三个月开始,他们每月生一对兔子。按此规律,两年后有多少对兔子(假设无死亡)?分析:1、1、2、
16、3、5、8、13、21.从第三个月起,每月兔子数每月兔子数=上月老兔子数上月老兔子数+本月新生兔子数本月新生兔子数 lnow lold lborn 迭代关系:lold =lborn=1 lnow=lold+lborn3.4.5 循环结构的中途退出与重复周期的中途结束循环结构的中途退出与重复周期的中途结束1.break中途退出循环结构中途退出循环结构 格式:break;在switch语句终止某个case语句 结束本层本层循环。例0351:2.continue提前结束一个重复周期提前结束一个重复周期格式:continue;结束本次本次循环,开始下一次下一次循环。例0352:3.Goto语句 格式:
17、goto 标号;标号;跳转到标号处语句 标号:语句标号:语句例0353:假假表达式表达式1.while循环的下一语句循环的下一语句.表达式表达式2Break真真假假真真假假表达式表达式1.while循环的下一语句循环的下一语句.表达式表达式2continue真真假假真真While(表达式表达式1).if(表达式表达式2)break;While(表达式表达式1).if(表达式表达式2)continue;.循环小结:循环小结:循环次数已知与否:循环次数已知与否:循环变量初始值的赋值;循环变量初始值的赋值;结束循环的方式。结束循环的方式。31程序设计-2005秋1.有一函数 x (x1)y=2x-1
18、 (1x10)3x-11 (10 x)用 scanf 函数输入 x 的值,求 y 值。2.给一个不多于5位的正整数,要求:求出他是几位数;分别打印出每一位数字;按逆序打印出各位数字。(如:原数是134,则输出431)3.输入两个正整数,求其中最大公约数和最小公倍数。4.猴子吃桃问题.猴子第一天摘下若干桃子,吃了一半,不过瘾,又吃了一个;第二天又降剩下的桃子吃掉一半,又多吃了一个;以后每条都吃掉前一天剩下的一半零一个.到第十天想吃时,见只剩下一个桃子了.求第一天共摘了多少桃子.5.一球从100米高度自由落下,每次落地后发跳回原高度的一半,再落下。求它第10次落地时共经过多少米?第10次反弹多高?附:附:停止函数停止函数exit()nexit()说明:n返回值为0时,为正常停止;n返回值为非0时,为非正常停止,且返回值代表停止的错误类型。n要使用预编译命令:#include “stdlib.h”34程序设计-2005秋Thanks