1、第3章 C语言的基本控制结构,3.3 循环结构,3.2 选择结构,3.1 顺序结构,程序设计的一般方法,程序设计的一般方法可以概括为以下四个步骤: 一、 明确处理对象、选择算法 二、 画流程图 流程图用来表示各种操作的图框,用流程图表示的算法直观形象,便于编程。以下是常见的流程图符号: 三、 编写程序 四、 调试程序,例:已知三角形三条边,求三角形的面积 一.明确处理对象,选择适合的算法: 1 对象是三角形:边长,面积。 令a、b、c、area为浮点型变量, 分别存放边长和面积; 2 选择算法: 先保证三边构成三角形:两边之和 大于第三边; 再求面积: 其中s=(a+b+c)/2 二.画流程图
2、:见右图 三.根据流程图编写程序. 四.调试程序,基本控制结构,结构化程序设计的基本思想是: 任何程序都可以用三种基本结构的组合来实现。这三种基本结构都具有一个入口和一个出口。此外要限制无条伯转移语句(即goto语句)的使用。,3.1 顺序结构,顺序结构是指按照语句的书写顺序依次执行每条语句的语句结构。,3.2 选择结构,选择结构是指根据某些数据的取值或计算结果选取不同操作的处理方式。 选择结构的描述由两个基本部分组成,一是对选择条件的描述;二是对处理分支的描述。 C语言中的选择结构有两种:if语句和switch语句。If语句主要提供两个分支的选择,switch语句提供多分支的选择。,If语句
3、: if ( ) ,if ( ) else 例:if (p=0) printf(“方程有实数解n”); else printf(“方程无实数解n”);,if 语句,例3.2判断方程ax2+bx+c=0是否有实数解,其中a、b、c由键盘输入 #include void main() /*主函数无返回值时使用空类型void*/ float a,b,c,p,x1,x2; scanf (a=%f,b=%f,c=%f, ,例3.3由键盘输入x、y两个数,要求从大到小排序并输出 #include void main() float x,y,t; scanf (%f,%f, ,if 语句的嵌套,if语句可以
4、互相嵌套,即当if语句中的语句1或语句2是一个含if语句的复合语句时,形成if语句的嵌套。 if语句的嵌套常见形式有两种: 形式一:当语句2是if语句结构 形式二:当语句1是if语句结构,例3.4编写程序,输入一个x,按照函数要求输出y值 采用形式一的算法: #include main() int x,y; scanf (%d, ,例3.5同上例,采用形式二的算法 #include main() int x,y; scanf (%d, ,多路选择和switch语句 switch语句的语法格式如下: switch ( ) case : case : . case : default : 执行的基
5、本过程:首先计算充当开关角色的表达式;然后,根据计算结果进行控制的转移,即用开关值与下面每个case语句中的数值进行比较;如果开关值等于某个数值,则执行该case语句中的语句序列;如果不存在等于开关值的case常量,则执行default语句中的语句序列。,例:输入一个格式为 x+y 的二元算术运算表达式,输出这个表达式的计算结果。,#include main( ) double a, b, c; char op; printf( “n Enter a expression ” ); scanf( “%lf%c%lf”, ,在switch语句中,所有的case中的数值不允许重复。 在实际应用中,
6、经常将break语句作为每个case分支的语句序列的最后一条语句,以表示该分支的计算结束,并随后跳出switch语句,终止switch语句的继续执行。,3.3 循环结构,循环结构用于在给定条件成立时,反复执行某一个程序段 while 语句 语法格式: while ( ) ,例:从键盘输入10个整数,计算它们的平均值,#include main( ) int sum = 0, i = 1; int x; /* 保存当前输入的数据 */ printf( “nEnter 10 integers:” ); while( i = 0 ,getchar( )函数 从输入设备(如键盘)读取一个字符.,for
7、 语句 语法格式: for ( ; ; ) 执行过程:第一步执行初值表达式,第二步判断条件,第三步当条件成立时执行循环体中的语句,执行增量表达式,然后重复第二、三步直到条件不成立结束循环。,书例4.3 求1+2+3+100的结果,#include void main() int s,n; for(s=0,n=1;n=100;n=n+1) s=s+n; printf(1+2+3+ .+100=%dn,s); ,例4.4 判断一个数n是否素数,#include void main( ) int n,i=2; scanf(“%d”, ,Break语句 作用:立即结束循环,跳到循环体外,执行循环结构后
8、面的语句. Continue语句用于结束本次循环,接着进行下一次循环的判定.,循环的嵌套,一个循环语句的循环体内包含另一个完整的循环语句,称为循环的嵌套。while语句、do-while语句和for语句都可以互相嵌套,甚至可以多层嵌套。 循环嵌套时注意内循环变量的初始化问题。此外,break只能跳出一层循环(或者一层switch语句结构)。,书P53例4.6:输出下列图形: 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5 6 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 9 -*/ #include void main() int m,n; for (n=1;n=9;n=n+1) /*外循环控制打多少行*/ for (m=1;m=n;m=m+1) /*内循环控制每行打多少个字符*/ printf(“%-4d”,m); /*表示打印的字符有变量m的数值,且该数值是 占4个数字位的整型数,且靠左对齐*/ printf(n); /*一行结束需要换行*/ ,课后练习,1.运行调试书本各例题。 2.完成p36页举一反三题。 3.完成p58页学以致用(3)、(4)题。,