C语言基本数据类型

C语言基本数据类型
C语言基本数据类型

第2章基本数据类型

本章介绍常量与变量的概念,以及C语言基本数据类型中的整型、字符型、实型数据的基本知识,各种不同数据类型之间的转换及混合运算。

2.1 数据概述

一个完整的计算机程序,至少应包含两方面的内容,一方面对数据进行描述,另一方面对操作进行描述。数据是程序加工的对象,数据描述是通过数据类型来完成的,操作描述则通过语句来完成。

C语言不仅提供了多种数据类型,还提供了构造更加复杂的用户自定义数据结构的机制。C语言提供的主要数据类型有:

1.基本类型:包括整型、字符型、实型(浮点型)和枚举类型

2.构造类型:包括数组、结构体和共用体类型

3.指针类型

4.空类型

其中整型、字符型、实型(浮点型)和空类型由系统预先定义,又称标准类型。

基本类型的数据又可分为常量和变量,它们可与数据类型结合起来分类,即为整型常量、整型变量、实型(浮点型)常量、实型(浮点型)变量、字符常量、字符变量、枚举常量、枚举变量。在本章中主要介绍基本数据类型(除枚举类型外),其它数据类型在后续章节中再详细介绍。

2.1.1 常量与符号常量

在程序执行过程中,其值不发生改变的量称为常量。常量区分为不同的类型,如68、0、-12为整型常量,3.14,9.8为实型常量,‘a’,‘b’,‘c’则为字符常量。常量即为常数,一般从其字面即可判别。有时为了使程序更加清晰和便于修改,用一个标识符来代表常量,即给某个常量取个有意义的名字,这种常量称为符号常量。如:

【例2-1】

#define PI 3.14

main( )

{

float aera;

aera=10*10*PI;

printf(“aera=%f\n”,aera);

}

程序中用#define 命令行定义PI代表圆周率常数3.14,此后凡在文件中出现的PI都代表圆周率3.14,可以和常量一样进行运算,程序运行结果为:

aera=314.000000

有关#define命令行的详细用法参见第9章。

这种用一个标识符代表一个常量的,称为符号常量。注意符号常量也是常量,它的值在其作用域内不能改变,也不能再被赋值。如再用以下语句给PI赋值:

PI=3.14;

是错误的。

习惯上符号常量名用大写字母来表示,变量名用小写,以示区别。

2.1.2 变量

在程序执行过程中,取值可变的量称为变量。一个变量必须有一个名字,在内存中占据一定的存储单元,在该存储单元中存放变量的值。请注意变量名和变量值是两个不同的概念。变量名在程序运行中不会改变,而变量值会变化,在不同时期取不同的值。

变量的名字是一种标识符,它必须遵守标识符的命名规则。习惯上变量名用小写字母表示,以增加程序的可读性。必须注意的是大写字符和小写字符被认为是两个不同的字符,因此,sum和Sum是两个不同的变量名,代表两个完全不同的变量。

在程序中,常量是可以不经说明而直接引用的,而变量则必须作强制定义(说明),即“先说明,后使用”,如例1-2和1-3那样。这样做的目的有以下几点:

1. 凡未被事先定义的,不作为变量名,这就能保证程序中变量名使用得正确。例如,如果在定义部分写了

int count;

而在程序中错写成conut,如: conut=5;

在编译时检查出conut未经定义,不作为变量名,因此输出“变量conut未经说明”的信息,便于用户发现错误,避免变量名使用时出错。

2. 每一个变量被指定为某一确定的变量类型,在编译时就能为其分配相应的存储单元。如指定a和b为整型变量,则为a和b各分配两个字节,并按整数方式存储数据。

3. 每一变量属于一个类型,就便于在编译时据此检查所进行的运算是否合法。例如整型变量a和b可以进行求余运算:

a%b

%是求余运算符(详见第3章),得到a/b的整余数。如果将a和b指定为实型变量,则不允许进行“求余”运算,编译时会指出有关出错信息。

下明各节分别介绍整型、实型、字符型数据及相互转换。

2.2整型数据

C语言中的整型数据包括整型常量和整型变量,描述的是整数的一个子集。

2.2.1整型常量

整型常量就是整常数。在C语言中,使用的整常数有八进制、十六进制和十进制三种,使用不同的前缀来相互区分。除了前缀外,C语言中还使用后缀来区分不同长度的整数。

1.八进制整常数

八进制整常数必须以0开头,即以0作为八进制数的前缀。数码取值为0~7。如0123表示八进制数123,即(123)8 ,等于十进制数83,即:1*82+2*81+3*80=83; -011表示八进制数-11,即(-11)8 ,等于十进制数-9。

以下各数是合法的八进制数:

015(十进制为13) 0101(十进制为65) 0177777(十进制为65535) 以下各数不是合法的八进制数:

256(无前缀0) 0382(包含了非八进制数码8)

2.十六进制整常数

十六进制整常数的前缀为0X或0x。其数码取值为0~9,A~F或a~f。如0x123表示十六进制数123,即(123)16 ,等于十进制数291,即:1*162+2*161+3*160=291; -011表示十六进制数-11,即(-11)16 ,等于十进制数-17。

以下各数是合法的十六进制整常数:

0X2A(十进制为42) 0XA0 (十进制为160) 0XFFFF (十进制为65535) 以下各数不是合法的十六进制整常数:

5A (无前缀0X) 0X3H (含有非十六进制数码)

3.十进制整常数

十进制整常数没有前缀,数码取值为0~9。

以下各数是合法的十进制整常数:

237 -568 1627

以下各数不是合法的十进制整常数:

023 (不能有前导0) 23D (含有非十进制数码)

在程序中是根据前缀来区分各种进制数的。因此在书写常数时不要把前缀弄错,造成结果不正确。

4.整型常数的后缀

在16位字长的机器上,基本整型的长度也为16位,因此表示的数的范围也是有限定的。十进制无符号整常数的范围为0~65535,有符号数为-32768~+32767。八进制无符号数的表示范围为0~0177777。十六进制无符号数的表示范围为0X0~0XFFFF或0x0~

0xFFFF。如果使用的数超过了上述范围,就必须用长整型数来表示。长整型数是用后缀“L”或“l”来表示的(注意,字母“L”的小写形式“l”与数字“1”看上去很相似)。

例如:

十进制长整常数 158L (十进制为158) 、358000L (十进制为358000)。

八进制长整常数 012L (十进制为10) 、0200000L (十进制为65536)。

十六进制长整常数 0X15L (十进制为21) 、0XA5L (十进制为165)、0X10000L (十进制为65536)。

长整数158L和基本整常数158 在数值上并无区别。但对158L,因为是长整型量,C编译系统将为它分配4个字节存储空间。而对158,因为是基本整型,只分配2 个字节的存储空间。因此在运算和输出格式上要予以注意,避免出错。

无符号数也可用后缀表示,整型常数的无符号数的后缀为“U”或“u”。例如:

358u,0x38Au,235Lu 均为无符号数。前缀,后缀可同时使用以表示各种类型的数。如0XA5Lu 表示十六进制无符号长整数A5,其十进制为165。

2.2.2 整型变量

1.整型变量的分类

整型变量可分为基本型、短整型、长整型、和无符号型四种。

(1)基本型

类型说明符为int,在内存中占2个字节(在IBM PC上,下同),其取值为基本整常数。

(2)短整型

类型说明符为short int或short。所占字节和取值范围均与基本型相同。

(3)长整型

类型说明符为long int或long ,在内存中占4个字节,其取值为长整常数。

(4)无符号型

类型说明符为unsigned,存储单元中全部二进位(bit)用作存放数本身,而不包括符号。无符号型又可与上述三种类型匹配而构成:

?无符号基本型类型说明符为unsigned int或unsigned。

?无符号短整型类型说明符为unsigned short。

?无符号长整型类型说明符为unsigned long 。

各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同。但由于省去了符号位,故不能表示负数,但可存放的数的范围比一般整型变量中数的范围扩大一倍。表2-1列出了Turbo C中各类整型量所分配的内存字节数及数的表示范围。

表2-1 整型变量的字节数及表示范围

2.整型变量的说明

变量的说明,也即变量的定义,一般形式为:

例如:

int a,b,c; /* a,b,c为整型变量*/

long m,n; /* m,n为长整型变量*/

unsigned p,q; /* p,q为无符号整型变量*/

在书写变量说明时,应注意以下几点:

(1)允许在一个类型说明符后,说明多个相同类型的变量。各变量名之间用逗号间隔。

类型说明符与变量名之间至少用一个空格间隔。

(2)最后一个变量名之后必须以“;”号结尾。

(3)变量说明必须放在变量使用之前。一般放在函数体的开头部分。

另外,也可在说明变量为整型的同时,给出变量的初值。其格式为:

通常若有初值时,往往采用这种方法,下例就是用了这种方法。

【例2-2】

main( )

{

int a=3,b=5;

printf(“a+b=%d\n”,a+b);

}

程序的运行结果为:

a+b=8

2.3实型数据

2.3.1实型常量

实型也称为浮点型。实型常量也称为实数或者浮点数。在C语言中,实数只采用十进制。它有二种形式, 十进制数形式和指数形式。

1.十进制数形式

由数码0~ 9和小数点组成。例如:0.0,.25,5.789,0.13,5.0,300.,-267.8230等均为合法的实数。

2.指数形式

由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。其一般形式为a E n (a为十进制数,n为十进制整数)其值为 a*10n 如: 2.1E5 (等于2.1*105), 3.7E-2 (等于3.7*10-2) , -2.8E-2 (等于-2.8*10-2)

以下不是合法的实数 :

345 (无小数点),E7 (阶码标志E之前无数字),-5 (无阶码标志),53.-E3 (负号位置不对),2.7E (无阶码)。

标准C允许浮点数使用后缀。后缀为“f”或“F”即表示该数为浮点数。如356f和356.是等价的。

2.3.2 实型变量

实型变量分为两类:

1.单精度型

类型说明符为float,在Turbo C中单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。

2.双精度型,

类型说明符为double ,在Turbo C中双精度型占8个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。

实型变量说明的格式和书写规则与整型相同。

例如: float x,y; /* x,y为单精度实型变量*/ double a,b,c; /* a,b,c为双精度实型变量*/ 也可在说明变量为实型的同时,给出变量的初值。

例如: float x3.2 , y=5.3; /* x,y为单精度实型变量,且有初值 */

double a=0.2 , b=1.3 , c=5.1 ; /* a,b,c为双精度实型变量, 且有初值*/

应当说明,实型常量不分单精度和双精度。一个实型常量可以赋给一个float或double 型变量,根据变量的类型截取实型常量中相应的有效位数字。下面的例子说明了单精度实型变量对有效位数字的限制。

【例2-3】

main( )

{

float a;

a=0.123456789;

printf("a=%f",a);

}

由于单精度实型变量只能接收7位有效数字,因此上例中最后两位小数不起作用。程序运行结果为:

a=0.123457

如果a改为双精度实型变量,则能全部接收上述9位数字并存储在变量a中。

下面的例子说明了float和double的不同。

【例2-4】

void main()

{

float a;

double b;

a=33333.33333;

b=33333.33333333333333;

printf("a=%f\nb=%f\n",a,b); /* 用格式化输出函数输出a和b的值 */

}

程序运行结果为:

a=33333.332031

b=33333.333333

本例中,由于a 是单精度浮点型,有效位数只有七位。而整数已占五位,故小数二位后之后均为无效数字。b 是双精度型,有效位为十六位。但Turbo C 规定小数后最多保留六位,其余部分四舍五入。

2.4字符型数据

字符型数据包括字符常量、字符变量和字符串常量。

2.4.1 字符常量

字符常量是用单引号括起来的一个字符。例如'a' , 'b' , 'A' , '+', '?' 都是合法字符常量。在C语言中,字符常量有以下特点:

1.字符常量只能用单引号括起来,不能用双引号或其它括号。

2.字符常量只能是单个字符,不能是字符串。

3.字符可以是字符集中任意字符。但数字被定义为字符型之后就不再是原来的数值了。如'5'和5 是不同的量。'5'是字符常量,5是整型常量。

除了以上形式的字符常量外,C语言还允许用一种特殊形式的字符常量,即转义字符。转义字符以反斜线"\"开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如,在前面各例题printf函数的格式串中用到的“\n”就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。常用的转义字符及其含义见表2-2。

广义地讲,C语言字符集中的任何一个字符均可用转义字符来表示。表2-2中的\ddd 和\xhh正是为此而提出的。ddd和hh分别为八进制和十六进制的ASCII代码。如\101表

示ASCII码为八进制101的字符,即为字符‘A’。与此类似,\102表示字符‘B’,\134表示反斜线‘\’,\XOA表示换行。

【例2-5】和【例2-6】展示了转义字符的使用。

表2-2 常用转义字符表

【例2-5】

void main( )

{

int a,b,c; /* 定义 a、b、c为整数 */

a=5; b=6; c=7;

printf("%d\n\t%d┗┛┗┛%d\n┗┛┗┛%d┗┛┗┛┗┛%d\t\b%d\n",a,b,c,a,b,c); /* 按要求格式输出a,b,c的值*/

}

程序运行结果:

5

6 7

5 67

程序在第一列输出a值5之后就是“\n”,故回车换行;接着又是“\t”,于是跳到下一制表位置(设制表位置间隔为8),再输出b值6;空二格再输出c 值7后又是"\n",因此再回车换行;再空二格之后又输出a值5;再空三格又输出b的值6;再次后"\t"跳到下一制表位置(与上一行的6 对齐),但下一转义字符“\b”又使退回一格,故紧挨着6再输出c值7。

请看下面的例子:

【例2-6】

main( )

{

printf(“┗┛┗┛ab┗┛c\t┗┛de\rf\tg\n”);

printf(“h\ti\b\bj┗┛┗┛┗┛k”);

}

本例中的一个printf函数先在第一行左端开始输出“┗┛┗┛ab┗┛c”,然后遇到“\t”,它的作用是跳格,跳到下一制表位置,从第九列开始,故在第9~11列上输出“┗┛de”。下面遇到“\r”,它代表“回车”(不换行),返回到本行最左端(第1列),输出字符“f”,然后“\t”再使当前输出位置移到第9列,输出“g”。下面是“\n”,作用是“回车换行”。第二个ptintf函数先在第1列输出字符“h”,后面的“\t”使当前输出位置跳到第9列,输出字母“i”,然后输出位置应移到下一列(第10列)准备输出下一个字符。下面到两个“\b”,“\b”的作用是“退一格”,因此“\b\b”的作用是使当前输出位置退回到第8列,接着输出字符“j┗┛┗┛┗┛k”。

程序运行时在打印机上得到以下结果:

f┗┛ab┗┛c┗┛┗┛gde

h┗┛┗┛┗┛┗┛┗┛┗┛ji┗┛┗┛k

注意在显示屏上最后看道的结果与上述打印结果不同,是:

f┗┛┗┛┗┛┗┛┗┛┗┛┗┛gde

h┗┛┗┛┗┛┗┛┗┛┗┛j┗┛┗┛┗┛k

这是由于“\r”使当前输出位置回到本行开头,自此输出的字符(包括空格和跳格所经过的位置)将取代原来屏幕上该位置上显示的字符。所以原有的“┗┛┗┛ab┗┛c┗┛┗┛┗┛”被新的字符“f┗┛┗┛┗┛┗┛┗┛┗┛┗┛g”代替,其后的“de”未被新字符取代。回车换行后先输出“h┗┛┗┛┗┛┗┛┗┛┗┛┗┛i”,退两格后再输出“j┗┛┗┛┗┛k”,j后面第一个“┗┛”将原有的字符“i”取而代之。因此屏幕上看不到“i”。实际上,屏幕上完全按程序要求输出了全部的字符,只是因为在输出前面的字符后很快又输出后面的字符,在人们还未看清楚之前,新的已取代了旧的,所以误以为未输出应输出的字符。而在打印机输出时,不象显示屏那样会“抹掉”原字符,留下了不可磨灭的痕迹,它能真正反映输出的过程和结果。

2.4.2 字符变量

字符型变量用来存放字符常量,即单个字符。每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。不要以为一个字符变量中可以存放一个字符串。字符变量的类型说明符是char。字符变量类型说明的格式和书写规则都与整型变量相同。

例如:

char a,b; /* 定义字符变量 a和b */

a=’x’,b=’y’; /* 给字符变量a和b分别赋值’x’和’y’*/

将一个字符常量存放到一个变量中,实际上并不是把该字符本身放到变量内存单元中去,而是将该字符相应的ASCII代码放到存储单元中。例如字符’x’的十进制ASCII码是120,字符’y’的十进制ASCII码是121。对字符变量a,b赋予'x'和'y'值: a='x';b='y';实际上是在a,b两个单元内存放120和121的二进制代码:

a 0 1 1 1 1 0 0 0 (ASCII 120)

b 0 1 1 1 1 0 0 1 (ASCII 121)

既然在内存中,字符数据以ASCII存储,它的存储形式与整数的存储形式相类似,所以也可以把它们看成是整型量。C语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值。在输出时,允许把字符数据按整型形式输出,也允许把整型数据按字符形式输出。以字符形式输出时,需要先将存储单元中的ASCII码转换成相应字符,然后输出。以

整数形式输出时,直接将ASCII码当作整数输出。也可以对字符数据进行算术运算,此时相当于对它们的ASCII码进行算术运算。

整型数据为二字节量,字符数据为单字节量,当整型数据按字符型量处理时,只有低八位字节参与处理。

【例2-7】

main( )

{

char a,b;

a=120;

b=121;

printf("%c,%c\n%d,%d\n",a,b,a,b);

}

程序运行结果为:

x,y

120,121

在本程序中,说明a,b为字符型变量,但在赋值语句中赋以整型值。从结果看,a,b 值的输出形式取决于printf函数格式串中的格式符,当格式符为"c"时,对应输出的变量值为字符,当格式符为"d"时,对应输出的变量值为整数。

【例2-8】

main( )

{

char a,b;

a='x';

b='y';

a=a-32; /* 把小写字母换成大写字母*/

b=b-32; /* 把小写字母换成大写字母*/

printf("%c,%c\n%d,%d\n",a,b,a,b); /* 以字符型和整型输出 */

}

程序运行结果为:

X,Y

88,89

本例中,a,b被说明为字符变量并赋予字符值,C语言允许字符变量参与数值运算,即用字符的ASCII 码参与运算。由于大小写字母的ASCII 码相差32,即每个小写字母比它相应的大写字母的ASCII码大32,如’a’=’A’+32,’b’=’B’+32。因此,程序运算后把小写字母换成大写字母。然后分别以字符型和整型输出。

2.4.3字符串常量

前面已经提到,字符常量是由一对单引号括起来的单个字符。C语言除了允许使用字符常量外,还允许使用字符串常量。字符串常量是由一对双引号括起的字符序列。例如:"CHINA" ,"C program: , "$12.5" 等都是合法的字符串常量。可以输出一个字符串,如:printf(“Hello world!”);

初学者容易将字符常量与字符串常量混淆。’a’是字符常量,“a”是字符串常量,二者不同。假设c被指定为字符变量:

char c;

c=’a’;

是正确的,而

c=“a”是错误的。c=“Hello”也是错误的。不能把一个字符串赋给一个字符变量。

那么,‘a’和“a”究竟有什么区别呢?C语言规定:在每一个字符串的结尾加一个字符串结束标记,以便系统据此判断字符串是否结束。C语言规定以字符’\0’作为字符串结束标记。’\0’是一个ASCII码为0的字符,也就是“空操作字符”,即它不引起任何控制动作,也不是一个可显示的字符。如果有一个字符串“WORLD”,实际上在内存中是

它的长度不是5个字符,而是6个字符,最后一个字符为’\0’。但在输出时不输出’\0’。例如在printf(“WORLD”)中,输出时一个一个字符输出,直到遇到最后

的’\0’字符,就知道字符串结束,停止输出。注意,在写字符串时不必加’\0’,否则画蛇添足。’\0’是系统自动加上的。“a”实际包含两个字符,’a’和’\0’,因此,把它赋给一个字符变量c:

c=“a”;

显然是不行的。

在C语言中,没有专门的字符串变量,字符串如果需要存放在变量中,需要用字符数组来存放,这将在第七章中介绍。

一般来说,字符串常量和字符常量之间有如下的主要区别:

1.字符常量由单引号括起来,字符串常量由双引号括起来。

2.字符常量只能是单个字符,字符串常量则可以含一个或多个字符。

3.可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。在C语言中没有相应的字符串变量。

4.字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字符数加1。增加的一个字节中存放字符‘\0’(ASCII码为0)。这是字符串结束的标志。

2.5 各类数值型数据之间的混合运算

整型、单精度型、双精度型数据可以混合运算。前已述及,字符型数据可以和整型数据通用,因此,整型、实型(包括单、双精度)、字符型数据间可以混合运算。例如:10+’a’+1.5-12.34*’b’

是合法的。在进行运算时,不同类型的数据要转换成同一类型,然后进行运算。转换的方法有两种,一种是自动转换,一种是强制转换。

1.自动转换

自动转换发生在不同类型的数据混合运算时,由编译系统自动完成。自动转换遵循以下规则:

(1)若参与运算量的类型不同,则先转换成同一类型,然后进行运算。

(2)转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。

(3)所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。

(4) char型和short型参与运算时,必须先转换成int型。

(5)在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。图2-1表示了类型自动转换的规则。

图中横向向左的箭头表示必定发生的转换,如字符型数据必先转成整型,单精度数据

先转成双精度数据,等等。

图2-1 类型转换方向

图中纵向的箭头表示当运算对象为不同的类型时转换的方向。例如整型与双精度型数据进行运算,先将整型数据转换成双精度型数据,然后在两个同类型数据(双精度)间进行运算,结果为双精度型。注意箭头方向只表示数据类型级别的高低,由低向高转换。不要理解为整型先转成无符号型,再转成长整形,再转成双精度型。如果一个整型数据与一个双精度型数据运算,是直接将整型转成双精度型。同理,一个整型数据与一个长整型数据运算,先将整型转成长整型。

换言之,如果有一个数据是单精度型或双精度型,则另一数据要先转成双精度型,结果为双精度型。如果两个数据中最高级别为长整型,则另一数据转成长整型,结果为长整型。其它依此类推。假设i已指定为整型变量,f为单精度实型变量,d为双精度实型变量,e为长整型变量,有下面式子:

10+’a’+i*f-d/e

运算次序为:

1.进行10+’a’的运算,先将’a’转换成整数97,运算结果为107。

2.进行i*f的运算,先将’i’和’f’都转换成双精度型,运算结果为双精度型。

3.整数107和i*f的积相加,先将整数107转换成双精度型(107.000000),运算结果为双精度型。

4.进行d/e的运算,先将e转换成双精度型,运算结果为双精度型。

5.将10+’a’+i*f的结果与d/e的商相减,结果为双精度型。

上述的类型转换是由系统自动进行的。

2.强制转换

强制类型转换是通过类型转换运算来实现的。其一般形式为:

(类型说明符) (表达式)

其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。例如:(float) a 把a转换为实型,(int)(x+y) 把x+y的结果转换为整型。

在使用强制转换时应注意以下问题:

(1)类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。

(2)无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。

【例2-9】

main( )

{

float f=5.75;

printf("(int)f=%d,f=%f\n",(int)f,f);

}

运行结果:

(int)f=5,f=5.75

本例表明,f虽强制转为int型,但只在运算中起作用,是临时的,而f本身的类型并不改变。因此,(int)f的值为 5(删去了小数),而f的值仍为5.75。

本章小结

数据是程序加工的对象,数据描述是通过数据类型来完成的, C语言不仅提供了基本类型、构造类型、指针类型和空类型等多种数据类型,还提供了构造更加复杂的用户自定义数据结构的机制。

基本类型的数据又可分为常量和变量,它们可与数据类型结合起来分类,即为整型常量、整型变量、实型(浮点型)常量、实型(浮点型)变量、字符常量、字符串常量、字符变量、枚举常量、枚举变量。

不同类型的数据在计算机中所占的存储空间及数据组织方式不同,因此它们的取值范围及精度也不相同。

不同类型的数据在进行混合运算的时候,要转成相同的类型参与运算,转换的形式有自动转换和强制转换两种。

习题

1.复习《计算机基础》课程中关于各种数制相互转换的知识。

2.试比较常量与变量的关系?

3.用转义字符有什么好处?

4.使用符号常量有何好处?使用时应注意什么问题?

5.对照变量类型与常量类型,哪些是相同的,那些是常量所独有的?

6.下列选项中,可以作为C语言常量的是()

A) 13.8e B) 1/2 C) ‘M’ D) ”abc”

7.下列选项中,不可以作为C语言常量的是()

A) .88 B) 35.6e3 C) 4e-2 D) 3/5

8.下列选项中,正确的一组程序是()

A) char a; B) char b; C) char c; D) char d

A=’M’; b=’55’; c=”M”; d=”55”

9.已知字母’b’的ASCII码值为98,如ch为字符型变量,则表达式

ch=’b’+’5’-‘2’的值为()

A) e B) d C) 102 D) 100

10.下列程序的运行结果是()

main( )

{

char c1=’6’,c2=’0’;

printf(“%c,%c,%d\n”,c1,c2,c1-c2);

}

A)因程序格式不合法,提示出错信息。

B)6,0,6

C)6,0,7

D)6,0,5

11. 以下程序的输出结果是()

main( )

{

int x=010,y=10,z=0x10;

printf(“%d,%d,%d\n”,x,y,z);

}

A)8,10,16

B)8,10,10

C)10,10,10

D)10,10,16

C语言关键字共32个

由ANSI标准定义的C语言关键字共32个: auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if while static 根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两大类。 1数据类型关键字 A.基本数据类型(5个) void:声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果 char:字符型类型数据,属于整型数据的一种 int:整型数据,通常为编译器指定的机器字长 float:单精度浮点型数据,属于浮点数据的一种 double:双精度浮点型数据,属于浮点数据的一种 B.类型修饰关键字(4个) short:修饰int,短整型数据,可省略被修饰的int。 long:修饰int,长整形数据,可省略被修饰的int。 signed:修饰整型数据,有符号数据类型 unsigned:修饰整型数据,无符号数据类型 C.复杂类型关键字(5个) struct:结构体声明 union:共用体声明 enum:枚举声明 typedef:声明类型别名 sizeof:得到特定类型或特定类型变量的大小 D.存储级别关键字(6个) auto:指定为自动变量,由编译器自动分配及释放。通常在栈上分配 static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部 register:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数 extern:指定对应变量为外部变量,即标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 const:与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变) volatile:与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值 2流程控制关键字

C语言的数据类型→浮点型数据

C语言的数据类型→浮点型数据 一、浮点型常量的表示方法: C语言中的浮点数(floating point unmber)就是平常所说的实数。 浮点数有两种表示形式: (1)、十进制小数形式。它由数字和小数点组成(注意必须有小数点)。 如:0.123 、 123.、123.0、0.0 都是十进制小数形式。 (2)、指数形式。 如:123e3或123E3都代表123*103。 注意字母e(或E)之前必须有数字,且e后面的指数必须为整数,如e3、 2.1e 3.5、 e3、 e 等都不是合法的指数形式。 一个浮点数可以有多种指数表示形式。例如123.456e0、 12.3456e1、1.23456e2 、 0.123456e3 、 0.0123456e4 、 0.00123456e5等。其中的1.23456e2称为“规范化的指数形式”。即在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字。例如2.3478e2 、 3.099E5 、 6.46832E12都属于规范化的指数形式,而

12.908e10 、0.4578E3 、 756e0则不属于规范化的指数形式。一个浮点数在用指数形式输出时,是规范化的指数形式输出的。例如。若指定将实数5689.65按指数形式输出。输出的形式是5.68965e+003,而不会是0.568965e+004或56.8965e+002。 二、浮点型变量 一个浮点型数据一般在内存中4个字节(32位)。与整型数据的存储方式不同,浮点型数据是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。例如:实数3.14159在内存中的存放形式可以用下图来表示: 1、浮点型变量在内存中的存放形式。 上图使用十进制数来表示的,实际上在计算机中是用二进制数来表示小数部分以及用2的幂次来表示指数部分的。

c语言数据类型关键字

1 数据类型关键字(12个): (1) char :声明字符型变量或函数 (2) double :声明双精度变量或函数 (3) enum :声明枚举类型 (4) float:声明浮点型变量或函数 (5) int:声明整型变量或函数 (6) long :声明长整型变量或函数 (7) short :声明短整型变量或函数 (8) signed:声明有符号类型变量或函数 (9) struct:声明结构体变量或函数 (10) union:声明联合数据类型 (11) unsigned:声明无符号类型变量或函数 (12) void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)(2)控制语句关键字(12个): A循环语句 (1) for:一种循环语句(可意会不可言传) (2) do :循环语句的循环体 (3) while :循环语句的循环条件 (4) break:跳出当前循环 (5) continue:结束当前循环,开始下一轮循环 B条件语句 (1)if: 条件语句 (2)else :条件语句否定分支(与if 连用) (3)goto:无条件跳转语句 C开关语句 (1)switch :用于开关语句 (2)case:开关语句分支 (3)default:开关语句中的“其他”分支 D return :子程序返回语句(可以带参数,也看不带参数) 3 存储类型关键字(4个) (1)auto :声明自动变量一般不使用 (2)extern:声明变量是在其他文件正声明(也可以看做是引用变量) (3)register:声明积存器变量 (4)static :声明静态变量 4 其它关键字(4个): (1)const :声明只读变量 (2)sizeof:计算数据类型长度 (3)typedef:用以给数据类型取别名(当然还有其他作用 (4)volatile:说明变量在程序执行中可被隐含地改变

C语言的基本数据类型及其表示

3.2 C语言的基本数据类型及其表示 C语言的基本数据类型包括整型数据、实型数据和字符型数据,这些不同数据类型如何表示?如何使用?它们的数据范围是什么?下面我们分别进行介绍。 3.2.1 常量与变量 1. 常量 常量是指程序在运行时其值不能改变的量,它是C语言中使用的基本数据对 象之一。C语言提供的常量有: 以上是常量所具有的类型属性,这些类型决定了各种常量所占存储空间的大小和数的表示范围。在C程序中,常量是直接以自身的存在形式体现其值和类型,例如:123是一个整型常量,占两个存储字节,数的表示范围是-32768~32767;123.0是实型常量,占四个存储字节,数的表示范围是-3.4 10-38~3.4 1038。 需要注意的是,常量并不占内存,在程序运行时它作为操作对象直接出现在运算器的各种寄存器中。 2.符号常量 在C程序中,常量除了以自身的存在形式直接表示之外,还可以用标识符来表示常量。因为经常碰到这样的问题:常量本身是一个较长的字符序列,且在程序中重复出现,例如:取常数的值为3.1415927,如果在程序中多处出现,直接使用3.1415927的表示形式,势必会使编程工作显得繁琐,而且,当需要把的值修改为3.1415926536时,就必须逐个查找并修改,这样,会降低程序的可修改性和灵活性。因此,C语言中提供了一种符号常量,即用指定的标识符来表示某个常量,在程序中需要使用该常量时就可直接引用标识符。 C语言中用宏定义命令对符号常量进行定义,其定义形式如下: #define 标识符常量 其中#define是宏定义命令的专用定义符,标识符是对常量的命名,常量可以是前面介绍的几种类型常量中的任何一种。该使指定的标识符来代表指定的常量,这个被指定的标识符就称为符号常量。例如,在C程序中,要用PAI代表实型常量3.1415927,用W代表字符串常量"Windows 98",可用下面两个宏定义命令: #define PAI 3.1415927 #define W "Windows 98" 宏定义的功能是:在编译预处理时,将程序中宏定义(关于编译预处理和宏定义的概念详见9.10节)命令之后出现的所有符号常量用宏定义命令中对应的常量一一替代。例如,对于以上两个宏定义命令,编译程序时,编译系统首先将程序中除这两个宏定义命令之外的所有PAI替换为3.1415927,所有W替换为Windows 98。因此,符号常量通常也被称为宏替换名。 习惯上人们把符号常量名用大写字母表示,而把变量名用小写字母表示。例3-1是符号常量的一个简单的应用。其中,PI为定义的符号常量,程序编译时,用3.1416替换所有的PI。 例3-1:已知圆半径r,求圆周长c和圆面积s的值。

C语言中数据类型

C语言中数据类型(整形,浮点型,字符型,无值型)2007年04月19日星期四上午11:29整型(int) 一、整型数说明 加上不同的修饰符, 整型数有以下几种类型; signed short int 有符号短整型数说明。简写为short或int, 字长为2字节共16位二进制数, 数的范围是-32768~32767。 signed long int 有符号长整型数说明。简写为long, 字长为4字节共32位二进制数, 数的范围是-2147483648~2147483647。 unsigned short int 无符号短整型数说明。简写为unsigned int, 字长为2字节共16位二进制数, 数的范围是0~65535。 unsigned long int 无符号长整型数说明。简写为unsigned long, 字长为4字节共32位二进制数, 数的范围是0~4294967295。 二、整型变量定义 可以用下列语句定义整型变量 int a, b; /*a、b被定义为有符号短整型变量*/ unsigned long c; /*c被定义为无符号长整型变量*/ 三、整型常数表示 按不同的进制区分, 整型常数有三种表示方法: 十进制数: 以非0开始的数 如:220, -560, 45900 八进制数: 以0开始的数 如:06; 0106, 05788 十六进制数:以0X或0x开始的数 如:0X0D, 0XFF, 0x4e 另外, 可在整型常数后添加一个"L"或"l"字母表示该数为长整型数, 如22L,0773L, 0Xae4l。 浮点型(float) 一、浮点数说明 Turbo C中有以下两种类型的浮点数: float 单浮点数。字长为4 个字节共32 位二进制数, 数的范围是3.4x10-38E~3.4x10+38E。double 双浮点数。字长为8个字节共64 位二进制数, 数的范围是1.7x10-308E~1.7x10+308E。 说明: 浮点数均为有符号浮点数, 没有无符号浮点数。 二、浮点型变量定义 可以用下列语句定义浮点型变量: float a, f; /*a, f被定义为单浮点型变量*/ double b; /*b被定义为双浮点型变量*/

C语言的基本数据类型及其表示

3.2C语言的基本数据类型及其表示 C语言的基本数据类型包括整型数据、实型数据和字符型数据,这些不同数据类型如何表示?如何使用?它们的数据范围是什么?下面我们分别进行介绍。 3.2.1常量与变量 1.常量 常量是指程序在运行时其值不能改变的量,它是C语言中使用的基本数据对 象之一。C语言提供的常量有: 以上是常量所具有的类型属性,这些类型决定了各种常量所占存储空间的大小和数的表示范围。在C程序中,常量是直接以自身的存在形式体现其值和类型,例如:123是一个整型常量,占两个存储字节,数的表示范围是-32768~32767;123.0是实型常量,占四个存储字节,数的表示范围是-3.410-38~3.41038。 需要注意的是,常量并不占内存,在程序运行时它作为操作对象直接出现在运算器的各种寄存器中。 2.符号常量 在C程序中,常量除了以自身的存在形式直接表示之外,还可以用标识符来表示常量。因为经常碰到这样的问题:常量本身是一个较长的字符序列,且在程序中重复出现,例如:取常数的值为3.1415927,如果在程序中多处出现,直接使用3.1415927的表示形式,势必会使编程工作显得繁琐,而且,当需要把的值修改为3.1415926536时,就必须逐个查找并修改,这样,会降低程序的可修改性和灵活性。因此,C语言中提供了一种符号常量,即用指定的标识符来表示某个常量,在程序中需要使用该常量时就可直接引用标识符。 C语言中用宏定义命令对符号常量进行定义,其定义形式如下: #define标识符常量 其中#define是宏定义命令的专用定义符,标识符是对常量的命名,常量可以是前面介绍的几种类型常量中的任何一种。该使指定的标识符来代表指定的常量,这个被指定的标识符就称为符号常量。例如,在C程序中,要用PAI代表实型常量3.1415927,用W代表字符串常量"Windows98",可用下面两个宏定义命令: #define PAI3.1415927 #define W"Windows98" 宏定义的功能是:在编译预处理时,将程序中宏定义(关于编译预处理和宏定义的概念详见9.10节)命令之后出现的所有符号常量用宏定义命令中对应的常量一一替代。例如,对于以上两个宏定义命令,编译程序时,编译系统首先将程序中除这两个宏定义命令之外的所有PAI替换为3.1415927,所有W替换为Windows98。因此,符号常量通常也被称为宏替换名。 习惯上人们把符号常量名用大写字母表示,而把变量名用小写字母表示。例3-1是符号常量的一个简单的应用。其中,PI为定义的符号常量,程序编译时,用3.1416替换所有的PI。 例3-1:已知圆半径r,求圆周长c和圆面积s的值。

C语言数据类型及表示范围

C语言各种数据类型在系统中占的字节和取值围 基本类型包括字节型(char)、整型(int)和浮点型(float/double)。 定义基本类型变量时,可以使用符号属性signed、unsigned(对于char、int),和长度属性short、long(对于int、double)对变量的取值区间和精度进行说明。 下面列举了Dev-C++下基本类型所占位数和取值围: 符号属性长度属性基本型所占位数取值围输入符举例输出符举例-- -- char 8 -2^7 ~ 2^7-1 %c %c、%d、%u signed -- char 8 -2^7 ~ 2^7-1 %c %c、%d、%u unsigned -- char 8 0 ~ 2^8-1 %c %c、%d、%u [signed] short [int] 16 -2^15 ~ 2^15-1 %hd unsigned short [int] 16 0 ~ 2^16-1 %hu、%ho、%hx [signed] -- int 32 -2^31 ~ 2^31-1 %d unsigned -- [int] 32 0 ~ 2^32-1 %u、%o、%x [signed] long [int] 32 -2^31 ~ 2^31-1 %ld unsigned long [int] 32 0 ~ 2^32-1 %lu、%lo、%lx [signed] long long [int] 64 -2^63 ~ 2^63-1 %I64d unsigned long long [int] 64 0 ~ 2^64-1 %I64u、%I64o、%I64x -- -- float 32 +/- 3.40282e+038 %f、%e、%g -- -- double 64 +/- 1.79769e+308 %lf、%le、%lg %f、%e、%g -- long double 96 +/- 1.79769e+308 %Lf、%Le、%Lg 几点说明: 1. 注意! 表中的每一行,代表一种基本类型。“[]”代表可省略。 例如:char、signed char、unsigned char是三种互不相同的类型; int、short、long也是三种互不相同的类型。可以使用C++的函数重载特性进行验证,如: void Func(char ch) {} void Func(signed char ch) {} void Func(unsigned char ch) {} 是三个不同的函数。

C语言-基本数据类型

C语言-基本数据类型 在我们玩游戏的时候,游戏中的角色是有类型的,有敏捷型、力量型、法术型等等。同样C语言中的数据也是有类型的,C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。如图所示: 这里我们先给大家讲解基本数据类型中最简单也是最常用的整型、实型与字符型。 整型数据是指不带小数的数字。生活中有很多信息适合使用整型数据来表示,比如:人的年龄、班级的人数、书的总页数等等。因此整型的类型比较多:

注:int、short int、long int是根据编译环境的不同,所取范围不同。而其中short int和long int至少是表中所写范围,但是in t在表中是以16位编译环境写的取值范围。另外c语言int的取值范围在于他占用的字节数,不同的编译器,规定是不一样。ANSI标准定义int是占2个字节,TC是按ANSI标准的,它的int是占2个字节的。但是在VC里,一个int是占4个字节的。 浮点数据是指带小数的数字。生活中有很多信息适合使用浮点型数据来表示,比如:人的体重(单位:公斤)、商品价格、圆周率等等。因为精度的不同又分为3种: 注:C语言中不存在字符串变量,字符串只能存在字符数组中,这个后面会讲。 任务 小明今年15岁,身高只有162CM,可是体重已经有82.5公斤了,小明是否属于肥胖儿童呢?我们如何用程序描述这个情形呢?

在右边编辑器中 在第4、5、6行中将变量的类型补全 运行结果: ?不会了怎么办 年龄和身高可以使用int类型,体重带有小数,可以使用float或d ouble类型;是否属于肥胖儿童,可以使用’y’或者’n’字符类型来表示

C语言的32个关键字和9种控制语句

C语言的32个关键字和9种控制语句 C语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。 1 数据类型关键字(12个): (1) char :声明字符型变量或函数 (2) double :声明双精度变量或函数 (3) enum :声明枚举类型 (4) float:声明浮点型变量或函数 (5) int:声明整型变量或函数 (6) long :声明长整型变量或函数 (7) short :声明短整型变量或函数 (8) signed:声明有符号类型变量或函数 (9) struct:声明结构体变量或函数 (10) union:声明共用体(联合)数据类型 (11) unsigned:声明无符号类型变量或函数 (12) void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用) 2控制语句关键字(12个): A循环语句 (1) for:一种循环语句(可意会不可言传) (2) do :循环语句的循环体 (3) while :循环语句的循环条件 (4) break:跳出当前循环 (5) continue:结束当前循环,开始下一轮循环 B条件语句 (1)if: 条件语句 (2)else :条件语句否定分支(与if 连用) (3)goto:无条件跳转语句 C开关语句 (1)switch :用于开关语句 (2)case:开关语句分支 (3)default:开关语句中的“其他”分支 D返回语句 return :子程序返回语句(可以带参数,也看不带参数) 3 存储类型关键字(4个) (1)auto :声明自动变量一般不使用 (2)extern:声明变量是在其他文件正声明(也可以看做是引用变量)

C语言数据类型与表达式习题及答案

第一章数据类型,运算符与表达式 一.选择题 1.不合法的常量是A。 A)‘/2’B) “”C)‘’D)“483” 2. B 是C语言提供的合法的数据类型关键字。 A)Float B)signed C)integer D)Char 3.在以下各组标识符中,合法的标识符是(1)A,(2) C ,(3) D 。 (1)A)B01 B)table_1 C)0_t D)k% Int t*.1 W10 point (2)A)Fast_ B)void C)pbl D) Fast+Big abs fabs beep (3)A)xy_ B)longdouble C)*p D)CHAR 变量1 signed history Flaut 4. 不属于合法的C语言长整型常量的是 C 。 A)5876273 B)0L C)2E10 D)(long)5876273 7.下面选项中,均是合法浮点数的是 B 。 A)+1e+1 B)-0.60 C)123e D)-e3 5e-9.4 12e-4 1.2e-.4 .8e-4 03e2 -8e5 +2e-1 5.e-0 8.在C语言中,要求参加运算的数必须是整数的运算符是 C 。 A)/ B)* C)% D) = 9.在C语言中,字符型数据在内存中以 D 形式存放。 A)原码B)BCD码C)反码D)ASCII码10.下列语句中,符合语法的赋值语句是 C 。 A)a=7+b+c=a+7;B)a=7+b++=a+7; C)a=7+b,b++,a+7;D)a=7+b = c=a+7; 11. B 是非法的C语言转义字符。 A)‘\b’B)‘\0xf’C)‘\037’D)‘\’’12.对于语句:f=(3.0,4.0,5.0),(2.0,1.0,0.0);的判断中, B 是正确的。 A)语法错误B)f为5.0 C)f为0.0 D)f为2.0 13.与代数式x y u v ? ? 不等价的C语言表达式是A。 A)x*y/u*v B)x*y/u/v C)x*y/(u*v) D)x/(u*v)*y 14.在C语言中,数字029是一个 D 。 A)八进制数B)十六进制数C)十进制数D)非法数 16.对于char cx=?\039?;语句,正确的是A。 A)不合法B)cx的值是?\03? C)cx的值为四个字符D)cx的值为三个字符 17.若int k=7,x=12;则能使值为3的表达式是 D 。 A)x%=(k%=5) B)x%=(k-k%5) C)x%=k-k%5 D)(x%=k)-(k%=5) 18.为了计算s=10!(即10的阶乘),则s变量应定义为 C 。 A)int B)unsigned C)long D)以上三种类型均可

C语言基本数据类型及运算题库

第二章基本数据类型及运算 一、选择题 1. 若以下选项中的变量已正确定义,则正确的赋值语句是。 A) x1=26.8%3; B) 1+2=x2; C) x3=0x12; D) x4=1+2=3; 答案:C 2. 设变量x为float型且已经赋值,则以下语句中能够将x中的数值保留到小数点后面两位,并将第三位四舍五入的是。 A) x=x*100+0.5/100.0 B) x=(x*100+0.5)/100.0 C) x=(int)(x*100+0.5)/100.0 D) x=(x/100+0.5)*100.0 答案:C 3. 下列C语言中运算对象必须是整型的运算符是。 A) %= B) / C) = D) *= 答案:A 4. 若有以下程序段:int c1=1,c2=2,c3;c3=1.0/c2*c1;则执行后,c3中的值是。 A) 0 B) 0.5 C) 1 D) 2 答案:A 5. 设x和y均为int型变量,则以下语句:x+=y; y=x-y; x-=y; 的功能是。 A) 把x和y按从大到小排列 B) 把x和y按从小到大排列 C) 无确定结果 D) 交换x和y中的值 答案:D 6. 下列变量定义中合法的是。 A)short_a=1-.le-1; B)double b=1+5e2.5; C)long do=0xfdaL; D)float 2_and=1-e-3; 答案:A 7. 以下4个选项中,不能被看作是一条语句的是。 A) {;} B) a=0,b=0,c=0; C) if (a>0); D) if (b==0)m=1;n=2; 答案:D 8. 设x=1,y=-1,下列表达式中解为8的是。 A)x&y B)~x│x C)x^x D)x<<=3 答案:D 9. 在C语言中不合法的整数是。 A)20 B)0x4001 C)08 D)0x12ed 答案: C 10. 以下选项中不正确的实型常量是 A)2.607E-1 B)0.8103e0.2 C)-77.77 D)456e –2 答案:B) 11.若变量已正确定义并赋值,符合C语言语法的表达式是 A)a=a+7 B)a=7+b+c,a++ C)int(12.3%4) D)a=a+7=c+b 答案:B) 12.以下十六进制数中不合法的是 A)oxff B)0Xabc C)0x11 D)0x19

c语言关键字及常用符号

C语言关键字及常用符号 32个关键字 auto :声明自动变量 short :声明短整型变量或函数 int:声明整型变量或函数 long :声明长整型变量或函数 float:声明浮点型变量或函数 double :声明双精度变量或函数 char :声明字符型变量或函数 struct:声明结构体变量或函数 union:声明共用数据类型 enum :声明枚举类型 typedef:用以给数据类型取别名 const :声明只读变量 unsigned:声明无符号类型变量或函数 signed:声明有符号类型变量或函数 extern:声明变量是在其他文件中声明 register:声明寄存器变量 static :声明静态变量 volatile:说明变量在程序执行中可被隐含地改变 void :声明函数无返回值或无参数,声明无类型指针 if:条件语句 else :条件语句否定分支(与 if 连用) switch :用于开关语句 case:开关语句分支 for:一种循环语句 do :循环语句的循环体 while :循环语句的循环条件 goto:无条件跳转语句 continue:结束当前循环,开始下一轮循环 break:跳出当前循环 default:开关语句中的“其他”分支 sizeof:计算数据类型长度 return :子程序返回语句(可以带参数,也可不带参数)循环条件 数据类型 char:字符型 int:基本整型 short int:短整型 long int:长整型

unsigned:无符号型 unsigned long:无符号长整型 float:单精度实型 double:双精度实型 C语言常用转义字符表 转义字符含义ASCII码(16/10进制) \o 空字符(NULL) 00H/0 \n 换行符(LF) 0AH/10 \r 回车符(CR) 0DH/13 \t 水平制表符(HT) 09H/9 \v 垂直制表(VT) 0B/11 \a 响铃(BEL) 07/7 \b 退格符(BS) 08H/8 \f 换页符(FF) 0CH/12 \’单引号27H/39 \”双引号22H/34 \\ 反斜杠5CH/92 \? 问号字符3F/63 \ddd 任意字符三位八进制 \xhh 任意字符二位十六进制 字符常量中使用单引号和反斜杠以及字符常量中使用双引号和反斜杠时,都必须使用转义字符表示,即在这些字符前加上反斜杠。 在C程序中使用转义字符\ d d d或者\ x h h可以方便灵活地表示任意字符。C语言的运算符可分为以下几类: 算术运算符:用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。 关系运算符:用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六种。 逻辑运算符:用于逻辑运算。包括与(&&)、或(||)、非(!)三种。 位操作运算符:参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。 赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。 条件运算符:这是一个三目运算符,用于条件求值(?:)。

实验2 C语言基本数据类型

实验2 C语言基本数据类型 一、实验目的: 1.掌握C语言的基本数据类型(整型、字符型和实型)。 2.掌握C语言变量的定义和赋值方法。 3.进一步熟悉C程序的编辑、编译、连接和运行的过程。 二、实验内容: 1.验证性实验 (1) 分析下面程序结果,并上机验证(整型、字符型数据表示和输出)。 #include void main() { int x=010,y=10,z=0x10; /*前导中的'0'是数字0而不是字母o*/ char c1='M',c2='\x4d',c3='\115',c4=77,c; /*字符型数据表示*/ /* 整型数据的输出 */ printf("x=%o,y=%d,z=%x\n",x,y,z); /* 数据以原进制输出,注意是否有前导0或0x */ printf("x=%d,y=%d,z=%d\n",x,y,z); /* 数据以10进制输出,换算到10进制,结果对吗? */ /* 字符型数据的输出 */ printf("c1=%c,c2=%x,c3=%o,c4=%d\n",c1,c2,c3,c4); /* 数据以原进制输出,注意是否有前导0或0x */ printf("c1=%c,c2=%c,c3=%c,c4=%c\n",c1,c2,c3,c4); /*结果都是什么字符?,也就是说字符可以自由的表示成几种形式? */ printf("c1=%d,c2=%d,c3=%d,c4=%d\n",c1,c2,c3,c4); /*看看这些字符的10进制ASCII码,哦,ASCII码一样,同一种字符 */ /* 字符型数据参与算术运算 */ c=c1+32; /* 字符怎么参加了数学运算,哦,是字符对应的ASCII码-整数/*参与数学运算;结果还是一个整数-另外一个字符的ASCII码 */ printf("c=%c,c=%d\n",c,c); /*看看这个字符是什么?'M'+32就变为'm'了字母的大小写转换原来如此!*/ } (2)分析下面程序结果,并上机验证(整型、实型数据的表示、输入和输出)。 #include void main() { int i,j; float m,n; long x,y; unsigned int u,v; char c1,c2; scanf("%d,%d",&i,&j);

C语言数据类型及转换23页word文档

C语言的数据类型 C语言提供的数据结构,是以数据类型形式出现的。具体分类如下:1.基本类型 分为整型、实型(又称浮点型)、字符型和枚举型四种。 2.构造类型 分为数组类型、结构类型和共用类型三种。 3.指针类型。在第9章中介绍。 4.空类型 C语言中的数据,有常量和变量之分,它们分别属于上述这些类型。本章将介绍基本类型中的整型、实型和字符型三种数据。 2.3 常量和变量 2.3.1 常量 1.常量的概念 在程序运行过程中,其值不能被改变的量称为常量。 2.常量的分类 (1)整型常量 (2)实型常量 (3)字符常量。 (4)符号常量。 常量的类型,可通过书写形式来判别。 2.3.2 变量 1.变量的概念

在程序运行过程中,其值可以被改变的量称为变量。 2.变量的两个要素 (1)变量名。每个变量都必须有一个名字──变量名,变量命名遵循标识符命名规则。 (2)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。 3.标识符命名规则 (1)有效字符:只能由字母、数字和下划线组成,且以字母或下划线开头。 (2)有效长度:随系统而异,但至少前8个字符有效。如果超长,则超长部分被舍弃。 例如,由于student_name和student_number的前8个字符相同,有的系统认为这两个变量,是一回事而不加区别。 在TC V2.0中,变量名(标识符)的有效长度为1~32个字符,缺省值为32。 (3)C语言的关键字不能用作变量名。 注意:C语言对英文字母的大小敏感,即同一字母的大小写,被认为是两个不同的字符。 习惯上,变量名和函数名中的英文字母用小写,以增加可读性。 思考题:在C语言中,变量名total与变量名TOTAL、ToTaL、tOtAl等是同一个变量吗? 标识符命名的良好习惯──见名知意:

C语言基本数据类型简介

C语言基本数据类型简介 1.概述 C 语言包含的数据类型如下图所示: 2.各种数据类型介绍 2.1整型 整形包括短整型、整形和长整形。 2.1.1短整形 short a=1; 2.1.2整形 一般占4个字节(32位),最高位代表符号,0表示正数,1表示负数,取值围是 -2147483648~2147483647,在存中的存储顺序是地位在前、高位在后,例如0x12345678在存中的存储如下: 地址:0x0012ff780x0012ff790x0012ff7a0x0012ff7b 数据:78563412 定义:用int关键字,举例如下: int a=6; 2.1.3长整形 long a=10; 2.2浮点型 浮点型包括单精度型和双精度型。 2.2.1单精度型 浮点型,又称实型,也称单精度。一般占4个字节(32位), float a=4.5; 地址:0x0012ff780x0012ff790x0012ff7a0x0012ff7b 数据:00009040 2.2.2双精度型 一般占8个字节(64位) double a=4.5;

地址:0x0012ff780x0012ff790x0012ff7a0x0012ff7b0x0012ff7c 0x0012ff7d0x0012ff7e0x0012ff7f 数据:0000000000 001240 2.3字符类型 在各种不同系统中,字符类型都占一个字节(8位)。定义如下: char c='a'; 也可以用字符对应的ASCII码赋值,如下: char c=97; 3.数据类型与“模子” short、int、long、char、float、double 这六个关键字代表C 语言里的六种基本数据类型。 怎么去理解它们呢? 举个例子:见过藕煤球的那个东西吧?(没见过?煤球总见过吧)。那个东西叫藕煤器,拿着它在和好的煤堆里这么一咔,一个煤球出来了。半径12cm,12 个孔。不同型号的藕煤器咔出来的煤球大小不一样,孔数也不一样。这个藕煤器其实就是个模子。 现在我们联想一下,short、int、long、char、float、double 这六个东东是不是很像不同类型的藕煤器啊?拿着它们在存上咔咔咔,不同大小的存就分配好了,当然别忘了给它们取个好听的名字。 在32 位的系统上 short 短整型的存2 byte; int 整型的存4 byte; long 长整型的存4 byte; float 单精度浮点型的存4byte;仅能接收7位有效数字 double 双精度浮点型的存8 byte;可以接收16位有效数字 char字符型的存1 byte。 fabs单精度浮点型存4byte. (注意这里指一般情况,可能不同的平台还会有所不同,具体平台可以用sizeof 关键字测试一下) 很简单吧?咔咔咔很爽吧?是很简单,也确实很爽,但问题就是你咔出来这么多存块,你总不能

C语言关键字(详细)

auto:声明自动变量 struct:声明结构体变量或函数 union:声明共用数据类型 enum:声明枚举类型 typedef:用以给数据类型取别名 const:声明只读变量 extern:声明变量是在其他文件中声明register:声明寄存器变量 static:声明静态变量 volatile:说明变量在程序执行中可被隐含地改变goto:无条件跳转语句 short:声明短整型变量或函数 int:声明整型变量或函数 long:声明长整型变量或函数 float:声明浮点型变量或函数 double:声明双精度变量或函数 char:声明字符型变量或函数 unsigned:声明无符号类型变量或函数 signed:声明有符号类型变量或函数 void:声明函数无返回值或无参数,声明无类型指针 if:条件语句 else:条件语句否定分支(与if连用) switch:用于开关语句 case:开关语句分支 for:一种循环语句 do:循环语句的循环体 while:循环语句的循环条件 continue:结束当前循环,开始下一轮循环 break:跳出当前循环 default:开关语句中的“其他”分支 sizeof:计算数据类型长度

return:子程序返回语句(可以带参数,也可不带参数)循环条件 1数据类型关键字(12个): (1)char:声明字符型变量或函数 (2)double:声明双精度变量或函数 (3)enum:声明枚举类型 (4)float:声明浮点型变量或函数 (5)int:声明整型变量或函数 (6)long:声明长整型变量或函数 (7)short:声明短整型变量或函数 (8)signed:声明有符号类型变量或函数 (9)struct:声明结构体变量或函数 (10)union:声明共用体(联合)数据类型 (11)unsigned:声明无符号类型变量或函数 (12)void:声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用) 2控制语句关键字(12个): A循环语句 (1)for:一种循环语句(可意会不可言传) (2)do:循环语句的循环体 (3)while:循环语句的循环条件 (4)break:跳出当前循环 (5)continue:结束当前循环,开始下一轮循环 B条件语句 (1)if:条件语句 (2)else:条件语句否定分支(与if连用) (3)goto:无条件跳转语句

C语言基本数据类型及运算题库1

基本数据类型及运算 一、选择题 1.若以下选项中的变量已正确定义,则正确的赋值语句是。 A)x1=26.8%3;B)1+2=x2;C)x3=0x12;D)x4=1+2=3; 答案:C 2.设变量x为float型且已经赋值,则以下语句中能够将x中的数值保留到小数点后面两位,并将第三位四舍五入的是。 A)x=x*100+0.5/100.0B)x=(x*100+0.5)/100.0 C)x=(int)(x*100+0.5)/100.0D)x=(x/100+0.5)*100.0 答案:C 3.下列C语言中运算对象必须是整型的运算符是。 A)%=B)/C)=D)*= 答案:A 4.若有以下程序段:int c1=1,c2=2,c3;c3=1.0/c2*c1;则执行后,c3中的值是。 A)0B)0.5C)1D)2 答案:A 5.设x和y均为int型变量,则以下语句:x+=y;y=x-y;x-=y;的功能是。 A)把x和y按从大到小排列B)把x和y按从小到大排列 C)无确定结果D)交换x和y中的值 答案:D 6.下列变量定义中合法的是。 A)short_a=1-.le-1;B)double b=1+5e2.5; C)long do=0xfdaL;D)float2_and=1-e-3; 答案:A 7.以下4个选项中,不能被看作是一条语句的是。 A){;}B)a=0,b=0,c=0; C)if(a>0);D)if(b==0)m=1;n=2; 答案:D 8.设x=1,y=-1,下列表达式中解为8的是。 A)x&y B)~x│x C)x^x D)x<<=3 答案:D 9.在C语言中不合法的整数是。 A)20B)0x4001C)08D)0x12ed 答案:C 10.以下选项中不正确的实型常量是 A)2.607E-1B)0.8103e0.2C)-77.77D)456e–2 答案:B) 11.若变量已正确定义并赋值,符合C语言语法的表达式是 A)a=a+7B)a=7+b+c,a++ C)int(12.3%4)D)a=a+7=c+b 答案:B) 12.以下十六进制数中不合法的是 A)oxff B)0Xabc C)0x11D)0x19

C语言中各种数据类型长度

C语言中各种数据类型长度 C语言的基本数据类型有以下几个: int整型 char字符型 float单精度浮点型 double双精度浮点型 另外,在基本数据类型基础上附加一些限定词,得到扩充的数据类型。short,long可以应用到整型,unsigned可以应用到整型和字符型: short int(或short)短整型 long int(或long)长整型 unsigned int无符号整型 unsigned short无符号短整型 unsigned long无符号长整型 unsigned char无符号字符型 整型 C标准没有规定各类数据所占内存字节数,通常一个int型数据所占内存与计算机字长大小相同,为16位或32位,short型数据通常占16位,long 型数据是32位。每种编译器可以为硬件选择适合的长度,仅受一些限制,如short 和int型数据至少占16位,long型至少占32位,short型数据不能超过int 型数据的字节数,而int型不长于long型。 无符号的数总是正数或零,服从数学式子2n,其中n是这种类型的二进制位数。例如,int型是16位,它的数据取值范围在-32768-32767之间,而unsigned int型数据取值范围在0-65535之间。下表列出了不同机器上整型数据的取值范围。

16位机器32位机器 数据类型所占位数取值范围所占位数取值范围 int16-32768~ 32767 32-21亿~21亿 short16-32768~ 32767 16-32768~32767 long32-21亿~21亿32-21亿~21亿unsigned int160~65535320~42亿 unsigned short 160~65535160~65535 unsigned long320~42亿320~42亿 字符型 字符型数据存储时占用8位,它实际存储的是字符对应ASCII码(美国标准信息交换码American Standard Code for Information Interchange)。如一个char型数据'A',其ASCII码为65,故实际存储的内容是65。unsigued char 型数据取值范围为0-255,char型数据取值范围为-128-127。字符有符号或无符号是依赖于机器的,但是可打印的字符总是正的。 由于在内存中字符型数据是以ASCII码形式存放,其形式与整型类似,因而在C语言中,字符型数据与整型数据可以通用,字符型数据所有的性质与一字节整型量相同。

c语言基本数据类型

c语言基本数据类型short、int、long、char、float、double C 语言包含的数据类型如下图所示:

一、数据类型与“模子” short、int、long、char、float、double 这六个关键字代表C 语言里的六种基本数据类型。 怎么去理解它们呢? 举个例子:见过藕煤球的那个东西吧?(没见过?煤球总见过吧)。那个东西叫藕煤器,拿着它在和好的煤堆里这么一咔,一个煤球出来了。半径12cm,12 个孔。不同型号的藕煤器咔出来的煤球大小不一样,孔数也不一样。这个藕煤器其实就是个模子。 现在我们联想一下,short、int、long、char、float、double 这六个东东是不是很像不同类型的藕煤器啊?拿着它们在内存上咔咔咔,不同大小的内存就分配好了,当然别忘了给它们取个好听的名字。 在32 位的系统上short 咔出来的内存大小是2 个byte; int 咔出来的内存大小是4 个byte; long 咔出来的内存大小是4 个byte; float 咔出来的内存大小是4 个byte; double 咔出来的内存大小是8 个byte; char 咔出来的内存大小是1 个byte。 (注意这里指一般情况,可能不同的平台还会有所不同,具体平台可以用sizeof 关键字测试一下) 很简单吧?咔咔咔很爽吧?是很简单,也确实很爽,但问题就是你咔出来这么多内存块,你总不能给他取名字叫做x1,x2,x3,x4,x5…或者长江1 号,长江2 号…吧。它们长得这么像(不是你家的老大,老二,老三…),过一阵子你就会忘了到底哪个名字和哪个内存块匹配了(到底谁嫁给谁了啊?^_^)。所以呢,给他们取一个好的名字绝对重要。下面我们就来研究研究取什么样的名字好。 二、变量的命名规则 1、命名应当直观且可以拼读,可望文知意,便于记忆和阅读。 标识符最好采用英文单词或其组合,不允许使用拼音。程序中的英文单词一般不要太复杂,用词应当准确。

相关文档
最新文档