丙说:“在甲和丁中间有一人是罪犯。”
丁说:“乙说的是事实。”
经过充分的调查,证实这四人中有两人说了真话,另外两人说的是假话。
那么,请你对此案进行裁决,确认谁是罪犯?( 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];
1,2
int a[3][4] = {1,2,3,4
,5,6,7,8, 9,10,11,12};
}
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 (*p)[4], i, j; p = a;
scanf(“%d,%d”,&i,&j); printf(“%d\\n”, *(*(p+i)+j)); return 0;
3. 若有以下输入(
int main (void)
{ }
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
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;
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] } } }
}
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++;
= p[j + 1]; = tmp;
P[j + 1] = p[j];
} 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);
} }