选择题
1.()是构成C语言程序的基本单位。
A、函数
B、过程
C、子程序
D、子例程
答案:A
2.C语言程序从()开始执行。
A、程序中第一条可执行语句
B、程序中第一个函数
C、程序中的main函数
D、包含文件中的第一个函数
答案:C
3.以下说法中正确的是()。
A、C语言程序总是从第一个定义的函数开始执行
B、在C语言程序中,要调用的函数必须在main( )函数中定义
C、C语言程序总是从main( )函数开始执行
D、C语言程序中的main( )函数必须放在程序的开始部分
答案: C
4.下列关于C语言的说法错误的是()。
A、C程序的工作过程是编辑、编译、连接、运行
B、C语言不区分大小写。
C、C程序的三种基本结构是顺序、选择、循环
D、C程序从main函数开始执行
答案:B
5.下列正确的标识符是()。
A、-a1
B、a[i]
C、a2_i
D、int t
答案:C
6.下列C语言用户标识符中合法的是()。
A、3ax B、x C、case D、-e2 E、union
答案:B
7.下列四组选项中,正确的C语言标识符是()。
A、%x B、 a+b C、 a123 D、 123
答案:C
8.下列四组字符串中都可以用作C语言程序中的标识符的是()。
A、print _3d db8 aBc
B、I\am one_half start$it 3pai
C、str_1 Cpp pow while
D、Pxq My->book line# His.age
答案:A
9.C语言中的简单数据类型包括()。
A、整型、实型、逻辑型
B、整型、实型、逻辑型、字符型
C、整型、字符型、逻辑型
D、整型、实型、字符型
答案:D
10.在C语言程序中,表达式5%2的结果是。
A、2.5 B、2 C、1 D、3
答案:C
答案解析:
%为求余运算符,该运算符只能对整型数据进行运算。且符号与被模数相同。5%2=1;5%(-2)=1;(-5)%2=-1;(-5)%(-2)=-1;
/为求商运算符,该运算符能够对整型、字符、浮点等类型的数据进行运算,5/2=2
11.如果int a=3,b=4;则条件表达式"a
A、3 B、4 C、0 D、1
答案:A
12.若int x=2,y=3,z=4 则表达式x A、4 B、3 C、2 D、0 E、1 答案:B 13.C语言中,关系表达式和逻辑表达式的值是()。 A、0 B、0或1 C、1 D、T或F 答案:B 14. 下面( )表达式的值为4. A、11/3 B、11.0/3 C、(float)11/3 D、(int)(11.0/3+0.5) 答案:D 答案解析: (1)相同数据类型的元素进行数学运算(+、-、*、/)得到结果还保持原数据类型。(2)不同数据类型的元素进行数学运算,先要统一数据类型,统一的标准是低精度类型转换为高精度的数据类型。 选项A,11与3为两个整数,11/3结果的数据类型也应为整数,因此将3.666666的小数部分全部舍掉,仅保留整数,因此11/3=3. 选项B,11.0为实数,3为整数,因此首先要统一数据类型,将整型数据3转换为3.0,转换后数据类型统一为实型数据,选项B变为11.0/3.0,结果的数据类型也应为实型数据,因此选项B 选项C,先将整数11强制类型转换,转换为实型11.0,因此选项C变为11.0/3,其后计算过程、结果与选项B同 选项D,首先计算11.0/3,其计算过程、结果与选项B同,得到 15.设整型变量a=2,则执行下列语句后,浮点型变量b的值不为0.5的是() A、 B、 C、 D、 答案:B 16. 若“int n; float f=13.8;”,则执行“n=(int)f%3”后,n的值是() A、1 B、4 C、4.333333 D、4.6 答案:A 答案解析: “(int)f“表示将f中的值强制类型转换为整型,即将13.8的小数部分舍掉,转换为13;然后计算13%3,结果为1,再将结果赋给变量n,因此n的值为1 17. 以下对一维数组a的正确说明是(): A、 C、 答案:D 答案解析: 类型符数组名[常量表达式] 类型符是指数组中数组元素的类型;数组名要符合标识符命名规则;常量表达式是指数组的长度(数组中包含元素的个数),其值只能是整数,不可以是变量,而且从1开始计数。 选项A,常量表达式只能放在中括号[ ]中 选项B,只有在对数组初始化(即赋值)的时候才可以省略数组的长度,B中并未对a进行初始化。 选项C,常量表达式不能为变量。 18.以下能对一维数组a进行初始化的语句是: ( ) A、 B、 C、 D、 答案:C 答案解析: 选项B,D,常量表达式只能放在中括号[ ]中 选项A,数组可以看做是若干个相同数据类型元素的有序集合,因此以集合的形式对其初始化,使用{ 19.在C语言中对一维整型数组的正确定义为()。 A、 C、 答案:D 20.已知:int a[10]; 则对a数组元素的正确引用是( )。 A、a[10] B、a[3.5] C、a(5) D、a[0] 答案:D 答案解析: 数组名[下标] 引用数组元素时,[ 选项A,超过了数组a的逻辑地址下标范围; 选项B,逻辑地址下标只能为整数 选项C,逻辑地址下标只能放在[ ]中 21.若有以下数组说明,则i=10;a[a[i]]元素数值是()。 A、10 B、9 C、6 D、5 答案:C 答案解析: 先算a[a[i]]内层的a[i],由于i=10,因此a[i]即a[10]. a[10]对应下面数组中的元素为9. 因此a[a[i]]即为a[9] a[9]对应下面数组中的元素为6. 因此a[9]即为6 22.若有说明:int a[][3]={{1,2,3},{4,5},{6,7}}; 则数组a的第一维的大小为: ( ) A、2 B、3 C、4 D、无确定值 答案:B 答案解析: 二维数组的一维大小,即指二维数组的行数,在本题中,按行对二维数组赋值,因此内层有几个大括号,数组就有几行 23.对二维数组的正确定义是() A、 B、 C、 D、 答案:C 答案解析: 类型符数组名[常量表达式][常量表达式] 二维数组可以看做是矩阵 类型符是指数组中数组元素的类型;数组名要符合标识符命名规则;第一个常量表达式是指数组的行数;第二个常量表达式是指数组的列数;常量表达式的值只能是整数,不可以是变量,而且从1开始计数。 一维数组初始化时可以省略数组长度 二维数组初始化时可以省略行数,但不能省略列数 选项A,B,都省略了列数 选项D,不符合二维数组定义的一般形式,行、列常量表达式应该放在不同的[]中 24.已知int a[3][4];则对数组元素引用正确的是____ A、a[2][4] B、a[1,3] C、a[2][0] D、a(2)(1) 答案:C 数组名[下标] [下标] 引用数组元素时,[ 因此a的行逻辑地址范围0~2;a的列逻辑地址范围0~3; 选项A,列逻辑地址下标超过范围 选项B,D,的引用形式不正确。 25.C语言中函数返回值的类型是由()决定的. A、函数定义时指定的类型 B、return语句中的表达式类型 C、调用该函数时的实参的数据类型 D、形参的数据类型 答案:A 26. 在C语言中,函数的数据类型是指( ) A、函数返回值的数据类型 B、函数形参的数据类型 C、调用该函数时的实参的数据类型 D、任意指定的数据类型 答案:A 27. 在函数调用时,以下说法正确的是() A、函数调用后必须带回返回值 B、实际参数和形式参数可以同名 C、函数间的数据传递不可以使用全局变量 D、主调函数和被调函数总是在同一个文件里 答案:B 28. 在C语言中,表示静态存储类别的关键字是: () A、auto B、register C、static D、extern 答案:C 29.未指定存储类别的变量,其隐含的存储类别为()。 A、auto B、static C、extern D、register 答案:A 30. 若有以下说明语句: 则下面的叙述不正确的是: ( D ) A、struct是结构体类型的关键字 B、struct student 是用户定义的结构体类型 C、num, score都是结构体成员名 D、stu是用户定义的结构体类型名 答案:D 31.若有以下说明语句: 则下面的叙述不正确的是_____. A、struct是声明结构体类型时用的关键字 B、struct date 是用户定义的结构体类型名 C、brithday是用户定义的结构体类型名 D、year,day 都是结构体成员名 答案:C 32.C语言源程序的基本单位是( )。 A、过程 B、函数 C、子程序 D、标识符 答案:B 33.下列程序的输出结果是( )。 A、5 B、1 C、0 D、不确定值 答案:C 34.假设变量a,b均为整型,表达式(a=5,b=2,a>b?a++:b++,a+b)的值是( )。 A、7 B、8 C、9 D、2 答案:B 35.设有如下程序段,下面描述中正确的是 ( )。 int k=10; while(k=0) k=k-1; A、循环执行一次 B、循环是无限循环 C、循环体语句一次也不执行 答案:C 36.以下程序的输出结果为( )。 A、 *** B、 *** *** *** *** C、 *** *** D、 * * * 答案:A 此处整形i的定义在mian函数外,意味着这是一个全局变量,所以,在里循环里面的i的值的改变也影响到了外循环的值。整个循环下来只有三次。 37.一个C程序的执行是从() A、本程序的main函数开始,到main函数结束 B、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C、本程序的main函数开始,到本程序文件的最后一个函数结束 答案:A 38.以下叙述正确的是() A、在C程序中,main函数必须位于程序的最前面 B、C程序的每行中只能写一条语句 C、C语言本身没有输入输出语句 D、在对一个C程序进行编译的过程中,可发现注释中的拼写错误 答案:C 39.以下叙述不正确的是() A、一个C源程序可由一个或多个函数组成 B、一个C源程序必须包含一个main函数 C、C程序的基本组成单位是函数 答案:D 40.变量的指针,其含义是指该变量的(). A、值 B、地址 C、名 D、一个标志 答案:B 41.C语言规定:在一个源程序中,main函数的位置() A、必须在最开始 B、必须在系统调用的库函数的后面 C、可以任意 D、必须在最后 答案:C 42.一个C语言程序是由() A、一个主程序和若干子程序组成 B、函数组成 C、若干过程组成 D、若干子程序组成 答案:B 43.C语言中注释的位置() A、必须在程序的最开始 B、必须在程序的结尾 C、可以在程序的任何位置 D、不可以写到main函数里面 答案:C 44.一个C语言程序包括()个main函数 A、1 B、2 C、4 D、任意多 答案:A 45.字符串“COMPUTER”占用()个储存单元 A、8 B、9 C、10 D、1 答案:B 46.有符号10进制整数的格式符为() A、C B、D C、E D、F 答案:B 47.短整型变量占用()个字节的储存空间 A、2 B、8 C、11 D、1 答案:A 48.字符“B”的ASCII值为() A、63 B、64 C、65 D、66 答案:D 49.当函数中有多条return语句出现时,程序执行到()条结束 A、第一条return B、最后一条return C、中间一条return D、全部执行完 答案:A 50. C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符() A、必须为字母 B、必须为下划线 C、必须为字母或下划线 D、可以是字母、数字和下划线中任一种字符 答案:C 51.下列()是合法的标识符 A、1DAY B、a>b C、_total D、#25 答案:C 52. 函数的类型是由()决定的 A、返回值类型 B、调用该函数时临时 C、调用函数的实参 D、函数的形式 答案:A 53.执行语句for(i=1;i++<4;),后变量i的值是() A、3 B、4 C、5 D、不定 答案:C 尽管判断4<4时已经结束循环,但是i还是进行了自增运算,所以i=5 54.下列程序的输出结果是() A、0 B、5 C、6 D、无法确定 答案:B 55.有以下程序 程序运行后的结果为() A、0 B、1 C、2 D、3 答案:C 56.有以下程序#include 程序运行后,输出的结果是() A、y=0 B、y=-1 C、y=1 D、while构成无限循环 答案:A 57.下列程序的执行结果是() A、6 B、5 C、11 D、10 答案:B 58.执行下列语句后,b的值为() int b=8 b+=b-=b*b; A、-240 B、64 C、112 D、-112 答案:D 注意运算顺序,先运算8*8,再就是b-=64,在此运算之后,-64赋给了b,最后就是b+=(-64),也就是(-64)+=(-64); 59.二进制语言是属于( ) A、面向机器语言 B、面向问题语言 C、面向过程语言 D、面向汇编语言 答案:A 60.下列语言中不属于面向过程的语言是( ) A、高级语言 B、低级语言 C、 C 语言 D、 PASCAL 语言 答案:B 答案解析: C语言和 PASCAL 61.下列字符中属于键盘符号的是( ) A、\ B、\n C、 \t D、 \b 答案:A 答案解析: 键盘符号是指键盘上有标记,并能在显示器上直接以其标记字样显示的字符。有许多键盘上有标记的符号,它们不是用于直接显示的,键入这种字符用于表示特定的意义,如常用的回车符。 62.下列字符列中,不是用来表达转义字符是 A、 \\ B、\' C、074 D、 \0 答案:C 答案解析: 转义字符有三种书写形式: 反斜杠字符后接上某个规定的字符; 反斜杠字符后接上3个八进制数字符; 反斜杠字符和字符 X 之后接上 1 至 2 个十六进制数字符。 后两种分别八进制数和十六进制数直接给出字符的ASCll值。 074 是八进制整数,不是转义字符。 63.不是 C 语言提供的合法关键字是() A、switch B、 begin C、 case D、 default 答案:B 64.下列字符列中,能作为单个标识符是() A、 ? a B、 a =2 C、 a.3 D、 a_3 答案:D 答案解析:在C语言中,规定标识符是这样一种字符序列,由英文字母或下线字符开始,后接任意个英文字母、下线字符和数字符组成。 65.在 C 语言中,下列说法中错误的是() A、函数定义可以分为两个部分:函数说明部分和函数体 B、主函数可以调用任何非主函数 C、任何非主函数可以调用其它任何非主函数 D、程序可以从任何函数开始执行 答案:D 答案解析: 每个C函数的定义分两部分,函数说明部分和函数体,所以A是正确的叙述。C语言中,函数可以递归调用,主函数可以调用程序中的任何函数,当然可以调用任何非主函数,所以B是一个正确的叙述。同样理由,C选项也是正确的。C 66.下列字符列中,可以作为“字符串常量”的是() A、ABC B、”ABC” C、‘abc’ D、‘a’ 答案:B 答案解析: C程序中,一个字符率常量是表示一个字符序列,书写时,用双引号在字符前后括住这个字符序列。所以只有“ABC”是一个正确的字符串常量,其余都不是。其中,ABC 67.在以字节存储字符的系统中,‘\n ’在内存占用的字节数是() A、1 B、2 C、3 D、4 答案:A 答案解析:一般来说,一个字符在内存中只占 68.字符串“xyz”在内存占用的字节数是() A、3 B、4 C、6 D、8 答案:B 答案解析: 字符串中的每个字符占1个字节,但C程序在存储字符串时,要在最后一个有效字符后面接上1个字符串结束的标记符‘\0’。这样,存储字符串常量“xyz”需要 69.在以下字符列中,合法的长整型常数是() A、0L B、4962710 C、0.054838743 D、2.1869el0 答案:A 答案解析: 为表示不同范围的整数,整型数据分短整型、基本型和长整型,并对三种整型内部表示的最高位的不同理解,又分别分成无符号和带符号两种。若要明确指明一个整数是长整型的,必须在整数之后接上字符‘L’。所以 70.一个char型数据,它的值在内存中存放的是() A、ASCll 代码值 B、BCD 代码值 C、内码值 D、十进制代码值 答案:A 答案解析: 计算机存储字符,通常是存储字符的某种代码值。有许多种字符编码的方法,最流行的是ASCII代码。在C语言中,Char 71.设变量 m,n,a,b,c,d 的初值均为 A、0,0 B、0,1 C、l,0 D、1,1 答案:C 答案解析: 编译总是倾向于把多个字符识别为一个运算符 72.设a 为 5,执行下列计算后,b 的值不为2的是() A、 b=a/2 B、 b=6-(--a) C、b=a%2 D、b=a<3?3:2 答案:C 答案解析: 73.执行语句“x=(a=3,b=a--);”后,X,a,b 的值依次为() A、3,3,2 B、2,3,2 C、3,2,3 D、2,3,3 答案:C 答案解析: > 计算表达式 74.设有代码“int a=3;”,则执行了语句“a+=a-= a*a;”后,变量a的值是() A、3 B、0 C、9 D、-12 答案:D 答案解析: 75.在以下一组运算符中,优先级最高的运算符是() A、<= B、= C、% D、&& 答案:C 答案解析:常规运算符的优先级自高到低的排列顺序是算术运算符、移位运算符、关系运算符。按位运算符、逻辑运算符、条件运算符、赋值运算符、逗号运算符。所以问题所给的四个运算符按优先级自高到低的排列顺序是%,<=,&&,=。 76.设整型变量 i 的值为 3,则计算表达式 i———i后表达式的值为() A、0 B、l C、2 D、表达式出错 答案:A 答案解析: 有些运算符只有一个字符,也有许多运算符由两个字符组成。特别是有些字符既可是单个字符的运算符,又能组成双字符的运算符。编译系统在识别源程序时,通常是尽量多地读入字符,能组成多字符单词的先尽量组成多字符单词。所以表达式 77.设整型变量 a 、 b 、 c 均为 2 ,表达式a+++b+++c++ 的结果是() A、6 B、9 C、8 D、表达式出错 答案:A 答案解析:与上一小题解答的理由相同,表达式a+++b+++c++被系统理解成:(a++)+(b++)+(c++)。 78.若已定义 x 和 y 为 double 类型,则表达式:x=l, y=x+3/2 结果是() A、l B、2 C、2.0 D、2.5 答案:C 注意++b 和b++的区别。b++是先以b的值参与运算, 1、结构化程序设计中的三大基本结构是顺序结构、选择结构、循环结构。 2、C语言的基本组成单位是函数。 一个C语言程序是由一个或多个函数组成,其中只有一个main函数。 与一般的变量不同,指针变量是用来存放内存地址的变量,如果一个指针变量的值是另一个变量的地址,则该指针变量指向那个变量。 5、自增、自减运算符的运算对象只能为变量,不能是常量和表达式。 6、计算机能直接识别和接受的二进制代码称为机器指令。 7、高级语言经历了非结构化的语言、结构化语言、面向对象语言三个发展阶段。 8、一个程序主要包括算法和数据结构两方面的内容。 9、一个有效的算法应该包括有穷性、确定性、有效性三个特点。 10、数据的两种表现形式为常量、变量。 11、函数的递归是指函数调用过程中出现直接或者间接调用函数本身。 12、C语言中调用函数时,将实参对应的值传递给形参。 13、C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。 14、表达式11/3+9%2的结果是4。 15、设int x=3,y=5;则执行printf(“%d\n”,!x&&y)后输出的结果为0 。 16、设int a=10,则执行printf(“%d\n”,++a)后输出的结果为11 。 1、C语言中的每条简单语句以分号作为结束符。对 2、C语言中的每条复合语句以花括号作为结束符。错 3、在C语言程序中,在行尾使用注释的开始标记符为一对单斜线字符。对 4、注释内容的开始所使用的标记符为/*,则注释内容的结束所使用的标记符为*/。对 5、在一个C语言程序文件中,若要包含一个头文件,则使用以百分号开始的预处理命令。错 6、用于输出表达式值的标准输出函数是printf()。对 7、当不需要函数返回任何值时,则需要使用保留字void作为函数的返回值类型。对 8、每个C程序文件在编译时可能出现有警告性错误,其对应的标识符为error。错 9、十进制数25表示成符合C语言规则的八进制数为31。错 10、十进制数25表示成符合C语言规则的十六进制数为0x19。对 11、在C语言中,转义字符'\n'表示一个换行符。对 12、执行“printf("%c",'F'-2);”语句后得到的输出结果为H。错 13、已知字符'C'的ASCII码为67,当执行“int x='C'+5;”语句后x的值为72。对 14、假定一个枚举类型的定义为“enum RB{ab,ac=3,ad,ae}x=ad;”,则x的值为2。错 15、float的类型长度为8。错 16、在C语言中,常数28和3.26具有相同的数据类型。错 17、若需要定义一个符号常量,并且使C语言能够进行类型检查,则应在定义语句的开始使用保留字const。对 18、使用const语句定义一个符号常量时,不必对它进行初始化。错 19、表达式45%13的值为3。错 20、假定x=5,则表达式2*x++的值为12。错 21、表达式(float)25/4的值为6。错 22、表达式x=x+1表示成增量表达式为++x。对 23、关系表达式(x!=0)的等价表达式为(x)。对 24、关系表达式x+y>5的相反表达式为x+y<=5。对 25、逻辑表达式(a>b || b==5)的相反表达式为(a>b && b==5)。错 26、若x=5,y=10,则x>y逻辑值为真。错 27、假定x=5,则执行“a=(x?10:20);”语句后a的值为10。对 28、带有随机函数的表达式rand()%20的值所在的区间范围是0~19。对 29、假定x=5,则执行“y=x++;”语句后,x的值为5。错 30、假定x=5,则执行“y=++x;”语句后,y的值为6。对
11.0 /3=3.666666
3.666666;再计算3.666666+0.5=4.166666,最后将4.166666强制类型转换为整型,即将其小数部分全部舍掉,结果为4b=1.0/a
b=(float)(1/a)
b=1/(float)a
b=1/(a\*1.0)
char a(10);
B、 int a[];
int k =5, a[k];
D、 char a[3]={‘a’,’b’,’c’}
int a[5]=(0,1,2,3,4,)
int a(5)={}
int a[3]={0,1,2}
int a{5}={10\*1}
}对其初始化,选项A用了().int a(10);
B、int n=10,a[n];
int n;a[n];
D、#define N 10 int a[N];
]中的下标为逻辑地址下标,只能为整数,可以为变量,且从0开始计数int
a[10]表示定义了一个包含10个整型数据的数组a,数组元素的逻辑地址下标范围为0~9,即a[0]
表示组中第1个元素; a[1] 表示组中第2个元素; a[2] 表示组中第3个元素; ......;a[9]
表示组中第10个元素.int a[12]={1,4,7,10,2,5,8,11,3,6,9,12};
int a[ ] [ ]={1,2,3,4,5,6};
int a[2] [ ]={1,2,3,4,5,6};
int a[ ] [3]={1,2,3,4,5,6};
int a[2,3]={1,2,3,4,5,6};
]中的下标为逻辑地址下标,只能为整数,可以为变量,且从0开始计数第一个[下标]表示行逻辑地址下标,第二个[下标]表示列逻辑地址下标。struct student
{
int num;
char name[ ];
float score;
}stu;
struct date
{
int year;
int month;
int day;
}brithday;
main( )
{
int a=7,b=5;
printf("%d ",b=b/a);
}
D、循环体语句执行一次int i;
void prt( )
{
for(i=5;i\<8;i++) printf("%c",'\*');
printf(" ");
}
main( )
{
for(i=5;i\<=8;i++) prt( );
}
fun(int a,int b,int c)
{
c=a\*b;
}
void main()
{
int c=5;
fun(2,3,c);
printf(“%d\\n”,c)
}
#include
void main()
{
int a=2,b=0;
if(!a)b++;
else if (a=1)b+=2;
else b+=3;
printf(“%d\\n”,b);
}
void main()
{
int y=10;
whihe (--y)
printf(“y=%d\\n”,y);
}
#include“stdio.h”
#include“string.h”
void main()
{
static chars[10]=“cgdh9\\0and”
ptintf(“%d\\n,strlen(s)”);
}
等程序设计语言都是高级语言,它们用于描述复杂加工的处理过程,所以也称它们是面向过程语言。低级语言是指机器语言和汇编语言,低级语言是面向机器的语言,而不是面向问题的语言。
为了能让C程序标记这种符号,程序采用转义字符的方式书写这种字符。如'\n'、'\t'
、'\b'都不是键盘字符,在C语言中,它们都得用转义字符来表达。
只有字符\才是键盘字符。
语言规,C 程序只有一个主函数,
并总是从主函数开始执行,不能从非主函数开始执行。所以,说程序可以从任何函数开始执行是错误的。
可作为标识符,字符‘a’是一个字符常量。所以解答是B。
1个字节,‘\n’是转义字符,其意义是换行符,它作为一个字符存储,在内存也只占 1
个字节。
4 个字节。所以解答是B。
0L
是一个长整型的整型常量,而4962710是基本整型数据,而对于用2个字节表示一个基本整型数据的系统来说,该整数将因超出范围而是一个错误的整数;0.054839743和2.1869el0
都是double型的实数。所以解答是A。
型数据也用ASCII代码表示。所以解答是A。
0,执行(m=a==b)||(n=c==d)后,m,n 的值是()
计算(m=a==b)||(n=c==d)的过程是先计算逻辑或的左运算分量(m=a==b)的值,由于赋位运算符的优先级比关系运算符==的优先级低,又先计算
a==b.因 a,b 均为 0 后,所以比较结果值为 1.将 1 赋给变量 m,使变量 m 的值变为 1
.同时这个赋值运算的结果也是 1,这样逻辑运算的左运算分量的值为
1.由于逻辑或运算的左运算分量值为
1,按照C语言对逻辑或运算优化计算的规定,不再计算逻辑或的右运算分量,而直接得到逻辑或运算的结果为
1 .由于逻辑或的右运算分量不曾计算过,所以变量 n
的值也不为变化。这样,上述表达式计算后,变量 m 的情为 1,变量 n 的值为0。
因两个整型数据相除,结果是整数,当a 的值为 5 时,计算表达式 b=a/2 后,使b
的值为2。计算表达式 b=6-(--a)是先计算子表达式(--a)的,先让 a 的值减 1 变成
4,并以减 1 后的 a 为子表达式的结果,所以子表达式的结果为 4,最后使b 的值为
2。在计算表达式 b= a%2 时,求余运算 a%2的结果为 1,最后使变量 b 的值为
1.计算表达式 b=a<3?3:2 时,先计算条件表达式 a<3?3:2,以 2
为结果,最后也使变量 b 的值为2。
x=(a=3,b=a--)时,先计算赋值号右端圆括号内的逗号表达式。逗号表达式要求各子表达式顺序计算,并以最后子表达式的值为整个逗号表达式的结果。所以该表达式计算时,先让变量
a 的值为 3,a--的值是 a 当时的值,以该值为结果赋给变量
b,并以该值为逗号表达式的值赋给变量 x,然后 a 的值被减少
1.所以计算该表达式后,使变量 x,a,b 的值依次为 3,2,3.
由于赋值运算符的结合性自右至左,语句“a+=a-=a*a;”的执行是先计算a*a,得到值
9,再计算 a-=a*a,使a的值为-6,接着计算 a+=a,使 a 的值为-12.所以解答是D。
i---i,被编译器理解为(i--)-i.另外,当表达式中某变量有后缀自增和自减运算时,先按变量的原值计算表达式,然后再对变量进行自增和自减运算。同样地,当表达式中某变量有前缀自增和自减运算时,先对变量进行自增和自减运算,然后再按变量的新值计算表达式。按这个约定,求表达式(i--)-i
是计算 i-i 的值为 0,然后再对 i 作自减运算。这样,表达式(i--)-i 的值为 0。
答案解析:由于变量 x 和 y 都是 double 类型,表达式 x=l, y=x+3/2 是先计算
x=1,由于 1 是整型的,x 是 double 类型的,该计算先将整数 1 转换成 double 类型的
1.0,并将 1.0 赋给变量 x.计算 y=x+3/2 是先求 3/2
的值,因是两整数相除,结果是整型值 1,然后在计算 x+1 时,也先将 1转换成
1.0,然后求得 x+l 的值为 2.0,最后将该值赋给变量 y,并得到整个表达式的值为 2.0.填空题
三、判断题