1、设有说明:char w; int x; double y; 则表达式w*x-y 值的数据类型:为:double
解析:由于char<<int<<double, 属于自动类型转换,低字节转向高字节。所以当含有double数据类型,输出的表达式结果一定是double。
2、若有以下类型说明:char w; int x; float y, z; 则表达式w*x+z-y的结果为float类型
解析:在C语言中,当不同类型的数据进行算术运算时,较低类型的数据会被提升(或称为转换)到较高类型的数据。此处会提升为float类型。
3、假定下列 x 和 y 均为 int 型变量,则不正确的赋值为 B D
A. x+=y++ B. ++x=++y
C. x=++y D. x++=y++
解析:首先在C语言中,“=”表示赋值运算符,作用是将右边表达式的值赋值给左边的变量,即左边只能是定义的一个变量,而不能是一个表达式。所以在A、B、C、D中,B、D赋值就不正确。A中的“+=”是复合赋值运算符,其作用与“=”基本一样。
4、以下程序运行后输出的结果是___9___。
#include <stdio.h>
int main()
{
int k = 011;
printf("%d\n", k++);
return 0;
}
解析:k的值为011,在C语言中,011是八进制的表现形式,011转化成十进制是9,k++是先赋值在自增1,所以输出的值是9。
5、请正确填写输出结果。(恩易物联2)
#include <stdio.h>
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) 1
解析:&&为逻辑与运算符,a&&b的结果为真,所以取1
(2) 4
解析:&是位与运算符,a=15,a的二进制为0000 1111;b=20,b的二进制为0001 0100,进行位与时,结果为0000 0100,转换成十进制为4
(3) 1
解析:||为逻辑或运算符,a||b的结果为真,所以取1
(4) 31
解析:|是位或运算符,a=15,a转换成二进制为0000 1111;b=20,b的二进制为0001 0100,进行位或时,结果为0001 1111,转换成十进制为31
(5) 3
解析:>>为右移运算符,a=15,15的二进制为0000 1111; a >> 2表示右移两位,结果为0000 0011,转换成十进制为3
6、为了表示“a和b都不等于0”应使用( D )
A. (a!=0) || (b!=0) B. allb
C. !((a==0)&&(b==0)) D. a&&b
解析:a==0表示a等于0,b==0表示b等于0;
(a==0)&&(b==0)表示a等于0且b等于0;
!表示逻辑非, !((a==0)&&(b==0)) 表示a和b都不等于0
7、设 a=3,b=4,c=4,则表达式 a+b>c&&b==c&&allb+c&&b==c 的值为 1
8、已知 a = 13, a << 2的十进制数值为 52
解析:<<是左移运算符,a=13,转换成二进制为0000 1101,a << 2表示左移两位,结果为0011 0100,转换成十进制为52
9、int x = 2, y = 3, z = 4; 则表达式 x + (y > !z)的值为 3
解析: !z为0, (y > !z)表示(3>0)为真,则为1,x + (y > !z)为2+1=3
10、能正确表示a和b同时为正或同时为负的逻辑表达式是:( D)
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 > 0表示当a和b同时为正时,a * b > 0;同时为负时,a * b > 0
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>2表示为假,m=0,n=c>d不会被执行,即n=2
12、语句 printf("%d \n", 12 & 012); 的输出结果是:8
解析 :012表示八进制,转换成二进制为1010,12转换成二进制为1100;1010&1100=1000;
1000转换成二进制为8
13、有如下代码char cTwoLength = 153;那么 printf("\r\n %d", cTwoLength >> 4);打印的值为 -7
解析:本题暂时不太懂,请看代码结果
14、以下所列的C语言常量中,错误的是:B
A.0.1f B. 1.0e0.1
C. 'z' D. '\110'
解析:B:科学记数法中,基数(这里是1.0
)后面应该直接跟着指数(用e
或E
表示),而指数必须是一个整数。0.1
不是一个整数,因此这个指数型常量是错误表示。
15、sizeof(float)是( B )
A. 一个双精度型表法式 B. 一个整型表达式
C. 一个函数调用 D. 一个不合法的表达式
解析: sizeof是一个单目运算符,运算结果一个整数,故是一个整形表达式。
16、一个32位的机器,一个 char 代表的范围是?一个 int 代表的范围是?
char 的取值范围:【-128,127】
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
解析:运算中既有无符号数又有有符号数默认将有符号数转为无符号数进行计算。计算机中减法将转为补码进行计算。原先的符号位变成了值位所以相加>6