《C语言程序流程设计课件》由会员分享,可在线阅读,更多相关《C语言程序流程设计课件(36页珍藏版)》请在金锄头文库上搜索。
1、第三章 C 程序的流程设计 电子课件制作: 李秀梅1C语言程序流程设计3.1 算法算法的性质与组成要素算法的性质与组成要素算法的性质:就是进行操作的方法和步骤。算法的性质:就是进行操作的方法和步骤。算法的组成要素:算法的组成要素:操作:包括算术运算、逻辑运算、关系运算、函数运算、操作:包括算术运算、逻辑运算、关系运算、函数运算、位运算等;位运算等;控制结构:三种基本控制结构;顺序结构、选择结构、控制结构:三种基本控制结构;顺序结构、选择结构、循环结构;循环结构;算法的描述算法的描述流程图流程图伪代码与逐步细化的程序设计方法伪代码与逐步细化的程序设计方法2C语言程序流程设计C程序的三种基本结构顺
2、序结构;ABABP顺序结构选择结构APAP当 型 循 环直到型循环选择结构;循环结构;假真假真3C语言程序流程设计例1:三个数中取最大数;example1.c输入三个数a,b,c; 从a,b,c中找出最大值赋给max;输出max;调用 scanf 函数; 设计一个max3 函数;调用 printf 函数; 第一阶段第二阶段 第三阶段设计max3函数float max3(float a,float b,float c) float m; if (ab) m=a; else m=b; if(mc) m=c; return (m); 第四阶段设计 main 函数void main(void) flo
3、at a, b, c, max; printf(“intput 3 number a b c:”); scanf(“%f%f%f”,&a,&b,&c); max=max3(a,b,c); printf(“the max is: %fn”,max);4C语言程序流程设计3.2 用C语句描述算法C语言的语句用来向计算机系统发出指令。一语言的语句用来向计算机系统发出指令。一个语句编译后产生若干条机器指令。个语句编译后产生若干条机器指令。语句按功能分为两类:即语句按功能分为两类:即操作运算语句操作运算语句和和流流程控制语句;程控制语句;C语言只有可执行语句,无非执行语句;语言只有可执行语句,无非执行语
4、句;一个源文件由一个源文件由若干函数和预编译命令若干函数和预编译命令组成,组成,一个函数由数据定义部分和执行语句组成。一个函数由数据定义部分和执行语句组成。5C语言程序流程设计 C程序程序源程序文件源程序文件1源程序文件源程序文件 i源程序文件源程序文件n预编译命令预编译命令函数函数1函数函数n数据定义数据定义部分部分执行部分执行部分(语句)(语句)C程序的结构图程序的结构图6C语言程序流程设计C语句的分类语句的分类表达式语句;表达式语句;赋值语句;赋值语句; 如:如:i=1; y=sin(x););函数调用语句;函数调用语句; printf(“ hello,cn”);空语句;空语句; 只有一
5、个分号只有一个分号 ;逗号表达式语句;逗号表达式语句; 如:如: i=2, j=3; a=(a=6, a*3, a+3); 控制语句,共控制语句,共9种种: if()else (条件语句); for( ); while(); do while()(循环语句) continue(结束本次循环); break(中止执行 switch 或循环语句); switch (多分支选择); goto(无条件转向) return (函数返回);复合语句复合语句。7C语言程序流程设计表达式语句假(0)真(非0)1). if (表达式表达式) 语句语句1 else 语句语句2表达式语句1语句2假真2). if (
6、表达式表达式) 语句语句 二选一结构二选一结构3.3 选择型程序设计选择型程序设计8C语言程序流程设计ifelse 结构的应用结构的应用先对表达式进行判断,若为真(非先对表达式进行判断,若为真(非0),),就执行分结构就执行分结构S1;否则执行分结构否则执行分结构S2;可退化为简单的可退化为简单的 if 条件语句;条件语句;else 子句不能单独使用,只能作为子句不能单独使用,只能作为if 语句语句的一部分,与的一部分,与if 配对使用;配对使用;如果如果if 和和else 后面有多个操作语句,此时后面有多个操作语句,此时要用花括号要用花括号“ ”将几个语句括起来成为将几个语句括起来成为一个复
7、合语句。一个复合语句。9C语言程序流程设计/* 计算三角形的面积计算三角形的面积 example3.c */#include #include void main( )float a, b, c, s, area; printf(输入三角形的边长输入三角形的边长a, b,c: n);scanf(%f,%f,%f,&a,&b,&c);if(a+bc & b+ca & a+cb) s=0.5*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c);printf(area=%8.3fn,area);else printf(“ 此数据不能构成三角形此数据不能构成三角形n);10C语
8、言程序流程设计/* 逻辑表达式的应用逻辑表达式的应用, 判断闰年判断闰年. exam4.c 闰年的条件闰年的条件: 1) 能被能被4整除整除,不能被不能被100整除整除; 2) 能被能被4整除整除,又能被又能被400整除整除 */#include void main( ) int year; printf(input the year: ); scanf(%d,&year);/ if(year%4=0 & year%100) | year%400=0) if (year%4=0 & year%100 | year%400=0) printf(%d年年 是闰年是闰年n,year); else p
9、rintf(%d年年 不是闰年不是闰年n, year);11C语言程序流程设计ifelse 结构可以嵌套;结构可以嵌套;一般形式一般形式: if (表达式表达式1) if ( 表达式表达式2) 语句语句1 else 语句语句2 else if (表达式表达式3) 语句语句3 else 语句语句4;不平衡的不平衡的ifelse 结构会增加阅读和理解程序的困难;结构会增加阅读和理解程序的困难;正确的缩进格式有助于理解,但程序的语法关系与正确的缩进格式有助于理解,但程序的语法关系与书写格式无关;书写格式无关;从最内层开始,从最内层开始,else 总是与它上面最近的(未曾匹总是与它上面最近的(未曾匹配
10、的)配的)if 配对。配对。ifelse 不匹配时,适当增加花括号可保证逻辑关系不匹配时,适当增加花括号可保证逻辑关系的正确性;的正确性;12C语言程序流程设计如 x=0,y=1,z= 2;判断1)和2)的 z的结果;example5.c1) if (x ) if ( y) z=y;else z= -y;2) if (x ) if ( y) z=y; else z= -y;13C语言程序流程设计if (条件条件1) S1else if (条件条件2) S2else if (条件条件n) Snelse Sn+1switch(整型表达式整型表达式) case (常量常量1):): S1 case
11、(常量常量2):): S2 case (常量常量n): Sn default: Sn+1switch语句语句else if 语句语句多选一(多分支选择结构)多选一(多分支选择结构)14C语言程序流程设计表达式1表达式2表达式3表达式4语句3语句4语句2语句13). if (表达式表达式1) 语句语句1 else if (表达式表达式2) 语句语句2 else if (表达式表达式3) 语句语句3 else 语句语句n假假假假真真真真语句5 多选一结构多选一结构15C语言程序流程设计else if 结构的应用结构的应用该结构执行时,依次对各个条件进行判断该结构执行时,依次对各个条件进行判断测试,
12、符合某一条件就转去执行该条件后测试,符合某一条件就转去执行该条件后面的操作,其它部分将被跳过;如无一条面的操作,其它部分将被跳过;如无一条件为真,就执行件为真,就执行else 后面的操作;如最后后面的操作;如最后else 不存在,该结构就不执行任何操作。不存在,该结构就不执行任何操作。16C语言程序流程设计例:求二元一次方程的根算法设计:当 时,方程无解;当 时,方程由一个实根 -c/b;当 时,方程有二实根;当 时,方程有二虚根;第一种方法: 用if 语句嵌套;第二种方法:用else if 语句Example7.c17C语言程序流程设计例:求二元一次方程 的根二实根;二虚根; 令:Examp
13、le7.c则方程的根可表示为:18C语言程序流程设计void Equation(int a, int b, int c) / if 嵌套 float p,q; int det; if(a = 0) if(b = 0) printf(no root due to input errorn);else printf(the single root is: %fn, -(float)c/b); else det=b*b-4*a*c; p=b/(2.0*a);if( det0) q=sqrt(-det)/(2.0*a); printf(complex root, x1=%.3f+%.3fi, x2=%
14、.3f-%.3fin, p,q,p,q);else q=sqrt(det)/(2.0*a); printf(real root,x1=%.3f, x1=%.3fn,p+q,p-q); 19C语言程序流程设计/ else if 结构 void Equation(int a, int b, int c) float p,q; int det; if(a = 0 & b=0) printf(no root dute to input errorn); else if(a=0 & b!=0)printf(the single root is: %fn, -(float)c/b); else det=b
15、*b-4*a*c; p=b/(2.0*a);if( det0) q=sqrt(-det)/(2.0*a); printf(complex root, x1=%.3f+%.3fi, x2=%.3f-%.3fin,p,q,p,q);else printf(real root,x1=%.3f, x1=%.3fn,p+q,p-q); 20C语言程序流程设计作业题:设计一个计算作业题:设计一个计算5次样条函数的程序次样条函数的程序21C语言程序流程设计循环结构循环结构循环结构的组成:循环结构的组成:进入循环条件;进入循环条件;循环体;循环体;退出循环条件;退出循环条件;循环结构的形式:循环结构的形式:w
16、hile 结构:结构:dowhile 结构;结构;for 结构;结构;3.4 循环型程序设计循环型程序设计22C语言程序流程设计循环结构的两种算法:循环结构的两种算法:穷举穷举对问题的所有可能状态一一测试,直到找到对问题的所有可能状态一一测试,直到找到解或将全部可能状态都测试过为止;解或将全部可能状态都测试过为止;两种控制方法:两种控制方法:计数法:先确定循环次数,完成测试次计数法:先确定循环次数,完成测试次数后,循环结束。数后,循环结束。标志法:达到某一目标后,使循环结束。标志法:达到某一目标后,使循环结束。 如录取新生;白钱买百鸡问题;搬砖问题;如录取新生;白钱买百鸡问题;搬砖问题;迭代迭
17、代迭代是不断由旧值推出变量的新值的过程。迭代是不断由旧值推出变量的新值的过程。 如人口增长问题;如人口增长问题; 兔子繁殖问题;方程求解等兔子繁殖问题;方程求解等问题;问题;23C语言程序流程设计While 结构的应用结构的应用While的一般形式:的一般形式: While(表达式)表达式) 循环体语句循环体语句While 语句的执行步骤:语句的执行步骤:(1)求表达式的值,若非零,执行()求表达式的值,若非零,执行(2),若值为),若值为零,执行(零,执行(4););(2)执行循环体内语句;)执行循环体内语句;(3)转向执行()转向执行(1););(4)结束)结束While循环,执行循环体后
18、的语句;循环,执行循环体后的语句;当循环体包含一个以上语句时,应用花括号括起当循环体包含一个以上语句时,应用花括号括起来,成为一复合语句;来,成为一复合语句;注意循环的边界值;注意循环的边界值;24C语言程序流程设计/* 爱因四坦的阶梯问题; example11.c 条件:ladder%2=1, ladder%3=2 ladder%5=4, ladder%6=5, ladder%7=0*/#include void main()int ladder=7;while(ladder%3!=2 | ladder%5!=4 | ladder%6!=5) ladder += 14;printf(flig
19、ht of step = %dn,ladder); 25C语言程序流程设计例2:百钱买百鸡问题。鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何?解题基本思路:不定解方程:三个变量的取值范围:cock: 019 中的整数;hen: 033 中的整数chick: 0100 中的整数满足不定解方程即为解(1)(2)或:cock: 019 中的整数; hen: 033 中的整数 chick=100 -cock-hen 满足方程(2)即为解26C语言程序流程设计/* 百钱买百鸡问题; example2.c条件:cock+hen+chick=100; cock*5+hen*3+
20、chick/3=100; cock= hen= chick= ? */#include void main() int cock=0, hen, chick; while(cock = 19) hen=0;while(hen = 33) chick=100-cock-hen; if(cock*5+hen*3+chick/3 = 100 & chick%3=0) printf(cock=%d, hen=%d, chick=%dn,cock,hen,chick); hen+;cock+; 27C语言程序流程设计for 结构的应用结构的应用一般形式:一般形式:for(表达式表达式1; 表达式表达式2
21、; 表达式表达式3) 循环体语句循环体语句执行步骤如下:执行步骤如下:(1)计算表达式)计算表达式1;(2)计算表达式)计算表达式2,若值非,若值非0,执行(,执行(3);若);若值为值为0,执行(,执行(6););(3)执行循环体语句;)执行循环体语句;(4)计算表达式)计算表达式3;(5)转向执行()转向执行(2););(6)结束循环,执行循环体外面的语句;)结束循环,执行循环体外面的语句;for28C语言程序流程设计/* 打印九九乘法表 example13.c P91 */#include void main()int i, j;for(i=1; i=9; i+)printf(%6d,i
22、);printf(n);for(i=1; i=54; i+)printf(-);printf(n);for(i=1; i=9; i+) for(j=1; j=9; j+) printf(%6d,i*j); printf(n);29C语言程序流程设计三种循环语句的异同循环变量的初始化位置不同;while和for循环是先判断表达式,后执行循环体语句;两种循环可以相互替代;都可以用break语句跳出循环,执行循环体后面的语句;用continue语句结束本次循环;例:爱因四坦的阶梯问题; example12.c30C语言程序流程设计3.5 限定流程转向语句break 语句;把流程从所在的循环结构或多路
23、选择结构之后,终止执行该结构。continue 语句;提前结束本次循环,然后再根据循环条件判断是否进入下次循环。函数调用和返回函数调用使流程转向所调用的函数体;return 语句的功能使流程返回主调函数;goto 语句;使流程无条件转向标号指定的语句;破坏程序的结构性,一般禁用。31C语言程序流程设计#include #include void main() int i; double e,a,e0=1e-10; for(i=1, a=1.0, e=1.0; ;i+) a/= i; e+= a;if(fabs(a)e0) break;printf(e=%lfn,e);32C语言程序流程设计C基
24、本语句一览33C语言程序流程设计循环结构应用举例兔子繁殖问题;(fibonacci数列)example14.c人口增长问题; example15.c用梯形法求数值积分; example16.c搬砖问题;example17.c判断素数问题; example18.c求两个正整数的最大公约数;example19.c印度国王的赏赐: example20.c34C语言程序流程设计1.1.设计一个用梯形积分法求定积分设计一个用梯形积分法求定积分 的函的函数,数,a,b,及等份数及等份数n在执行过程中由键盘赋在执行过程中由键盘赋值,并计算的值,并计算的 值。值。 2.2.有一分数序列:有一分数序列: 求出这个数列的前求出这个数列的前20项之和。项之和。 作作 业业 题题35C语言程序流程设计作业题:利用下列公式编写一个计算作业题:利用下列公式编写一个计算 B样条函数及其导数和积分的程序。样条函数及其导数和积分的程序。其中:其中:36C语言程序流程设计