计算机等级考试上机指导上机考试评分原理分析上机考试是由计算机对考生的答题结果进行判断的,而不是人为阅卷,即计算机评分!!等级考试的上机考试是分批进行的,在相邻两批考次之间,由监考人员做该批考次结束前的“收分”工作(实际上是由计算机完成的)。也就是说,当你考完机试后,你的上机成绩就已经出来了,只是我们不知道结果罢了。当然,监考人员也不知道,因为最后分数是加密的!!评分程序在评改你的上机成绩,先从对应的考生文件夹中读取考生的答题文件,再对这些文件按照评分程序进行对比,然后给出相应的分数,最后,系统自动将你的考生文件中的所有文件全部删除!!上机考试评分原理分析对于题空题和改错题,评分程序先是读取考生文件夹下的BLAN.C和MODI.C文件,再找到其中需要填空和改错的代码所在的行数,最后与评分程序中的提供的数据进行对比。需要提醒考生注意的是,填空题和改错题的要求中明确声明:不得删减或增加程序行,就是这个道理;对于编程题,评分程序先是读取考生文件夹下的扩展名为.DAT的文件,再其中的数据与评分程序中的提供的数据进行对比,因此,考生在编程后,一定要运行程序,以生成扩展名为.DAT的输出文件!!上机考试评分原理分析评分程序是按照最终生成的文件给分的!由上述结论可以推出如下事实:1.只要考生能生成最终答案文件,均可得分!2.很多最终答案文件只有少数若干行数据,分数由正确答案的行数决定!例如,真考题库中有这样一道题,要求用迭代方法计算cos(x)-x=0的一个近似根,其答案是0.739085,最终要求生成的文件OUT.DAT中只有一行数据。有这个文件,并且该文件只有一行数据0.739085的话,就可以得到100分!无所谓你是否编写了程序!当然,有多行答案的文件的格式是由程序中的输出部分决定的(而这个部分是不允许考生修改的!),考生必须能够看懂输出程序段的输出格式,否则会适得其反!上机考试两点重要注意事项注意事项1:大家做上机的填空、改错、编程题的时候请务必做到两件事情:一是编译运行确认无误!二是切记一定要保存!特别提醒:a、如果没有保存,无论是填空、改错还是编程题你都不能得分,相当于没有做。b、如果编程题没有运行即使保存了都有可能不得分,所以“编译并运行”和“保存”两件事情请大家都务必办到。c、万一有些同学不能完整的做完某一个题目无论是填空、改错还是编程,也就是说你根本无法运行这个程序,也请你把你会做的那部分填上去并保存,或许运气好会有步骤分,就当“死马当活马医”嘛,因为上机考试的评分是以机器评分为主、人工评分为辅结合进行的)上机考试两点重要注意事项注意事项2:很多同学在做完了前一题(例如填空BLANK1.C或改错MODI1.C等)没有关闭工作区就直接打开下面的题目做(即使你点击blank1.c文件右上角的叉叉关闭了这个文件也不行,必须关闭整个工作区),这样你运行的时候永远不会正确,所以大家做完了前一题后务必关闭工作区再做下一题(操作步骤为:打开主菜单:文件-关闭工作区,很简单的),当然,如果你万一不会关闭工作区,干脆做完一题就把整个VC6.0关闭,然后重新启动VC6.0再打开下一题做也行的。1、填空题请补充函数fun(),该函数的功能是:把从主函数中输入的字符串str2接在字符串str1的后面。例如:str1=“Howdo”,str2=“youdo?”,结果输出:Howdoyoudo?注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:#include#include#defineN40voidfun(char*str1,char*str2){inti=0;char*p1=str1;char*p2=str2;while(【1】)i++;for(;【2】;i++)*(p1+i)=【3】;*(p1+i)='\0';}main(){charstr1[N],str2[N];clrscr();printf(*****Inputthestringstr1&str2*****\n);printf(\nstr1:);gets(str1);printf(\nstr2:);gets(str2);printf(**Thestringstr1&str2**\n);puts(str1);puts(str2);fun(str1,str2);printf(*****Thenewstring*****\n);puts(str1);}答案及评析:【1】*(p1+i)【2】*p2【3】*p2++【解析】填空1:变量i用来记录字符串str1的长度,当指针指到字符串str1结束标志符‘\0’时,while循环结束,变量i停止累加。填空2:指针p2指向字符串str2,通过for循环将字符串str2接在str1后面,循环结束的条件是指针p2所指的字符是字符串结束标志符‘\0’。填空3:指针p2最初指向字符串str2的首字符,通过自加1,使指针p2依次向后移动,指向str2的各个字符,实现将字符串str2接在str1后面的功能。请补充函数fun(),该函数的功能是求一维数组x[N]的平均值,并对所得结果进行四舍五入(保留两位小数)。例如:当x[10]={15.6,19.9,16.7,15.2,18.3,12.1,15.5,11.0,10.0,16.0},结果为:avg=15.030000。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:#include#includedoublefun(doublex[10]){inti;longt;doubleavg=0.0;doublesum=0.0;for(i=0;i10;i++)【1】;avg=sum/10;avg=【2】;t=【3】;avg=(double)t/100;returnavg;}main(){doubleavg,x[10]={15.6,19.9,16.7,15.2,18.3,12.1,15.5,11.0,10.0,16.0};inti;clrscr();printf(\nTheoriginaldatais:\n);for(i=0;i10;i++)printf(%6.1f,x[i]);printf(\n\n);avg=fun(x);printf(average=%f\n\n,avg);}答案及评析:【1】sum+=x[i]【2】avg*1000【3】(avg+5)/10【解析】填空1:通过for循环求出10个数的累加和,存于变量sum中。填空2:为了实现四舍五入保留两位小数的功能,应将平均值先扩大1000倍。填空3:将平均值加上5,再除以10,实现四舍五入的功能。请补充函数fun(),该函数的功能是:从‘a’到‘z’统计一个字符串中所有字母字符各自出现的次数,结果保存在数组alf中。注意:不区分大小写,不能使用字符串库函数。例如,输入:“A=abc+5*c”,结果为:a=2,b=1,c=2。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:#include“stdio.h”#include“#defineN100voidfun(char*tt,intalf[]){inti;char*p=tt;for(i=0;i26;i++)【1】;while(*p){if(*p='A'&&*p='Z')【2】;if(*p='a'&&*p='z')alf[*p-'a']++;【3】;}}main(){charstr[N];chara='a';intalf[26],k;clrscr();printf(\nPleaseenteracharstring:);scanf(%s,str);printf(\n**Theoriginalstring**\n);puts(str);fun(str,alf);printf(\n**Thenumberofletter**\n);for(k=0;k26;k++){if(k%5==0)printf(\n);printf(%c=%d,a+k,alf[k]);}printf(\n);}答案及评析:【1】alf[i]=0【2】*p+=32【3】p++【解析】填空1:数组alf[26]用来存放字母字符出现的次数,在使用之前需要清零。填空2:题目要求不区分大小写,所以可以先将所有的大写字母都转换为对应的小写字母,然后一并记录出现的次数。将大写字母转换为对应的小写字母,只需将ASCII码加上32就可以了。填空3:指针p指向字符串tt,通过p自加1来移动指针,访问字符串中的所有字符。请补充函数fun(),该函数的功能是:分类统计一个字符串中元音字母和其他字符的个数(不区分大小写)。例如,输入aeiouAOUpqrt,结果为A:2E:1I:1O:2U:2other:4。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include#include#defineN100voidfun(char*str,intbb[]){char*p=str;inti=0;for(i=0;i6;i++)【1】;while(*p){switch(*p){case'A':case'a':bb[0]++;break;case'E':case'e':bb[1]++;break;case'I':case'i':bb[2]++;break;case'O':case'o':bb[3]++;break;case'U':case'u':bb[4]++;break;default:【2】;}【3】}}main(){charstr[N],ss[6]=AEIOU;inti;intbb[6];clrscr();printf(Inputastring:\n);gets(str);printf(thestringis:\n);puts(str);fun(str,bb);for(i=0;i5;i++)printf(\n%c:%d,ss[i],bb[i]);printf(\nother:%d,bb[i]);}答案及评析:【1】bb[i]=0【2】bb[5]++【3】p++;【解析】填空1:数组bb[6]用来存放5个元音字母和其他字符的个数,在使用之前需要清零。填空2:数组元素bb[5]用来存放其他字符的个数,当指针p所指的字符不是元音字母时,则认为是其他字符,bb[5]加1。填空3:指针p指向字符串str,通过p自加1来移动指针,访问字符串中的所有字符。2.改错题下列给定程序中,函数fun()的作用是:将字符串tt中的小写字母都改为对应的大写字母,其他字符不变。例如,若输入edS,dAd,则输出EDS,DAD。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include#include#include/**********************found***********************/charfun(chartt[]){inti;for(i=0;tt[i];i++){/**********************found***********************/if((tt[i]='A')&&(tt[i]='Z'))tt[i]-=32;}return(tt);}main(){inti;chartt[81];clrscr();printf(\nPleaseenterastring:);gets(tt);printf(\nTheresultstringis:\n%s,fun(tt));}答案及评析:(1)错误:charfun(chartt[])正确:char*fun(chartt[])(2)错误:if((tt[i]='A