【文档说明】C语言教程同步课件3-4讲(第三章).ppt,共(65)页,710.001 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44572.html
以下为本文档部分文字说明:
《C语言程序设计教程》编写组2007年1月第三讲基本数据类型2第三讲基本数据类型引例变量与常量预备知识内储存器的组织数据类型基本数据类型整数类型字符浮点类型C语言程序设计3引例引例问题计算任意一个圆的面积。源程序(
cw02-01.c)基本数据类型#include<stdio.h>voidmain(){floatr,area;//定义变量scanf(“%f”,&r);//读取输入的半径area=3.14*r*r;//计算圆的面积printf(“area=%f”
,area);//输出}1area=3.140000areararea=Лr24变量与常量数据(Data)程序需要使用数据。数据是信息的载体。数据有多种形式:数、字符、图片等。常量(Constants)在程序运行之前可以预先设定
,并在整个运行过程中没有变化的数据。例如引例中的圆周率3.14。变量(Variables)在程序运行过程中可能变化或被赋值的数据。例如引例中的半径和面积。基本数据类型5数据类型数据类型的作用决定数据的存储方式和占用
的存储空间的大小。决定可以进行的操作。C语言的数据类型基本类型整型(integer),字符型(character),浮点型(floating-point),构造类型结构体(structure),共用体(union),数组(array),枚举类型(enumeration)指针类型(pointer
)空类型(void)基本数据类型6位、字节和字内存储器的组织基本数据类型位(bit):最小的存储单位,可以容纳两个值之一,即0或1。200020012002字节(Byte):基本的存储单位,8位。字(word):自然的存储单位,包含若干个字节。例如32位机的一个字就是32位。地址:以字节为单位
从0开始编号。7整数的存储方式有符号的正整数在内存中以二进制补码形式存放。正整数的补码与原码相同。例如:10基本数据类型符号位00000000000010100000000000001010RAM数轴0215-1=32767可表示的数的范围-215
=-327688整数的存储方式有符号的负整数在内存中以二进制补码的形式存放。例如:-10基本数据类型符号位11111111111101101111111111110110RAM-10的原码1000000000001010
11111111111101011111111111110110按位取反加一后得到-10的补码符号位不变9整数的存储方式无符号整数所有二进制位都存放数值。例如:65535基本数据类型11111111111111111111111111111111RAM0216
-1=65535可表示的数的范围10整数的类型C语言提供多种整数类型见例3-3为程序员提供了针对不同用途的多种选择。基本数据类型类型名称类型说明符字节数数值范围基本整型int4-2147483648~214748364
7短整型shortint(short)2-32768~32767长整型longint(long)4-2147483648~2147483647无符号基本整型unsigned(int)40~4294967295无符号短整型unsignedshort(int)20~
65535无符号长整型unsignedlong(int)40~4294967295C标准只规定:short≤int≤long最大最小值参考<limits.h>仅供参考,实际值与所使用的操作系统、编译系统、机器有关。11整型常量整型常量有
三种形式:见例3-2十进制(decimal)整数126565535八进制(octal)整数:带前缀0(zero)01401010177777十六进制(hexadecimal)整数:带前缀0x或0X0xc0x410xf
fff默认类型是int,即有符号的基本整型。可以加上后缀u或U表示无符号整数,或者l或L表示长整数。0xb5Lu基本数据类型12RAM整型变量声明变量(Declaration)变量在使用之前必须被声明。声明语句的格式:举例基本数据类型<类型说明符><变量名>[,<变量名>[,...]];i
ntcounter;intwidth,height;shortx,y;longnumber;变量声明创建了变量:为变量分配了存储空间。height13整型变量初始化(Initialize)变量为变量赋一个初始值。可以在声明语句中初始化变量。举例变量
获得值的方法直接赋值输入初始化基本数据类型intcounter=0;intwidth=352,height=288;初始化式RAM288height14整型变量输出变量的值可以使用printf()函数。与int类型
对应的格式说明符是%d。举例(cw02-02a.c)基本数据类型#include<stdio.h>voidmain(){inta,b;a=32767;b=-32768;printf("a=%d,b=%d\n",a,b
);}a=32767,b=-3276815整数的溢出溢出整数太大,超出了整数类型的数值范围。使用printf()时与unsignedint类型对应的格式说明符是%u。举例(cw02-02b.c)见例3-4-1/2基本数据类型#include<stdio.h>voidmain()
{inta,b;unsignedc,d;a=2147483647;b=a+1;c=4294967295;d=c+1;printf("a=%d,b=%d\n",a,b);printf("c=%u,d=%u",c,d);}a=214
7483647,b=-2147483648c=4294967295,d=0???16整数的溢出溢出结果分析结论a+1的结果(2147483648)超出了基本整型变量b所能容纳(表示)的数值范围(-214
7483648~2147483647)。请分析d的结果。基本数据类型01111111...111111110000000...0000000a(2147483647)10000000...0000000a+1(2
147483648)b(-2147483648)12加正数减正数17字符的存储方式字符编码计算机使用一种数字编码(整数)来表示字符,每一个字符都对应一个特定的整数。常用的编码是ASCII(美国信息交换用标准码)。7位二进制数,十进制码
值范围从0到127。一般用一个字节保存,最高位为0。字符的存储方式与整数相同举例字母A的ASCII码值为65,那么在内存中以65的二进制形式存储,且占一个字节。基本数据类型0100000101000001RAM18字符的类型和字符变量C语言的字符类型:char占一个
字节;可视为一个有符号的整数。举例(cw02-03.c)见例3-7,3-8基本数据类型#include<stdio.h>voidmain(){charc1,c2;//声明字符变量c1=97;//把一个整数赋值给字符变量c2=c1-32;//字符变量可以进行算术
运算printf("c1=%c,c2=%c\n",c1,c2);printf("c1=%d,c2=%d\n",c1,c2);}c1=a,c2=Ac1=97,c2=6519字符常量字符常量用单引号括起来的一个字符。'x''9''+„C语言将字符常量视为int类型。举例(cw
02-04.c)如果int类型为16位,char类型为8位,那么对于’bc‟,将把’b‟和’c‟的ASCII码值存储在两个字节中,并把’c‟赋值给变量c2。注意:不同系统处理方式不同,结果不同。(如在TurboC中,单引号中的字符只能是一个字符,则ch=„ab
‟是错误的。基本数据类型charc1,c2;c1=„a‟;c2=„bc‟;01100001c101100011c20110001101100010„bc‟LH9799999820字符常量转义字符(escapecharacter)指代一些特殊的字符。(打印不出来的字符)举例(c
w02-05.c)见例3-6-1/2/3基本数据类型\a警报\\反斜杠(\)\b退格\?问号(?)\f走纸\„单引号(’)\n换行\“双引号(”)\r回车\ddd1-3位八进制数所代表的字符\t水平制表符\xhh1-2
位十六进制数所代表的字符\v垂直制表符#include<stdio.h>voidmain(){printf("a\tb\nc\bd\100\x40\n");}abd@@21浮点数的存储方式浮点数浮点
型数据在内存中按指数形式存放。例如:314.15=3.1415×102基本数据类型0(3.14159)100(2)10数符尾数部分阶符阶码+3.14159×10+2由此可见,尾数部分的宽度决定了有效数字的个数(即精度),阶码部分的宽度决定了数值范围。RAM科学计数法
允许使用少量的数字表示很大范围的数和很小的数。22浮点数的类型浮点数也有多种类型类型名称及典型大小基本数据类型类型名称类型说明符字节数有效数字数值范围单精度float46~7(s)10-37~1038双精度dou
ble815~16(s)10-307~10308长双精度longdouble1018~19(s)10-4931~104932S=±1参考<float.h>仅供参考,实际值与所使用的操作系统、编译系统、机器有关。数轴0可表示的正数可表示的负数23浮点型常量浮点型常量有两种形式:十
进制形式12.3.650.指数形式:+N.ME+n(由整数部分、小数点、小数部分、字母E(或e)和整数阶码(指数)组成。1.2e-2.1E57E01.2×10-20.1×1057.0×100注:字母E或e前面必须有数字,即整数部分和小数部分不能同
时省略,字母E或e后面的阶码必须为整数,正负号中的正号可以省略。默认类型是double。可以加上后缀f或F表示float类型,或者l或L表示longdouble类型,否则该常量是double类型。2.3f1.2L.1E5f基本数据类型注:实数的小数形
式必须有小数点的存在。24浮点型变量浮点型变量的声明和初始化举例基本数据类型floatradius;doublex=0.0,y=0.0;不能写成:doublex=y=0.0;25浮点型变量浮点数的输出使用printf()函数float和double对应的格式说明符为%f。举例(cw02-
06.c)见例3-5基本数据类型#include<stdio.h>voidmain(){floatf;doubled;f=33333.33333f;d=33333.3333333333;printf("f=%f\nd=%f",f,d);}f=33333.332031d
=33333.333333有效数字位数是有限的,在可表示的有效位之外的数字被舍去。因此可能会产生误差。26浮点数的舍入误差浮点数的舍入误差举例(cw02-07.c)基本数据类型#include<stdio.h>vo
idmain(){floata,b;a=123456.789e5;b=a+20;printf("a=%f\nb=%f",a,b);}a=12345678848.000000b=12345678848.000000???27浮点数的舍入误差浮点数的舍入误差结果分析基本数据类型a=123456
.789e5;b=a+20;a+20的理论值应该是:12345678920但是,一个实型变量能够保证的有效数字是7位,后面的数字将被舍去,是没有意义的。因此,最后得到b=12345678848.000000应当避免一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”较小的数
。28浮点数的溢出上溢举例(cw02-08.c)若某系统中的最大float值为3.4e38,进行如下操作得到结果下溢举例:假设-10是最小的指数,能够保留四位有效数字如果把数0.1234e-10除以10,将得到结果0.0123e-10,但损失了一位有效数字。基本数据类型floatto
obig=3.4e38*100.0f;printf(“toobig=%f",toobig);…inf…无穷大(infinity)29小结C语言有多种数据类型。基本的数据类型包括两大类:整数类型浮点类型开发程序时,应当注意所需变量及其类型的选
择。一般使用int和float表示数,用char表示字符。在使用变量的函数的可执行语句之前声明该变量,并为它选择有意义的名字。初始化变量使用的常量应当与变量的类型相匹配。基本数据类型《C语言程序设计教程》编写组2007年1月第四讲输入
输出和库函数31第四讲输入输出和库函数引例字符串常量符号常量格式化输入输出字符输入输出库函数C语言程序设计32引例引例问题:计算任意一个球体的体积。源程序(cw03-01.c)见例3-1输入输出和库函数#include<stdio.h>#include<math
.h>#definePI3.14159//定义符号常量voidmain(){doubler,volume;printf("Pleaseinputtheradiusofaball:");scanf("%lf",&r);volume
=4.0/3.0*PI*pow(r,3.0);//使用数学函数printf(“Volume=%.5f\n”,volume);//按格式输出}Pleaseinputtheradiusofaball:1Volume=4.18879volume=4/3Лr333字符串常量字符串常量用双引号
括起来的字符序列。"thisisastring""x""12345"字符串常量的存储方式字符串中的字符存放在相邻的存储单元中,每个字符占用一个单元,在最后加上一个空字符(\0)作为结束标识符。举例输入输出和库函数thisisastring\0每个字符占一个字节结束标记34字符串常量字
符串常量和字符常量的区别字符‘x‟是基本型数据。字符串”x”是构造型数据。占用的存储空间大小不同。输入输出和库函数„x‟x在内存中占一个字节“x”x在内存中占两个字节\035符号常量符号常量符号常量是用一个标识符表示的常量。定义规则#define<符号常
量名><字符串>举例输入输出和库函数#defineMAXSIZE20#defineWELCOME"Welcometoyou!"#definePI3.14编译预处理器将会用3.14替换以后出现的PI标识符。36符号常量为什么需要符号常量名字比数字包含的信
息多。便于维护如果需要在多个地方用到同一个常量,而且必须改变它的值,则只需要修改其符号常量的定义。另一种定义符号常量的方法使用const把一个变量声明转换成常量声明。举例输入输出和库函数constintMAX_NUMBER=30;MAX_NUMBER是只读的。37输入
输出输入输出是以计算机主机为主体而言的。输出(Output):从主机向外部输出设备输出数据。输入(Input):从外部通过输入设备向主机输入数据。输入输出和库函数主机键盘磁盘光盘扫描仪……显示器打印机磁盘……输入输出38
输入输出流流(stream)按直线排列的字符序列每个序列包括0个或多个字符,并用换行符结尾ANSIC支持至少254个字符的序列所有的输入/输出都是用流来进行的。输入输出和库函数S@!ci‟[]源目的39标准输入输出流开始执行程序时,
3个流自动连接到程序上标准输入流(standardinput)对应的源端设备:keyboard标准输出流(standardoutput)对应的目的端设备:screen标准错误流(standarderror)对应的目的端设备:screen操作系统允许这些流重定向到其它设备输
入输出和库函数typemyprog.c>prn输出重定向符myprog<data.txt输入重定向符40输入输出函数C语言中数据的输入、输出是由函数来实现的。字符输入函数:getchar()字符输出函数:putchar()格式输入函数
:scanf()格式输出函数:printf()它们都属于标准输入输出库函数,其原型(prototype)都在stdio.h头文件(headerfile)中。输入输出和库函数41字符输入输出putchar()函数getchar()函数使用说明程序中必须包含stdio.
h头文件输入输出和库函数#include<stdio.h>42字符输出putchar使用形式putchar(character);向标准输出流输出一个字符character使用说明character可以是以下数据:字符型数据整型数据转义字符输入输出和库函数43字符输出举例(cw0
302.c)见例3-12输入输出和库函数#include<stdio.h>voidmain(){chara;intb;a=„B‟;b=79;putchar(a);putchar(„\n‟);putchar(b);putchar(„\n
‟);putchar(„Y‟);}BOY44字符输入getchar使用形式variable=getchar();从标准输入流读取一个字符。使用说明只接收单个字符,输入数字也按字符处理;输入多于一个字符时,只接收第一个字符。该字符可赋给字符
变量、整型变量或作为表达式的一部分。输入输出和库函数45字符输入举例(cw0303.c)见例3-13输入输出和库函数#include<stdio.h>voidmain(){charc;c=getchar();putchar(c);}aaabca98912346格式输入输出print
f()函数scanf()函数使用说明程序中可以不明确指定包含stdio.h头文件输入输出和库函数#include<stdio.h>可以省略此命令47格式输出printf使用形式printf(<格式控制字符串>,<输出列表>);按格式控制字符串规定的格式,向指定的输出设
备(一般为显示器)输出在输出列表中各输出项的值。使用说明格式控制字符串由双引号括起来的字符串,用于指定输出格式输出列表需要输出的数据列表,彼此间用逗号分隔输出项可以是任意合法的表达式printf()函数也可以无输出表列,只有格式控制字
符串。例:printf(“thisisaCprogram.\n”);输入输出和库函数48格式输出格式控制字符串用于指定输出格式,它包含两类字符:普通字符和格式说明符。1.普通字符包括可显示的字符和转义字符。在
执行printf()函数时,包含在格式控制字符串中的普通字符按原样输出,一般起提示作用。2.格式说明符:是以%开头的一个或多个字符。在执行printf()函数时,包含在格式控制字符串的格式说明符用于控制输出项的输出格式。举例输入输出和库函数printf(“n=%5d,f=%5.2f\n
”,3,6.235)普通字符原样输出格式说明符(转换规则)%[修饰符]格式字符指定数据的输出格式n=3,f=6.2449格式输出格式字符输入输出和库函数格式字符功能d,i以十进制有符号形式输出整数(正数不输出符号)o以八进制无符号形式输出整数(不输出前缀0)x,X以十六进制无符号形式
输出整数(不输出前缀0x)u以十进制无符号形式输出整数f以小数形式输出单、双精度实数e,E以指数形式输出单、双精度实数(小数点前有且必须有一位非0数字,小数点占一位,尾数占6位,指数部分占5位,共13位)g,G选用%f和%e格式中输出宽度较短的一种,不输出无意义的零c以字符形式输出,输
出一个字符s输出字符串50格式输出格式修饰符输入输出和库函数修饰符意义l用于长整型和长双精度实型数据,可加在格式字符d、o、x、u、f前面。m(正整数)数据最小宽度。当m大于数据的实际宽度时,左补空格,右对齐;当m小于等于数
据的实际宽度时,按数据的实际宽度输出。.n(正整数)对于实数,表示输出n位小数;对于字符串,表示截取的字符个数。-输出的数字或字符在域内向左靠,右边填空格。(左对齐)#当整数以八进制或十六进制形式输出时,输出
前缀。可加在格式字符o、x前面。51格式输出格式说明符小结见例格式说明符1.c/2.c.../6.c输入输出和库函数格式字符形式d,i%d,%md,%-md,%ld,%mld,%-mld,%i,……o%o,%mo,%-mo,%lo,%mlo,%-mlo,
%#o,……x,X%x,%mx,%-mx,%lx,%mlx,%-mlx,%#x,……u%u,%mu,%-mu,%lu,%mlu,%-mluf%f,%mf,%m.nf,%lf,……e,E%e,%me,%m.ne,……g,G%gc%cs%s,%ms,%m.ns,……要输出%就
用%%52格式输出举例(cw0304.c)输入输出和库函数voidmain(){inta=97,b=-1;floatf=123.4;printf(“%d,%c\n”,a,a);printf(“%d,%o,%x,%u\n”,b,b,b,b);printf(“%f,%e,%g”,f,f,f)
;}运行结果:111111111111111197,a-1,37777777777,ffffffff,4294967295123.400002,1.234000e+002,123.453格式输出举例(cw0305.c
)输入输出和库函数voidmain(){inta=1,b=2,c=3;printf(“%d,%d,%d,%d\n”,a,b,c);printf(“%d,%d,%d\n”,a,b,c,a+b+c);}1,2,3,8981,2,3格式说明符和输出项在数
量和类型上应该一一对应。54格式输入scanf使用形式scanf(<格式控制字符串>,<地址列表>);按格式控制字符串规定的格式,从指定的输入设备读入数据,并存放到地址列表中的各地址项指定的变量中使用说明格式控制字符串由双引号括起来的字符串,用于指定输入格式地址列表由
若干个变量的地址组成输入输出和库函数55格式输入地址列表取地址运算符:&&<变量>得到变量在内存中的地址。输入输出和库函数scanf(“%d,%d”,&a,&b)FF00FF02ab56格式输入格式字符输入输出和库函数格式字符功能d,i以十进制形
式输入有符号整数o以八进制形式输入无符号整数x,X以十六进制形式输入无符号整数u以十进制形式输入无符号整数f以小数形式或指数形式输入实数e,E,g,G同f,它们之间可以互换c输入单个字符s输入字符串57格式输
入格式修饰符输入输出和库函数修饰符意义l用于输入长整型和双精度实型数据,可加在格式字符d、o、x、u、f、e前面。h用于输入短整型数据。m(正整数)域宽,指定输入数据所占的宽度。*表示本输入项读入后不赋给任何变量,即跳过该输入值。格式输入例:scanf(“%d%*d%d”,&a,
&b);若输入:1┗┛2┗┛3↙,则将1赋给变量a,2输入后没用赋给任何变量,被跳过,3赋给变量b,即a=1,b=3例:scanf(“%4d”,&i);若输入:123456789↙,则因为指定宽度为4,所以只把1234赋予变量i,其余部分部分被截去,即i=1234注:(1)scan
f()函数中无精度控制例:scanf(“%5.2f”,&a);是无效的(2)在scanf()函数的地址列表中要求给出变量的地址,如果只给出变量名则会出现错误。例:scanf(“%d”,a);是非法的。格式输入(3)在输入多个数值数据时,如果“格
式控制字符串”中没有非空格字符作输入数据之间的间隔,则可用空格符,Tab水平制表符或回车符作间隔;当碰到空格符,Tab水平制表符,回车符或非法数据(如对”%d”输入”135A”时,A为非法数据)时,认为输入结束。见例3-11说明:当程序运行到scanf()函数调用语句时,则会等待用户输入数据。如在
格式字符“%d%d%d”之间没有间隔,可以使用一个或多个空格或者回车键作为每两个输入数之间的间隔。格式输入(4)在输入字符数据时,若格式控制串中无非空格字符,则认为所有输入的字符均为有效字符;若格式控制字符串中加入空格作为分
隔符,那么输入时各数据之间可以加任意多个空格、制表符或回车符)。例:scanf(“%c%c%c”,&a,&b,&c);若输入d┗┛┗┛┗┛e┗┛┗┛┗┛f↙,则把‘d’赋给变量a,变量b和变量c的值为空格。只有输入为:def时,才会把d赋给a,
e赋给b,f赋给c。例:scanf(“%c%c%c”,&a,&b,&c);输入:abc↙则a=a,b=b,c=c格式输入(5)如果格式控制串中有普通字符,则按原样输入。例:chara,b,c;scanf(“a=%c,b=%c,c=%c”,&a,&b,&c);则可输入为:a=L
,b=M,c=N↙62格式输入格式说明符小结输入输出和库函数格式字符形式d,i%d,%md,%ld,%mld,%i,……o%o,%mo,%lo,%mlox,X%x,%mx,%lx,%mlxu%u,%mu,%lu,%mluf%f,%mf,%lf,%mlfe,E,g,G%e,%me,%le
,%mle,%g,……c%cs%s,%ms63格式输入举例(cw0306.c)演示格式输入.c输入输出和库函数voidmain(){chara,b,c;scanf(“%c%c%c”,&a,&b,&c);printf(
“a=%c,b=%c,c=%c",a,b,c);}abca=a,b=b,c=cabca=a,b=,c=babca=a,b=,c=baba=a,b=,c=b1234用c格式字符输入字符时,若格式控制字符串中无普通字符,那么认为所有输入的字符(包括空格、制
表符、换行符)均为有效字符。64数学库函数使用标准库中的数学函数包含数学函数库的头文件#include<math.h>常用的数学函数的原型intabs(intn)整数x的绝对值doublefabs(doubl
ex)x的绝对值doublepow(doublex,doubley)xydoublesqrt(doublex)x平方根使用举例intn=abs(-21);doublev=pow(r,3.0);输入输出和库函数65小结C语言中的字符串常量
C语言中的符号常量C语言中常用的输入输出函数使用标准库中的数学函数输入输出和库函数