版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 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 从函数返回语句:return,3.1 C语句,函数调用语句:由一个函数调用加一个分号构成。 例如:printf(This is a C statement. );,表达式语句:由一个表达式加一个分号构成。 例如
2、:a=3; 空语句:只有一个分号(;)的语句。,复合语句:用 括起来的一些语句。 例如: z=x+y; t=z/100; printf(%f,t); ,3.2 赋值语句,1.赋值运算符:=、+=、-=、*=、/=、%= 等 作用:将一个数据赋给一个变量。 2.赋值表达式 形式: 变量=表达式 将表达式的值赋给变量 例如:a=5 b=a*4, 变量(+、-、*、/、%)=表达式 将变量与表达式的值作相应运算后再赋给变量。 例如:x-=8 等价于 x=x-8 y%=a+3 等价于 y=y%(a+3) 3.赋值表达式的值:等于左边变量的值。 4.赋值表达式后加分号构成赋值语句。,写出下面表达式运算后
3、a的值 (a=3*5)=4*3,a=3*5 a的值为,15,a=4 *3 a的值为,12,a*=a a的值为1212144 a-=144 a的值为1441440 a+=0 a的值为 0,写出下面表达式运算后a的值,设原来a=12,a已定义为整型变量。 a+=a-=a*=a,字符输出函数: putchar 字符输入函数: getchar 格式输出函数: printf 格式输入函数: scanf,C语言无I/O语句,I/O操作由函数实现 #include ,头文件,3.3 输入输出,格式:printf(格式控制,输出表列) 功能:按指定格式向显示器输出数据,printf函数(格式输出函数),输出表
4、列:要输出的数据(可以没有,多个时以“,”分隔) 格式控制: 格式说明:%修饰符格式字符,用于指定输出格式 转义字符:n,t 普通字符:原样输出,3.3.1 格式输出,printf 格式字符,格式字符使用形式功能说明 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、e格式中较短者忽略0 c%c %mc输出一个字符 s%s %ms %-ms
5、 %m.ns %-m.ns输出字符串 % 输出“%” 其中:l 用于长整型数 n 小数位数或截取的字符个数 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,123 b=123456,2%f以小数形式输出单精度和双精度实数。 整数部分全部输出,并输出6位小数。 例3.10:按指定的小数位数输出实数 #include void main( )
6、float d=12.345; printf(d=%f,d=%.2f,d=%10.2f,d,d,d); ,运行结果: d=12.345000,d=12.35,d=12.35,3%c输出一个字符。 例: #include void main( ) char c=a; printf(%c,c); ,运行结果: a,4%s输出一个字符串。 例: #include void main( ) printf(%sn,CHINA); printf(%3s,%7.2s,%-5.3s,CHINA, CHINA, CHINA); ,运行结果: CHINA CHINA, CH, CHI,3.3.2 scanf函数(
7、格式输入函数),格式:scanf(格式控制,地址表列) 功能:按指定格式从键盘输入数据,存入地址 表列指定的存储单元中,并按回车键结束,地址表列:变量的地址,用取地址运算符 scanf(%d,%d, ,输入 3,5 输出 8,例3: scanf(a=%d,b=%d,c=%d, 输入 a=12,b=24,c=36 则 12a, 24 b, 36c,例1: scanf(%d,%d, 输入 3,4 则 3a, 4 b,例2: scanf(%d:%d:%d, 输入 12:30:45 则 12 a, 30 b, 45 c,“格式控制”中出现的普通字符,原样输入。,说明: 用%c格式符时,空格和转义字符作
8、为有效字符输入,例:scanf(%c%c%c, 若输入 abc 则 ac1, c2, b c3,输入数据时,遇以下情况认为该数据结束: 遇空格、TAB、或回车 遇指定的宽度结束 遇非法输入,例: scanf(%d%c%f, 若输入 1234a123o.26 则 1234 a, a b, 123 c,格式:putchar(c) 参数:c为字符常量、变量或表达式。 功能:将字符输出到显示器上。,3.3.3 字符数据的输入输出 一、 putchar函数(字符输出函数),#include void main( ) char a,b,c; a=B;b= O; c=Y; putchar(a); putch
9、ar(b); putchar(c); putchar(n); ,运行结果: BOY,例:,putchar(a);putchar(n); putchar(b);putchar(n); putchar(c);,运行结果: B O Y,格式:getchar( ) 功能:从键盘输入一个字符。,3.3.4 getchar函数(字符输入函数 ),例3.14:使用getchar( )函数输入字符,#include void main( ) char c; c=getchar( ); putchar(c); ,运行情况: a a,3.4 顺序结构程序设计,#include #define PI 3.14159
10、 void main( ) float r,area,v; printf(“Input r: ”); /*人机交互,输出提示信息*/ scanf(%f, ,例3.17: 输入半径,求圆的面积和球的体积,Input r:3 area= 28.27 v=113.10,运行情况:,3.5.1 关系表达式,1.关系运算符:、=、= =、!= 作用:进行比较运算。 2.关系表达式 形式:关系运算符 如:a=0、x= =0 3.优先级 = (高) = = != (低) 算术运算符 关系运算符 赋值运算符 高,低,3.5 选择结构程序设计,5.举例: int a=3,b=2,c=1,d,f; 则: ab 表
11、达式值等于_ (ab)= =c 表达式值等于_ b+cb d值等于_ f=abc f值等于_,1,1,0,1,0,4.关系表达式的值:如果表达式成立,值为 1,表示“真”;否则,值为 0,表示“假” 。,#include void main( ) int a,b,c; a=3;b=2;c=1; printf(%d , ab); printf(%d , (ab)=c); printf(%d , b+ca); printf(%dn, abc);,例3.21 关系表达式的应用,运行结果:1 1 0 1,3.5.2 逻辑表达式,1.逻辑运算符 ! 逻辑非 b=2;c=3;d=4;m=1;n=1; (m
12、=ab),3.5.3 if 语句,说明:,语句可以是复合语句 if (x) if (x!=0),例3.22:输入两个实数,按由小到大的顺序输出。,#include voidmain( ) float a,b,t; printf(请输入两个实数:); scanf(%f,%f, ,运行情况: 请输入两个实数: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, ,运行情况: 11,22,18 11,
13、18,22,2.双分支结构 格式:if (表达式) 语句1 else 语句2,例:if (xy) max=x; else max=y;,执行过程:先计算表达式的值,若0,则执行语句1,否则,执行语句2。,例3.25 输入三角形三条边长,求三角形面积。当输入的三条边长不能构成三角形时,输出“不能构成一个三角形”。,#include #include void main( ) float x,y,z,s,area; printf(请输入三角形的三条边长:); scanf(%f,%f,%f, ,运行结果: 请输入三角形的三条边长:3,4,6 面积= 5.33,3.多分支if 语句 一般格式:,if
14、(表达式1) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句3 . else 语句n,例3.28:编程计算应付金额c,其单价s随购物数量t变化,关系如下: 20 t500 30 200t500 40 100t200 50 t100,s =,#include void main( ) int s,t,c; printf(请输入购物数量:); scanf(%d,if (t500) s=20; else if (t200) s=30; else if (t100) s=40; else s=50; c=st; printf(应付金额=%d,c); ,运行结果: 请输
15、入购物数量:600 应付金额=12000,嵌套的多分支if语句,含义:在if语句中又包含一个或多个if语句,称为if语句的嵌套。,格式: if ( ) if ( ) 语句 else 语句 2 else if ( ) 语句 3 else 语句 4,注意: if与else的配对关系。从内层开始,else总是与它上面最近的没有配对的if配对。 若if与else的数目不一样,可以加 来确定配对关系。,例3.29:编写程序,流程图:,其中x,y为int型变量。,#include void main( ) int x,y; printf(请输入x:); scanf(%d, ,运行结果: 请输入x:-5 x
16、=-5,y=-5,4.条件运算符和条件表达式,条件运算符 ? : (三目运算符) 条件表达式:用条件运算符连接各种表达式。 形式:?: 例如:xy?a:b 表达式的值:当表达式1的值非0时,值为表达式2之值;否则,为表达式3之值。 结合方向为自右至左 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:输入一个字符,判断是否为大写字母,若是,将其转换成小
17、写字母;否则,不转换。然后输出最后得到的字符。,ch=(ch=A,#include void main( ) char ch; scanf(%c, ,3.5.4 switch 语句,多分支选择语句。,switch (表达式) case 常量1:语句组1;break; case 常量2:语句组2;break; case 常量n:语句组n;break; default:语句组n+1; ,一般形式:,执行过程:当表达式的值与某一个case后面的常量表达式值相等时,就执行此case后面的语句组,当执行到break语句时,跳出switch语句。若表达式的值与所有的常量表达式值都不匹配,则执行defaul
18、t后面的语句组。,#include void main( ) char grade; scanf(%c, ,例3.31 :要求按照考试成绩的等级输出百分制分数段。,运行情况: C 6069,switch (grade) case A:printf(85100n); case B:printf(7084n); case C:printf(6069n); case D:printf(60n); default:printf(errorn); ,说明:,执行完一个case后面的语句后,继续执行下一个case语句而不再进行判断。所以必须加上break语句,以便终止switch语句的执行。 思考题:如果
19、去掉上例程序中的所有break语句,且输入的成绩为B,输出会如何?,运行情况: B 7084 6069 60 error,多个case可以共用一组执行语句。 例如: switch (grade) case A: case B: case C:printf(60n);break; ,grade的值为A、B或C时都执行同一组语句。,3.5.5 选择结构程序举例,例3.32 :判断某一年是否是闰年。 分析: 满足以下两种条件之一即为闰年: 能被4但不能被100整除;能被400整除。 根据以上条件,分别考虑如下情况: 不能被4整除的,不是闰年。 能被4整除但不能被100整除的,是闰年。 能被400整除
20、的,是闰年。 其他都不是闰年。,#include void main( ) int year,flag; printf(请输入年份: ); scanf(%d, ,运行结果: 请输入年份:1996 1996是闰年,#include void main( ) int year,flag; scanf(%d, ,例3.33:求一元二次方程ax2+bx+c=0的解,a、b、c由键盘输入。,分析: 方程的解有以下几种可能: a=0,不是二次方程。 b2-4ac=0,有两个相等实根。 b2-4ac0,有两个不等实根。 b2-4ac0,有两个共轭复根。,例3.33流程图,#include #include
21、void main( ) float a,b,c,disc,x1,x2,p,q; scanf(%f,%f,%f, else,if (disc1e-6) x1=(-b+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 此方程有两个相等实
22、根: -1.0000 1,2,2 此方程有两个共轭复根: -1.0000+ 1.0000i -1.0000- 1.0000i 2,6,1 此方程有两个不等实根: -0.1771 and -2.8229,例5.1:一座高架桥最高限速90公里/时,判断一辆车是否超速,若超速需要交纳罚金。根据汽车时速与最高限速的比值划分: r=(v-90)/90(r为超速比,v为汽车时速) 当r0.6时,交纳1000元。,方法:使用并列if语句 #include void main( ) float r,v; printf(请输入车速v:n); scanf(%f, ,3.6 循环结构,例:计算1+2+50的值。,分
23、析: 设累加和变量为sum,其初值为0;加数变量为i,初值为1; 重复执行 sum=sum+i; i=i+1; 当i增到51时,停止计算。此时,sum的值就是150的累加和。,什么是循环? 一个循环结构包括四部分:初始化循环变量、循环条件、循环体、修改循环变量 C语言中三种基本的循环结构: 1、while语句构成的循环(“当型”循环) 2、dowhile语句构成的循环(“直到型”循环 ) 3、for语句构成的循环(“当型”循环),goto语句为无条件转向语句,它的一般形式为 goto 语句标号; 语句标号符合标识符命名规则,即由字母、数字和下划线组成,第一个字符必须为字母或下划线。 例如:go
24、to label_1; 合法 goto 123; 不合法,3.6.1 goto语句,结构化程序设计方法主张限制使用goto语句,因为滥用goto语句将使程序流程无规律、可读性差. 一般来说,可以有两种用途: (1) 与if语句一起构成循环结构; (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的值。,一般形式: whi
25、le(表达式) 语句;,3.6.2 while语句,执行过程:计算表达式的值,若为真(非0),则执行循环体,否则退出循环,执行后面的语句。,例3.35:求12350,#include void main( ) int i=1,sum=0; while (i=50) sum=sum+i; i+; printf(%dn,sum);,运行结果:1275,说明: (1)循环体如果包含一个以上的语句,要用 括起来,否则,只执行到第一个分号处。 (2)在循环体中应有使循环趋向于结束的语句。 遇到数列求和、求积的问题,一般可以考虑使用循环解决。 注意循环初值的设置。一般对于累加器设置为0,累乘器设置为1。,
26、一般形式: do 循环体语句 while (表达式);,3.6.3 dowhile 语句,执行过程:先执行一次循环体中的语句,然后计算表达式的值,若非0,则再次执行循环体,否则结束循环。,例3.36:求12350,#include void main( ) int i,sum=0; i=1; do sum=sum+i; i+; while (i=50); printf(%dn,sum);,运行结果:1275,例3.37:while和dowhile比较,#include void main( ) int i,sum=0; scanf(%d, ,#include void main( ) int
27、i,sum=0; scanf(%d, ,运行情况: 11 0,运行情况: 11 11,运行情况: 1 55,运行情况: 1 55,While语句和dowhile语句的区别: 第一次执行时, while语句先判断,符合条件才执行循环体;dowhile语句不管是否符合条件,先执行一次循环体。 while语句:while(表达式)后无分号, dowhile语句:while(表达式)有分号。,一般形式: for (表达式1;表达式2;表达式3) 语句;,3.6.4 for 语句,执行过程: 求解表达式1。 求解表达式2,若其值为真,则执行循环体语句,然后执行。若为假,转 。 求解表达式3,然后转继续执
28、行。 结束循环,执行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=1;i=100;i+) sum=sum+i;,表达式1省略 i=1; for (;i100) break; sum=sum+i; ,表达式1和3都省略
29、 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!,#include void main( ) int i,n,fac=1; printf(请输入一个整数:); scanf(%d, ,运行情况: 请输入一个整数:5 5!=120,含义:一个循环体内又包含另一个完整的循环结构,称为循环的
30、嵌套。,3.6.6 循环的嵌套,三种循环可以互相嵌套。,注: 内层循环应完全嵌套在外层循环内部,不能交叉嵌套; 内层循环体执行次数=内层循环次数外层循环次数。,例3.42:输出九九乘法表,1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4
31、*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*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; 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(
32、n); ,3.6.7 break语句和continue语句,一、break 语句 功能:跳出switch 语句。 跳出循环,接着执行循环结构下面的语句。,例3.43: #include void 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 语句,功能:结束本次循环,即跳过循环体中 未执行的语句。 说明: 仅用于循环语句中。 循环嵌套时,break和continue只影响包含它们的内层循环,与外层循环无关。,#include void main( ) int n; for (n=100;n150 ,例3.45:将100150之间和400450之间能被7整除的数输出。,例3.46:求1!+2!+3!+10!的值。,#include void main( ) int n,fac=1,su
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 代理合同范本2024
- 城市轨道交通车站机电设备运用课件-车站消防系统
- 2026年医学复习资料-人体解剖学练习题一套附答案详解
- 2026年投资项目管理师之投资建设项目组织综合检测模拟卷含答案详解【培优】
- 2026年播音员考核考前冲刺测试卷包及答案详解【考点梳理】
- 2026年幼儿园简介模版
- 2026年水灾安全 幼儿园
- 2026及未来5年中国EVA包装内衬市场数据分析及竞争策略研究报告
- 2025浙江金华市金东粮食收储有限责任公司招聘人员笔试参考题库附带答案详解
- 2025浙江温州市平阳县县属国有企业招聘总及人员笔试参考题库附带答案详解
- 造价师岗位考核制度
- 2025届山东省Flawless联考高三下学期选考科目考试(四)物理试题(解析版)
- 超市消防安全培训材料课件
- 全球供应链安全培训课程课件
- 2026年考研数学一真题
- 幸福是奋斗出来的
- 2025年生理知识竞赛复习题库及答案(共100题)
- 泥水平衡顶管掘进施工工艺标准
- 电梯使用单位电梯安全总监和安全员考试题库及答案
- 2025年国家开放大学《刑事诉讼法》期末考试复习试题及答案解析
- 公寓物业服务方案及实施细则
评论
0/150
提交评论