 
         
         
         
         
        版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第3 3章章 C C程序的流程控制程序的流程控制 3.1 C语句语句3.2 赋值语句赋值语句3.3 输入输出输入输出3.4 顺序结构程序设计顺序结构程序设计3.5 选择结构程序设计选择结构程序设计3.6 循环结构程序设计循环结构程序设计 C语句分为语句分为5类:类:控制语句控制语句:完成一定的控制功能。:完成一定的控制功能。 选择选择语句:语句:ifelse、switch 循环语句:循环语句:for、while、dowhile 结束本次循环语句:结束本次循环语句:continue 中止执行中止执行switch或循环语句:或循环语句:break 转向语句:转向语句:goto 从函数返回语句:从
2、函数返回语句:return3.1 C语句语句函数调用语句函数调用语句:由一个函数调用加一个:由一个函数调用加一个分号构成。分号构成。例如:例如:printf(This is a C statement. );表达式语句表达式语句:由一个表达式加一个分号:由一个表达式加一个分号构成。构成。例如:例如: a=3;空语句空语句:只有一个分号(:只有一个分号(;)的语句。)的语句。复合语句复合语句:用用 括起来的一些语句。括起来的一些语句。 例如:例如: z=x+y; t=z/100; printf(%f,t);3.2 赋值语句赋值语句1.赋值运算符:赋值运算符:=、+=、-=、*=、/=、%= 等等
3、作用:将一个数据赋给一个变量。作用:将一个数据赋给一个变量。2.赋值表达式赋值表达式 形式:形式:变量变量=表达式表达式 将表达式的值赋给变量将表达式的值赋给变量 例如:例如:a=5 b=a*4 变量变量(+、-、*、/、%)=表达式表达式将变量与表达式的值作相应运算后再赋给将变量与表达式的值作相应运算后再赋给变量。变量。例如:例如:x-=8 等价于等价于 x=x-8 y%=a+3 等价于等价于 y=y%(a+3)3.赋值表达式的值:等于左边赋值表达式的值:等于左边变量变量的值。的值。 4.赋值表达式后加分号构成赋值语句。赋值表达式后加分号构成赋值语句。写出下面表达式运算后写出下面表达式运算后
4、a的值的值(a=3(a=3* *5)=45)=4* *3 3a=3*5 a的值为的值为 15a=4 *3 a的值为的值为 12a*=a a的值为的值为1212144a-=144 a的值为的值为1441440a+=0 a的值为的值为 0写出下面表达式运算后写出下面表达式运算后a的值,设原来的值,设原来a=12,a已定义为整型变量。已定义为整型变量。a+=a-=a*=a 字符输出函数字符输出函数: putchar 字符输入函数字符输入函数: getcharu 格式输出函数格式输出函数: printfu 格式输入函数格式输入函数: scanf5C语言无语言无I/O语句,语句,I/O操作由函数实现操作
5、由函数实现5 #include 头文件头文件3.3 输入输出输入输出格式:格式:printf(格式控制格式控制,输出表列输出表列)功能:按指定格式向显示器输出数据功能:按指定格式向显示器输出数据printf函数(格式输出函数)函数(格式输出函数)输出表列:要输出的数据(可以没有,多个时以输出表列:要输出的数据(可以没有,多个时以“,”“,”分分隔)隔)格式控制:格式控制:格式说明:格式说明:% % 修饰符修饰符 格式字符格式字符,用于指定输出格式,用于指定输出格式转义字符:转义字符:nn,tt普通字符:原样输出普通字符:原样输出3.3.1 格式输出格式输出printf 格式字符格式字符格式字符
6、格式字符使用形式使用形式功能说明功能说明d%d %md %ld %mld带符号的十进制整数带符号的十进制整数o%o %mo %lo无符号的八进制整数无符号的八进制整数x,X%x %mx %lx无符号的十六进制整数无符号的十六进制整数u%u %lu 无符号的十进制整数无符号的十进制整数f%f %m.nf %-m.nf小数形式的单、双精度数小数形式的单、双精度数e,E%e %m.ne %-m.ne指数形式的单、双精度数指数形式的单、双精度数g,G%gf f、e e格式中较短者忽略格式中较短者忽略0 0c%c %mc输出一个字符输出一个字符s%s %ms %-ms %m.ns %-m.ns输出字符串
7、输出字符串% 输出输出“%”%”其中:其中:l l 用于长整型数用于长整型数 n n 小数位数或截取的字符个数小数位数或截取的字符个数m m 输出域的宽度输出域的宽度 - - 域内左对齐域内左对齐1%d以十进制整数形式输出。以十进制整数形式输出。例:例:#include void main( ) int a=123; long b=123456; printf(%d,%5d,%-5d,%2dn,a,a,a,a); printf(b=%ld,b); 运行结果:运行结果:123,123,123,123b=123456 2%f以小数形式输出单精度和双精度实数。以小数形式输出单精度和双精度实数。 整数
8、部分全部输出,并输出整数部分全部输出,并输出6位小数。位小数。例例3.10:按指定的小数位数输出实数:按指定的小数位数输出实数#includevoid main( ) float d=12.345; printf(d=%f,d=%.2f,d=%10.2f,d,d,d);运行结果:运行结果:d=12.345000,d=12.35,d=12.353%c输出一个字符。输出一个字符。例:例:#include void main( ) char c=a; printf(%c,c); 运行结果:运行结果: a4%s输出一个字符串。输出一个字符串。例:例:#include void main( ) prin
9、tf(%sn,CHINA); printf(%3s,%7.2s,%-5.3s,CHINA, CHINA, CHINA); 运行结果:运行结果:CHINACHINA, CH, CHI 3.3.2 scanf函数(格式输入函数)函数(格式输入函数)格式:格式:scanf(格式格式控制控制,地址表列),地址表列)功能:按指定格式从键盘输入数据,存入地址功能:按指定格式从键盘输入数据,存入地址表列指定的存储单元中表列指定的存储单元中, ,并按回车键结束并按回车键结束地址表列:变量的地址,用取地址运算符地址表列:变量的地址,用取地址运算符& &例:例:scanf(%d,&a);
10、输入:输入:10 则则 10 ascanf 格式字符格式字符格式字符格式字符使用形式使用形式功能说明功能说明d%d %md %ld %hd 带符号的十进制整数带符号的十进制整数o%o %mo %lo %ho无符号的八进制整数无符号的八进制整数x,X%x %mx %lx %hx无符号的十六进制整数无符号的十六进制整数u%u %lu 无符号的十进制整数无符号的十进制整数f%f %mf %lf 小数形式的单、双精度数小数形式的单、双精度数e,E%e %le同上同上g,G%g 同上同上c%c 输入单字符输入单字符s%s 输入字符串输入字符串*%* 不赋给相应变量不赋给相应变量其中:其中:mm数据输入域
11、的宽度数据输入域的宽度 hh用于短整型数据用于短整型数据l l 用于长整型或用于长整型或doubledouble型数据型数据输入分隔符的指定:一般以空格、输入分隔符的指定:一般以空格、TABTAB或或回车键作为分隔符回车键作为分隔符例例3.11:从键盘输入两个整数,求两数之和。:从键盘输入两个整数,求两数之和。#include void main( ) int a,b; scanf(%d,%d,&a,&b); printf(%d,a+b);输入输入 3,5 输出输出 8例例3: scanf(a=%d,b=%d,c=%d,&a,&b,&c); 输入输入 a
12、=12,b=24,c=36 则则 12a, 24 b, 36c例例1: scanf(%d,%d,&a,&b); 输入输入 3,4 则则 3a, 4 b例例2: scanf(%d:%d:%d,&a,&b,&c); 输入输入 12:30:45 则则 12 a, 30 b, 45 c “格式控制格式控制”中出现的普通字符,中出现的普通字符,原样输入原样输入。说明:说明:用用%c%c格式符时,空格和转义字符格式符时,空格和转义字符作为有效字符输入作为有效字符输入例:例:scanf(%c%c%c,&c1,&c2,&c3); 若输入若输入 a
13、 ab bc c 则则 ac1, c2, b c3输入数据时,遇以下情况认为该数输入数据时,遇以下情况认为该数据结束:据结束: 遇空格、遇空格、TABTAB、或回车或回车 遇指定的宽度结束遇指定的宽度结束 遇非法输入遇非法输入例:例: scanf(%d%c%f,&a,&b,&c); 若输入若输入 1234a123o.26 则则 1234 a, a b, 123 c格式:格式:putchar(c)参数:参数:c为字符为字符常量、变量或表达式。常量、变量或表达式。功能:将字符输出到显示器上。功能:将字符输出到显示器上。3.3.3 字符数据的输入输出字符数据的输入输出一、一、
14、 putchar函数(字符输出函数)函数(字符输出函数)#include void main( ) char a,b,c; a=B;b= O; c=Y; putchar(a); putchar(b); putchar(c); putchar(n);运行结果:运行结果:BOY例:例:putchar(a);putchar(n);putchar(b);putchar(n); putchar(c);运行结果:运行结果:BOY格式格式:getchar( )功能:从键盘输入一个字符。功能:从键盘输入一个字符。3.3.4 getchar函数(字符输入函数函数(字符输入函数 )例例3.14:使用:使用getc
15、har( )函数输入字符函数输入字符#include void main( ) char c; c=getchar( ); putchar(c);运行情况:运行情况:a a3.4 顺序结构程序设计顺序结构程序设计#include #define PI 3.14159void main( ) float r,area,v; printf(“Input r: ”); /*人机交互,输出提示信息人机交互,输出提示信息*/ scanf(%f,&r); area=PI*r*r;/*求圆的面积并将结果赋给求圆的面积并将结果赋给area*/ v=4.0/3*PI*r*r*r; /*求圆球的体积并赋给
16、求圆球的体积并赋给v*/ printf(area=%6.2fn,area); printf(v=%6.2fn,v);例例3.17: 输入半径,求圆的面积和球的体积输入半径,求圆的面积和球的体积 Input r:3 area= 28.27v=113.10文件包含预处理命令文件包含预处理命令变量定义变量定义运行情况:运行情况:3.5.1 关系表达式关系表达式 1.关系运算符:关系运算符:、=、= =、!= 作用:进行比较运算。作用:进行比较运算。2.关系表达式关系表达式 形式:形式:关系运算符关系运算符 如:如:a=0、x= =03.优先级优先级 = (高)(高) = = != (低)(低) 算术
17、运算符算术运算符 关系运算关系运算符符 赋值运算赋值运算符符 高高低低3.5 选择结构程序设计选择结构程序设计 5.举例:举例: int a=3,b=2,c=1,d,f; 则:则: ab 表达式值等于表达式值等于_ (ab)= =c 表达式值等于表达式值等于_ b+cb d值等于值等于_ f=abc f值等于值等于_11010算术运算符算术运算符 关系运算关系运算符符 赋值运算赋值运算符符 高高低低4.关系表达式的值关系表达式的值:如果表达式成立,值为如果表达式成立,值为 1,表示表示“真真”;否则,值为;否则,值为 0,表示,表示“假假” 。#include void main( ) int
18、 a,b,c; a=3;b=2;c=1; printf(%d , ab); printf(%d , (ab)=c); printf(%d , b+ca); printf(%dn, ab=0&x=9 (数学不等式数学不等式0 x9) 数学不等式数学不等式0 x9用用0=x3&84-!0=1&84-!0=1&84-1=1& 8b)&(n=cd)1.简单分支结构简单分支结构 格式:格式:if (表达式表达式) 语句语句 执行过程:先计算表达式的执行过程:先计算表达式的值,若其值值,若其值0,则执行后面,则执行后面的语句;否则,不执行。的语句;否则,不执
19、行。表达式表达式语句语句真真(非非0)假假(0)例:例:if (xy) printf(%d,x);3.5.3 if 语句语句说明:说明:u 语句可以是复合语句语句可以是复合语句u if (x) if (x!=0)例例3.22:输入两个实数,按由小到大的顺序输出。输入两个实数,按由小到大的顺序输出。#include void main( ) float a,b,t;printf(请输入两个实数请输入两个实数:); scanf(%f,%f,&a,&b);if (ab) t=a; a=b; b=t; printf(%5.2f,%5.2fn,a,b);运行情况:运行情况:请输入两个实数
20、请输入两个实数:7.1,5.1 5.10, 7.10运行情况:运行情况:请输入两个实数请输入两个实数:5.1,7.1 5.10, 7.10例例3.23:输入三个整数,按由小到大排序并输出。输入三个整数,按由小到大排序并输出。#include void main( ) int a,b,c,t; 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;b=c;c=t; printf(%d,%d,%dn,a,b,c);运行情况:运行情况:11,22,18 11,18,22表
21、达式表达式语句语句1语句语句2真真假假2.双分支结构双分支结构&格式:格式:if (表达式表达式) 语句语句1 else 语句语句2例:例:if (xy) max=x; else max=y;&执行过程:先计算表达式的值,若执行过程:先计算表达式的值,若0,则执行语句则执行语句1,否则,执行语句,否则,执行语句2。例例3.25 输入三角形三条边长,求三角形面积。当输入的三条边长不能构成三输入三角形三条边长,求三角形面积。当输入的三条边长不能构成三角形时,输出角形时,输出“不能构成一个三角形不能构成一个三角形”。#include #include void main( ) flo
22、at x,y,z,s,area; printf(请输入三角形的三条边长请输入三角形的三条边长:); scanf(%f,%f,%f,&x,&y,&z); if (x+yz&y+zx&x+zy) s=0.5*(x+y+z); area=sqrt(s*(s-x)*(s-y)*(s-z); printf(面积面积=%7.2fn,area); else printf(不能构成一个三角形不能构成一个三角形n);运行结果:运行结果:请输入三角形的三条边长请输入三角形的三条边长:3,4,6 面积面积= 5.333.多分支多分支if 语句语句一般格式:一般格式:if (表
23、达式表达式1) 语句语句1else if (表达式表达式2) 语句语句2else if (表达式表达式3) 语句语句3.else 语句语句n表达式表达式1语句语句1真真假假表达式表达式2表达式表达式3语句语句4语句语句3语句语句2真真真真假假假假例例3.28:编程计算应付金额:编程计算应付金额c,其单价,其单价s随购物随购物数量数量t变化,关系如下:变化,关系如下: 20 t500 30 200t500 40 100t200 50 t100s =#include void main( ) int s,t,c; printf(请输入购物数量请输入购物数量:); scanf(%d,&t);
24、 if (t500) s=20; else if (t200) s=30; else if (t100) s=40; else s=50; c=s t; printf(应付金额应付金额=%d,c);运行结果:运行结果:请输入购物数量请输入购物数量:600 应付金额应付金额=12000嵌套的多分支嵌套的多分支if语句语句含义:在含义:在if语句中又包含一个或多个语句中又包含一个或多个if语句,语句,称为称为if语句的嵌套。语句的嵌套。格式:格式: if ( ) if ( ) 语句语句 else 语句语句 2 else if ( ) 语句语句 3 else 语句语句 4 注意:注意: if与与el
25、se的配对关系。的配对关系。从内层开始,从内层开始,else总是总是与它上面最近的没有与它上面最近的没有配对的配对的if配对。配对。 若若if与与else的数目不一的数目不一样,可以加样,可以加 来确定来确定配对关系。配对关系。 例例3.29:编写程序:编写程序 y=-5-5(x0)(x0)(x0)流程图:流程图:其中其中x,y为为int型型变量。变量。开始开始结结 束束输入输入x输出输出yx=0 x0y= -5y=0y=7YNYN#include void main( ) int x,y; printf(请输入请输入x:); scanf(%d,&x); if (x0) y= -5;
26、else if (x=0) y=0; else y=7; printf(x=%d,y=%d,x,y); x0y= -5YNx=0y=0y=7YN运行结果:运行结果:请输入请输入x:-5 x=-5,y=-54.条件运算符和条件表达式条件运算符和条件表达式条件运算符条件运算符 ? : (三目运算符)(三目运算符)条件表达式:用条件运算符连接各种表达式。条件表达式:用条件运算符连接各种表达式。 形式:形式:?: 例如:例如: xy?a:b表达式的值:当表达式的值:当表达式表达式1的值非的值非0时,值为时,值为表达表达式式2之值;否则,为之值;否则,为表达式表达式3之值。之值。结合方向为自右至左结合方
27、向为自右至左 ab?a:cd?c:d a=1,b=2,c=3,d=4 表达式的值表达式的值_4当当if语句中的两个分支都只执行一个赋值语句中的两个分支都只执行一个赋值语句给同一个变量语句给同一个变量赋值赋值时,可以用条件时,可以用条件表达式来处理。表达式来处理。max=(ab)?a:b;例:例:if (ab) max=a;else max=b;可以表示为可以表示为_运行情况:运行情况:A a例例3.30:输入一个字符,判断是否为大写字:输入一个字符,判断是否为大写字母,若是,将其转换成小写字母;否则,不母,若是,将其转换成小写字母;否则,不转换。然后输出最后得到的字符。转换。然后输出最后得到的
28、字符。ch=(ch=A&ch=Z)?(ch+32):ch;#include void main( ) char ch; scanf(%c,&ch); if (ch=A & ch=Z) ch=ch+32; printf(%cn,ch);3.5.4 switch 语句语句多分支选择语句。多分支选择语句。switch (表达式表达式) case 常量常量1:语句组语句组1;break; case 常量常量2:语句组语句组2;break; case 常量常量n:语句组语句组n;break; default:语句组语句组n+1;一般形式:一般形式:执行过程执行过程:当表达式的值与
29、某一个:当表达式的值与某一个case后面的常量表后面的常量表达式值相等时,就执行此达式值相等时,就执行此case后面的语句组,当执行后面的语句组,当执行到到break语句时,跳出语句时,跳出switch语句。若表达式的值与所语句。若表达式的值与所有的常量表达式值都不匹配,则执行有的常量表达式值都不匹配,则执行default后面的语后面的语句组。句组。#include void main( ) char grade; scanf(%c,&grade); switch (grade) case A:printf(85100n);break; case B:printf(7084n);bre
30、ak; case C:printf(6069n);break; case D:printf(60n);break; default:printf(errorn); 例例3.31 :要求按照考试成绩的:要求按照考试成绩的等级输出百分制分数段。等级输出百分制分数段。 运行情况:运行情况:C 6069switch (grade) case A:printf(85100n); case B:printf(7084n); case C:printf(6069n); case D:printf(60n); default:printf(errorn); 说明:说明:执行完一个执行完一个case后面的语句后
31、,继续执行下一后面的语句后,继续执行下一个个case语句而语句而不再进行判断不再进行判断。所以必须加上。所以必须加上break语句,以便终止语句,以便终止switch语句的执行。语句的执行。思考题:如果去掉上例程序中的所有思考题:如果去掉上例程序中的所有break语语句,且输入的成绩为句,且输入的成绩为B,输出会如何?,输出会如何?运行情况:运行情况:B 7084606960n);break; grade的值为的值为A、B或或C时都执行时都执行同一组语句。同一组语句。3.5.5 选择结构程序举例选择结构程序举例例例3.32 :判断某一年是否是闰年。:判断某一年是否是闰年。分析:分析:满足以下两
32、种条件之一即为闰年:满足以下两种条件之一即为闰年:能被能被4但不能被但不能被100整除;能被整除;能被400整除。整除。根据以上条件,分别考虑如下情况:根据以上条件,分别考虑如下情况:n不能被不能被4整除的,不是闰年。整除的,不是闰年。n能被能被4整除但不能被整除但不能被100整除的,是闰年。整除的,是闰年。n能被能被400整除的,是闰年。整除的,是闰年。n其他都不是闰年。其他都不是闰年。 例例3.32流程图流程图year被被4整除整除year被被100整除整除year被被400整除整除flag=1flag=0flag=1flag=0flag输出输出“闰年闰年”输出输出“非闰年非闰年”真真真真
33、真真真真假假假假假假假假#include void main( ) int year,flag; printf(请输入年份请输入年份: ); scanf(%d,&year); if (year%4=0)if (year%100=0)if (year%400=0)flag=1;else flag=0;else flag=1; else flag=0; if (flag)printf(%d是闰年是闰年n,year); elseprintf(%d不是闰年不是闰年n,year); 运行结果:运行结果:请输入年份请输入年份:1996 1996是闰年是闰年#include void main( )
34、 int year,flag; scanf(%d,&year); if (year%4= =0&year%100!=0)|(year%400= =0) flag=1; else flag=0; if (flag) printf(%d是闰年是闰年n ,year); else printf(%d不是闰年不是闰年n ,year);例例3.33:求一元二次方程:求一元二次方程ax2+bx+c=0的解,的解,a、b、c由键盘输入。由键盘输入。分析:分析:方程的解有以下几种可能:方程的解有以下几种可能: a=0,不是二次方程。,不是二次方程。 b2-4ac=0,有两个相等实根。,有两个相等
35、实根。 b2-4ac0,有两个不等实根。,有两个不等实根。 b2-4ac0b-4ac=0a=0输出输出 “非二次非二次方程方程”输出两输出两个相等个相等实根:实根: -ab2真真真真真真假假假假假假#include #include void main( ) float a,b,c,disc,x1,x2,p,q; scanf(%f,%f,%f,&a,&b,&c); printf(此方程此方程); if (fabs(a)=1e-6) printf(不是二次方程不是二次方程n); else disc=b*b-4*a*c; if (fabs(disc)1e-6) x1=(-b
36、+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf(有两个不等实根有两个不等实根:%8.4f and %8.4fn,x1,x2); else p= -b/(2*a); q=sqrt(-disc)/(2*a); printf(有两个共轭复根有两个共轭复根:n); printf(%8.4f+%8.4fin,p,q); printf(%8.4f-%8.4fin,p,q); 运行情况:运行情况:1,2,1 此方程有两个相等实根此方程有两个相等实根: -1.00001,2,2 此方程有两个共轭复根此方程有两个共轭复根: -1.0000+ 1.0000i
37、-1.0000- 1.0000i2,6,1 此方程有两个不等实根此方程有两个不等实根: -0.1771 and -2.8229例例5.1:一座高架桥最高限速:一座高架桥最高限速90公里公里/时,判断时,判断一辆车是否超速,若超速需要交纳罚金。根据一辆车是否超速,若超速需要交纳罚金。根据汽车时速与最高限速的比值划分:汽车时速与最高限速的比值划分:r=(v-90)/90(r为超速比,为超速比,v为汽车时速)为汽车时速)当当r=0.2时,为正常值;时,为正常值;当当0.2r0.4,须交纳,须交纳200元;元;当当0.40.6时,交纳时,交纳1000元。元。方法:使用并列方法:使用并列if语句语句#i
38、ncludevoid main( ) float r,v; printf(请输入车速请输入车速v:n); scanf(%f,&v); r=(v-90)/90; if(r0.2 & r0.4 & r0.6) printf(请支付请支付1000元元!n); 3.6 循环结构循环结构例:计算例:计算1+2+50的值。的值。分析:分析:设累加和变量为设累加和变量为sum,其初值为,其初值为0;加数变量为加数变量为i,初值为,初值为1;重复执行重复执行 sum=sum+i; i=i+1;当当i增到增到51时,停止计算。此时,时,停止计算。此时,sum的值就是的值就是150的累加和
39、。的累加和。什么是循环?什么是循环?一个循环结构包括四部分:初始化循环变一个循环结构包括四部分:初始化循环变量、循环条件、循环体、修改循环变量量、循环条件、循环体、修改循环变量C语言中三种基本的循环结构:语言中三种基本的循环结构:1、while语句构成的循环语句构成的循环(“当型当型”循环循环)2、dowhile语句构成的循环语句构成的循环(“直到型直到型”循环循环 )3、for语句构成的循环语句构成的循环(“当型当型”循环循环) goto goto语句为无条件转向语句,它的一语句为无条件转向语句,它的一般形式为般形式为 goto goto 语句标号;语句标号; 语句标号符合标识符命名规则,即
40、由字语句标号符合标识符命名规则,即由字母、数字和下划线组成,第一个字符必母、数字和下划线组成,第一个字符必须为字母或下划线。须为字母或下划线。 例如:例如:goto label_1; goto label_1; 合法合法 goto 123goto 123; 不合法不合法3.6.1 goto语句语句 结构化程序设计方法主张限制使用结构化程序设计方法主张限制使用gotogoto语句,因为滥用语句,因为滥用gotogoto语句将使程序语句将使程序流程无规律、可读性差流程无规律、可读性差. .一般来说,可以有两种用途:一般来说,可以有两种用途:(1) (1) 与与ifif语句一起构成循环结构;语句一起
41、构成循环结构;(2) (2) 从多层循环的内层循环跳转到外层从多层循环的内层循环跳转到外层循环。循环。3.6.1 goto语句语句#include void main( ) int i,sum; sum=0;i=1; loop: sum=sum+i; i+; if (i=50) goto loop; printf(%dn,sum);运行结果:运行结果:1275例例3.34:计算:计算1+2+50的值。的值。一般形式:一般形式: while(表达式)(表达式) 语句;语句;3.6.2 while语句语句执行过程:执行过程:计算表达式的值,若为真计算表达式的值,若为真(非(非0),则执行循环体,否
42、则退出循),则执行循环体,否则退出循环,执行后面的语句。环,执行后面的语句。表达式表达式语句语句0非非0例例3.35:求:求12350 i=1i= 50sum=sum+ii=i+1i=1当当i=50sum=sum+ii=i+1假假真真#include void main( ) int i=1,sum=0; while (i=50) sum=sum+i; i+; printf(%dn,sum);运行结果:运行结果:12751275(1)(1)循环体如果包含一个以上的语句,要循环体如果包含一个以上的语句,要用用 括起来,括起来,否则,只执行到第一个分否则,只执行到第一个分号处号处。 (2)(2)在
43、循环体中应有使循环趋向于结束的在循环体中应有使循环趋向于结束的语句。语句。遇到数列求和、求积的问题,一般可以遇到数列求和、求积的问题,一般可以考虑使用循环解决。考虑使用循环解决。注意循环初值的设置。一般对于累加器注意循环初值的设置。一般对于累加器设置为设置为0,累乘器设置为,累乘器设置为1。一般形式:一般形式:do 循环体语句循环体语句while (表达式表达式);3.6.3 dowhile 语句语句循环体语句循环体语句当表达式值为真当表达式值为真循环体语句循环体语句表达式表达式非非0(0(真)真)0(假)(假)执行过程:执行过程:先执行一次循先执行一次循环体中的语句,然后计算环体中的语句,然
44、后计算表达式的值,若非表达式的值,若非0,则,则再次执行循环体,否则结再次执行循环体,否则结束循环。束循环。例例3.36:求:求12350sum=sum+i i=i+1i=1i =50sum=sum+i i=i+1i=1当当i = 50真真假假#include void main( ) int i,sum=0; i=1; do sum=sum+i; i+; while (i=50); printf(%dn,sum);运行结果:运行结果:12751275例例3.37:while和和dowhile比较比较#include void main( ) int i,sum=0; scanf(%d,&am
45、p;i); do sum=sum+i;i+; while (i=10); printf(%d,sum);#include void main( ) int i,sum=0; scanf(%d,&i); while (i=10) sum=sum+i;i+; printf(%d,sum);运行情况:运行情况:1111 0 0运行情况:运行情况:1111 1111运行情况:运行情况:1 1 5555运行情况:运行情况:1 1 5555While语句和语句和dowhile语句的区别:语句的区别: 第一次执行时,第一次执行时, while语句先判断,符合语句先判断,符合条件才执行循环体;条件才执
46、行循环体;dowhile语句不管语句不管是否符合条件,先执行一次循环体。是否符合条件,先执行一次循环体。 while语句:语句:while(表达式表达式)后无分号,后无分号, dowhile语句:语句:while(表达式表达式)有分号。有分号。 一般形式:一般形式:for (表达式表达式1;表达式表达式2;表达式表达式3) 语句;语句;3.6.4 for 语句语句执行过程:执行过程:求解表达式求解表达式1。求解表达式求解表达式2,若其值为真,则执,若其值为真,则执行循环体语句,然后执行行循环体语句,然后执行。若为。若为假,转假,转 。求解表达式求解表达式3,然后转,然后转继续执行。继续执行。结
47、束循环,执行结束循环,执行for语句的下一条语句的下一条语句。语句。 例例3.38:求:求1+2+50运行结果:运行结果:1275#include void main( ) int sum=0,i; for (i=1;i=50;i+) sum=sum+i; printf(%dn,sum);for语句一般应用形式:语句一般应用形式:for (循环变量赋初值循环变量赋初值 ; 循环条件循环条件 ; 修改循环变量修改循环变量) 语句;语句;说明:说明: for语句中的三个表达式可以省略或部分省略,语句中的三个表达式可以省略或部分省略,但其中的分号不能省略。但其中的分号不能省略。例:例: for (i
48、=1;i=100;i+) sum=sum+i; 表达式表达式1省略省略 i=1; for (;i100) break; sum=sum+i; 表达式表达式1和和3都省略都省略 i=1; for (;i=100;) sum=sum+i; i+; i=1; while (i=100) sum=sum+i; i+; 三个表达式都省略三个表达式都省略 for (;)表达式表达式3省略省略 for (i=1;i=100;) sum=sum+i; i+; 例例: for (i=1;i=100;i+) sum=sum+i; 例例3.40:从键盘输入一个整数:从键盘输入一个整数n,计算,计算n! #inclu
49、de void main( ) int i,n,fac=1; printf(请输入一个整数请输入一个整数:); scanf(%d, &n); for (i=1;i=n;i+) fac=fac*i; printf(%d!=%dn, n,fac); 运行情况:运行情况:请输入一个整数请输入一个整数:5 5 5!=1205!=120含义:含义:一个循环体内又包含另一个完整的循环一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。结构,称为循环的嵌套。while ( ) while ( ) while ( ) do while ( ); while ( ) for ( ) 3.6.6 循环
50、的嵌套循环的嵌套三种循环可以互相嵌套。三种循环可以互相嵌套。do while ( ) while ( );do for (;) while ( );do do while ( ); while ( );for (;) for (;) for (;) do while ( ); for (;) while ( ) 注:注:内层循环应完全嵌套在外层循环内部,不能交叉嵌套;内层循环应完全嵌套在外层循环内部,不能交叉嵌套;内层循环体执行次数内层循环体执行次数=内层循环次数内层循环次数外层循环次数。外层循环次数。例例3.42:输出九九乘法表:输出九九乘法表1*1=11*2=2 2*2=41*3=3 2*
51、3=6 3*3=91*4=4 2*4=8 3*4=12 4*4=161*5=5 2*5=10 3*5=15 4*5=20 5*5=251*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=361*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=491*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=641*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81#include void main( ) int i,j;
52、for (i=1;i=9;i+) for (j=1;j=i;j+) printf(%d*%d=%d ,j,i,i*j); printf(n); #include void main( ) int i,j; for (i=1;i=9;i+) for (j=1;j=i;j+) printf(%d*%d=%-4d,j,i,i*j); printf(n); 3.6.7 break语句和语句和continue语句语句一、一、break 语句语句功能:功能:跳出跳出switch 语句。语句。 跳出循环,接着执行循环结构跳出循环,接着执行循环结构下面的语句。下面的语句。例例3.43:#include voi
53、d main( ) int r; float area,pi=3.14159; for (r=1;r100) break; printf(r=%d ,area=%fn,r, area); 说明:说明:程序的作用是计程序的作用是计算算r=1到到r=10的圆面积,的圆面积,直到面积大于直到面积大于100为止。为止。(当(当r=6时,时,area100,执行执行break语句,提前结语句,提前结束循环)。束循环)。二、二、continue 语句语句功能:功能:结束本次循环,即跳过循环体中结束本次循环,即跳过循环体中 未执行的语句。未执行的语句。说明:说明:v仅用于循环语句中。仅用于循环语句中。v循环
54、嵌套时,循环嵌套时,break和和continue只影响包只影响包含它们的内层循环,与外层循环无关。含它们的内层循环,与外层循环无关。#include void main( ) int n; for (n=100;n150 & i400) continue;if (n%7=0) printf(%d ,n); 例例3.45:将:将100150之间和之间和400450之间能被之间能被7整整除的数输出。除的数输出。例例3.46:求:求1!+2!+3!+10!的值。!的值。#include void main( ) int n,fac=1,sum=0; for (n=1;n=10;n+) fac=fac*n; sum=sum+fac; printf(sum=%d,sum);运行结果:运行结果:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 视同劳动合同(标准版)
- 2025及未来5年中国四柱翻转抽真空平板硫化机市场调查、数据监测研究报告
- 泉州市人民医院急诊手术准备流程考核
- 无锡市人民医院眼部超声诊断考核
- 宜春市中医院尿道碎石技术考核
- 杭州市人民医院视觉模拟评分法规范化操作考核
- 厦门市中医院生育力保存技术考核
- 三明市中医院急救设备操作考核
- 宿迁市人民医院超声科室管理考核
- 2025-2030社区化早教服务网点布局优化与获客成本控制策略
- 2019年新版FMEA模板-template完整版
- 枣树常见病虫害课件
- GB/T 41304.2-2022知识管理方法和工具第2部分:设计理性知识建模
- 发酵罐染菌分析思路与纠正预防措施
- 八大特殊作业(八大危险作业)安全管理知识与规范培训课件
- 生物硫磺课件
- 论语名著导读课件
- ISO 31000-2018 风险管理标准-中文版
- 提高安装永久起搏器患者术后24h下床活动率品管圈
- 偏振光实验报告(物理系)
- JJF1208-2008沥青针入度仪校准规范-(高清现行)
 
            
评论
0/150
提交评论