配色: 字号:
《C语言程序设计教程》第二章数据类型
2023-05-23 | 阅:  转:  |  分享 
  
第6章 数 组 2.1 C语言的数据类型2.2 常量与变量 2.3 整型数据2.4 实型数据2.5 字符型数据2.6 变量赋
初值2.7 运算符及表达式2.8 本章小结第二章 数据类型、运算符和表达式关键字:常量与变量 整型数据 实型数据 字符型数据
运算符和表达式 运算符+ - / % ++ -- = += -= = /= %= <<= >>= &=
^= |= ,在本章中,读者将会了解到在进行C程序设计之前必须掌握的一些基本知识。包括:C语言所支持的数据类型、数据的常量与
变量之分、常用的运算符以及相应的表达式。这些知识是进行C语言程序设计的基础。 2.1 C语言的数据类型 数据是程序设计中一个很重
要的成分,是程序处理的对象。学习任何一种计算机语言,必须了解这种语言所支持的数据类型。在其后的程序设计时,对于程序中的每一个数据都
应该确定其数据类型。对不同的问题,采用的数据类型应不同。例如,在统计某个班级有多少学生时应该用整型数据,而不能使用带小数的数据。C
语言规定,程序中用到的任何一个数据都必须首先指定其数据类型。在C语言,数据类型可分为:基本类型,构造类型,指针类型,空类型四大类。
每个大类中又划分出一些小类。具体分类如图2.1所示。 图2.1 C语言中的数据类型分类 2.2.1 标识符在C语言中,
把用来标识对象(包括变量、符号常量、函数、数组等)名字的有效字符称为标识符。一个标识符的命名应遵循以下规则:(1)只能由字母、数字
和下划线组成,且不能以数字开头。如area、_above、m_1_1都是正确的,而a+b、13是不正确的。(2)长度不能超过32个
字符,多余的将不被识别。(3)大写字母和小写字母被视为两个不同的字符。如zhang 、ZHANG 被认为两个不同的标识符。(4)C
语言中的关键字不能用作标识符名。 2.2 常量与变量 C语言中的关键字共有32个,包括:auto break
case char const continue default dodouble else
enum extern float for goto if int long
register return short signed static sizeof stru
ct switch typedef union unsigned void volatile whi
le 2.2.2 常量与符号常量 1.常量常量是指在程序的运行过程中其值不能改变的量。例如:像32这样出现在程序中的具体数字
。它在程序运行过程中的值始终是固定不变的。常量可以区分算术型常量和字符型常量。算术型常量就是常数。例如3,123,32。字符型常量
,是用双引号或单引号括起来的一串字符,例如''A'',"hello,world","12345"之类的字符型常量。 2.符号常
量符号常量是指用一个符号代表一个普通意义上的常量。主要用于程序中多次出现一些数据时,为了提高程序的可读性,给某个特定的数据赋予一个
名字。符号常量一旦赋值,在程序的运行过程中就不能再赋以新值。符号常量在使用之前必须先定义,其一般形式为:#define 标识符 常
量例如:#define PI 3.14中的PI就是符号常量,在其后的程序中,代替的常量是3.14。习惯上,符号常量用大写字母表示。
程序文本【2.1】 符号常量的使用#include "stdio.h"#define PI 3.14 /定义符号常量PI
,其值为3.14/main(){ float r; /r 圆的半径/fl
oat area; /area 圆的面积/printf("Please input r:")
;scanf("%f",&r); /输入圆的半径/area=PIrr;
/计算圆的面积/printf("area=%f",area); }结果是:Please input r
: 1area=3.1400002.2.3 变量1.变量的概念变量是指在程序的运行过程中其值可以改变的量。程序中使用的每个变量都用
一个变量名作为标识,变量命名时应遵循标识符命名规则。习惯上,变量名用小写字母表示。变量也有数据类型之分,常见的有整型变量、实型变量
和字符型变量等。程序运行时,计算机按变量的类型分配一定的存储空间,变量的值放在变量的存储空间内,程序通过变量名引用变量值,实际上是
通过变量名找到其内存地址,从内存地址中读取数据。 2.变量的定义C语言中的变量必须先定义再使用。定义变量时需要确定变量的数据类型和
变量名。变量定义的一般形式为: 类型标识符 变量名[,变量名2……];程序文本【2.2】 变量的定义#include
"stdio.h"main(){ int a; /指定a为整型变量/a=1;
/赋值语句,将1赋给变量a/printf("a=%d\n",a);} 结果是:a=1其中,该程序中的int
a;语句定义一个变量a,变量的数据类型为int,即整型数据。注意:(1)允许在一个类型标识符后,定义多个相同类型的变量。各变量名
之间用逗号间隔。类型标识符与变量名之间至少用一个空格间隔。(2)最后一个变量名之后必须以“;”号结尾。(3)变量定义必须放在变量使
用之前。一般放在函数体的开头部分。 2.3.1 整型常量整型常量是由一系列数学组成的常数,不带小数点。C语言中的整型常量可以用以下
3种形式表示:1.十进制的整型常量 由正负号和数字0~9组成的整数,如645,?56,0等。2.八进制的整型常量由正负号和数
字0~7组成的整数,并且必须以0开头。如034表示八进制数34,它的十进制值为28。3.十六进制的整型常量由正负号、数字0~9和字
符a~f组成的整数,并且必须以0x开头。其中的a、b、c、d、e、f分别表示十进制中的10、11、12、13、14、15。如0xd
表示十六进制数d,它的十进制值为13。 2.3 整型数据2.3.2 整型变量整型变量可分为以下3种类型: (1)基本型,以 in
t 表示。 (2)短整型,以 short 或者short int表示。(3)长整型,以 long 或者long int表示。(4)
无符号整型,以unsigned表示。Unsigned可以加在int、short和long的前面,分别表示无符号整型、无符号短整型和
无符号长整型。各种整型变量数据的表示方法及所表示的范围如表2.1所示。 表2.1 整型变量数据的表示范围2.4.1 实型常量实型常
量是指实数的集合,又称为浮点型。C语言中的实型常量可以用以下2种形式表示:1.十进制小数形式十进制小数形式类似于数学中的实数形式,
由正负号、数字0~9和小数点组成,如:1.24、30.0、?2.001。注意,必须有小数点,小数点是实数的标志。2.指数形式指数
形式类似于数学中的指数形式。由正负号、数字0~9、小数点和字母E(或e)组成,其一般形式为:a E n(a为十进制数,n为十进制整
数)如:2.1E5、?2.8E?2。 2.4 实型数据2.4.2 实型变量实型变量可分为以下3种类型: (1)单精度型,以 fl
oat表示。 (2)双精度型,以 double表示。 (3)长双精度型,以long double表示。 各种实型变量数据的表示方法
及所表示的范围如表2.2所示。 2.5.1 字符常量1.字符常量字符常量是由一对单引号括起来的单个字符,如:''a''、
''b''、''=''、''+''。2.转义字符C语言中存在一种特殊的字符常量,叫做转义字符。转义字符以反斜杠“\”开头,后跟一个或几个字符。
转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。在程序中,转义字符同样要用一对单引号括起来。常用的转义字符及其功能
如表2.3所示。 2.5 字符型数据表2.3 转义字符及其功能 注意:如果单引号、双引号或反斜杠本身作为字符常量时必须使用转义字
符“\''”、“\"”或“\\”。程序文本【2.3】 转义字符的使用#include "stdio.h"main(){ pri
ntf("\n\t\b\b"); printf("\\"); printf("\n\101");} 结果是: \
A2.5.2 字符变量字符变量以char表示,一个字符变量占用一个字节。字符变量用来存储字符常量。将一个字符常量存储到一个字符变量
中,实际上是以ASCII码的形式存储到内存单元中。如:字符''a''的ASCII码值为97,字符''b''的ASCII码值为98,如果将其
分别放在字符变量c1和c2中,实际上是在c1和c2两个内存单元放97和98的二进制代码,如图2.2所示。 字符数据在内存中存储的形
式与整数相同,所以C语言允许字符数据与整型数据通用。也就是说,允许对整型变量赋以字符值,也允许对字符变量赋以0~255的整型值。在
输出时,允许把字符变量按整型输出,也允许把整型变量按字符型输出。 程序文本【2.4】 字符变量的字符形式和整数形式输出#incl
ude "stdio.h"main(){ char c1,c2; c1=''a''; c2=''b''; printf("
%c,%c\n", c1, c2); printf("%d,%d\n", c1, c2);} 结果是:a,b97,98
其中,变量的输出形式取决于printf函数格式串中的格式字符,当格式字符为“c”时,对应输出的变量值为字符,当格式字符为“d
”时,对应输出的变量值为整数。 2.5.3 字符串常量字符串常量是由一对双引号括起的字符序列。如: "CHINA" 、"hello
"、 "12.5"。字符串常量和字符常量是不同的量,主要有以下区别:(1)字符常量由单引号括起来,字符串常量由双引号括起来。(2)
字符常量只能是单个字符,字符串常量则可以含一个或多个字符。(3)可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个
字符变量。在C语言中没有相应的字符串变量。可以用一个字符数组来存放一个字符串常量。(4)字符常量占一个字节的内存空间。字符串常量占
的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符“\0” (ASCII码为0)。这是字符串结束的标志,是系统自动加上的
。如:字符串常量“hello”在内存中的实际存储为: 实际占用了6字节的空间。 2.6 变量赋初值变量赋初值是指在定义
变量的同时可以给变量进行赋值,也称为变量的初始化。变量赋初值的一般形式为:类型标识符 变量名=初值[,变量名2[=初值2]……];
例如:int a=1; /指定a为整型数据,并将1赋给变量a /相当于:int a; /指定a为整型数据
/a=1; /赋值语句,将1赋给变量a/也可以同时给几个变量赋初值,例如:int a=1,b=2; 2.7 运
算符及表达式C语言中运算符非常丰富,用运算符和各种类型的数据组成的式子称为表达式,可以实现各种运算功能。 C语言的运算符不仅
具有不同的优先级,而且还有一个特点,就是它的结合性。在表达式中,各操作数参与运算的先后顺序不仅要遵守运算符优先级的规定,还要受运算
符结合性的制约,以便确定是自左向右进行运算还是自右向左进行运算。本章介绍基本运算符,如表2.4所示 表2.4 基本运算符 2.7.
1 算术运算符及算术表达式1.算术运算符C语言中基本的算术运算符有5种:+、?、、/、%。+:加法运算符,或者正值运算符,如2+
3、+5。?:减法运算符,或者负值运算符,如5?1、?6。:乘法运算符,如46。/:除法运算符,如6/3。注意:两个整数相除,
其商为整数,小数部分被舍弃,如5/2=2,但是,如果两个操作数中出现负数,则舍去小数的方向不固定,如?5/2有的系统的结果为?2,
有的系统的结果为?3;相除的数据中有实数,其商为实数。%:求余运算符,或称为模运算符,如5%3。该运算符两侧的数据必须要求为整型数
据,运算结果为整数相除的余数。2.算术表达式算术表达式是指用算术运算符和操作数组成的式子。其中的操作数可以为常量、变量等。如2+3
c、7%4(3+1)。其中,“()”为初等运算符,在所有运算符中的优先级最高,为1级。 2.7.2 自增、自减运算符及其表达式
1.自增、自减运算符++:自增运算符,使单个变量的值增1。??:自减运算符,使单个变量的值减1。自增、自减运算符使用时可以前置,如
++a、??a,也可以后置,如a++、a??。运算符前置时,表示先增减,后运算。即先将变量的值增1或减1,然后再用变化后的值参加其
它运算。例如:int a=1,b;b=++a; 执行后,a的值为2,b的值为2。运算符后置时,表示先运算,后
增减。即变量先参加其它运算,然后再将变量的值增1或减1。例如:int a=1,b;b=a++; 执行后,a的
值为2,b的值为1。 2.自增、自减表达式自增、自减表达式是指用自增、自减运算符和操作数组成的式子。其中,自增、自减运算符的操作数
只能为变量,不能为常量或表达式。程序文本【2.5】 自增、自减运算符的运算#include "stdio.h"main(){
int i,j;i=3;j=i++; printf("\nj=%d,i=%d",j,i);i=3;j=++i; printf("
\nj=%d,i=%d",j,i); i=3;printf("\ni=%d",i++); printf("\ni=%d",++i)
; i=3; printf("\n%d,%d",i++, i++); printf("\n%d,%d",++i, ++i);}
结果是:j=3,i=4j=4,i=4i=3i=54,37,6 2.7.3 赋值运算符及赋值表达式1.赋值运算符赋值运算符,即“=”
,它的作用是将一个表达式的值赋给一个变量。例如:a=2 /将常量2赋给变量a/b=42 /将表达式4
2的值赋给变量b/c=c+1 /将表达式c+1的值再赋给变量c/注意:(1)被赋值的变量必须是单个变量,并且必须在赋
值运算符的左边。(2)赋值运算符“=”与数学中的等号不同。表达式c=c+1表示将变量c的值加1再赋给变量c。(3)当表达式值的类型
与被赋值变量的类型不一致,但都是数值型或字符型时,系统自动将表达式的值转换成被赋值变量的数据类型,然后再赋值给变量。 2.复合赋值
运算符在赋值运算符“=”之前加上其它二目运算符可构成复合赋值运算符。C语言中有10种复合赋值运算符:+=、?=、=、/=、%=、
<<=、>>=、&=、^=、|=。 例如:a+=5 /将a+5的值赋给变量a,等价于a=a+5/b=4+3
/将b(4+3)的值赋给变量b,等价于b=b(4+3)/采用复合赋值运算符可以简化程序,提高编译效率。3.赋值表达式赋值表
达式是指用赋值运算符和操作数组成的式子。赋值表达式的一般形式为: 变量 赋值运算符 表达式例如:a=2赋值表达式可以嵌套,并
放在任何可以放置表达式的地方,例如:a=(b=6)其中b=6是一个赋值表达式,表示先将常量6赋给变量b。然后再将这个赋值表达式的值
赋给变量a。任何一个表达式都有一个值,赋值表达式也不例外。被赋值变量的值就是赋值表达式的值。因此,b=6这个表达式的值为6。最后再
将这个表达式的值6赋给变量a。 2.7.4 逗号运算符及逗号表达式1.逗号运算符逗号运算符,即“,”。也称为顺序求值运算符。可以将
多个表达式连接起来依次求值。2.逗号表达式逗号表达式是指用逗号运算符和其它表达式组成的式子。逗号表达式的一般形式为:表达式1,表达
式2,表达式3,……表达式n功能:先计算表达式1的值,再计算表达式2的值,依次计算,最后计算表达式n的值。最后一个表达式的值就是此
逗号表达式的值。例如:a=4+5,a4先计算a=4+5,得到a的值为9,然后计算a4,得到36。整个逗号表达式的值为36。2.
7.5 不同类型数据间的混合运算C语言中整型、实型和字符型数据可以混合运算。这时需要数据从一种类型转换成另一种类型,以适应不同的数
据类型间的运算。类型转换有自动类型转换和强制类型转换两种。1.自动类型转换当一个运算符两侧的操作数的数据类型不同时,则系统按“先转
换、后运算”的原则,首先将数据自动转换成同一类型,然后在同一类型数据间进行运算。数据间自动类型转换的具体规则如图2.3所示。 图中
上、下两个横向向左箭头表示必然转换。也就是说,当float型数据在运算时一定要先转换为double型数据;char和short型数
据在运算时一定要先转换为int型数据。图中纵向向上箭头表示不同类型数据运算时转换的方向, 也就是说,按由低到高方向转换为相同类型即
可进行运算。例如,int型数据与long型数据进行运算时,int型数据先转换为long型数据,然后运算,结果为long型数据。注意
,只要由低向高转换为相同类型数据即可,不能理解为都必须要转换为double型数据。 程序文本【2.6】 自动类型转换#inclu
de "stdio.h"main(){ int a=1,b=2; char c=''a''; float d,f=2.7;
d=(a+c)+bf+c/b;printf("d=%f ",d);}结果是:d=151.400000 2.强制类型转换强制类型转
换是利用强制类型转换运算符将表达式的类型转换为所需类型。强制类型转换的一般形式为:(类型标识符) 表达式强制类型转换运算符的优先级
为2级。例如:(int) a /将a转换为int型/(char)(b+c) /将(b+c)转换为char型
/(double)de /将d转换为double型,再与e相乘,因为强制类型转换运算符的优先级高于乘法运算符/程序文本【
2.7】 强制类型转换#include "stdio.h"main(){ int a,b; float f=5.35;
a=(int)f; /将f转换为int型/ b=(int)(f+2); /将f+2转
换为int型/ printf("a=%d, b=%d,f=%f\n",a,b,f);}结果是:a=5, b=7, f=5.35
0000其中,f仍为float型,值仍等于5.35。 2.8 本章小结本章重点介绍了基本数据类型的定义和使用方法,数据表现形式常
量和变量的使用,以及常用运算符和表达式的使用。需要掌握的知识点主要有:1.C语言的数据类型有基本类型、构造类型、指针类型和空类型四
类。本章重点掌握基本类型中的整型、实型和字符型。2.在程序中,数据的表现形式有常量和变量。常量是指在程序的运行过程中其值不能改变的量。变量是指在程序的运行过程中其值可以改变的量。3.变量必须先定义后使用。变量的类型由定义语句中的类型标识符指定。变量由变量名和变量值两个要素组成。在程序中,通过变量名来引用变量的值。4.标识符用来标识一个对象(包括变量、符号常量、函数、数组等),变量名必须符合C语言中标识符的命名规则:只能由字母、数字和下划线组成,且不能以数字开头;大写字母和小写字母被视为两个不同的字符;C语言中的关键字不能用作变量名。5.要区别字符和字符串。''a''是一个字符,"a"是一个字符串,它包括''a''和''\0''。两个字符。一个字符型变量只能存放一个字符。6. C语言中运算符非常丰富,用运算符和各种类型的数据组成的式子称为表达式,可以实现各种运算功能。本章中学习了算术运算符、自增自减运算符、赋值运算符和逗号运算符。其中,自增自减运算符是C语言的一个特色,可以使程序清晰、简练,但使用起来容易出错。7.在算术表达式中,允许不同类型的数值数据和字符数据进行混合运算。混合运算时,需要将不同类型的数据按照一定的规则转换成相同类型再进行运算。同时,还允许对一个类型的数据进行强制类型转换,转换成另一个类型。
献花(0)
+1
(本文系昵称1689447...首藏)