版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、返回主目录,C语言程序设计,(第4章 结构化程序设计),本章主要介绍结构化程序设计方法与设计过程和C语言程序结构化程序设计。,1.顺序结构程序设计2.选择结构程序设计3.循环结构程序设计,一、C语言程序结构分类,C语言程序三大结构:顺序结构、选择结构、循环结构,按照各语句的先后顺序逐行执行,且每个语句都会被执行到。,当满足(或不满足)某个条件时不停地重复执行某些语句。,当满足(或不满足)某个条件时执行某些语句。,二、C语言程序基本语句,在C语言程序中,语句可以分为以下五类: 控制语句:能完成一定的控制功能(有9种控制语) if()else (条件选择语句) for() (多功能循环语句) wh
2、ile() (当型循环语句) dowhile() (直到型循环语句) go to (无条件转移语句) switch (多支选择语句) continue (结束本次循环语句) break (执行中止语句) return (函数返回值语句), 函数调用语句:能实现函数的调用功能。 例如:printf(%d,a); 表达式语句:由一个表达式加分号构成,能实现数据计 算功能。 例如:a=3*b; 空语句:由单独的一个分号组成,对程序执行不产生直 接影响,没有实际意义。 例如: ; 表示什么也不做,没有实际意义, 复合语句:用将若干个语句括起来,形成一个整体, 组成一个复合语句。 例如: a=3; b=
3、4; c=a*b+25; d=a*b*c; ,三、顺序结构程序一般设计方法,顺序结构程序设计方法: 一般先对要处理的“事件”进行分析,根据分析的结果写出相应算法,画出流程图,再写出相关的源程序。,在顺序结构程序中,一般包括以下几个部分:,#include stdio.h #include math.h main() float a,b,c,s1,len,s; printf(Input the a,b,c:); scanf(%f,%f,%f, ,例4-2输入一个摄氏温度,输出它的华氏温度。温度换算 公为 (f为华氏温度,c为摄氏温度),#include stdio.h main() float
4、f,c; printf(请输入一个摄氏温度值:); scanf(%f, ,例4-3 设圆的半径为r=1.5,圆柱高h=3,求圆柱表面积、圆柱体积。(圆半径、圆柱高从键盘输入,输出结果时要求小数点保留2位小数。),#include “stdio.h main() float r,h,ar,av; printf(输入半径和高); scanf(%f,%f, ,一、选择结构程序设计,在C语言中,用if语句或switch语句来实现选择结构,条件选择结构,多支选择结构,根据所给的条件作出判断,有选择性的执行部分语句。,根据所给的数据和已有的选择支相比较,执行相符合的选择支。,二、条件选择if语句,if语句
5、是用来判定所给的条件是否满足,根据判断的结果决定执行何种操作。 if语句有三种形式:if( ) if( )else if( )else if( )else,1. 逻辑if语句 格式:if(表达式) 语句,功能:当括号内表达式的值为“真”时,才能执行后面的操作,并且只能执行一个语句而不能执行若干个语句,如果括号内表达式的值为“假”时,将不执行任何操作。,例如: if(xy) a=x*y; if(xy) a=x-y; b=x+y;,例 4-4 输入三个整数x,y,z,按从小到大的顺序输出。,分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果xy则将x与y的值进行交换,后再用x与z进行比较
6、,如果xz则将x与z的值进行交换,这样能使x最小。,程序如下: #include stdio.h main() int x,y,z,t; printf(please input the three numbers:); scanf(%d,%d,%d, ,例如: if(xy) a=b; else a=c; if(ab) a=a+b; else t=a;a=b;b=t;,功能:当括号内表达式的值为“真”时,执行语句1的操作,否则,执行语句2的操作。同样,也只能执行一个语句而不能执行若干个语句。,2. 结构模块if( )else语句 格式:if(表达式)语句1 else 语句2,#include s
7、tdio.h main() int x,y; scanf(%d, ,if(x=0) y=x*x+1;,例4-6 写一程序,从键盘上输入年份year(4位以内十进制正整数),判断其是否为闰年。闰年的条件是:能被4整除、但不能被100整除,或者能被400整除。,#include stdio.h main() int year; printf(Please input the year:); scanf(%d, ,3. 结构模块ifelse if语句 格式: if(表达式1) 语句1 else if(表达式2) 语句2 . . . . . . . . . else if(表达式n) 语句n else
8、 语句n+1,功能:当表达式1的值为“真”时,执行语句1;如果表达式1的值为“假”,再判定表达式2是否为“真”,如果表达式2的值为“真”,执行语句2,如果表达式2的值为“假”,再判定表达式3是否为“真”,如果表达式3的值为“真”,执行语句3;以此类推;如果所有表达式的值都为“假”,则执行语句n+1。同样,也只能执行一个语句而不能执行若干个语句。,例如: if(x400) t=0.4;a=1.5; else if(x300) t=0.3;a=1.2; else if(x200) t=0.2;a=1.0; else t=0.1;a=0.8; ,例 4-7 有一函数:,编一程序,输入一个x值,求y值
9、。,#include stdio.h main() int x,y; scanf(%d, ,if(x0) y=x*x+1,注意: 在if语句中,括号内的表达式一般为关系表达式或逻辑表达式,如果括号内的表达式为其它表达式,则无法实现选择操作。 例如:if(2) print(“how are you”);该语句的输出结果为“how are you”,因为表达式的值为2,按“真”处理。 如果写成if(a) print(how are you);输出结果同样为“how are you”,因为表达式的值为a,还是按“真”处理。 在if语句中,每次只能执行一个语句或一个选择支,如果要执行多个语句,应当将这
10、些语句用 括起来,形成一个复合语句。 在if语句中,允许括号内存在赋值表达式。 例如 if(a=b)0) t=a; if语句在程序中相当一个复合语句。,4. 条件运算符与条件表达式,格式如下: 表达式1?表达式2:表达式3,功能:先算表达式1,若表达式1为“真”,则求解表达式2,此时表达式2的值就是整个条件表达式的值。若表达式1为“假”,则求解表达式3,此时表达式3的值就是整个条件表达式的值。,条件运算符是一个三目运算符,要求有三个操作数;结合方式是从右到左;优先级别很低,只比赋值运算符和逗号运算符高。,例如: 假定a=3,b=4,执行表达式mmx=ab?a+1:b+1后,mmx的值为5。 假
11、定a=3,b=5,c=2,d=3, 执行表达式mmx=ab?a:cd?c:d后,mmx的值为3。,例4-8 从键盘上输入一个字符,如果它是大写字母,则把它转换成小写字母输出;否则,直接输出。,#include stdio.h main() char ch; printf(Input a character: ); scanf(%c, ,思考题: 例 4-9 企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,
12、可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数。 例 4-10 从键盘上输入任意三个数作为三角形的三条边,求三角形的面积。,三、多支选择switch语句,C语言提供了switch语句直接处理多分支选择。 switch语句的一般形式为:,switch(表达式) case 常量表达式1:语句1;break; case 常量表达式2:语句2;break; . case 常量表达式:语句n;break; default:语句n+1; ,功能:先算出表达式的值,然后判断该表达式的值是否与某个
13、case后面的常量表达式的值相等,若相等,则执行此case后面的语句,当执行到break语句时,跳出switch语句。若该表达式的值与所有case后面的常量表达式的值都不等,则执行default后面的语句。,注意: switch后面括号内的表达式一般为普通表达式,可以是int、char和枚举型中的一种,不应为关系表达式或逻辑表达式,如果为关系表达式或逻辑表达式,就不能实现多支选择。 每个case后面常量表达式的值,必须各不相同,否则会出现相互矛盾。同时必须使case后面的常量表达式类型和switch后面括号内表达式的类型保持一致。, case后面的常量表达式仅起语句标号作用,并不进行条件判断。
14、系统一旦找到相匹配的标号,就从此标号开始执行,不再进行标号判断,因此,必须加上break语句来结束switch语句的执行。 各case及default子句出现的先后次序,不影响程序执行结果。 多个case子句,可共用同一语句。 一个switch语句在C语言程序中相当于一个复合语句。用switch语句实现的多分支结构程序,完全可以用if语句来实现。,例 4-11 从键盘上输入一个百分制成绩score,按下列原则输出其等级: score90,等级为A; 80score90,等级为B; 70score80,等级为C; 60score70,等级为D; score60,等级为E。,#include st
15、dio.h main() float score, int grade; printf(Input a score(0100): ); scanf(%f, ,case 6: printf(grade=Dn); break; case 5: case 4: case 3: case 2: case 1: case 0: printf(grade=En); break; default: printf(“data error !n); getch();,程序如下:,#include stdio.h void dummy() main() char ch; printf(1. 输入记录n); pri
16、ntf(2. 记录列表n); printf(3. 删除记录n); printf(4. 修改记录n); printf(请输入选择:n); ch=getchar( ); switch(ch) case 1: printf(输入记录n);,dummy( ); break; case 2: printf(记录列表n); dummy( ); break; case 3: printf(删除记录n); dummy( ); break; case 4: printf(修改记录n); dummy( ); break; default: printf(选择错!n); getch(); ,例 4-12 在显示器上
17、显示一个菜单程序的模型。,四、选择结构的嵌套,C语言程序中,可以在一个选择语句中嵌套一个或多个选择语句。,if(ab) if(cd) x=1; else if(ac) if(bd)x=2; else x=3; else x=6; else x=7;,if(ab) if(cd) x=1; else if(ac) if(bd)x=2; else x=3; else x=6; else x=7;,1. if语句可以实现多重嵌套 :,一般而言,确定if语句的嵌套次序的方法如下: else只能与其前面最近的if 配对。 每个else只能配对一次。配对后的if()else相当于一个复合语句。,例 4-13
18、 求方程 ax2+bx+c=0的根。,#include stdio.h #include math.h main() float a,b,c,x1,x2,delta,rel,ima; printf(Input the a,b,c:); scanf(%f,%f,%f, if(delta1e-6),printf(has two real roots:n); x1=(-b+sqrt(delta)/(2.0*a); x2=(-b-sqrt(delta)/(2.0*a); printf(x1=%8.4f, x2=%8.4f,x1,x2); if(fabs(delta)=1e-6) printf(has
19、two equal real roots:n); x1=(-b+sqrt(delta)/(2.0*a); x2=(-b-sqrt(delta)/(2.0*a); printf(x1=%8.4f, x2=%8.4f,x1,x2); if(delta-1e-6) printf(has two complex roots:n); rel=(-b)/(2.0*a); ima=sqrt(-delta)/(2.0*a); printf(x1=%8.4f+%8.4fi,rel,ima); printf(x2=%8.4f-%8.4fi,rel,ima); getch();,2. switch语句的嵌套:,ma
20、in() int x=1,y=0; switch(x) case 1: switch(y) case 0:printf(“*1*n”); case 1:printf(“*2*n”); case 2:printf(“*3*n”); ,思考题: 编写一个简单的财务应用程序来计算职工的所得的实际工资。 具体要求: 总工资=基本底薪+奖金。 高级职员:底薪2000元 ,奖金系数1.15 一般职员:底薪1500元 ,奖金系数1.10 办 事 员:底薪1000元 ,奖金系数1.0 利润100万,高出100万部分奖金提成1.5% 按国家要求扣税。 按国家要求扣养老金(占基本底薪8%)、医疗保险(占基本底薪6
21、%)、失业保险(占基本底薪5%)等。,循环结构程序设计,循环操作是指重复执行一组指令或一个程序段。 程序中存在两种循环:无条件的循环和有条件的循环。,无条件的循环是无休止地执行一组指令或一个程序段。,有条件的循环是在满足一定的条件下重复执行一组指令或一个程序段。,C语言提供以下4种语句构成循环结构 goto 语句标号; goto 语句标号; while 语句 while ( 表达式 ) 语句 do while 语句 do 语句 while ( 表达式 ) ; for 语句 for ( 表达式1 ; 表达式2 ; 表达式3 ) 语句,一、goto语句,C语言程序允许使用goto 语句来实现无条件
22、转移。 goto语句的一般形式为: goto 语句标号; 功能:跳转到语句标号所在处执行程序。 语句标号是C语言的标识符,由数字、字母、下划线构成,开头不能为数字,不能与关键字同名,最长不得超过31个字符。 语句标号在程序中只起一个标识作用,无其它含义。 例如:goto loop1; 注意:goto 语句是一个无条件转移语句,通常与if语句合一起使用,实现有条件的转移。,例 4-14 求1+2+3+100的和,#include stdio.h main() int i=1,sum=0; loop1:sum=sum+i; i+; if(i=100) goto loop1; printf(%d,s
23、um); ,注意:结构化程序设计方法,主张限制使用goto语句。因为滥用goto语句,将会导致程序结构无规律、可读性差。,如果程序中没有if(i=100),将出现死循环。,二、while语句,while语句是“当型”循环语句,常用来实现“当型”循环结构。,While语句的一般使用形式为: while(表达式) 语句,功能: 计算表达式的值,判断表达式的真假关系. 如果表达式的值为“假”时,则不执行循环体,中止循环,直接执行第步操作;如果表达式的值为“真”时,则执行循环体,重复第步操作。 执行循环体下面的其它语句。,表达式,循环体,真,假,循环体,循环体,循环条件,使用while语句应注意的地方
24、:,while( 表达式) 语句,1、循环条件一般为关系表达式或逻辑表达式。,2、如果循环条件为常量表达式,就会造成死循环或不循环。,3、如果循环体有两或两条以上语句时,应当用将其括起来,形成一个复合语句。,4、循环体中必须有能改变循环条件的语句存在,否则将出现死循环。,5、在C语言程序中,可以将一个while循环结构看成一个复合语句。,例4-14 求1+2+3+100的和,#include stdio.h main() int i=0,sum=0; while(i=100) sum=sum+i; i+; printf(%d,sum); ,构成循环的必要条件: 循环变量赋初值(如:i=0) 合
25、适的循环条件(如:i=100) 循环变量必须有变化(如:i+), while(i=100) sum+=i+;,while(i+=100) sum+=i;,while(+i=100) sum+=i;,例4-15 从键盘输入若干个整数求和,当和大于300时就停止输出。,#include void main() int x,sum=0; while(sum=300) printf(Input any x: ); scanf(%d, ,例4-16 编写程序求1!+2!+3!+20!的值,#include stdio.h main() float sum=0.0,j=1.0; int i=1; whil
26、e(i=20) j=j*i; sum=sum+j; i+; printf(%e,sum); ,三、dowhile语句,dowhile是“直到型”循环语句,用来实现“直到型”循环结构。,dowhile语句的一般使用形式为: do 语句 while(表达式); 功能: 执行一次循环体 计算表达式的值,判定其真假关系,如果表达式的值为“真”,则重复第步的操作;如果表达式的值为“假”,则退出执行。,表达式,循环体,真,假,循环体,循环体,循环条件,使用dowhile语句应注意的地方:,do 语句 while( 表达式),1、循环条件一般为关系表达式或逻辑表达式。,2、如果循环条件为常量表达式,就会造成
27、死循环或循环1次。,3、如果循环体有两或两条以上语句时,应当用将其括起来, 形成一个复合语句。,4、循环体中必须有能改变循环条件的语句存在,否则将出现死循环。,5、在C语言程序中,可以将一个dowhile循环结构看成一个复合语句。,例4-17 求1+2+3+100的和,#include stdio.h main() int i=1,sum=0; do sum=sum+i; i+; while(i=100) ; printf(%d,sum); ,从程序中可以看出dowhile语句是先循环,后判定,即使表达式的值为“假”,循环体也至少被执行了一次。,例4-18 求1*2*3*10的积,#inclu
28、de stdio.h main() long i=1,jc=1; do jc=jc*i; i+; while(i=10); printf(%ld,jc); ,例4-19 编写程序求1!+2!+3!+20!的值,#include stdio.h main() float sum=0.0,j=1.0; int i=1; do j=j*i; sum=sum+j; i+; while(i=20); printf(%e,sum); ,四、for语句,for语句是一种多功能循环语句,不仅可以用于循环次数已经确定的情况,也可以用于循环次数不确定而只给出循环结束条件的情况。,for语句的一般使用形式为:,fo
29、r(表达式1;表达式2;表达式3 ) 语句,循环体,功能: 先求解表达式1。 再求解表达式2,判定其真假关系,若表达式2的值为“假”,则不执行循环体,直接执行第步操作,若表达式2的值为“真”则执行循环体,再求解表达式3,重复执行第步操作。 执行循环体后面的其它语句。,表达式2,表达式1,循环体,表达式3,真,假,例4-20 求1+2+3+100的和,#include stdio.h main() int i,sum; for(i=0,sum=0;i=100;i+) sum=sum+i; printf(%d,sum); ,循环体,循环条件,使用for语句应注意的地方:,for(表达式1;表达式2
30、;表达式3 ) 语句, 一般而言,for语句中的表达式2应为关系表达式或逻辑表达式,表达式1与表达式3可以为其它表达式。如果表达式2为其它表达式,则可能出现死循环或不循环。 表达式1不参与循环,一般用于给参与循环的变量赋初值,表达式3要参与循环。 如果循环体是由多条语句构成时,应用 将循环体括起来,组合成一个复合语句。,参与循环,看成循环体的一部分, 循环体或表达式3应该有改变表达式2的值的可能性,否则将会出现死循环。即:如果表达式2的值是一个永远不可能发生改变的固定值,将会出现死循环。例如:for(i=0,sum=0;i=100;i=2) sum=sum+i;是一个死循环。, for语句中,
31、括号内的表达式可以省略,但其后面的分号不能省略。如果要省略表达式1,则应在for语句前面先给参与循环的变量赋初值。 例如:i=0;sum=0;for(;i=100;i+) sum=sum+i; 和for(i=0,sum=0;i=100;i+) sum=sum+i;是等价的。 表达式3也可以省略,如果要省略表达式3,则应该在循环体内设置相应的语句来替代表达式3,以保证循环的正常执行。 如:for(i=0,sum=0;i=100;i+) sum=sum+i;和 for(i=0,sum=0;i=100;)sum=sum+i;i+; 是完全等价的。可以同时省略表达式1和表达式3。如果直接省略表达式2将
32、会出现死循环。,使用for语句与while语句的比较, 语句 ,表达式1;,表达式3;,表达式3,表达式1,for( ;表达式2; ),for( ;表达式2; ),while( 表达式2 ),语句,使用for语句与while语句的比较,for(表达式1;表达式2;表达式3 ),语句,例 4-21 求 的近似值,直到最后一项的绝对值小于10-6为止。,#include stdio.h #include math.h main() int s; float n,t,pi; t=1;pi=0;n=1;s=1; while(fabs(t)=1e-6) pi=pi+t;n=n+2;s=-s;t=s/n;
33、 pi=pi*4; printf(pi=%f,pi); ,例 4-22 有一分数列 ,求出前20项之会和。,#include Stdio.h main() float sum=0,m,n; int i=1; for(m=2.0,n=1.0;i=20;i+) sum=sum+m/n; m=m+n; n=m-n; printf(sum=%fn,sum); ,五、循环结构的嵌套,C语言程序允许各种循环之间相互嵌套,嵌套时,必须是一个循环完整地包含在另一个循环之内。, while() while() , while() while() ,1. 循环相互嵌套时,主要有以下两类方式:,多个循环嵌套,多重循
34、环嵌套,在一个循环体内嵌套多个循环语句。,在一个循环体内嵌套多重循环语句,即:循环中套循环,While() while() while() ,While() while() while() ,2. 常用的循环嵌套形式:, while语句嵌套while语句 while语句嵌套dowhile语句 while语句嵌套for语句, dowhile语句嵌套while语句 dowhile语句嵌套dowhile语句 dowhile语句嵌套for语句, for语句嵌套while语句 for语句嵌套dowhile语句 for语句嵌套for语句, 混合嵌套,3. 执行嵌套的循环时,只有当子循环执行完毕后,才能返回
35、到上一级循环。,#include stdio.h main() int i=0,j; while(i5) j=0; while(j5) printf(%d,%dn,i,j); j+; i+; ,#include stdio.h main() int i,j; for(i=0;i5;i+) for(j=0;j5;j+) printf(%d,%dn,i,j); ,例4-23 编写一个应用程序求出200300之间满足以下条件的所有数。条件:各数字之和为12,各数字之积为42。,#include stdio.h main() int x,y,z; printf(the number is:); for
36、(x=2,y=1;y=9;y+) for(z=1;z=9;z+) if(x+y+z=12 ,穷举法,分析:假定这个数的百位、十位、个位分别为x、y、z,则必须有: x+y+z=12 x*y*z=42,例4-24 打印出所有的“水仙花数”。“水仙花数”是指一个三位数,其各位数字的立方和等于该数字本身。如xyz=x3+y3+z3,#include stdio.h main() int x,y,z; printf(the number is:); for(x=1;x=9;x+) for(y=0;y=9;y+) for(z=0;z=9;z+) if(x*100+y*10+z=x*x*x+y*y*y+z
37、*z*z) printf(%5d,x*100+y*10+z); ,例4-25 已知xyz+yzz=532,其中x,y,z都是数,求这三个字母分别代表什么数字?,#include Stdio.h main() int x,y,z; for(x=1;x=5;x+) for(y=1;y=5;y+) for(z=1;z=9;z+) if(x*100+y*10+z+y*100+z*10+z=532) printf(x=%d,y=%d,z=%d,x,y,z); ,例4-26 公元五世纪,我国古代数学家张丘建在算经中提出以下问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。凡百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?编程求解。,分析:假定公鸡x只,母鸡y 只,小鸡z只,则有下
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 穿刺技术的试题及答案
- 促销策划考试题及答案
- 2026年达州市中考物理试卷(含答案及解析)
- 护理社会服务:回馈社会
- 护理课件设计:提高护理专业认同感的方法
- 护理模拟教学课件
- 护理课件设计:培养沟通能力的技巧
- 2025年一级造价工程师考试《建设工程技术与计量(安装工程)》真题及解析(缺3题)
- 布病患者的发热护理
- 宫颈炎的康复指导
- 2026中国华电集团有限公司湖南分公司本部面向系统内公开招聘5人笔试历年常考点试题专练附带答案详解
- 2026江苏南京江北新材料科技园管理办公室招聘5人笔试参考题库及答案详解
- 2026年辽宁锦州农垦(集团)有限公司计划招录29人备考题库及1套完整答案详解
- 01 必修上教材文言文逐篇过关挖空训练(解析版)2026版-高中语文文言文逐篇过关挖空训练
- 受限空间作业安全措施培训
- 2026年秋新教材人教版九年级上册英语Unit 1-8课文+翻译
- 医学26年:基层消化疾病防控要点 查房课件
- 整形整容科室工作制度
- 2026届山东省济南市历城二中数学高一下期末综合测试模拟试题含解析
- 麻醉科双向转诊管理规范指南
- GB/T 47144-2026医疗器械清洁过程的开发、确认和常规控制的要求
评论
0/150
提交评论