【指南】计算机二级C语言上机操作指南

1 上机考试介绍
全国计算机等级考试二级 C 语言的上机考试时间为90 分钟,考试时间从考生点击“开
始考试并倒计时”按钮考试,由考试系统自动倒计时。倒计时结束前5 分钟,考试系统会自
动报警题型考生考试即将结束并注意存盘。当倒计时结束,考试系统将自动锁定计算机,考
生将不能再进行任何操作。当考生点击“交卷”按钮后,考试系统也会自动锁定计算机。
注意:无论由于什么原因,考试系统在锁定计算机后,考生都要举手报告监考老师,由监考
老师输入密码后,方可离开考场。
上机考试的满分为 100 分,由一道填空题(30 分)、一道改错题(30 分)以及一道编程
题(40 分)组成。90 分(含 90 分)以上为“优秀”, 80 分(含 80 分)以上为良好,60 分
(含 60 分)以上为及格。上机考试的题目由计算机随机从题库中抽取,因此每个考生的题
目与其附近考生的题目都不一样。考 试系统只能够正常登录一次,在 考生第一次正常登录后,
无论是由于什么原因导致考试系统退出,考生都不能再次登录,除非由监考老师输入二次登
录密码。因此,在考试过程中,如果出现计算机死机、显示器断电、鼠标键盘失灵等意外情
况,考生切勿自行处理,而应立即举手报告监考老师,由监考老师进行处理。
注意:考生只能抽取一次试题,不要试图通过重新登录考试系统、重启计算机等非常手段来
重新抽取试题。
2 解题要求
各题型的解题要求如下:
(1)填空题:填空题的源程序文件名为“blank1.c”, 要求根据题意在程序中挖出的空
中填上正确答案即可,不要求运行。但一定要注意保存,否则不得分。
(2)改错题:改错题的源程序文件名为“modi1.c”, 要求根据题意在指定的若干行程
序中找出错误并改正,不要求运行。但一定要注意保存,否则不得分。
(3)编程题:编程题的源程序文件名为“prog1.c”, 要求将程序中 fun()函数的函数体
补充完成,实现题目中所要求的功能。需要注意的是,编程题一定要运行,必须要有运行结
果。因为编程题的评分不是根据考生填写的程序,而是根据程序的运行结果给分。
3 上机考试流程及各题型解题方法
下面以完全仿真的上机考试模拟演示系统为平台,演示上机考试的流程及填空题、改错
题和编程题的解题方法。
上机考试的整个过程可以分为:登录、答题和交卷三个阶段。请读者一定要注意每个细
节,并反复进行练习,不要出现错漏。
3.1 登录
(1)双击桌面上的上机考试系统的图标后,弹出图1 所示的界面。

(2)单击“开始登录”按钮后,转入考试登录界面。如图 2 所示。

(3)在“准考证号”一栏输入考生的准考证号码,然后单击“考号验证”按钮(或按
Enter 键)。如果准考证号码输入正确,考试系统随即会弹出一个提示框,显示考生的准考证
号码、姓名和身份证号码三种信息,如图 3 所示;如过准考证号码输入错误,考试系统也会
弹出一个提示框,显示错误信息(如图4 所示),提醒考生重新输入准考证号码。

图4 错误信息提示框
(4)在核对“准考证号码”、 “ 姓名”和“身份证号码”三种无误后,单击提示框上的
“是(Y)”按钮,考试系统开始随机抽取试题。抽取试题结束后,弹出“考试须知”界面(如
图 5 所示),考生须注意阅读。尤其要注意:

注意:到目前为止的所有操作所花的时间都不会计入考试时间,因此考生可以从容操作,仔
细阅读“考试须知”,切勿出错。
(5)在单击“开始答案并倒计时”按钮后,随即弹出考试界面(如图 6 所示),考试正
式开始并倒计时。

3.2 答题
(1)考试界面分成“状态信息条”( 图7)和“试题内容查阅窗口”( 图 8)两个部分。
“状态信息条”用于显示考生的准考证号码、考试科目、考试剩余时间等信息。单击“隐藏
窗口”按钮可以将“试题内容查阅窗口”最小化,再单击一次则会恢复。注意,在确认已经
完成所有试题之前,切勿点击“交卷”按钮。


(2)“ 试题内容查询窗口”用于显示填空题、改错题和编程题的题目内容。单击“程序
填空题”按钮,则下方的“内容显示窗口”就会显示填空题的题目;单击“程序改错题”按
钮,则下方的“内容显示窗口”就会显示填空题的题目;单击“程序设计题”按钮,则下方
的“内容显示窗口”就会显示编程题的题目。当“试题内容查询窗口”中显示上下或左右滚
动条时,表示该窗口中的试题尚未完全显示,此时考生可用鼠标操作显示余下的试题内容,
防止因漏做试题二影响考试成绩。
“考生文件夹”下 面的路径即属于该考生的文件夹,考 生可以根据该路径从“ 我的电脑”
中找到自己的考生文件夹(如图 9 所示)。该文件中有 4 个文件,分别是“blank1.c”( 填空
题的程序)、“ modi1.c”( 改错题的程序)、“ prog1.c”( 编程题的程序)和“in.dat”。 需要说明
的是,有些计算机不会显示文件的后缀名。

注意:考生一定要在属于自己的考生文件夹下的程序中作答,否则将不会得分。
为了不找错文件夹,考生也可以使用“试题内容查询窗口”中的“答题”菜单栏。单击
“答题”菜单栏,会弹出一个下拉菜单(如图 10)所示。单击“Blank1.c”, 考试系统就会
自动调用 VC 打开考生文件下的程序“blank1.c”; 单击“Modi1.c”, 考试系统就会自动调用
VC 打开考生文件下的程序“modi1.c”; 单击“Prog1.c”, 考试系统就会自动调用 VC 打开考
生文件下的程序“prog1.c”。 使用这种方法,就不会找错考生文件夹。

(3)做程序填空题时,首先单击“程序填空题”按钮,阅读题目,理解题意。程序填
空题的题目如图 11 所示。

然后使用 VC 打开考生文件下的程序“blank1.c”, 该题的程序如下所示:
#include <stdio.h>
#include <stdlib.h>
#define N 8
typedef struct list
{
int data;
struct list *next;
} SLIST;
SLIST *creatlist(int *);
void outlist(SLIST *);
int fun( SLIST *h)
{
SLIST *p;
int s=0;
p=h>
next;
while(p)
{
/**********found**********/
s+=___1___
/**********found**********/
p=___2___
}
return s;
}
main()
{
SLIST *head;
int a[N]={12,87,45,32,91,16,20,48};
head=creatlist(a); outlist(head);
/**********found**********/
printf("\nsum=%d\n", fun(___3___));
}
SLIST *creatlist(int a[])
{
SLIST *h,*p,*q; int i;
h=p=(SLIST *)malloc(sizeof(SLIST));
for(i=0; i<N; i++)
{ q=(SLIST *)malloc(sizeof(SLIST));
q>
data=a[i]; p>
next=q; p=q;
}
p>
next=0;
return h;
}
void outlist(SLIST *h)
{
SLIST *p;
p=h>
next;
if (p==NULL) printf("The list is NULL!\n");
else
{ printf("\nHead ");
do
{ printf(">%
d", p>
data); p=p>
next; }
while(p!=NULL);
printf(">
End\n");
}
}
在每一个注释行“/********found********/”的下方,都有一个形如“___x___”( x 代
表数字 1、2 或 3)的空。考生要做的就是将“___x___”删去,然后填上正确的答案,如下
所示:
………………………………
………………………………
………………………………
int fun( SLIST *h)
{
SLIST *p;
int s=0;
p=h>
next;
while(p)
{
/**********found**********/
s+= p>
data;
/**********found**********/
p= p>
next;
}
return s;
}
main()
{
SLIST *head;
int a[N]={12,87,45,32,91,16,20,48};
head=creatlist(a); outlist(head);
/**********found**********/
printf("\nsum=%d\n", fun(head));
}
………………………………
………………………………
………………………………
注意:程序填空题不要求运行,但一定要保存。出于保险考虑,考生可以运行程序查看结果。
程序填空题是否被运行,不影响考生的得分。
(4)做程序改错时,首先单击“程序修改题”按钮,阅读题目,理解题意。程序修改
题的题目如图 12 所示。

然后使用 VC 打开考生文件下的程序“modi1.c”, 该题的程序如下所示:
#include <stdio.h>
double fun( int m )
{
double t = 1.0;
int i;
for( i = 2; i <= m; i++ )
/**********found**********/
t += 1.0/k;
/**********found**********/
________
}
main()
{
int m;
printf( "\nPlease enter 1 integer number:" );
scanf( "%d", &m );
printf( "\nThe result is %lf\n", fun( m ) );
}
在每一个注释行“/********found********/”的下方,都有一行或几行程序,其中有一
个(类)错误,考生须找出这个错误并改正,例如第一个注释行“/********found********/”
的下方只有一行程序“t += 1.0/k”, 应将其改为“t += 1.0/i”。 有的注释行
“/********found********/”下方会出现这样的行“_____________”, 这实际上就是一个填
空题,考生要做的就是把“_____________”删去,然后填上正确答案。例如第二个注释行
“/********found********/”的 下方就有一个“ _____________”, 将 其删去,然 后填上“ return
t;”, 改正后的程序如下所示:
#include <stdio.h>
double fun( int m )
{
double t = 1.0;
int i;
for( i = 2; i <= m; i++ )
/**********found**********/
t += 1.0/i;
/**********found**********/
return t;
}
main()
{
int m;
printf( "\nPlease enter 1 integer number:" );
scanf( "%d", &m );
printf( "\nThe result is %lf\n", fun( m ) );
}
程序中有多少行“/********found********/”, 就说明程序中有多少个(类)错误,因
为每个“/********found********/”下方的程序中都有一个(类)错误。
一类错误是指相同的错误,例如:
/********found********/
if(a > b)
{
t = a
a = b
b = a
}
上面的程序中,“ /********found********/”下 面的几行程序中有三个地方少了分号( ;),
但都属于同一类错误。
任何一个“/********found********/”下方的程序中都不会出现多类错误。
注意:程序修改题同样不要求运行,但一定要保存。出于保险考虑,考生可以运行程序查看
结果。程序修改题是否被运行,不影响考生的得分。
(5)做编程题时,首先单击“程序设计题”按钮,阅读题目,理解题意。程序设计题
的题目如图 13 所示。

然后使用 VC 打开考生文件下的程序“prog1.c”, 该题的程序如下所示:
#include <math.h>
#include <stdio.h>
void NONO();
double fun( int m )
{
}
main()
{
printf("%f\n", fun(20));
NONO();
}
void NONO ( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *fp, *wf ;
int i, n ;
double s ;
fp = fopen("C:\\WEXAM\\24010001\\in.dat","r") ;
wf = fopen("C:\\WEXAM\\24010001\\out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(fp, "%d", &n) ;
s = fun(n) ;
fprintf(wf, "%f\n", s) ;
}
fclose(fp) ;
fclose(wf) ;
}
编程题要求将 fun()函数的函数体填充完整,以实现题目的要求。程序可以编写如下:
#include <math.h>
#include <stdio.h>
void NONO();
double fun(int m)
{
int i;
double s = 0.0;
for(i=1; i <= m; i++)
s = s + log(i);
s = sqrt(s);
return s;
}
………………………………
………………………………
………………………………
但是,仅仅把 fun()函数的函数体填充完整是不够的,即使你所填写的程序时正确的。
因为编程题并不是根据考生所填写的程序来评分的,而 是根据程序的运行结果是否正确来评
分的。因为在编写好程序后,还必须运行程序。经编译运行后,弹出如图14 所示的界面。

有不少考生做到了这一步,但结果却一分都没有得到。原因在于此时尽管程序已经开始
运行,但并没有运行结束。图 14所示的界面中,程序正在等待输入考生输入数据( m的值)。
因此应该从键盘上敲入一个正整数(例如 20),然后按回车键。程序随即继续运行,输出运
算结果,如图 15 所示。

程序输出的结果是:6.506583。从题目中的例子可以得知,当 m 的值为 20 时,运算结
果确实是 6.506583,因 此可以肯定程序时正确的。到 这里为止,这 个程序才算是运行结束了。
我们注意到,运行界面的最后一行是“Press any key to continue”。 这行信息并不是由程序输
出,而是 VC 在一个程序运行结束后,自动添加的提示信息。因此,只有当运行界面的最末
行出现了“Press any key to continue”, 一个程序才算是运行结束。否则可能是由于程序等待
数据输入或陷入了死循环。
注意:编程题在做好后,一定要运行并且要运行结束才可能得分。如果程序不运行,不没有
运行结束,那么一分也得不到。
3.3 交卷
至此,全部试题都解答完毕。考试过程中,考试系统会为考生自动进行倒计时。当考试
时间只剩下 5 分钟时,会弹出提示框,如图 16 所示。考生单击“确认”按钮后可以继续作
答。

当考生时间结束,考试系统会自动锁定计算机,考生不能再进行任何操作。考生也可以
通过单击“状态信息条”上的“交卷”按钮,提前交卷。单击“交卷”按钮后,考试系统会
弹出提示框,如图 17 所示。

注意:考试系统锁定计算机后,考生还不能离开考场,切记要请监考老师来输入结束密码,
并得到监考老师的允许后方可离开考场。请务必遵守!