C语言教程同步课件3-4讲(第三章)_第1页
C语言教程同步课件3-4讲(第三章)_第2页
C语言教程同步课件3-4讲(第三章)_第3页
C语言教程同步课件3-4讲(第三章)_第4页
C语言教程同步课件3-4讲(第三章)_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三讲 基本数据类型第三讲 基本数据类型第三讲 基本数据类型引例变量与常量预备知识内储存器的组织数据类型基本数据类型整数类型字符浮点类型C语言程序设计2第三讲 基本数据类型引例C语言程序设计2引例引例问题计算任意一个圆的面积。源程序(cw02-01.c)基本数据类型#include void main() float r, area; /定义变量 scanf(“%f”,&r); /读取输入的半径 area = 3.14*r*r; /计算圆的面积 printf(“area=%f”,area); /输出1area=3.140000areararea = r23引例引例基本数据类型#include

2、1a变量与常量数据(Data)程序需要使用数据。数据是信息的载体。数据有多种形式:数、字符、图片等。常量(Constants)在程序运行之前可以预先设定,并在整个运行过程中没有变化的数据。例如引例中的圆周率3.14。变量(Variables)在程序运行过程中可能变化或被赋值的数据。例如引例中的半径和面积。基本数据类型4变量与常量数据(Data)基本数据类型4数据类型数据类型的作用决定数据的存储方式和占用的存储空间的大小。决定可以进行的操作。C语言的数据类型基本类型整型(integer),字符型(character),浮点型(floating-point),构造类型结构体(structure),

3、共用体(union),数组(array),枚举类型(enumeration)指针类型(pointer)空类型(void)基本数据类型5数据类型数据类型的作用基本数据类型5位、字节和字内存储器的组织基本数据类型位(bit):最小的存储单位,可以容纳两个值之一,即0或1。200020012002字节(Byte):基本的存储单位,8位。字(word):自然的存储单位,包含若干个字节。例如32位机的一个字就是32位。地址:以字节为单位从0开始编号。6位、字节和字内存储器的组织基本数据类型位(bit):最小的存整数的存储方式有符号的正整数在内存中以二进制补码形式存放。正整数的补码与原码相同。例如:10基

4、本数据类型符号位0 0 0 0 0 0 0 00 0 0 0 1 0 1 00000000000001010RAM数轴0215-1=32767可表示的数的范围-215=-327687整数的存储方式有符号的正整数基本数据类型符号位0 0 0 0整数的存储方式有符号的负整数在内存中以二进制补码的形式存放。例如:-10基本数据类型符号位1 1 1 1 1 1 1 11 1 1 1 0 1 1 01111111111110110RAM-10的原码1 0 0 0 0 0 0 00 0 0 0 1 0 1 01 1 1 1 1 1 1 11 1 1 1 0 1 0 11 1 1 1 1 1 1 11 1

5、1 1 0 1 1 0按位取反加一后得到 -10的补码符号位不变8整数的存储方式有符号的负整数基本数据类型符号位1 1 1 1整数的存储方式无符号整数所有二进制位都存放数值。例如:65535基本数据类型1 1 1 1 1 1 1 11 1 1 1 1 1 1 11111111111111111RAM0216-1=65535可表示的数的范围9整数的存储方式无符号整数基本数据类型1 1 1 1 1 1 整数的类型C语言提供多种整数类型 见例 3-3为程序员提供了针对不同用途的多种选择。基本数据类型类型名称类型说明符字节数数值范围基本整型int4-2147483648 2147483647短整型sh

6、ort int (short)2-3276832767长整型long int (long)4-2147483648 2147483647无符号基本整型unsigned (int)404294967295无符号短整型unsigned short (int)2065535无符号长整型unsigned long (int)404294967295C标准只规定:short int long最大最小值参考仅供参考,实际值与所使用的操作系统、编译系统、机器有关。10整数的类型C语言提供多种整数类型 见例 3-3基本数据类型类整型常量整型常量有三种形式:见例 3-2十进制(decimal)整数12 65 6

7、5535八进制(octal)整数:带前缀 0(zero)014 0101 0177777十六进制(hexadecimal)整数:带前缀 0 x 或 0X0 xc 0 x41 0 xffff默认类型是int,即有符号的基本整型。可以加上后缀 u 或 U 表示无符号整数,或者 l 或 L 表示长整数。0 xb5Lu基本数据类型11整型常量整型常量有三种形式:见例 3-2基本数据类型11RAM整型变量声明变量(Declaration)变量在使用之前必须被声明。声明语句的格式:举例基本数据类型 ,.;int counter;int width, height;short x, y;long numbe

8、r;变量声明创建了变量:为变量分配了存储空间。height12RAM整型变量声明变量(Declaration)基本数据类型整型变量初始化(Initialize)变量为变量赋一个初始值。可以在声明语句中初始化变量。举例变量获得值的方法直接赋值输入初始化基本数据类型int counter = 0;int width = 352, height = 288;初始化式RAM288height13整型变量初始化(Initialize)变量基本数据类型int整型变量输出变量的值可以使用printf()函数。与int类型对应的格式说明符是%d。举例(cw02-02a.c)基本数据类型#include voi

9、d main() int a, b; a=32767; b=-32768; printf(a=%d,b=%dn, a, b);a=32767,b=-3276814整型变量输出变量的值基本数据类型#include stdi整数的溢出溢出整数太大,超出了整数类型的数值范围。使用printf() 时与unsigned int类型对应的格式说明符是%u。举例(cw02-02b.c)见例 3-4-1/2基本数据类型#include void main() int a, b; unsigned c, d; a = 2147483647; b = a+1; c = 4294967295; d = c+1;

10、printf(a=%d,b=%dn, a, b); printf(c=%u,d=%u, c, d);a=2147483647,b=-2147483648c=4294967295,d=0?15整数的溢出溢出基本数据类型#include stdio.h整数的溢出溢出结果分析结论a+1 的结果(2147483648) 超出了基本整型变量 b 所能容纳(表示)的数值范围(-21474836482147483647)。请分析d的结果。基本数据类型0 1 1 1 1 1 1 1.1 1 1 1 1 1 11 0 0 0 0 0 0 0.0 0 0 0 0 0 0a(2147483647)1 0 0 0 0

11、 0 0 0.0 0 0 0 0 0 0a+1(2147483648)b(-2147483648)12加正数减正数16整数的溢出溢出基本数据类型0 1 1 1 1 1 1 1.字符的存储方式字符编码计算机使用一种数字编码(整数)来表示字符,每一个字符都对应一个特定的整数。常用的编码是ASCII(美国信息交换用标准码)。7位二进制数,十进制码值范围从0到127。一般用一个字节保存,最高位为0。字符的存储方式与整数相同举例字母A的ASCII码值为65,那么在内存中以65的二进制形式存储,且占一个字节。基本数据类型0100000101000001RAM17字符的存储方式字符编码基本数据类型01000

12、00101000字符的类型和字符变量C语言的字符类型:char占一个字节;可视为一个有符号的整数。举例(cw02-03.c)见例 3-7,3-8基本数据类型#include void main() char c1, c2; /声明字符变量 c1 = 97; /把一个整数赋值给字符变量 c2 = c1-32; /字符变量可以进行算术运算 printf(c1=%c,c2=%cn, c1, c2); printf(c1=%d,c2=%dn, c1, c2);c1=a,c2=Ac1=97,c2=6518字符的类型和字符变量C语言的字符类型:char基本数据类型#字符常量字符常量用单引号括起来的一个字符

13、。x 9 +C语言将字符常量视为int类型。举例(cw02-04.c)如果int类型为16位,char类型为8位,那么对于bc,将把b和c的ASCII码值存储在两个字节中,并把c赋值给变量c2。注意:不同系统处理方式不同,结果不同。(如在Turbo C中,单引号中的字符只能是一个字符,则ch=ab是错误的。基本数据类型char c1, c2;c1=a;c2=bc;0 1 1 0 0 0 0 1c10 1 1 0 0 0 1 1c20 1 1 0 0 0 1 10 1 1 0 0 0 1 0bcLH9799999819字符常量字符常量基本数据类型char c1, c2;0 1 字符常量转义字符(

14、escape character)指代一些特殊的字符。(打印不出来的字符)举例(cw02-05.c)见例 3-6-1/2/3基本数据类型a 警报 反斜杠()b 退格? 问号(?)f 走纸 单引号()n 换行“ 双引号(”)r 回车ddd 1-3位八进制数所代表的字符t 水平制表符xhh 1-2位十六进制数所代表的字符v 垂直制表符#include void main() printf(atbncbd100 x40n);abd20字符常量转义字符(escape character)基本数据浮点数的存储方式浮点数浮点型数据在内存中按指数形式存放。例如:314.15 = 3.1415102基本数据类

15、型0 (3.14159)10 0 (2)10 数符 尾数部分 阶符 阶码 + 3.14159 10+2由此可见,尾数部分的宽度决定了有效数字的个数(即精度),阶码部分的宽度决定了数值范围。RAM科学计数法允许使用少量的数字表示很大范围的数和很小的数。21浮点数的存储方式浮点数基本数据类型0 (3.14浮点数的类型浮点数也有多种类型类型名称及典型大小基本数据类型类型名称类型说明符字节数有效数字数值范围单精度float467(s)10-371038双精度double81516(s)10-30710308长双精度long double101819(s)10-4931104932S = 1参考仅供参考

16、,实际值与所使用的操作系统、编译系统、机器有关。数轴0可表示的正数可表示的负数22浮点数的类型浮点数也有多种类型基本数据类型类型名称类型说明符浮点型常量浮点型常量有两种形式:十进制形式12.3 .65 0.指数形式:N.ME n(由整数部分、小数点、小数部分、字母E(或e)和整数阶码(指数)组成。1.2e-2 .1E5 7E01.210-20.11057.0100注:字母E或e前面必须有数字,即整数部分和小数部分不能同时省略,字母E或e后面的阶码必须为整数,正负号中的正号可以省略。默认类型是double。可以加上后缀 f 或 F 表示float类型,或者 l 或 L 表示long double

17、类型,否则该常量是double类型。2.3f 1.2L .1E5f基本数据类型注:实数的小数形式必须有小数点的存在。23浮点型常量浮点型常量有两种形式:基本数据类型注:实数的小数形浮点型变量浮点型变量的声明和初始化举例基本数据类型float radius;double x = 0.0, y = 0.0;不能写成:double x = y =0.0;24浮点型变量浮点型变量的声明和初始化基本数据类型float r浮点型变量浮点数的输出使用printf()函数float和double对应的格式说明符为%f。举例(cw02-06.c)见例 3-5基本数据类型#include void main()

18、float f; double d; f=33333.33333f; d=33333.3333333333; printf(f=%fnd=%f, f, d);f=33333.332031d=33333.333333有效数字位数是有限的,在可表示的有效位之外的数字被舍去。因此可能会产生误差。25浮点型变量浮点数的输出基本数据类型#include std浮点数的舍入误差浮点数的舍入误差举例(cw02-07.c)基本数据类型#include void main() float a, b; a=123456.789e5; b=a+20; printf(a=%fnb=%f, a, b);a=123456

19、78848.000000b=12345678848.000000?26浮点数的舍入误差浮点数的舍入误差基本数据类型#include浮点数的舍入误差浮点数的舍入误差结果分析基本数据类型a=123456.789e5;b=a+20;a+20的理论值应该是:12345678920但是,一个实型变量能够保证的有效数字是7位,后面的数字将被舍去,是没有意义的。因此,最后得到b=12345678848.000000应当避免一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”较小的数。27浮点数的舍入误差浮点数的舍入误差基本数据类型a=123456浮点数的溢出上溢举例(cw02-08.c)若某系统中的最

20、大float值为3.4e38,进行如下操作得到结果下溢举例:假设-10是最小的指数,能够保留四位有效数字如果把数0.1234e-10除以10,将得到结果0.0123e-10,但损失了一位有效数字。基本数据类型float toobig = 3.4e38 * 100.0f;printf(“toobig=%f, toobig);inf无穷大(infinity)28浮点数的溢出上溢基本数据类型float toobig = 3小结C语言有多种数据类型。基本的数据类型包括两大类:整数类型浮点类型开发程序时,应当注意所需变量及其类型的选择。一般使用int和float表示数,用char表示字符。在使用变量的函

21、数的可执行语句之前声明该变量,并为它选择有意义的名字。初始化变量使用的常量应当与变量的类型相匹配。基本数据类型29小结C语言有多种数据类型。基本数据类型29第四讲 输入输出和库函数第四讲 输入输出和库函数第四讲 输入输出和库函数引例字符串常量符号常量格式化输入输出字符输入输出库函数C语言程序设计31第四讲 输入输出和库函数引例C语言程序设计31引例引例问题:计算任意一个球体的体积。源程序(cw03-01.c)见例 3-1输入输出和库函数#include #include #define PI 3.14159 /定义符号常量void main() double r, volume; printf

22、(Please input the radius of a ball: ); scanf(%lf, &r); volume = 4.0/3.0*PI*pow(r, 3.0); /使用数学函数 printf(“Volume = %.5fn”, volume); /按格式输出Please input the radius of a ball: 1Volume = 4.18879volume = 4/3r332引例引例输入输出和库函数#include 字符串常量字符串常量用双引号括起来的字符序列。this is a string x 12345字符串常量的存储方式字符串中的字符存放在相邻的存储单元中

23、,每个字符占用一个单元,在最后加上一个空字符(0)作为结束标识符。举例输入输出和库函数thisisastring0每个字符占一个字节结束标记33字符串常量字符串常量输入输出和库函数thisisastrin字符串常量字符串常量和字符常量的区别字符x是基本型数据。字符串”x”是构造型数据。占用的存储空间大小不同。输入输出和库函数xx在内存中占一个字节“x”x在内存中占两个字节034字符串常量字符串常量和字符常量的区别输入输出和库函数xx符号常量符号常量符号常量是用一个标识符表示的常量。定义规则#define 举例输入输出和库函数#define MAXSIZE 20#define WELCOME W

24、elcome to you!#define PI 3.14编译预处理器将会用3.14替换以后出现的PI标识符。35符号常量符号常量输入输出和库函数#define MAXSIZ符号常量为什么需要符号常量名字比数字包含的信息多。便于维护如果需要在多个地方用到同一个常量,而且必须改变它的值,则只需要修改其符号常量的定义。另一种定义符号常量的方法使用const把一个变量声明转换成常量声明。举例输入输出和库函数const int MAX_NUMBER = 30;MAX_NUMBER是只读的。36符号常量为什么需要符号常量输入输出和库函数const int输入输出输入输出是以计算机主机为主体而言的。输出(

25、Output):从主机向外部输出设备输出数据。输入(Input):从外部通过输入设备向主机输入数据。输入输出和库函数主机键盘磁盘光盘扫描仪显示器打印机磁盘输入输出37输入输出输入输出是以计算机主机为主体而言的。输入输出和库函数输入输出流流(stream)按直线排列的字符序列每个序列包括0个或多个字符,并用换行符结尾ANSI C支持至少254个字符的序列所有的输入/输出都是用流来进行的。输入输出和库函数S!ci源目的38输入输出流流(stream)输入输出和库函数S!ci标准输入输出流开始执行程序时,3个流自动连接到程序上标准输入流(standard input)对应的源端设备:keyboard

26、标准输出流(standard output)对应的目的端设备:screen标准错误流(standard error)对应的目的端设备:screen操作系统允许这些流重定向到其它设备输入输出和库函数type myprog.c prn输出重定向符myprog data.txt输入重定向符39标准输入输出流开始执行程序时,3个流自动连接到程序上输入输出输入输出函数C语言中数据的输入、输出是由函数来实现的。字符输入函数:getchar()字符输出函数:putchar()格式输入函数:scanf()格式输出函数:printf()它们都属于标准输入输出库函数,其原型(prototype)都在stdio.h

27、头文件(header file)中。输入输出和库函数40输入输出函数C语言中数据的输入、输出是由函数来实现的。输入输字符输入输出putchar()函数getchar()函数使用说明程序中必须包含 stdio.h 头文件输入输出和库函数#include 41字符输入输出putchar()函数输入输出和库函数#incl字符输出putchar使用形式putchar(character);向标准输出流输出一个字符character使用说明character可以是以下数据:字符型数据整型数据转义字符输入输出和库函数42字符输出putchar输入输出和库函数42字符输出举例(cw0302.c)见例 3-1

28、2输入输出和库函数#include void main() char a; int b; a=B; b=79; putchar(a); putchar(n); putchar(b); putchar(n); putchar(Y);BOY43字符输出举例(cw0302.c)见例 3-12输入输出和库函字符输入getchar使用形式variable = getchar();从标准输入流读取一个字符。使用说明只接收单个字符,输入数字也按字符处理;输入多于一个字符时,只接收第一个字符。该字符可赋给字符变量、整型变量或作为表达式的一部分。输入输出和库函数44字符输入getchar输入输出和库函数44字符

29、输入举例(cw0303.c)见例 3-13输入输出和库函数#include void main() char c; c = getchar(); putchar(c);aaabca98912345字符输入举例(cw0303.c)见例 3-13输入输出和库函格式输入输出printf()函数scanf()函数使用说明程序中可以不明确指定包含 stdio.h 头文件输入输出和库函数#include 可以省略此命令46格式输入输出printf()函数输入输出和库函数#inclu格式输出printf使用形式printf(, );按格式控制字符串规定的格式,向指定的输出设备(一般为显示器)输出在输出列表中

30、各输出项的值。使用说明格式控制字符串由双引号括起来的字符串,用于指定输出格式输出列表需要输出的数据列表,彼此间用逗号分隔输出项可以是任意合法的表达式printf()函数也可以无输出表列,只有格式控制字符串。 例:printf(“this is a C program.n”);输入输出和库函数47格式输出printf输入输出和库函数47格式输出格式控制字符串用于指定输出格式,它包含两类字符:普通字符和格式说明符。1.普通字符包括可显示的字符和转义字符。在执行printf()函数时,包含在格式控制字符串中的普通字符按原样输出,一般起提示作用。2.格式说明符:是以%开头的一个或多个字符。在执行pri

31、ntf()函数时,包含在格式控制字符串的格式说明符用于控制输出项的输出格式。举例输入输出和库函数printf(“n=%5d,f=%5.2fn”, 3, 6.235)普通字符原样输出格式说明符(转换规则)% 修饰符 格式字符指定数据的输出格式n= 3,f= 6.2448格式输出格式控制字符串用于指定输出格式,它包含两类字符:普通格式输出格式字符输入输出和库函数格式字符功 能d, i以十进制有符号形式输出整数(正数不输出符号)o以八进制无符号形式输出整数(不输出前缀0)x, X以十六进制无符号形式输出整数(不输出前缀0 x)u以十进制无符号形式输出整数f以小数形式输出单、双精度实数e, E以指数形

32、式输出单、双精度实数(小数点前有且必须有一位非0数字,小数点占一位,尾数占6位,指数部分占5位,共13位)g, G选用%f和%e格式中输出宽度较短的一种,不输出无意义的零c以字符形式输出,输出一个字符s输出字符串49格式输出格式字符输入输出和库函数格式字符功 格式输出格式修饰符输入输出和库函数修饰符意 义l用于长整型和长双精度实型数据,可加在格式字符 d、o、x、u、f 前面。m(正整数)数据最小宽度。当m大于数据的实际宽度时,左补空格,右对齐;当m小于等于数据的实际宽度时,按数据的实际宽度输出。.n(正整数)对于实数,表示输出n位小数;对于字符串,表示截取的字符个数。输出的数字或字符在域内向

33、左靠,右边填空格。(左对齐)#当整数以八进制或十六进制形式输出时,输出前缀。可加在格式字符o、x前面。50格式输出格式修饰符输入输出和库函数修饰符意 格式输出格式说明符小结 见例格式说明符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

34、,%m.ns,要输出%就用%51格式输出格式说明符小结 见例格式说明符1.c/2.c./格式输出举例(cw0304.c)输入输出和库函数void main() int a=97,b=-1; float f=123.4; printf(“%d,%cn”,a,a); printf(“%d,%o,%x,%un”,b,b,b,b); printf(“%f,%e,%g”,f,f,f); 运行结果:1 1 1 1 1 1 1 11 1 1 1 1 1 1 197,a-1,37777777777,ffffffff,4294967295123.400002,1.234000e+002,123.452格式输出举

35、例(cw0304.c)输入输出和库函数void m格式输出举例(cw0305.c)输入输出和库函数void main() int a=1,b=2,c=3; printf(“%d,%d,%d,%dn”,a,b,c); printf(“%d,%d,%dn”,a,b,c,a+b+c);1,2,3,8981,2,3格式说明符和输出项在数量和类型上应该一一对应。53格式输出举例(cw0305.c)输入输出和库函数void m格式输入scanf使用形式scanf(, );按格式控制字符串规定的格式,从指定的输入设备读入数据,并存放到地址列表中的各地址项指定的变量中使用说明格式控制字符串由双引号括起来的字符

36、串,用于指定输入格式地址列表由若干个变量的地址组成输入输出和库函数54格式输入scanf输入输出和库函数54格式输入地址列表取地址运算符:&得到变量在内存中的地址。输入输出和库函数scanf(“%d,%d”, &a, &b)FF00FF02ab55格式输入地址列表输入输出和库函数scanf(“%d,%d”,格式输入格式字符输入输出和库函数格式字符功 能d, i以十进制形式输入有符号整数o以八进制形式输入无符号整数x, X以十六进制形式输入无符号整数u以十进制形式输入无符号整数f以小数形式或指数形式输入实数e, E, g, G同f,它们之间可以互换c输入单个字符s输入字符串56格式输入格式字符输

37、入输出和库函数格式字符功 格式输入格式修饰符输入输出和库函数修饰符意 义l用于输入长整型和双精度实型数据,可加在格式字符 d、o、x、u、f、e 前面。h用于输入短整型数据。m(正整数)域宽,指定输入数据所占的宽度。*表示本输入项读入后不赋给任何变量,即跳过该输入值。57格式输入格式修饰符输入输出和库函数修饰符意 格式输入例:scanf(“%d%*d%d”,&a,&b);若输入:123 ,则将1赋给变量a,2输入后没用赋给任何变量,被跳过,3赋给变量b,即a=1,b=3例:scanf(“%4d”,&i);若输入:123456789,则因为指定宽度为4,所以只把1234赋予变量i,其余部分部分被截去,即i=1234注:(1)scanf()函数中无精度控制例:scanf(“%5.2f”,&a);是无效的(2)在scanf()函数的地址列表中要求给出变量的地址,如果只给出变量名则会出现错误。例:scanf(“%d”,a);是非法的。格式输入例:scanf(“%d%*d%d”,&a,&b);格式输入(3)在输入多个数值数据时,如果“格式控制字符串”中没有非空格字符作输入数据之间的间隔,则可用空格符,Tab水平制表符或回车符作间隔;当碰到空格符,Tab水平制表符,回车符或非法数据(如对”%d”输入”135A”时,A为非法数据)时,认为输入结束。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论