2-111
执行下列程序段的输出结果是()。(2分)
double x = 2.5, y = 4.7;
int a = 7;
printf("%.1f", x + a%3 * (int)(x+y) % 2 / 4);
A.2.5
B.2.8
C.3.5
D.3.8
答案:A
2-112
执行下列程序段的输出结果是()。(2分)
int num = 1234, s = 0;
while( num != 0){
s += num % 10;
num /= 10;
}
printf("%d", s);
A.4321
B.1234
C.0
D.10
答案:D
2-113
设字符型变量x的值是064,表达式 ~ x ^ x << 2 & x
的值是()。(2分)
A.0333
B.333
C.0x333
D.020
答案:A
2-114
设a 为整型变量,不能正确表达数学关系:10 < a < 15 的 C 语言表达式是()。(2分)
A.10 < a < 15
B.a == 11 || a == 12 || a == 13 || a == 14
C.a > 10 && a < 15
D.!(a <= 10) && !(a >= 15)
答案:A
2-115
设以下变量均为int类型,表达式的值不为 9 的是()。(2分)
A.(x = y = 8, x+y, x+1)
B.(x = y = 8, x+y, y+1)
C.(x = 8, x+1, y = 8, x+y)
D.(y = 8, y+1, x = y, x+1)
答案:C
2-124
假定int类型变量占用两个字节,其有定义:int x[10]={0, 2, 4}; 则数组x在内存中所占字节数是()。(2分)
A.3
B.6
C.10
D.20
答案:D
2-125
以下能正确定义数组并正确赋初值的语句是()。(2分)
A.int N=5, b[N][N];
B.int a[1][2]={{1}, {3}};
C.int c[2][ ]={{1, 2}, {3, 4}};
D.int d[3][2]={{1, 2}, {34}};
答案:D
2-126
若有定义:int a[2][3]; 以下选项中对数组元素正确引用的是()。(2分)
A.a[2][0]
B.a[2][3]
C.a [0][3]
D.a[1>2][1]
答案:D
2-127
以下程序的输出结果是()。(2分)
int main(void)
{
int m[ ][3] = { 1, 4, 7, 2, 5, 8, 3, 6, 9 };
int i, j, k=2;
for (i=0; i<3; i++)
printf ("%d ", m[k][i]);
return 0;
}
A.4 5 6
B.2 5 8
C.3 6 9
D.7 8 9
答案:C
2-128
以下程序的输出结果是()。(2分)
int main(void)
{
int aa[4][4]={ {1, 2, 3, 4}, {5, 6, 7, 8}, {3, 9, 10, 2}, {4, 2, 9, 6} };
int i, s=0;
for(i=0; i<4; i++)
s += aa[i][1];
printf("%d\n", s);
return 0;
}
A.11
B.19
C.13
D.20
答案:B
2-138
设有数组定义:char array [ ]=“China”; 则数组 array所占的空间为()。(2分)
A.4个字节
B.5个字节
C.6个字节
D.7个字节
答案:C
2-139
下述对C语言字符数组的描述中错误的是()。(2分)
A.字符数组可以存放字符串
B.字符数组中的字符串可以整体输入、输出
C.可以在赋值语句中通过赋值运算符"="对字符数组整体赋值
D.不可以用关系运算符对字符数组中的字符串进行比较
答案:C
2-140
有以下定义:char x[ ]=“abcdefg”; char y[ ]={‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’}; 则正确的叙述为()。(2分)
A.数组x和数组y等价
B.数组x和数组y的长度相同
C.数组x的长度大于数组y的长度
D.数组x的长度小于数组y的长度
答案:C
2-158
下列语句定义 x 为指向 int 类型变量 a 的指针,正确的是()。
(2分)
A.int a, *x = a;
B.int a, *x = &a;
C.int *x = &a, a;
D.int a, x = a;
答案:B
2-159
以下选项中,对基本类型相同的指针变量不能进行运算的运算符是()。(2分)
A.+
B.-
C.=
D.==
答案:A
2-160
若有以下说明,且0<=i<10,则对数组元素的错误引用是()。(2分)
int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, *p = a, i;
A. *(a+i)
B.a[p-a+i]
C.p+i
D. *(&a[i])
答案:C
2-161
下列程序的输出结果是()。(2分)
int main(void)
{
int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, *p = a+3;
printf(“%d”, *++p);
return 0;
}
A. 3
B.4
C.a[4]的地址
D.非法
答案:B
2-162
对于下列程序,正确的是() 。(2分)
void f(int *p)
{
*p = 5;
}
int main(void)
{
int a, *p;
a = 10;
p = &a;
f(p);
printf(“%d”, (*p)++);
return 0;
}
A.5
B.6
C.10
D.11
答案:A
2-180
下面定义结构变量的语句中错误的是()。(2分)
A.struct student{ int num; char name[20]; } s;
B.struct { int num; char name[20]; } s;
C.struct student{ int num; char name[20]; }; struct student s;
D.struct student{ int num; char name[20]; }; student s;
答案:D
2-181
如果有以下定义语句,则输出结果为()。(2分)
struct {
int x, y;
} s[2] = { { 1, 3 }, { 2, 7 } };
printf(“%d\n”, s[0].y/s[1].x );
A.0
B.1
C.2
D.3
答案:B
2-182
根据下面的定义,能打印出字母M的语句是()。(2分)
struct person{
char name[10];
int age;
} c[10] = { “John”, 17, “Paul”, 19, “Mary”, 18, “Adam”, 16 };
A.printf(“%c”, c[3].name);
B.printf(“%c”, c[3].name[1]);
C.printf(“%c”, c[2].name[0]);
D.printf(“%c”, c[2].name[1]);
答案:C
2-183
设有如下定义,则对data中的a成员的正确引用是()。(2分)
struct sk{ int a; float b; } data, *p=&data;
A.( * p).data.a
B.( * p).a
C.p->data.a
D.p.data.a
答案:B
2-184
对于以下结构定义,( *p)->str++中的++加在()。(2分)
struct { int len; char *str; } *p;
A.指针str上
B.指针p上
C.str指向的内容上
D.语法错误
答案:D
2-193
要调用数学处理函数时,在#include命令行中应包含()。(2分)
A.“stdio.h”
B.“string.h”
C.“math.h”
D."ctype.h"
答案:C
2-194
对于以下递归函数f,调用f(4),其返回值为() 。(2分)
int f(int n)
{ if (n) return f(n - 1) + n;
else return n;
}
A.10
B.4
C.0
D.以上均不是
答案:A
2-195
执行下列程序后变量i的值应为()。(2分)
#define MA(x, y) ( x*y )
i = 5;
i = MA(i, i + 1) – 7;
A.30
B.19
C.23
D.1
答案:B
2-196
宏定义“#define DIV(a, b) a/b”,经DIV(x + 5, y - 5) 引用,替换展开后是()。(2分)
A.x + 5 / y - 5
B.(x + 5 / y – 5)
C.(x + 5) / (y - 5)
D.(x + 5) / (y - 5);
答案:A
2-197
执行下面程序,正确的输出是()。(2分)
int x = 5, y = 7;
void swap ( )
{
int z ;
z = x ; x = y ; y = z ;
}
int main(void)
{
int x = 3, y = 8;
swap ( ) ;
printf ("%d,%d \n", x , y ) ;
return 0 ;
}
A.3,8
B.8,3
C.5,7
D.7,5
答案:A
2-198
下面说法中正确的是()。(2分)
A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度
B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度
C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑变量生命周期问题
D.静态全局变量使用过多,可那会导致动态存储区(堆栈)溢出
答案:A
2-209
下面程序的运行结果是()。(2分)
#include<stdio.h>
int main(void)
{
int x[5] = { 2, 4, 6, 8, 10 }, *p, **pp;
p = x;
pp = &p;
printf("%d ", *(p++)); /* 数字后有一个空格 */
printf("%d\n", **pp);
return 0;
}
A.4 4
B.2 4
C.2 2
D.4 6
答案:B
2-210
对于以下变量定义,正确的赋值是()。(2分)
int *p[3], a[3];
A.p = a
B. *p = a[0]
C.p = &a[0]
D.p[0] = &a[0]
答案:D
2-211
下列程序的输出是()。(2分)
#include<stdio.h>
int main(void)
{
int i, a[12] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }, *p[4];
for (i = 0; i < 4; i++){
p[i] = &a[i*3];
}
printf("%d\n", p[3][2]);
return 0;
}
A.上述程序有错误
B.6
C.8
D.12
答案:D
2-212
下列程序的输出结果是()。(2分)
#include <stdio.h>
#include <string.h>
char *fun(char *t)
{
char *p = t;
return (p+strlen(t)/2);
}
int main(void)
{
char *str = "abcdefgh";
str = fun(str);
puts(str);
return 0;
}
A.abcdefgh
B.abcd
C.efgh
D.fgh
答案:C
2-219
以下语句将输出 ()。(2分)
#include <stdio.h>
printf("%d %d %d", NULL, '\0', EOF);
A.0 0 1
B.0 0 -1
C.NULL EOF
D.1 0 EOF
答案:B
2-220
如果二进制文件a.dat已经存在,现在要求写入全新数据,应以()方式打开。(2分)
A.“w”
B.“wb”
C.“w+”
D."wb+"
答案:B
2-221
定义FILE *fp; 则文件指针fp 指向的是()。(2分)
A.文件在磁盘上的读写位置
B.文件在缓冲区上的读写位置
C.整个磁盘文件
D.文件类型结构体
答案:D
2-222
缓冲文件系统的文件缓冲区位于()。(2分)
A.磁盘缓冲区中
B.磁盘文件中
C.内存数据区中
D.程序文件中
答案:C
2-223
直接使文件指针重新定位到文件读写的首地址的函数是() 。(2分)
A.ftell()函数
B.fseek()函数
C.rewind()函数
D.ferror()函数
答案:C