c语言chap控制结构.pptx
《c语言chap控制结构.pptx》由会员分享,可在线阅读,更多相关《c语言chap控制结构.pptx(128页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、本章内容3.1 顺序结构与基本输入输出3.2 分支结构3.3 循环结构3.4 循环程序设计3.5 应用举例第1页/共128页3.1 顺序结构与基本输入输出 3.1.1 C语句概述 3.1.2 顺序结构程序设计 3.1.3 字符输入输出 3.1.4 格式输入输出 第2页/共128页3.1.1 C语句概述源程序的基本组成单位是语句,语句用于完成一定的操作任务。C语句有以下五类:1 1说明语句说明语句变量定义、变量说明、函数说明、结构说明等 int x,y=4;定义整形变量x、y,并初始化变量yextern int x,y;说明整形变量x、y是已被定义的全局变量int max(int,int);声明
2、函数max第3页/共128页3.1.1 C语句概述2.2.控制语句,完成程序流程控制控制语句,完成程序流程控制if()else 选择结构语句for()循环语句switch多分支选择结构语句return 从函数返回语句第4页/共128页3.3.表达式语句:在表达式后面加分号构成。表达式语句:在表达式后面加分号构成。例:a=3;/*赋值语句*/i+;/*算术表达式语句*/表达式能构成语句是C的特色。4.4.空语句:空语句:只有分号“;”组成的语句,什么也不执行,但占据了一个语句的位置,也起一条语句的作用。常用于需要一个语句但不需要任何操作的情况。3.1.1 C语句概述第5页/共128页5 5复合语
3、句(语句块)复合语句(语句块)由大括号 括起来的语句序列,在语法上复合语句被看作一条语句。例:int x,y;z=x+y;t=z/100;printf(%f,t);复合语句常用于任何需要一条语句的地方。3.1.1 C语句概述第6页/共128页3.1.2 顺序结构程序设计例3-1 键盘输入一个三位数,输出逆序后的数。#includevoid main()int x,y,a,b,c;printf(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);顺序结构,
4、就是语句按照编写的顺序依次执行。第7页/共128页C中的输入输出1C本身没有输入输出语句,数据的I/O由函数实现。2源程序的开头使用如下语句:#include#include“stdio.h”第8页/共128页3.1.3字符输入输出1.字符输出函数putchar()int putchar(int c)作用:向终端输出一个字符。参数C可以int型与char型。第9页/共128页例:#include stdio.h void main()char a,b,c;a=B;b=O;c=Y;putchar(a);putchar(b);putchar(c);程序输出:BOY 注:若要输出小写的boy,程序怎
5、样修改?若没有#include“stdio.h”会怎样?实例第10页/共128页函数参数可以是转义字符例:putchar(n);输出换行符putchar(101);输出字符 Aputchar();输出单引号 putchar(012);输出换行符putchar(015);输出回车.不换行,光标到本行首转义字符第11页/共128页2字符输入函数getchar()形式:int getchar(void)作用:从stdin(键盘)输入一个字符,同时有回显。函数无参数,返回接收到的输入字符原型定义:stdio.h常用用法:变量=getchar();第12页/共128页#include stdio.hvo
6、id main()char c;c=getchar();putchar(c);putchar(getchar();输出(如在键盘上输入“a”):aa实例第13页/共128页3.1.4 格式输入与输出 1.格式输出函数printf()作用:按指定的格式输出指定数据一、printf()的一般格式printf(格式控制,输出列表);例:int i=3;double f=4.56;printf(i=%d,f=%lfn,i,f);第14页/共128页1.格式控制:控制按指定格式输出后面的参数。以“”括起。格式控制组成:普通字符(不含%的字符),原样输出(可为转义字符)格式说明符(%格式字符),控制输出数
7、据的格式。2.输出表列:需要输出的数据,以,分隔。可为常、变量、表达式、函数,受格式控制中格式符的控制。也可以没有输出表列,如:l printf(“NametAddtTeln”);printf函数格式第15页/共128页二、格式字符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 左对齐输出,右边补空格 注:%后面
8、的m(位数控制)、0(位数不足补0)对于其他格式符也适用。第16页/共128页例:(表示空格)int i=123;long j=123456;printf(%d%5d%05d,%ld%8ld%08ld,i,i,i,j,j,j);结果:12312300123,12345612345600123456 强调:对long型数据要用%ld输出,若用%d可能会发生错误。同理,short int 数据要用%hd第17页/共128页2.o(字母)格式符:按八进制无符号数的格式输出。符号位作为数一并输出。例:short int a=-1;printf(“a=%hd,%hon”,a,a);结果:a=-1,177
9、7773、x格式符:按十六进制无符号数格式输出int型数。4、u格式符:以无符号十进制形式输出整数对long int数据都需要附加l,对short int 需要附加h如%lo,%10hx,%-10lo第18页/共128页5、c格式符:以字符形式输出。例:char c=101;printf(%c,c);也可以使用:%mc、%-mc 第19页/共128页6、s格式符:以字符串格式输出。%s例:printf(%s,CHINA);%ms m指定宽度(不足时左补空格,大于时按实际宽度输出),右对齐%-ms 左对齐,不足m时右补空格%m.ns 输出占m列,取字符串左端n个字符,左补空格%-m.ns 同上,
10、n个字符输出,占m列,右补空格 第20页/共128页7、f格式符:按小数格式输出实数。printf(%0.3f,123.45678);显示 123.457%f按小数格式输出,整数部分全输出,6位小数%m.nf输出占m列(含小数点),其中n位小数(四舍五入)%-m.nf同上,左对齐%lf用于double型数据第21页/共128页8.e格式符:以标准指数形式输出实数%e 指数形式输出实数,尾数保留6位小数。%m.ne n指保留尾数部分小数位数,右对齐%-m.ne 左对齐%ledouble a=-1.1e300;printf(a=%le,sizeof=%dn,a,sizeof(a);输出:a=-1.
11、100000e+300,sizeof=8第22页/共128页2格式输入函数scanf()一、一般格式作用:按规定格式输入形式:int scanf(格式控制,地址列表)原型定义:stdio.h将键盘输入的数据按指定的格式接收、转换后,送到相应的地址中。第23页/共128页#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,c第24页/共128页二、格式说明与printf()的格式控制类似格式字符说明d 用于输入十进制数o用于输入八进
12、制数x用于输入十六进制数c用于接收单个字符s接收字符串认为空格是结束符f用于输入实数(小数或指数均可接收)e与f相同附加格式说明符l用于long(%ld)和double(%lf)型数据h用于短整型数据(%hd、%ho、%hx)域宽(一个正整数)指定输入所占宽度*表示对应输入量不赋给一个变量第25页/共128页1.可以指定输入数据的列数,系统自动按它截取所需数据。例:scanf(%2d%3d,&a,&b);输入 123456系统自动将12赋给a,345赋给b。2.*格式用于跳过一个数据域scanf(%2d%*3d%2d,&a,&b);输入:1234567结果,a=12,345被跳过,b=67。*
13、主要用于利用现有数据时,跳过某些数据项。3.输入实数不能规定精度如:scanf(%7.2f,&a);说明第26页/共128页1、sacnf()中的变量必须使用地址。int a,b;scanf(“%d,%d”,a,b);错误 scanf(“%d,%d”,&a,&b);正确2、scanf()的“格式控制”中,可以使用普通字符,但在输入时必须输入这些字符,成为 数据输入时的分隔符。例:scanf(%d,%d,&a,&b);输入:3,4(逗号与%d,%d中的逗号对应)三.使用scanf()函数的注意事项第27页/共128页例:scanf(%d%d,&a,&b);输入:34(两个或以上空格)例:scan
14、f(%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=及逗号与格式控制相对应)第28页/共128页3、在用“%c”输入时,空格、回车、TAB等均作为有效字符被接收。例:scanf(%c%c%c,&c1,&c2,&c3);输入:abc结果:ac1,c2,bc3(其余被丢弃)若输入:123ab结果:1c1,2c2,3c3 第29页/共128页4、输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数)。遇空格、“回车”、“跳格”键或
15、用户指定的分隔符。遇宽度结束。遇非法输入。第30页/共128页5、注意%c与%d混合使用时的问题。例:scanf(“%c%d%c”,&a,&b,&c);执行:a12c 结果:a=a,b=12,c=c a12c 结果:a=a,b=12,c=6、数据类型与格式符匹配使用%f%lf 用于实型%d%o%x 用于整型%c 用于字符型第31页/共128页问题与讨论1.scanf函数变量名前没有&会怎样?编译器会报错吗?2.a=getchar()与 scanf(%c,&a)的异同3.怎样设计scanf使得输入数据时减少出错?第32页/共128页3.2 分支结构 程序需要进行比较与逻辑判断,根据判断结果决定不
16、同的操作。确定判断的条件确定判断结果为“真”或“假”时执行的不同操作 第33页/共128页2.2.4 关系运算符与关系表达式 关系运算:也称比较运算,比较两个运算对象的大小。关系表达式:关系运算符连接的式子,关系表达式可能结果有:“真”(true)和“假”(false)。例:a 3、a=3、a!=3第34页/共128页1.关系运算符及其优先次序 小于优先级相同(高)大于=大于等于=等于优先级相同(低)!=不等于第35页/共128页中的逻辑值:(假)(真)关系表达式:用关系运算符连接的表达式。关系表达式的值:0、1 与int 型等效例:若a=3,b=2,c=1,则:ab 真,表达式的值为1(ab
17、)=c真,表达式的值为1b+cb d的值等于1f=abc f的值等于0 注意:数学式abc应写为ab&bc2.关系表达式第36页/共128页3.关系运算的特点右结合双目运算符优先级例:ca+b 等效于c(a+b)ab!=c 等效于(ab)!=c a=bc 等效于a=(bc 等效于a=(bc)第37页/共128页2.3.3 逻辑运算符与逻辑表达式1.逻辑运算符及其优先次序&逻辑与“双目运算符”:要求两个操作数,如:(ab)&(xy)|逻辑或!逻辑非单目运算符,要求一个操作数,如:!(ab)优先级:!高于&高于|第38页/共128页1&1=11&0=00&1=00&0=01|1=11|0=10|1
18、=10|0=0!1=0!0=1逻辑运算规则表混合运算:!a&b=c|x*2y+3&c+按右图优先级运算。第39页/共128页用逻辑运算符将关系表达式或逻辑量连接起来。在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)第42页/共128页条件语句块1语句块2exprstatement1statement2非0=03.2 分支结构 3.2.1 if语句1.if-else分支if(表达
19、式)语句块1;else 语句块2;第43页/共128页例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 take this course again第46页/共128页if-else使用说明(3)ife
20、lse语句执行完毕后执行ifelse的后续语句。系统将整个ifelse结构处理为一条语句单元。第47页/共128页2.if 分支if(表达式)语句;exprstatement非0=0条件语句1第48页/共128页例3-9 输入三个数,按由小到大的顺序输出#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,%d,%dn,a,b,c);第49页/共128页例3-8 设计一个加法计算
21、训练程序,由机器随机产生两个整数,让用户计算两数之和,若用户计算正确则打印“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);第50页/共128页 常见错误 多条语句为内嵌时忘记用 括起来。在if(表达式)之后多加一个分号。比较运算符“=”与赋值运
22、算符“=”混淆使用。最常见的错误为:if(if(x=1x=1)误写为:if(if(x=1x=1)无论x的原值是什么,赋值表达式x=1的值总为1,其作为条件时恒为真。第51页/共128页3.ifelse ifelse 多分支if(表达式1)语句1;elseIf(表达式2)语句2;elseIf(表达式3)语句3elseif(表达式m)语句melse 语句n条件语句1条件2语句2语句3条件3第52页/共128页第53页/共128页例3-10 应用多分支结构编写此程序,根据用户输入的自变量x的值,计算y的值。第54页/共128页void main()float x;printf(please inpu
23、t 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);例 3-10第55页/共128页条件语句1语句2条件语句1条件语句1条件2语句2语句3条件3分支结构流程图第56页/共128页条件语句1语句2条件语句1条件语句组语句组条件条件语句组语句组语句组语句组语句组语句组If-else 嵌套流程图第57页/共128页3.2.2 if语句的嵌套 if(条件表达式1)if(条件表达式2)程序块1;else 程序
24、块2;else if(条件表达式3)程序块3;else 程序块4;ifelse的内嵌程序块中又包含一个或多个ifelse语句称为if语句的嵌套,常用于实现多路选择。第58页/共128页嵌套if语句时,必须特别注意if与else配对。配对原则:从最内层开始,else总是与它上面最接近的(未曾配对的)if配对。避免if与else配对错位的最佳办法是加大括号,同时,为了便于阅读,使用适当的缩进,(只有大括号能保证if和else不错位配对,缩进仅便于阅读)If与else的匹配第59页/共128页例:if(a=b)if(b=c)printf(“a=b=c”);else printf(“a!=b”);修改
25、:if(a=b)if(b=c)printf(“a=b=c”);else printf(“a!=b”);实现 if else 正确配对方法:加 实现if else 正确配对方法第60页/共128页if(p1)if(p2)语句A;else if(p3)语句B;else 语句C;语句D;比较差异:if(p1)if(p2)语句A;else if(p3)语句B;else 语句C;语句D;第61页/共128页#include void main()int a,b,c,max;printf(please input three numbers:n);scanf(%d%d%d,&a,&b,&c);max=a;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 chap 控制 结构
限制150内