一、选择题(23题,每空2分,共46分)
1./etc/shadow文件中存放( B )。
A.用户账号基本信息 B.用户口令的加密信息 用户组信息 文件系统信息
2.LINUX所有服务的启动脚本都存放在( B )目录中。
A./etc/rc.d/init.d
3. 若要将当前目录中的myfile.txt文件压缩成myfile.txt.tar.gz,则实现的命令为( C )。
A
C.tar -zcvf myfile.txt.tar.gz myfile.txt D.tar -cvf myfile.txt.tar.gz myfile.txt
4.在使用mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的选项( D )。
A.-m
5.任何时候用户需要回到用户主目录时可以使用命令 ( A ) 。
A. cd .
6.将当前目录下的文件shell.sh移动到目录/home/linux下的命令为( B ) 。
A. cp shell.sh /home/linux
C. ls shell.sh / home/linux/she
7.下面( C )命令不能用来显示文件的内容。
[A] more [B] less [C] find [D] cat
8.以下程序的运行结果为( C )
#include #include int SubCount(char *dest, int count) { strcpy(dest,"555"); count++; return 0; } int main() { int count = 3; char caBuf[8]; SubCount(caBuf,count); printf("%d\\n",count); return 0; } [A] 8 [B] 4 [C] 3 [D] 5 9. 下面的代码输出是( A ) void foo(void) { unsigned int a = 6; int b = -20; (a+b > 6) ? puts("> 6") : puts("<= 6"); } [A] > 6 [B] <= 6 10. C语言中,逻辑“真”等价于( 。 [A] 大于零的数 [B] 大于零的整数 [C] 非零的数 [D] 非零的整数 11. 删除文件命令为 A.mkdir 12. 假设文件fileA的符号链接为fileB,那么删除fileA后,下面的描述正确的是( D )。 [A].fileB也随之被删除 [B].因为fileB未被删除,所以fileA会被系统自动重新建立 [C].fileB会随fileA的删除而被系统自动删除 [D].fileB仍存在,但是属于无效文件 13. 下面不是对Linux操作系统特点描述的是( B )。 [A] 良好的可移植性 [B] 单用户 [C] 多用户 [D] 多任务 14.在C语言中,要求运算数必须是整型的运算符是( D )。 [A] / [B] ++ [C] != [D] % 15.下述程序的输出结果是( C )。 int main(void) { int Y=100; while(Y--); printf(“Y=%d”,Y); } [A] Y=0 [B] Y=1 [C] Y=-1 [D] Y=随机数 16.目前流行的两种软件包管理机制,Debian使用( D )软件包,Redhat使用( B )软件包。 [A] tgz [B] rpm [C] tar [D] deb 17.在给定文件中查找与设定条件相符字符串的命令为( )。 A.grep 18. 刷新文件时间戳可以使用的命令为( )。 A.chmod 19.文件exer1的访问权限为744,现要取消文件所有者的执行权限,同时增加同组用的写权限,下列命令中正确的是( C )。 C. chmod a-x g+w exer1 D. chmod g+w exer1 20. Linux终端执行temp=world;echo hello $temp 上述命令执行的结果为(C)。 [A] . helloworld [B].[C]. hello w[C]. hello 21. 在32位系统下小端系统,并4字节对齐的条件下, union u_union { ; ; ; }uu; iu.cvar = ( D ); A.0x12345678 22./*pointer and function */ main() { int a[50],n; ........... fun(n,&a[9]); ........... } Which is incorrect ( D ) [A] void fun(int m,int x[]); [B]. void fun(int s,int h[41]) ; [C]. void fun(int p,int *s) ; [D]. void fun(int n,int a) ; 23. 一位法官在审理一起盗窃案中,对涉及到的四名嫌疑犯甲、乙、丙、丁进行了审问。四人分别供述如下: 甲说:“罪犯在乙、丙、丁三人之中。” 乙说:“我没有做案,是丙偷的。” 丙说:“在甲和丁中间有一人是罪犯。” 丁说:“乙说的是事实。” 经过充分的调查,证实这四人中有两人说了真话,另外两人说的是假话。 那么,请你对此案进行裁决,确认谁是罪犯?( A ) [A]、乙和丁是盗窃犯 、乙和丙是盗窃犯 [C]、乙是盗窃犯 、甲和丁是盗窃犯 二、填空题(6题,每题2分,共12分) 1. 管道 就是将前一个命令的标准输出作为后一个命令的标准输入 2.make工程管理器根据(时间戳 来自动发现更新过的文件从而减少编译的工作量。 3.将命令“command”的标准输出重定向到文件“file”中的方法是 command > file 。 4.GCC编译器中 -S 选项完成的工作是 只激活预处理和编译,而不进行链接,生成汇编代码 5.在Linux下调试c程序时,在提示符(gdb)下输入b 10表示 将断点设置在第十行 6.给了一个结构体, struct A{ char a ; char b ; char c ; short d; int e; short f; }; 求sizeof(struct A) = 24 三.简答题(3题,每题4分,共12分) 1. 什么是链接?符号链接与硬链接的区别是什么? 链接是指用一个i节点对应多个文件名。硬链接是把文件的i节点号指向该i节点, 且链接计数器值加1。删除链接文件时计数器值减1,当其值为0时,i节点被释放。 符号链接是只有文件名的一个链接文件,并不指向一个真正的i节点。在删除符号链接文件时与硬链接文件有区别。 2. 配置Ubuntu主机上网简要操作步骤是什么? 1.修改/etc/network/interfaces配置文件 2.重启网络服务:sudo /etc/init.d/networking restart 3.系统中的gcc软件太老了,我该怎么更新它? 1.sudo apt-get update 2.sudo apt-get install –reinstall gcc 四、编程题(3题,每题10分,共30分) 1.给定一个字符串“I love china”,编写程序完成以单词为单位的逆序,如“china love i”,并要求允许使用第三方变量保存数据,但可以使用辅助变量指针等。 这道题主要考察字符串的遍历查找以及分类处理,首先确定算法,我们可以这样处理字符串: 1. 将字符串整体导致:“anihc evol i” 2. 然后再次遍历字符串,将每个单词倒置:“china love i” 确定完算法后就可以用程序进行操作了,以下是程序的实现过程: #include < stdio.h> #define N 32 int swap(char *head, char *tail); int main() { char buff[N]; char *head = buff, *tail = buff; //先讲尾指针定位到字符串尾部。 While(‘\\0’!= *tail) tail ++; //调用swap函数将整个字符串倒置。 swap(buff,tail - 1); //主函数开始扫描遍历整个倒置后的字符串。 while('\\0' != *head) { //查找单词头。 while(32 == *head) head ++; //找到头后将尾定位到头,开始找单词尾。 tail = head; while(32 != *tail && '\\0' != *tail) tail ++; //前两步找到头之后将单词倒置(因为循环结束后tail指向‘\\0’,所以tail -1)。 swap(head,tail - 1); //单词倒置后将头指向尾,为下次找单词做准备。 head = tail; } puts(buff); return 0; } //swap函数,完成指定字符串倒置。 int swap(char *head, char *tail) { while(head < tail) { //异或法进行交换数据 *head ^= *tail; *tail ^= *head; *head ++ ^= *tail --; } } 2.思考”unsigned int a=0x12345678;”在内存中的存储形式,进而将其内存中每个字节里数据取出进行加和。 #include int main() { unsigned int x = 0x12345678; char *p = (char *)&x; int i = 0; int sum = 0; for(i = 0; i < sizeof(int); i++) { sum += *p++; } printf("sum = %#x\\n",sum); return 0; } 3.打印杨辉三角形前10行。(提示:定义数组a[10][10]) 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 int main() { int i , j, a[10][10] = {0}; for ( i=0; i<10; i++) { a[i][0] = 1; for ( j=1; j<=i; j++) { a[i][j] = a[i-1][j-1] + a[i-1][j]; } } for ( i=0; i<10; i++) { for ( j=0; j<=i; j++) { printf(“4d”, a[i][j]); } printf(“\\n”); }