2.2 常量、变量和数据类型

考点3 标识符

真考链接

在试题中以选择题出现,要求判断哪些是合法的标识符,在选择题中的考核概率为40%。在操作题中常以填空题的形式出现,属重点识记知识点。

在C语言中,变量名、函数名、数组名等按照一定规则命名的符号称为标识符。

1.标识符的命名规则

C语言中,标识符的命名规则如下:

(1)合法的标识符只能由字母、数字或下划线组成;

(2)标识符的第一个字符必须是字母或下划线,不能是数字;

(3)要区分字母的大小写,如qQ被认为是两个不同的字符;

(4)标准C中没有限制标识符的长度,但有些C编译系统规定标识符只有前8位有效,如IBMPC的MSC。

下面的标识符是非法的:

  1m,str+1,i-1,a.a

下面的标识符是合法的:

  lm6,zhym_data,Data,_int

2.标识符的分类

C语言的标识符可以分为3类。

(1)关键字:C语言规定了一些专用的标识符,它们有着固定的含义,不能更改(见表2.1)。例如,int就是表达变量类型的标识符,它不能再用做变量名和函数名了。

(2)预定义标识符:这类标识符在C语言中和“关键字”一样也有特定的含义,这些类别分别为:

库函数的名字,如printf;

预编译处理命令,如define。

它和关键字最大的区别在于,C语言语法允许用户更改预定义标识符的作用,但这将使这些标识符失去系统规定的原来意思。建议用户不要随便更改这类标识符。

(3)用户标识符:由用户根据需要定义的标识符就是用户标识符。一般是给变量、函数、数组或文件等命名。选择变量名和其他标识符时,应注意做到“见名知义”,这样对提高程序可读性和可维护性是很重要的。

小提示

标识符的命名要区分字母的大小写,用户标识符不能与关键字相同。

真题精选

【例1】下面4个选项中,均是不合法的用户标识符的选项是(  )。

A.AP_0 do    B.floatla0 _A    C.b-agotoint    D._123 temp int

【答案】 C

【解析】合法的标识符只能由字母、数字或下划线组成。C选项中b-a出现非法字符“-”;goto和int均为关键字。故本题答案为C。

【例2】以下选项中不合法的标识符是(  )

A.print    B.FOR    C.&a    D._00

【答案】 C

【解析】合法的标识符只能由字母、数字或下划线组成。C选项中&a出现非法字符“&”。故本题答案为C。

【例3】下列选项中,可作为合法标识符的是(  )

A.1m    B.Data    C.str+1    D.i-1

【答案】 B

【解析】在编写程序时,标识符的作用是为函数、变量等命名。标识符的命名规则如下:

(1)合法的标识符只能由字母、数字或下划线组成。

(2)标识符的第一个字符必须是字母或下划线,不能是数字。

(3)要区分字母的大小写,如qQ是两个不同的变量。

【例4】在C中,可以作为用户标识符的是(  )。

A.void defineWORD    B.as_b3 _224 Else

C.Switch -wercase    D.4b DOSIG

【答案】 B

【解析】选项A中的void是C语言的关键字。选项C中的-wer前边有一个字符是减号,而case是关键字。选项D中的4b是以数字开头。

考点4 常量

真考链接

很少出现单独的题目针对考点4进行的考查,一般都是在考查别的知识点的题目中涉及本考点知识。考核概率为100%。

在程序运行中,其值不能被改变的量称为常量。常量有5种类型:整型常量、实型常量、字符常量、字符串常量和符号常量。

1.整型常量

整型常量有3种形式:十进制整型常量、八进制整型常量和十六进制整型常量。

下面举例说明几种常量的书写方式。

十进制整型常量:564,0,-23,85L等,基本数字范围为0~9。

八进制整型常量:061,037L,-026,0773等,基本数字范围为0~7。

十六进制整型常量:0x66,0x1101,0x,0x5AC0,-0xFF,基本数字范围为0~9,从10~15写为A~F或a~f。

其中L代表长整型。

2.实型常量

实型常量有两种表示形式:小数形式和指数形式。

十进制小数形式:45.3    0.000744    -623.0

指数形式:445.3e0    4.53e-3    -4.53e2

     4.53e1    0.453e-2    -453e0

     453.0e-1    453e-5    -0.453e3

3.字符常量

一个字符常量代表ASCII码字符集里的一个字符,在程序中用单撇号括起来,以便区分,如'a'、'p'、'$ '。

注意:“a”和“A”是两个不同的字符常量。

除了形式上的字符常量外,C语言还有特殊的字符常量,如转义字符常量'\n'。其中“\”是转义的意思,后面跟不同的字符表示不同的意思,具体请参阅表2.2。

表2.2 C语言的转义字符及其含义

4.字符串常量

字符串常量是用双撇号括起来的一个或一串字符。书写形式如"china"、"Howareyou"、""、"@shou"、"342mono"。注意它与字符常量的区别。

5.符号常量

符号常量是由预处理命令“#define”定义的常量,在C程序中可用标识符代表一个常量。其一般定义格式为:#define标识符常量。

小提示

一个字符如'a',如果以字符形式输出,则在屏幕上打印 'a',如果以整型数据输出,则在屏幕上打印相应的ASCII码。

(1)小数部分为0的实型常量,可以写为453.0 或依照人们日常习惯写为453。

(2)用小数表示时,小数点的两边必须有数,不能写成“.453”和“453.”,而应该写成“0.453”和“453.0”。

(3)用指数写法时,e前必须有数字,e后面的指数必须为整数。

真题精选

【例1】以下选项中不属于字符常量的是(  )。

A.'C'    B."C"    C.'\xCC'    D.'\072'

【答案】 B

【解析】在C语言程序中,用单引号把一个字符或反斜杠后跟一个特定的字符括起来表示一个字符常量。选项A、C、D为正确的字符常量。而选项B是用双引号括起来的字符,表示一个字符串常量。所以正确答案为B。

【例2】以下选项中不能作为C语言合法常量的是(  )。

A.'cd'    B.0.1e+6    C."\a"    D.'\011'

【答案】 A

【解析】在C语言程序中,用单引号把一个字符或反斜杠后跟一个特定的字符括起来表示一个字符常量。A选项中单引号里面有2个字符,所以A选项错误。

【例3】下列选项中,正确的整型常量是(  )

A.34.1    B.-80    C.2000    D.1 2 3

【答案】 B

【解析】本题是考查C语言的十进制整型常量。选项A后边有小数点,所以不对。选项C和选项D在数字间有逗号和空格,也显然不对。

【例4】下列给定程序中函数fun()的功能是:输入一圆,其直径为n,求出周长

请改正程序中的错误,使其得出正确的结果。

注意:不得增行或删行,也不得更改程序的结构。

试题程序:

#include <stdio.h>

/*****found*****/

#define PI 3.14159;

/*****found*****/

int fun(int n);

{ /*****found*****/

  PI = 3.14159;

  return PI * n;

【答案】错误1:define语句末尾不能加分号;错误2:函数之后不能加分号;错误3:常量不能赋值。

【解析】本题考查常量的定义

考点5 变量

真考链接

考点5在选择题属于必考内容。难度适中,要重点理解并掌握。考核概率为100%。

变量就是值可以改变的量。变量要有变量名,在内存中占据一定的存储单元,存储单元里存放的是该变量的值。不同类型的变量,其存储单元的大小不同,变量在使用前必须定义。

1.整型变量

整型变量分为4 种:基本型(int)、短整型(shortint或 short)、长整型(longint或 long)和无符号型(unsigned int,unsigned short,unsigned long)。

标准C没有具体规定各类数据所占内存的字节数,如基本型变量(int)在IBM PC机上占16位,在IBM370机上占32位,而在Honeywell机上则占36位。

现以IBM PC为例,说明各类整型变量所占的位数及可表达的数值范围,如表2.3所示。

表2.3 各类整型变量所表示的数的范围

2.实型变量

实型变量分为单精度类型(float)和双精度类型(double)两种。实型常量的定义:

  float a,b;

  double m;

在一般的系统中,float型数据在内存中占4个字节(32位),double型数据占8个字节(64位)。单精度实数提供7位有效数字,双精度实数提供15~16位有效数字。实型常量不分float型和double型,一个实型常量可以赋给一个float型或double型变量,但变量根据其类型截取实型常量中相应的有效数字。

3.字符变量

字符变量用来存放字符常量,字符变量用关键字char定义,每个字符变量中只能存放一个字符。

字符变量的定义形式:

  char cr1,cr2;

赋值:

  cr1 = 'm',cr2 = 'n';

将一个字符赋给一个字符变量时,并不是将该字符本身存储到内存中,而是将该字符对应的ASCII码存储到内存单元中。例如,字符 'A'的ASCII码为65,在内存中的存放形式如下:

  01000001

由于在内存中字符以ASCII码存放,它的存储形式和整数的存储形式类似,所以C语言中字符型数据与整型数据之间可以通用,一个字符能用字符的形式输出,也能用整数的形式输出,字符数据也能进行算术运算,此时相当于对它们的ASCII码进行运算。

小提示

不同精度类型的数据在内存中占的位数不同。如果要输出真实的值,需要采用相应的格式输出。

常见问题

常量和变量有什么区别?

在程序运行中,其值不能被改变的量称为常量。而变量是有变量名,其值可以改变的量,在内存中占据一定的存储单元,里面存放的是该变量的值。不同类型的变量,其存储单元的大小不同,变量在使用前必须定义。

真题精选

【例1】若函数中有定义语句:intk;则(  )

A.系统将自动给k赋初值0    B.这时k中的值无意义

C.系统将自动给k赋值-1    D.这时k中无任何值

【答案】 B

【解析】用int方法定义变量时,编译器仅为变量开辟存储单元,并没有在存储单元中存放任何值,此时变量中的值是不确定的,称变量值“无意义”。因此,本题正确答案为B。

【例2】下列选项中,正确的定义语句是(  )

A.doublea;b;    B.doublea=b =7;  C.doublea=7,b=7;   D.double,a,b;

【答案】 C

【解析】定义变量a和变量b为double类型,并对其赋初值。变量之间应该以“,”分隔,定义关键字与变量名之间应以空格分隔,语句应以“;”结尾。

【例3】C语言中,int类型变量所占字节数是(  )。

A.1    B.2    C.3    D.4

【答案】 B

【解析】C语言中int类型变量占两个字节,数值范围是-32 67

【例4】在C语言中定义了一个变量,该变量代表内存中的一个(  )

A.区域    B.单元    C.地址    D.容量

【答案】 C

【解析】C语言中定义的一个变量代表内存中的一个地址,也就是在内存中分配给这个变量一个单元,用来存放变量的值,这个内存单元的大小根据变量的类型不同而不同。

【例5】下列给定程序中函数fun()的功能是:求出以下分数序列的前n项之和。和值通过函数值返回。

21,32,53,85,138,2113,…

例如,若n=5,则应输出8.391667。

请改正程序中的错误,使其得出正确的结果。

注意:不得增行或删行,也不得更改程序的结构。

试题程序

#include <stdlib.h>

#include <conio.h>

#include <stdio.h>

double fun(int n)

{ int a=2,b=1,c,k;

  /*****found*****/

  int s=0.0;

  for(k=1;k< =n;k++)

  { /*****found*****/

    s=s+(Double)a/b;

    c=a;a=a+b;b=c;

  }

  return(s);

【答案】错误1:s应为double类型;错误2:double首字母应小写

【解析】注意数据类型double的书写格式