第3章最简单的C程序设计.ppt

上传人:sccc 文档编号:5637055 上传时间:2023-08-04 格式:PPT 页数:91 大小:770.01KB
返回 下载 相关 举报
第3章最简单的C程序设计.ppt_第1页
第1页 / 共91页
第3章最简单的C程序设计.ppt_第2页
第2页 / 共91页
第3章最简单的C程序设计.ppt_第3页
第3页 / 共91页
第3章最简单的C程序设计.ppt_第4页
第4页 / 共91页
第3章最简单的C程序设计.ppt_第5页
第5页 / 共91页
点击查看更多>>
资源描述

《第3章最简单的C程序设计.ppt》由会员分享,可在线阅读,更多相关《第3章最简单的C程序设计.ppt(91页珍藏版)》请在三一办公上搜索。

1、1,第3章 最简单的C程序设计,数据的表现形式及其运算C语句数据的输入输出顺序程序设计举例,2,3.1 数据的表现形式及其运算,常量和变量数据类型整型数据字符型数据浮点型数据运算符和表达式,3,3.1.1 常量和变量,1、标识符定义:用来标识变量、常量、函数等的字符序列组成:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线大小写敏感不能使用关键字长度:最长32个字符命名原则:见名知意不宜混淆 如l与I,o与0,例:判断下列标识符号合法性sum Sum M.D.John day Date 3days student_name#33 lotus_1_2_3 char ab _above

2、$123,M.D.John,3days,#33,char,$123,ab,4,3.1.1 常量和变量,2、常量定义:程序运行时其值不能改变的量(即常数)分类:直接常量和符号常量直接常量:整型常量 实型常量 字符常量 字符串常量符号常量:用标识符代表常量定义格式:#define 符号常量 常量使用符号常量的好处:1)见名知意 2)一改全改注意:1.使用之前必须先定义;2.符号常量名用大写,变量用小写;3.符号常量的值在其作用域内不能改变;4.凡是以“#”开头的都为预处理命令,不是语句,故后面无符号。,如#define PRICE 30,例 符号常量举例#define PRICE 30#inclu

3、de int main()int num,total;num=10;total=num*PRICE;printf(total=%d,total);return 0;,5,3.1.1 常量和变量,3、变量定义:程序运行时其值可以改变的量分类:整型变量、实型变量、字符型变量变量定义的一般格式:数据类型 变量1,变量2,变量n;,例:int a,b,c;float data;,决定分配字节数和数的表示范围,合法标识符,6,变量必须先定义,后使用定义变量时指定该变量的名字和类型大小写字母被认为是两个不同的字符。一般,变量名用小写字母表示。变量名也应当“见名知意”,以增加程序的可读性。变量名和变量值是两

4、个不同的概念变量名实际上是以一个名字代表的一个存储地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据,注意:,7,3.1.1 常量和变量,4、常变量C99允许使用常变量,如:const int a=3;表示a被定义为一个整形变量,指定其值为3,而且在变量存在期间其值不能改变。常变量与常量的异同:常变量具有变量的基本属性,有类型,占存储单元,只是不许改变其值。可以说,常变量是有名字的不变量,而常量是没有名字的不变量。有名字便于在程序中被引用。常变量与符号常量的不同?,8,PI和pi都代表3.14159,在程序中都能使用。定义符号常量用#define预编译指令,它只是

5、用符号常量代表了一个字符串,在预编译时仅是进行字符替换,在预编译后,符号常量就不存在了(全置换成3.14159了),对符号常量的名字是不分配存储单元的。而常变量是要占存储单元,有变量值,只是该值不改变而已。从使用角度来看,常变量具备了符号变量的优点,且使用更加方便。,常变量与符号常量的不同,#define PI 3.14159,const float pi=3.14159,9,3.1.2 数据类型,所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式。不同的类型分配不同的长度和存储形式。,10,C语言允许使用的数据类型:,3.1.2 数据类型,基本类型整型

6、类型基本整型短整型长整型双长整型字符型布尔型,浮点类型单精度浮点型双精度浮点型复数浮点型,11,C语言允许使用的数据类型:,3.1.2 数据类型,基本类型枚举类型空类型派生类型 指针类型 数组类型 结构体类型 共用体类型 函数类型,算术类型,纯量类型,12,3.1.3 整型数据,1、整型常量的3种形式十进制整数:由数字09和正负号表示.如 123,-456,0八进制整数:由数字0开头,后跟数字07表示.如0123,011十六进制整数:由0 x开头,后跟09,af,AF表示.如0 x123,0 xff,问题:0123=()100 x123=()100Xff=()10,13,整型数据在内存中是以补

7、码表示的。,整数类型存储方式,14,例如:求-10的补码表示(假设按16位存储)。,-10的原码,1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0,除符号位外各位取反,1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1,末位加1,1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0,则得到-10的二进制补码的表示。,15,3.1.3 整型数据,2、整型变量的分类基本整型(int型):占2个或4个字节,VC+6.0中占4个字节短整型(short int):VC+6.0中占2个字节长整型(long int):VC+6.0中占4个字节双长整型(long long

8、int):C99新增的,一般分配8个字节。,c语言没有具体规定各类数据所占内存字节数,但要求长度必须:短整型 基本整型长整型双长整型,16,3.1.3 整型数据,3、整型变量的符号属性可以将变量定义为“无符号”类型,则上述4类可以扩充为8类。整型变量的值的范围包括负数到正数。(p45 表3.2),有符号基本整型 signed int;无符号基本整型 unsigned int;有符号短整型 signed short int;无符号短整型 unsigned short int;有符号长整型 signed long int;无符号长整型 unsigned long int有符号双长整型 signed

9、 long long int;无符号双长整型 unsigned long long int,17,3.1.4 字符型数据,1、字符型常量单引号括起来的一个单字符。如:A及用“”转义词开头的若干种特殊字符常量,有n,t,b,”,f,r,ddd 3位八进制数代表的字符,xhh 2位16进制数代表的字符(见P40表3.1)。例:101,代表ASCII码值65的字符A,x41也代表ASCII码值65的字符A。而0表示空操作,字符串结束符。,18,3.1.4 字符型数据,2、字符变量用来存放一个字符常量,用char来定义定义形式:char c1,c2;c1=a;c2=A;事实上,字符在内存中以ASCII

10、码码值存放 a97,A65(小写比大写码值大),19,字符数据在内存中以ASCII码存储(整数以二进制数形式存放)。字符存放只占一个字节。C语言中字符数据和整型数据之间可通用,字符数据既可以字符形式输出,也可以整数形式输出。例 int main()char c1,c2;c1=97;c2=98;printf(“%c,%cn”,c1,c2);return 0;输出a,b 字符数据可以进行算术运算,字符数据和整型数据可以互相赋值。,3.1.4 字符型数据,20,例 int main()char c1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(“%c,%c”,c1,c

11、2);return 0;输出A,B 字符数据和整型数据可以互相赋值。,3.1.4 字符型数据,21,3.1.4 字符型数据,字符变量也可以用signed 和unsigned修饰符来表示符号属性。若在定义变量时没加修饰符,C标准未对此进规定,由各编译系统自己决定。,说明:在使用有符号字符型变量时,允许存储的值为-128127,但字符的代码不可能为负值,所以在存储字符时实际上只用到0127这一部分,其第一位都是0。(P49附注1),22,输出:-2,例#include int main()char c=376;printf(“%d”,c);return 0;,在VC环境下编译运行下面程序,23,字

12、符常量与字符串常量不同,例:char ch;ch=“A”;,字符串,字符串常量 定义:用一对双引号括起来的字符序列。存储:每个字符串尾自动加一个 0 作为字符串结束标志。,24,思考?,1、字符串常量How do you do.和Good morning.的长度分别是多少?,2、字符串C:msdosv6.22和I say:Goodbye!在C语言中的字符串常量形式如何表示?,3、字符串CHINA在内存中的实际存储形式是怎样的?占用多少个字节的内存空间?,14和13,C:msdosv6.22和I say:Goodbye!,占用字节而非字节内存空间,空格是字符,如果反斜杠和双引号作为字符串中的有效

13、字符,则必须使用转义字符。,25,注意:1、a是字符,a是字符串。2、不能把一个字符串赋给一个字符变量。如c=a、c=Hello!都是错误的。3、C语言中没有字符串变量,可以用字符数组来表示。,26,总结:字符与字符串的区别有哪些?,定界符不同:字符常量使用单引号,而字符串常量使用双引号;长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数;存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志0。,27,3.1.5 浮点型数据(实型数据),1、实型常量 表示形式:(1)十进制小数形式:0.12 35.0-34

14、.679 0.0 0.注意:小数点不能省略,不能只有一个小数点(2)指数形式:12.3e3,123E2,1.23e4,e-5,1.2E-3.5 注意:1.E(指数符号)不分大小写;2.E前必须有数字,且后面指数为整数;3.E后正号可不写,负号必须写,28,3.1.5 浮点型数据(实型数据),2、实型变量(见P50表3.4)float型(单精度浮点型)编译系统为float型变量分配4个字节 67位有效数字 double型(双精度浮点型)编译系统为double型变量分配8个字节 15位有效数字 C编译系统把浮点型常量都按双精度处理 long double(长双精度)型 编译系统为long doub

15、le型变量分配8个或16个字节 实数在计算机中是以指数的形式存放的。,29,3.1.6 运算符和表达式,C运算符:,算术运算符+-*/%关系运算符=|&赋值运算符=+=-=*=/=%=条件运算符?:逗号运算符,指针运算符*&求字节数运算符 sizeof 强制类型转换运算符(类型)特殊运算符:有括号(),下标,成员(,.)等几种,30,3.1.6 运算符和表达式,1、基本的算术运算符+:加法或正值运算符-:减法或负值运算符*:乘法运算符/:除法运算符%:求余运算符 运算对象:常量、变量、函数等 运算级别:低*/%高,31,3.1.6 运算符和表达式,说明:两个整数相除,结果为整数;若有一个数为实

16、数,则结果为double型。如5/3的结果值为,舍去小数部分 如果除数或被除数中有一个为负值,舍入方向不固定。例如,-5/3,有的系统中得到的结果为-1,在有的系统中则得到结果为-2 VC+采取“向零取整”的方法 如5/3=1,-5/3=-1,取整后向零靠拢%两边为整数,不能为实数。结果的符号与被除数的符号相同(正负由被除数决定)如:15%43 15%43-15%4=-3,32,3.1.6 运算符和表达式,2、算术表达式和运算符的优先级与结合性 算术表达式:用算术运算符和括号将运算对象(也称操作数,如常量、变量、函数等)连接起来、符合C语法规则的式子。如:a*b/c-1.5+a 运算符的优先级

17、:先乘除、后加减;先括号。运算符的结合性:运算对象两侧的运算符优先级相同时,运算符的结合方向(左、右)。(1)左结合性:结合方向为从左至右(先左后右,简称左结合)。算术运算符为左结合。例:a-b+c(2)右结合性:结合方向为从右至左(先右后左,简称右结合)。赋值运算符=为右结合。例:a=b+c,33,(1)+、-、*、/运算的两个数中有一个数为float或double型,结果是double型。系统将float型数据都先转换为double型,然后进行运算。(2)如果int型与float或double型数据进行运算,先把int型和float型数据转换为double型,然后进行运算,结果是doubl

18、e型。(3)字符型数据与整型数据进行运算,就是把字符的ASCII代码与整型数据进行运算。,不同类型数据间的混合运算,以上类型转换是由系统自动进行的。,34,3.1.6 运算符和表达式,3、强制类型转换运算符 有时为了编程需要,将输出数据的类型强行转换成所需类型。格式:(类型名)(表达式)例:(int)(x+y)(int)x+y(double)(3/2)(int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变。强制类型转换运算符优先于,*,/运算。,35,#include int main()float x;int i;x=3.6;i=(int)x;printf(x=%f,i=%d

19、,x,i);return 0;,思考:以下程序的输出结果是什么?,x=3.600000,i=3,程序运行结果:,结论:较高类型向较低类型转换时可能发生精度损失问题,36,举例:已知三角形的边长a、b、c,求三角形周长的一半。,#include int main()float a,b,c,s;a=3;b=4;c=5;s=1/2*(a+b+c);printf(s=%8.2f,s);return 0;,s=0.00,程序运行结果:,?,s=6.00,程序运行结果:,改为:1.0/2(1/2.0)或(float)1/2(1/(float)2),37,3.1.6 运算符和表达式,4、自增、自减运算符 作

20、用:使变量的值增1或减1 格式:前置+i,-i(先执行i+1或i-1,再使用i值)后置 i+,i-(先使用i值,再执行i+1或i-1),例 j=3;k=+j;j=3;k=j+;j=3;printf(“%d”,+j);j=3;printf(“%d”,j+);a=3;b=5;c=(+a)*b;a=3;b=5;c=(a+)*b;,/k=4,j=4,/k=3,j=4,/4,/3,/c=20,a=4,/c=15,a=4,38,3.1.6 运算符和表达式,4、自增、自减运算符 作用:使变量的值增1或减1 格式:前置+i,-i(先执行i+1或i-1,再使用i值)后置 i+,i-(先使用i值,再执行i+1或i

21、-1)说明:+-不能用于常量和表达式,如5+,(a+b)+-结合方向:自右向左 优先级:-+-*/%-+-,例-i+-(i+)i=3;printf(%d,-i+);/-3,例-i+i=3;printf(%d,-i+);,39,书写表达式注意事项 1)乘号不能省。如:ab应写成 a*b 2)表达式中只有圆括号可以嵌套使用,但左、右括号必须配对。3)避免两个运算符并置。如a*b/-c应写为:a*b/(-c)4)由于两个整数相除结果仍为整数,所以要注意转换。如:5/12应该写成5.0/12或5/12.0 5)三角函数的自变量使用弧度。如SIN50 应写成sin(50*3.14/180),40,例(参

22、照P384附录F):(1)3x2+4xysin56o-|x-y|e2.3 的表达式为:3*x*x+4*x*y*sin(56*3.14/180)-fabs(x-y)*exp(2.3)(2)log10(x+1)表示为log10(x+1),41,3.1.6 运算符和表达式,5、赋值运算符和赋值表达式 赋值运算符:符号:=格式:变量名=表达式 作用:将表达式的值赋给变量。(常量、变量是表达式的特例)如:a=5;x=(a+b)/3;类型转换:当“=”左右类型不一致,但都是数值型或字符型时,在赋值时由系统自动进行类型转换,赋值号右边的数值类型转换成左边变量的数值类型。,42,#include int ma

23、in()int i;float f;i=5.34;f=23;printf(“%d,%fn”,i,f);return 0;,5,23.000000,程序运行结果:,5、赋值运算符和赋值表达式,类型转换:(1)将实型数据赋给整型变量时,取整,舍弃小数部分。(2)将整型数据赋给实型变量时,数值不变,但以浮点数形式存储到变量中。(小数点后6位小数),43,#include int main()float f;double d=123.456789e100;f=d;printf(“%f”,f);return 0;,Floating point error:overflow.,程序运行结果:,5、赋值运算

24、符和赋值表达式,类型转换:(3)将一个double型数据赋给float变量时,截取前面67位有效数字,存放在float变量的存储单元(4个字节)中。注意数值范围不能溢出。将一个float型数据赋给double变量时,数值不变,有效位数扩展到15位,在内存以8个字节存储。,44,5、赋值运算符和赋值表达式,类型转换:(4)将字符型数据赋给整型变量时,有两种处理情况:,若所用系统把字符处理为无符号量(即unsigned char),则将高24位补0。例:char c=376;int i;i=c;i以整型输出为254,1 1 1 1 1 1 1 0,0 0 0 0 0 0 0 0 0 0 0 0 0

25、 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0,45,5、赋值运算符和赋值表达式,类型转换:(4)将字符型数据赋给整型变量时,有两种处理情况:,若所用系统把字符处理为带符号量(即signed char),若字符最高位为0,则将高24位补0;若字符最高位为1,则将高24位补1。例:char c=376;int i;i=c;i以整型输出为-2,1 1 1 1 1 1 1 0,1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0,46,#include int main()int i=289;ch

26、ar c=a;c=i;printf(“%c”,c);return 0;,5、赋值运算符和赋值表达式,类型转换:(5)将一个占字节多的整型数据赋给一个占字节少的整型变量或字符变量(例如把占4个字节的int型数据赋给占2个字节的short变量或占1个字节的char变量)时,只将其低字节原封不动地送给被赋值的变量(即发生“截断”)。,!,程序运行结果:,47,#include int main()int a=32767;short b;b=a+1;printf(%dn%d,a,b);return 0;,32767-32768,分析,48,分析:,转换成二进制(32767)10=(0111111111

27、111111)2 int型占4个字节,32位,有符号型 a:0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 b=a+1:1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 第1位为符号位,0为正数,1为负数 溢出的部分看是谁的补码,就等于谁。b=-32768,49,注意:(1)短类型值赋给长类型变量,则按照自动转换原则,数据一般不发生值的改变。(2)长类型值赋给短类型变量:int型变量=float型值,则只取其整数部分。float变量=double型值,则取前7位有效数字。char变量=int型值,则取低8位二进制数据。,50,3.1.6 运算符和表达式,复合的赋值

28、运算符 在赋值符“”之前加上其他运算符,可以构成复合的运算符。如:+=加赋值;-=减赋值;*=乘赋值;/=除赋值;%=取余赋值,将左边变量名照写,然后左边变量再与右边表达式进行计算,最后将计算结果赋给左边变量。作用:少写一个变量,占内存少,简化程序,提高编译效率。,51,由赋值运算符将一个变量和一个表达式连接起来的式子。格式:变量 赋值运算符 表达式注意:结合方向为“自右向左”左侧必须是变量,不能是常量或表达式,例 3=x-2*y;a+b=3;,赋值运算符右侧的表达式可以是另一个赋值表达式,例:a=b=c=5 a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2

29、),/表达式值为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=12;a+=a-=a*a,/a=-264 等价于a=a+(a=a-(a*a),赋值表达式,52,赋值表达式的末尾没有分号,而赋值语句有分号一个表达式可以包含赋值表达式,但决不能包含赋值语句,赋值表达式和赋值语句,如:if(a=b;)0)t=a;,非法,如:if(a=b)0)t=a;,表达式,语句,53,程序中常需要对一些变量预先设置初值。(1)先定义变量,后赋值 例:

30、int a,b;a=123;b=456;(2)定义变量,只对部分变量赋初值 例:int a,b,c=3;(3)定义变量赋初值同步 例:int a=3;float b=1.23;注意:若对几个变量赋同一初值,不能写成int a=b=c=3;而应写成 int a=3,b=3,c=3;或写成 int a,b,c;a=b=c=3;,变量赋初值,程序中常需要对一些变量预先设置初值。(1)先定义变量,后赋值 例:int a,b;a=123;b=456;(2)定义变量,只对部分变量赋初值 例:int a,b,c=3;(3)定义变量赋初值同步 例:int a=3;float b=1.23;注意:若对几个变量赋

31、同一初值,不能写成int a=b=c=3;而应写成 int a=3,b=3,c=3;或写成 int a,b,c;a=b=c=3;,变量赋初值,54,用逗号运算符(又称为“顺序求值运算符”)把两个或多个表达式连接起来形式:表达式1,表达式2,表达式n优先级和结合性:在所有的运算符中级别最低,左结合。计算过程:(结合方法,从左向右)1求解表达1;2求解表达式2,表达式n 3整个逗号表达式的值是表达式n的值逗号表达式常用于for语句中,举例,6、逗号运算符和逗号表达式,55,例1,a=3a=(3*5,a*4),?a,a=12,例2,a=3a=3*5,a*4,?a,a=15表达式的值为60,例3,(a

32、=3*5,a*4),a+5,?a,a=15表达式的值为20,56,例:#include int main()int x,y=7;float z=4;x=(y=y+6,y/z);printf(x=%dn,x);return 0;,运行结果:x=3,6、逗号运算符和逗号表达式,57,注意:并不是任何语句出现的逗号都是逗号运算符pritnf(“%d,%d,%d”,a,b,c);这里的逗号是分隔符,分隔输出项的。printf(“%dn”,a=4*2,3*3);结果为:8(从右至左计算,从左至右赋值,只有一个格式说明符时,将第一个参数的值赋给它)printf(“%dn”,(a=4*2,3*3);结果为:

33、9(加小括号,成为逗号表达式),6、逗号运算符和逗号表达式,58,3.2 C语句,(1)用来对数据进行加工(完成操作任务),是构成程序的基本单位;(2)一个C程序可以由若干源程序文件(编译时以文件模块为单位)组成,一个源文件可以由若干个函数(系统自带、用户编写)组成;(3)每一个函数由若干条语句(数据声明部分和执行语句)组成,每条语句总以“;”结束。,语句:,59,3.2 C语句,(1)控制语句:if、switch、for、while、dowhile、continue、break、return、goto等(2)函数调用语句:由函数调用表达式加一个分号构成。如:printf(“hellon”);

34、(3)表达式语句:由一个表达式加“;”构成一个语句。(4)空语句:只有分号“;”组成的语句。(5)复合语句:把多个语句用括号 括起来组成的一个语句。,语句分为以下5类:,60,3.2 C语句,在C程序中,最常用的语句是:赋值语句输入输出语句其中最基本的是赋值语句,61,计算机的输入输出是以计算机主机为主体而言。输入(input):从外部通过输入设备(如:键盘、磁盘、光盘、扫描仪等)向计算机输入数据。输出(output):从计算机向外部设备(如:显示屏、打印机、磁盘等)输出数据。,3.3 数据的输入输出,62,数据输入输出在语言中的实现 调用输入输出函数实现输入输出操作 语言本身不提供I/O语句

35、,I/O操作是通过调用语言库函数中输入输出函数来实现的。,如:putchar函数输出字符getchar函数输入字符printf函数 格式输出scanf函数 格式输入 puts 函数 输出字符串 gets 函数 输入字符串,3.3 数据的输入输出,63,在调用标准输入输出库函数时,文件开头应有预编译命令:#include 或#include“stdio.h”其中,stdio.h是“头文件”,包含了与用到的标准输入输出函数有关的信息。有的系统允许在使用printf和scanf两个函数时可不加“#include”命令。,3.3 数据的输入输出,64,作用:向终端(默认为显示器)输出若干个任意类型的数

36、据格式:printf(格式控制,输出表列)(1)格式控制:双引号括起来的字符串,包括三种信息:1)普通字符,按原样输出字符;2)格式说明符:说明要输出表列的类型,以%开头和格式字符组成,如%d,%f,%c等。3)转义字符:(如t、n、b、r等)(2)输出表列:要输出的内容(常量、变量、表达式等),输出多项时用“,”隔开,内容按前面规定的格式符从左至右输出。,3.3.1 printf 函数(格式输出函数),65,例2,#include int main()int a,b;a=3;b=4;printf(输出结果为:);printf(%d%dn,a,b);printf(a=%d,b=%dn,a,b)

37、;printf(a+b=%d,a+b);return 0;,输出结果为:3 4a=3,b=4a+b=7,例1,printf(sum=%d n%c,x,ch);,普通字符,格式说明,转义字符,如果x=100,ch=A,那么下面的输出语句将输出什么结果?,输出列表,sum=100A,66,格式字符 指定输出项的数据类型和输出的格式(%为引导符,后跟类型符)1.d格式符(用来输出一个有符号的十进制整数)(1)%d 按十进制整型数据的实际长度输出(2)%md m为指定的输出字段的宽度,若数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。例:int a=5,b=1234;printf(“a=

38、%4d,b=%2d”,a,b);输出结果为:a=5,b=1234,3.3.1 printf 函数(格式输出函数),67,格式字符 1.d格式符(用来输出一个有符号的十进制整数)(3)%ld 输出长整型数据,也可以对长整型数据指定字段宽度。如:long a=1234567;printf(“%ld,%8ld,%5ld”,a,a,a);输出结果:1234567,1234567,1234567(4)%lld 输出双长整型数据。,3.3.1 printf 函数(格式输出函数),68,2.c格式符(用来输出一个字符)如:char c=A;printf(“%c”,c);输出结果为A printf(“%3c”

39、,c);输出结果为A,格式字符,#include int main()char c=A;int i=65;printf(c=%c,%5c,%dn,c,c,c);printf(i=%d,%c,i,i);return 0;,c=A,A,65i=65,A,69,3.s格式符(用来输出一个字符串)(1)%s 按原长度输出字符串 如:printf(“%s”,CHINA);输出结果 CHINA(2)%ms 输出字符串占m列,若字符串长度大于m,则将字符串全部输出,若串长小于m,则左补空格。(3)%-ms 按左对齐,右补空格 如:printf(“%-10s”,“CHINA”);输出:CHINA(4)%m.n

40、s 输出占m个字符,但只取字符串中左端n个字符,输出按右对齐(5)%-m.ns m,n含义同上,输出按左对齐 如:printf(“%3s,%7.2s,%.3s,%-5.2sn”,“CHINA”,“CHINA”,“CHINA”,“CHINA”);输出:CHINA,CH,CHI,CH,格式字符,70,4.f格式符(用来输出实数,以小数形式输出)(1)%f 不指定字段宽度,由系统自动指定,使整数部分全部输出,小数部分输出6位。注意:并非全部都是有效数字,单精度实数有效位数一般为67位。双精度数也可用%f格式输出,有效位数一般为15位,给出小数6位。(2)%m.nf 指定输出共占m个字符,小数位占n位

41、,右对齐。(3)%-m.nf 指定输出共占m个字符,小数位占n位,左对齐。,格式字符,71,综合举例,float x,y;x=111111.111;y=222222.222;printf(%f,x+y);,333333.328125,整数部分全部输出,小数部分输出6位,因有效位数为7位,因此后面数字不准确。,float x=123.456;printf(%f,x);printf(%10f,x);printf(%10.2f,x);printf(%.2f,x);printf(%-10.2f,x);,123.456001123.456001123.46123.46123.46,格式输出举例f格式符,

42、72,5.e格式符(以指数形式输出实数)(1)%e 不指定输出数据所占的宽带和数字部分的小数位数 如:printf(“%e”,123.456);输出结果1.234560e+002 有的c编译系统自动指定给出6位小数,指数部分占5位,数值按规范化指数形式输出(即小数点前必须有而且只有1位非0数字)。但是在输入时,不必要用“+0”,只输入1.23456e2(2)%m.ne(右对齐)和%-m.ne(左对齐):m、n和“”字符含义与前相同。此处n指输出的数据的小数部分(又称尾数)的小数位数。,格式字符,73,float x=123.456;printf(%e,x);printf(%10e,x);pri

43、ntf(%10.2e,x);printf(%.2e,x);printf(%-10.2e,x);,综合举例,1.234560e+0021.234560e+002 1.23e+0021.23e+0021.23e+002,输出:1.234560e+002,指数部分,尾数部分,格式输出举例e格式符,2 6 5,总宽度为:13,74,以下几种输出格式字符不常用 1.o格式符(以8进制形式输出整数,不会出现负数格式)如:int a=123;b=-1;printf(“a=%o,b=%o”,a,b);输出结果a=173,b=37777777777 2.x格式符(以16进制形式输出整数,不会出现负数格式)如:i

44、nt a=123;b=-1;printf(“a=%x,b=%x”,a,b);输出结果a=7b,b=ffffffff,格式字符,75,3.u格式符(用来输出unsigned型数据,即无符号数,以十进制整数形式输出)int型可用%u输出,而unsigned型也可用%d输出。按相互赋值的规则处理。4.g格式符(用来输出实数)它根据数值的大小,输出自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的0。例:f=123.468;printf(“%f,%e,%g”,f,f,f);输出结果:123.468000,1.234680e+002,123.468,格式字符,76,格式说明必须以开始,

45、以格式字符结束。一般形式如下:%标志 宽度.精度 l 格式字符,-,-,n,m,d/f/c/u/s等,长整型整数,输出数据向左靠拢,输出数据最小宽度,对实数:输出小数点位数;对字符串:截取字符的个数,格式说明的一般形式,77,使用printf函数的几点注意事项:(1)除了X、E、G外,其他格式字符必须使用小写字母,如%d不能写成%D。(2)可在格式控制串中用“转义字符”,如n,b,f,371等。如:printf(“D:cps.wps”)输出结果:D:cps.wps(3)若要输出字符“%”,则应该在“格式控制”字符串中用连续两个%表示。如:printf(“%f%”,1.0/3);输出结果为:0.

46、333333%,3.3.1 printf 函数(格式输出函数),78,格式:scanf(“格式控制符”,变量地址表列)作用:按格式控制符的要求将数据从终端传送到变量地址所指定的内存空间。(就是给变量赋值)变量地址:通过对变量名“求地址”运算得到的格式:&变量名 如:scanf(“%d”,&a);,3.3.2 scanf 函数(格式输入函数),79,#include“stdio.h”int main()int a;float b;scanf(“%d%f”,说明:1)定义a,b两个变量的类型就是分配内存空间2)&a、&b中的&是地址运算符,分别获得这两个变量的内存首地址。3)将键盘输入的数据送入到

47、变量所对应的空间中,输入:12 34 结果:12,34.000000,3.3.2 scanf 函数(格式输入函数),80,格式说明(P76 表3.8,3.9)与printf函数中的格式说明相似,以%开头,以一个格式字符(可用到的格式字符有d,u,o,x,c,s,f,e等)结束,中间可以插入附加的字符(如:l,h,*等)。,说明:1)可以指定输入数据所占列数,系统自动按它截取所需数据。如:scanf(“%2d%3f%2f”,输入:1234567 结果:a=12,b=345,c=672)*表示本输入项在读入后不赋给相应的变量 例:scanf(“%2d%*3d%2d”,&a,&b);输入124578

48、9 则有12=a,,89=b3)输入数据时不能规定精度 如:scanf(“%7.2f”,&a);不合法,3.3.2 scanf 函数(格式输入函数),81,使用scanf时的注意事项:(1)scanf函数中“格式控制串”后应为变量地址,而不能是变量名。(2)若“格式控制串”中除了格式说明外还有其他字符,在输入数据时对应位置应输入与这些字符相同的字符。,如:scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);输入应为:a=12,b=24,c=36,3.3.2 scanf 函数(格式输入函数),82,int a,b;scanf(%d%d,343,4,int a,b;scanf(%d,

49、%d,3,43,4,格式输入举例d格式符,注意,举例,当输入多个数据时,若各个格式说明之间没有其他字符,则系统默认使用空格键、回车键和Tab键进行间隔;若格式说明之间有其他字符,则必须照原样输入。,343,4,83,float a;scanf(%f,输入:3.2,float a;scanf(%3.2f,格式输入举例f格式符,注意,举例,当输入实型数据时,不能规定精度。如果指定了精度,编译时不会报错,但输入的数据将不可预知。,3.200000,输出:,输入:3.218,-107374176.000000,输出:,84,使用scanf时的注意事项:(3)用“%c”格式输入字符时,空格字符和“转义字

50、符”都作为有效字符输入。如:scanf(“%c%c%c”,&c1,&c2,&c3);如果输入:abc 则系统将a=c1,=c2,b=c3(4)输入数据时,遇下列情况时认为该数据结束:遇空格,或按“回车”或“跳格(Tab)键”。按指定的宽度结束。如:“%3d”,只取3列 遇非法输入。,3.3.2 scanf 函数(格式输入函数),85,1、putchar 函数(字符输出函数)格式:putchar(c)说明:其中c为参数,可以是字符型或整型的常量、变量或表达式。作用:向终端(默认为显示器)输出一个字符(将c的值输出到显示器上)。在使用I/O函数时,要用#include“stdio.h”文件包含。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号