赞
踩
华为2011应届生笔试题——软件研发(C语言)
2010-9-6
一、单选题
1. 分页系统的页面是为____所感知的.
A. 用户
B. 编译系统
C. 操作系统
D. 连接装配程序
2. 在请求页式存储管理中,当查找的页不在____中时,要产生缺页中断.
A. 外存
B. 内存
C. 虚拟内存
D. 地址空间
3. 下面关于内存管理的说法哪种是正确的____.
A. 页式内存管理存在严重的碎片问题
B. 段页式内存管理既减少了碎片问题,又减少了抖动问题
C. 分区式内存管理既存在碎片问题,又存在抖动问题
D. 段式内存管理不存在抖动问题
4. 在下列进程调度算法中,可能引起进程长时间得不到运行的算法是____.
A. 时间片轮转法
B. 可抢占式静态优先数法
C. 不可抢占式静态优先数法
D. 不可抢占式动态优先数法
5. 系统感知进程的唯一实体是____.
A. JCB
B. PCB
C. FCB
D. SJT
6. 线程和进程最主要的区别在于____.
A. 进程是UNIX下的概念,线程是Windows下的概念
B. 进程的效率比线程低
C. 在进程中可以创造线程,但线程中不能生成进程
D. 进程有自己独立的运行空间,线程的运行空间是共享的
7. 如果有N个节点用二叉树结构来存储,那么二叉树的最小深度是____.
A. log2(N)
B. ln(N+1)
C. log(N)
D. log2(N+1)
8. 如果在排序过程中,每次均将一个待排序的记录按关键字大小加入到前面已经有序的子表中的适当位置,则该排序方法称为____.
A. 归并排序
B. 插入排序
C. 冒泡排序
D. 堆排序
9. 在循环队列中用数组A[0...m-1]存放队列元素,其队头和队尾指针分别为front和rear,则当前队列中的元素个数是____.
A. (front-rear+1)%m
B. (rear-front+1)%m
C. (rear-front+m)%m
D. (front-rear+m)%m
10.在一个单向链表中,已知q结点是p结点的前驱,若在q和p之间插入s节点,则执行____.
A. s.next = p.next; p.next = s;
B. p.next = s.next; s.next = p;
C. p.next = s; q.next = q;
D. q.next = s; s.next = p;
11.采用顺序搜索方法查找长度为n的顺序表时,搜索成功的平均搜索长度为____.
A. n
B. (n+1)/2
C. (n-1)/2
D. n/2
12.五层完全二叉树有____个节点.
A. 16
B. 31
C. 32
D. 33
解析:题目有点问题,完全二叉树的定义是: 深度为k,有n个节点的二叉树,当且仅当其每一个节点都与深度为k的满二叉树中编号从1~n的节点一一对应时,称为完全二叉树,所以五层完全二叉树最少有16个节点,最多有31个节点.
13.下列关于线性链表描述正确的是____.
A. 适用于数据项数量已经确定的情况
B. 因为都是线性表,对于已经排序的链表和数组搜索时间复杂度是O(n)
C. 逻辑相邻的两元素的存储空间可以是不连续的
D. 双向链表和单向链表,在搜索的时间复杂度上前者更优
14.循环单向链表指____.
A. 都不是
B. 可以自由膨胀的链表
C. 链表含有指向上一级节点的指针域
D. 最后一个节点的指针域总是指向链表头
15.若果关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递信赖,则称关系R是____.
A. 第一范式
B. 第二范式
C. 第三范式
D. BCNF范式
16.下面哪条SQL语句是数据库定义语言DDL____.
A. select StdID, Score from t_Scores
B. delete * from t_Scores
C. update t_Scores set Score = 0 where StdID = 1
D. alter table t_Scores add ExamDate data
17. 下述哪一条是并发控制的主要方法____.
A. 封锁
B. 授权
C. 日志
D. 索引
18.已知表T1和T2的字段定义完全相同,T1,T2中各有5条不同的数据,其中T1有2条数据存在于表T2中,如果对这两个表做自然连接操作,得到的新表共有几条记录?
A. 8条
B. 2条
C. 6条
19.下列关于指针的操作中,错误的是____.
A. 两个同类型的指针可以进行比较运算
B. 两个同类型的指针可以相加
C. 一个指针可以加上两个整数之差
D. 可以用一个空指针赋给某个指针
20.下面的代码的输出结果是____.
char *str = "huawei";
str[0] = 0;
printf("%s", str);
A. huawei
B. uawei
C. %s
D. 没有输出
解析: 此题中str是一个char型指针,指向字符串常量"huawei",下一句中试图修改str指向的内容是不对的,所以选D.
21.int a, b; void swap(&a, &b)交换a,b的值,则swap()的正确实现是____.
A.void swap(int *p1, int *p2)
{
int *p;
*p = *p1;
*p1 = *p2;
*p2 = *p;
}
B.void swap(int *p1, int *p2)
{
int p;
p = *p1;
*p1 = *p2;
*p2 = p;
}
C.void swap(int *p1, int *p2)
{
int *p;
p = p1;
p1 = p2;
p2 = p;
}
22.以下程序的描述是____.
enum NEW_SERV_ID
{
NSID_SERV_NULL = 0,
...
NSID_SERV254 = 254,
NSID_SERV255,
NSID_BUTT
}
unsigned char GetNsid(char nsid)
{
return (nsid);
}
GetNsid(NSID_SERV_NULL) = ____;
GetNsid(NSID_SERV255) = ____;
GetNsid(NSID_BUTT) = ____.
A. 0, 255, 256
B. 0, 254, 254
C. 0, 255, 0
D. 0, 254, 0
解析: NSID_BUIT的值是256,但nsid为char型,取值为0~255, 256越界为0.
23.已知int a = 5, b = 5, c = 4; 表达式(++a == b)? a:c--的值是____.
A. 4
B. 3
C. 5
D. 6
24.函数Fun()的实现如下:
void Fun(void)
{
int counter;
int temp1, temp2;
counter = 0;
temp1 = counter++;
temp2 = ++counter;
}
则下列说法不正确的有____.
A. temp2的值是1
B. temp1的值是0
C. counter的值是2
D. counter与temp2的值相等
25.下列C语言程序的输出结果是:
main()
{
union u {
struct s {
unsigned S1: 2;
unsigned S2: 3;
unsigned S3: 3;
} X;
unsigned char c;
} V;
V.c = 100;
printf("%d\n", V.X.S3);
}
A. 4
B. 0
C. 6
D. 8
26.在C标准库函数中,对于void memcpy(void *d, const void *s, size_t n);和void memmove(void *d, const void *s, size_t n);执行以下语句后:
char *str1 = "this is a string";
char *str2 = "this is a string";
memcpy(str1+4, str1, 6);
memmove(str2+4, str2, 6);
str1和str2的结果分别为____.
A. "thisthis istring", "thisthis istring"
B. "thisthis istring", "thisthisthstring"
C. "thisthisthstring", "thisthisthstring"
D. "thisthisthstring", "thisthis istring"
解析: memcpy()与memmove()的区别是: memmove()会把源字符串复制到一个临时区域,然后再复制到目标区域,因此在内存重叠的时候也能够正确执行;而memcpy()的行为是未定义的,不同的版本可能会有不同的实现.
27.typedef struct tagQUEUE
{
char *head;
long count;
} QUEUE_S;
void func(void)
{
int i;
QUEUE_S que[100], *q; // A
for (i=0; i<100; i++)
{
q = que + i; // B
strcpy(q->head, "head"); // C
q->count = i; // D
}
}
程序中____处有问题.
A. C
B. B
C. A
D. D
E. 没有问题
28.设有以下宏定义:
#define N 4
#define Y(n) ((N+1)*n)
则执行语句: Y(5+1)为____.
A. 26
B. 28
C. 30
D. 24
解析: Y(5+1)实际执行的是(4+1)*5+1=26.
29.计算出value的值是____.
#define GET_BIT(a, b, c) a << b - c
void main()
{
int a = 1;
int b = 5;
int c = 4;
printf("%d", GET_BIT(a, b, c) + 1);
}
A. 28
B. 27
C. 4
D. 5
解析: 实际执行的是 1<<5-4+1 ==> 1<<2 ==> 4. 注意"<
30.请问下面题目中的a, b, c输出值为多少?
#include
#define func(A) A++;\
A *= 10;
int main(int argc, char *argv[])
{
int a = 10;
int b = 20;
int c = 30;
if (a > 10)
func(a);
if (b >= 20)
func(b);
if (c > 30)
{
func(c);
}
printf("a = %d, b = %d, c = %d\r\n", a, b, c);
return 0;
}
A. 100, 210, 30
B. 100, 210, 300
C. 10, 210, 30
D. 110, 200, 30
解析: 第一个判断语句(a>10)为假,所以A++没有执行,但A*=10执行了,所以a=100.
31.以下程序的输出结果是____.
main()
{
int n = 4;
while (n--)
printf("%d ", --n);
}
A. 2 0
B. 3 1
C. 3 2 1
D. 2 1 0
32.以下程序的输出结果是____.
main()
{
int x = 10, y = 10, i;
for (i = 0; x > 8; y = ++i)
printf("%d, %d", x--, y);
}
A. 10, 1, 9, 2
B. 10, 10, 9, 1
C. 9, 8, 7, 6
D. 10, 9, 9, 0
33.下面关于C语言的描述中正确的是____.
A. 对于double类型的数组,不可以直接用数组名对数组进行整体输入和输出
B. 执行scanf("%4d%*d%4d", &x, &y, &z)语句,若输入为"1 2 3",则执行结果为x = 1, z = 3, y未赋值
C. C语言可以自动对数组边界进行检验
D. 在一个函数内的附和语句中定义的变量在本函数范围内有效(复合语句指函数中的成对括号构成的代码)
解析: 对应B选项,结果为 x = 1, y = 3, z未赋值.D选项中所说的变量仅在复合语句内有效.
34.若有以下的说明和语句,则在执行for语句后,*(*(pt+1)+2)表示的数组元素是____.
int t[3][3], *pt[3], k;
for (k=0; k<3; k++)
pt[k] = &t[k][0];
A. t[2][0]
B. t[1][2]
C. t[2][2]
D. t[2][1]
35.以下程序的输出是____.
main()
{
char *p;
char a[10] = {1,2,3,4,5,6,7,8,9,10};
p = a;
printf("%d,%d\n", *(p+2), *p+2);
}
A. 3,5
B. 4,3
C. 3,4
D. 3,3
36.有下面一段代码:
Char szMsisdn[MAX_LEN_MSISDN - 1];
szMsisdn[sizeof(szMsisdn)] = '\0';
则对执行以上代码后,正确的叙述为:____.
A. 程序执行后有问题,内存被踩
B. 程序执行后没有问题,执行后数组szMsisdn没有被初始化
C. 程序执行后没有问题,执行后初始化数组szMsisdn
D. 程序执行后有问题,只初始化了szMsisdn[MAX_LEN_MSISDN - 1]的空间
解析: 内存被踩貌似是指内存重叠的情况,不是数组越界.
37.下列关于用户数据报协议UDP的说法,正确的是____.
A. UDP依靠IP协议传送报文
B. UDP是一种面向连接的服务
C. UDP的报文传送需要确认
D. UDP报文是排序的
38.IP是____协议.
A. 面向连接的协议
B. 介质访问控制协议
C. 应用层的协议
D. 无连接的协议
39.关于IPv4地址的分类和划分,描述错误的是____.
A. 按照地址格式方式目前分为A/B/C/D/E五类
B. A类和B类地址一般都要进行子网划分
C. D类地址的范围是224.0.0.0到240.255.255.255
D. 按照目的端的不同,可以划分为单播地址、广播地址、组播地址三种
40.下面哪个不是三层网络技术____.
A. IPv4
B. VLAN
C. IPv6
D. IPX
二、运用题
对于采用顺序结构存储的串R,编写一个函数删除R中R中第i个元素开始的j个字符,禁止使用内存拷贝函数。其中顺序串的数据结构定义如下:
#define MAX_LEN 100
typedef struct tagOrderString
{
unsigned char ucVer[MAX_LEN]; //存储字符串
unsigned int ulLen; //字符串长度
} OrderString_S;
//函数返回值定义如下
#define SUC 1 //返回成功
#define FAIL -1 //返回失败
int OrderString_Deletesub(OrderString_S *R, unsigned int i, unsigned int j)
阅读(3686) | 评论(7) | 转发(0) |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。