1.设有说明:char w; int x; double y; 则表达式w*x-y 值的数据类型为( )。 (智洋)
A. float B. char C. int D. double
答案:D
分析:表达式w*x-y中,因为y是double型数据,范围为8字节,而char为1字节,int为4字节,所以整个表达式的数据类型也为double型数据。
2.若有以下类型说明:( ) (北京凝思软件) char w; int x; float y, z; 则表达式w*x+z-y的结果为____类型。
A.float B.char C.int D.double
答案:A
分析:表达式w*x+z-y中,因为y和z参与运算,且为float型数据,所以整个表达式的数据类型为float型数据。
3.假定下列 x 和 y 均为 int 型变量,则不正确的赋值为( );(晟安信息)
A. x+=y++ B. ++x=++y
C. x=++y D. x++=y++
答案:B、D
分析:首先在C语言中,“=”表示赋值运算符,作用是将右边表达式的值赋值给左边的变量,即左边只能是定义的一个变量,而不能是一个表达式。所以在A、B、C、D中,B、D赋值就不正确。A中的“+=”是复合赋值运算符,其作用与“=”基本一样。
4.以下程序运行后输出的结果是______。(电工时代)
#include <stdio.h>
int main()
{
int k = 011;
printf("%d\n", k++);
return 0;
}
答案:9
分析:int k=011中,int是整形数据,0开头是八进制的标识,所以k=011转换成十进制是k=9,因为是在输出之前对k进行了自增操作,printf会打印变量k当前的值9。
5.请正确填写输出结果。(恩易物联2)
int main()
{
int a = 15;
int b = 20;
int c;
a && b = ? (1)
a & b = ? (2)
a || b ? (3)
a | b = ? (4)
a >> 2 = ? (5)
}
(1)________(2)_________(3)________(4)________(5)________
答案:(1)1 (2)4 (3)1 (4)31 (5)3
分析:a && b;因为a=15,不为0,所以为真;b=20,不为0,也为真;都为真,所以a && b为真,即为1。 a & b;此运算需要用到a、b的二进制,其二进制如下表,因为全1为1,有0为0,所以结果为4。 a || b;因为a=15,不为0,所以为真;b=20,不为0,也为真;有也1个为真,所以a || b为真,即为1。 a | b;此运算需要用到a、b的二进制,其二进制如下表,因为有1为1,全0为0,所以结果为31。 a >> 2;a的二进制向右移动两位,高位补0,所以其结果如下表所示为3。
64 32 16 8 4 2 1 a 0 0 0 1 1 1 1 b 0 0 1 0 1 0 0 a & b 0 0 0 0 1 0 0 a | b 0 0 1 1 1 1 1 a >> 2 0 0 0 0 0 1 1
6.为了表示“a和b都不等于0”应使用( )。(山东丁一)
A. (a!=0) || (b!=0) B. allb
C. !((a==0)&&(b==0)) D. a&&b
答案:D
分析:A、B,“||”是逻辑或,只要有一个为真就为真,所以排除A、B。C,((a==0)&&(b==0)),这里面的结果是a等于0,b等于0,整体的结果为0,所以!((a==0)&&(b==0))的结果为1。D,a&&b,a,b都不等于0时结果为真,所以D正确。
7.设 a=3,b=4,c=4,则表达式 a+b>c&&b==c&&allb+c&&b==c 的值为( )。(易购软件)
答案:1
分析:a+b>c,3+4>4,结果为真;b==c,4=4,结果为真;所以a+b>c&&b==c的结果为真。 a,a=3,结果为真;所以a+b>c&&b==c&&a的结果为真。 b+c,4+4=8,结果为真;所以a+b>c&&b==c&&allb+c的结果为真。 b==c,4=4,结果为真; 所以a+b>c&&b==c&&allb+c&&b==c的结果为真,即1。
8.已知 a = 13, a << 2的十进制数值为 ( )。(易购软件)
答案:20
分析:a=13的二进制如下,a向左移动2位,所以结果为20。
16 8 4 2 1 a 0 1 1 0 1 a<<2 1 0 1 0 0
9.int x = 2, y = 3, z = 4; 则表达式 x + (y > !z)的值为( )。(易购软件)
答案:3
分析:z=4为真,!z为假为0,y>!z是3>0为真为1,所以x + (y > !z)等于2+1等于3,所以结果为3。
10.能正确表示a和b同时为正或同时为负的逻辑表达式是:( ) (宇视科技,紫光云数,新华三,石峰)
A. (a >= 0 ll b >= 0) && (a < 0 ll b < 0)
B. (a>=0 && b>=0) && ( a < 0 && b < 0)
C. (a + b > 0) && (a + b <= 0)
D. a * b > 0
答案:D
分析:a和b同时为正或同时为负,逻辑或应该用“||”,所以A,B,C都不对;D,两数之积大于0,说明两个数同号,即a和b同时为正或同时为负。
11.int a=1, b=2, c=3, d=4, m=2, n=2; 执行 (m=a>b) && (n=c>d) 后,n=________(杭州快越科技)
答案:2
分析:表达式 (m=a>b)的结果为假,因为1(赋值给a)大于2(赋值给b)的条件不成立,所以 (m=a>b)的结果为0。由于逻辑与操作符的短路特性,表达式(n=c>d)不会被执行。因此,变量
n
的值保持不变,仍然为2。
12.语句 printf("%d \n", 12 & 012); 的输出结果是:( ) (紫光云数,新华三,石峰)
A. 12 B. 8 C. 6 D. 012
答案:8
分析:位与运算符,用二进制计算,有0为,全1为1,所以12 & 012的结果为8。
32 16 8 4 2 1 12 0 0 1 1 0 0 012 0 0 1 0 1 0 12 & 012 0 0 1 0 0 0
13.有如下代码char cTwoLength = 153;那么 print("\r\n %d", cTwoLength >> 4)打印的值为 ________ (紫光云数)
提示:char是有符号字符型,取值范围[-128 , +127],153属于最大值越界,结果是-103,然后对-103进行右移4位的计算输出。右移规则:
- 对于无符号整数,左侧补0。
- 对于有符号整数,如果原数是正数,则在左侧补0;如果原数是负数,则在左侧补1。
提示到这里,你试试计算一下吧,一定要理解清楚原理啊
答案:-7
分析:char cTwoLength = 153;char为有符号型字符数据,取值范围为[-128,127],153大于127,越界了,其结果应为-103,153二进制如下为10011001,向右移动4位为11111001,正数的原码反码补码都一样,所以读取到的为补码11111001,所以原码为10000111,所以结果为-7。
128 64 32 16 8 4 2 1 原码 1 0 0 1 1 0 0 1 >>4 1 1 1 1 1 0 0 1 反码 1 1 1 1 1 0 0 0 原码 1 0 0 0 0 1 1 1
14.以下所列的C语言常量中,错误的是: (华三外协,紫光云数,新华三,石峰)
A.0.1f B. 1.0e0.1
C. 'z' D. '\110'
答案:B
分析:在C语言中,科学计数法的指数部分应该为整数,B中的指数为0.1,所以B错。
15.sizeof(float)是( )。(山东丁一)
A. 一个双精度型表法式 B. 一个整型表达式
C. 一个函数调用 D. 一个不合法的表达式
答案:B
分析:sizeof用于计算特定类型或对象所占用的内存字节数,并返回一个整型值。所以sizeof(float)是一个整型表达式,与float无关,只是计算float所占用的内存字节数。
16.一个32位的机器,一个 char 代表的范围是?一个 int 代表的范围是?(广域科技)
答案:[2^(-7) 2^7-1] [2^(-31) 2^31-1]
分析:char占用1字节,1字节等于8比特,即char代表的范围为[2^(-7) 2^7-1]。 int占用4字节,即32比特,所以int代表的范围是[2^(-31) 2^31-1]。
17.下面的代码输出是什么,为什么? (信雅达)
void foo(void)
{
unsigned int a = 6;
int b = -20;
(a+b > 6) ? puts(">6") : puts("<=6");
}
答案:>6
分析:unsigned int a = 6;a为无符号整型;int b = -20;b为有符号整型。所以a+b时,把int b=-20自动转换成无符号整型数,即b在计算时应为2^32-21,所以a+b> 6为真。(a+b > 6) ? puts(">6") : puts("<=6");是三目运算符,即表达式1?表达式2:表达式3;意思是表达式1为真是,输出为表达式2,表达式1为假时,输出为表达式3;所以输出>6。
18.按位或运算符(|) (深圳元征信息科技) 0x10 | 0x01 = ? 十六进制的结果是多少?
答案:0x11
分析:按位或运算符(|),有1为1,全0为0;0x10 | 0x01两个数都为十六进制;所以结果为:
0x10
| 0x01
0x11
19.按位与运算符(&) (深圳元征信息科技) 0x10 & 0x01 = ? 十六进制的结果是多少?
答案:0x00
分析:按位与运算符(&),有0为0,全1为1;0x10 & 0x01两个数都为十六进制;所以结果为: 0x10
& 0x01
0x00
20.关于条件的书写
判断year是不是闰年
if( )
判断num是偶数
if( )
判断num是一个三位数
if( )
判断字符ch是大写字母
if( )
判断字符ch是偶数数字字符
if( )
答案:
(year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)
num % 2 == 0
num >= 100 && num <= 999
ch >= 'A' && ch <= 'Z'
(ch >= '0' && ch <= '9') && ((ch -'0')% 2 == 0)
分析:
判断一个年份是否为闰年的条件是:该年份能被4整除且不能被100整除,或者能被400整除。
判断一个数是否为偶数,可以通过检查该数除以2的余数是否为0来实现。
判断num是一个三位数,判断这个数大于等于100,小于等于999。
判断字符ch是大写字母,判断字符大于等于'A',小于等于'Z'。
判断字符ch是偶数数字字符,判断字符大于'0',小于等于'9',且除以2的余数等于0。