1604期 第1期测试(面试精选:C,LINUX,数据结构部分)

本试卷从考试酷examcoo网站导出,文件格式为mht,请用WORD/WPS打开,并另存为doc/docx格式后再使用

试卷编号:241486
试卷录入者:
试卷总分:100
出卷时间:2016-05-05 17:09
答题时间:120分钟

一、单项选择题(共15题,每题2分,共30分)
1.下面关于i节点描述错误的是 [2分]
A. i节点和文件是一一对应的(每个文件都有唯一一个索引结点号与之对应,而对于一个索引结点号,却可以有多个文件名与之对应)
B. i节点能描述文件占用的块数
C. i节点描述了文件大小和指向数据块的指针
D. 通过i节点实现文件的逻辑结构和物理结构的转换
参考答案:A

2.假设目录中存在若干文件file_num.txt(num表示文件编号,1~10),使用以下哪个通配符可以只挑选出其中的编号为1、3、5的文件?[2分]
A. file_*.txt
B. flie_?.txt
C. file_[135].txt
D. file_[^135].txt
参考答案:C

3.Linux文件权限一共10位长度,分成四段,第三段表示的内容是[2分]
A. 文件类型
B. 文件所有者的权限
C. 文件所有者所在组的权限
D. 其他用户的权限
参考答案:C
-rwxrw-rw-
4.如果有定义:char **a[3][4], sizeof(a)的结果是:[2分]

这是定义一个指向char*类型的指针二维数组
32位下应该是4*3*4=48字节
A. 4
B. 12
C. 48
D. 64
参考答案:C

5.有程序如下:
int main(void)
{
unsignedchar a = 0xa5;
unsignedchar b = ~a>> 4+1;
printf("%d\n",b);
return0;
}其执行结果是[2分]
A. 245
B. 246
C. 2
D. 250
参考答案:D
因为~的优先级别高于>>,所以是先对a取反,即1010 0101----> 0101 1010
因为+的优先级别大于>>,所以是右移5位,得到:0000 0010 结果是2;
但是这确实错误的答案,在vs2008上运行的时候结果却是 250;原来这是16为寄存器,
0xA5是:0000 0000 1010 0101;取反之后变成:1111 1111 0101 1010
右移5位后得到的是:0000 0111 1111 1010;由于unsigned char型只能表示低八位,这样既得到: 250;

6.有程序如下:
int main(void) {
char *a[] = {"hello", "the", "world"};
char **pa = a; pa++; printf("%s\n",*pa);
return0;
}其执行结果是[2分]
A. theworld
B. the
C. ello
D. elloworld
参考答案:B

7.在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结点,则执行( )[2分]
A. HL->next=P; P->=H->next;
B. p->next=HL; HL=p;
C. p->next=HL->next;HL->next=P
D. p->next=HL->next; p=HL;
参考答案:C

8.在32平台下,结构体data定义如下:
struct data
{
char a;
int b;
short c;
};
则其大小为[2分]
A. 8
B. 10
C. 12
D. 16
参考答案:C

9.阅读如下程序:
int a=5;
void show_val(void)
{
int b=3;
static int c=2;
a += 5;
b += 5;
c += 5;
printf("%d,%d,%d\n",a,b,c);
c = b;
}
int main(void)
{
int b=0;
static int c;
a += 3;
show_val(); // show values

b += 3;
show_val (); // show values again
return 0;
}
则其执行结果是 [2分]
A. 13,0,13
B. 18,8,13
C. 13,8,13
D. 18,8,0
参考答案:B

10.以下程序输出的结果是 ?????
int main(void){
int b = 3;
int arr[] = {6, 7, 8, 9, 10};
int *ptr = arr;
*(ptr++)+= 123;
printf("%d%d\n", *ptr, *(++ptr));
return0;
}[2分]
A. 8 8
B. 130 8
C. 7 7
D. 7 8
参考答案:A

然后int* ptr=arr;这一句使得ptr指针指向arr数组的第一个数,也就是6;
*(ptr++)+=123;这个不是先执行括号里面的,因为里面的是ptr++,这是先取值,再自加,这一句相当于*ptr+=123;ptr++;两句。实际就是使得*ptr指针的内容加上123。也就是数组第一个6加上123变成129。做完之后ptr自加。这时候ptr指针指向数组的第二个数7;
最后一个printf语句,先执行的是后面的*(++ptr)而不是*(ptr),所以ptr先自增,使得指针指向8,然后输出。这样就输出的都是8了。你可以把*(++ptr)和*(ptr)的位置对调一下,那么先执行*(ptr),再执行*(++ptr)。那么输出的就是8,7了。
不知道这么说你明白了没

11.二叉树中前序遍历的非递归算法是利用以下哪种数据结构[2分]
A. 顺序表
B. 队列
C. 栈
D. 树
参考答案:C

12.有以下代码:
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);
}
则其执行结果是[2分]
A. 5,2,3
B. -5,-12,-7
C. -5,-12,-17
D. 5,-2,-7
参考答案:B

13.有一棵二叉树如下:

用中序遍历法遍历之,则遍历的次序是[2分]
A. ABCDEFG
B. CBEGDFA
C. CBAEDGF
D. CEGDFBA
参考答案:B

14.设栈最大长度为3,入栈序列为1,2,3,4,5,6,,则不可能得出栈序列的是[2分]
A. 1,2,3,4,5,6
B. 2,1,3,4,5,6
C. 3,4,2,1,5,6
D. 4,3,2,1,5,6
参考答案:D
分析:A:可以1进栈然后1出栈,2进栈2出栈3,4,5,6,同理。
B:1进栈2进栈,然后2出栈,1出栈后面和A相同。
C:1,2,3进栈,然后3出栈4进栈,4出栈,2出栈,1出栈,5进栈5出栈,6进栈6出栈。
D:1,2,3,4都进,然后4 出栈 3出栈2出栈1出栈 但是进栈的时候已经超过最大长度了。

15.假设执行语句S的时间为O(1),则执行下列程序段的时间为
for(i=1;i<=n;i++)
for(j=i; j<=n; j++)
S;[2分]
A. O(n)
B. O(n2)
C. O(n*i)
D. O(n+1)
参考答案:B

二、填空及简答题(共10题,共34分)
1.分析sizeof的结果(在32位平台下)
int a[10] = {0};
sizeof(int) = 4
sizeof(char*) = 4
sizeof(char**) = 4
sizeof(a) = 40
sizeof(a[0]) = 4 [每空1分]

2.一个线性表为B=(12,23,45,57,20,03,78,31,15,36),设散列表为HT[0..12],散列函数为H(key)= key % 13并用线性探查法解决冲突,请画出散列表(空单元用‘#’代表)[3分]

参考答案:

78 15 03 57 45 20 31 23 36 12

3.请举出const关键字在C语言中的三种用途。[3分]

const int Max=100; int Array[Max];
void f(const int i)
可以节省空间,避免不必要的内存分配。 例如:
#define PI 3.14159 //常量宏
const doulbe Pi=3.14159; //此时并未将Pi放入ROM中 ......
double i=Pi; //此时为Pi分配内存,以后不再分配!
double I=PI; //编译期间进行宏替换,分配内存
double j=Pi; //没有内存分配
double J=PI; //再进行宏替换,又一次分配内存!

4..写出在双向循环链表中,在指针p指向的节点之前插入一个q节点的算法。[3分]

参考答案:
q->prior=p->prior;
(p->prior)->next=q;
q->next=p;
p->prior=q;

5.Typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。例如,思考一下下面的例子:
#define dPS struct s *
typedef struct s * tPS;
以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s指针。哪种方法更好呢?(如果有的话)为什么?[3分]

dPS p1,p2;
tPS p3,p4;
第一个扩展为
struct s * p1, p2;
上面的代码定义p1为一个指向结构的指,p2为一个实际的结构,这也许不是你想要的。第二个例子正确地定义了p3 和p4 两个指针。
参考答案
6.全局变量可不可以定义在可被多个.c文件文件包含的头文件中?为什么?[4分]

参考答案:肯定可以了,只要头文件不要被重复定义

7.static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?[3分]
文件内使用static全局变量,整个程序中可以用
Static局部变量作用域在函数内,但模块结束值不变,局部变量模块结束值释放
函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。
参考答案:

8.队列和栈有什么区别?[3分]

参考答案:
栈和队列是在程序设计中被广泛使用的两种线性数据结构,它们的特点在于基本操作的特殊性,栈必须按"后进先出"的规则进行操作,而队列必须按"先进先出"的规则进行操作。和线性表相比,它们的插入和删除操作受更多的约束和限定,故又称为限定性的线性表结构。

9.请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句[4分]

参考答案:#define MAX (a>b):a?b

10.如何输出源文件的文件名和目前执行行的行数?[3分]

参考答案:
printf("the file name: %s\n",__FILE__);
printf("the file name: %d\n",__LINE__);

三、请指出以下程序片段的不妥之处。(共4题,共16分)
1.程序片段一:
void GetMemory(char *p, int nNum)
{
p = (char *)malloc(sizeof(char) * nNum);
}
void Test(void)
{
char *str = NULL;
GetMemory(str, 100);
strcpy(str, "hello"); //rodata数据区不能改变值
}[4分]

参考答案:
值传递不能改变str的值,,所以实参str的值仍然为NULL,不能进行引用

2.下面的代码会在哪一行崩溃,为什么?
struct s
{
inti;
int*p;
};
int main(void)
{
structS s;
int*p = &s.i;
p[0]= 4;
p[1]= 3;
s.p= p;
s.p[1]= 1;
s.p[0]= 2;
return0;
}[4分]

参考答案:
s.p 和s.p[1]指向同一个地方,s.p[1] = 1就让s.p指向内存地址为1的位置,s.p[0]=2相当于*((int*) 1)=2;

3.下面的代码片段的输出是什么,为什么?
char *ptr;
if ((ptr = (char *)malloc(0)) == NULL)
puts("Got a null pointer");
else
puts("Got a valid pointer");[4分]

参考答案:
Got a valid pointer,malloc申请失败时,返回NULL,否则返回申请到的起始地址。

4.int main(void)
{
int a[5]={1,2,3,4,5};
int *ptr =(int *)(&a +1);
pinrtf(“%d,%d”,*(a+1),*(ptr-1));
}输出是什么,请简要说明原因[4分]

参考答案:*(a+1) = 2,*(ptr-1)= 5;
&a+1是在a指针的地址+1得到的是即a[4]后面的一个地址

四、编程题(共3题,共20分)
1.将一句话中的单词倒置,标点符号不用倒换,例如”I come from Tianjin!”倒换之后变成“Tianjin ! from come I”[7分]

参考答案:
#include<stdio.h>
#include<string.h>

void change(char *s);
reverse(char *s,int start,int end);

void main()
{
char s[50];
printf("请输入字符串\n");
gets(s);
change(s);
printf("到之后的字符串为%s\n",s);
}

void change(char *s)
{
int len,start,end,i;
len = strlen(s);
start = 0;
end = len-1;
reverse(s,start,end);
end = 0;
for(i = 0;i < len;)
{
if(s[i] != ' ')
{
start = i;
while(s[i] != ' ' && s[i] != '\0')
i++;

end = i-1;
reverse(s,start,end);;
}
i++;
}

}

reverse(char *s,int start,int end)
{
char temp;
while(start < end)
{
temp = s[start];
s[start] = s[end];
s[end] = temp;
start++;
end--;
}
}

2.编写程序把字符串转换成整型数 如:int atoi( const char * str)[6分]

int StrToInt(const char* str)
{
g_nStatus = kInvalid;
long long num = 0;
if(str != NULL)//至少保证字符串不为空
{
const char* digit = str;//用了一下中间变量,保存原始字符串,防止被破坏
// the first char in the string maybe '+' or '-'
bool minus = false;
if(*digit == '+')//通过第一个字符判断是正是负
digit ++;
else if(*digit == '-')
{
digit ++;
minus = true;
}
// the remaining chars in the string
while(*digit != '\0')//字符串结束标志
{
if(*digit >= '0' && *digit <= '9')
{
num = num * 10 + (*digit - '0');
// overflow
if(num > std::numeric_limits::max())//整数溢出的情况
{
num = 0;
break;
}
digit ++;
}
// if the char is not a digit, invalid input
else
{
num = 0;
break;
}
}
if(*digit == '\0')
{
g_nStatus = kValid;
if(minus)
num = 0 - num;//转化为负数的方式
}
}
return static_cast(num);
}
3.编写一个函数bubble_sort(),用冒泡法将数组int a[] = {49, 38, 65, 97, 76, 13, 27} 按升序排序。[7分]

参考答案:

#define SIZE 7

void show(int num[])
{
int i;
printf("\t");
for(i=SIZE; i>0; --i)
{
printf("%4d", num[SIZE-i]);
} printf("\n");
return;
}
void bubble_sort(int num[])
{
int i, j;
for(i=SIZE; i>0; --i)
{
int flag = 0;
for(j=0; j<i-1; j++)
{
int tmp;
if(num[j] > num[j+1])
{
tmp = num[j];
num[j] = num[j+1];
num[j+1] = tmp;
flag = 1;
}
}
show(num);
if(flag == 0) //nerver been changed
break;
}
return;
}
int main(void)
{
/* original data */
int array[SIZE] = {49, 38, 65, 97, 76, 13, 27};
printf("the original numbers are:\n");
show(array); /* bubble sorting */
printf("steps of bubble sorting:\n");
bubble_sort(array);
return 0;
}

≡ 本试卷共计32题,此处为结束标志。
≡ examcoo™

转载于:https://www.cnblogs.com/feige1314/p/7402087.html

C,LINUX,数据结构部分相关推荐

  1. fat32 linux 打包工具_11款最棒的Linux数据恢复工具发布啦!

    导读 无论你使用的是台式电脑还是笔记本,需要关注的重点之一都是如何保护好你的宝贵数据.因为总会有各种突发情况使你的系统崩溃,然后你要做的就是恢复数据.不管你怎么想,要是我失去了所有的数据却无法恢复的话 ...

  2. 【收集】11款Linux数据恢复工具

    如果你使用的是Linux操作系统,那么你一定想知道一旦硬盘崩溃的话又该如何保存和恢复数据.其实,现在有很多Linux数据恢复工具可以让我们摆脱数据安全的困扰.小编已经为各位准备好了一些最好的Linux ...

  3. Linux 数据可视化工具

    Linux 上用来实现数据的图形可视化的应用程序有很多,从简单的 2-D 绘图到 3-D 制图,再到科学图形编程和图形模拟.幸运的是,这方面的工具有很多开放源码实现,包括 gnuplot.GNU Oc ...

  4. 初始化Linux数据盘

    初始化Linux数据盘 创建弹性云服务器,待登录成功后,需要执行初始化数据盘操作,即格式化云硬盘,之后云硬盘才可以正常使用. 1.登录云服务器,执行以下命令获取自动初始化磁盘脚本. wget http ...

  5. linux硬盘恢复软件哪个好用,这些Linux数据恢复工具,你用过哪几个

    不论你运用的是台式电脑仍是笔记本,需求重视的要点之一都是怎么保护好你的名贵数据.由于总会有各种突发状况使你的系统溃散,然后你要做的就是恢复数据.不论你怎么想,要是我失去了一切的数据却无法恢复的话,我会 ...

  6. linux系统硬盘数据恢复软件下载,11 款最棒的 Linux 数据恢复工具

    原标题:11 款最棒的 Linux 数据恢复工具 (点击上方公众号,可快速关注) 英文:The Geek Desire 译者:码农网 www.codeceo.com/article/11-linux- ...

  7. 2020 年天津理工大学研究生招生考试 数据结构部分

    2020 真题 数据结构部分 一.选择题 阅读下列程序,时间复杂度为____. for(int i=0;i<n;i++) for(int j=1;j<n;j*=2) a[i][j]=i*j ...

  8. 13. Linux数据备份与恢复

    目录 13.1 Linux备份的重要性 13.2 Linux中的哪些数据需要备份? 13.3 Linux数据备份介质的选择 13.4 Linux备份策略 完全备份 累计增量备份 差异增量备份 13.5 ...

  9. 2021 年苏州大学计算机考研专业课 872 真题 --- 操作系统部分和数据结构部分

    2021 年苏州大学计算机考研专业课 872 真题 - 全部   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在CSDN中写博客 ...

  10. 11款最棒的Linux数据恢复工具

    无论你使用的是台式电脑还是笔记本,需要关注的重点之一都是如何保护好你的宝贵数据.因为总会有各种突发情况使你的系统崩溃,然后你要做的就是恢复数据.不管你怎么想,要是我失去了所有的数据却无法恢复的话,我会 ...

最新文章

  1. 【廖雪峰python进阶笔记】面向对象编程
  2. C# string 和byte[]之间的转换
  3. log4j源码阅读(一)之Logger
  4. odoo10 继承(扩展)、模块数据
  5. odbc如何连oracle数据库,不安装Oracle如何连数据库(odbc驱动)
  6. 华为Mate30、iPhone11、小米9 Pro 到底怎么选?
  7. 【Elasticsearch】如何在生产中执行Elasticsearch的零停机升级
  8. 关于微信小程序使用腾讯地理位置服务,线上版本无法生效的问题
  9. 【排序算法时间复杂度分析】递推式
  10. 8.Python进阶_异常处理
  11. android社交软件源码,Android 社交App+java web后台整套源代码
  12. 笔记总结-相机标定(Camera calibration)原理、步骤
  13. 关于ruoyi框架整合ueditor富文本编辑器
  14. java实现九九乘法表
  15. python——文档字符串
  16. SWING中模拟键盘输入例子
  17. pm2 : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\pm2.ps1,因为在此系统上禁止运行脚本
  18. python 恶搞(仿粽子写的)
  19. 雷军亲自站台,游戏手机能否成为市场增长新引擎?
  20. 【翻译】2020年云安全综合指南(风险,最佳实践,认证)

热门文章

  1. 安装tensorflow出现的问题
  2. HTML DOM Image 对象
  3. Apache Solr 全文检索概述 与 Win10 下安装 Solr
  4. 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_05-CMS需求分析-什么是CMS...
  5. 阶段3 3.SpringMVC·_04.SpringMVC返回值类型及响应数据类型_4 响应之返回值是ModelAndView类型...
  6. LR报错 No buffer space available Try changing the registry value 端口号不够用了
  7. UIDynamic(物理仿真)
  8. Javascript游戏,街头霸王
  9. 每日一码——链表基本操作
  10. 【leetcode_easy】590. N-ary Tree Postorder Traversal