




已阅读5页,还剩53页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章 基本数据类型及输 入输出 2.1 C的数据类型 C语言的数据类型可分为: 基本数据类型,构造数据类型,指针类型,空类型四大 类,由这些数据类型可以构造出不同的数据结构。 1.基本数据类型 基本数据类型最主要的特点是,其值不可以再分解为其它 类型。也就是说,基本数据类型是自我说明的包括整型、字 符型、实型、枚举型。 2.构造数据类型 是根据已定义的一个或多个数据类型用构造的方法来定义 的。在C语言中,构造类型有以下几种: 数组类型 结构体类型 共用体类型 3.指针类型 指针是一种特殊的,同时又是具有重要作用的数据类型。 其值用来表示某个量在内存储器中的地址。虽然指针变量的 取值类似于整型量,但这是两个类型完全不同的量,因此不 能混为一谈。 4.空类型 在调用函数值时,通常应向调用者返回一个函数值。这个 返回的函数值是具有一定的数据类型的,应在函数定义及函 数说明中给以说明。但是,也有一类函数,调用后并不需要 向调用者返回函数值,这种函数可以定义为“空类型”,其类 型说明符为void。在第六章函数中详细介绍。 2.2标识符、常量和变量 2.2.1 标识符 C语言中的标识符可以分为下述3类。 1、关键字 关键字是用来说明C语言中某一固定含义的字。例如,int 是关键字,它用以说明变量是整型。ANSI C标准定义的关键 字有以下32个。 2、编译预处理的命令单词 主要有如下7个: define include undef ifdef ifndef endif line 3、一般标识符(用户标识符) 一般标识符通常是用户根据程序中的需要自己按照标识符 规则定义的标识符。即用户自己定义的变量名、常量名和函 数名等。 一般标识符由字母、数字和下划线组成,且第一个位置只 能取字母或下划线。 在C语言中构成自定义的标识符必须符合下列语法规则: (1) 标识符必须以字母(az或AZ)或下划线( _ )开头 。 (2) 在第一个字符之后,可以是字母、数字(09)和下 划线组成的字符序列,这个序列可以是空串。 (3) C语言中大小写字母是具有不同含义的,即代表不同 的标识符。 (4) 在不同的系统中标识符字符的有效位数不同。 (5) 标识符不能使用系统的保留字。 2.2.2常量和符号常量 1、常量 在程序运行过程中,其值不能被改变的量称为常量。它是 C语言中使用的基本数据对象之一。C语言提供的常量如图2- 2所示。如:10,0,-6为整型常量,2.6,-5.6为实型常 量,a,c为字符常量,”china”是字符串常量。 2、符号常量 用一个标识符代表一个常量,称为“符号常量”.定义的 格式为: #define 标识符 常量 其中,#define是宏定义命令的专用定义符;标识符是由 用户命名的符号常量名,一般大写;常量可以是数值常量或 字符常量。例如: #define PI 3.1415926 【例题2.1】已知圆半径radius,求圆的面积area。 /* file2_1.c */ #include #define PI 3.1415926 void main ( ) int radius; float area; radius=10; area=PI*radius*radius; printf(“area=%f“,area); 2.2.3变量 在程序执行过程中,其值可以改变的量称为变量。一个变 量用一个名字表示,在内存中占据一定的存储单元,用于存 放变量的值。在编写程序时有很多需要变化的量,这时就需 要使用变量。 1、变量名 变量名符合标识符的命名规则。例如: area,i,j,_score,x1,y1 都是合法的变量名,而 ?exam,#define,2math,x+y 都是非法的变量名。 2、变量的定义 在C语言中,要求对所有用到的变量作强制定义,也就是 变量必须“先定义后使用”。 变量定义的一般形式为: 数据类型 变量名1,变量名2,变量名3,变量名n; 例如: int number;/* 定义了一个整型变量number */ 3、变量的初始化 变量的初始化就是对变量预先设置初值。在程序中常常需要 对一些变量预先设置初值。变量赋初值的形式如下: (1)先定义变量,再给变量赋初值。如: int a,b,c; a=3;b=4;c=5; (2)C语言允许在定义变量的同时进行初始化。如: int number=100; (3)也可以被定义的变量的部分变量进行初始化。如: int num,stu=20,wid; (4)如果对几个变量赋予的初值相同,都为5,应写成: int a=5,b=5,c=5; 表示a、b、c的初值都是5。不能写成int a=b=c=5; (5)初始化不是在编译阶段完成的(只有在第6章中介绍的 静态存储变量和外部变量的初始化是在编译阶段完成的),而 是在程序运行时执行本函数时赋予初值的,相当于有一个赋 值语句。 【例题2.2】 变量的定义 /* file2_2.c */ #include void main ( ) int number=100; float weight=100.0,height; height=1.80; printf(“number=%d,weight=%f,height=%fn“,number, weight,height); printf(“number的地址是:%ldn“, 2.3整型数据 2.3.1整型常量的表示方法 整型常量即整常数,由一个或多个数字组成,可以带正负 号。C语言中 的,有八进制、十六进制和十进制三种。 (1)八进制整数。以0(零)开头的数表示八进制数。数码取值 为07。 如0134表示八进制数134,即(134)8,其值为: 182+381+480,等 于十进制数92。-021表示八进制数-21,即十进制数-17。 (2)十六进制整数。以0x或0X开头的数是十六进制数。其数码 取值为:09,AF或af。 如0x134,代表十六进制数134,即 (134)16=1162+3161+4160=308。 (3)十进制整数。没有前缀,其数码取值为:09。 如123,-500,0。 【例题2.3】 以十进制形式输出八进制整数和十六进制整数 /* file2_3.c */ #include void main ( ) printf(“n %d %d %d %d %d“,-021,0x134,0xADE,056,- 0x23); 2.3.2整型变量 1.整型数据在内存中的存放形式 虽然编写程序时可以使用十进制、八进制和十六进 制的数据,但是,所有数据在内存中都是以二进 制形式存放的。如果定义了一个整型变量num: int num=12; 则十进制数12的二进制形式为1100,在IBM PC系 列机上使用的C编译系统,每一个整型变量在内 存中占2个字节(16bit)。图2-4(a)是数据存放的示 意图,图2-4(b)是数据在内存中实际存放的情况 。 2.整型变量的分类 除了使用基本类型符为int定义整型变量之外,在int前 还可以加上各种修饰符,根据数值的范围将变量定义为以下 3类整型变量: (1)基本整型,用int定义。 (2)短整型,用short int定义或short定义。 (3)长整型,用long int定义或long定义。 其中,每一类又分为无符号(unsigned)和有符号(signed) 两种情况。一般定义变量时不加unsigned和signed,C语言 默认类型是signed。因此,有以下6类整型变量: (1)有符号基本整型 signed int (2)无符号基本整型 unsigned int (3)有符号短整型 signed short int (4)无符号短整型 unsigned short int (5)有符号长整型 signed long int (6)无符号长整型 unsigned long int 3.整型变量的定义 C规定在程序中所有用到的变量都必须在程序中定义,即 “强制类型定义”。例如: int num,score; unsigned short x,y; long i,j; 对变量的定义,一般是放在一个函数的开头部分的声明部 分(也可以放在函数中某一分程序内,但作用域只限它所在的 分程序,这将在第6章介绍)。 【例题2.4】交换两个变量的值。 /* file2_4.c */ #include void main ( ) int num1,num2,t;/*定义整型变量*/ num1=15;/*给变量赋值*/ num2=20; printf(“num1=%d,num2=%dn“,num1,num2 t=num1; /*交换过程*/ num1=num2; num2=t; printf(“num1=%d,num2=%dn“,num1,num2); /*输出交换后的值*/ 4.整型数据的溢出 在C语言中,如果一个变量的值超过了其类型所允许的最大 值则会出现溢出的现象。例如,一个short int型变量的最大 允许值为32767,如果再加1,会出现什么情况? 【例题2.5】整型数据的溢出。 /* file2_5.c */ #include void main( ) short int a,b; /*定义短整型变量a、b*/ long x,y; /*定义长整型变量x、y*/ a=32767; b=a+1; printf(“a=%d,b=%dn“,a,b); x=32767L; y=x+1; printf(“x=%ld,b=%ldn“,x,y); 2.3.3整型常量的类型 在C语言中,在一个整型常量后加一个后缀符号,指明整型 常量的数据类型。 (1)在一个整型常量后面加一个字母l或L,则认为是长整(long int)型常量。 例如:123L、432L、0L等。 (2)在一个整型常量后面加一个字母u或U,则认为是无符号 (unsigned int)整型常量。 例如:54000u,表示十进制无符号整数45000。 (3)在一个整型常量后面加一个字母ul或UL,则认为是无符号 (unsigned long)长整型常量。 例如:897000UL,表示十进制无符号长整数897000。 2.4实型数据 2.4.1实型常量的表示方法 C语言中的实数(real number)又叫做浮点数(floating- point number),也就是实型常量,实数可以用两种形式来 表示: (1)十进制小数形式 十进制小数形式即数学中常用的实数形式,由数字09和 小数点组成,而且必须有小数点,整数部分和小数部分可以 省略。例如:0.125、127.、-256.0、.135、123.0、0.0等 。 (2)指数形式 指数形式类似于数学中的表达形式,由十进制数,加阶码 标志“e”或“E”以及阶码组成,而且阶码只能为整数,可 以带符号。 其一般形式为: aEn 其中,a为十进制小数形式,E为阶码标志,n是阶码,必 须为整数,可以带符号。 例如:123e3或1.23e5都代表123103。 2.4.2实型变量 1.实型数据在内存中的存放形式 实型数据内存中与整型数据的存储方式不同,实 型数据是按照指数形式存储的。系统把一个实型数 据分成小数部分和指数部分,分别存放,小数部分 采用规范化的指数形式。一个实型数据在内存中占 4个字节(32位)。 2.实型变量的分类和定义 在C语言中,实型变量分为三种:单精度(float)实型数、 双精度(double)实型数和长双精度型(long double)实型数。 这三种类型所占的为数和数值范围及有效为数如表2-2所 示。 3.实型数据的舍入误差 在计算机内存中可以精确地存放一个整数,不会出现误差。 但是对于实型变量,由于计算机的存储单元有限,因此能提 供的有效数字也是有限的,在有效位以外的数字都要舍去, 由此可能会产生一些误差。 【例题2.6】实型数据的舍入误差。 /* file2_6.c */ #include void main() float m,n; m=334567.2341E10; n=m+5; printf(“单精度实型数占的字节数是:%dn“,sizeof(float); printf(“ m=%fn n=%fn“,m,n); 2.4.3实型常量的类型 C编译系统对实型常量不分float和double,而是都作为 double(双精度)来处理,这样做可以使计算结果更精确。 例如:定义一个实型变量p,有如下语句: float p; p = 12.3456 * 4567.89; 系统先把12.3456 和4567.89作为双精度数据存储(占64 位)和进行相乘运算,得到一个双精度数的乘积,然后取前 7位赋给实型变量p,这样运算速度降低了。如果在数的后 面加字母f或F(如12.3456f,4567.89F),这样编译系统就会 按单精度(32位)处理。 假如x已指定为单精度实型变量: float x; x=333333.222; 由于float型变量只能接收7位有效数字,因此最后两位 小数不起作用。如果x改为double型,则能全部接收上述9 位数字并存储在变量x中。 2.5字符型数据 2.5.1字符型常量 1.字符常量 在C语言中,用一对单引号(即撇号)括起来的一个字符称 为字符常量。如a、8、#、? 等都是字符 常量。 C中的字符常量有以下特点: (1)字符常量只能用单引号括起来,不能用双引号或其他符 号。单引号只是起定界作用并不表示字符本身。单引号中的 字符不能是单引号()和反斜杠()。 (2)每个字符常量都有一个整数值,就是该数的ASCII码值 (参照附录的ASCII表)。例如,U的ASCII码是85,八进 制数0102表示大写字母B ,十六进制数0x5d表示。 (3)字符常量只能是单个字符,字符可以是字符集中的任意 字符。 (4)字符常量是区分大小写的。例如:字符s 和S 的ASCII码分别是115、83,因此,s 和S是两个不 同的字符常量。 2、转义字符 除了以上形式的字符常量外,C还允许用一种特殊形式的 字符常量,就是以一个“”开头的字符序列,称为转义字 符。转义字符用来表示一些难以用一般形式表示的字符, 常用的转义字符如表2-3所示。 【例题2.7】转义字符的应用。 /* file2_7.c */ #include void main() printf(“s ttudrentn“); printf(“ htqqrellon“); 2.5.2字符型变量 字符型变量的类型标识符为char,内存中分配1个字节。 在对字符变量赋值时,可以把字符常量(包括转义字符)赋 给字符变量。如: char ch1,ch2; /*定义字符型变量ch1和ch2*/ ch1=a; /*给字符型变量ch1赋值*/ ch2=101; /*定义字符型变量ch2值为转义字符,101 表示八进制, 即字符 A */ 注意: 一个字符变量只能放一个字符,不要认为在一个字符变 量中可以放一个字符串(包括若干字符)。 【例题2.8】编程将“Hello”译成密码,密码的规则是,用 原来的字母后面第5个字母代替原来字母。例如,字母“A” 后面第5个字母是“F”,用“F”代替“A”。 2.5.3字符型数据在内存中的存储形式及其使用方法 字符型数据在内存中的存储是将字符的ASCII码值以二进 制形式存放,占1个字节(8bit)。也就是说将一个字符常量 放到一个字符变量中,实际上并不是把该字符本身放到内存 单元中去,而是将该字符的相应的ASCII码放到存储单元中 。 【例题2.9】向字符型数据赋值。 【例题2.10】字母的大小写转换。 2.5.4字符串常量 在C语言中,除了允许使用字符常量外,还允许使用字符串常 量表示多个字符。 字符串常量是一对双引号括起来的零个或多个字符序列。 如: “hello everyone“、“this is a string“、“a“、 “123.67adc“、“ “或“都是字符串常量。 在这里的双引号不是字符串的一部分,而只是充当界限符 。 如果字符串常量中要出现双引号,则必须使用转义字符来表 示,即“”表示,取消它原来的含义,而仅仅作为一个字 符双引号来使用。 可以输出一个字符串,如: printf(“how are you?“); 2.6各类数值数据间的混合运算 整型(包括int,short,long)数据和实型(包括float, double)数据都是数值型数据,字符型数据可以与整型通用, 因此,整型、实型、字符型数据间可以进行混合运算。 要实现混合运算,就必须进行类型转换,转换的目的是: (1)将短的数扩展成机器处理的长度。 (2)使得运算符两侧的数据类型相同。 例如:下面的表达式在C语言中是能够通过类型转换进行计算的 。 87.78+t+790.045*8-17.83 在进行运算时,不同类型的数据要先转换成同一类型,然 后进行运算。转换的规则如图2-11所示。 2.7数据的输入与输出的概念 输入和输出的概念是以计算机为中心而言的,当数据从 计算机中送出到外部输出设备(如显示屏、打印机、磁盘等) 时,称为“输出”;当数据从外部输入设备(如键盘、磁盘 、 光盘、扫描仪等)送到计算机时,称为“输入”。 C语言中没有提供专门的输入与输出语句,输入与输出操 作是通过相关的库函数来实现的。例如,printf函数和 scanf函数,不是由C语言提供的“输入输出语句”,而是在 C标准函数库中提供的输入输出函数。 在调用标准输入输出库函数时,应包含的头文件是 stdio.h,即文件开头应有以下预编译命令: #include 或 #include “stdio.h“ stdio.h是standard input putchar(c); /* 输出字符c */ putchar(101); /* 输出转义字符对应的字符A */ putchar(97); /* 输出字符a */ putchar(ch+2); /* 输出字符u */ 【例题2.11】使用putchar函数输出字符 /* file2_11.c */ #include void main() char ch1,ch2,ch3,ch4; ch1=g; ch2=i; ch3=r; ch4=l; putchar(ch1); putchar(ch2); putchar(ch3); putchar(ch4); putchar(n); 2.8.2字符输入函数 功能:从终端(或系统隐含指定的输入设备)输入一个字符。 getchar函数没有参数, 函数的值就是从输入设备得到的字 符。一般调用形式为: ch=getchar(); 其中,ch是字符型变量,函数执行是等待从键盘输入一个 字符,当用户输入一个字符后,函数值就是所输入的字符常 量,然后,将此值赋给ch. 【例题2.12】键盘输入一个小写字符,将其转换成大写并输 出。 【例题2.13】连续使用getchar()时应注意的问题。 2.9格式输入与输出 2.9.1格式输出函数 在C语言中,输出是最基本的操作,基本每一个程序都包 含输出。在前面几章节中已用到printf()函数,它的作用是 向终端(或系统隐含指定的输出设备)输出若干个任意类型的 数据。与putchar()函数相比,printf()可以输出多个数 据,且为任意类型;putchar()只能输出字符,而且只能是 一个字符。 1、printf()函数的一般格式 功能:按某种格式,向输出设备输出若干个指定类型的数据。 一般调用形式为: printf(“ 格式控制“,输出项列表); 例如:printf(“ %d,%c“,t,ch); 说明: (1)“格式控制”是用双引号括起来的字符串,也称“转换 控制字符串”,它包括两种信息: 普通字符(包括转移控制字符),将原样输出。格式控制 中的普通字符原样输出。例如: printf(“hello world!“); 该例输出普通字符串:hello world! 格式说明,是以“%”开始,以一个格式字符结束,中 间可以插入附加说明符,如%d,%f等。它的作用是将输出的 数据转换为指定的格式输出,其一般形式为: %附加说明符格式字符 printf()函数的格式字符和常用的附加说明符分别如表2-5 和2-6所示。 (2)“输出表列”是需要输出的一些数据,可以没有。输出 列表中的输出项可以是常量、变量或表达式。当有两个或两 个以上输出项时,要用逗号(,)分隔。 【例题2.14】printf()函数使用举例 /* file2_14.c */ #include void main() int m,n; char c=D; float f=124.78f; m=6;n=8; printf(“m=%d,n=%dn“,m,n); printf(“m=%d n=%dn“,m,n); printf(“c=%c,f=%fn“,c,f); 2、printf函数的格式字符 下面对表2-5中所列的格式字符作进一步说明。 (1)d格式符。以带符号的十进制输出整数。有以下几种用法: %d:按十进制整型数据的实际长度输出。 %md:m为指定的输出字段的宽度。 %ld:用于输出长整型数据。 【例题2.15】d格式符的用法。 (2)o格式符:表示以八进制数格式输出整数。由于是将内存 单元中的各位的值(0或1)按八进制形式输出,因此输出的数 值不带符号,即将符号位也一起作为八进制数的一部分输出。 八进制格式输出结果时,并不在数据结果前面加0,如果想在 结果中输出前导0,可以通过添加附加格式符“#”实现。 【例题2.16】八进制输出整数。 /* fiel2_16.c */ #include void main() int i,j; i=9; j=-1; printf(“i=%o,i=%4on“,i,i); printf(“i=%#o,i=%#4on“,i,i); printf(“j=%on“,j); (3)x格式符:表示以十六进制数格式输出整数。同样不会 出现负的十六进制数。十六进制格式输出结果时,并不在数 据结果前面加0x,如果想在结果中输出前导0x,可以通过添 加附加格式符“#”实现。 【例题2.17】用十六进制输出整数。 (4)u格式符:用来以十进制形式输出无符号数(unsigned 型),例如地址值。 对于一个有符号整数(int型),也可以用%u格式输出。如 果有符号数是正数,可以按照实际的大小输出;如果有符号 数是负数,则在输出时,符号位可以看作是数值位,所以负 数的补码会看作是正数的补码(即正数的原码)。一个 unsigned型数据也可用%d、 %o或%x格式输出。 【例题2.18】整型数据格式符的用法。 (5)c格式符:用来输出一个字符。 如果一个整数的值在0255之间,也可以以字符形式输 出,系统会把整数值转换为相应的ASCII码,并输出相应的 字符。反之,一个字符数据也可以用整数形式输出。 【例题2.19】字符的输出。 (6)s格式符:用来输出一个字符串。可以直接使用%s输出 字符串或者字符串常量,也可以加修饰符。通常有以下几种 用法: %s,按照正常方式输出字符串实际字符。 %ms,输出的字符串占列,如字符串本身长度大于m, 则突破的限制,将字符串全部输出。若串长小于m,则左 补空格。 %-ms,如果串长小于,则在列范围内,字符串向左 靠,右补空格。 %mns,输出占列,但只取字符串中左端n个字符。这 n个字符输出在列的右侧,左补空格。 %-mns,其中、n含义同上,n个字符输出在列范围 的左侧,右补空格。如果n,则自动取n值,即保证n 个字符正常输出。 【例题2.20】字符串的输出。 (7)f格式符:用来输出实数(包括单、双精度),以小数形式 输出。通常有以下几种用法: %f,不指定字段宽度,由系统自动指定,使整数部分 全部输出,并输出6位小数。应当注意,在输出的数字中并 非全部数字都是有效数字。单精度实数的有效位数一般为7 位;双精度数也可用%f格式输出,它的有效位数一般为17 位,给出小数6位。 【例题2.21】实型数据的有效数字位数。 (8)e格式符:以指数形式输出实数。通常有以下几种用法: %e不指定输出数据所占的宽度和数字部分的小数位 数,有的C编译系统自动指定给出6位
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位笔试-江西-江西中西医临床医学(医疗招聘)历年参考题库典型考点含答案解析
- 2025年事业单位笔试-江苏-江苏皮肤病与性病学(医疗招聘)历年参考题库典型考点含答案解析
- 2025年事业单位笔试-江苏-江苏中西医结合内科(医疗招聘)历年参考题库典型考点含答案解析
- 虚拟空间身份重构-洞察及研究
- Unit4Lesson2课件冀教版英语七年级上册
- 不动产租赁合同
- 项目实战面试题目及答案
- 机械制造安全知识培训课件
- 停工停产面试题目及答案
- 南华大学的离散数学试卷
- 2025行政执法人员考试题库含答案
- 联通校招测评题库及答案
- 【好题汇编】2023-2025年中考物理真题分类汇编 专题:内能及内能和利用(有解析)
- 科创板块测试题及答案
- 履带吊安装拆除作业安全管理与实施方案
- 儿科护理进修
- 人员资质认定管理办法
- 2025年安防生产行业技能考试-安全防范系统安装维护员历年参考题库含答案解析(5套共100道单选合辑)
- 16种英语时态教学课件
- 2025年新版保安员考试试题附(答案+解析)
- 2025至2030钢铁行业市场发展分析及前景趋势与发展趋势分析与未来投资战略咨询研究报告
评论
0/150
提交评论