山东科技大学第五章 C程序结构及控制语句_第1页
山东科技大学第五章 C程序结构及控制语句_第2页
山东科技大学第五章 C程序结构及控制语句_第3页
山东科技大学第五章 C程序结构及控制语句_第4页
山东科技大学第五章 C程序结构及控制语句_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

1、第第5章章 C程序结构及控制语句程序结构及控制语句 学习内容 C程序语句及编程风格 顺序结构 选择结构 循环结构 应用举例 5.1 C程序语句及编程风格 一、一、C C程序语句程序语句 nC C语句可以分为五类:语句可以分为五类: n表达式语句;表达式语句; n函数调用语句;函数调用语句; n控制语句;控制语句; n空语句;空语句; n复合语句。复合语句。 表达式语句:由表达式加上分号组成。表达式语句:由表达式加上分号组成。 例如:例如:x=y+zx=y+z; ; x+y x+y; ; i+; i+; 说明:说明:C C语言中的任何一个表达式都可以构成语句。语言中的任何一个表达式都可以构成语句

2、。 注意表达式与表达式语句的区别注意表达式与表达式语句的区别 函数调用语句函数调用语句: :由函数调用加上分号构成。由函数调用加上分号构成。 例如:例如:printf(“Cprintf(“C Program”); Program”); 本质上,函数调用语句也属于表达式语句。本质上,函数调用语句也属于表达式语句。 控制语句控制语句: :用于控制程序的流程。包括用于控制程序的流程。包括: if () else if () else (条件语句)(条件语句) switchswitch(多分支选择语句)(多分支选择语句) for()for()(循环语句)(循环语句) dowhile()dowhile(

3、)(循环语句)(循环语句) while()while()(循环语句)(循环语句) breakbreak (终止执行(终止执行switchswitch或循环语句)或循环语句) continuecontinue(结束本次循环语句)(结束本次循环语句) gotogoto(无条件转向语句)(无条件转向语句) returnreturn(从函数返回语句)(从函数返回语句) 空语句:空语句:仅由一个分号组成。仅由一个分号组成。 格式:格式:; ; 功能:功能:不执行任何操作。不执行任何操作。 复合语句:复合语句:由两个或者两个以上的语句构成的由两个或者两个以上的语句构成的 语句。语句。 例如:例如: x=y

4、+1; a=b+c; printf(“%d,%d”,x,a); (1)复合语句必须用一对复合语句必须用一对“”括起来。括起来。 (2)复合语句中的最后一条语句不可省略复合语句中的最后一条语句不可省略“;”。 二、C程序编程风格 n正确性:正确性: n可靠性:可靠性: n规范化:规范化: n可读性:可读性: n灵活性:灵活性: 5.2 顺序结构 顺序执行。顺序执行。 输入、计算、输出输入、计算、输出三步曲三步曲 例5.1 要求:输入三角形的三边长,求三角形面积。 海伦公式: ;s=(a+b+c)/2。 area =s(s-a)(s-b)(s-c) 图5.1 例5.1的N-S图 输入a、b、c 求

5、area 输出area 求s #include #include void main() float a,b,c,s,area; scanf(%f,%f,%f, s=1.0/2*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c); printf(a=%f,b=%f,c=%f,s =%fn,a,b,c,s); printf(area=%7.2fn,area); 例5.2 要求:从键盘输入一个大写字母,要求改用小写字母输出。 #include void main() char c1,c2; c1=getchar(); printf(%c,%dn,c1,c1); c2=c1

6、+32; printf(%c,%dn,c2,c2); 图5.2 例5.2的N-S图 输入大写字母c1 c2=c1+32 输出c2 输出c1 例5.3 交换数据。对输入的两个变量a、b,交换它们的值并输出。 #include void main() int a,b,c; printf(“Please input two integers:”); scanf(“%d%d”, printf(“Before swap a=%d b=%dn”,a,b); c=a; a=b; b=c; printf(“After swap a=%d b=%dn”,a,b); 输入a、b 交换a、b 输出a、b 5.3 选

7、择结构 C C语言提供了两种分支结构控制语句:语言提供了两种分支结构控制语句: if if 语句语句 switchswitch语句语句 if语句格式一 语句 图 5.3 if语句的N-S图 表达式 YN 格式格式1 1:if (if (表达式表达式) ) 语句语句 例如例如:if (ab)if (ab) max=a; max=a; 例如例如: #includestdio.h#include main()main() int int x; x; scanf(“%d”,); if (x60) if (xb) if (ab) max=a; max=a; else else max=b; max=b;

8、 例如例如: #includestdio.h#include main()main() int int x; x; scanf(“%d”,); if (x60) if (x60) printf printf(“(“不及格!不及格!”) ); elseelse printf(“x=%d”,x printf(“x=%d”,x);); if语句的嵌套 如果如果ifif语句中的执行语句又是一个语句中的执行语句又是一个ifif语句,就语句,就 构成了构成了ifif语句嵌套的情形。语句嵌套的情形。 格式格式:if (表达式表达式) if语句语句 或者或者:if (表达式表达式) if语句语句 else i

9、f语句语句 例5.5 从键盘输入一个数 值x,求符号函数值。 #include void main() float x; int sgn; scanf(%f, if (x=0) sgn=0; else if (x0) sgn=1; else sgn=-1; printf(sgn(x)=%d,sgn); 嵌套的嵌套的if语句语句 if语句格式三 格式格式3:if (表达式表达式1) 语句语句1 else if (表达式表达式2) 语句语句2 else if (表达式表达式3) 语句语句3 else if (表达式表达式n) 语句语句n else 语句语句n +1 if语句说明 1.1.ifif关

10、键字之后均为带括弧的表达式。该表达式可以是任关键字之后均为带括弧的表达式。该表达式可以是任 何表达式。只要表达式运算的结果为非何表达式。只要表达式运算的结果为非0 0,就按,就按“真真”处处 理,执行相应的语句;否则按理,执行相应的语句;否则按“假假”处理,执行相应的处理,执行相应的 语句。语句。 2.2.在在ifif语句的第二、三种形式中,语句的第二、三种形式中,elseelse子句必须与子句必须与ifif配对配对 使用。使用。 3.3.在在ifif语句的三种形式中,所有的语句应为单个语句,如语句的三种形式中,所有的语句应为单个语句,如 果在满足条件时执行多个语句,则必须把这多个语句用果在满

11、足条件时执行多个语句,则必须把这多个语句用 “”组成一个复合语句。但是在组成一个复合语句。但是在“”之后不能加分号。之后不能加分号。 4.4.在表达式中不要使用在表达式中不要使用“if (a)”if (a)”这样的语句。这样的语句。 例5.7 对于输入的0100分之间的成绩,判定出AE五个等级 #include main() int n; scanf(“%d”, if (n60) printf(“En”); else if(n70) printf(“Dn”); else if (n80) printf(“Cn”); else if (n90) printf(“Bn”); else printf

12、(“An”); 1、#include main() int x=3,y=5; if (x=5) printf(“hellon”); else printf(“wordn”); 2、#include main() int a=1; if (a=0) printf(“hellon”); else printf(“wordn”); 选择结构switch语句 格式格式:switch (switch (表达式表达式) ) case case 常量表达式常量表达式1:1:语句语句1 1 case case 常量表达式常量表达式2:2:语句语句2 2 case case 常量表达式常量表达式n:n:语句语句

13、n n default: default: 语句语句n+1n+1 switch (a) case 1: printf(“Mondayn”); case 2: printf(“Tuesdayn”); case 3: printf(“Wednesdayn”); case 4: printf(“Thursdayn”); case 5: printf(“Fridayn”); case 6: printf(“Saturdayn”); case 7: printf(“Sundayn”); default: printf(“errorn”); N-S图图 示示 例例 说明:说明: 1.1. “case ca

14、se 常量表达式常量表达式”只相当于一个语句标号,表达式的值和某标号只相当于一个语句标号,表达式的值和某标号 相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出 整个整个switchswitch语句。为了避免上述情况,语句。为了避免上述情况,C C提供了提供了breakbreak语句。语句。 2.2. 在在casecase后的各个常量表达式的值不能相同,否则会出现错误。后的各个常量表达式的值不能相同,否则会出现错误。 3.3. 在在casecase后,允许有多个语句,可以不用后,允许有多个语句,可以不用括起来。括起来。 4.4.

15、 各个各个casecase和和defaultdefault子句的先后顺序可以变动,不影响程序的执行结子句的先后顺序可以变动,不影响程序的执行结 果。果。 5.5. defaultdefault子句可以省略不用,此时当表达式的值与所有子句可以省略不用,此时当表达式的值与所有casecase后的常量后的常量 表达式的值不同时,退出表达式的值不同时,退出switchswitch语句,继续执行后续程序。语句,继续执行后续程序。 6.6. switchswitch后面括号中的表达式只能是整型、字符型、枚举类型,后面括号中的表达式只能是整型、字符型、枚举类型,casecase 后的常量表达式的类型必须与之

16、匹配。后的常量表达式的类型必须与之匹配。 7.7. 各个各个casecase之后是常量表达式,一定不要试图使用条件表达式或者逻之后是常量表达式,一定不要试图使用条件表达式或者逻 辑表达式。辑表达式。 例5.6 计算器程序。从键盘接收两个运算数和四则运算符, 计算并输出结果。 其它 图 5.9 例5.6的N-S图 c 输入a,b,c 输出 a+b -*/+ 输出 a-b 输出 a*b 输出 a/b 输入 错误 #include void main() float a,b; char c; printf(input expression: a+(-,*,/)b n); scanf(%f%c%f,

17、switch(c) case +:printf(%fn,a+b);break; case -:printf(%fn,a-b);break; case *:printf(%fn,a*b);break; case /:printf(%fn,a/b);break; default:printf(input errorn); 5.4 循环结构 循环条件循环条件: : 循环体循环体: : 循环变量循环变量: : C C语言提供了三种循环控制语句。语言提供了三种循环控制语句。 whilewhile语句;语句; do-whiledo-while语句;语句; forfor语句。语句。 while语句 格式格式

18、:while (while (表达式表达式) ) 语句语句 (1)while(1)while语句中的表达式一般是关系表达式或者逻辑表达语句中的表达式一般是关系表达式或者逻辑表达 式,只要值为真就可以继续执行循环体。式,只要值为真就可以继续执行循环体。 (2)(2)如果循环体包含一个以上的语句,必须用如果循环体包含一个以上的语句,必须用括起来构括起来构 成复合语句。成复合语句。 n#include nvoid main() n n int sum=0,n; n n=0;/循环变量初始化循环变量初始化 nwhile (n=100) n n sum+=n; n n+=2;/改变循环变量的值改变循环变

19、量的值 n n printf(%dn,sum); n do-while语句 格式格式:do do 语句语句 while(while(表达式表达式);); (1)do-while(1)do-while语句的表达式后必须加分号。语句的表达式后必须加分号。 (2)(2)如果循环体由多个语句组成,也必须由如果循环体由多个语句组成,也必须由括起来,括起来, 组成一个复合语句。组成一个复合语句。 例 求1100之间所有偶数的和。 图 5.11 例5.9的N-S图 sum+=n; n+=2; sum=0;n=0 n=100 输出sum #include void main() int sum=0,n; n=

20、0;/循环变量初始化循环变量初始化 while (n=100)/循环执行条件循环执行条件 sum+=n; n+=2;/改变循环变量的值改变循环变量的值 printf(%dn,sum); #include void main() int sum=0,n; n=0;/循环变量初始化循环变量初始化 do sum+=n; n+=2;/改变循环变量的值改变循环变量的值 while (n=100); printf(%dn,sum); 例例:重复判断用户输入的是否是一个偶数,直到输入重复判断用户输入的是否是一个偶数,直到输入0 0为止。为止。 n#include stdio.h#include nvoid

21、main() void main() n n int int n; n; n do do n printf printf(“(“请输入一个整数:请输入一个整数:);); n scanf(%d,); n if (n%2=0) printf(“%d if (n%2=0) printf(“%d是一个偶数!是一个偶数!n“,nn“,n);); nwhile(nwhile(n!=0);!=0); n for语句 格式格式: for (for (表达式表达式1;1;表达式表达式2;2;表达式表达式3)3) 语句语句 图 5.14 (a) for语句的N-S图 表达式1 表达式2 语句 表达式3 图 5.1

22、4 (b) for语句的N-S图 for (表达式1;表达式2; 表达式3) 语句 说明说明: 1.1.forfor语句的各个表达式均可省略,但是分号不可缺少。语句的各个表达式均可省略,但是分号不可缺少。 如果循环变量已经在如果循环变量已经在forfor语句前赋初始值,那么表达式语句前赋初始值,那么表达式1 1可以省略。可以省略。 如果省略表达式如果省略表达式2 2,一般在循环体中加入,一般在循环体中加入breakbreak语句来退出循环。语句来退出循环。 若省略表达式若省略表达式3 3,应在循环体中修改循环变量,保证循环能结束。,应在循环体中修改循环变量,保证循环能结束。 可以同时省略三个表

23、达式中的任意可以同时省略三个表达式中的任意2 2个或三个表达式全省略。个或三个表达式全省略。 2.2.循环体可以是空语句。循环体可以是空语句。 3.3.表达式表达式1 1可以是设置循环变量初值的赋值表达式,也可以是与循环可以是设置循环变量初值的赋值表达式,也可以是与循环 变量无关的其它表达式。变量无关的其它表达式。 4.4.表达式表达式2 2一般是关系表达式或者逻辑表达式,但也可以是数值表达一般是关系表达式或者逻辑表达式,但也可以是数值表达 式或者字符表达式,只要其值为非零,就可以执行循环。式或者字符表达式,只要其值为非零,就可以执行循环。 5.5.表达式表达式3 3一般是改变循环变量的赋值表

24、达式,但也可以是与循环变一般是改变循环变量的赋值表达式,但也可以是与循环变 量无关的其它表达式。量无关的其它表达式。 6.6.表达式表达式1 1和表达式和表达式3 3都可以是逗号表达式。都可以是逗号表达式。 例7 求1100之间所有偶数的和。#include void main() int sum=0,n; for (n=0;n=100;n+=2) sum+=n; printf(%d,sum); 图 5.15 例5.11的N-S图 sum+=n; n+=2; sum=0;n=0 n=100 输出sum 例5.4 判断键盘上输入字符的类别,统计其中字母、数字、判断键盘上输入字符的类别,统计其中字

25、母、数字、 其它字符的个数并输出。其它字符的个数并输出。 图 5.6 例5.4的N-S图 NumOfData+ NumOfChar+ Y N InStri是数字 YN InStri是字母 NumOfOther+ 输入InStr for (i=0;istrlen(InStr);i+) 输出结果 #include stdio.h#include #include string.h#include void main()void main() char InStr80; char InStr80; unsigned int unsigned int i; i; int int NumOfData=0

26、; NumOfData=0; int int NumOfChar=0; NumOfChar=0; int int NumOfOther=0; NumOfOther=0; printf(input printf(input a a string:);string:); gets(InStr gets(InStr);); for (i=0;istrlen(InStr);ifor (i=0;i=0 +; else else NumOfOtherNumOfOther+;+; printf(“%d, %d, %d.n printf(“%d, %d, %d.n, NumOfData, NumOfChar,

27、 NumOfOther NumOfData, NumOfChar, NumOfOther);); 跳转语句 gotogoto语句称为无条件转向语句。语句称为无条件转向语句。 格式格式:goto goto 语句标号语句标号; ; 例如例如: goto label;goto label; (1)(1)语句标号用标识符表示,命名规则与变量名的命名规则语句标号用标识符表示,命名规则与变量名的命名规则 相同。相同。 (2) (2) 一般而言,一般而言,gotogoto语句有两种用途:语句有两种用途: n与与ifif语句一起构成循环,这是语句一起构成循环,这是gotogoto语句最常用的用途。语句最常用的

28、用途。 n从多层循环中跳出。从多层循环中跳出。 n #include nvoid main() n n int sum=0,n; n n=0;/循环变量初始化循环变量初始化 nlm:sum+=n; n n+=2;/改变循环变量的值改变循环变量的值 n if (n=10) goto lm; n printf(%dn,sum); n break语句 格式格式:break; 功能功能:用于跳出:用于跳出switch结构,和从循环体内中途跳出循环体,结构,和从循环体内中途跳出循环体, 即提前结束循环,执行循环下面的语句。即提前结束循环,执行循环下面的语句。 说明说明: (1)在循环语句中,在循环语句中

29、,break语句一般与语句一般与if语句一起使用。语句一起使用。 (2)break语句不能用于循环语句和语句不能用于循环语句和switch语句之外的其它任何语句之外的其它任何 语句之中。语句之中。 举例举例: 例例8计算半径r=1到r=10的圆面积,直到圆面积大于 100为止。 #define PI 3.1415926 #include void main() float area; int r; for (r=1;r100) break; printf(“%fn”,area); continue语句 格式格式:continue; 功能功能:跳过循环体中剩余的语句而强制执行下一次循环,即:跳过

30、循环体中剩余的语句而强制执行下一次循环,即 结束本次循环,跳过循环体中下面尚未执行的语句,接着进结束本次循环,跳过循环体中下面尚未执行的语句,接着进 行下一次是否执行循环的判定。行下一次是否执行循环的判定。 说明说明:continue语句只能用在循环语句中,且一般都是与语句只能用在循环语句中,且一般都是与if语语 句一起使用。句一起使用。 举例举例: 例例9 把100200之间的不能被3整除的数输出。 #include void main() int n; for( n=100; n=200; n+) if (n%3=0) continue; printf(“%5d”,n); 循环嵌套 当一个

31、循环体内又包含另一个完整的循环体当一个循环体内又包含另一个完整的循环体 时,称为循环嵌套。其中被嵌套的循环称为外层时,称为循环嵌套。其中被嵌套的循环称为外层 循环,在其它循环体中嵌套的循环为内层循环,循环,在其它循环体中嵌套的循环为内层循环, 或者内嵌循环。或者内嵌循环。 如果内嵌循环的循环体内又有一个完整的循如果内嵌循环的循环体内又有一个完整的循 环结构,则构成了多层嵌套。环结构,则构成了多层嵌套。 C C语言提供的三种循环控制语句可以互相嵌套,语言提供的三种循环控制语句可以互相嵌套, 也可以自己嵌套。也可以自己嵌套。 例10 输出如下图形:输出如下图形: * * * * * * * * *

32、 * * * * * * * * * * * 图 5.16 例5.14的N-S图 for (j=1;j=i;j+) 输出* for (i=1;i=5;i+) #include void main() int i,j; for (i=1;i=5;i+) for (j=1;j=i;j+) printf(*); printf(n); 例12百钱买百鸡问题 “百钱买百鸡”是我国古代的著名数学题。问题是 这样描述的:3文钱可以买1只公鸡,2文钱可以买一只母鸡, 1文钱可以买3只小鸡。用100文钱买100只鸡,那么各有公 鸡、母鸡、小鸡多少只? l解法解法1 1: 假设i、j、k分别代表公鸡、母鸡和小鸡的数目,注 意到一百文钱最多可以买33只公鸡、50只母鸡和300只小 鸡,所以0=i=33,0=j=50,0=k=300。 #include void main() int i,j,k; for (i=0;i=33;i+) for (j=0;j=5

温馨提示

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

评论

0/150

提交评论