《C语言第三章-顺序程序设计.ppt》由会员分享,可在线阅读,更多相关《C语言第三章-顺序程序设计.ppt(113页珍藏版)》请在三一办公上搜索。
1、第三章 顺序程序设计,一个程序,例3.1 编程实现对输入的一个数,输出其绝对值void main()float x,abs;scanf(“%f”,/输出结果,C程序的编写,正确的解题思路(正确的设计)掌握C的基本语法完成程序设计,3.1 顺序程序设计,输入处理输出P37-38,3.2 数据的表现形式及其运算,3.2.1 数据的表现形式-常量与变量一、常量与符号常量字面常量:123,-78.90,n,a,”a”,”hellon”整型常量,实型常量,字符常量,字符串常量符号常量:#define PI 3.1415926 则:PI*r 3.1415926*r 符号常量格式:#define 标识符 字
2、符串/符号串枚举常量:enum response no,yes,none;enum response answer;则answer的值只能取 no(0),yes(1),none(2),下面4组常量,合法的一组C语言常量是 _,二、标识符和变量,标识符标识符可用作变量名、符号名、函数名、数组名、文件名以及一些具有专门含义的名字。合法的标识符由字母、数字和下划线组成,并且第一个字符必须为字母或下划线,且不能与关键词重名。下面的标识符都是合法的:a sum s1 product average pi _int si3q下面的标识符是非法的:4A _$A x.y S#10-init float,二、标
3、识符和变量,变量(1)定义:值在程序运行期间可改变的量叫变量。(2)变量名:采用标识符规范(3)变量的使用:先定义后使用定义变量通常在程序的开始进行,变量的定义格式为:类型名 变量表;或 类型名 变量名1=表达式1,变量名2=表达式2,.,变量名n=表达式n;,例如:int a,b,c=10;char c1,c2=A;,(4)变量的图形表示:变量一旦定义后,计算机内存由系统自动为其开辟了一个存储空间。,变量类型,变量表,例如:int a,b,c=10;char c1,c2=A;,上述定义的变量可用图形表示如下:,变量类型,变量表,10,变量名,变量名既表示了变量的名称还表示了该变量在内存中的地
4、址位置,变量的内容(内容),变量的内容就是变量在内存中的存储空间,用于存放具体的数据。,例如:int a,b,c=10;char c1,c2=A;,(5)变量的类型占用不同的内存大小支持不同的运算 不同类型的变量存放相应类型的数据。不同类型的数据除了特别情况,一般不能存放在不是相同类型的变量中。,变量类型,变量表,三 常变量,C99允许使用格式:const 数据类型 变量名=初值const int a=3;区别:#define PI 3.14const float pi=3.14,3.2.2 C语言的数据类型,一、为何引入数据类型不同类型的数据有不同的区别数据表现形式合法取值范围占用内存大小支
5、持的运算方式,3.2.2 C语言的数据类型,3.2.3 整型常量,(1)整型常量十进制 123,-4589,+7,0八进制 021,-011,073,0123等十六进制 0 x12,0X1f,-0 xa1等各种整型常量如:1024l,67890L,256u,123,021,0 x12,(2)整形变量,.整数在内存中的存储.整型变量的分类.整型变量的定义与使用,.整数在内存中的存储形式(类型的内存形式),计算机内存的组织形式,00000H,00001H,00002H,00003H,FFFFEH,FFFFFH,0 1 0 1 0 0 1 0,1 1 0 1 0 1 1 1,存储单元地址,存储单元内
6、容,内 存,一个字节(byte),一个字(word),二进制位(bit),整数的存储 C语言中,一个int整数通常用两个字节(16位)存放;其中最高位(最左边的一位)用来存放整数的符号,若是正数,最高位放置0,若是负数,最高位放置1。,00000H,00001H,00002H,00003H,FFFFEH,FFFFFH,0 0 0 0 1 0 1 0,0 0 0 0 0 0 0 0,存储单元地址,存储单元内容,a,int a;,int a10;,10,整数的存储 C语言中,一个int整数通常用两个字节(16位)存放;其中最高位(最左边的一位)用来存放整数的符号,若是正数,最高位放置0,若是负数,
7、最高位放置1。,00000H,00001H,00002H,00003H,FFFFEH,FFFFFH,1 1 1 1 0 1 1 0,1 1 1 1 1 1 1 1,存储单元地址,存储单元内容,a,int a10;,10,无符号整数的存储:一个无符号整数通常也是用两个字节存放,但最高位就不是符号位了,它和其他位一起构成了数值位。,00000H,00001H,00002H,00003H,FFFFEH,FFFFFH,1 1 1 1 1 1 1 1,1 1 1 1 1 1 1 1,存储单元地址,存储单元内容,a,unsigned short a65535;,65535,注意:整数在计算机内存是以所谓“
8、补码”形式存放的。,补 码,1.计算机内数据存放的形式 用户所见的数据一般是以十进制或字符形式表现的。但在计算机内部则只能以二进制形式存放才能让计算机能够识别。由此带来如下几个问题:1)如何将十进制(或字符)数据转换为二进制?2)计算机内的二进制数据是如何组织的?3)如何将二进制数据转换为十进制(或字符)?,2.计算机内二进制数据的组织形式(1)计算机内的二进制数据必须以字节、字等为单位进行组织。例如:数据 10(十进制形式)转换为 1010(二进制形式)存放在计算机内则为:00001010(一个字节的二进制)或 0000000000001010(一个字的二进制),(2)有符号数据的组织形式
9、对于有符号数据,通常将数据位的最高位划分出来专门用于表示符号,即用“0”表示“”,用“1”表示“”。有符号数据的组织形式:原 码 和 补 码,原 码:符号位 数值位 例如:若用原码表示一个int型整数(两个字节即一个字)十进制 10 原码 0000000000001010 10 原码 1000000000001010,补 码(p41):正数的补码就是该正数的原码。负数的补码则需要转换:先写出负数的原码,然后将该原码中的符号位保持不变,将其他所有数值位逐位取反,最后再加1。,例如:若用补码表示一个int型整数(两个字节)十进制 10 原码 0000000000001010 补码 00000000
10、00001010 10 原码 1000000000001010,1,+1,补码 1,考虑:-1在计算机中的存储?,.整型变量的分类,.整型变量的定义与使用,.整型变量的定义与使用,3.2.4字符型数据(1)字符型常量,字符:ASCII字符表(字母,数字,专门符号,空格,不能显示的字符)普通字符常量 a A 0$转义字符 以开始的字符n t b ddd xdd字符串常量“a”“hello”“hellon”,29,字符常量定义:用单引号括起来的单个普通字符或转义字符.,字符常量的值:该字符的ASCII码值,如 101-A 012-n 376-x61-a 60-0 483-(),例:A-101-x4
11、1-65,如 A65,a97,048,n10,如 a A?n 101,转义字符:反斜线后面跟一个字符或一个代码值表示,例 转义字符举例.main()printf(101 x42 Cn);printf(I say:How are you?n);printf(C Programn);printf(Turbo C);,运行结果:(屏幕显示)A B CIsay:”How are you?”C ProgramTurbo C,例 main()printf(“Yb=n”);,运行结果:屏幕显示:=打印机输出:,字符常量与字符串常量不同,字符串常量定义:用双引号(“”)括起来的字符序列存储:每个字符串尾自动加
12、一个 0 作为字符串结束标志,例:char ch;ch=“A”;,3.2.4字符型数据(2)字符型变量,在内存中的存放只能存一个字符,存储为该字符的ASCII码如 char c=a;则字符串的存储同字符,增加了一个0注意:字符与字符串的存储和赋值区别,则变量c在内存中的存放为,3.2.5浮点型数据(1)浮点型常量,十进制小数 如 0.123,.123,123.0,5.0指数形式 数e/E整数如 1.23e3 或 1.23E3 表示1.23*103注意:1)字母e/E之前必须有数字,e/E后面必须为整数。如:e3、2.1e3.5、.e3、e都不是合法的指数形式。2)规范化的指数形式。在字母e或E
13、之前的小数部分,小数点左边应当有且只能有一位非0数字。如:2.3478e2、3.0999E5、6.46832e12属规范化指数形式。,2.浮点型数据-(2)浮点型变量,在内存中的存放规范化指数形式存分类及定义使用,浮点型数据-(2)浮点型变量,浮点型数据的误差舍入误差比较误差,3.2.6 不同类型变量的初始化,先定义,后赋值定义变量的同时赋值,混合运算及数据类型转换,隐式转换什么情况下发生运算转换-不同类型数据混合运算时赋值转换-把一个值赋给与其类型不同的变量时输出转换-输出时转换成指定的输出格式函数调用转换-实参与形参类型不一致时转换运算转换规则:不同类型数据运算时先自动转换成同一类型,显式
14、转换(强制转换)一般形式:(类型名)(表达式)例(int)(x+y)(int)x+y(double)(3/2)(int)3.6 说明:强制转换不影响原变量类型。,例 main()float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);结果:x=3.600000,i=3,精确度损失问题,思考或问答题:1、数据类型决定什么?2、整型变量、字符型变量和单精度变量在内存中各占几个字节?3、标识符的允许使用哪些符号?4、符号常量是怎样定义的?5、字符型常量是怎样定义的?6、什么叫转义字符?7、字符串常量与字符常量有什么区别?8、整型变量与字符型变量可以通
15、用?9、定义变量时是否可以赋初值?11、变量不定义可以直接使用吗?例如 main()int a=23,b=12;c=a+b;printf(“c=%d”,c);10、不同类型数据之间的转换规则是如何规定的?,C语言的运算符,学习运算符应注意:运算符功能与运算量关系要求运算量个数 有双目运算、单目运算、三目运算要求运算量类型 运算符优先级别 表达式按优先级次序运算 结合方向 优先级相同时按结合方向运算 结果的类型,一、算术运算符和算术表达式(p52),基本算术运算符:+、-、*、/、%结合方向:从左向右 取负 是右结合优先级:-*、/、%-+、-(2)(3)(4)说明:“-”可为单目运算符时,为负
16、号运算符,右结合性两整数相除(/),结果为整数 参加+、-、*、/运算的两个数中有一个为实数,则结果是double型,因为所有的实数都按double型进行运算。%要求两侧均为整型数据,例 5/2=-5/2.0=,例 5%2=-5%2=1%10=5%1=5.5%2,例 5/2=2-5/2.0=-2.5,例 5%2=1-5%2=-1 1%10=1 5%1=0 5.5%2(),自增、自减运算符+-,作用:使变量值加1或减1种类:前置+i,-i(先执行i+1或i-1,再使用i值)后置 i+,i-(先使用i值,再执行i+1或i-1),说明:+-不能用于常量和表达式,如5+,(a+b)+-结合方向:自右向
17、左优先级:-+-*/%-+-(2)(3)(4),自增、自减的具体功能,后缀形式:如 a+a 功能:先取变量(如a)的值作为整个表达式的结果,之后再对变量(如a)进行加1(或减1),也可以等价于:a+a 和 aa1比如:若设变量a原来的内容为10,则 执行语句printf(”d”,a+);结果应为:?,10,但a的内容则为11,printf(”d”,a);,aa+1;,自增、自减的具体功能,前缀形式:如+a a 功能:先对变量(如a)进行加1(或减1),之后再取变量(如a)的值作为整个表达式的结果。,也可以等价于:+a aa1 和 a比如:若设变量a原来的内容为10,则 执行语句printf(”
18、d”,+a);结果应为:?,11,而a的内容也为11,aa+1;,printf(”d”,a);,例如:若int型变量a的内容为3,则表达式-i+的结果是多少?分析:由于运算符和+的优先级相同,因此,相对于变量i而言,就只能按运算符的结合性判断。因为,和+结合性均为从右往左,所以上式等价于:-(i+)但若执行printf(“%d”,-i+);则结果为?,3,main()int a,b,c;a=b=c=0;a=+b+c;/*b+后必须加空格*/printf(“n%d%d%d”,a,b,c);a=b+c+;/*运算符间可不加空格*/printf(“n%d%d%d”,a,b,c);a=+b+c+;pr
19、intf(“n%d%d%d”,a,b,c);a=b-+-c;printf(“n%d%d%d”,a,b,c);a=+c+c;printf(“n%d%d%d”,a,b,c);,输出 2 1 1,输出 2 2 2,输出 5 3 3,输出 5 2 2,输出 6 2 3,二、赋值运算符与表达式(P60),1、简单赋值运算符符号:=格式:变量标识符=表达式作用:将一个数据(常量或表达式)赋给一个变量,例 a=3;b=3+4*5;c=d+2;d=e=10;d=func();,2、复合赋值运算符,=与算术运算符、位运算符结合(共10种)种类:+=-=*=/=%=&=|=含义:exp1 op=exp2 exp1
20、=exp1 op exp2,赋值运算符相关说明:结合方向:自右向左优先级:极低左侧必须是变量,不能是常量或表达式,例:a=b=c=5 a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2),例:int a=2;a+=a*=a-=a*=3;,例:a=12;a+=a-=a*a,/表达式值为5,a,b,c值为5,/b=5;a=5,/表达式值11,c=6,a=11,/表达式值10,a=10,b=4,c=6,/表达式值5,a=5,b=10,c=2,/a=-264 等价于a=a+(a=a-(a*a),/a=0 等价于a=a+(a=a*(a=a-(a=a*3),3、赋值运算带
21、来的类型转换,赋值号右边表达式值自动转换成其左边变量的类型(数值类型才兼容此规则)int i=3.87 float f=3;double d=5;int i=A;int i=-1;unsigned u=i;int a;char ch=376;a=ch;int i=257;char c=a;c=i;,按存储单元的存储结构直接赋值,/结果 i=3,/f=3.0000000 d=5.00000000000,/结果 i=65,/结果 u=65535,/结果 a=-2,/结果 c=1,三、逗号运算符与逗号表达式,形式:表达式1,表达式2,表达式n结合性:从左向右优先级:低求解:自左向右,依次求解各表达式
22、的值,直到最后一个表达式的值求出(为整个表达式值),#include main()int x,y=7;float z=4.0;x=(y=y+6,y/z);printf(x=%dn,x);,运行结果:x=3,/a=15,表达式值60,/a=15,表达式值20,/赋值表达式,表达式值18,x=18,/逗号表达式,表达式值18,x=3,/1,2,3,/3,2,3,例 a=3*5,a*4 a=3*5,a*4,a+5例 x=(a=3,6*3)x=a=3,6*a例 a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);,四、
23、关系运算与逻辑运算(p91-94),关系或逻辑表达式的结果是一个逻辑值,即或者为“真(true)”,或者为“假(false)”。C语言用非零值来表示”真”,用零值表示”假”。对于任意一个表达式,若值为0,则代表”假”值;只要值是非零,无论是正数还是负数,都代表”真”值。,1、关系运算符与表达式,种类:=!=双目运算符,结合方向自左至右关系表达式的值:是逻辑值“真”“假”,即1和0表示优先级,例 ca+b/c(a+b)ab!=c/(ab)!=c a=bc/a=(bc),/表达式值1,/表达式值1,/表达式值0,/d=1,/f=0,int a=3,b=2,c=1,d,f;ab(ab)=c b+cb
24、 f=abc x=10;y=-10 x10;,/y=1,2、逻辑运算符与表达式,种类:!(逻辑非)&(逻辑与)|(逻辑或)&和|为二目运算符,如:a&b a|b!为单目运算符,如:!a 结果值:用“真”“假”,即1和0表示优先级 结合方向,逻辑真值表,C语言中,运算量:0表示“假”,非0表示“真”运算结果:0表示“假”,1表示“真”,逻辑运算符功能:&(逻辑与):a&b 当a、b 都是真时值为真,其余为假。|(逻辑或):a|b 当a、b都为假时值为假,否则为真。!(逻辑非):!a 当 a 为真时值为假,当a 为假时值为真。,ab&xya=b|x=y!a|ab,/(ab)&(xy),/(a=b)
25、|(x=y),/(!a)|(ab),/(a=x)&(x=b),!aa&ba|b!a|b 4&0|2 53&2|84-!0c&d,例,例a=4;b=5;,值为1,值为0,值为1,值为1,值为1,值为1,/(53)&2|(8(4-(!0)值为1,逻辑表达式特殊的“短路性”,&的左侧为真时才会继续与右侧运算,否则结果为假|的左侧为假时才会继续与右侧运算,否则结果为真如:a=1,b=2,c=3,d=4,m=1,n=1 则(m=ab)&(n=cd)后,m和n的值为?m=0 n=1如:逻辑表达式:a+&b+如:a+|b+,5、条件运算符与条件表达式(p97),形式:e1?e2:e3?:方向:自右向左优先级
26、:优于赋值,低于逻辑、关系、算术等;功能:先求e1的值,若为真则求e2,并将e2的值作为整个条件表达式的值;否则求e3,并将e3的值作为整个条件表达式的值。如:max=ab?a:b;实现求a,b的较大值赋给max如:a=10,b=20,c=30,d=40 m=a b?a:b+1;m为?表达式 a b?a:c d?c:d;值为?,21,40,ASK:如何用?:实现求绝对值?,五、位运算,功能:指进行二进制位(bit)的运算。,位运算符及其功能,复合赋值(位)运算符,对于赋值号两侧的数据类型转换问题,总的原则是:优先级低的数据原样赋值给优先级高的变量,而不足的部分将由系统根据是否是有符号还是无符号
27、,或者有效位扩展自动完成。优先级高的数据赋值给优先级低的变量时,数据低位的原样赋值,而高位的被截断。上述原则,如果从单元存储结构看,则更简单,就是按存储单元的存储结构直接赋值。,(1)按位取反(),运算符是位运算中唯一的一个单目运算符,运算对象应置于运算符的右边。其运算功能是把运算对象的内容按位取反:即,每一位上的0变1;1变0。,例如:表达式0115是将八进制数115按位求反。01001101 结果:10110010,(2)左移运算()双目运算符。运算符左边是移位的对象;右边是整型表达式,代表左移的位数。左移时,右端(低位)补零;左端(高位)移出的部分舍弃。,例如 char a=6,b;b=
28、a2;,用二进制数来表示运算过程如下:a:00000110(a=6)b=a2:00011000(b=24=4*6),注意:左移时,若左端移出的部分不包含有效二进制数1,则每左移一位,相当于移位对象乘以2。某些情况下,可以利用左移的这一特性代替乘法运算,以加快运算速度。如果左端移出的部分包含有效二进制数1,这一特性就不适用了。,(3)右移运算()右移时,右端(低位)移出的二进制数舍弃;左端(高位)移入的二进制数分两种情况:对于无符号整数和正整数,高位补0;对于负整数,高位补1。因为负数在机器内均用补码表示。,例如:(假设int型数据占2字节)int a=-071400,b;b=a2;,和左移相对
29、应,右移时,若右端移出的部分不包含有效数字1,则每右移一位相当于移位对象除以2。,用二进制数表示的运算的过程如下:a的二进制原码表示:1 111 001 100 000 000a的二进制补码表示:1 000 110 100 000 000(机内存储形式)b=a2:1 110 001 101 000 000(b的二进制补码表示)b的二进制原码表示:1 001 110 011 000 000b的八进制数:016300,运算符&的作用是:把参加运算的两个运算数,按对应的二进制位分别进行”与”运算,当两个相应的位都为1时,该位的结果为1;否则为0。,例如,表达式 12&10 的运算如下:,注意:利用按
30、位与运算来解决“如何使得某个二进制数据的某几位清0,某几位保留”的问题。,(4)按位与运算(&),参与运算的两个运算数中相对应的二进制位上,若数相同,则该位的结果为0;数不同,则该位的结果为1。,由此可见,要使某位的数翻转,只要使其和1进行“异或”运算,而要使某位保持原数只要使其和0进行“异或”运算。,例如,00110011 11000011 11110000,(5)按位异或运算(),参加运算的两个数中,只要两个相应的二进制位中有一个为1,该位的运算结果即为1;只有当两个相应位的数都为0时,该位的运算结果才为0。,例如 0123:01010011 014:00001100 0123|014:0
31、1011111,利用按位或运算的操作特点,可以使一个数中的指定位置1,其余位不变。即:将希望置1的位与1进行或运算;保持不变的位与0进行或运算。,(6)按位或运算(|),例、给出程序运行结果,#include main()char a,b;int iab;printf(“Input characters A,Input characters A&B:,1,2,0 x0031,0000000000110001 8,0 x3100,iab=,0000000000110010,3132,六、其他运算符,常量与变量数据类型int,float,double,char运算符算术,赋值,逗号,关系,逻辑,条
32、件,位运算,3.3 C语句,一、C程序结构图 源文件1 预定义 源文件2 数据声明 函数首部 源文件3 函数1 数据声明C程序 函数体 函数n 执行语句 源文件n,C语句:编译后产生若干条机器指令,二、C语句的分类,控制语句函数调用语句表达式语句空语句复合语句,(1)条件语句:if().else 和 switch(2)循环语句:for().和 while().以及 do.while()(3)结束本次循环执行语:continue(4)中止执行switch或循环语句:break(5)转向语句:goto 常与if搭配使用(6)从函数返回语句:return,二、C语句的分类1、控制语句,2.函数调用语
33、句:格式:函数名(实在参数);例如:printf(“x*y=%dn”,z);,3.表达式语句:表达式加上一个分号可成为一个表达式语句,C程序中的大多数语句都是表达式语句。例如:i=i+1;i+;x+y;注意:函数调用语句也可认为是表达式语句的一种。另外,赋值表达式加一个分号称为赋值语句。例如 sum=a+b;j=j+1;a+=b;a=b=c;,二、C语句的分类,4.空语句:格式:;空语句什么也不做,5.复合语句:用 将多个语句括起来成为一个复合语句,常用在需要将多条语句作为一条语句处理的场合。例如:s=3.14*r*r;printf(“area=%fn”,s);虽有两条语句,但用大括弧括起后,
34、被认为是一条语句。,二、C语句的分类,5.复合语句:复合语句可嵌套。例如:s=3.14*r*r;,三 赋值语句,赋值表达式赋值表达式组成赋值语句,3.4 数据输入输出,1、输入输出的概念从计算机向外部输出设备(如显示器、打印机、磁盘等)输出数据称为“输出”;从输入设备(键盘、磁盘、鼠标等)向计算机输入数据称为“输入”。2、C语言通过什么方式实现输入输出的?c语言输入输出操作是由函数来实现的。在C语言中标准函数库中提供一批“标准输入输出函数”,如 printf函数(输出函数)scanf函数(输入函数)putchar函数(输出函数)getchar函数等(输入函数)其它输入输出函数,3.在c语言中使
35、用库函数有什么条件?在使用C语言标准(I/O)库函数时,要用文件包含预编译命令:#include 或#include“stdio.h”4.为什么使用库函数时要#include?因为每个库函数的相关规则包含在相应文件中(比如:stdio.h),通过预处理命令把相应的文件装在程序的前面,一起编译,只有这样才能使用。,格式输出函数格式:printf(“格式控制串”,输出列表)功能:按指定格式向显示器输出数据,输出列表:要输出的数据(可以没有,多个时以“,”分隔)格式控制串:包含两种信息格式说明:%修饰符格式字符,用于指定输出格式普通字符或转义序列:原样输出 例如:printf(“a=%d b=%dn
36、”,a,b);输出:a=3 b=4,3.4.3 printf函数输出数据,普通字符,普通字符,转义字符,格式字符,格式说明,说明格式字符要用小写格式字符与输出项个数应相同,按先后顺序一一对应输出转换:格式字符与输出项类型不一致,自动按指定格式输出,例 int a=3,b=4;printf(“%d%dn”,a,b);printf(“a=%d,b=%dn”,a,b);输出结果:3 4 a=3,b=4,附加格式说明符(修饰符),如%ld,%lo等,运行结果:1234,1234,例 m.n,例 int a=1234;printf(“%8d,%2dn”,a,a);,例 float f=123.456;p
37、rintf(“%f,%8f,%8.1f,%.2f,%.2en”,f,f,f,f,f);,运行结果:123.456000,123.456000,123.5,123.46,1.23e+002,运行结果:a,例 char ch=a;printf(“%3cn”,ch);,例 static char a=“Hello,world!”printf(“%sn%15sn%10.5sn%2.5sn%.3sn”,a,a,a,a,a);,运行结果:Hello,world!Hello,world!Hello Hello Hel,例 int a=1234;float f=123.456;static char c=“H
38、ello,world!”;printf(“%8d,%-8dn”,a,a);printf(“%10.2f,%-10.1fn”,f,f);printf(“%10.5s,%-10.3sn”,c,c);,运行结果:1234,1234 123.46,123.5 Hello,Hel,例 int a=1234;float f=123.456;printf(“%08dn”,a);printf(“%010.2fn”,f);printf(“%0+8dn”,a);printf(“%0+10.2fn”,f);,例 0、+,例 int a=123;printf(“%o,%#o,%X,%#Xn”,a,a,a,a);,例#
39、,例 long a=65536;printf(“%8ld,%dn”,a,a);,例 l,/00001234,/0000123.46,/000+1234,/000+123.56,/173,0173,7B,0X7B,-65536,0,格式输入函数,格式:scanf(“格式控制串”,地址列表)功能:按指定格式从键盘读入数据,存入地址表指定的 存储单元中,并按回车键结束,地址表:变量的地址,常用取地址运算符&格式字符:d,i,o,x,u,c,s,f,e,例 scanf(“%d”,输入:10 则 a=10,例 scanf(“%x”,输入:11 则 a=17,3.4.4 scanf函数实现输入,附加格式说
40、明符(修饰符),例 scanf(“%4d%2d%2d”,输入 19991015 则1999yy,10 mm,15 dd,例 scanf(“%3d%*4d%f”,则123k,8765.43f,例 scanf(“%2d%*3d%2d”,输入 1234567 则12a,67b,例 scanf(“%3c%2c”,输入 abcde 则ac1,d c2,输入分隔符的指定一般以空格、TAB或回车键作为分隔符其它字符做分隔符:格式串中两个格式符间字符,例 scanf(“%d%o%x”,输入 123 123 123 输出 a=123,b=83,c=291,例 scanf(“%d:%d:%d”,输入 12:30:
41、45 则12 h,30 m,45 s,例 scanf(“%d,%d”,&a,&b)输入 3,4 则3a,4 b,说明:用“%c”格式符时,空格和转义字符作为有效字符输入,如 scanf(“%c%c%c”,若输入abc 则ac1,c2,b c3,输入数据时,遇以下情况认为该数据结束:遇空格、TAB、或回车遇宽度结束遇非法输入,如 scanf(“%d%c%f”,若输入1234a123o.26 则 1234 a,a b,123 c,putchar 函数,格式:putchar(字符);功能:向终端输出一个字符注意:使用时要求在程序开始处标注:#include“stdio.h”或#include,3.4
42、.5 字符数据输入输出,例:输出 ABC,#include“stdio.h”main()char a,b,c;a=101;/*或:a=A;*/b=B;c=C;putchar(a);putchar(b);putchar(c);,同类型的例子请参见p73例4.1,getchar 函数,格式:getchar();其返回值(结果)为字符功能:从终端输入一个字符注意:使用时要求在程序开始处说明:#include“stdio.h”或#include,3.4.5 字符数据输入输出,例:将键盘键入的字符显示出来,#include“stdio.h”main()char ch;ch=getchar();putch
43、ar(ch);,#include“stdio.h”main()putchar(getchar());,同类型的例子请参见p74例4.2,3.4.6 顺序结构 程序设计举例,#include#include main()float a,b,c,s,area;scanf(%f,%f,%f,例 输入三角形边长,求面积,输入:3,4,6 输出:a=3.00,b=4.00,c=6.00 s=6.50 area=5.33,程序设计四步曲:1、变量声明;2、输入变量值;3、处理数据(用变量表示);4、输出变量值(结果)。,例 从键盘输入大写字母,用小写字母输出。,#include stdio.hmain()
44、char c1,c2;c1=getchar();printf(%c,%dn,c1,c1);c2=c1+32;printf(%c,%dn,c2,c2);,输入:A 输出:A,65 a,97,#include#include main()float a,b,c,disc,x1,x2,p,q;scanf(a=%f,b=%f,c=%f,输入:a=1,b=3,c=2 输出:x1=-1.00 x2=-2.00,例 写出下面程序的运行结果。main()int a=-1;int b=-2;printf(“a=%d,%o,%x,%un”,a,a,a,a);printf(“b=%d,%o,%x,%un”,b,b,b,b);,分析:首先要了解1,2在内存中的存储结构。然后再看按什么格式输出哪个数据。,良 好 的 源 程 序 书 写 风 格顺序程序段左对齐,顺序程序段中的所有语句(包括说明语句),一律与本顺序程序段的首行左对齐。,作业,P82-841,5,7 4,5(课下自己完成),