文档库

最新最全的文档下载
当前位置:文档库 > Linux及C考试题附答案

Linux及C考试题附答案

华清远见嵌入式学院《Linux及C》考试题(A卷)

1-5 CBCDB

6-10 DBADD

11-15 CCCAA

16-20 C ADD C D A

21-23 DBA

一、选择题(23题,每空2分,共46分)

1.常见的Linux发行版本有很多,下面不是Linux发行版本的是( C)。

[A] Red Hat Linux [B] Ubuntu Linux [C] unix [D] 红旗

2.下面不是对Linux操作系统特点描述的是( B )。

[A] 良好的可移植性[B] 稳定性低[C] 多用户[D] 多任务

3.嵌套创建目录的命令可以使用( C )。

[A] mkdir –h [B] help mkdir [C] mkdir -p [D] man mkdir

4.假设目录中存在若干文件file_num.txt(num表示文件编号,1~8),使用以下( D )通配符可以挑选出其

中的编号为1、2、3、5、6、7的文件。

[A] file_*.txt [B] flie_?.txt [C] file_[1-7].txt [D] file_[^48].txt

5.文件权限r-x-w-r--对应的八进制表示形式为( B )

[A] 0536 [B] 0524 [C] 0656 [D] 0534

6.目前流行的两种软件包管理机制,Debian使用( D )软件包。

[A] zip [B] rpm [C] tar [D] deb

7.下述程序第二次的输出结果为( B )。

int main(void)

{

extern int a;

int b=0;

static int c;

a+=3;

other();

b+=3;

other();

}

int a=5;

other()

{

int b=3;

static int c=2;

a+=5; b+=5; c+=5;

printf("%d,%d,%d\n",a,b,c);

c=b;

}

[A] 13,0,13[B] 18,8,13 [C] 13,8,13[D] 18,8,0

8.C语言程序的三种基本程序是( A )。

[A] 顺序结构,选择结构,循环结构

[B] 递归结构,循环结构,转移结构

[C] 嵌套结构,递归结构,顺序结构

[D] 循环结构,转移结构,顺序结构

9.执行下面语句后的输出结果为( D )。

int i = -1;

if (i < =0)

{}

printf(“****\n”);

i = 2;

else

p rintf(“%%%%\n”);

[A] 乱码[B] %% [C] %%%%[D] 有语法错误,不能正确执行

10.在C语言中,要求运算数必须是整型的运算符是( D )。

[A] / [B] ++ [C] != [D] %

11.下面的程序运行结果为( C )。

char *RetMenory(void)

{

char p[] = “hello world”;

return p;

}

void Test(void)

{

char *str = NULL;

str = RetMemory();

puts(str);

}

[A] 语法有错误,不能编译[B] hello world[C]结果不可预知[D] hello world+乱码

12.下述程序的输出结果是( C )。

int main(void)

{

int Y=100;

while(Y--);

printf(“Y=%d”,Y);

}

[A] Y=0 [B] Y=1[C] Y=-1 [D] Y=随机数

13.结构体DATA定义如下,则sizeof(struct DATA)的值为( C )。

struct DATA

{

float f1;

int i;

char c2;

};

[A] 6 [B] 8 [C] 12 [D] 16

14.以下程序的功能是将字符串s中所有的字符c删除,那么空白处缺少的语句为:( A )。

#include

int main(void)

{

char s[80] ; abd abd\0

int i, j ; s[2] = s[3] = ‘d’

gets(s) ;

for ( i = j = 0 ; s [i] != ‘\0’ ; i++ )

{

if ( s [i] != ‘c’ )

S[j++] = s[i] ;

}

s [ j ] = ‘\0’ ;

puts ( s ) ;

return 0 ;

}

[A] s [ j++] = s [ i ] [B] s [ ++j ] = s [ i ]

[C] s [ j ] = s [ i ]; j++ [D] s [ j ] = s [ i ]

15.下面函数的功能是( A )。

int fun (char*x)

{

char*y=x;

while(*y++);

return(y-x-1);

}

[A] 求字符串的长度

[B] 比较两个字符串的大小

[C] 将字符串x复制到字符串y

[D] 将字符串x连接到字符串y后面

16./* Address */

unsigned short *a = (unsigned short *)0x800;

unsigned short *b= a+1;

b = ? ( C )

[A] 0x800[B] 0x801 [C] 0x802[D] 0x804

17.下面程序的功能是将已按升序排好序的两个字符串a和b中的字符,按升序归并到字符串c中,请为程序

中的空白处选择适当的语句。

#include

int main(void)

{

char a[ ] = “acegikm”;

char b[ ] = “bdfhjln pq”;

char c[80], *p;

int i = 0, j= 0, k = 0;

while( a[i] != ’\0’&& b[j] != ‘\0’ )

{

if ( a[i] < b[j] ) { ( ①) } A

else { ( ②) } D

k++;

}

c[k] = ‘\0’;

if ( ③) p = b + j; D

else p = a + i;

strcat ( c , p );

puts ( c );

}

①[A] c[k] = a[i]; i++; [B] c[k] = b[j]; i++;

[C]c[k] = a[i]; j++; [D] c[k] = a[j]; j++;

②[A] c[k] = a[i]; i++; [B] c[k] = b[j]; i++;

[C] c[k] = a[i]; j++; [D] c[k] = b[j]; j++;

③[A] a[i] = ‘\0’[B] a[i] != ‘\0’

[C] b[j] = ‘\0’[D] b[j] != ‘\0’

18.若要将当前目录中的myfile.txt文件压缩成myfile.txt.tar.gz,则实现的命令为(C)。

[A] tar -cvf myfile.txt myfile.txt.tar.gz [B] tar -cjf myfile.txt myfile.txt.tar.gz

[C] tar -czf myfile.txt.tar.gz myfile.txt [D] tar -cxf myfile.txt.tar.gz myfile.txt

19.在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的

存储类别是( D )。

[A] extern [B]register [C] auto [D] static

20.下面的代码输出是( A )

void foo(void)

{

unsigned int a = 6;

int b = -20;

(a+b > 6) ? puts("> 6") : puts("<= 6");

}

[A] > 6 [B] <= 6

21.假设文件fileA的符号链接为fileB,那么删除fileA后,下面的描述正确的是(D )。

[A].fileB没有任何影响

[B].因为fileB未被删除,所以fileA会被系统自动重新建立

[C].fileB会随fileA的删除而被系统自动删除

[D].fileB仍存在,但是属于无效文件

22.以下程序的运行结果为( B )

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

23、一位法官在审理一起盗窃案中,对涉及到的四名嫌疑犯甲、乙、丙、丁进行了审问。四人供述如下:

甲说:“罪犯在乙、丙、丁三人之中。”

乙说:“我没有做案,是丙偷的。”

丙说:“在甲和丁中间有一人是罪犯。”

丁说:“乙说的是事实。”

经过充分的调查,证实这四人中有两人说了真话,另外两人说的是假话。

那么,请你对此案进行裁决,确认谁是罪犯?( A )

[A]、乙和丁是盗窃犯[B]、乙和丙是盗窃犯

[C]、乙是盗窃犯[D]、甲和丁是盗窃犯

二、填空题(每空2分,共14分)

1. 对文件file创建一个符号链接link( ln –s file link )。

2. 若有以下定义和语句,则*p[0]引用的是a数组元素中的( a[0] ),*(p[1]+1)引用的是a数组元素中

的( a[3] )。

int *p[3], a[6], i;

for( i = 0; i < 3; i++) p[i] = &a[2*i];

3. 若有以下输入(代表回车换行符),则下面程序的运行结果为( 7 )。

1,2

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;

}

4. shell脚本的本质是( shell命令的有序集合)。

5. 将历史纪录追加到文件file.txt内( history >> file.txt )。

6. make工程管理器根据( 时间戳)来自动发现更新过的文件从而减少编译的工作量。

三、简答题(2题,每题5分,共10分)

1、下面findmax函数将计算数组中的最大元素及其下标值,请编写该函数。

#include

void findmax ( int s[ ], int t, int *k )

{

}

int main (void)

{

int a[10] = {12, 23, 34, 45, 56, 67, 78, 89, 11, 22}, k;

findmax ( a, 10, &k );

printf ( “最大元素为:%d, 其下标值为:%d\n”, a[k], k );

return 0;

}

2、现在有一个简单的工程项目,由main.c fun.c 和fun.h三个文件组成。其中main.c中包含主函数和fun.h 的头文件,fun.c中为功能函数的实现,fun.h中为fun.c中功能函数的声明。请写一个makefile实现这几个文件的编译。

$(CC)=gcc

test:fun.o main.o

$(CC) fun.o main.o -o test

*.o:*.c

$(CC) –c $(<) –o $@

main.o:main.c

gcc -c main.c -o main.o

四、编程题(每题10分,共30分)

1.编写一个shell脚本完成如下功能:

1.在家目录下创建文件夹filer

2.遍历当前文件夹下的文件,如果是普通文件则放入创建的filer中

3.打印出放入filer文件夹中的文件数目

# !/bin/bash

mkdir ~/filer

num=0

filelist=`ls`

for file in $filelist

do

if test -f $file

then

cp $file ~/filer

num=`expr $num + 1 `

fi

done

echo $num

2.打印杨辉三角形前10行。(提示:定义数组a[10][10])

1

1 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”);

}

3.创建一个结构体数组,数组名为student,成员包含学号,姓名,成绩(数据类型自己设定)。写一个程

序,要求可以循环的从终端输入学生信息。完成输入后自动打印出所输入的学生信息,打印结果按学生成绩从低到高打印。

Struct Student{

Int num;

Char name[64];

Int salary;

}student[N];

Sort(struct Student * p,int n)

{

Int i,j;

Struct student tmp;

For(i = 0;i < n -1;i++)

{

For(j = 0;j < n - i - 1;j++)

{

If(p[j].salary > p[j + 1].salary)

{

tmp = p[j + 1];

P[j + 1] = p[j];

P[j] = tmp;

}

}

}

}

Int main()

{

Int i = 0,j;

While((scanf(“%d%s%d”,student[i].name,student[i].name,student[i].salary)) == 3)

{

if(i < N)

{

i++;

}

else

{Puts(“list full”);}

}

Sort(student,i);

for(j = 0;j < i;j++ )

{

Printf(“num:%d\nname:%s\n,salary:%d\n”,student[j].num,student[j].name,student[j].salary);

}

}