2023年全国计算机等级考试上机考试题库二级C语言
上QQ阅读APP看书,第一时间看更新

3.1 基础篇

第1套 操作题考试题库试题

一、程序填空题

使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun()的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:部分源程序在文件blank1.c中。

不得增行或删行,也不得更改程序的结构!

试题程序:

1  #include <stdio.h>
2  #define N 5
3  typedef struct student {
4   long sno;
5   char name[10];
6   float score[3];
7  }STU;
8  void fun(char *filename, STU n)
9  { FILE *fp;
10  /*********found*********/
11   fp = fopen(【1】, “rb+”);
12  /*********found*********/
13   fseek(【2】, -(long)sizeof(STU), SEEK_END);
14  /*********found*********/
15   fwrite(&n, sizeof(STU), 1, 【3】);
16  fclose(fp);
17  }
18  main()
19  { STU t[N]={ {10001,”MaChao”, 91, 92, 77}, {10002,”CaoKai”, 75, 60, 88},
   {10003,”LiSi”, 85, 70, 78}, {10004,”FangFang”, 90, 82, 87},
   {10005,”ZhangSan”, 95, 80, 88}};
20  STU n={10006,”ZhaoSi”, 55, 70, 68}, ss[N];
21  int i,j; FILE *fp;
22  fp = fopen(“student.dat”, “wb”);
23  fwrite(t, sizeof(STU), N, fp);
24  fclose(fp);
25  fp = fopen(“student.dat”, “rb”);
26  fread(ss, sizeof(STU), N, fp);
27  fclose(fp);
28  printf(“\nThe original data :\n\n”);
29  for (j=0; j<N; j++)
30  { printf(“\nNo: %ld Name: %-8s
 Scores: “,ss[j].sno, ss[j].name);
31   for (i=0; i<3; i++) 
32  printf(“%6.2f “, ss[j].score[i]);
33   printf(“\n”);
34  }
35  fun(“student.dat”, n);
36  printf(“\nThe data after modifing :\n\n”);
37  fp = fopen(“student.dat”, “rb”);
38  fread(ss, sizeof(STU), N, fp);
39  fclose(fp);
40  for (j=0; j<N; j++)
41  { printf(“\nNo: %ld Name: %-8s Scores: “,ss[j].sno, ss[j].name);
42   for (i=0; i<3; i++) 
43  printf(“%6.2f “, ss[j].score[i]);
44   printf(“\n”);
45  }
46  }
二、程序修改题

使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数Creatlink()的功能是创建带头节点的单向链表,并为各节点数据域赋0~m-1的值。

请改正函数Creatlink()中指定部位的错误,使它能得出正确的结果。

注意:部分源程序在文件modi1.c中,不要改动main()函数,不得增行或删行,也不得更改程序的结构!

试题程序:

1  #include <stdio.h>
2  #include <stdlib.h>
3  typedef struct aa
4  { int data;
5   struct aa *next;
6  } NODE;
7  NODE *Creatlink(int n, int m)
8  { NODE *h=NULL, *p, *s;
9   int i;
10  /*********found*********/
11   p=(NODE )malloc(sizeof(NODE));
12   h=p;
13   p->next=NULL;
14   for(i=1; i<=n; i++)
15   { s=(NODE *)malloc(sizeof(NODE));
16    s->data=rand()%m; 
17    s->next=p->next;
18    p->next=s; p=p->next;
19   }
20  /*********found*********/
21   return p;
22  }
23  outlink(NODE *h)
24  { NODE *p;
25   p=h->next;
26   printf(“\n\nThe List :\n\n HEAD “);
27   while(p)
28   { printf(“->%d “,p->data);
29    p=p->next;
30   }
31   printf(“\n”);
32  }
33  main()
34  { NODE *head;
35   head=Creatlink(8,22);
36   outlink(head);
37  }
三、程序设计题

使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun(),该函数的功能是统计一行字符串中单词的个数,并将其作为函数值返回。字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。

注意:部分源程序在文件prog1.c中。

请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。

试题程序:

1  #include<string.h>
2  #include<stdio.h>
3  #define N 80
4  int fun(char *s)
5  {
6  
7  }
8  void main()
9  {
10   FILE *wf;
11   char line[N];
12   int num=0;
13   printf(“Enter a string:\n “);
14   gets(line);
15   num=fun(line);
16   printf(“The number of words is:%d\n\n “,num);
17  /*********found*********/
18   wf=fopen(“out.dat”,”w”);
19   fprintf(wf,”%d”,fun(“a big car”));
20   fclose(wf);
21  /*********found*********/
22  }