LinuxC考试题
一、选择题(每题2分,20题,共40分)
1.在 Shell 环境中的预定义变量中,以下( )用于表示执行上一条命令后的返回状态。 | |||
A.$! B.$? C.$$ D.$0 | |||
2.下列哪些命令可以测试网络通不通?( ) | |||
A.ping B.netstat C.trace D.route
| |||
4.目前流行的两种软件包管理机制,Debian使用()软件包 | |||
A.zip B.rpm C.tar D.deb | |||
5.将光盘/dev/hdc卸载的命令是?( ) | |||
A.umount /mnt/cdrom /dev/hdc | |||
B.unmount /dev/hdc | |||
C.umount /dev/hdc | |||
D.unmount /mnt/cdrom /dev/hdc | |||
6.下面代码中p和"hello,world"存储在内存哪个区域? ( ) | |||
int main() | |||
{ | |||
char *p = "hello,world"; | |||
return 0; | |||
} | |||
A.栈,堆 B.栈,栈 C.堆,只读存储区 D.栈,只读存储区 | |||
7.下列关于makefile描述正确的有?( ) | |||
A.makefile文件保存了编译器和连接器的参数选项 | |||
B.主要包含了五个东西:显式规则、隐晦规则、变量定义、指令和注释 | |||
C.默认的情况下,make命令会在当前目录下按顺序找寻文件名为“GNUmakefile”、“makefile”、“Makefile”的文件, 找到了解释这个文件 | |||
D.在Makefile不可以使用include关键字把别的Makefile包含进来 | |||
8.下述程序第二次的输出结果是( ) | |||
int main(){ | |||
extern int a; | |||
int b=0; | |||
static int c; | |||
a+=3; | |||
other(); | |||
b+=3; | |||
other();} | |||
int a=5; | |||
void other(void){ | |||
int b=3; | |||
static int c=2; | |||
a+=5;b+=5;c+=5; | |||
printf(“%d,%d,%d”,a,b,c); | |||
c=b;} | |||
A.13,0,13 B.18,8,13 | |||
C.13,8,13 D.18,8,0 | |||
9.以下程序的运行结果为( )。 | |||
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, 2, 3 [B] -5, -12, -7 [C] -5, -12, -17 [D] 5, -2, -7 | |||
10.下面的代码输出是() | |||
void foo(void){ | |||
unsigned int a=6; int b=-20; | |||
(a+b>6)?puts(">6"):puts("<6"); | |||
A.>6 B.<6 | |||
11.在C语言中,数组作为函数的形参,函数调用时,若用数组名作为函数的实参,则实际上传递给形参的是( ) 。 | |||
A.数组首地址 B.数组的第一个元素值 | |||
C.数组中全部元素的值 D.数组元素的个数 | |||
12.int *p[4] 与选择项中的说明 ( ) 等价 | |||
A.int p[4] B.int *p C.int *(p[4]) D.int (*p)[4] | |||
13.在给定文件中查找与设定条件相符字符串的 | |||
命令为() | |||
A.grep B.gzip | |||
c.find D.sort | |||
14.在一个C源程序文件中,若要定义一个只允许 | |||
在本源文件中所有函数使用的全局变量,则该变 | |||
量需要使用的存储类别是() | |||
A.extern B.static C.auto D.register | |||
15.下面这段C程序的输出是( ) | |||
void foo(int b[][3]) | |||
{ | |||
++b; | |||
b[1][1] = 9; | |||
} | |||
void main() | |||
{ | |||
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; | |||
foo(a); | |||
printf("%d",a[2][1]); | |||
} | |||
A.8 B.9 C.7 D.以上均不对 | |||
16.在32为系统下小端系统,并4字节对齐的条件 | |||
union u_union | |||
{ | |||
unsigned int iiar | |||
char cvar; | |||
short svar; | |||
}uu; uu.iiar=0x12345678? uu.cvar=() | |||
A.0x12345678 | |||
B.0x5678 | |||
C.0x12 | |||
D.0x78 | |||
17.以下程序的输出结果是( ) | |||
#include <stdio.h> | |||
int main() | |||
{ | |||
char str[] = "ABCD", *p = str; | |||
printf("%d\n",*(p+4)); | |||
return 0; | |||
} | |||
A. 68 B.0 C.字符'D'的地址 D.不确定的值 | |||
18.由多个源文件组成的C程序,经过编辑、预处理、编译、链接等阶段会生成最终的可执行程序。 下面哪个阶段可以发现被调用的函数未定义?( ) | |||
A.预处理 B.编译 C.链接 D.执行 | |||
19.若要将当前目录中的myfile.txt文件压缩成 | |||
myfile.txt.tar.gz,则实现的命令为() | |||
A.tar -cvf myfile.txt myfile.txt.tar.gz | |||
B.tar -zcvf myfile.txt myfile.txt.tar.gz | |||
C.tar -zcvf myfile.txt.tar.gz myfile.txt | |||
D.tar -cvf myfile.txt.tar.gz myfile.txt | |||
20.以下关于头文件,说法正确的是( ) | |||
A.#include<filename.h>,编译器寻找头文件时,会从当前编译的源文件所在的目录去找 | |||
B.#include“filename.h”,编译器寻找头文件时,会从指定的目录去找 | |||
C.多个源文件同时用到的全局整数变量,它的声明和定义都放在头文件中,是好的编程习惯 | |||
D.在大型项目开发中,把所有自定义的数据类型、全局变量、函数声明都放在一个头文件中, | |||
各个源文件都只需要包含这个头文件即可,省去了要写很多#include语句的麻烦,是好的编程习惯。 | |||
二、代码输出题:(每题3分,5题,共15分) | |||
1 | |||
#include <stdio.h> | |||
int main() | |||
{ | |||
int a,b,c; | |||
a = 1, b = 2, c = 0; | |||
if(a-- || b++ && --c) | |||
{ | |||
printf("%d %d %d\n",a,b,c); | |||
} | |||
return 0; | |||
} | |||
__________________ | |||
2.若有以下输入(<CR>代表回车换行符),则下面程序的运行结果为( )。 | |||
1,2<CR> | |||
int main(void) | |||
{ | |||
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; | |||
int (*p)[4], i, j; | |||
p = a; | |||
scanf(“%d,%d”,&i,&j); | |||
printf(“%d\n”, *(*(p+i)+j)); | |||
return 0; | |||
} | |||
________________________ | |||
3 | |||
#include <stdio.h> | |||
#include <string.h> | |||
int main() | |||
{ | |||
char *p1 = "123", *p2 = "ABC", str[50] = "xyz"; | |||
strcpy(str + 2, strcat(p1,p2)); | |||
printf("%s\n",str); | |||
return 0; | |||
} | |||
4 | |||
#include <stdio.h> | |||
void f(char **p) | |||
{ | |||
*p += 2; | |||
} | |||
int main() | |||
{ | |||
char *a[] = {"123","456","789"}, **p; | |||
p = a; | |||
f(p); | |||
printf("%s\r\n",*p); | |||
return 0; | |||
} | |||
5 | |||
void fun(char *w, int m) | |||
{ | |||
char s,*p1, *p2; | |||
p1 = w; | |||
p2 = w+m-1; | |||
while (p1<p2) | |||
{ | |||
s=*p1; | |||
*p1=*p2; | |||
*p2=s; | |||
p1++; | |||
p2--; | |||
} | |||
} | |||
main( ) | |||
{ | |||
char a[]="123456"; | |||
fun( a, strlen(a) ); | |||
puts(a); | |||
} 程序运行后的输出结果是______________________________ | |||
三、简答题(4题,每题3分,,第4个6分共15分) | |||
1.简述Linux操作系统的模块结构,并介绍各模块功能。 | |||
2.GDB是什么?如何使用GDB调试程序 | |||
3.简述条件编译的优势,和使用方法。 | |||
4.编程:创建目录dir,将当前路径下的所有普通文件拷贝到dir下(注意文件夹不复制) | |||
四、编程题(1,2,10分,第3题15分,总共35分) | |||
char * reverse (char *),反置字符串s,即可将“break”成为“kaerb” 2.下面findmax函数将计算数组中的最大元素的地址,请编写该函数。 3.创建一个结构体指针,malloc出5个结构体的空间,成员包含姓名,成绩(数据类型自己设定),写一个程序,要求可以循环的从终端输入学生信息。完成输入后自动打印出所输入的学生信息,打印结果按学生成绩从低到高打印 |