c上机考试题库答案

2024-04-29

c上机考试题库答案(精选8篇)

篇1:c上机考试题库答案

程序填空题:

给定程序中,函数fun的作用是:

注意:部分源程序在文件BLANK.C中。不得增行或删行,也不得更改程序的结构!

源程序如下

答案:

(1)x[i]<=’9’(2)j++(3)‘’

程序修改题:

给定程序中,函数fun的作用是:已知正整数n(规定n小于50000),统计它包含的0的个数,以及各位上最大的数。最大的数通过函数返回,0的个数通过形参传回。

注意:部分源程序在文件MODI1.C中。

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

源程序如下

答案:

t=0改为t==0 zero=count;改为*zero=count;

程序设计题:

请编写一个函数fun,它的功能是:比较一个数组中奇数的个数与偶数的个数,并计算个数多的数的算术平均数。

注意:部分源程序在文件PROG1.C中。

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

答案:

篇2:c上机考试题库答案

9月初,我们先前往了山东威海滨田印刷机械有限公司进行认识实习。此后我们又去了一家大型零件加工厂进行了参观。

通过这次的实习,我们了解到机械行业第一线的一些具体情况,了解了工业生产实施的具体过程,同时也对一些工厂的技术实施,管理方法有了一定的认识。

前往滨田印刷机械有限公司以后,我们在指导老师和工程师的带领下,分批开始了对该厂的参观。这一切对我们而言陌生有新鲜。开始,我们在一位严谨的工程师的带领下,去了零件加工厂了解了各类零件的加工。其中参观了各种自动化得机床,我们还从一部分机床中看到了上学期我们金工实习那些机床的影子。但给我最大的感触是整个车间里,国产的机床并不是很多。整个过程纪律严明,一边参观零件的加工,一边聆听了工程师给予我们的讲解了解了整个工厂的第一道程序。

此后,我们前往了三间组装车间,参观了52系列,66系列和47系列三种印刷机的组装。这次给我们介绍的是一位年轻的工程师,他详细的向我们介绍了这三种印刷机的一些知识。我们也了解了刚知道这几个型号产生的疑惑,原来,47,52和66的意思是最大用纸尺寸的长。其中47系列是单色印刷机,可用于印号码,打孔线和树脂凸版印刷。使用的集中供油系统可以有效的防止因局部遗忘加油造成的零件磨损,延长零件的精度和使用寿命,杜绝润滑油浪费,保护环境卫生。52系列性能较高,大都是以高级胶印机所具有的高耐久性、高精度的部件为基础,生产的高性能印刷机。同时也是可适合文字、线条印刷,实地印刷等各种印刷需要。另外通过添加多种备选装置,使机器升级到更高效率的印刷机。到66系列时,工程师大哥向我们介绍的较为详细,它分为两款:WEIHAI HAMADA66-NP 实现精美平版印刷及号码印刷的高品质重型印刷机和WEIHAI HAMADA66 真正高品质的重型印刷机。WEIHAI HAMADA66系列是以真正高质量印刷为目标而生产的大四开重型胶印机。这款先进的机械拥有按扭式与触摸式键盘,所需操作全部集中在3处操作盘上。独特的飞达可以实现高速给纸及高精度套印。通过计算机分析设定理想的墨辊排列方式,高档机拥有的装备随处可见。后来通关查询我了解到这两款62的相关参数如下:

WEIHAI HAMADA66-NP实现精美平版印刷及号码印刷的高品质重型印刷机最大印刷面积 640×470 mm 最大用纸尺寸 660×483 mm 最小用纸尺寸 297×210 mm 纸张厚度 0.04~0.4 mm 续纸方式 连续供纸式 湿润方式 水胶绒式 墨 辊

19根(上墨辊4根)水 辊

5根(上水辊2根)套准机构 滚轮式拉规 印刷速度

3,000~10,000张/小时 马 达

5.55Kw、(主电机3.7Kw气泵0.75Kw)机械尺寸

机尺寸 2,290(L)×1,375(W)×1,750(H)mm 重 量

重量 3,200kg

WEIHAI HAMADA66 真正高品质的重型印刷机 最大印刷面积 640×470 mm 最大用纸尺寸 660×483 mm 最小用纸尺寸 297×210 mm 纸张厚度 0.04~0.4 mm 续纸方式 连续供纸式 湿润方式 水胶绒式 墨 辊

19根(上墨辊4根)水 辊

5根(上水辊2根)套准机构 滚轮式拉规 印刷速度

10,000张/小时 马 达

5.55Kw、(主电机3.7Kw气泵0.75Kw)机械尺寸

机尺寸 2,290(L)×1,375(W)×1,750(H)mm 重 量 3,200kg 4点以后,我们结束参观,我们开始于工作人员进行了一些交流,我们有了更多的了解。4点半,我们乘车回校。

我们第二次去参观的是一家大型零件加工厂,由于威海是海边城市,所以这些零件大都是给船舶提供的。那天下午来到工厂,我们第一个印象就是很高很大,由于零件较大,所以建了几个很高很大的自动吊车,因此进厂后发现工厂很高,室内也较为空旷,通过了解我们知道,加工这些大型零件花费的人力,财力和时间都相当巨大。这次给我们进行讲解的是一位高高的工程师,为人冷静沉稳让我们不由自主跟着他的步伐聆听讲解。走到工厂的一头,我们发现了一个巨大的轴,旁边一块牌子写着;十万元的教训。原来,由于加工时的小小失误,造成螺纹的一点瑕疵,最终导致整个零件的报废。看到这个以后,大家都有着不小的感 触。此后我们又参观了他们的一些小型零件的加工。同样。4点半后我们结束参观回校。

认识实习主要是学习一些我们专业课的基础,我们学到了一些我们在课本中学习不到的东西.实习提供了一个机会,让大家接触到真实的工作环境有了实习的经验。我相信我以后毕业工作时可以更快更好的融入新的环境,完成学生向职场认识的转换。

坦白说,我以前对自己专业比较迷茫,但这次实习我了解了我们专业的大体方向,也同时提高了自己对专业的兴趣和主观能动性。

我相信自己能渐渐明确自己以后发展奋斗的目标,同时也增加了自己学好本专业的信心。

但是,通过这次实习我真正感觉到步入社会后我们要学的东西还很多,差距还是有的,如专业课知识欠缺,动手能力不足等等。我也知道这不是一天两天能学会的,不过我坚信我能做到这一点。这次实习对我将来毕业设计一定有很大的帮助,我想能够在以后的设计中体会到更对的东西。最后还是谢谢给予我的这次机会,让我真正学到了很多专业和社会知识。

老师,工程师们您们都辛苦了,真诚的感谢您们。

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

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

篇4:基于C/S结构的考试与题库系统

关键词:考试系统;C/S模式;数据库

中图分类号:TP311

计算机技术的应用与推广,实质上取决于计算机软件的应用和推广。可以说,没有软件,就没有计算机的应用;学习、使用计算机,从根本上讲就是学习和掌握软件的使用。本文主要研究一个通用型的题库和考试系统,利用计算机和网络进行无纸化考试。

本系统由服务器端和客户端组成,采用C/S模式。服务器端主要包括系统基本操作模块、题目录入模块、判卷处理模块、系统查询模块、系统初始化和系统数据维护模块。客户端主要由考生登录模块、历次成绩查询模块和考试处理模块组成。

其中系统基本操作模块主要完成试卷的生成、考试设置、学生信息录入功能;题目录入模块包括选择题、填空题、判断题、问答题、分析题的录入;系统查询模块完成试卷、学生、学生成绩的查询功能;系统初始化模块完成系统数据库初始化、单位信息设置功能;数据维护模块完成按年级、科目信息维护及操作员维护,修改密码、数据备份/修改等功能。

总的来说包括两大部分:一是服务器端题目的录入与修改,教师可以从题库中抽取试题,也可加入,删减试题用以为学生生成试卷。并对学生所作答案进行批改给分,同时可将成绩结果打印。二是客户端可从现已生成的试卷中调出试题作答,学生可在考试之后查询以前考试卷的成绩。

另外,还可以使用打印机生成传统的试卷,由学生进行笔答,在考试结束之后学生成绩也可以使用打印机生成文本,以备存档。

1 系统分析

1.1 需求分析

随着Internet的高速发展,网络逐渐进入人们的生活,给我们的生活和工作带来许多便利,无纸化办公也渐渐的取代传统的办公模式。在传统的学校或者人事单位的考试方式中,考试和成绩的管理都很麻烦,每次考试都要出题、组卷、判卷,浪费很多人力和时间。

随着计算机和网络的普及,网上学校、网上教学等渐渐取代传统的教学模式。所以学校和单位的考试也将改变传统的模式,利用计算机和网络进行学习和考核,题目可以用计算机进行数据保存,实现“一次出题、多次利用”。这就是开发本系统的目的。

1.2 运行环境分析

硬件环境:系统需要运行在局域网环境,必须有一台性能较好的计算机作为题库和考试控制的服务器,客户端用于学生的考试或者教师录入/修改题目之用。

软件环境:服务器端操作平台为Window Server 2003,后台数据库使用SQL Server 2005服务器版。客户端可以是Windows XP等个人版系统,如图1所示。

1.3 开发工具的选取

由于Visual Basic 6.0工具功能强大,简单易用,开发周期短,特别是它强大的数据库操作功能,加上其与SQL Server的完美结合,所以优先采用它作为前台开发工具。

后台数据库使用SQL Server 2005,由于数据库数据量比较大,需要保存各学科、各班级的题目和试卷信息,还有学生的基本信息、各次考试的试卷成绩;而且数据库必须支持多用户同时并发访问。所以只能选用大型多用户多任务的数据库系统,比如微软的SQL Server、Sybase、Oralce等。

Visual Basic 6.0中操作数据库的方法很多,比如DAO、RDO、ADO等。Microsoft的ADO2.0-2.5数据库操作对象是在DAO和RDO的基础上完善的,其性能很好,特别适合用于本地或者远程数据库的操作。所以系统采用Microsoft ADO 2.0对象库进行数据库操作,用OLE DB作为数据库的编程连接接口。

1.4 系统效益的估计

在传统的知识和学习考试中,存在很大的浪费,比如纸张、人力、时间等,而且管理很不方便。现在如果采用计算机网络系统来出题、考试、管理等,一可以节省纸张,二可以减轻教师不必要的重复工作,效益非常可观。

2 数据库结构设计

数据库分为服务器端和客户机端。服务器端用SQL Server 2005保存各科、各班级的题目和试卷信息、所有学生的基本信息和成绩信息。客户端用Access小型关系数据库,考试时从服务器端读取当前考试的试卷信息,再从服务器端读取各题目的信息,生成本地数据库。而客户端暂时保存数据,提高客户端读取数据的速度,考完试后数据就被删除。

服务器端数据库一共包括17张表:例如操作员的信息、学校科目信息、年级和班级结构信息、学生的基本信息、成绩信息、各种考试题型(选择题、填空题、判断题等)信息等。

客户端数据库一共包括6张表,分别为:试卷信息、试卷选择题、试卷填空题、试卷判断题、试卷问答题、试卷分析题。

3 系统功能设计

鉴于以上的分析,系统服务器一共包括7个模块,分别为:

(1)基本操作包括子模块:试卷生成/修改、考试设置、学生信息录入。

(2)题目录入包括子模块:选择题录入、填空题录入、判断题录入、问答题录入、分析题录入。

(3)判卷处理包括子模块:填空题判卷、问答题判卷、分析题判卷。其他的两个题型(选择题、判断题)由计算机自动判卷。

(4)查询处理包括子模块:试卷查询、学生查询、学生成绩查询。

(5)系统初始化包括子模块:系统数据库初始化、单位信息设置初始化。

(6)数据维护包括子模块:科目信息维护、班级信息维护、操作员维护、修改密码、数据备份/恢复。

(7)系统帮助主要为用户提供一定的帮助和使用指南。

客户端一共包括3个模块分别为:

(8)考生登录负责检查考生输入的个人信息是否正确(从服务器端取得考生信息),正确则登录。系统信息包括关闭计算机、强行交卷、系统消息等。

(9)考生历次信息查询负责考生本人的历次考试的查询、浏览考过的试卷。

(10)考生考试处理主要负责考生的考试全过程,先从服务器读取本次考试的试卷信息,

在客户端生成一缓存数据库。客户端数据库为Access数据库。考试过程中只对缓存数据库操作,就算系统出问题也能把考生的答案保存下来,考完试后统一把答案提交到服务器的成绩表里。

4 小结

本系统经过详细测试和检验,证明其设计方案是合理的、实用的,运行是可靠的,数据维护方便,用户操作简易。可以实现的“一次出题、多次利用”的目标,使考试和成绩的管理变得更加方便,节省了大量的人力和时间。

参考文献:

[1]刘志妩,张焕君,马秀丽.基于VB和SQL的数据库编程技术[M].北京:清华大学出版社,2008.

[2]林卓然.VB语言程序设计(第2版)[M].北京:电子工业出版社,2009.

作者简介:焦鸿斌(1979-),男,吉林省长春市人,吉林农业大学硕士研究生,工程师,主要从事医院计算机应用研究。

篇5:C语言上机考试改错题分析总结

以下对改错题的改错方式做一些总结,当然这些总结只能对大部分改错行有效。

1、若错误行是函数首部,可分为以下几种情况:

A、该行最后若有分号则删除,中间若有分号则改成逗号

B、形参类型不一致的问题,特别是指针类型,若后面用到某形参时有指针运算则该形参必为指针类型;若形参是二维数组或指向m个元素的指针变量,则第二维的长度必须与main中对应数组的第二维长度相同

C、函数类型不一致的问题,若函数中没有return语句则函数类型为void,若有return语句则函数的类型必须与return后变量的类型一致。

2、若错误行是if或while语句,则首先看有没有用小括号将整个表达式括起,若没有则加上小括号。

3、若错误行中有if、while、for则要特别注意条件表达式的错误问题:

A、指针变量的应用,若表达式中有指针变量且没有指针运算符,则加上指针运算符

B、若条件表达式中只有一个等于号,则改成两个等于号,若为其它比较运算符则一般是进行逆转或加一个等于号

C、for中要用分号分隔表达式,而不是用逗号

4、语法错误

A、语句缺少分号,若错误行中有语句没有用分号结束,则加上分号。

B、大小写不对,若错误行中有大写字母则一般都改成小写字母。

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

6、若错误行为return语句,则首先看是否是缺少分号若是则加上分号即可;否则就是return后的变量或表达式错误(此时可通过看题意,来分析该返回哪一变量或表达式)

7、若错误行中见到整型1除以某个表达式时,一概改成1.0。但若是整型变量或表达式则只能用强制转换

8、复合运算符写错

9、字符串结束符写错,若有字符串结束符则要特别注意有没有写错,但第11题例外,因为该题是要将数字字符转换成对应的数字。

10、若错误行是定义语句,则首先看类型是否符合;再看所赋初值是否正确;若以上均不是,则看是否少定义了某个变量或少了花括号。

11、表达式错误(占的份量最多,并且没有统一的改法,我们只能通过题目要求来分析并修改)

篇6:c上机考试题库答案

char ch, filename[200];

int count = 0;

FILE *fp;

scanf(“%s”, filename);

if((fp = fopen(filename, “r”))== NULL)

{

printf(“File open error!n”);

exit(1);

}

while((ch = fgetc(fp))!= EOF)

{

count++;

}

printf(“%dn”,count);

if(fclose(fp))

{

printf(“File close error!n”);

exit(1);

}

return 0;}

2.文件中数据的排序 #include #include int main(void){

int a[10], temp = 0, i = 0, j = 0, k = 0;

char filename1[80], filename2[80];

FILE *fp1,*fp2;

scanf(“%s”, filename1);

scanf(“%s”, filename2);

if((fp1 = fopen(filename1, “rb”))== NULL)

{

printf(“Input file open error!n”);

exit(1);

}

if((fp2 = fopen(filename2,“wb”))== NULL)

{

printf(“Output file create error!n”);

exit(1);

}

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

{

fread(&a[i], sizeof(int), 1, fp1);

/* 读出数据 */

}

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

{

k = i;

for(j = i + 1;j < 10;j++)

if(a[k] > a[j])k = j;

if(k!= i)

{

temp = a[k];

a[k] = a[i];

a[i] = temp;

}

} for(i = 0;i < 10;i++)

/*

{

fwrite(&a[i], sizeof(int), 1, fp2);

}

if(fclose(fp1))

{

printf(“Input file close error!n”);

exit(1);

}

if(fclose(fp2))

{

printf(“Output file close error!n”);

exit(1);

}

/*验证结果的代码,请不要改动*/

if((fp1 = fopen(filename2, “rb”))== NULL)

{

printf(“Result file open error!n”);

exit(1);

}

/* 排序 */ 写入数据 */

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

{

fread(&a[i], sizeof(int), 1, fp1);

/* 读出数据 */

}

if(fclose(fp1))

{

printf(“Result file close error!n”);

exit(1);

}

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

printf(“%d ”, a[i]);

printf(“%dn”, a[i]);

return 0;} 3 二进制数据文件/ #include #include int main(void){

int a[10], temp = 0, i = 0, j = 0, k = 0;

char filename1[80], filename2[80];

FILE *fp1,*fp2;

scanf(“%s”, filename1);

scanf(“%s”, filename2);

if((fp1 = fopen(filename1, “r”))== NULL)

{

printf(“Input file open error!n”);

exit(1);

}

if((fp2 = fopen(filename2, “wb”))== NULL)

{

printf(“Output file open error!n”);

exit(1);

}

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

{

fscanf(fp1, “%d”, &a[i]);

fwrite(&a[i], sizeof(int), 1, fp2);

}

if(fclose(fp1))

{

printf(“Input file close error!n”);

exit(1);

}

if(fclose(fp2))

{

printf(“Output file close error!n”);

exit(1);

}

if((fp1 = fopen(filename2, “rb”))== NULL)

{

printf(“Result file open error!n”);

exit(1);

}

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

{

fread(&a[i], sizeof(int), 1, fp1);

}

if(fclose(fp1))

{

printf(“Result file close error!n”);

exit(1);

}

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

printf(“%d ”, a[i]);

printf(“%dn”, a[i]);

return 0;}

4.比较2个文本文件的内容 #include #include int main(void){

int i = 1, flag = 0;

char filename1[80], filename2[80];

FILE *fp1, *fp2;

/* 读出数据 */

scanf(“%s”, filename1);

scanf(“%s”, filename2);

if((fp1 = fopen(filename1, “r”))== NULL)

{

printf(“Input file1 open error!n”);

exit(1);

}

if((fp2 = fopen(filename2,“r”))== NULL)

{

printf(“Input file2 open error!n”);

exit(1);

}

while(!feof(fp1))

{

if(fgetc(fp1)== fgetc(fp2))

i++;

else

{

flag = 1;

break;

}

}

if(flag)

printf(“%dn”, i);

else

printf(“is equaln”);if(fclose(fp1))

{

printf(“Input file1 close error!n”);

exit(1);

}

if(fclose(fp2))

{

printf(“Input file2 close error!n”);

exit(1);

}

篇7:c上机考试题库答案

无忧id 81题按金额从小到大进行排列

已知在文件in.dat中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数readdat是读取这100个销售记录并存入结构数组sell中。请编制函数sortdat(),其功能

要求:按产品代码从小到大进行排列,若产品代码相等,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数writedat()把结果输出到文件out9.dat中。

部分源程序存在文件prog1.c中。

请勿改动主函数main()、读数据函数readdat()和输出数据函数writedat()的内容。

#include

#include

#include

#include

#include

#define max 100

typedef struct{

char dm[5]; /*产品代码*/

char mc[11]; /*产品名称*/

int dj; /*单价*/

int sl; /*数量*/

long je; /*金额*/

}pro;

pro sell[max];

void readdat();

void writedat();

void sortdat()

{int i,j;

pro xy;

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

for(j=i+1;j<100;j++)

if(strcmp(sell[i].dm,sell[j].dm)>0||strcmp(sell[i].dm,sell[j].dm)==0&&sell[i].je

{xy=sell[i];sell[i]=sell[j];sell[j]=xy;}

}

void main()

{

memset(sell,0,sizeof(sell));

readdat();

sortdat();

writedat();

}

void readdat()

{

file *fp;

char str[80],ch[11];

int i;

fp=fopen(“in.dat”,“r”);

for(i=0;i<100;i++){

fgets(str,80,fp);

memcpy(sell[i].dm,str,4);

memcpy(sell[i].mc,str+4,10);

memcpy(ch,str+14,4);ch[4]=0;

sell[i].dj=atoi(ch);

memcpy(ch,str+18,5);ch[5]=0;

sell[i].sl=atoi(ch);

sell[i].je=(long)sell[i].dj*sell[i].sl;

}

fclose(fp);

}

void writedat()

{

file *fp;

int i;

fp=fopen(“out9.dat”,“w”);

for(i=0;i<100;i++){

printf(“%s %s %4d %5d %5dn”, sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);

fprintf(fp,“%s %s %4d %5d %5dn”, sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);

}

fclose(fp);

篇8:c上机考试题库答案

二级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.

上一篇:年文化记事作文范文下一篇:雷锋的感想作文