长江教育c语言上机考试练习.docx

上传人:b****6 文档编号:3618087 上传时间:2022-11-24 格式:DOCX 页数:15 大小:74.45KB
下载 相关 举报
长江教育c语言上机考试练习.docx_第1页
第1页 / 共15页
长江教育c语言上机考试练习.docx_第2页
第2页 / 共15页
长江教育c语言上机考试练习.docx_第3页
第3页 / 共15页
长江教育c语言上机考试练习.docx_第4页
第4页 / 共15页
长江教育c语言上机考试练习.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

长江教育c语言上机考试练习.docx

《长江教育c语言上机考试练习.docx》由会员分享,可在线阅读,更多相关《长江教育c语言上机考试练习.docx(15页珍藏版)》请在冰豆网上搜索。

长江教育c语言上机考试练习.docx

长江教育c语言上机考试练习

1.填空题

请补充函数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

doublefun(doublex[10])

{

inti;

longt;

doubleavg=0.0;

doublesum=0.0;

for(i=0;i<10;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;

printf("\nTheoriginaldatais:

\n");

for(i=0;i<10;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,实现四舍五入的功能。

2.改错题

下列给定程序中,函数fun()的功能是:

先从键盘上输入一个3行3列的矩阵的各个元素的值,然后输出主对角线元素之积。

请改正函数fun()中的错误,使它能得出正确的结果。

注意:

不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include

intfun()

{

inta[3][3],mul=1,i,j;

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

{

/**********************found***********************/

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

scanf("%d",&a[i][j]);

}

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

/**********************found***********************/

mul=mul*a[i][j];

printf("Mul=%d\n",mul);

}

main()

{

fun();

}

答案及评析:

错误1:

for(i=0;j<3;j++)改正:

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

错误2:

mul=mul*a[i][j];改正:

mul=mul*a[i][i];

【解析】错误1:

循环结构中,要给变量j赋初值0;错误2:

主对角元素的行号和列号相等,所以参加乘法的是a[i][i],而不是a[i][j]。

3.编程题

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是:

把分数最低的学生数据放在h所指的数组中。

注意:

分数低的学生可能不只一个,函数返回分数最低学生的人数。

注意:

部分源程序给出如下。

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

试题程序:

#include

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

intfun(STREC*a,STREC*b)

{

 

}

main()

{

STRECs[N]={{"GA005",82},{"GA003",75},{"GA002",85},{"GA004",78},

{"GA001",95},{"GA007",62},{"GA008",60},{"GA006",85},

{"GA015",83},{"GA013",94},{"GA012",78},{"GA014",97},

{"GA011",60},{"GA017",65},{"GA018",60},{"GA016",74}};

STRECh[N];

inti,n;

FILE*out;

n=fun(s,h);

printf("The%dlowestscore:

\n",n);

for(i=0;i

printf("%s%4d\n",h[i].num,h[i].s);/*输出最低分学生的学号和成绩*/

printf("\n");

out=fopen("out.dat","w");

fprintf(out,"%d\n",n);

for(i=0;i

fprintf(out,"%4d\n",h[i].s);

fclose(out);

}

答案及评析:

intfun(STREC*a,STREC*b)

{

inti,j=0,min=a[0].s;

for(i=0;i

if(min>a[i].s)

min=a[i].s;/*找出最小值*/

for(i=0;i

if(min==a[i].s)

b[j++]=a[i];/*找出成绩与min相等的学生的记录,存入结构体b中*/

returnj;/*返回最低成绩的学生人数*/

}

【解析】该程序使用循环嵌套,第1个for循环的作用是找出最小值;第2个for循环的作用是找出与min相等的成绩,即最低成绩的学生记录,并将其存入结构体数组b中。

二、程序编写题

程序编写题占40分,需要将系统提供的程序补充完整,一般是编写一个叫fun的自定义函数,下面以一个真题讲解程序编写题的做法。

编写一个函数fun(),它的功能是:

使实型数保留2位小数,并对第三位进行四舍五入(规定实数为正数)

例如:

例如:

实型数为1234.567,则fun函数返回1234.57输出;实型数为1234.562,则fun函数返回1234.56输出。

注意:

部分源程序给出如下。

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

试题程序:

#include

floatfun(float)

{

 

}

main()

{floata;

printf("Entera:

");

scanf("%f",&a);

printf("Theoriginaldatais:

%f\n",a);

printf("Theresultis:

%f\n",fun(a));

NONO();

}

NONO()

{

inti;

floata;

FILE*rf,*wf;

rf=fopen("C:

\\Exam\\24010001\\in.dat","r");/*rf指向考生文件夹下in.dat文件*/

wf=fopen("C:

\\Exam\\24010001\\out.dat","w");/*wf指向考生文件夹下out.dat文件*/

for(i=0;i<20;i++)/*循环20次*/

{fscanf(rf,"%f",&a);/*每次循环,从rf所指文件中读一个数据给a赋值*/

fprintf(wf,"%f\n",fun(a));/*调用fun函数,并且以上面读取的a的值作为实参

进行fun函数处理,把返回值写入到wf所指文件*/

}

fclose(rf);

fclose(wf);

}

参考答案:

floatfun(floath)

{

longa;

a=h*1000;

a=(a+5)/10;

returna/100.0;

}

当在fun函数中写入如上答案后,进行编译、链接、运行后,输入数据1234.567后,会输出1234.570000;输入数据1234.562后,输出1234.560000,满足题目要求;如果发现输出的数据不能满足要求,说明编写的fun函数有错误,需要修改,再运行,直到满足题目要求。

程序运行完毕后,点击模拟系统的评分(注意:

正式考试没有评分),编程题共20个得分测试点,每个得分测试点2.00分,考生共有20个得分测试点正确,合计得分40分。

得分:

1.340000

得分:

212.130000

得分:

341.210000

得分:

21.910000

得分:

87.900000

得分:

32.550000

得分:

455.310000

得分:

6656.210000

得分:

3232.210000

得分:

345.210000

得分:

21.320000

得分:

22.330000

得分:

2121.9100

得分:

2121.990000

得分:

22.000000

得分:

79.000000

得分:

90.000000

得分:

1020.000000

得分:

2121.990000

得分:

12.980000

标准答案测试数据:

1.340000

212.130000

341.210000

21.910000

87.900000

32.550000

455.310000

6656.210000

3232.210000

345.210000

21.320000

22.330000

2121.910000

2121.990000

22.000000

79.000000

90.000000

1020.000000

2121.990000

12.980000

这类题目我们可以手动算出计算结果,更为有趣的是,像这类可以手动算出结果的题目,如果我们不编写fun函数代码,而是做一个结果文件,只要这个结果文件的数据和系统的评分数据是相同的,系统也会给我们满分,哪怕我们没有写一行程序!

用这种方法的时候,首先要确定这个结果文件的文件名,如上例中的文件名是out.dat(绝大部分情况下也是out.dat)。

然后我们在考生文件夹下手动建立这个结果文件out.dat。

1.手动建立out.dat

打开考生文件夹C:

\Exam\24010001,用鼠标右键单击in.dat,弹出如图7-1所示的菜单。

用鼠标左键单击菜单中的“复制”子菜单。

然后用鼠标右键单击考生文件夹的空白处,出现如图7-2所示的菜单。

用鼠标左键单击“粘帖”子菜单。

此时将在考生文件夹下生成一个名为“复件in.dat”的文件,用鼠标右键单击这个文件名,单击“重命名”子菜单,然后将文件名重命名为out.dat。

如果看不到文件的扩展名(即考生文件夹下为in,而不是in.dat),在考生文件夹的上方有一个“工具”菜单,选择“工具”菜单的子菜单“文件夹选项”,出现如图7-3所示的界面。

在出现的选项板中选择“查看”选项板,用鼠标拉动中间的滚动条,在其中找到选项“隐藏已知文件类型的扩展名”,将前面小框中的小钩去掉(用鼠标单击它就去掉了),然后单击确定,这时候再看考生文件夹下的文件,就可以看到文件的扩展名了。

建立out.dat文件,我们也可以在考生文件夹下点击鼠标右键,新建文本文档,然后对文本文件改名为out.dat即可,用这种方法建立out.dat,同样要注意扩展名的问题。

2.向out.dat中写入数据

建好结果文件后,就是怎样得到正确的数据了。

有的题目没有办法得到,因此没有办法使用这种方法,我们可以通过综合分析得出正确的数据,例如上面例子。

如果存在in.dat文件(有的程序中不存在in.dat),则都是使用in.dat的数据作输入,然后对这些数据作处理,最后将处理的数据放入out.dat文件中。

假如存在in.dat文件,用记事本方式打开in.dat和out.dat(鼠标右击文件in.dat,单击“打开方式”子菜单,出现如图7-4所示的界面,选择记事本方式打开文件)。

7-1复制菜单图7-2粘贴菜单

图7-3文件夹选项图7-4选择记事本

这样,in.dat文件就用记事本打开了,用同样的方法使用记事本打开out.dat。

比如本例中,打开in.dat文件的内容为:

1.34214232121.134555314.212121.9078987.8999

32.545646455.312326656.21213232.2121345.2121

21.3232422.3349992121.9092121.989921.9999

78.999989.99991019.9992121.9899912.9879

那么我们一个一个数据进行分析。

第一个数据1.3421423,根据题目要求是对它保留两位小数,对第三位作四舍五入处理,因此得出数据1.34。

注意输入到out.dat文件的格式,在本例中调用

fprintf(wf,"%f\n",fun(a));来输出数据,采用"%f\n"输出格式,也就是用%f的方式输出到文件中,输出结果是1.340000。

注意小数总共有6位,如果你不记得了,可以运行VC,看看是输出几位。

输出数据后还要输出一个回车符,也就是要换行。

我们将out.dat文件的第一行写为1.340000,然后保存文件。

运行评分程序,看看评分情况。

我们发现,在考试得分情况的第一行有如下信息:

得分:

1.340000

再看看分数,得分2分。

成功了!

没有写任何程序!

将所有数据按相同的方法分析完,把正确的数据输入到out.dat文件中,最后保存这个文件。

这样,我们就可以在不编写程序的情况下做对这道题了。

注意:

不是每一道题都能使用这种方法,而且这种方法存在风险,如果数据的输出格式判断错误,将会使程序结果完全错误,如上面例子中少写一个0就不得分。

但是,这确实是一个万不得已的办法。

使用这种方法做题,需要特别注意的问题:

(1)out.dat文件中的数据格式一定要正确。

例如本例中在NONO函数中的语句fprintf(wf,

"%f\n",fun(a));我们已经学过fprintf为一个文件函数,这条语句表示将调用函数返回的结果写入wf所指的文件中,本例中wf指向out.dat文件(由语句wf=fopen("C:

\\Exam\\24010001\\out.dat","w");可知;同时,这条语句可以知道考生文件夹为C:

\Exam\24010001);fprintf函数双引号部分的内容决定了out.dat中的数据格式,本例为输出一个数据后换行。

假如修改fprintf函数为:

fprintf(wf,"%f",fun(a));去掉换行,则所有数据在同一行内写。

假如修改fprintf函数为:

fprintf(wf,"num=%f\n",fun(a));则out.dat中的数据应为如下格式:

num=1.340000

num=212.130000

num=341.210000

num=21.910000

num=87.900000

num=32.550000

num=455.310000

num=6656.210000

num=3232.210000

num=345.210000

num=21.320000

num=22.330000

num=2121.910000

num=2121.990000

num=22.000000

num=79.000000

num=90.000000

num=1020.000000

num=2121.990000

num=12.980000

(2)并非每套编程题目都有NONO函数,fprintf函数可以直接出现在main函数内,使用方法都相同。

例如:

实验七部分:

模拟一套上机考试真题的编程题没有NONO函数。

如果读者会自己编写程序,完全可以忽略NONO函数,通过我们前面给出的NONO函数的注释(考试不会给出注释),可以知道NONO函数是一个评分函数,与我们的程序编写没有关系。

只有在使用本节介绍的方法时,需要注意NONO函数中的部分语句。

(3)本例中是把in.dat中的数据按照题目要完成的功能写到了out.dat中;部分题目没有in.dat,此时必定是以程序中的数据作为参照数据,读者可以自己分析。

三、程序编写题有以下几个特点

(1)程序编写题必须要能正确运行才能得分。

无论程序写了多少,如果不能运行或

者运行的结果是错误的均不能得分。

(2)程序的运行结果以最后一次运行结果为准。

在修改了程序之后,必须要重新运行程序才能有效。

(3)编写程序时,不要对NONO函数和main函数做任何修改,以免引起不必要的错误。

(4)在编写程序时,可以使用任何可以调用的函数,完全不必要理会题目中禁止使用函数的那些条件。

四、考试注意事项

在考试的一个星期之前将教材第四分册中的50套题目完全熟练练习,这些题目与上机考试模拟系统中的题目是一一对应的,然后自我随机抽查。

如果能够完全做对,并且每道程序填空题都能在2分钟之内做完,每道程序修改题都能在2分钟之内做完,每道程序编写题都能在10分钟内做完,就算练习合格了。

考试时间为90分钟。

一般情况下,考生最好提前半个小时到场,以便熟悉环境。

在考试过程中,如果出现死机等情况,不用慌张。

这时应举手向监考老师反应,由监考老师解决,排除故障的时间不会计入考试时间。

如果中途想重新做原来的题目,可以进入考试文件夹下目录,下在VC中重新打开,就可以重做题目了。

考试时题目由系统随机抽取,题库中由50套题。

相邻两个人的题目一般是不相同的,所以上机不可能出现抄袭现象。

抽出的题目难易程度并不相同,但是题目抽出之后就不能重新抽取了。

 

二级C语言上机考试改错题总结

根据多年研究全国计算机等级考试二级C语言,发现很多考生对上机考试存在很大的问题。

现将在教学过程中对二级C语言上机考试题库总结的经验和大家分享,希望能对我们考生的考试有所帮助,顺利通过考试!

以下是对上机考试改错题的做题方法和总结,改错题的错误主要分为以下几类:

1.if或while语句

若错误行是if或者while语句,则要注意以下点:

1)首先判断是否正确书写if或while关键字;

2)然后看有没有用小括号把整个表达式括起来,若没有则加上小括号;

3)若条件表达式中有指针变量而且没有指针运算符时,则加上指针运算符*;

4)若if条件表达式中只有一个等于号即数学等号(=),看是否需要改写成两个等于号即逻辑等号(==);

5)若if条件表达式为其他的比较运算符,则一般是进行逆转或加一个等于号;

6)do-while循环结构,while表达式最后有一个分号;

2.for语句

若错误行是for语句,则要注意以下几点:

1)首先判断for有没有书写正确;

2)然后看for中的表达式是不是用分号(;)隔开,若不是则改为分号。

记住是分号(;),不是逗号(,)!

3)再者,分析for中的三个表达式,是否符合题意;

第一个表达式表示起始条件,

第二个表达式表示终止条件,

第三个表达式表示循环变量的变化。

3.return语句

若错误行为return语句,则要注意以下几点:

1)首先看是不是正确书写return关键字;

2)然后看是不是缺少分号,若是则加上分号即可;

3)再者判断return后的变量或表达式是否正确;

这种错误需要根据题意来分析,分析返回变量或表达式的值和类型。

4.赋值语句

若错误行是赋值语句,则要看赋值是否正确,然后看赋值运算符是否写正确。

5.定义语句

若错误行是定义语句,则要注意:

1)首先分析变量类型名是否写对;

2)然后分析给变量赋初值是否正确;

3)若以上均不是,则看是不是少定义了某个变量或少了花括号;

6.表达式错误问题

若错误行中有整数1除以某个表达式或变量时,必须把整数1改为1.0;若变量或表达式是整型时,则只能进行强制类型转换。

7.字符串类问题

若错误行中有字符串结束符,则特别要注意结束符有没有写错。

但是要区分清楚字符'o'和数字'0'。

8.指针类问题

若错误行中有指针变量,并且该变量名之前没有指针运算符,则一般都是加上指针运算符;

9.函数首部类问题

若错误行是函数首部,则要注意:

1)首先看该行最后有没有分号,若有则删掉分号;若括号参数间是分号则要改为逗号;

2)形参和实参类型不一致问题

若实参是个地址或数组名或指针变量名,则对应的形参肯定是指针或数组;

若实参是二维数组名,则对应的形参应该是行指针或是二维数组;

若后面用到某形参时有指针运算符,则该形参必为指针类型;

若形参是二维数组或指向M个元素的指针变量,则该二维数组的长度必须与main函数中对应数组的第二维的长度相同。

3)函数类型不一致问题

若函数中没有return语句,则函数类型为void;

若函数中有return语句,则函数的类型必须与rerun后的变量类型一致;

10.语法错误问题

1)语句缺少分号。

若错误号中语句没有以分号结束则加上分号;

2)变量名不一致。

C语言是区分大小写的,若错误行中有大写字母一般都改为小写字母;

11.逻辑错误问题

这种题型主要是表达式错误,占的题量比较多而且我们没有统一的做题方法,需要我们具体问题具体分析。

12.书写错误问题

特别注意我们的注释部分,注释是以/*开始,以*/结尾,不能有多余的,比如“/***注释部分*****/*/”是错误的!

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1