第4章结构化程序设计_第1页
第4章结构化程序设计_第2页
第4章结构化程序设计_第3页
第4章结构化程序设计_第4页
第4章结构化程序设计_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

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

文档简介

1、安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系主讲人主讲人 郑郑 岚岚安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系主讲人主讲人 郑郑 岚岚安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 4.1结构化程序设计概述语句语句:用来对数据进行加工(完成操作任务),:用来对数据进行加工(完成操作任务), 是构成程序的基本单位。是构成程序的基本单位。通常一个通常一个C C程序由若干个函数(系统、用户)组成。程序由若干个函数(系统、用户)组成。每一函数由若干条语句组成。每一函数由若干条语句组成。C C语句可分为三大类:简单语句、复合语句、空语句语句可分为三大类:简单语句

2、、复合语句、空语句安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 1、简单语句、简单语句(1)表达式语句:由一个表达式后跟分号;组成)表达式语句:由一个表达式后跟分号;组成 赋值语句赋值语句 如:如:s=3.14*r*r; i+; 函数调用语句函数调用语句 如:如:printf(“Hello!n”);(2)结构控制语句:控制程序流程)结构控制语句:控制程序流程 选择语句:选择语句: ifelse、switch 循环语句:循环语句: for、while、dowhile 转向语句:转向语句: continue、break、return、goto安徽三联学院安徽三联学院 信息与通信技术系

3、信息与通信技术系 2、复合语句、复合语句将一组语句括在一对将一组语句括在一对 中中注:(注:(1)复合语句的)复合语句的 之后不再有分号;之后不再有分号;(2)复合语句可以是简单语句、复合语句、空语句)复合语句可以是简单语句、复合语句、空语句3、空语句、空语句 ; /*仅有一个;仅有一个;*/注:空语句什么也不做,有时用作被转向点,或为注:空语句什么也不做,有时用作被转向点,或为循环语句提供空体循环语句提供空体 如:如:while(i0) t=a;注:赋值表达式可包含在其它表达式之中,而赋值注:赋值表达式可包含在其它表达式之中,而赋值语句不行。赋值语句只能作为一条单独语句,或语句不行。赋值语句

4、只能作为一条单独语句,或放在复合语句中。放在复合语句中。赋值表达式赋值表达式赋值语句赋值语句a=3 是一个赋值表达式是一个赋值表达式a=3;是一个赋值语句是一个赋值语句安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 字符输入输出 语言中没有输入输出语句语言中没有输入输出语句/操作通过调用系统函数实现操作通过调用系统函数实现故在程序开头要有预编译命令将故在程序开头要有预编译命令将stdio.h头文件加头文件加入到源程序中,形式如下:入到源程序中,形式如下:#include“stdio.h”或或#include(其中(其中stdio是是standard input & outp

5、ut 的缩写)的缩写)默认的输入设备键盘、输出设备显示器默认的输入设备键盘、输出设备显示器安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 4.2.2字符输出函数putchar()形式形式:putchar(c)作用作用:向终端输出一个字符。:向终端输出一个字符。(即将的值输出到显示器上)(即将的值输出到显示器上)上述调用形式后加一个上述调用形式后加一个“;”就构成了函数调用语句。就构成了函数调用语句。c可以字符型和整型的常量、变量、表达式可以字符型和整型的常量、变量、表达式安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 #includevoid main() char c

6、1,c2; c1=b; c2=98; putchar(c1); putchar(c2); putchar(b); putchar(98);输出结果:bbbb注:输出不换行注:输出不换行#includevoid main() putchar(101); putchar(n); putchar(); 输出结果:A输出控制字符输出控制字符用于换行用于换行安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 4.2.3字符输入函数getchar()形式:形式:getchar( )作用:作用:从键盘缓冲区读入一个字符从键盘缓冲区读入一个字符注:注:()内没有参数()内没有参数如如:ch=getch

7、ar( );含义是:含义是:getchar函数读取一个字符数据作为函函数读取一个字符数据作为函数值,将其赋给变量数值,将其赋给变量ch。 安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 #includevoid main() int c; printf(“Enter a character:”); c=getchar(); printf(“%c:%dn”,c,c); 输出结果:输出结果:Enter a character:aa:97执行到这条语句时,系统停下,执行到这条语句时,系统停下,等待键盘输入一个字符。等待键盘输入一个字符。当从键盘得到一个字符后,赋给当从键盘得到一个字符后,

8、赋给变量变量c安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 ()当输入多个字符时,只读首字符,多余字符作废。()当输入多个字符时,只读首字符,多余字符作废。 (按回车后才开始接收字符)(按回车后才开始接收字符)()用()用getchar()得到的字符可以赋给字符型变量、整型变得到的字符可以赋给字符型变量、整型变量,或作为表达式的一部分。量,或作为表达式的一部分。 如:如:c=getchar()+32; putchar(c); 若输入,则输出若输入,则输出a#includevoid main() putchar(getchar() ); 运行结果:运行结果:aa安徽三联学院安徽三联

9、学院 信息与通信技术系信息与通信技术系 【例】输入单词输入单词“boy”并回显。并回显。include void main() char ch1,ch2,ch3; ch1=getchar(); ch2=getchar(); ch3=getchar(); putchar(ch1); putchar(ch2); putchar(ch3); ()运行结果如下:运行结果如下:boy boy()在输入时,空格、回车等都在输入时,空格、回车等都将作为字符输入。将作为字符输入。若按如下形式输入:若按如下形式输入:b o y 则运行结果如下:则运行结果如下:b o bo安徽三联学院安徽三联学院 信息与通信技术

10、系信息与通信技术系 4.2.4格式化输出函数printf() 作用:作用:按照规定的格式向终端设备输出数据。按照规定的格式向终端设备输出数据。形式:形式: printf(printf(格式控制串格式控制串,输出表列输出表列) )要输出的内容要输出的内容(常量、变量、表达式常量、变量、表达式)有多个输出项时,用逗号间隔开。有多个输出项时,用逗号间隔开。用双引号括起来,用来说用双引号括起来,用来说明输出数据的输出格式。明输出数据的输出格式。在上述调用形式后面加在上述调用形式后面加“;”就构成了函数调用语句。就构成了函数调用语句。例如例如输出:输出:a=30,Aprintf(a=%d,%c, 2*3

11、*5, A); 格式控制字符串格式控制字符串 输出表列输出表列m.n l/h 格式符格式符指定输出的数据类型指定输出的数据类型指出长度的修正指出长度的修正指出输出精度指出输出精度指出输出域宽指出输出域宽指定左对齐输出指定左对齐输出格式说明的引导符号格式说明的引导符号格式控制字符完整格式格式控制字符完整格式格式符格式符d 十进制整数十进制整数o 无符号八进制数无符号八进制数x 无符号十六进制数无符号十六进制数u 无符号十进制数无符号十进制数f以小数形式输出实型以小数形式输出实型e 以指数形式输出实型以指数形式输出实型s输出一个字符串输出一个字符串c输出一个字符输出一个字符% 输出输出%与格式符不

12、可缺少与格式符不可缺少长度修正符长度修正符l:对整型指长整型对整型指长整型long;对实型指双精度对实型指双精度doubleh:只能用于整型的格式字符修正为只能用于整型的格式字符修正为short域宽及精度的指定域宽及精度的指定m:域宽,即对应的输出项在输出设备上所占的字符数域宽,即对应的输出项在输出设备上所占的字符数 若实际数据宽度若实际数据宽度m,按实际宽度输出;,按实际宽度输出; 若实际数据宽度若实际数据宽度m,左边补空,左边补空(默认为右对齐输出默认为右对齐输出时时)n:精度,说明输出的实型数的小数位数精度,说明输出的实型数的小数位数安徽三联学院安徽三联学院 信息与通信技术系信息与通信技

13、术系 #includevoid main() int i=5; float f=32.345; printf(“i=%3df=%5.1fn”,i,f); printf(“End.n”);运行结果:运行结果:i= 5f= 32.3End.% :引导符:引导符5:宽度:宽度1:小数位数:小数位数(精度精度)f:格式符:格式符普通字符原样输出普通字符原样输出安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 对单精度数,使用对单精度数,使用%f 格式符输出时,仅前格式符输出时,仅前7位是有效数字,小数位是有效数字,小数6位位对双精度数,使用对双精度数,使用%lf 格式符输出时,前格式符输出时

14、,前16位是有效数字,小数位是有效数字,小数6位位#include void main() float a,b; char c=a; int i=97; a=31.1111;b=28.333; printf(“%f,%7.4fn”,a+b,a-b); printf(“%c,%dn”,c,c); printf(“%c,%dn”,i,i); printf(“%s,%n”,”china”); 运行结果运行结果:59.444099, 2.7781a,97a,97china,%有效位有效位7位,有一定位,有一定误差;未指明精度误差;未指明精度,小数为,小数为6位位有一个空格有一个空格安徽三联学院安徽三联

15、学院 信息与通信技术系信息与通信技术系 关于printf函数的几点说明(1)(1)编译程序只检查编译程序只检查printfprintf函数的调用形式,不分析格式说函数的调用形式,不分析格式说明串,如果格式控制字符串与输出项的类型不匹配,不进明串,如果格式控制字符串与输出项的类型不匹配,不进行类型转换。行类型转换。(2)(2)格式字符要用小写字母。格式字符要用小写字母。(3)(3)格式控制字符串中可以包含转义字符。格式控制字符串中可以包含转义字符。(4)(4)格式控制字符串中的普通字符按原样输出。格式控制字符串中的普通字符按原样输出。(5)(5)输出项的参数除了常数、变量外还可以是表达式,函数输

16、出项的参数除了常数、变量外还可以是表达式,函数调用。调用。如:如:printf(printf(“max=%dti=%dnmax=%dti=%dn”,imax(a,b),i+);,imax(a,b),i+);(6)(6)输出表列中的表达式按自右往左的顺序计算输出表列中的表达式按自右往左的顺序计算如:如:i i5 5;printf(printf(“, ,”,i,i,i+);i+);输出:输出:6,56,5安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 4.2.4格式化输入函数scanf()作用:作用:按照格式控制字符串中规定的格式,从键盘输按照格式控制字符串中规定的格式,从键盘输入数据

17、入数据, ,依次赋给个输入项。依次赋给个输入项。形式:形式:scanf (scanf (格式控制字符串,输入项表列格式控制字符串,输入项表列) )在上述调用形式后面加在上述调用形式后面加“;”就构成了函数调用语句。就构成了函数调用语句。 例如例如 :取地址运算符:取地址运算符&a,&b&a,&b表示分别变量表示分别变量a a、b b的地址的地址 scanf(%d,%c,); 格式控制字符串格式控制字符串输入项表列输入项表列m l/h 格式符格式符指定输入的数据类型指定输入的数据类型长度修正说明长度修正说明(了解,不要求了解,不要求)域宽说明域宽说明(了解了解)附

18、加说明符附加说明符(了解了解)格式说明引导符号格式说明引导符号格式控制符格式格式控制符格式%与格式符不可缺少与格式符不可缺少输入数据的分隔输入数据的分隔()采用隐含的分隔符:空格键、回车键、()采用隐含的分隔符:空格键、回车键、Tab键键()根据格式中指定的域宽分隔数据项(不提倡)()根据格式中指定的域宽分隔数据项(不提倡)()采用用户指定的分隔符()采用用户指定的分隔符()输入数据时,不能规定数据精度;如:()输入数据时,不能规定数据精度;如:scanf(“%4.2f”,&a)是错误的。是错误的。()在格式控制字符串中的普通字符原样输入;()在格式控制字符串中的普通字符原样输入;()

19、()%c一次接收一个字符,无需单行号;空格字符是个有效字符。一次接收一个字符,无需单行号;空格字符是个有效字符。()可以使用()可以使用“*”以使对应的输入数据不赋给任何变量;以使对应的输入数据不赋给任何变量;()所有数据输完要以回车键结束()所有数据输完要以回车键结束, scanf函数才能接受从键盘输入的数据。函数才能接受从键盘输入的数据。()输入函数的返回值为输入数据的个数。()输入函数的返回值为输入数据的个数。安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 include void main() int a; float b,c; printf(“Input a,b,c:”)

20、; scanf(“%d%f,%f”,&a,&b,&c); printf(“a=%d,b=%f,c=%fn”,a,b,c); 运行结果:Input a,b,c:12 3,4输出:a=12,b=3.000000,c=4.000000安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 数值型数据与字符型数据混合输入数值型数据与字符型数据混合输入 假设假设a为整型变量,为整型变量,b为字符变量,为字符变量, scanf(“%d%c”,&a,&b); 要求给变量要求给变量a赋值赋值30,给变量,给变量b赋值赋值”B”,则应如下键入:则应如下键入: 30B

21、输入过程中可以使用输入过程中可以使用“* *”以使对应的输入数据不赋给任何变量。以使对应的输入数据不赋给任何变量。例如:例如:scanf(scanf(“%2d%2d%* *2d%2d2d%2d”,&a,&b);,&a,&b);键入:键入:123456123456则则1212赋给变量赋给变量a a,3434没有赋给任何变量,被直接跳过,没有赋给任何变量,被直接跳过,5656赋给变量赋给变量b b格式控制字符串中的普通字符要按原样输入格式控制字符串中的普通字符要按原样输入例如:例如: scanf(“a=%d,b=%d”,&a,&b); 要求给变量要求

22、给变量a赋值赋值5,给变量,给变量b赋值赋值6,则应如下键入:,则应如下键入: a=5,b=6 安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 4.2.6顺序结构程序设计举例例:输入一个小写字母,输出其大写字母及前导字母与后续字母。例:输入一个小写字母,输出其大写字母及前导字母与后续字母。分析:小写字母的分析:小写字母的ASCASC码比对应的大写字母码比对应的大写字母ASCASC码大码大3232 前导字母的前导字母的ASCASC码小,后续字母的码小,后续字母的ASCASC码大码大. .include void main() char c; printf(“请输入任意一个小写字母:”

23、); c=getchar(); printf(“%c,%c,%cn”,c,c-1,c+1); printf(“%c,%c,%cn”,c-32,c-33,c-31); 可换成可换成putchar(c);putchar(c-1);putchar(c+1);运行结果:请输入任意一个小写字母:xx,w,yX,W,Y4.3选择结构程序设计引例:计算函数值引例:计算函数值1/)sin(xxy00 xx需考虑:需考虑: ()输入()输入x ()判断()判断x的值的值 ()根据()根据x的值,计算的值,计算y的值的值 ()输出()输出y的值的值显然,()和()顺序结构程序不能实现,显然,()和()顺序结构程序

24、不能实现,须引入选择结构程序。须引入选择结构程序。安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 4.3选择结构程序设计 选择结构是结构化程序设计的三种基本结构之一,选择结构是结构化程序设计的三种基本结构之一,实现选择结构的语句主要有两大类:实现选择结构的语句主要有两大类:ifif语句和语句和switchswitch语句语句 语句又可分为:简单的语句又可分为:简单的ifif语句,语句,if-elseif-else语句,语句,ifif语句的嵌套。语句的嵌套。安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 4.3.1简单的if结构单分支结构单分支结构( (条件执行条件执行)

25、 ): ifif(表达式(表达式) ) 语句语句1 1;其中的语句其中的语句1又称又称if子句;子句;可为单条语句或复合语句可为单条语句或复合语句如:如:if (a0) printf(“OK”); if (xy) z=y; y=x; x=z; /*交换交换x和和y的内容的内容*/安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 if (a) printf(“OK”);x=-5; if(x)printf(“OK”);y=0; if(y=0)printf(“OK”);a非非真真x非非真真关系表达式为真关系表达式为真安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 例例4.74.

26、7从键盘输入一个整数,若该整数大于从键盘输入一个整数,若该整数大于1010直接输直接输出,若小于出,若小于1010则加则加100100后输出。后输出。# include void main()int a;scanf(“%d”,&a); if(a10) a=a+100;printf(“%d”,a);运行结果运行结果: :键入:键入:9 9则输出:则输出:109109若键入:若键入:1919则输出:则输出:1919安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 4.3.2 if-else语句结构 分支选择:分支选择:if(表达式(表达式) 语句;语句;else 语句;语句;其中

27、语句其中语句1又称又称if子句,子句, 语句语句2又称又称 else子句。子句。注:注:else子句不独立存在;子句不独立存在; 即即else子句必定是子句必定是if语句的一部分。语句的一部分。 安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 例例4.84.8从键盘输入两个整数,将较大数输出从键盘输入两个整数,将较大数输出. .# include void main() int a, b; scanf (“%d, %d”,&a,&b); if (a=b) printf( “%d”,a); else printf( “%d”, b);运行结果:运行结果:40,5040

28、,50 5050安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 include void main() float x,y; printf(“Enter x:”); scanf(“%f”,&x); if(x=0.)y=1; else y=(x*5+1)/x; printf(“nx=%4.1fty=%4.1fn”,x,y);运行结果:运行结果:Enter:2 x= 2.0 y=5.5也可改为:也可改为:y=1; if (x!=0) y=(x*5+1)/x;1/)15*(xxy00 xx安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 4.3.3 if 结构的嵌套在在

29、if语句中又包含一个或多个语句中又包含一个或多个if语句称为语句称为if语句的嵌套。语句的嵌套。 if (表达式表达式1) if (表达式表达式2) 语句语句1; else 语句语句2; else if (表达式表达式3) 语句语句3; else 语句语句4; 注注 else 与与if的配对原则是:的配对原则是:else总是与它上面、总是与它上面、距它最近且尚未配对的距它最近且尚未配对的if配对。配对。 if (表达式表达式1) if (表达式表达式2) 语句语句1; else 语句语句2; else if (表达式表达式3) 语句语句3; else 语句语句4;安徽三联学院安徽三联学院 信息

30、与通信技术系信息与通信技术系 例例4.9 4.9 从键盘输入三个数,并将最大的数输出。从键盘输入三个数,并将最大的数输出。#includevoid main() int a,b,c; scanf(“%d ,%d ,%d”,&a,&b, &c); if(a = b) if(a=c)printf(“%d”,a); else printf(“%d”,c); else if(b=c)printf(“%d”,b); else printf(“%d”,c); 运行结果:运行结果:40,30 ,50 50安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 if (表达式表达式

31、1) if (表达式表达式2) 语句语句1; else if (表达式表达式2) 语句语句2; else语句语句3 ;if (表达式表达式1) if (表达式表达式2) 语句语句1; else if (表达式表达式2) 语句语句2; else语句语句3 ;通过加通过加 ,可改变,可改变 else的层位,从而改变程序的执行流程。的层位,从而改变程序的执行流程。if (x) if (y) printf(“1”); else printf(“2”) ;if (x) if (y) printf(“1”); else printf(“2”) ;条件执行:条件执行:若若x0,则执行第,则执行第2个个if-

32、else若若x=0,则不执行,则不执行分支选择:分支选择:若若x0,则执行第,则执行第2个个if子句子句若若x=0,输出,输出2安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 4.3.4 if-else-if语句结构如果嵌套都发生在如果嵌套都发生在else分支上,则可以应用分支上,则可以应用if-else-if语句结构。语句结构。if(表达式(表达式1) 语句;语句; else if(表达式(表达式2) 语句语句2; else if(表达式(表达式3) 语句语句3; else 语句语句n+1 ;系统从上到下逐个判断各表达式,一旦发现某个表达式系统从上到下逐个判断各表达式,一旦发现某

33、个表达式i为为真,则执行与之有关的语句真,则执行与之有关的语句i,若所有表达式均为假,则执,若所有表达式均为假,则执行最后一个行最后一个else语句或后续语句。语句或后续语句。安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 if(表达式(表达式1) 语句;语句; else if(表达式(表达式2) 语句语句2; else if(表达式(表达式3) 语句语句3; else 语句语句n+1 ;TFFF表达式表达式1表达式表达式2表 达 式表 达 式n语句语句1语句语句2语句语句nTT语句语句n+1图图4.7安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 if(x500) y

34、=0.20;else if( x300)y=0.15 ;else if( x100)y=0.10 ;else if( x50 ) y=0.05 ;else y=0;安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 例例4.10 4.10 编写程序,根据输入学生的成绩,给出相应的等编写程序,根据输入学生的成绩,给出相应的等级,分五个等级,级,分五个等级,9090及及9090分以上的等级为,分以上的等级为,6060分以下算,其余每十分一个等级。分以下算,其余每十分一个等级。#includevoid main() int score; printf(“inter score:”); sca

35、nf(“%d”,&score); if (score=90) printf(“An”); else if(score=80) printf(“Bn”); else if(score=70) printf(“Cn”); else if(score=60) printf(“Dn”); else printf(“En”);运行结果:运行结果:65 D安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 4.3.5 switch结构switch(表达式)(表达式)case常量表达式:语句;常量表达式:语句;break ; case常量表达式:语句;常量表达式:语句;break ; cas

36、e常量表达式:语句;常量表达式:语句;break ; default: 语句语句+1; 整型或字符型整型或字符型整型或字符型常量整型或字符型常量可选可选计算过程:计算过程:()计算表达式的值()计算表达式的值()若与常量表达式()若与常量表达式i的值一致,则从语句的值一致,则从语句i开始开始执行,执行,直到直到break语句或语句或switch语句结束语句结束()若与任何常量表达式的值均不一致时,则执行()若与任何常量表达式的值均不一致时,则执行default语语句或执行后续语句。句或执行后续语句。又称开关语句或多又称开关语句或多分支选择语句。分支选择语句。比用嵌套的比用嵌套的if语句语句实现

37、多路分支问题实现多路分支问题的程序结构更清晰的程序结构更清晰易读。易读。安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 注意:注意:表达式的结果必须是表达式的结果必须是整型或字符型整型或字符型,不能使用结果为实型,不能使用结果为实型的表达式的表达式常量表达式必须是常量表达式必须是整型或字符型常量整型或字符型常量,不能使用实型常量。,不能使用实型常量。各个常量表达式不能相同。各个常量表达式不能相同。breakbreak语句是可选的,语句是可选的,breakbreak语句是用来跳出语句是用来跳出switchswitch结构的,结构的,可根据需要自行选择是否有可根据需要自行选择是否有br

38、eakbreak语句,如果没有语句,如果没有breakbreak语语句,则程序将继续执行,直到遇到句,则程序将继续执行,直到遇到breakbreak语句或者到语句或者到switchswitch的结尾停止。的结尾停止。defaultdefault语句是可选的。如果没有语句是可选的。如果没有defaultdefault语句,当找不到语句,当找不到与小括号内表达式的值向匹配的常量表达式时,与小括号内表达式的值向匹配的常量表达式时,switchswitch语语句不做任何操作。句不做任何操作。多个多个casecase可以共用一组执行语句。当多个常量代表同一种可以共用一组执行语句。当多个常量代表同一种情况

39、时,出现在前面的情况时,出现在前面的casecase可以没有任何执行语句。可以没有任何执行语句。安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 若若x=1,则输出,则输出one若若x=2,则输出,则输出two若若x=3,则输出,则输出OK若若x=1,则输出,则输出onetwoOK若若x=2,则输出,则输出twoOK若若x=3,则输出,则输出OKswitch(x) case 1: printf(“one”); break; case 2: printf(“two”); break; default: printf(“OK”);switch(x) case 1: printf(“one

40、”); case 2: printf(“two”); default: printf(“OK”);安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 例例4.114.11编写程序,根据输入学生的成绩,给出相应的等级,编写程序,根据输入学生的成绩,给出相应的等级,分五个等级,分五个等级,9090分以上的等级为,分以上的等级为,6060分以下算分以下算,其余每十分一个等级。,其余每十分一个等级。#includevoid main()int score;printf(“inter score:”);scanf(“%d”,&score);switch(score/10) case10:

41、 case9:printf(“An”);break; case8:printf(“Cn”);break; case7:printf(“Cn”);break; case6:printf(“Dn”);break; default: printf(“En”); 安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 例例 设计一个能进行加、减、乘、除运算的简易计算器程序。设计一个能进行加、减、乘、除运算的简易计算器程序。#includevoid main( ) float x, y,j; char op; printf(input two numbers: ); scanf(%f, %fn, &

42、amp;x, &y); printf(input operational: ); scanf(%c, &op); switch (op) case +: j=x+y; printf(%f+%f=%fn,x,y,j); break; case -: j=x-y; printf(%f+%f=%fn,x,y,j); break; case *: j=x*y; printf(%f+%f=%fn,x,y,j); break; case /: if (y!=0) j=x/y; printf(%f/%f=%fn, x,y,j); else printf(errorn); 运行结果运行结果:

43、input two numbers: 4,5input operational: *4.000000*5.000000= 20.000000安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 例例 任给任给a a、b b、c c三个数,按从大到小顺序输出。三个数,按从大到小顺序输出。#includevoid main()inta,b,c,t;printf (“inter a,b,c:”);scanf (“%d,%d,%d”,&a,&b,&c);if (ab ) t=a; a=b; b=t; if (ac) t=a; a=c; c=t; if (bc) t=b;

44、b=c; c=t; printf(“%d %d %d”,a,b,c);安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 4.4循环结构程序设计 循环结构即满足一定条件时重复执行一段程序。循环结构即满足一定条件时重复执行一段程序。 c c语言中实现循环结构的语句主要有三种:语言中实现循环结构的语句主要有三种:while while 语句、语句、do-whiledo-while语句以及语句以及 forfor语句。用语句。用ifif语句和语句和gotogoto语句结合也可以实现循环结构。语句结合也可以实现循环结构。4.4.1 goto语句 作用:将程序的执行流程作用:将程序的执行流程无条件

45、地转移无条件地转移到标号所指语句到标号所指语句形式:形式:goto 语句标号语句标号;用来定义程序中的某一个位置用来定义程序中的某一个位置用标识符表示用标识符表示滥用滥用goto语句会破坏程序语句会破坏程序结构化,所以应限制使用结构化,所以应限制使用u可用可用if - goto语句构成循环。语句构成循环。例:计算例:计算31kks#includevoid main() int k=1,s=0; loop: if (k=3) s=s+k; k+; goto loop; printf(“s=%d”,s);安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 #includevoid main

46、() int x=1; loop:if( x5 ) printf(%4d,x); x+; goto loop; 运行结果如下:运行结果如下: 1 2 3 4安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 作用:实现当型循环(先判断后执行)作用:实现当型循环(先判断后执行)形式:形式: while(表达式表达式) 循环体语句循环体语句 ; 4.4.2 while语句 真真假假表达式表达式语语 句句执行过程:执行过程: 当表达式的值为真,执行循当表达式的值为真,执行循环体(内嵌语句),执行完再判环体(内嵌语句),执行完再判断表达式的值,如此重复,直到断表达式的值,如此重复,直到表达式为

47、假时停止。表达式为假时停止。例例4.15 求求1到到100的和。的和。#includevoid main() int i, sum; i=1; sum=0; while ( i=100 ) sum=sum+i; i+; printf (“sum=%d”, sum);运行结果:运行结果:sum=5050表达式表达式i=100 称循环控制表达式称循环控制表达式i 为循环控制变量为循环控制变量1001kks循环体循环体安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 注注 意意循环开始前应该给循环控制变量赋初值。循环开始前应该给循环控制变量赋初值。如果循环体包含两条或两条以上的语句,就用一

48、对花括如果循环体包含两条或两条以上的语句,就用一对花括号括起来,构成一个复合语句,使之在语法上等同于一号括起来,构成一个复合语句,使之在语法上等同于一条语句。否则,只有第一条语句会被循环执行,其余的条语句。否则,只有第一条语句会被循环执行,其余的会被当成循环语句的后续语句。会被当成循环语句的后续语句。循环体中应该包含使循环趋向于结束的语句,换句话说:循环体中应该包含使循环趋向于结束的语句,换句话说:就是要有改变循环条件的语句。否则可能导致死循环就是要有改变循环条件的语句。否则可能导致死循环(无限循环)。(无限循环)。循环体可以为空,如循环体可以为空,如while (c= getchar( )

49、)!=A);等价于等价于 c=getchar();while (c!=A) c= getchar();按照优先级,先完成按照优先级,先完成getchar( )然后将输入值赋给然后将输入值赋给C再判断是否满足再判断是否满足c!=A例例 求求100以内的奇数、偶数之和。以内的奇数、偶数之和。#includevoid main() int n=1, odd=0,even=0; while ( n100 ) odd+=n; even+=n+1; n=n+2; printf (“奇数和奇数和=%d,偶数和,偶数和=%d”, odd,even);可以换成可以换成while ( n=100 ) if ( n

50、%2=0 ) even+=n; else odd+=n; n+; 第一种算法比较好,第一种算法比较好,无判断,循环次数少无判断,循环次数少安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 作用:实现直到型循环(先执行后判断)作用:实现直到型循环(先执行后判断)形式:形式: do 循环体语句循环体语句 while(表达式表达式) ; 4.4.3 do-while语句 执行过程:执行过程: 先执行循环体语句,再判断表先执行循环体语句,再判断表达式的值,若表达式的值还为真,达式的值,若表达式的值还为真,则再执行循环体语句则再执行循环体语句,如此反复,如此反复,只要表达式为真就执行循环体,只

51、要表达式为真就执行循环体,直到表达式的值为假时停止。直到表达式的值为假时停止。 分号不可省略分号不可省略表达式表达式语语 句句真真假假注意点与注意点与while语句相同,见上节。语句相同,见上节。例例4.16 求求1到到100的和。的和。#includevoid main() int i, sum; i=1; sum=0; do sum=sum+i; i+; while ( i=100 ); printf (“sum=%d”, sum);运行结果:运行结果:sum=50501001kksdo-while语句与语句与while语句用法语句用法基本相同,区别在于:基本相同,区别在于:while语句

52、是先判断后执行,语句是先判断后执行,do-while语句先执行后判断。语句先执行后判断。while语句中的循环体有可能一语句中的循环体有可能一次都不执行,而次都不执行,而do-while语句中语句中循环体至少执行一次。循环体至少执行一次。安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 形式:形式: for(表达式表达式1;表达式;表达式2;表达式;表达式3) 循环体语句循环体语句 ;4.4.4 for语句 注:注:表达式表达式1在进入循环之前求解;在进入循环之前求解; (通常是循环变量赋初值)(通常是循环变量赋初值)表达式表达式3是循环体的一部分;是循环体的一部分;表达式表达式2循

53、环体语句循环体语句表达式表达式3表达式表达式1真真假假图4.10 for 循环的流程图比较常用的比较常用的for语句形式如下:语句形式如下:for(循环控制变量赋初值;循环控制表达式;循环控制变量赋初值;循环控制表达式;循环控制变量自增(减)循环控制变量自增(减)) 循环体语句;循环体语句;例例4.17 求求1到到100的和。的和。#includevoid main() int i, sum; sum=0; for ( i=1; i=100; i+) sum=sum+i; printf(“sum=%d”,sum);1001kks 表达式表达式1可以是简单表达式也可以是逗号可以是简单表达式也可以

54、是逗号表达式,表达式表达式,表达式2一般是关系表达式或逻一般是关系表达式或逻辑表达式,也可以是其它表达式(值为辑表达式,也可以是其它表达式(值为“零零”时为假,时为假, 值为值为“非零非零”时为真)时为真) 如:此例中可以写成如:此例中可以写成 for ( i=1, sum=0; i=100; i+) sum=sum+i; 小括号中的表达式小括号中的表达式1、表达式、表达式2、表达式、表达式3 均可省略不写,但其中的两个均可省略不写,但其中的两个“;”不不可省略可省略i=1;for( ; i100) break;for(i=1; i100 ) break; i+; 例例#includevoid

55、 main() char c; for ( ; ( c=getchar() ) !=n; ) putchar(c); putchar(n); 程序功能:读入一个字符,程序功能:读入一个字符,当它不是回车符时就输出当它不是回车符时就输出注:注:getchar() 仅当遇到回车符时才开始执行,即开始从键盘缓冲区中取字符仅当遇到回车符时才开始执行,即开始从键盘缓冲区中取字符如果输入如果输入 OK! 则输出则输出 OK!并不是并不是 OOKK!(也就是说,不是输一个读一个)(也就是说,不是输一个读一个)此条语句若改为:此条语句若改为:if (c=65&c=97&c=122) print

56、f (“%c”, c);则只输出字母(大写或小写),限制输出则只输出字母(大写或小写),限制输出的条件。的条件。安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 4.4.5 三种循环语句的比较 不提倡用不提倡用goto循环循环 关于循环的控制关于循环的控制 while(表达式表达式) 语句;语句;for(表达式表达式1;表达式表达式2;表达式表达式3) 语句语句 ; do 语句语句 while(表达式表达式) ;循环控制条件循环控制条件修改循环变量修改循环变量也可在也可在for前前循环条件初始化循环条件初始化 先判断后执行:先判断后执行:while语句;先执行后判断:语句;先执行后判

57、断:do-while语语句句 for循环功能强,程序设计较随意循环功能强,程序设计较随意 都可以用都可以用break语句终止循环,用语句终止循环,用continue语句结束本次语句结束本次循环。(后续内容)循环。(后续内容)安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 4.4.5 三种循环语句的比较 while循环,循环,do-while循环以及循环以及for循环这三种循循环这三种循环语句功能基本相同,解决同一个问题往往既可环语句功能基本相同,解决同一个问题往往既可以用以用do-while循环,也可以用循环,也可以用while循环或者循环或者for循环。一般来说,如果退出循环的条

58、件跟循环体循环。一般来说,如果退出循环的条件跟循环体执行情况有关,则选择执行情况有关,则选择while循环或循环或do-while循环,循环,如果循环次数在循环体执行之前就已经确定则选如果循环次数在循环体执行之前就已经确定则选择使用择使用for循环,如果要循环体至少要执行一次,循环,如果要循环体至少要执行一次,应选择使用应选择使用do-while循环。循环。 安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 #includevoid main() int i, j; for ( i=1; i=5; i+) for ( j=1; j6; j+) printf (%d, j);4.4.6

59、 循环嵌套 一个循环体内包含着另一个完整的循环结构一个循环体内包含着另一个完整的循环结构 内嵌的循环又可以嵌套循环,从而构成多重循环内嵌的循环又可以嵌套循环,从而构成多重循环 三种循环可以相互嵌套三种循环可以相互嵌套例例 分析下列程序,分析下列程序, printf 函数调用语句执行了多少次?函数调用语句执行了多少次? 外循环外循环内循环内循环循环次数等于内外循循环次数等于内外循环次数的乘积环次数的乘积内循环是外循环体中的一条语句内循环是外循环体中的一条语句安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 例例 for ( i=1; i=9; i+ ) for( j=1; j=2*n

60、并且并且 m3*n (两倍多,不能大于三倍)(两倍多,不能大于三倍)则则n为满足条件的三位数为满足条件的三位数安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 #includevoid main() int i, j, k, n, m, s=0; for ( i=1; i=2; i+ ) for ( j=0; j=9; +j) for ( k=2; j=2*n & m=2*n 并且并且 m3*n (两倍多,不能大于三倍)(两倍多,不能大于三倍)则则i为满足条件的三位数为满足条件的三位数#includevoid main() int i, n1, n2, n3, m, s=0; for ( i=101; i=2*i & m3*i ) +s; printf(“ %d ”, i); if (s%10=0) printf(“n”); 安徽三联学院安徽三联学院 信息与通信技术系信息与通信技术系 4.4.7 break语句 作用作用:用于循环

温馨提示

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

评论

0/150

提交评论