C语言控制结构_第1页
C语言控制结构_第2页
C语言控制结构_第3页
C语言控制结构_第4页
C语言控制结构_第5页
已阅读5页,还剩124页未读 继续免费阅读

下载本文档

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

文档简介

1、Chap3 控制结构控制结构1 1掌握选择结构与循环结构控制语句的作用与使用规范掌握选择结构与循环结构控制语句的作用与使用规范 2 2学习结构化程序设计中常用的基本算法学习结构化程序设计中常用的基本算法3 3进行算法设计训练,能综合控制结构语句解决一般问题进行算法设计训练,能综合控制结构语句解决一般问题 4 4能正确输入输出数据,并学习程序调试基本方法能正确输入输出数据,并学习程序调试基本方法Chap3 控制结构控制结构3.1 顺序结构与基本输入输出顺序结构与基本输入输出3.2 分支结构分支结构3.3 循环结构循环结构3.4 循环程序设计循环程序设计3.5 应用举例应用举例Chap3 控制结构

2、控制结构3.1.1 C语句概述 3.1.2 顺序结构程序设计 3.1.3 字符输入输出 3.1.4 格式输入输出 Chap3 控制结构控制结构源程序的基本组成单位是语句,语句用于完成一定的操作任务。C语句有以下五类:1 1说明语句说明语句变量定义、变量说明、函数说明、结构说明等变量定义、变量说明、函数说明、结构说明等 int x,y=4; 定义整形变量x、y,并初始化变量yextern int x,y; 说明整形变量x、y是已被定义的全局变量int max(int ,int ); 声明函数maxChap3 控制结构控制结构2. 2. 控制语句,完成程序流程控制控制语句,完成程序流程控制if(

3、)else 选择结构语句选择结构语句for() 循环语句循环语句switch多分支选择结构语句多分支选择结构语句return 从函数返回语句从函数返回语句Chap3 控制结构控制结构3. 3. 表达式语句:在表达式后面加分号构成。表达式语句:在表达式后面加分号构成。例:例:a = 3; /* 赋值语句赋值语句 */i+; /* 算术表达式语句算术表达式语句 */ 表达式能构成语句是C的特色。4. 4. 空语句:空语句:只有分号只有分号“;”组成的语句,什么也不执行,但占据了一组成的语句,什么也不执行,但占据了一个语句的位置,也起一条语句的作用。个语句的位置,也起一条语句的作用。 常用于需要一个

4、语句但不需要任何操作的情况常用于需要一个语句但不需要任何操作的情况。 Chap3 控制结构控制结构5 5复合语句(语句块)复合语句(语句块) 由大括号由大括号 括起来的语句序列,在语法上复合括起来的语句序列,在语法上复合语句被看作一条语句。语句被看作一条语句。例例: int x , y; z = x + y; t = z / 100; printf(%f,t);复合语句常用于任何需要一条语句的地方复合语句常用于任何需要一条语句的地方 。Chap3 控制结构控制结构例3- 1 键盘输入一个三位数,输出逆序后的数。#includevoid main( ) int x, y, a, b, c; pr

5、intf(Please input a num:); scanf(%d,&x); a=x/100; b=x/10%10; c=x%10; y=100*c+10*b+a; printf(x=%d, y=%dn,x,y); 顺序结构,就是语句按照编写的顺序依次执行。Chap3 控制结构控制结构1C本身没有输入输出语句,数据的I/O由函数实现。 2源程序的开头使用如下语句: #include #include “stdio.h” Chap3 控制结构控制结构1. 字符输出函数字符输出函数putchar()int putchar(int c) 作用:向终端输出一个字符。参数C可以int型与char型。

6、 Chap3 控制结构控制结构例:#include stdio.h void main() char a,b,c; a = B; b = O; c = Y; putchar(a); putchar(b); putchar(c); 程序输出:BOY 注:若要输出小写的boy,程序怎样修改?若没有#include “stdio.h” 会怎样?Chap3 控制结构控制结构函数参数可以是转义字符例:putchar(n);输出换行符putchar(101);输出字符 Aputchar(); 输出单引号 putchar(012); 输出换行符putchar(015); 输出回车.不换行,光标到本行首Cha

7、p3 控制结构控制结构形式:int getchar(void)作用:从stdin(键盘)输入一个字符,同时有回显。 函数无参数,返回接收到的输入字符原型定义:stdio.h 常用用法:变量变量=getchar();Chap3 控制结构控制结构#include stdio.hvoid main() char c; c = getchar(); putchar(c);putchar(getchar();输出(如在键盘上输入“a”):aaChap3 控制结构控制结构1. 格式输出函数格式输出函数printf()作用:按指定的格式输出指定数据一、 printf()的一般格式printf(格式控制,输出

8、列表);例: int i = 3;double f = 4.56;printf(i = %d, f = %lfn, i,f); Chap3 控制结构控制结构1. 格式控制:控制按指定格式输出后面的参数。以“”括起。格式控制组成:格式控制组成:普通字符普通字符(不含(不含%的字符),原样输出(可为转义字符)的字符),原样输出(可为转义字符)格式说明符格式说明符(%格式字符),控制输出数据的格式。格式字符),控制输出数据的格式。2. 输出表列:需要输出的数据,以,分隔。可为常、变量、表达式、函数,受格式控制中格式符的控制。也可以没有输出表列,如:l printf(“NametAddtTeln”);

9、Chap3 控制结构控制结构二、格式字符1. d格式符:按十进制有符号数格式输出格式符:按十进制有符号数格式输出d按int型数据实际长度输出 %md 按m指定的宽度输出(不足补空格,大于m位时按实际长度输出),右对齐 %ld,%mld 输出long int 型数据,m指定输出宽度 %hd,%mhd输出short int型数据%0md,%0mld,%0mhd 0(数字0)表示位数不足m时补0 %-md,%-mld 左对齐输出,右边补空格 注:%后面的m(位数控制)、0(位数不足补0)对于其他格式符也适用。 Chap3 控制结构控制结构例:(表示空格)int i = 123;long j = 12

10、3456;printf(%d%5d%05d,%ld%8ld%08ld,i,i,i,j,j,j);结果:12312300123, 12345612345600123456 强调:对long型数据要用%ld输出,若用%d可能会发生错误。 同理,short int 数据要用%hdChap3 控制结构控制结构2. o(字母字母)格式符:格式符:按八进制无符号数的格式输出。按八进制无符号数的格式输出。符号位作为数一并输出。 例:short int a=-1; printf(“a=%hd,%hon”,a,a);结果:a=-1,1777773、x格式符:按十六进制无符号数格式输出格式符:按十六进制无符号数格

11、式输出int型数型数。4、u格式符:以无符号十进制形式输出整数格式符:以无符号十进制形式输出整数对long int数据都需要附加l,对short int 需要附加h如 %lo , %10hx , %-10loChap3 控制结构控制结构5、c格式符:格式符:以字符形式输出。例:char c=101;printf(%c,c);也可以使用:%mc、%-mc Chap3 控制结构控制结构6、s格式符:格式符:以字符串格式输出。%s例:printf(%s,CHINA); %ms m指定宽度(不足时左补空格,大于时按实际宽度输出),右对齐 %-ms 左对齐,不足m时右补空格 %m.ns 输出占m列,取字

12、符串左端n个字符,左补空格 %-m.ns 同上,n个字符输出,占m列,右补空格 Chap3 控制结构控制结构7、f格式符:格式符:按小数格式输出实数。printf(%0.3f,123.45678); 显示 123.457%f按小数格式输出,整数部分全输出,6位小数%m.nf输出占m列(含小数点),其中n位小数(四舍五入)%-m.nf同上,左对齐%lf用于double型数据Chap3 控制结构控制结构%e 指数形式输出实数,尾数保留6位小数 。 %m.ne n指保留尾数部分小数位数,右对齐 %-m.ne 左对齐 %ledouble a=-1.1e300;printf(a=%le,sizeof=%

13、dn,a,sizeof(a);输出:a=-1.100000e+300,sizeof=8Chap3 控制结构控制结构一、一般格式作用:按规定格式输入形式:int scanf(格式控制格式控制,地址列表,地址列表)原型定义:stdio.h将键盘输入的数据按指定的格式接收、转换后,送到相应的地址中。 Chap3 控制结构控制结构#include stdio.h void main() int a,b,c; scanf(%d%d%d,&a,&b,&c); printf(%d,%o,%xn,a,b,c); 运行时输入:101112 程序输出:10,13,cChap3 控制结构控制结构二、格式说明与pri

14、ntf()的格式控制类似格式字符说明d 用于输入十进制数o用于输入八进制数x用于输入十六进制数c用于接收单个字符s接收字符串认为空格是结束符f用于输入实数(小数或指数均可接收)e与f相同附加格式说明符l用于long(%ld)和double(%lf)型数据h用于短整型数据(%hd、%ho、%hx)域宽(一个正整数)指定输入所占宽度*表示对应输入量不赋给一个变量Chap3 控制结构控制结构1. 可以指定输入数据的列数,系统自动按它截取所需数据。例:例:scanf(%2d%3d,&a,&b);输入输入 123456 系统自动将系统自动将12赋给赋给a,345赋给赋给b。2. *格式用于跳过一个数据域

15、scanf(%2d%*3d%2d,&a,&b);输入:输入:1234567 结果,结果,a=12,345被跳过,被跳过,b=67。*主要用于利用现有数据时,跳过某些数据项。主要用于利用现有数据时,跳过某些数据项。3. 输入实数不能规定精度如:如:scanf(%7.2f,&a);Chap3 控制结构控制结构1、sacnf()中的变量必须使用地址。int a, b;scanf(“%d,%d”,a,b);错误 scanf(“%d,%d”,&a,&b);正确正确2、scanf()的“格式控制”中,可以使用普通字符,但在输入时必须输入这些字符,成为 数据输入时的分隔符。例:例:scanf(%d,%d,&

16、a,&b);输入:输入: 3,4 (逗号与(逗号与%d,%d中的逗号对应)中的逗号对应)Chap3 控制结构控制结构例:scanf(%d%d,&a,&b);输入:34 (两个或以上空格)例:scanf(%d:%d:%d,&h, &m, &s);输入: 12:23:36 (与格式控制中的冒号对应)例:scanf(a=%d,b=%d,c=%d,&a,&b,&c);输入:a=12,b=24,c=36 (a=,b=,c=及逗号与格式控制相对应)Chap3 控制结构控制结构3、在用“%c”输入时,空格、回车、TAB等均作为有效字符被接收。例:例:scanf(%c%c%c,&c1,&c2,&c3);输入:

17、输入:abc 结果:结果:ac1,c2,bc3 (其余被丢弃其余被丢弃)若输入:若输入:123ab结果:结果:1c1,2c2,3c3 Chap3 控制结构控制结构4、输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数)。 遇空格、遇空格、“回车回车”、“跳格跳格”键或用户指定的分键或用户指定的分隔符。隔符。 遇宽度结束。遇宽度结束。 遇非法输入。遇非法输入。Chap3 控制结构控制结构5、注意%c与%d混合使用时的问题。例:scanf(“%c%d%c”,&a,&b,&c);执行: a12c 结果:a=a,b=12,c=c a12c 结果:a=a,b=12,c= 6、数据类型与

18、格式符匹配使用%f %lf 用于实型%d %o %x 用于整型%c 用于字符型Chap3 控制结构控制结构1. scanf函数变量名前没有&会怎样?编译器会报错吗?2. a=getchar() 与 scanf(%c,&a) 的异同3. 怎样设计scanf使得输入数据时减少出错? Chap3 控制结构控制结构程序需要进行比较与逻辑判断,根据判断结果决定不同的操作。确定判断的条件确定判断的条件确定判断结果为确定判断结果为“真真”或或“假假”时执行的不同时执行的不同操作操作 Chap3 控制结构控制结构关系运算:也称比较运算,比较两个运算对象的大小。关系表达式:关系运算符连接的式子,关系表达式可能结

19、果有:“真”(true)和“假”(false)。例:a 3、a=3、a!=3Chap3 控制结构控制结构 小于优先级相同(高)大于=大于等于=等于优先级相同(低)!=不等于Chap3 控制结构控制结构中的逻辑值: (假)(真)关系表达式: 用关系运算符连接的表达式。关系表达式的值: 0、1 与int 型等效例:若a=3, b=2, c=1, 则: ab 真,表达式的值为1(ab) = = c真,表达式的值为1b+cb d的值等于1f = abc f的值等于0 注意:数学式abc应写为ab&bcChap3 控制结构控制结构右结合双目运算符右结合双目运算符优先级优先级例:例:ca+b 等效于等效于

20、c(a+b) ab!=c 等效于等效于(ab)!=c a=bc 等效于等效于a=(bc 等效于等效于a=(bc) Chap3 控制结构控制结构1. 逻辑运算符及其优先次序 &逻辑与“双目运算符”:要求两个操作数,如:(ab) & (xy) |逻辑或!逻辑非单目运算符,要求一个操作数,如:!(ab) 优先级:优先级:! ! 高于高于 & & 高于高于 | | Chap3 控制结构控制结构1&1=11&0=00&1=00&0=01|1=11|0=10|1=10|0=0!1=0!0=1逻辑运算规则表逻辑运算规则表混合运算:混合运算:!a&b=c|x!a&b=c|x* *2y+3&c+2y+3&c+按

21、右图优先级运算。按右图优先级运算。Chap3 控制结构控制结构用逻辑运算符将关系表达式或逻辑量连接起来。在C中,参与逻辑运算的数据可为任意类型,非0即为真,0为假。例:a+b|c值为1 a&0值为0 53&2|83)&(b=a=b)&(b=31)后 a的值为1,b的值为0应用:常直接用逻辑表达式构造条件。例如闰年条件:(y % 4 = = 0 & y % 100 != 0 )|( y % 400 = = 0 )Chap3 控制结构控制结构条件条件语句块语句块1语句块语句块2exprstatement1statement2非非0=03.2.1 if语句1. if-else分支if if (表达式

22、)(表达式) 语句块语句块1 1;else else 语句块语句块2 2;Chap3 控制结构控制结构例3- 6 输入一个字符,判断它是否为英文小写字母。#include void main() char c; printf(Please input a character:); c=getchar(); if(c=a&c=60) printf(Passedn);else printf(Failedn); printf(You must take this course againn); 变量变量score的值大于的值大于60时,程序将输出:时,程序将输出:PassedYou must tak

23、e this course againChap3 控制结构控制结构(3)ifelse语句执行完毕后执行ifelse的后续语句。系统将整个ifelse结构处理为一条语句单元。Chap3 控制结构控制结构if (表达式) 语句; exprstatement非非0=0条件条件语句语句1Chap3 控制结构控制结构#includevoid main() int a,b,c,t; scanf(%d%d%d,&a,&b,&c); if(ab) t=a;a=b;b=t; /*变量a与b互换,t为中间变量*/ if(ac) t=a;a=c;c=t; if(bc) t=b;b=c;c=t; printf(%d,

24、%d,%dn,a,b,c); Chap3 控制结构控制结构例3- 8 设计一个加法计算训练程序,由机器随机产生两个整数,让用户计算两数之和,若用户计算正确则打印“Right”,否则打印“Wrong”。#includevoid main() int a,b,s; a=rand(); /*rand()是库函数,随机产生一个0-32767之间的数*/ b=rand(); printf(%d+%d=,a,b); scanf(%d,&s); /*用户输入结果*/ if(s=a+b) /*计算机判断用户结果是否正确*/ printf(Rightn); else printf(Wrongn); Chap3

25、控制结构控制结构多条语句为内嵌时忘记用多条语句为内嵌时忘记用 括起来。括起来。在在if(表达式表达式)之后多加一个分号。之后多加一个分号。比较运算符比较运算符“=”与赋值运算符与赋值运算符“=”混淆使用。最混淆使用。最常见的错误为:常见的错误为:if(if(x x=1=1) ) 误写为:误写为:if(if(x x=1=1) ) 无论x的原值是什么,赋值表达式x=1的值总为1,其作为条件时恒为真。Chap3 控制结构控制结构if (表达式1) 语句1;elseIf (表达式2) 语句2;elseIf (表达式3) 语句3elseif (表达式m) 语句melse 语句n条件条件语句语句1条件条件

26、2语句语句2语句语句3条件条件3Chap3 控制结构控制结构Chap3 控制结构控制结构应用多分支结构编写此程序,根据用户输入的自变量x的值,计算y的值 。)60()6030()300()0(0)(32xxxxxxxxfyChap3 控制结构控制结构void main() float x; printf(please input x:); scanf(%f,&x); if(x0.0) printf(y=0n); else if(x=30) printf(y=%fn,x); else if(x=60) printf(y=%fn,x*x); else printf(y=%fn,x*x*x);Cha

27、p3 控制结构控制结构条件语句1语句2条件语句1条件语句1条件2语句2语句3条件3Chap3 控制结构控制结构条件语句1语句2条件语句1条件语句组语句组条件条件语句组语句组语句组语句组语句组语句组Chap3 控制结构控制结构if(条件表达式条件表达式1) if(条件表达式条件表达式2) 程序块程序块1; else 程序块程序块2;else if(条件表达式条件表达式3) 程序块程序块3; else 程序块程序块4;ifelse的内嵌程序块中又包含一个或多个ifelse语句称为if语句的嵌套,常用于实现多路选择。 Chap3 控制结构控制结构嵌套嵌套if语句时,必须特别注意语句时,必须特别注意i

28、f与与else配对。配对。配对原则:从最内层开始,配对原则:从最内层开始,else总是与它上面最总是与它上面最接近的(未曾配对的)接近的(未曾配对的)if配对。配对。避免避免if与与else配对错位的最佳办法是加大括号,同配对错位的最佳办法是加大括号,同时,为了便于阅读,使用适当的缩进,(只有大时,为了便于阅读,使用适当的缩进,(只有大括号能保证括号能保证if和和else不错位配对,缩进仅便于阅读)不错位配对,缩进仅便于阅读)Chap3 控制结构控制结构例:例: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);修改:修改: if (a

29、=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);实现实现 if else 正确配对方法:加正确配对方法:加 Chap3 控制结构控制结构if (p1) if (p2) 语句A;else if (p3)语句B; else 语句C;语句D;比较差异:if (p1)if (p2) 语句A;else if (p3)语句B; else 语句C;语句D;Chap3 控制结构控制结构#include void main() int a,b,c,max; printf(please input three numbers:n); scanf(%d%d%d,&a

30、,&b,&c); max=a; if(cb) if(ca) max=c; else if(ba) max=b; printf(the max is %dn,max);max=a;if(cb) if(ca) max=c; else if(ba) max=b; printf(the max is %dn,max);运行时:运行时:please input three numbers:输入:输入:2 5 3输出:输出:the max is 2Chap3 控制结构控制结构(1)相配对的if与else书写于同一列上, 内嵌语句缩格书写,以表明层次结构。(2)if语句多重嵌套实现多路选择时,应尽可能的在e

31、lse中分支,即在else中嵌套另一个if语句,而不要在if中嵌套。(3)具体实现时,每一个 if的条件为真时只有唯一的一种情况,而将剩余的各路选择放在else中一次次细分。Chap3 控制结构控制结构在if语句中,在“表达式”为“真”和“假”时,都只执行一个赋值语句给同一个变量赋值,例如:if (ab) max = a;else max = b;可以用如下赋值语句来处理:max = (ab) ? a : b;条件运算符要求有三个操作对象,称为“三目运算符”(它是C语言中唯一的一个三目运算符)。 Chap3 控制结构控制结构条件表达式的一般形式: 表达式1?表达式2:表达式3说明:1执行顺序:

32、先求解表达式先求解表达式1的值,的值,若其为真,求解表达式若其为真,求解表达式2的值,做为整个条件表达式的的值,做为整个条件表达式的值;值;若表达式若表达式1为假,则求解表达式为假,则求解表达式3的值,的值, 且整个条件表达且整个条件表达式的值等于表达式式的值等于表达式3。max = (ab)?a:b 把条件表达式的值赋给max。 Chap3 控制结构控制结构2优先级:高于赋值运算符,低于算术运算符、关系运算符和逻辑运算。max = (ab)?a:b max = ab?a:bab?a:b+1 (ab)?a:(b+1)3结合性:右结合。ab?a:cd?c:d (ab)?a:(cd?c:d)4if

33、else与条件表达式的替代:if (ab) printf(%d,a);else printf(%d,b); 替代:printf(%d,ab?a:b); Chap3 控制结构控制结构5表达式1、表达式2、表达式3的类型可以不同。6可以嵌套。max=(ab?a:b)c? (ab?a:b):c例:P48 例3-13,大小写转换。(read)if(ch=a&ch=z&ch=z)?32:0Chap3 控制结构控制结构其一般形式:switch(表达式) case 常量表达式1:语句1;break; case 常量表达式2:语句2;break; case 常量表达式n:语句n;break; default:

34、语句n+1 不能省不能省各常量值必须不相等各常量值必须不相等breakbreak用于跳出用于跳出switchswitchChap3 控制结构控制结构grade=getchar();switch (grade) case A:printf(“90100n); case B:printf(7589n); case C:printf(6074n); case D:printf(60n); default: printf(errorn); 如果输入A,回车,输出?当当grade=Agrade=A时,程序从时,程序从printf(“90printf(“90100n)100n)开开始执行,因此输出结果为:

35、始执行,因此输出结果为: 90100 7589 6074 60n); break; 7、case后面必须是整形常量或字符型常量。后面必须是整形常量或字符型常量。 Chap3 控制结构控制结构#include void main() char c1,c2; printf(please input the score:); scanf(%c%c,&c1,&c2);Chap3 控制结构控制结构switch(c1)switch(c1) case 5: switch(c2) case 5: switch(c2) case +: printf(100n); break; case +: printf(10

36、0n); break; case n: printf(90n); break; case n: printf(90n); break; case -: printf(85n); break; case -: printf(85n); break; break; break; case 4: switch(c2) case 4: switch(c2) case +: printf(80n); break; case +: printf(80n); break; case n: printf(75n); break; case n: printf(75n); break; case -: prin

37、tf(70n); break; case -: printf(70n); break; break; break; case 3: printf(60n); break; case 3: printf(60n); break; case 2: case 2: case 1: printf case 1: printf(60n); break;(60n); break; Chap3 控制结构控制结构在一个算法中,某些步骤需要反复多次地执行时,需要设计一个循环。循环是在给定循环条件为真时由计算机重复执行一组循环体语句的控制结构 。循环结构是结构化程序三种基本结构之一。构建循环让计算机反复执行一组操

38、作语句,从而完成大量类同的计算。 Chap3 控制结构控制结构根据开始循环的初始条件和结束循环的条件不同,C语言中用如下语句实现循环1、用、用while语句。语句。2、用、用do-while语句。语句。3、用、用for语句。语句。 Chap3 控制结构控制结构一般形式:while(表达式表达式) 循环体语句;循环体语句;作用:实现“当型”循环。当“表达式”为非0(真)时,执行“循环体语句”,其后回到循环开始while处再次判断表达式真假,直至表达式为假,结束循环,执行while后续。特点:循环体只能是一条语句。若有多条语句,使用循环体只能是一条语句。若有多条语句,使用 使之成使之成为复合语句。

39、为复合语句。表达式一般是关系或逻辑表达式。当然,在表达式一般是关系或逻辑表达式。当然,在C中也可以为中也可以为任意类型表达式。任意类型表达式。Chap3 控制结构控制结构表达式循环体假真当表达式的值为真循环体Chap3 控制结构控制结构例例3-16 求求 void main()int i,n,sum=0; i = 1; printf(“please input:”); scanf(“%d”,&n); while (i 0); printf(“s=%dn”,s);nii1Chap3 控制结构控制结构#include#includevoid main() int y,i; double x,z;

40、printf(Please input x and y:); scanf(%lf%d,&x,&y); z=1;i=1; do z*=x; i+; while(i=fabs(y);if(y0) z=1/z; printf(result=%lfn,z); 循环条件一开始为假,循环执行一次循环条件一开始为假,循环执行一次。Chap3 控制结构控制结构while和和do-while是可以互换的。是可以互换的。在一般情况下,用在一般情况下,用while和和do-while语句解决同语句解决同一问题时,若二者的循环体部分是一样的,它们一问题时,若二者的循环体部分是一样的,它们的结果也一样。的结果也一样。但

41、当循环条件一开始就为但当循环条件一开始就为“假假”时,两种循环的时,两种循环的结果不同。这是因为此时结果不同。这是因为此时while循环的循环不被循环的循环不被执行,而执行,而do-while循环的循环体被执行一次。循环的循环体被执行一次。Chap3 控制结构控制结构#include#includevoid main() int y,i; double x,z; printf(Please input x and y:); scanf(%lf%d,&x,&y); z=1;i=1; if(y!=0) do z*=x; i+; while(i=fabs(y);if(y0) z=1/z;printf

42、(result=%lfn,z);Chap3 控制结构控制结构for(表达式(表达式1;表达式;表达式2;表达式;表达式3) 循环体语句;循环体语句; 执行过程:(1)求表达式)求表达式1;(2)求表达式)求表达式2,若为,若为“真真”,执行,执行“循环语句循环语句”;若为假,;若为假,转第(转第(5)步。)步。(3)求表达式)求表达式3。(4)转第()转第(2)步。)步。(5)执行)执行for语句下面的语句。语句下面的语句。 Chap3 控制结构控制结构计算表达式1循环体计算表达式3表达式2真假循环体当表达式2为真计算表达式1的值计算表达式3的值Chap3 控制结构控制结构#includevo

43、id main() int i,sum; for(i=1,sum=0;i=100;i+) sum+=i; printf(sum=%dn,sum);Chap3 控制结构控制结构for语句中:“表达式表达式1”循环变量初始化循环变量初始化“表达式表达式2”判别循环条件判别循环条件“表达式表达式3”循环控制变量更新循环控制变量更新例:for(sum=0,i=1;i=100;i+) sum = sum + i;这里,循环条件由变量i设定,变量i称为“循环变量”。 Chap3 控制结构控制结构(1) 表达式1和表达式3经常是逗号表达式,可以分别或同时省略。for语句省略“表达式1”。“表达式1”的作用是

44、设定循环初始条件,“表达式1”省略后,应在for语句前面设置循环初始条件。例:i=1;for(;i=100;i+) sum = sum + i;/* 注意,“表达式1”后面的分号不能省略 */Chap3 控制结构控制结构for语句省略“表达式3”。表达式3用于修改控制循环条件(修正循环变量的值),若省略,应在循环体语句中增加修改循环变量值的语句,以保证循环能正常结束。例:for (sum=0,i=1;i=100;) sum = sum + i;i+; Chap3 控制结构控制结构同时省略“表达式1”和“表达式3”,只有“表达式2”。例:i=1;sum=0;for(;i=100;) sum+=i

45、; i+; i=1;sum=0;for(;i=100;) sum+=i+;Chap3 控制结构控制结构(2) 表达式2是循环条件。如果省略“表达式2(循环条件)”,则不判别循环条件,认为循环循环条件始终为“真”,循环将无终止地进行下去。for(i=1,sum=0; ;i+) sum+=i;相当于:for(i=1,sum=0; 1 ; i+) sum+=i;(3)循环体只能是一条语句,循环体只能是一条语句,若包含多条语句,应用 括起来。Chap3 控制结构控制结构(4 4)forfor语句的其他变形语句的其他变形例1: for(sum=0,i=1;i100) break; (5)5)各表达式可为

46、逗号表达式各表达式可为逗号表达式 for(i=0,j=100; i=j; i+,j-) k = i + j; Chap3 控制结构控制结构用for语句计算x的y次方,y为整数。x与y的值都由键盘输入。 void main() int y,i; double x,z; printf(Please input x and y:); scanf(%lf%d,&x,&y); for(z=1,i=1;i=fabs(y);i+) z*=x; if(y0) z=1/z; printf(result=%lfn,z); Chap3 控制结构控制结构例3- 20 歌手大奖赛,有裁判12人。编写计算歌手得分程序,键

47、盘输入12个成绩,输出最高分、最低分与最终得分。#define N 12void main() int i; float score,max,min,sum,aver; scanf(%f,&score); max=min=sum=score; for(i=1;imax) max=score; if(scoremin) min=score; sum+=score; aver=(sum-max-min)/(N-2); printf(max=%6.2f,min=%6.2f,average=%6.2fn,max,min,aver); Chap3 控制结构控制结构循环嵌套:循环嵌套:一个循环(称为“外循

48、环”)的循环体内包含另一个循环(称为“内循环”)。内循环中还可以包含循环,形成多层循环。(循环嵌套的层数理论上无限制)。三种循环(while、do-while、for)可以互相嵌套。多重循环的使用与单一循环完全相同,但应特别注意内、外层循环条件的变化。内、外层循环变量赋初值的位置、变量名的使用等。注意:外循环必须完整地包含内循环。do while( ) for( ; ; ) do while( ); while( );Chap3 控制结构控制结构void main()long s=0,k; int i,n,j; scanf(“%d”,&n); for(i=1;i=n;i+) k=1; for(

49、j=1;j=i;j+)k*=j; s+=k; printf(“s=%ldn”,s); void main()long s=0,k; int i,n,j; k=1; scanf(“%d”,&n); for(i=1;i=n;i+) for(j=1;j=i;j+)k*=j; s+=k; printf(“s=%ldn”,s); 求求1! + 1!*2! + + 1!*2!*n! Chap3 控制结构控制结构void main()void main()long s=0,k;long s=0,k; int i,n int i,n; ; scanf(“%d”,&n scanf(“%d”,&n);); for

50、(i=1,k=1;i=n;i for(i=1,k=1;i=n;i+)+)kk* *=i;=i; s+=k; s+=k; printf(“s=%ldn”,sprintf(“s=%ldn”,s);); Chap3 控制结构控制结构例3- 21 打印九九乘法表。例3- 22 编程输出如下图形: 1 222 33333 4444444 555555555Chap3 控制结构控制结构1. break语句语句 在while、for、do-while或switch结构中使用,可使程序立即退出该结构,转而执行该结构后的第一条语句。注:break只可跳出所在的一重循环。在多重循环中使用,只能跳出其所在的内层循环

51、。Chap3 控制结构控制结构A;While(p1) B; for(C;p2;D) E; if(p3) break; F; G;H;Chap3 控制结构控制结构#includevoid main() int i,sum; for(sum=0,i=1;i+) sum+=i; if(sum1000) break; printf(n=%dn,i-1); #includevoid main() int sum=1,i; for(i=1;sum1000;i+) sum+=i; printf(i=%dn,i-2); Chap3 控制结构控制结构作用:提前结束本次循环体的执行,回到循环的起始处,接着进行下一

52、次循环条件的判别。说明:1.对于对于while,continue是回到是回到while处再次判断处再次判断条件,根据条件决定是否进行下一次循环;条件,根据条件决定是否进行下一次循环;2.对对do-while,回到,回到do处,重新执行循环体语句,处,重新执行循环体语句,并不判别循环条件。并不判别循环条件。3.对对for,来到表达式,来到表达式3处,执行表达式处,执行表达式3后再判断后再判断表达式表达式2。Chap3 控制结构控制结构While(p1) A; if(p2) continue; doif(p3) continue;B; while(p4); for(C;p5;D) if(p6) c

53、ontinue else break; E;Chap3 控制结构控制结构void main() int n; for (n=100; n=200; n+) if (n%3 = 0) continue;printf(%5d,n); void main() int n; for (n=100; n=60)。输入时以负数作为输入的结束。)。输入时以负数作为输入的结束。 void main() int s=1; while(s=0) scanf(%d,&s); if(s60)continue; printf(%d ,s); printf(n);Chap3 控制结构控制结构1. 注意各自的功能while

54、 (表达式1) while (表达式1) if (表达式2) if (表达式2) break; continue; break语句跳出循环 continue语句结束本次循环体的执行,进入下一次循环 2. 都不能单独使用。 break只能用于循环与switch控制结构中,continue只能用于循环控制结构中。Chap3 控制结构控制结构一般形式:goto 语句标号功能:无条件转向功能:无条件转向“语句标号语句标号”处执行。处执行。语句标号为一个标识符,放在语句前面,用语句标号为一个标识符,放在语句前面,用:与与语句分隔。语句分隔。goto语句引起一个无条件的转移,会破坏其他控制结构,不符合结构

55、化程序设计原则,破坏了程序结构的清晰,因此,一般应避免使用goto语句语句。 Chap3 控制结构控制结构#include void main() int i,s=0; scanf(%d,&i); if(i100) printf(Error); goto end; start: /* 语句标号 */ if(i=100) s+=i+; goto start; printf(s=%d,s); end: printf(n); /* 带语句标号的语句 */Chap3 控制结构控制结构3.4.1 循环设计循环设计循环是在循环条件为真时反复执行的一组计算机指令,是计算机解题的一个重要结构。循环控制有两种基

56、本方法:计数法和标志法。1. 计数器控制的循环事先准确地知道循环次数,因此设计一个循环控制变量,由变量值来控制循环次数。每循环一次,循环变量的值会递增(增值通常为1或-1),当其值达到终值时结束循环。Chap3 控制结构控制结构2. 标志控制的循环事先不知道准确的循环次数,由某一目标值标记循环的结束。C语言程序所需的任何控制形式可以用下面三种控制结构完成:顺序结构、if结构、while结构。 Chap3 控制结构控制结构程序设计的首要工作是算法设计,离开了算法也就没有了程序。算法,是指完成某一项工作而采取的方法和步骤,具体到程序设计,是对解题过程的准确而完整的描述,并用一种程序设计语言的来实现

57、。循环主要用来解决程序设计中两类基本的算法:穷举和迭代。 Chap3 控制结构控制结构穷举的基本思想是对问题的所有可能状态一一测试,直到找到解或将全部可能状态都测试过为止。穷举是一种重复型算法,其核心是设计循环,在循环体中依次测试。例例0:最大公因数:最大公因数例例1:百钱百鸡:百钱百鸡例例2:最值问题。输入十个数,输出其中最大、平均值。:最值问题。输入十个数,输出其中最大、平均值。例例3:素数问题。判断:素数问题。判断x是不是素数。是不是素数。例例3-30例例4:输出:输出100-1000之间所有素数,每行输出之间所有素数,每行输出5个。个。例例5:韩信点兵:韩信点兵Chap3 控制结构控制

58、结构Chap3 控制结构控制结构韩信有一队兵,他想知道有多少人,便让士兵排队报数。按1-5报数最后一人报1;按1-6报数末一人报5;按1-7报数最后一人报4;按1-11报数最末一人报10。韩信有多少兵?思考:设士兵数为x,满足以下关系式:x%5=1 & x%6=5 & x%7=4 & x%11=10用穷举法对x从1开始测试,直到找到满足关系式的xChap3 控制结构控制结构按照特定规律和方法,不断用新值取代变量的旧值,或由旧值递推出变量新值,直至问题解决为止,这种解决问题的方法为迭代。迭代的关键因素是:迭代初值、迭代公式和迭代次数(精度要求)。例例0:最大公因数:最大公因数例例1:输出:输出Fibonacci数列前数列前20项。项。例例2:牛顿迭代法解方程:牛顿迭代法解方程2x3-4x2+3x-6=0在在1.5附近附近的根的根迭代公式:迭代公式: xk+1=xk-f(x)/f(x) Chap3 控制结构控制结构x0X0,f(x0)xx=x-f(x0)/f(x0)f(x)牛顿迭代法牛顿迭代法x0Chap3 控制结

温馨提示

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

评论

0/150

提交评论