C&C++)试题

代码能力(C&C++)试题

 

一、 选择题(每题4分,总共32分):

1、 以下对一维整形数组正确的是:______

A、 int a(10);

B、 int n = 10, a[n];

C、 int n; scanf(“%d”, &n); int a[n];

D、 #define SIZE 10

int a[SIZE];

2、 关于变量,正确的是:______

A、 若全局变量仅在单个C文件中访问,则可将此变量改为静态全局变量,以降低模块间耦合度;

B、 若全局变量仅在单个函数中访问,则可将此变量改为静态局部变量,以降低模块间耦合度;

C、 设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;

D、 静态全局变量过大,可能导致堆栈溢出;

3、 关于编译预处理的功能,包括但不限于:______

A、 语言的预处理功能是指完成宏替代和包含文件的调用;

B、 预处理指令只能位于源程序的首部;

C、 凡是源程序中行首以#标识的行指令都是预处理指令;

D、 语言的编译处理就是对源程序进行初步的语法检查;

4、 关于结构,正确的是:______

A、 结构占用空间大小不仅取决于结构成员的定义,还取决于结构成员的定义顺序以及结构的字节对齐方式;

B、 结构成员的排列顺序会影响结构成员数据的存取效率;

C、 功能太单一的结构会降低代码效率;

D、 结构中使用位域,既可节省空间,也能提高存取效率;

5、 关于函数参数,不正确的是:______

A、对参数输入和非参数输入都要检查有效性;

B、防止将函数的输入参数用作工作变量;

C、调用函数填写参数时,应尽量减少没有必要的默认数据类型转换或强制类型转换;

D、非调度函数应减少或防止控制参数,尽量不要使用数据参数;

6、 以下语句可读性较好的有:______

A、 rect.length = 0; char_poi = str; rect.width = 5;

B、 if(Trunk[index].trunk_state == 0){}

C、 word = (high << 8) | low;

D、 *++stat_poi+=1;

7、 以下程序的运行结果为:______

void sub(int x, int y, int *z)

{

*z = y - x;

}

int main(void)

{

int a, b, c;

sub(10, 5, &a);

sub(7, a, &b);

sub(a, b, &c);

printf(“%4d, %4d, %4d\n”, a, b, c);

}

A-5    -12    -17

B-5    -12    -7

C5      2     3

D5     -2     -7

8、以下程序的输出结果是:______

#define M 5

#define N M+M

void main()

{

int k;

k = N*N*5;

printf(“%d\n”, k);

}

A500

B55

C125

D100

二、 判断题(每题2分,总共16分):

1、【   】 char a[][2][3][4][5][6];这样的全局变量定义是允许的。

2、【   】 typedef在重定义类型上比#define安全。

3、【   】 任意两个类型的指针都可以进行<>>=<===等比较。

4、【   】 公共变量时增加模块间耦合的原因之一,故应减少没有必要的公共变量以降低模块间耦合度。

5、【   】 数组比指针寻址存取效率高,因此推荐使用数组,少用指针。

6、【   】 递归调用使代码简洁,所以应该尽量多的使用;

7、【   】 只应该把函数、变量以及函数类型三种对象放置于extern “C”的内部;

8、【   】 同一软件产品内,应规划好接口部分标识符(变量、结构、函数、常量)的命名,防止编译、链接时产生冲突,如规定函数命名加与模块相关的前缀。

 

三、 问答题:

1、 以下程序是求一个数的平方,请指出错误之处并修改(6分)。

#define SQUARE(a) ((a)*(a))

int main(void)

{

int a = 5;

int b;

b = SQUARE(a++);

printf(“a=%d, b=%d\n”, a, b);

return 0;

}

 

2、请写出以下代码执行结果(10分)。

int inc(int a)

{

return (++a);

}

int multi(int *a, int *b, int *c)

{

*c = (*a) * (*b);

return (*c);

}

typedef int (FUNC1)(int in);

typedef int (FUNC2)(int *, int *, int *);

void show(FUNC2 fun, int arg1, int *arg2)

{

FUNC1 p = &inc;

int temp = p(arg1);

fun(&temp, &arg1, arg2);

printf(“%d\n”, *arg2);

}

int main(void)

{

int a;

show(multi, 10, &a);

return 0;

}

 

3、请找出以下代码错误,按编程规范重写之,并写出执行结果(18分)。

#include <string.h>

int main(void)

{

char *src=”hello world”;

char *dest=NULL;

int len=strlen(src);

dest=(char *)malloc(len);

char*d=dest;

char*s=src[len];

while(len--!=0)

d++=s--;

printf(“%s”,dest);

return 0;

}

 

4、请实现strcpy函数(18分)。

 

 

 

试题答案

选择题:

1、 D

2、 ABC

3、 C

4、 AB

5、 D

6、 C

7、 A

8、 B

判断题:

1、 F

2、 T

3、 F

4、 T

5、 F

6、 F

7、 T

8、 T

问答题:

1

#define SQUARE(a) ((a)*(a))

int main(void)

{

int a = 5;

int b;

// b = SQUARE(a++);

b = SQUARE(a); // 第二个a取值为6

a++;

printf(“a=%d, b=%d\n”, a, b);

return 0;

}

2110

3

#include <string.h>

int main(void)

{

char *src = ”hello world”;

char *dest = NULL;

int len = strlen(src);

// dest=(char *)malloc(len); 

dest = (char *)malloc(len+1); // ’\0’分配一个字节空间

char*d = dest;

// char*s=src[len]; 

char*s = src[len-1]; // 指向最后一个字符

while(len--!=0)

{

d++=s--;

}

*d = 0; // 尾部要加’\0’

printf(“%s”,dest);

free(dest); // 使用完内存要释放,避免内存泄露

return 0;

}

4

int strcpy(char *dst, char *src)

{

int ncount;

char *pdst, *psrc;

pdst = dst;

psrc = src;

ncount = 0;

while(pdst != NULL && psrc != NULL)

{

if(*psrc == 0)

{

*pdst = 0;

break;

}

*pdst++ = *psrc++;

ncount++;

}

return ncount;

}

 

你可能感兴趣的:(C&C++)试题)