二级C语言等级考试

2024-07-22

二级C语言等级考试(精选九篇)

二级C语言等级考试 篇1

二级C语言考试由笔试和上机两部分。笔试考察的是应试者对基础知识和基本理论的掌握情况,而上机考试主要测试的是应试者的逻辑思维能力和运用C语言的能力,一般包括3种题型:填空题、改错题、编程题。该文对考试题库中编程题作出归纳,总结,希望对应试者有所帮助。

1 上机编程题的知识点

上机考试的知识点大概可以有5个,分别是:基本运算、循环、数组、字符串、结构体。以下对这5个知识点分别举例说明。

1.1 基本运算

例如有以下编程题:

编写函数fun,它的功能是:将两个两位正整数a, b中个位数和十位数合并成一个新的整数放在c中。合并的方式是:将a中的十位和个位依次放在变量c的百位和个位上,b中的十位和个位依次放在变量c的十位和千位上。

例如:当a=45, b=12。调用函数后c=2415。

注意:部分源程序存在文件PROG1.C中,数据文件IN.DAT中的数据不得修改。请勿改动主函数main () 和其他函数中的任何内容,仅在函数fun的花括号中填写编写的如干语句。

程序如下:

分析:这类基础题主要是考察应试者对基本运算的掌握。针对这个题关键是把这两个数的个位和十位求出来,然后再重新组合成一个新数。表示两位数a的个位数的方法是:a对10取余,即a%10;表示两位数a的十位数的方法是:a先除10后在对10取余,即a/10%10。

本题的答案为:c=b%10*1000+a/10*100+b/10*10+a%10;

1.2 循环

循环中最主要的应用就是迭代和遍历。迭代一般是用来解决累加、累乘的问题,可用for语句来实现。

例如有以下编程题:

编写函数fun,它的功能是计算并输出以下多项式的值:

例如:当在主函数中从键盘给n输入5,则输出为:s=-0.28333。

注意:要求n的值大于1但不大于100。部分源程序存在文件PROG1.C中,数据文件IN.DAT中的数据不得修改。请勿改动主函数main () 和其他函数中的任何内容,仅在函数fun的花括号中填写编写的如干语句。

程序如下:

分析:这类题主要是考察应试者对迭代的掌握。关键是找出迭代公式、变量的起始值和最大值。本题中表达式的每一项是都是一个分数,分子都是1,分母初始值是2,最大值是n, 而且每项增1,所以可设一整型变量i, 用for语句实现:for (i=2;i<=n;i++) 。表达式的值用变量s表示,s的初始值为1,每一项之间用减号连接,所以迭代公式,也就是循环语句可表示为s=s-1/i。除此以外,还应注意两点1。变量s的类型,因为表达式的值是实数,所以变量s应定义为double。2.注意基本算术运算中,两整数相除结果为整数,而题目中每一项要得到的结果为实数,所以应用算术运算中数据类型的转换将s=s-1/i改为s=s-1.0/i。

本题的答案为:

1.3 数组

数组可以分为一维数组和二维数组。

1.3.1 一维数组

编写函数fun, 它的功能是:找出一位整型数组中元素的最大值和它所在的下标,最大值和下标通过形参传回。数组元素中的值已在主函数中赋予。

主函数中的x是数组名,n是x中的数据个数,max存放最大值,index存放最大值的下标。

程序如下:

分析:这类题是遍历在数组中的应用。要找出数组中的最大值,必须对数组中每一个元素查找一遍,同时要进行比较。编程思想:可设一变量max, 假设数组中的第一个元素a[0]是最大的,然后后面的元素依次和max进行比较,只要比当前max的值大,就把它放在max中。

本题的答案为:

1.3.2 二维数组

编写程序,实现矩阵的转置。

例如:输入下面的矩阵:

分析:这类题是关键是解决两个问题:1.怎样对二维数组元素的遍历。2.怎样完成矩阵的转置法。因为二维数组元素表示要用到两个下标即行标和列标,所以遍历数组元素用到两层循环。矩阵的转置就是对应行和变成对应列,换句话说就是关于主对角线的对应元素交换。

本题的答案为:

1.4 字符串

例如有以下编程题:

规定函数中只包含字母和*。请编写函数fun, 它的功能是:删除字符串中的所有*。在编写函数时,不得使用字符串函数。

例如:字符串中的内容为:****A*BC*DEF*G*****,删除后,字符串中的内容为:ABCDEFG。

分析:这类题要对字符串中所有字符遍历,把不是*的字符保留下来。本题要解决两个问题:1.怎样判断字符串结束。2.怎样把不是*的字符放在原来的字符串中。字符串都是以’�’作为结束标志,可以把字符串中元素是不是’�’作为判断字符串结束的依据。可设一变量j作为字符串的新下标,初始值为0,只要原字符串中的元素不是’�’, j就加1,特别注意要在最后加上’�’最为字符串结束标志。

本题的答案为:

1.5 结构体

例如有以下编程题:

学生的记录是有学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun, 它的功能是:把分数最低的学生数据放在数组b中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。

程序如下:

分析:这类问题其实编程思想和前面的没有太大的差别,主要考察的是对结构体成员的引用,其引用形式为:结构体变量名.成员名。

本题的答案为:

2 结论

本文只是对计算机等级考试二级C语言的上机题作了简单的分析和总结,仅过分析可以看出,考察的知识点总共有5个,但是基本上都是循环的两方面的应用:迭代、遍历。

参考文献

[1]未来教育与教学研究中心.全国计算机等级考试二级C语言上机考试题库[M].北京:金版电子出版社, 2007.

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

根据本人多年研究全国计算机等级考试二级若错误行中有整数1除以某个表达式或变量时,必C语言,发现很多考生对上机考试存在很大的问须把整数1改为1.0;若变量或表达式是整型时,题。现将本人在教学当中对二级C语言上机考试题则只能进行强制类型转换。

库总结的经验和大家分享,希望能对我们考生的考

试有所帮助,顺利通过考试!以下是对上机考试改

错题的做题方法和总结,改错题的错误主要分为以

7、字符串类问题

下几类: 若错误行中有字符串结束符,则特别要要注意结束

1、if或while语句 符有没有写错。但是要区分清楚字符‘o’和数字’若错误行是if或者while语句,则要注意以下点: 0’。

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

8、指针类问题

2)然后看有没有用小括号把整个表达式括起来,若错误行中有指针变量,并且该变量名之前没有指若没有则加上小括号; 针运算符,则一般都是加上指针运算符;

3)若条件表达式中有指针变量而且没有指针运算

9、函数首部类问题:

符时,则加上指针运算符; 若错误行是函数首部,则要注意:

4)若if条件表达式中只有一个等于号即数学等号1)首先看该行最后有没有分号,若有则删掉分号;(=),则要改写成两个等于号即逻辑等号(= =); 若中间有分号则要改为逗号;

5)若if条件表达式为其他的比较运算符,则一般2)形参和实参类型不一致问题

是进行逆转或加一个等于号;① 若实参是个地址或数组名或指针变量名,则对

2、for语句 应的形参肯定是指针或数组;

若错误行是for语句,则要注意以下几点:②若实参是二维数组名,则对应的形参应该是指

1)首先判断for有没有书写正确; 针数组或是二维数组;

2)然后看for中的表达式是不是用分号(;)隔开,③若后面用到某形参的时候有指针运算符,则该若不是则改为分号。形参比为指针类型;

记住是分号(;),不是逗号(,)!④若形参是二维数组或指向M 个元素的指针变

3)再者,分析for中的三个表达式,是否符合题量,则该二维的长度必须与main中对于数

意; 组的第二维的长度相同。

第一个表达式表示起始条件,3)函数类型不一致问题

第二个表达式表示终止条件,①若函数中没有return语句,则函数类型为第三个表达式表示循环变量的变化。void;

3、return语句 ②若函数中有return语句,则函数的类型必须若错误行为return语句,则要注意以下几点: 与rerun后的变量类型一致;

1)首先看是不是正确书写return关键字; 记住,调用函数的类型与main中的该函数的类型

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

3)再者判断return后的变量或表达式是否正确; 10.语法错误问题:

这种错误需要根据题意来分析,分析返回变量或表1)语句缺少分号。若错误号中语句没有以分号结达式的值和类型。束则加上分号;

2)变量名不一致。C语言是区分大小写的,若错

4、赋值语句 误行中有大写字母一般都改为小写字母; 若错误行是赋值语句,则要看赋值是否正确,然后11.逻辑错误问题:

看赋值运算符是否写正确。这种题型主要是表达式错误,占的题量比较多

5、定义语句 而且我们没有统一的做题方法,需要我们具体问题若错误行是定义语句,则要注意: 具体分析。

1)首先分析变量类型名是否写对; 12.书写错误问题:

2)然后分析给变量赋初值是否正确; 特别注意我们的注释部分,注释是以/*开始,以

3)若以上均不是,则看是不是少定义了某个变量或*/结尾,不能有多余的,有也只能在/*和*/里面。少了花括号; 注意,比如“/***注释部分*****/*/”是错误的!

二级C语言等级考试 篇3

1 全国计算机等级考试简介

1.1 NCRE的等级分类

计算机等级考试共有一二三四级。考生可以任意选择考试等级,每年考三次,考试时间为3月份、9月份、12月份,报考时间一般在考试前的一至两个月。

1.2 NCRE各级考试内容

一级有三科,分别是:Office,一级B,一级WPS。更多的人考的是一级MS Office,考Word、Excel、PPT的人居多。二级有七科,分别是:C语言、C++、VB、VF、Access、Java、Delphi等,任选其一进行考试即可。现在高校开设的编程语言几乎全部为C语言,所以二级考C语言的人最多,占到一半以上。三级有四科,分别是:网络技术、信息技术、数据库技术、PC技术。四级有三科,分别是:数据库工程师、网络工程师、软件测试工程师。

1.3 NCRE等级证书

考试成绩分为四个等级:60分以下不及格;60分到80分之间是及格;80分到90分之间是良好;90分以上是优秀。考试分数60分以上就算及格,颁发合格证书;分数超过90分颁发优秀证书。

2 二级C语言命题原则和考试要求

2.1 命题原则

大纲规定C语言考试由“公共基础”+“C语言程序设计”两大部分,重点考查对基础知识的掌握,主要考查对基本理论、基础知识点、基础编程及决实际问题的能力。

2.2 考试要求

按照命题原则,考试大纲对应试也提出了要求。主要有以下两个方面:强调基本概念、基本理论、基本知识点的掌握;强调利用C语言编写程序解决实际问题的能力。因此,要想通过考试,既要熟练掌握C语言的基本理论,还要学会实际编程能力,分析问题和解决问题的能力。

3 复习方法

3.1 掌握好基础知识

C语言考试的重点是基础知识的掌握、编程能力,所以,要求对基础知识点的掌握要非常熟练。因此,正确理解、熟记概念是前提。可以通过以下三方面来打好基础:

(1)“比较总结”学习法。对一些复杂知识点,通过比较和总结来理解、记忆。(2)对一些容易混淆的概念理解要准确。一定要准确地掌握它们之间在操作步骤和实现功能上的细微区别。(3)联想记忆各知识点。C语言考点之间是相互联系的,要学会一个考点联想到与之相关的考点。

3.2 做题要有针对性

二级C语言考试的题目很多,搞题海战是不行的,应根据考试大纲适当地做一些往年考过的习题,特别是历年真题。了解历年真题题型使我们较快地掌握考试题型,从而既节省时间,又能达到较好的学习效果。

4 答题策略和应试技巧

4.1 加强上机实践

笔试中程序设计类的题目最佳方法是上机操作,验证自己的解题思路和做题结果。通过上机实践,可以发现错误和纠正解题思路,加深我们的记忆。

4.2 选择题应试技巧

选择题共40题40分。选择题主要是对基本知识和基本操作进行考查,它主要是考查对相关概念掌握是否全面、理解是否准确、思路是否清晰、运用是否灵活。

选择题难度不同,我们根据难易程度,先做简单一些的题目然后做复杂一点的题目,这样能够增加考生信心、提高得分率,所以可以考虑以下做题顺序:先做公共基础题,即选择题的前10题;接下来完成C语言的基础题,即选择题的11至20题,这部分题目主要考查一些基本概念,如常量、运算符、表达式、标识符、数据类型、三种控制结构的应用、输入输出格式等;再接着完成选择题21至40题,这20个选择题前10个比较简单,后10个较难,这20题主要考查C语言的综合应用,题目都会给出一段代码,根据代码做选择,这就要求读懂程序,在理解的基础上认真作答,由于前10题比较简单,所以必须保证前10题的正确率。

4.3 填空、改错题应试技巧

填空、改错题着重考察综合运用基础知识和程序读写能力。填空、改错题综合性强、难度较大。从以往的考试结果来看,考生在程序填空和改错题上失分较多。下面研究一下填空、改错题的解题方法和步骤。

(1)填空题的特点和注意事项

在程序中会给出填空的地方,比如ay[j]=1。

解题思路:先读程序,理解程序的功能和算法,然后边填空边运行,最后,分析运行结果找到正确的答案。程序填空题的特点和注意事项:(1)填空题通常有两个空需要填写。(2)试题中用"found注释"提示在下一行或下两行需要填空。(3)程序填空题重点考查对程序的整体理解,考点经常是函数参数、返回值、for语句的初值、条件判断、变量数据类型、指针移动、文件函数、if条件等。(4)填空的位置处要求填写语句、表达式等,但是不能增行、删行,也不能改变程序行原有的结构。

填空题一般按照以下五步进行:(1)审题,了解试题要求,注意输入和输出例示,以便检验运行的结果。(2)注意"found注释"所在的函数,根据题意理解程序编写时所采用的算法。(3)填好空后首先检查语法错误。(4)按照试题的示例给出的数据进行测试,若测试的结果与给出的输出结果相同,该题就基本答对了,为了确保正确,最好再输入其他数据验证;多次验证的结果与给出的结果不同,应再去检查逻辑错误。(5)修改完成,得到正确结果后,一定要保存好最终程序,并注意路径和文件名不要修改。

(2)改错题的特点和注意事项

(1)改错题中通常包含两个错误需要修改。(2)试题中用"found注释"来提示在下一行附近有错。(3)错误的性质有语法错、逻辑错两种。(4)只能在出错的行上进行修改,不能改动程序行的顺序,不能另行编写程序。

解题思路:一边调试一边找错,分析运行结果,有错则改正。改错题按以下六步进行:(1)审题,了解试题要求和输入和输出结果。(2)审视"found注释"处的函数,根据题意理解采用的算法。(3)检查语法错误。当编译有语法错时,按照提示来查找并改正错误。(4)运行程序,对照示例数据,如果验证的结果与给出的结果相同,该题就答对了;若不同再检查逻辑错误。(5)程序有逻辑错误时,先理解题意、再读算法。(6)得到正确结果后,一定要保存好程序,并注意路径和文件名不要修改。

4.4 编程题应试技巧

二级C语言程序设计考试中有一个编程应用题。主要考查学生对语法、算法和编程能力的掌握。

编程题答题步骤有六步:(1)审题,了解题目要求,记下输入、输出例示,以便验证运行的结果。(2)对照形参,注意主函数中实参个数,以便确定函数中需要处理数据个数。(3)理解题目要求,掌握主函数中调用函数的方式,注意用return返回还是间接返回。(4)选择合理高效的算法,编写程序代码。(5)编译程序,直到没有错误。(6)运行程序,利用例示数据验证结果,直到结果无误即可。

5 结束语

总之,考试能否通过,不仅仅是掌握了考试方法和技巧。关键还是取决于对C语言基础知识掌握的是否扎实,运用的是否灵活,编程是否熟练。C语言是二级考试科目中考生最多的,但通过率却是最低的,原因主要是考生动手编写的程序较少,对基础知识的掌握不好,动手编写的程序较少,还有就是缺乏考试经验等原因。当然,具备了扎实的基础,能够灵活运用上述应试技巧,会使考试得心应手,通过率一定会有大幅度的提高。

参考文献

二级C语言等级考试 篇4

(1)下列数据结构中,属于非线性结构的是

A.循环队列

B.带链队列

C.二叉树

D.带链栈

(2)下列数据结果中,能够按照“先进后出”原则存取数据的是

A.循环队列

B.栈

C.队列

D.二叉树

(3)对于循环队列,下列叙述中正确的是

A.队头指针是固定不变的

B.队头指针一定大于队尾指针

C.队头指针一定小于队尾指针

D.队头指针可以大于队尾指针,也可以小于队尾指针

(4)算法的空间复杂度是指

A.算法在执行过程中所需要的计算机存储空间

B.算法所处理的数据量

C.算法程序中的语句或指令条数

D.算法在执行过程中所需要的临时工作单元数

(5)软件设计中划分模块的一个准则是

A.低内聚低耦合

B.高内聚低耦合

C.低内聚高耦合

D. 高内聚高耦合

(6)下列选项中不属于结构化程序设计原则的是

A.可封装

B. 自顶向下

C.模块化

D. 逐步求精

(7)软件详细设计产生的图如下:

该图是

A.N-S图

B.PAD图

C.程序流程图

D. E-R图

(8)数据库管理系统是

A.操作系统的一部分

B.在操作系统支持下的系统软件

C.一种编译系统

D. 一种操作系统

(9)在E-R图中,用来表示实体联系的图形是

A.椭圆图

B.矩形

C.菱形

D. 三角形

(10)有三个关系R,S和T如下:

其中关系T由关系R和S通过某种操作得到,该操作为

A.选择

B.投影

C.交

D.并

(11)以下叙述中正确的是

A.程序设计的任务就是编写程序代码并上机调试

B.程序设计的任务就是确定所用数据结构

C.程序设计的任务就是确定所用算法

D.以上三种说法都不完整

(12)以下选项中,能用作用户标识符的是

A.void

B.8_8

C._0_

D.unsigned

(13)阅读以下程序

#include

main

{ int case; float printF;

printf(“请输入2个数:”);

scanf(“%d %f”,&case,&pjrintF);

printf(“%d %f ”,case,printF);

}

该程序编译时产生错误,其出错原因是

A.定义语句出错,case是关键字,不能用作用户自定义标识符

B.定义语句出错,printF不能用作用户自定义标识符

C.定义语句无错,scanf不能作为输入函数使用

D.定义语句无错,printf不能输出case的值

(14)表达式:(int)((double)9/2)-(9)%2的值是

A.0

B.3

C.4

D.5

(15)若有定义语句:int x=10;,则表达式x-=x+x的值为

A.-20

B.-10

C.0

D.10

(16)有以下程序

#include

main()

{ int a=1,b=0;

printf(“%d,”,b=a+b);

printf(“%d ”,a=2*b);

}

程序运行后的输出结果是

A.0,0

B.1,0

C.3,2

D.1,2

17)设有定义:int a=1,b=2,c=3;,以下语句中执行效果与其它三个不同的是

A.if(a>B. c=a,a=b,b=c;

B.if(a>B. {c=a,a=b,b=c;}

C.if(a>B. c=a;a=b;b=c;

D.if(a>B. {c=a;a=b;b=c;}

(18)有以下程序

#include

main()

{ int c=0,k;

for (k=1;k<3;k++)

switch (k)

{ default: c+=k

case 2: c++;break;

case 4: c+=2;break;

}

printf(“%d ”,C.;

}

程序运行后的输出结果是

A.3

B.5

C.7

D.9

(19)以下程序段中,与语句:k=a>b?(b>c?1:0):0;功能相同的是

A.if((a>b)&&(b>C.) k=1;

else k=0;

B.if((a>b)||(b>C. k=1;

else k=0;

C.if(a<=B. k=0;

else if(b<=C.k=1;

D.if(a>B. k=1;

else if(b>C.k=1;

else k=0;

20)有以下程序

#include

main()

{ char s[]={“012xy”};int i,n=0;

for(i=0;s[i]!=0;i++)

if(s[i]>=’a’&&s[i]<=’z’) n++;

printf(“%d ”,n);

}

程序运行后的输出结果是

A.0

B.2

C.3

D.5

(21)有以下程序

#include

main()

{ int n=2,k=0;

while(k++&&n++>2);

printf(“%d %d ”,k,n);

}

程序运行后的输出结果是

A.0 2

B.1 3

C.5 7

D.1 2

(22)有以下定义语句,编译时会出现编译错误的是

A.char a=’a’;

B.char a=’ ’;

C.char a=’aa’;

D.char a=’x2d’;

(23)有以下程序

#include

main()

{ char c1,c2;

c1=’A’+’8’-‘4’;

c2=’A’+’8’-‘5’;

printf(“%c,%d ”,c1,c2);

}

已知字母A的ASCII码为65,程序运行后的输出结果是

A.E,68

B.D,69

C.E,D

D.输出无定值

(24)有以下程序

#include

void fun(int p)

{ int d=2;

p=d++; printf(“%d”,p);}

main()

{ int a=1;

fun(a); printf(“%d ”,a);}

程序运行后的输出结果是

A.32

B.12

C.21

D.22

(25)以下函数findmax拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致不能实现预定功能

#define MIN -2147483647

int findmax (int x[],int n)

{ int i,max;

for(i=0;i

{ max=MIN;

if(max

return max;

}

造成错误的原因是

A.定义语句int i,max;中max未赋初值

B.赋值语句max=MIN;中,不应给max赋MIN值

C.语句if(max

D.赋值语句max=MIN;放错了位置

(26)有以下程序

#include

main()

{ int m=1,n=2,*p=&m,*q=&n,*r;

r=p;p=q;q=r;

printf(“%d,%d,%d,%d ”,m,n,*p,*q);

}

程序运行后的输出结果是

A.1,2,1,2

B.1,2,2,1

C.2,1,2,1

D.2,1,1,2

(27)若有定义语句:int a[4][10],*p,*q[4];且0≤i<4,则错误的赋值是

A.p=a

B.q[i]=a[i]

C.p=a[i]

D.p=&a[2][1]

(28)有以下程序

#include

#include

main()

{ char str[ ][20]={“One*World”, “One*Dream!”},*p=str[1];

printf(“%d,”,strlen(p));printf(“%s ”,p);

}

程序运行后的输出结果是

A.9,One*World

B.9,One*Dream

C.10,One*Dream

D.10,One*World

(29)有以下程序

#include

main()

{ int a[ ]={2,3,5,4},i;

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

switch(i%2)

{ case 0:switch(a[i]%2)

{case 0:a[i]++;break;

case 1:a[i]--;

}break;

case 1:a[i[=0;

}

for(i=0;i<4;i++) printf(“%d”,a[i]); printf(“ ”);

}

A.3 3 4 4

B.2 0 5 0

C.3 0 4 0

D.0 3 0 4

(30)有以下程序

#include

#include

main()

{ char a[10]=”abcd”;

printf(“%d,%d ”,strlen(a),sizeof(a));

}

程序运行后的输出结果是

A.7,4

B.4,10

C.8,8

D.10,10

(31)下面是有关C语言字符数组的描述,其中错误的是

A.不可以用赋值语句给字符数组名赋字符串

B.可以用输入语句把字符串整体输入给字符数组

C.字符数组中的内容不一定是字符串

D.字符数组只能存放字符串

(32)下列函数的功能是

fun(char * a,char * b)

{ while((*b=*a)!=’’) {a++,b++;} }

A.将a所指字符串赋给b所指空间

B.使指针b指向a所指字符串

C.将a所指字符串和b所指字符串进行比较

D.检查a和b所指字符串中是否有’’

(33)设有以下函数

void fun(int n,char * s) {……}

则下面对函数指针的定义和赋值均是正确的是

A.void (*pf)(); pf=fun;

B.viod *pf(); pf=fun;

C.void *pf(); *pf=fun;

D.void (*pf)(int,char);pf=&fun;

(34)有以下程序

#include

int f(int n);

main()

{ int a=3,s;

s=f(a);s=s+f(a);printf(“%d ”,s);

}

int f(int n)

{ static int a=1;

n+=a++;

return n;

}

程序运行以后的输出结果是

A.7

B.8

C.9

D.10

(35)有以下程序

#include

#define f(x) x*x*x

main()

{ int a=3,s,t;

s=f(a+1);t=f((a+1));

printf(“%d,%d ’,s,t);

}

程序运行后的输出结果是

A.10,64

B.10,10

C.64,10

D.64,64

(36)下面结构体的定义语句中,错误的是

A.struct ord {int x;int y;int z;}; struct ord a;

B.struct ord {int x;int y;int z;} struct ord a;

C.struct ord {int x;int y;int z;} a;

D.struct {int x;int y;int z;} a;

(37)设有定义:char *c;,以下选项中能够使字符型指针c正确指向一个字符串的是

A.char str[ ]=”string”;c=str;

B.scanf(“%s”,C.;

C.c=get);

D.*c=”string”;

(38)有以下程序

#include

#include

struct A

{ int a; char b[10]; double c;};

struct A f(struct A t);

main()

{ struct A a={1001,”ZhangDa”,1098.0};

a=f(a);jprintf(“%d,%s,%6.1f ”,a.a,a.b,a.C.;

}

struct A f(struct A t)

( t.a=1002;strcpy(t.b,”ChangRong”);t.c=1202.0;return t; )

程序运行后的输出结果是

A.1001,ZhangDa,1098.0

B.1001,ZhangDa,1202.0

C.1001,ChangRong,1098.0

D.1001,ChangRong,1202.0

(39)若有以下程序段

int r=8;

printf(“%d ”,r>>1);

输出结果是

A.16

B.8

C.4

D.2

(40)下列关于C语言文件的叙述中正确的是

A.文件由一系列数据依次排列组成,只能构成二进制文件

B.文件由结构序列组成,可以构成二进制文件或文本文件

C.文件由数据序列组成,可以构成二进制文件或文本文件

D.文件由字符序列组成,其类型只能是文本文件

二级C语言等级考试 篇5

关键词:全国计算机等级考试,二级C语言,上机操作,switch语句的说明

1 上机操作题

1.1 填空题

1.2 改错题

1.3 编程题

2 上机操作题答案

2.1 填空题

(1) N (2) N-1 (3) 0

2.2 改错题

(1) s=s+ (double) (n+1) /n; (2) return t;

2.3 编程题

3 知识点详析

switch语句的说明:

(1) switch、case、default、break均是关键词, 格式中大括号括起来的部分称为switch语句体。switch语句体中可以没有break语句和default语句。

(2) switch语句的括号中的表达式的值必须是整型或者字符型, 不能为实型。case后面的表达式可以是求得整型量和字符型量的常量表达式, 但常量表达式中不能含有变量。

(3) 执行过程中如果遇到break语句, 则跳出switch语句。case只作为一个入口, 如果执行完某一个case或者default语句块后没有遇到break, 则继续顺序往下执行, 直到遇到break语句或者switch语句体末位为止。

(4) 每一个switch语句中default最多只能有一个, 通常出现在switch的最后部分, 但也可以出现在case之间或所有case之前。

(5) 在case后的各常量表达式的值不能相同, 否则会出现错误。在case后, 允许有多个语句, 可以不用{}括起来。

参考文献

[1]路瑾铭.全国计算机等级考试过关宝典系列——教程 (二级C语言) .2011 (9)

也论二级C语言之一维数组的初始化 篇6

1.1 填空题

1.2 改错题

1.3 编程题

2 上机操作题答案

2.1 填空题

(1) 0 (2) j-- (3) j

2.2 改错题

(1) doublef (double x) (2) return s;

2.3 编程题

3 知识点详析

一维数组的初始化:

数组的初始化即在数组定义的同时给数组元素赋初值。

一维数组的初始化可以用以下3种方法实现:

(1) 顺序列出数组元素的全部初值。数组初始化时, 将数组元素的初值依次放在赋值符号后面的一对大括号中, 每个初值均以逗号间隔。

(2) 只给数组的前面一部分元素设定初值。

(3) 当对数组全部的元素赋初值时, 可以不指定数组元素的个数。

注意:

(1) 当指定数组长度时, 不允许赋初值的个数多于数组元素的个数。

(2) 所赋初值的类型应与数组元素的类型一致。如不一致, 则会自动转化为与数组元素相同的类型。

(3) 在单纯的定义语句中, 不能出现省略数组长度的情况。

参考文献

[1]路瑾铭.全国计算机等级考试过关宝典系列——教程 (二级C语言) .2011 (9)

谈C语言上机考试的自动评分 篇7

若采用系统自动评分,不但将考生作弊的可能大幅减小,并且智能化的给学生的程序进行评分,以取代教师的低效率的、机械的阅卷模式,改变了院校人工批阅上机考试的现状,更加直观地反应学生的学习水平和教师的教学成果。因此,自动评分技术的研究与实现,在高等教育领域和计算机考试中具有十分重要的实际意义。本文以C语言程序设计为例,给出一种利用LD算法实现自动评分的方法。

1 填空改错题的评分

C语言上机考试系统的题型一般情况下,不外乎有填空题、改错题和编程题,其中填空题和改错题的评分完全可以将比较来判定成绩,即通过比较原题和学生答题找到最长不同字符串,然后将该字符串同标准答案比较即可。其实现方法在VB6.0中可以用以下源代码实现:函数名为CompStrFun,形参indata、dindata表示学生答题结果、试题标准答案,均为字符串类型。该函数返回两个参数最长不同字符串的长度。

2 编程题的评分

对C语言考试系统中的编程题,因为不同学生考虑问题的角度和解决问题的思路与方法存在差异,于是同样的问题学生给出的争取答案多种多样,从而造成系统无法给出标准的答案。

目前,多数程序设计类课程的上机考试系统对于编程题的评判,多是采用比较程序运行所输出结果的文件,而不考虑学生所编写程序。虽然这样能够确保编程完全正确的学生获得该题满分,但是这样造成了以下两种不合理的情况存在。第一种情况,完全不编程而直接通过编辑输出文件来获取满分的情况;第二种情况:编写的程序大部分正确,但程序无法运行得零分的情况。

对于第一种情况,在学生提交考试结果时的时候通过重新生成结果文件来避免。即先删除学生答题所产生的结果文件,再调用编译系统重新编译连接学生编写的程序,生成可执行的exe文件并运行产生最新的结果文件,然后和标准结果进行比较。这样即使学生直接编辑结果文件正确,但没有编写程序,也无法获取成绩。此情况在VB6.0中可以编写如下函数代码来实现。

‘函数名:AgainExe()

‘参数:形参FileName表示学生所编写的源程序文件(包含路径)。

‘返回值:True表示成功重新生成exe文件,Flase表示生成exe文件失败。

Public Function AgainExe(ByVal FileName As String)As Integer

Shell"VCVARS32.BAT"'设置运行环境参数

AgainExe=Shell("Cl.exe"&App.Path&FileName,vbNormalFocus)

End Function

对于第二种情况,因学生的主观因素造成学生的答题结果存在着差异,而编程题的答案并不是唯一的。这样造成该类型的题目并不能采用上述填空改错题的方式来评分。本文通过文本相似性来实现编程题的评分,即借助距离编辑(LD)算法,将学生答案和标准答案进行比较获得答案相似度作为得分比例,然后乘以该题总分作为学生该题的得分。

3 距离编辑算法实现

距离编辑算法(简称LD算法)是以一个字符串A转换成另一个字符串B的过程中,所进行的插入、删除、替换等操作的次数表示两个字符串的相似度。在上机考试系统中,从学生答案读取程序行作为字符串A,而标准答案读取程序行作为字符串B,然后即可按行执行LD算法。

例如学生程序行“x=a[j]”如何变成标准程序行“x=b[++i]”呢?第1步,a替换成b,x=a[j]→x=b[j];第2步,j替换成i,x=b[j]→x=b[i];第3步,在i前插入++,x=b[i]→x=b[++i]。故x=a[j]和x=b[++i]的编辑距离为3。

在VB6.0中实现该算法的函数源代码如下:其中函数名为LD,形参StrA、StrB表示学生答题结果、试题标准答案,均为字符串类型。该函数返回两个参数的编辑距离。

4 结论

本文提出的计算机自动评分方法,已经应用于程序课上机考试系统中。不但可以将该系统作为《C语言程序设计》课程的期末上机考试系统,另一方面还可以让学生熟悉二级语言考试环境,从而提高计算机等级考试通过率。

摘要:在程序设计课的上机考试系统中,如何实现自动评分是最为关键的部分。该文对不同题型给出了不同的评分方法,其中编程题的评分,采用学生答案和标准答案之间的编辑距离作为评分依据,将LD算法用于考试系统的自动评分,并给出用VB6.0实现的函数代码。

关键词:自动评分,考试系统,VB6.0,LD算法

参考文献

[1]吴宗东,李兵元.浅谈SHELL函数使用新法[J].新疆石油科技,2000,21(2):76-80.

[2]王振明,李俊龙.一种简易的文本内容比较算法及在VB中的实现[J].计算机应用与软件,2007,24(8):199-221.

C语言在线自动评分考试系统的研究 篇8

目前的很多自动化评分系统仍采用的是按结果评分的策略。所谓按结果评分方法, 就是只对结果进行评判。程序运行结果与正确结果一模一样, 就按对来算分, 运行结果与正确结果不一模一样, 就按错来算分。但是学过C语言的人都知道, 这样来判分是有失公平的。经过大量的调查和深入的研究, 我们提出了修复编译评分、结果对比评分和关键代码对比评分相结合的C语言程序设计自动评分策略。

程序设计题的自动评分的整个过程包括:生成考生源程序文件、使用Turbo C (简称TC) 编译链接程序、程序运行及控制 (包括死循环处理) 、程序运行结果对比、修复编译评分、关键代码对比评分。

(1) 对考生的源程序进行编译、连接, 如果能正常运行并能产生结果文件, 则将其运行结果与标准答案进行对比。与标准答案文件内容完全相同, 则说明结果正确, 得满分。如果运行结果有一部分对比正确, 则按比例给分, 如果得分为极端分 (0) 分或分数太低, 则转入静态评阅, 进行代码对比评分。若程序不能编译通过, 无法运行产生结果文件, 则转入修复编译评分。

(2) 考生程序不能通过编译产生结果, 说明考生程序存在语法错误, 则转入修复编译过程继续处理。对考生源程序进行词法分析。扫描源程序, 对代码中的单词进行分析, 识别各个单词的类型, (常量、变量、关键字) 等, 并保存到一个Token链表;根据词法分析的结果, 再对考生程序进行语法分析, 找出其中的语法错误并进行修正。如果修改次数过多, 得分已经太低则转入静态评阅。如果修改后程序能正常运行并生成结果文件, 则进行结果对比评分, 并根据修改次数给予适当扣分。如果仍不能编译通过, 则转入静态评阅。

(3) 静态评阅。静态评阅就是读取考生源程序文件的关键字 (词、表达式或语句) 对考生程序进行检测, 根据检测出的关键字的条数判断程序的逻辑合理性, 给出相应的分值。

2 C语言程序设计题自动评阅的实现

2.1 生成源文件

根据用户需要及对需求分析的深入分析研究, 本系统的程序设计题考试方式采用与全国等级考试相同的方式。即由考生完成部分程序代码 (通常是一个关键性函数) 对于这种形式, 需要从数据库中读取程序的非考生填写部分的代码, 将其和考生答案拼合成一个完整的程序文件才能正确执行。

2.2 编译连接程序

2.2.1 编译环境的构建

将一个程序源文件编译成一个可执行文件, 除了正确组成源程序外, 还需构建编译的环境, 本系统的处理方法是通过MS Sql Server的扩展存储过程Xp_Cmd Shell调用Tc命令实现。

2.2.2 判断编译是否成功的方法

编译是否成功可通过判断是否生成了可执行文件名来确定, 跟据C程序的编译原理, 名为XX.c的源文件编译成功后会生成XX.obj文件和XX.exe的目标文件, 可通过判断编译之后是否有XX.exe文件来确定编译是否成功, 而判断文件是否存在可用Asp的Fso.File Exists方法。

2.3 程序的运行

运行程序必需要在考生源程序文件编译成功生成了可执行文件的前提下进行, 程序的运行所涉及到的问题也很多, 它包括程序的执行、死循环处理等。

2.3.1 执行程序

执行待评程序也是通过Ms SQL Server的扩展存储过程Xm_Cmd Shell调用程序实现, 同时, 通过>>重定向符将屏幕输出的内容重定向到输出文件中去。

2.3.2 死循环的处理

对于考生程序出现死循环的问题, 系统采用的双线程的方法来处理。一个线程执行考生程序, 别一个线程执行计时程序, 任何一个线程执行完毕就立刻退出程序, 对于计时线程的编写使用的是API函数Wait For Single Object

2.4 程序运行结果对比

将学生程序运行的结果与标准答案进行对比的方法是将考生答案从输出文件中读取出来存放到一个字符串中, 再从数据库中读出标准答案, 通过对比它们的相似度来获得得分结果。如果只是简单的将两个字符串逐个比较, 那么得出来比较结果是不科学的。例如标准答案是“1 2 3”而学生答案是“212 3”其第一个关键字错误但后两个是正确的, 但逐个比较的结果相似度却是0。对于这种情况, 系统处理的方法是用ASP的Split函数把学生答案拆开成多个关键词, 同时也把标准答案用同样的方法拆开, 这样再逐个进行比较就不会出现刚才的问题。同时, 考虑到学生程序自由度比较大, 如果学生输出答案不规范, 比如说标准答案仍是“1 2 3”而学生答案输出出现友好提示等附加内容, 例如“The answer is 1 2 3”虽然学生答案原则上是对的但却因为友好提示而得0分。

2.5 修复编译评分

一个考生的程序不能通过编译, 并不一定表示该考生的程序存在很大的错误, 其原因可能仅仅是漏掉了一个分号或者无意输错了一个字母。修复编译的目的, 不是试图纠正考生程序中的所有语法错误, 而是修复考生常出现的一些导致程序不能编译的小错误, 使之能编译运行, 然后给出一个合理分数。修复编译程序是一个专门设计的C语言编译器, 这个编译器编译的部分是标准C语言编译器的一个字集, 但是它具有一定修复考生程序常见错误并能生成一个新的较为正确的程序代码的能力。

2.6 关键代码对比评分

首先, 由编题的教师在题库数据库中实现存放好适量的正确关键代码 (语句、单词等) 评分时, 系统通过查找考生程序中这些关键代码的数量, 给出一个比较合理的分数。

C语言程序书写格式多种多样, 同一段程序可以用不同的风格书写, 程序中定义的变量名也随考生个人喜好有所不同, 而且书写时会出现有无空格之类的区别, 同样功能的程序编写方法千变万化, 直接使用字符匹配方法显然存在很大的不合理性。经过对C程序语法等特性的研究, 在自动评阅方法中采用正则表达式来表示一程序中的关键算法。例如实现1-10的整数求和程序段的通用句式可表示为:

int@VAR@;for (int@VAR@=1;@VAR@<=10;@VAR@++) @VAR@=@VAR@+@VAR@;这种形式可以表示上述程序的核心算法而且具有通用性。

3 结束语

基于上述C语言程序设计题自动评阅方法的C语言考试系统正在试用阶段, 现在我院已应用于实际教学和教学辅助网站。经过大量测试和使用, 程序设计题的自动评分可全部实现。对于正确的考生程序, 能100%的准确评分, 对于存在错误的考生程序, 评分结果接近人工评分标准, 准确率在90%左右, 避免了不合理极端分数的出现, 完全可以在实际考试中使用。此C语言程序设计题自动评阅方法, 也可应用各种将C语言列入考试科目的各类计算机考试, 如全国计算机等级考试二级、三级C语言上机, 省二级C语言考试和国家程序员考试等, 具有很好的应用和推广价值。

摘要:本文提出C语言在线自动评分考试系统的研究, 这样不仅在分类统计准确性和阅卷稳定性方面有很大的提高, 具有很好的实用价值和应用前景。

C语言考试系统的设计与实现 篇9

在现代信息网络技术引入高校教育以后, 其所带来的不仅只是教学手段的变化, 而且是整个教育领域的变革。特别是对学生考试的工作从传统的考核方式进化到了现在的网上考试。本文旨在通过探讨网上考试系统的分析, 结合本校的特点, 实现高效率、低成本、公平、公正、安全的网上考核系统。

二、系统的设计以及实现

本系统主要是为了实现试卷的生成、试卷的分类、进入考试系统后时间的计算以及考试后老师的批阅问题。针对一般考试系统的需求, 需要设计管理员信息、教师信息、学生信息、普通用户信息、试卷信息、成绩信息、判断题信息、填空题信息、单选题信息以及多选题信息等等。所以c考核系统应该建立一个稳定的后台数据库系统, 通过该数据库管理整个考试系统所需的信息 (用户信息、试题信息、试卷信息、考试信息等) 。

1、平台选择窗体

根据用户的身份选择相应的平台, 老师选后台控制程序, 学生选前台考试程序。

2、登录窗口的创建。

该窗口是学生进入考试系统的端口, 它的主要功能是确定参加考试的学生的身份并记录下来。学生在登录窗口输入自己的学号和密码, 进入考试界面。输入正确信息后点登录按钮后就可以进入考试系统答题了。

学生登录窗体主要代码如下:

3、主观题的判卷得分

在本系统中的编程题部分, 属于主观题部分, 可以通过界面上的按扭来启动Turbe C, 将编程答案保存在一个指定的路径下, 老师可通过文件操作, 把学生考试的编程答案读出来, 作为该考生试题的答案。

点打开TC按钮所用代码:

4、客观题的判卷得分

学生考试窗口首先查询数据库, 得到随机抽取的部分试题, 逐一读出, 等待学生逐一回答, 然后交卷。部分代码如下:

三、结语

网络化教育代表了教育改革的一个发展方向, 已经成为现代教育的一个特征, 并对教育的发展形成新的推动力。通过Internet/Intranet来实现网上考试, 是现代教育技术的一个具体实现, 具有很重要的现实意义。可以实现教考分离以及考务工作的全自动化管理, 可以有效利用校园网的软硬件资源, 使其发挥最大效力, 更好的为学校的教学、科研、管理服务, 可以大规模的实行考试, 实现考试的客观、公证性, 自动化组卷、阅卷可以减轻教师的工作强度。

摘要:本文是在结合校园网建设及教学管理信息化的基础上, 运用动态网页语言和数据库技术相结合开发网上考试系统, 实现考务工作的信息化、网络化、科学化管理。

关键词:c语言考试系统,SQL,VB

参考文献

[1].周绪, 管丽娜, 白海波编著.SQL Server 2000入门与提高[M].清华大学出版社, 2001.

[2].施伯乐, 丁宝康, 汪卫编著.数据库系统教程[M].高等教育出版社, 2004.

[3].赵斯思编著.Visual Basic数据库编程技术与实例[M].人民邮电出版社, 2005.

[4].李强编著.Visual Basic精彩编程百例[M].中国水利水电出版社, 2004.

上一篇:独特的生活化素材下一篇:空间重组