备注:ZIP文件中的参考答案仅仅提供最终结果
目录
第3题
3.若有说明语句:char c = '\64' ; 则变量C包含:。
A)1个字符 B)2个字符
C)3个字符 D)说明不合法,C值不确定
解析:
\64不是解析为3个字符(\,6,4),在8.【C语言】转义字符文说过
其中有一个表格,下面节选了\ddd的内容
注意看细节:1到3位
所以有\d,\dd,\ddd这3种情况
八进制64==十进制52=十六进制34
VS验证:
cpp
#include <stdio.h>
int main()
{
char c = '\64';
return 0;
}
x86+debug,调试模式运行至return 0;
内存窗口输入&c
c在内存中存储的值为34
所以选A
第5题
5.语言中,运算对象必须是整型数的运算符是。
A)% B)\ C)% 和 \ D)**
解析:
%只能 用于整数,/可以用于小数,如9/2.0==4.5
所以选A
第7题
7.以下选项中,能用作用户标识符的是___
A)void B)8_8 C)0 D)unsigned
解析:
有关标识符的规则
1.标识符的时候是不能和关键字重复(A,D错)
2.标识符可包含A~Z,a~z,0~9,下划线,但第一个字符必须为字母或下划线(B错)
所以选C
第9题
9.表达式:(int)((double)9/2)-(9)%2的值是___
A)0 B)3 C)4 D)5
解析:
复习有关优先级的知识点 15.25【C语言】操作符的属性 点我跳转
本题要用到: 优先级: /和% 大于 -
因此先进行(int)((double)9/2)和(9)%2的运算
9/2==4,先强制类型转换为double,再强制类型转换为int,结果为4 (9)%2==1
4-1=3,所以选B
第14题
14.以下程序段中,与语句:k=a>b?(b>c?1:0):0;功能相同的是
A)if((a>b)&&(b>c)) k=1;else k=0;
B)if((a>b)||(b>c) k=1;else k=0;
C)if(a<=b) k=0;else if(b<=c) k=1;
D)if(a>b) k=1;else if(b>c) k=1; else k=0;
解析:
回顾三目操作符,15.【C语言】初识操作符 下 点我跳转
本题属于三目操作符的嵌套类型
可以将题目的语句转换为if语句
可写为
cpp
if (a > b)
{
执行(b > c ? 1 : 0)
}
else
{
k = 0;
}
exp2的if语句
cpp
if (b > c)
{
k = 1;
}
else
{
k = 0;
}
合并为
cpp
if (a > b)
{
if (b > c)
{
k = 1;
}
else
{
k = 0;
}
}
else
{
k = 0;
}
显然选A
第16题
16.有以下程序
cpp#include <stdio.h> int main() { int n = 2, k = 0; while (k++ && n++ > 2); printf("%d %d\n", k, n); return 0; }
程序运行后的输出结果是___
A)0 2 B)1 3 C)5 7 D)1 2
解析:
后置++的特性:先使用,后++
有关++和--的特性见15.【C语言】初识操作符 下
while(k++&&n++>2);这里有陷阱
由于是从左向右运算,0>2为假,k++正常执行,后方的n++不在执行
所以k==1,n==2
所以选D
第19题
19.有以下程序
cpp#include <stdio.h> void fun(int p) { int d = 2; p = d++; printf("%d", p); } int main() { int a = 1; fun(a); printf("%d\n", a); return 0; }
程序运行后的输出结果是___
A)32 B)12 C)21 D)22
提示:
这里注意fun函数的调用方式为传值 调用(要与传址调用做区分),不会改变a的值
有关传值 调用和传址 调用见29.【C语言】函数系列中 自定义函数
所以选A
第20题
20.以下函数findmax拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致不能实现预定功能,造成错误的原因是___
cpp#define MIN -2147483647 int findmax(int x[], int n) { int i, max; for (i = 0; i < n; i++) { max = MIN; if (max < x[i]) max = x[i]; } return max; }
A)定义语句int i,max;中max未赋初值
B)赋值语句max=MIN;中,不应给max赋MIN值
C)语句if(max<x[i]) max=x[i];中判断条件设置错
D)赋值语句max=MIN;放错了位置
提示:
可以自行设定一个数组来分析,如x[4] = {1,2,5,3};
解析:当i == 2时,max的值为x[]的最大值,当i == 3时,max的值先为MIN,之后max值为3,错过了最大值
所以选B
第22题
22.程序段如下
cppint k = 0; while (k++ <= 2); printf("last=%d\n", k);
则执行结果是last=。
A)2 B)3 C)4 D)无结果
解析:
注意细节:while(k++<=2);的尾部有个分号,循环语句为空
不要误解k++<=2的执行策略!本题很容易误选B
1.0<2,执行循环,之后k++
2.1<2,执行循环,之后k++
3.2=2,执行循环,之后k++
4.3>2,跳出循环,但之后k仍然++
所以选C
第24题
24.若二维数组a有m列,则a[i][j]元素前的数组元素个数为:。
A)j*m+i B)i*m+j C)i*m+j-5 D)i*m+j+1
解析:
如果行和列都从1开始计数,画图可知
所以选B
第26题
26.设有两字符串"Beijing"、"China"分别存放在字符数组str1[20],str2[10]中,下面语句中能把"China"连接到"Beijing"之后的为:。
A)strcpy(str1,str2);
B)strcpy(str1, "China");
C)strcat(str1,"China")
D)strcat("Beijing",str2);
提示:
一般像字符函数和字符串函数的参数是这样设定的
cpp
function (dest,src)
如果之前学过汇编,就可以顺利理解这样写的原因:
如在查汇编指令集的时候,经常会出现这样的指令形式
cpp
mov dest,src
add dest,src
adc dest,src
or dest,src
xor dest,src
dest被称为目的操作数 ,src被称为源操作数
可以在这里类比strcat,strcpy函数-->称他们的参数为"源参数","目标参数"
所以选C
第27题
27.以下程序的运行结果是:。
cpp#include <stdio.h> int main() { int a = 2, i; for (i = 0; i < 3; i++) printf("%4d", f(a)); return 0; } f(int a) { int b = 0, c = 3; b++; c++; return(a + b + c); }
A)7 10 13 B)7 7 7
C)7 9 11 D)7 8 9
注意:
这里的正确选项其实有问题,之前在31.【C语言】详解printf文中讲过
%4d代表输出的最小宽度是4,且4>0,属于右对齐
VS运行后:
仔细看的话:
每个7前面都空了4格
第28题
28.在C语言程序中,若未在函数定义时说明函数类型,则函数默认的类型为:。
A)void B)double C)int D)char
在VS中,如果自定义函数没有写返回类型,在生成解决方案的窗口会看到这样一句话
warning C4013: 某某函数未定义;假设外部返回 int