[说明]:
1、本试题中不考虑头文件引用问题(假定已经包含正确的头文件),C语言的标准函数都可用;
2、如果不特别说明,假定程序运行环境为:操作系统Windows 2000, VC6.0编译环境,缺省为四字节对齐,X86(80586)CPU处理器(32位小字节序处理器);
3、试卷需要回收再利用,请在答题纸上答题;
4、本试题满分为100分,答题时间为120分钟。
一.单选题(每小题2分,共20小题40分)
1、SVN典型工作流程中,在对工作对象做出修改前,先要进行( )操作。
A. checkout B. update C. revert D. commit
2、修改处理问题的时候,如果是平台共性问题,应在其他平台上对这个问题进行( )处理。
A.同时 B.同理 C.同仁 D.同步
3、修改代码时添加注释的Qicker快捷命令是?
A. mbg B. abg C. dbg D. mbe
4、通过什么工具可以获取一台未知版本的手机的版本号?
A.SourceInsight B.Eclipse C.META D. Catcher
5、新增文件时添加文件头部声明的Qicker快捷命令是?
A. func B. file C. fi D. hi
6、一个32位的机器,该机器的指针是多少位?
A. 8 B. 16 C. 32 D. 64
7、以下关于const关键字描述哪个是不正确的?
A. 表示常量和可以修改的变量; B. 可以修饰参数,作为输入参数;
C. 修饰函数,防止以外的改动; D. 修饰类的成员函数,不改变类中的数据成员。
8、比较如下两段代码:
Typedef struct EXAMPLE_STRU { unsigned int valid: 1; unsigned int degree: 2; PERSON person; unsigned int set_flg: 1; } EXAMPLE; |
typedef struct EXAMPLE_STRU { unsigned int valid: 1; unsigned int degree: 2; unsigned int set_flg: 1; PERSON person ; } EXAMPLE; |
左右两边定义的结构所占用的内存空间相差几个字节?
A. 0 B. 1 C. 2 D. 4
9、如下哪个方法是用来保护可重入函数的全局变量的?
A. 开中断 B. 互斥锁 C. 管道 D. 消息队列
10、下面关于函数的描述不正确的是?
A. 一个函数仅完成一件功能。 B. 为简单功能编写函数。
C. 函数的规模没有限制,写多少行都可以。 D. 不要设计多用途面面俱到的函数。
11、如下哪个例子的设计中不适合使用关键字volatile?
A. 手机电源键 B. 硬件时钟
C. 多线程中被多个任务共享的变量 D. 3D渲染引擎
12、优化函数结构时,下面描述的原则哪个是不正确的?
A. 不能影响模块功能的实现。
B. 仔细考查模块或函数出错处理及模块的性能要求并进行完善。
C. 通过分解或合并函数来改进软件结构。
D. 提高函数间接口的复杂度。
13、正式的软件产品中应该把断言及其他调测开关关掉是为了?
A. 防止无法重启系统 B. 减少程序代码空间
C. 提高系统的稳定性 D. 加快软件运行速度
14、如下关于效率的描述不正确的是?
A. 不应花过多的时间拼命地提高调用不很频繁的函数代码效率。
B. 尽量减少循环嵌套层次
C. 要追求紧凑的代码
D. 尽量用乘法或其它方法代替除法,特别是浮点运算中的除法
15、有如下程序代码:
#define OK 0
#define ERR 1
#define ERROR (-1)
#define BUFFER_SIZE 256
char *GetMemory(unsigned long ulSize)
{
char *pcBuf = NULL;
pcBuf = (char *)malloc(ulSize);
if(NULL == pcBuf)
{
return ERROR;
}
return pcBuf;
}
void Test(void)
{
char *pszBuf = NULL;
pszBuf = GetMemory(BUFFER_SIZE);
if(NULL != pszBuf)
{
strcpy(pszBuf, "Hello World!\r\n");
printf(pszBuf);
free(pszBuf);
}
return;
}
如下描述正确的是:
A、pszBuf指向的内存不能超过255
B、GetMemory函数的异常分支返回了-1,是一个非法地址
C、GetMemory中异常分支没有释放空间
D、pcBuf为局部指针,指向的内存将在GetMemory被调用后释放
16、如下关于测试维护的描述正确的是?
A. 可以通过“试”来解决问题 B. 清理、整理或优化后的代码只要经过测试即可
C. 通过手工备份的方式实现对代码版本进行维护 D. 代码版本升级要经过严格测试
17、如下宏定义不存在风险的是?
A. #define RECTANGLE_AREA( a, b ) ((a) * (b))
B. #define RECTANGLE_AREA( a, b ) (a) * (b)
C. #define RECTANGLE_AREA( a, b ) (a * b)
D. #define RECTANGLE_AREA( a, b ) a * b
18、如下代码:
#define SQUARE( a ) ((a) * (a))
int a = 5;
int b;
b = SQUARE( a++ );
执行完之后a和b的值是多少?
A. a = 6 b = 25 B. a = 7 b = 25 C. a = 7 b = 30 D. a = 7 b = 36
19、有如下代码:
#define SQUARE( a ) ((a) * (a))
int a = 5;
int b;
使用宏的方法正确符合规范的是?
A. b = SQUARE( a++ ); B. b = SQUARE( ++a );
C. b = SQUARE( a ); a++; D. b = SQUARE( (a)++ );
20、有下列程序代码:
#include <stdio.h>
void main()
{
union
{
int k;
char i[2];
}*s, a;
s = &a;
s->i[0] = 0x19;
s->i[1] = 0x18;
printf("%x\n", a.k);
}
输出结果是?
A. 不可预知 B. 1819 C. 1918 D. 180019
二.填空题(每空2分,共10空20分)
1、设有以下说明和定义:
typedef union
{
long i;
int k[5];
char c;
} DATE;
struct data
{
int cat;
DATE cow;
double dog;
} too;
DATE max;
则语句 printf("%d", sizeof(struct date) + sizeof(max)); 的执行结果是:_______。
2、请写出下列代码的输出内容:______;______;______。
#include <stdio.h>
int main(void)
{
int a, b, c, d;
a = 10;
b = a++;
c = ++a;
d = 10*a++;
printf("%d ",b);
printf("%d ",c);
printf("%d ",d);
return 0;
}
3、写出下列代码的输出内容:______。
#include <stdio.h>
int inc(int a)
{
return(++a);
}
int multi(int*a, int*b, int*c)
{
return (*c = *a**b);
}
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("%dn", *arg2);
}
main()
{
int a; //局部变量a为0;
show(multi, 10, &a);
return 0;
}
4、有如下代码:
unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;
请问:p1 + 5 = ;p2 + 5 = 。
5、写出下列代码的输出: ; 。
main()
{
int a[5] = {1, 2, 3, 4, 5};
int *ptr = (int *)(&a+1);
printf("%d", *(a+1));
printf("%d", *(ptr-1));
}
6、Heap是堆,Stack是栈,Stack的空间由操作系统自动分配/释放,Heap的空间 分配/释放,Stack空间有限,Heap是很大的自由存储区。
三.简答题(每小题4分,共5小题20分)
1、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
2、引用与指针有什么区别?
3、堆栈溢出一般是由什么原因导致的?
4、队列和栈有什么区别?
5、编译工作区的时候,往往会遇到错误码为“0x00000002”的编译错误,查找相应的错误描述却没有找到,出现此种情况的原因是什么?应该怎样处理?
四.编程题(每小题10分,共2小题20分)
1、编写函数实现一个整数的逆序输出,整数由参数n表示,例如n=1234,则输出4321,要求不可以使用任何C库函数,函数原型如下:void inv(int n);
2、求2~2000的所有素数并打印在屏幕上,有足够的内存,要求尽量快。
void GetPrimeNumbers(void);