第三章 数据类型、运算符与表达式
一 单项选择题
1.下面四个选项中,均不是 c 语言关键字的选项是( )。
A) define IF Type
B) getc char printf
C) include scanf case
D) while go pow
由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
根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两大类。
一、数据类型关键字
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特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值
二、流程控制关键字
A跳转结构(4个)
- return:用在函数体中,返回特定值(或者是void值,即不返回值)
- continue:结束当前循环,开始下一轮循环
- break:跳出当前循环或switch结构
- goto:无条件跳转语句
B分支结构(5个)
lif:条件语句
- else:条件语句否定分支(与if连用)
- switch:开关语句(多重分支语句)
- case:开关语句中的分支标记
- default:开关语句中的“其他”分治,可选。
C循环结构(3个)
- for:for循环结构,for(1;2;3)4;的执行顺序为1->2->4->3->2...循环,其中2为循环条件
- do:do循环结构,do 1 while(2);的执行顺序是1->2->1...循环,2为循环条件
- while:while循环结构,while(1) 2;的执行顺序是1->2->1...循环,1为循环条件
以上循环语句,当循环条件表达式为真则继续循环,为假则跳出循环。
补充:
C语言中没有 string ,要想在C语言中使用字符串,就要在头文件里定义#include<string.h>(引用)而字符串在c++里的定义是#include<string>;在C/C++中使用字符串也就是定义时不一样,其他的都一样。string 是字符串,char是单个的字符。string相当于一个容器,char可以放在里面。string有结束符,char是没有的。string是c++里的,不是c里的。用string存储字符串时,不用设定字符串的长度,而char要设定。还有就是,string有很强很方便的功能,比如可以方便的赋值,方便的比较大小。
2.C 语言中的标识符只能由字母 、数字和下划线三种字符组成,且第一个字符( )。
A) 必须为字母
B) 必须为下划线
C) 必须为字母或下划线 //概念性的问题,记住即可
D) 可以是字母 、数字和下划线中任一种字符
3.下列四个选项中,均是 C 语言关键字的选项是( )。
A) auto enum include
B) switch typedef continue
C) signed union scanf
D) if struct type
//标黄均不是
4.下面四个选项中,均是不合法的用户标识符的选项是( )。
A) A P_0 do
B) float la0 _A //用户标识符不能是关键字
C) b-a goto int
D) _ 123 temp int //用户标识符不能是关键字
5.以下有 4 组用户标识符,其中合法的一组是( )。
A) For -sub Case //只能以字母或下划线开头
B) 4d DO Size //只能以字母或下划线开头
C) f2_G3 IF abc
D) WORD void define //用户标识符不能是关键字
6.下列选项中,合法的 C 语言关键字是( )。
A) VAR B) cher C) integer D) default
7.下面四个选项中,均是合法整型常量的选项是( )。
A) 160 -0xffff 011
B) -0xcdf 01a 0xe //要以0x开头
C) –01986 012 0668 //八进制数字为0-7
D) -0x48a 2e5 0xe //2e5是表示为浮点数常量,并不是整型常量
解释:
1. 八进制常量:开头必须是0,且八进制是0-7之间组成的数,例如,029就是错误的八进制表示方式。
2. 十六进制常量:0X开头,包含字母ABCDEF,不区分大小写,例如0x与0X一样,0Xaa与0xAA,都是正确的。(十六进制是一种基于16个数字的数制系统,它使用0-9的数字表示0-9的值,使用A-F的字母表示10-15的值)
3. 实数型常量:必须有小数点,例如定义double a=1就是错误的,必须写成double a=1.0,另外写成a=1,0中间是逗号,就更是错误的了。
8.下面四个选项中,均是正确的八进制数或十六进制数的选项是( )。
A) - 10 0x8f -011 //十进制
B) 0abc -017 0xc //十六进制要以0x开头
C) 010 -0x11 0xf1
D) 0a12 -0x123 -0xa //十六进制要以0x开头
9.设 C 语言中,一个 int 型数据在内存中占 2 个字节,则 unsigned int 型数据的取值范围为( )。
A) 0~255 B) 0~32767 C) 0~65535 D) 0~2147483647
解释:
在C语言中,一个int型数据通常占4个字节,但在这个特定的问题中,我们假设int型数据占2个字节。一个字节有8位,所以2个字节就有16位。因为unsigned int型数据是无符号的,所以它可以使用所有的16位来表示数值。因此,它的取值范围是从0到2的16次方减1,也就是0到65535
11.下面四个选项中,均是不合法的整型常量的选项是( )。
A) -0f1 -0xffff 0011 //十六进制要以0x开头
B) -0xcdf 017 12456
C) -018 999 5e2 //1.八进制为0-7 2.5e2为浮点数常量
D) -0x48eg -068 03f //1.十六进制字母为a~e不包含g 2.八进制为0-7
3.十六进制要以0x开头
e与E,表示以10为底数的幂数,且e与E后面必须跟整数,若是小数,也是错误的,例如3.2e1.5 ,这里1.5是小数,所以错的
浮点数的合法表示有两种形式:十进制小数形式和指数形式。
1. 十进制小数形式:由数字和小数点组成,必须有小数点。例如:0.123、.123、123.0、0.0、123.。
2. 指数形式:e或E之前后必须有数字;指数必须为整数。例如:123.456e0。
12.下面四个选项中,均是不合法的浮点数的选项是( )。
A) 160. 0.12 e3 //"e3" 是不合法的,因为它没有基数
B) 123 2e4.2 .e5 //1)123是整型常量 2)e后面必须输整数 3).e5没有基数
C) -.18 123e4 0.0
D) -e3 .234 1e3 //-e3没有基数
13.下面四个选项中,均是合法的浮点数的选项是( )。
A) +1e+1 5e-9.4 03e2 // "5e-9.4" 是不合法的,,"5e-9.4" 的指数 "-9.4" 不是整数。
B) -.60 12e-4 -8e5
C) 123e 1.2e-.4 +2e- 1 //"123e" 是不合法的,因为 e 后面没有数字。"1.2e-.4" 是不合法的,因为指数 "-.4" 不是整数。
D) -e3 .8e-4 5.e-0 //"-e3" 是不合法的,因为 e 前面没有数字
14.下列变量定义中合法的是( )。
A) short _a= 2e- 1;
B) double b=1+5e2.5; //`5e2.5` 的指数 `2.5` 不是整数
C) long do=0xfdaL; //`do` 是一个关键字
D) float 2_and=1-e-3; //变量名 `2_and` 以数字开头
解释:
变量定义的规则通常包括以下几点:
1. 变量名必须以字母(a-z,A-Z)或下划线(_)开头。
2. 变量名只能包含字母,数字和下划线。
3. 双精度浮点数的指数必须是整数。
4. 变量名不能是关键。
15. 以下选项中合法的字符常量是( )。
A) “B” B) ‘\010’ C) 68 D) D
解释:
字符常量是用单引号括起来的一个字符
A) “B” 是不合法的字符常量,因为它使用了双引号而不是单引号。
B) ‘\010’ 是合法的字符常量,它表示的是八进制的10,对应于ASCII表中的换行符。
C) 68 不是合法的字符常量,因为它没有使用单引号括起来。
D) D 是不合法的字符常量,因为它没有使用单引号括起来。
16. 以下选项中,非法的字符常量是( )。
A) '\t' B) '\ 17' C) "n" D) '\xaa'
解释:
字符常量为单引号而非双引号
17. 以下所列的 C 语言常量中,错误的是( )。
A) 0xFF B) 1.2e0.5 C) 2L D) ‘\72’
解释:
e后面应该为整数
18.在 C 语言中,char 型数据在内存中的存储形式是( )。
A) 补码 B) 反码 C) 原码 D) ASCII 码
19.下面四个选项中,均是合法转义字符的选项是( )。
A) ‘\’’ ‘\ ’ ‘\n ’ // '\’’ 表示单引号,’\’表示反斜杠,’\n’表示换行
B) ‘\ ’ ‘\017’ ‘\”’ //‘\ ’ 是不合法的,因为它后面没有跟字符
C) ‘\018’ ‘\f’ ‘xab ’ //不加0,且八进制为0-7 ,xab没有反斜杠开头
D) ‘\\0’ ‘\ 101’ ‘xlf’ //多了一杠只需’\0’即可, xlf没有反斜杠开头
合法转义字符
一般转义字符
\a 响铃
\b 退格
\f 换页
\n 换行
\r 回车
\t 水平制表
\v 垂直制表
\ 代表一个反斜线字符
\ ’ 代表一个单引号字符
\" 代表一个双引号字符
\0 空字符
八进制转义字符
它是由反斜杠\和随后的1~3个八进制数字构成的字符序列
十六进制转义字符
它是由反斜杠\和字母x(或X)及随后的1~2个十六进制数字构成的字符序列
(八进制转义字符和十六进制转义字符,不在前面加0!)
20.下面四个选项中,均是不合法的转义字符的选项是( )。
A) ‘\””’ ‘\\ ’ ‘\xf’ //1.2均不合法
B) ‘\ 1011’ ‘\ ’ ‘\a ’ //1.反斜杠后跟上1~3个八进制数字即可 2.\后没有跟字符 3.十六进制要以反斜杠开头
C) ‘\011’ ‘\f’ ‘\} ’ //3不合法
D) ‘\abc ’ ‘\ 101’ ‘xlf’ //1.十六进制要以\x表示 3.前面缺少反斜杠
21.下面正确的字符常量是( )。
A) “c” B) ‘\\’’ C) ‘W ’ D) ‘’
22.下面四个选项中,均是正确的数值常量或字符常量的选项是( )。
A) 0.0 0f 8.9e ‘& ’ //十六进制0x开头
B) ‘a ’ 3.9e-2.5 1e1 ‘\’’ //e后面是整数
C) ‘3’ 011 0xff00 0a //十六进制0x开头
D) +001 0xabcd 2e2 50.
23.下面不正确的字符串常量是( )
A) ‘abc ’ B) ” 1212” C) ”0” D) ” ”
解释:
字符串常量的定义:用双引号 (“”)括起来的0个或者多个字符组成的序列存储:每个字符串尾自动加一个 ‘\0’ 作为字符串结束标志
24.在 C 语言中(以 16 位 PC 机为例) ,5 种基本数据类型的存储空间长度的排列顺序为( )。
A) char<int<long int<=float<double
B) char=int<long int<=float<double
C) char<int<long int=float=double
D) char=int=long int<=float<double
解释:
char类型占用的存储空间最小,只有1个字节。
int类型占用的存储空间比char类型大,为2个字节。
long int类型占用的存储空间比int类型大,为4个字节。
float类型和long int类型占用的存储空间相同,都为4个字节。
double类型占用的存储空间最大,为8个字节。
25.若有说明语句:char c='\72';则变量 c( )。
A) 包含 1 个字符
B) 包含 2 个字符
C) 包含 3 个字符
D) 说明不合法 ,c 的值不确定
解释:
用单引号扩住,所以表示的应该是一个字符,此处的72为改字符对应的ASCII编码
26.设变量 a 是整型,f 是实型,i 是双精度型,则表达式 10+a+i*f 值的数据类型为( )。
A) int B) float C) double D) 不确定
解释:
根据C语言的类型转换规则,当不同类型的操作数参与运算时,会进行隐式类型转换。
隐式转换(Implicit Conversion),也称为自动类型转换,是指在表达式中,当不同类型的操作数参与运算或赋值时,编译器会自动进行类型转换,将其中一个操作数的类型转换为另一个操作数的类型,以便进行运算或赋值操作。
隐式转换的目的是为了保证运算的正确性和一致性。它遵循一定的类型转换规则,根据不同的数据类型之间的兼容性进行转换。
在C语言中,常见的隐式转换包括:
1. 整型提升:当不同大小的整型数据类型参与运算时,较小的整型会自动提升为较大的整型,以保证运算的正确性。
2. 实型提升:当整型和实型数据类型参与运算时,整型会自动转换为实型,以保证运算的一致性。
3. 类型转换:当不同类型的实型数据类型参与运算时,会根据一定的规则进行类型转换,例如将float类型转换为double类型。
需要注意的是,隐式转换可能会导致精度损失或数据溢出的问题,因此在进行类型转换时,需要注意数据范围和精度的问题,避免出现意外的结果。在需要精确控制类型转换的情况下,可以使用显式类型转换(Explicit Conversion)来确保转换的准确性。
27.表达式 18/4*sqrt(4.0)/8 值的数据类型为( )。
A) int B) float C) double D) 不确定
解释:
在这个表达式中,我们有整数、浮点数以及一个浮点数函数sqrt()。根据C语言的类型提升规则,当整数和浮点数在一个表达式中一起出现时,整数会被提升(转换)为浮点数以进行计算。同时,函数sqrt()返回的也是浮点数。
所以,整个表达式的结果会是浮点数类型。
在C语言中,sqrt函数用于计算一个浮点数的平方根,其返回值类型是double类型。所以,表达式18/4*sqrt(4.0)/8的值的数据类型为double。
28.设有说明:char w; int x; float y; double z; 则表达式 w*x+z-y 值的数据类型为( )。
A) float B) char C) int D) double
29. 以下选项中属于 C语言的数据类型是( )。
A) 复数型 B) 逻辑型 C) 双精度型 D) 集合型
30. 以下程序的输出结果是
main()
{
char c=‘z';
printf(“%c”,c-25);
}
A) a B) Z C) z-25 D) y
解释:
z的ASCII编码为122,a的ASCII编码为97,最后通过printf强制输出的类型为%c(字符类型)
31.若有定义:int a=7; float x=2.5,y=4.7; 则表达式 x+a%3*(int)(x+y)%2/4 的值是( )。
A) 2.500000 B) 2.750000 C) 3.500000 D) 0.000000
解释:
x+a%3*(int)(x+y)%2/4
=2.5 + 7 % 3 * (int)(2.5+4.7)% 2 / 4 //(int )的作用是强制转化,把原本7.2的结果,强制转化为 7
=2.5 + 7 % 3 * 7 % 2 / 4
最后计算即可得出
32.若有代数式 3ae/bc ,则不正确的 c 语言表达式是( )。
A) a/b/c*e*3 B) 3*a*e/b/c C) 3*a*e/b*c D) a*e/c/b*3
解释:
c的结果为 3ace/b
33.设有 int x=11; 则表达式 (x++ * 1/3) 的值是( )。
A) 3 B) 4 C) 11 D) 12
解释:
x++表示先使用x原本的值,之后再给该值+1,所以表达式计算时,是11 * 1 / 3
若是++x,则是先把x的值+1,然后在表达式中使用 即 12 * 1 / 3
34.以下变量 x.、y、z 均为 double 类型且已正确赋值,不能正确表示数学式子 x/yz 的 C 语言表达式是 ( ) 。
A) x/y*z (xz/y) B) x*( 1/(y*z)) C) x/y* 1/z D) x/y/z
35.C 语言中运算对象必须是整型的运算符是( )。
A) %= B) / C) = D) <=
解释:
在c语言中,运算对象必须是整型数的运算符是:①求余运算符% ②位运算符~、&、|、^、<<、>>
36.下列程序的输出结果是( )。
main()
{
double d=3.2; int x,y;
x= 1.2; y=(x+3.8)/5.0; //x为int类型,赋值1.2导致值被截断为1,所以此时的y为4.8/5.0 = 0(y也是int类型)
printf("%d\n", d*y);
}
3 B) 3.2 C) 0 D) 3.07
37.若 x ,i,j 和 k 都是 int 型变量,则计算下面表达式 x=(i=4, j=16, k=32) 后,x 的值为( ) 。
A) 4 B) 16 C) 32 D) 52
解释:
在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式。其一般形式为:
表达式1, 表达式2
其求值过程是分别求两个表达式的值,并以表达式2(即最右边的一个表达式)的值作为整个逗号表达式的值。
38.假设所有变量均为整型,则表达式(a=2, b=5, b++, a+b)的值是( )。
A) 7 B) 8 C) 6 D) 2
解释:
最后输出的是a+b语句的值,但是前面的三个语句都要依次执行,其中关键在于b++,
b的自增,此时b++作为a+b的上一条语句,等b++完全执行后,再去执行a+b,并无其他因素影响
39.假定 x 和 y 为 double 型,则表达式 x=2, y=x+3/2 的值是( )。
A)3.500000 B) 3 C) 2.000000 D) 3.000000
解释:
x,y的类型为double,但是3/2表示的是两个整数的除法,要想出现1.5的结果,必须是3.0/2.0
40.若以下变量均是整型,且 num=sum=7;则计算表达式 sum=num++, sum++, ++num 后 sum 的值为 ( ) 。
A) 7 B) 8 C) 9 D) 10
解释:
sum=num++, //sum=num++表示先把num的值赋给sum,再令num的值+1,此刻sum为7
sum++, //然后sum的值+1,为8
++num
41.若有定义 int k=7,x=12; ,则以下能使值为 3 的表达式是( )。
A) x%=(k%=5) //结果为0
B) x%=(k-k%5) //结果为2
C) x%=k-k%5 //无意义
D) (x%=k)-(k%=5)
42.设以下变量均为 int 类型,则值不等于 7的表达式是( )。
A) (x=y=6,x+y,x+1)
B) (x=y=6,x+y,y+1)
C) (x=6,x+1,y=6,x+y)
D) (y=6,y+1,x=y,x+1) //主要解释一下D,首先这是个逗号表达式,输出最后一个语句的结果,即x+1,此时的x = y,y = 6而并非7,因为y + 1语句并没有把改变的值赋给y,只是进行了一个+1的操作
43.下列程序执行后的输出结果是( )。
main()
{
int x=‘f’;
printf(“%c\n”,‘A’+(x-‘a’+1));
}
A)G B) H C) I D) J
解释:
1.下去翻阅ASCII编码
2.逻辑推理,因为a~z,A~Z的ASCII编码分别是连续的
44.下列程序执行后的输出结果是( )。
main()
{
char x=0xFFFF;
printf("%d \n",x--);
}
A) –32767 B) FFFE
C) - 1 D) –32768
解释:
在程序中,`char` 类型的变量 `x` 被初始化为十六进制数 `0xFFFF`,这是一个负数。
在 `printf` 语句中,使用 `%d` 格式说明符打印 `x` 的值。由于 `char` 类型是有符号的,所以会将 `x` 的值当作有符号整数进行输出。
根据二进制补码表示法,`0xFFFF` 对应的十进制值是 -1。(输出之后再执行减一的操作)
45. 以下程序的输出结果是( )。
main()
{
int a=3;
printf("%d\n",(a+=a-=a*a));
}
A)-6 B) 12 C) 0 D) – 12
解释:
a+=a-=a*a
a = (a + a -= a * a)
a = (a + a = a - a * a) //标红语句运算完之后,a的值就被赋成了 -6
46.若变量已正确定义并赋值,下面符合 C 语言语法的表达式是( )。
A) a:=b+1 B) a=b=c+2 C) int 18.5%3 D) a=a+7=c+b
解释:
A) a:=b+1 在 C 语言中,赋值操作符是 "=",而不是 ":=",所以这个表达式是错误的。
B) a=b=c+2 在 C 语言中,可以进行链式赋值。这个表达式的含义是 "将 c+2 的结果赋值给 b,然后再将 b 的值赋值给 a"。
C) int 18.5%3 在 C 语言中,"%" 运算符只能用于整数,不能用于浮点数。
D) a=a+7=c+b 在 C 语言中,赋值运算符 "=" 是从右到左的,所以 a=a+7=c+b 是不合法的,因为 a+7 不是一个可以赋值的左值。
在C语言中,左值(lvalue)是一个表达式,它可以出现在赋值语句的左边或者右边。左值代表的是可以被赋值的位置或者对象。
具体来说,左值可以是以下类型:
1. 变量:例如,int a; 中的 a 就是一个左值。
2. 数组元素:例如,int arr[5]; 中的 arr[3] 就是一个左值。
3. 指针指向的对象:例如,int *ptr; 中的 *ptr 就是一个左值。
4. 结构体或联合体的成员:例如,struct Person { int age; }; 中的 person.age 就是一个左值。
需要注意的是,常量和表达式的结果不能作为左值使用。例如,3、a+b、函数调用的结果等都不是左值。
在赋值语句中,左值出现在等号的左边,表示将右边的值赋给左边的位置或对象。例如,a = 10; 表示将 10 赋值给变量 a。
总结来说,左值是可以被赋值的表达式,它代表的是一个位置或对象。
47.若有以下程序段,
int c1= 1, c2=2, c3;
c3= 1.0/c2*c1;
则执行后,c3 中的值是( )。
A)0 B) 0.5 C) 1 D) 2
解释:
在给定的代码中,变量 `c1` 被赋值为 1,`c2` 被赋值为 2,而 `c3` 则没有初始值。
根据代码 `c3 = 1.0 / c2 * c1;`,首先进行除法运算 `1.0 / c2`,由于 `1.0` 是浮点数,会进行浮点数除法。所以结果为 `0.5`。
接下来,将 `0.5` 乘以 `c1`,即 `0.5 * 1`,结果为 `0.5`。
然而,`c3` 是一个 `int` 类型的变量,不能直接存储 `0.5` 这样的浮点数。在这种情况下,`c3` 会存储 `0.5` 向下取整后的结果,也就是 `0`。因此,执行完毕后,`c3` 的值为 `0`。
48.有如下程序
main( )
{
int y=3, x=3, z= 1;
printf(“%d %d\n”, (++x, y++), z+2); //逗号语句,第一个%d输出y的值然后再把y的值+1,然后第二个%d输出 z+2的值
}
运行该程序的输出结果是( )。
A) 3 4 B) 4 2 C) 4 3 D) 3 3
49. 已知大写字母 A 的 ASCII 码为 65,以下程序的运行结果为( )。
#include<stdio.h>
main( )
{
char c1=‘A’,c2=‘Y ’;
printf(“%d,%d\n”,c1,c2); //1. 最后输出格式为%d,即十进制整数 2.A~Z的ASCII码按顺序排列
}
A) 65,89 B) A,Y
C) 65,88 D) 65,90
50. 以下程序的输出结果是( )。
#include<stdio.h>
main()
{
int a=010,b=10;
printf(“%d,%d\n”,a++,--b); //最后输出格式为十进制 a = 8,然后a++,先把a打印,再令其值+1, --b,先把b的值-1,然后再打印(打印即为输出,但一般把printf成为打印)
}
A) 10, 10 B) 8, 10
C) 10,9 D) 8,9
解释:将八进制数 010 转换为十进制数的方法是将每个位上的数字与对应的权重相乘,然后将它们相加。
对于八进制数 010,从右到左,第一位是 0,第二位是 1,第三位是 0。
根据权重规则,第一位的权重是 8^0 = 1,第二位的权重是 8^1 = 8,第三位的权重是 8^2 = 64。
将每个位上的数字与对应的权重相乘,然后将它们相加:
0 * 1 + 1 * 8 + 0 * 64 = 0 + 8 + 0 = 8
因此,八进制数 010 转换为十进制数为 8。
51. 以下程序的输出结果是( )。
main()
{
int a,b;
a= 100;b=200;
printf(“%d\n”,(a,b)); //逗号运算符,输出最后一个语句,b的值
}
A) 100 B) 200
B) 20000 D) 100=200
52.执行语句 y=10;x=y++; 的结果是( )。
A) x= 10,y= 10 B) x= 11,y= 11 C) x= 10,y= 11 D) x= 11,y= 10
解释:
x = y++表示,先把y的值赋给x,然后对y进行+1的操作
53.在表示 C语言的整型变量时,表示“无符号长整型” 的符号是( )。
A) unsigned int B) unsigned short
C) long int D) unsigned long
54.在下列形式的常数中,C 程序不允许出现的是( )。
A) .45 B) ±123
C) 25.6e-2 D) 4e3
55. 以下程序的输出结果是( )。
main()
{
float x=3.6;
int i;
i=(int)x; //i把3.6强制截断成了3
printf(“x=%f,i=%d”,x,i);
}
A) x=3.600000,i=4 B) x=3,i=3
C) x=3.600000,i=3 D) x=3.000000,i=3.600000
56.在 C 语言中,要求运算数必须是整型数据的运算符是( )。
A) / B) % C) ! D) <
57.执行下列语句的结果是( )。
i=3;
printf(“%d,”,++i); //先把i的值+1,然后再输出,即为4
printf(“%d”,i++); //语句连贯,此时的i为4,i++语句先把i = 4输出,在把i值+1
A) 3,3 B) 3,4 C) 4,3 D) 4,4
58. 已知 x=3, y=2,则表达式 x*=y+8 的值为( )。
A) 3 B) 2 C) 30 D) 14
解释:
x*=y+8
x = x *(y + 8)
61.C 语言提供的合法关键字是( )。
A) swicth //拼写 B) chan
C) Case //首字母大写 D) default
62.表示“在使用 x 之前,先使 x 的值加 1” 的正确方式是( )。
A) ++x B) x++ C) +x D) +x+
63.设 x 的值为 5,则表达式(++x)+(++x)+(++x)的值是( )。
A) 24 B) 20 C) 15 D) 21
解释:
(++x)+(++x)+(++x)
6 + 7 + 8
64.在 C 语言中,合法的字符常量是( )。
A) ‘\084’ //八进制转义为0-7
B) ‘\x43’
C) ‘ab ’ //字符常量只能包含一个字符,而不是多个字符。
D) “\0” //字符常量一般单引号
65.若已定义 x 和 y 为 double 类型,则表达式:x=1, y=x+3/2 的值是( )。
A) 1 B) 2 C) 2.0 D) 2.6
66.若 t 为 double 类型,表达式 t=1, t+5, t++的值是( )。
A) 1 B) 6.0 C) 2.0 D) 1.0
解释:
t=1, t+5, t++ 逗号表达式,输出最后的t++语句,语句二中t +5并未将其值赋给 t,只是进行了一个简单操作而已,最后t++先使用,再+1,输出double类型 1.0
67.若有以下定义和语句,则输出结果是( )。
char c1=‘b’,c2=‘e ’;
printf(“%d,%c\n”,c2-c1,c2-’a’+’A’);
A) 2,M B) 3,E C) 2,E
D) 输出项与对应的格式控制不一致 ,输出结果不确定
解释:
1.使用ASCII编码表一一对应
2.a~z,和A~Z的ASCII编码分别按顺序排列,故可以进行合适的逻辑推理
68.设有如下的变量定义:
int i=8,a,b;
double x= 1.42,y=5.2;
则以下符合 C 语言语法的表达式是( )。
A) a+=a-=(b=4)*(a=3)
B) x%(-3) //取余只能正整型
C) a=a*3=2 //左值问题,参上
D) y=float(i) //y的类型为double,而非float
69.若有以下定义和语句:
int u=010,v=0x10,w= 10;
printf(“%d,%d,%d\n”,u,v,w); //最后以%d(十进制)的形式输出
则输出结果是()。
A) 8, 16, 10 B) 10, 10, 10 C) 8,8, 10 D) 8, 10, 10
二 、填空题
1.若 x 和 a 均是 int 型变量 ,则计算表达式(1)后的 x 值为 12 ,计算表达式(2)后的 x 值为 4 。
(1) x=(a=4, 6*2) //逗号运算符
(2) x=a=4, 6*2 //直接赋值
2.若 a 是 int 型变量 ,则表达式(a=4*5, a*2), a+6 的值为 26 。
解释:a的值为20,但整个表达式的值为最后一条语句 a + 6 = 26
3.若 b 是 int 型变量 ,则表达式 b=25/3%3 的值为 2 。
4.若 s 是 int 型变量 ,且 s=6 则下面表达式 s%2+(s+1)%2 的值为 1 。
5.若 a,b 和 c 均是 int 型变量 ,则计算表达式 a=(b=4)+(c=2)后 ,a 值为 6 ,b 值为 4 ,c 值 为 2 。
6.若 x 和 n 均是 int 型变量,且 x 和 n 的初值均为 5,则计算表达式 x+=n++后 x 的值为 10 ,n 的 值为 6 。
7.若有定义:int b=7;float a=2.5,c=4.7;则表达式 a+(int)(b/3*(int)(a+c)/2)%4 的值为 5.5 。
解释:a+(int)(b/3*(int)(a+c)/2)%4
2.5 + (int)( 7/3 * (int) (2.5 + 4.7) / 2) %4
2.5 + (int)(2 * 7 / 2) % 14
8.若有定义:int a=2,b=3;float x=3.5,y=2.5;则表达式(float)(a+b)/2+(int)x%(int)y 的值为 3.5 。
9.若有定义:int x=3,y=2;float a=2.5,b=3.5;则表达式(x+y)%2+(int)a/(int)b 的值为 1 。
10.若 x 和 n 均是整型变量,且 x 的初值为 12,n 的初值为5,则计算表达式x%=(n%=2)后 x 的值为 0 。
12.请写出数学式 a/bc 的 C 语言表达式 a/(b*c)或 a/(c*b)或 a/b/c 或 a/c/b
。
13.设 a、b、c 为整型数,且 a=2、b=3、c=4,则执行完语句 a*= 16+(b++)-(++c)后,a 的值是 28 。
标签:语句,10,语言,int,++,整型,习题,表达式 From: https://blog.csdn.net/wxdzuishaui/article/details/142443970