注:以下问题的部分解析并非全部是自己原创,只是为了便于以后复习,直接粘贴总结的答案,主要来源是七月在线中的解析部分。https://www.julyedu.com/question/selectAnalyze/kp_id/4/cate/C
1、 以下程序段的输出结果是( )
int p = 1234;
printf("%2d\n",p);
A 12
B 34
C 1234
D 提示出错、无结果
解释:选C
printf("%2d\n",p); ,当p的位数大于2时就保持不变,原样输出;当p的位数小于2时,则输出2位,不够左端用空格补齐。
2、 以下程序运行后的输出结果是( )
int main(void)
{
int a;
char c = 10;
float f = 100.0;
double x;
a = f /= c *= (x=6.5);
printf("%d %d %3.1f %3.1f\n",a,c,f,x);
return 0;
}
A 1 65 1 6.5
B 1 65 1.5 6.5
C 1 65 1.0 6.5
D 2 65 1.5 6.5
解释:选B
(x=6.5);
c *= 6.5 = 65
f /= 65 = 1.538 (当被除数和除数都是整型时,进行的是整除运算,当其中有一个不是时,进行的是除法运算)
a = 1; (int)f 表示将 f 强制转换为int型,只取整数部分。
%3.1f 表示共取3位(包括小数点),保留一位小数,若不够则左端空格补齐。
3、以下程序的运行结果是( )
int main(void)
{
int x , y , z;
x = 0 , y = 1 , z = 3;
x = ++y <= x || x+y != z;
printf("%d,%d\n",x , y);
return 0;
}
A 1,2
B 1,1
C 0,2
D 0,1
解释:选A
x = ++y <= x || x+y != z;
上述相当于 x = ((++y) <=( x)) || ((x+y )!= z);
(++y) <=( x) y = 2, 2 <= 0, 为假
((x+y )!= z); x+y = 2, 2!=3 为真
故x = 1, y = 2
4、 以下语句的输出结果是( )
int main(void)
{
int x = 10 , y = 3 , z;
printf("%d\n",z = (x%y , x/y));
return 0;
}
A 4
B 0
C 3
D 1
解释:选C
逗号运算符从左到右依次计算,最终取最后一个变量的值
(x%y , x/y) = (1,3) = 3
逗号运算符是所有运算符中优先级最低的一个。
5、设有语句 char a = ‘\72’; 则变量a( )
A 包含2个字符
B 说明不合法
C 包含1个字符
D 包含3个字符
解释:选C
\72 = 58
char类型保存的是字符的ASCII码。所有的ASCII码都可以用“\”加数字来表示,其中\表示转义,\后面的数字一般为八进制,所以\72对应的十进制数为58,查ASCII码表可知,对应的字符是”:”。
6、在重载一运算符时,若运算符函数的形参表中没有参数,则不可能的情况是( )
A 该运算符函数是类的友元函数
B 该运算符函数有一个隐含的参数this
C 该运算符函数是类的成员函数
D 该运算符是一个单目运算符
解释:选A
在重载一运算符时,其参数便是该运算符的操作数。当该运算符是类的成员函数时,包含一个隐含的this指针,所以这时参数要比实际的操作数少一个,若没有参数,则说明该运算符是一个单目运算符;友元函数并不是类的成员函数,故其必须要有参数才可以完成重载,且参数个数要与操作数个数一致。
7、 下列哪一个是析构函数的特征( )
A 析构函数定义只能在类体内
B 一个类中只能定义一个析构函数
C 析构函数名与类名不同
D 析构函数可以有一个或多个参数
解释:选B
析构函数没有参数也没有返回值,且不能重载,但析构函数可以在类内声明、定义或者在类内声明,类外定义。
析构函数名与类名相同,只是在类名前加一个位取反符(~),以区别于构造函数。
8、 执行 int a = ( 1 , 3 , 11); int b = a; 后,b的值是多少( )
A 11
B 1
C 3
D 15
E { 1 , 3 , 11}
解释:选A
int a = ( 1 , 3 , 11) = 11 逗号运算符从左到右依次计算,最终取最右端的值。
int b = a = 11
9、 设a=1,b=2,则(a++)+b 和 a+++b 这两个表达式的值分别是( )
A 4 , 4
B 3 , 4
C 4 , 3
D 3 , 3
解释:选D
(a++)+b 先运行a+b = 3 然后a再自增1,a= 2
a+++b 编译系统从左到右扫描,先遇到a,然后+,接着又是+,由于++的优先级要高于+,故进行后置自增运算,故该式相当于(a++)+b
10、 条件语句不能作为多路分支语句( )
A 对
B 错
解释:选B
if-else语句可以嵌套构成多路分支语句:
if (condition1) {
…
} else if (condition2) {
…
}…
}else {
}
另外switch语句本身就支持多路分支:
switch(expression) {
case value1:
…
break;
case value2:
…
break;
…
default:
…
break;
}