c考试试题答案要点

2024-04-26

c考试试题答案要点(精选8篇)

篇1:c考试试题答案要点

C语言考试复习要点:

一. 题型:

1.选择题——最基本的知识点,概念——共20分

2.程序运行结果分析——10道程序题——共30分

(来源于课本例题和作业,复习的重点是多看课本程序和作业程序)

3.程序填空题——一个完整的程序挖掉一些空格——共四个程序,10个空格——共30分

4.编程题——有两道——一道课后作业,比较容易,8分——另外一道比较难,12分——共20分

二.

了。

2.第五章到第八章的内容是核心内容,要重点复习,题型覆盖所有题目。

3.第九章主要复习宏定义和宏替换。

4.第十章考的不多,集中在10.2和10.3两节。

复习策略: 1.第一章到第四章的内容比较少,基本是考概念一些小题,以选择题为主,浏览一下就行

篇2:c考试试题答案要点

2007年9月,教育部考试中心对现有的全国计算机等级考试大纲进行了改革,二级C语言上机考试时间由60分钟增加到了90分钟,编程环境由以前的TC2.0改为VC++6.0。[2]本文根据对近几年来二级C语言上机考试中的程序设计题进行归类总结,提出相应的策略,并对考生应对2007新大纲以后的C语言上机环境给出一些建议。2 对以往考试的分析

历年的全国计算机等级考试中二级C语言上机考试程序设计题目全部出自于由南开大学出版社编写南开100题,每次考试教育部考试中心会对题库做相应的改动,增加一些新的题型或题目,考试中,考生随机抽取一套进行测试。笔者对2005年4月至2007年9月2004版新大纲以后的6次考试中的程序设计题目进行了总结,将这些题目一共分成了6大类,对每种类型的题目进行了分析。2.1 对一维数组和字符串的操作

该类型的题目在以往的机试中所占比例最大,为40%,考生应对该知识点做全面的复习和掌握。一维数组可以分为数值型和字符型,其中数值型数组的数据类型为整型和实型,字符型数组的数据类型为字符型,我们通常会把字符型数组叫做字符串,但是应该注意字符型数组与字符串之间是存在区别的,也就是’’结束标志问题。在复习该部分的时候,考生应该掌握以下两个问题:(1)对一维数组的操作

对一维数组进行操作的时候,不可避免的要访问相关的数组元素,在C语言中访问数组元素一般采取单层循环的方法进行遍历,假设数组长度为n,数组下标是在0到(n-1)之间的,考生应该牢固掌握在一维数组中求最大值、最小值,移动元素,查找特定值,存储数组元素的方法。

(2)对字符串的操作

该类问题是每次考试的重点和难点,特别是将字符串同指针结合起来以后,难度就更大了。考生在解决此类问题是应特别注意字符串的结束标志’’,它不仅仅用来作为字符串的结束标志,而且在对字符串进行操作的时候,它也是循环的结束标志。考生在复习该部分的时候,应该注意这样的几个基本问题:大小字母转换、奇偶数判别、删除或添加指定的字符和字符的移动。此外,考生应该牢固掌握指针的特性及字符串操作函数的使用和实现方法,特别是字符串连接函数与求子串函数,在以往的考试中多次要求考生自己编写,考生应对该知识点做重点掌握。2.2 数值计算

该类型的题目在历年的机试中占22%,考查的机率也非常高。该类题目一般给定一个数列计算公式,然后要求考生编写一个函数类实现求数列的前n项的值、累加和或者积。在解决该类的问题,首先要找到给定数列的变化规律,然后根据其变化规律来编写一个单层或者双层的循环来求其相应的值。在编写程序的过程中,往往还会用到一些数学函数,如:sqrt()、fabs()、pow()等,考生应该牢固掌握math.h中的一些常用数学函数的功能和使用方法。另外,还应该注意数据类型之间的区别,特别是float和int类型,不同的数据类型产生的运算结果也是不一样的。2.3 对结构体的操作

该部分对非计算机专业的学生来说是一个难点,因为结构体在《数据结构》这门课程中应用最为广泛,但考生忽视对该知识点的复习,但在以往的机试中,有17%的题目是属于该类型。考生在复习这部分的时候,首先应注意结构体成员的两种不同的引用方法:结构体变量和指向结构体的指针,也就是结构体成员运算符’.’和指向运算符’->’,在编程的过程中,往往会涉及到结构体数组,其实这类数组除了数据类型是结构体以外,其它的特性和普通数组是一样的,结构体除了定义、赋值和初始化以外,它的其它操作和普通变量也是一样的,包括在结构体数组(记录)中进行查找、删除、求最大最小值等操作,我们应该用对待普通变量的方法来解决结构体的问题,这样的话,难度就可以大幅度的降低。2.4 对二维数组的操作

该类问题在历年的机试中占16%,考生应对二维数组的数组元素的遍历方法、存储方式、矩阵转换等问题做重点掌握。在C语言中,访问二维数组的数组元素一般采用双层循环的方法实现,因为二维数组具有两个下标:行下标与列下标;二维数组可以按行或者按列转化成一维数组进行存储;对二维数组进行行列转换的时候,要将行下标和列下标进行互换。考生还应该掌握上三角矩阵、下三角矩阵的特性,在考试中,该知识点也有所涉及。2.5 数制转换

该部分在以往的机试中占11%,包括两类问题:一是整数合并,二是类型转换。在复习该部分时,考生应该注意C语言中int型、long型、float型和double型数据所占的存储空间的大小和精度,注意’%’(模)运算和’/’(除法)运算的特点,特别应该灵活的使用模运算与除法运算求数据相应位数上的数值。掌握强制类型转换的方法以及按规定的位数保留小数的方法。2.6 素数

该部分在历年的机试中占6%,考生应该牢固掌握素数的基本概念和判断素数的方法。特别需要考生注意的是整数1不是素数,所以在判断素数的时候,应该从2开始,到(n-1)结束,能够除尽的不是素数,不能除尽的是素数。判断素数问题是C语言中的一个基本算法,不仅会在程序设计中会考到,而且往往在程序填空和程序改错中也会有所涉及,因此,考生应对该知识点认真复习。3 程序设计中应注意的问题 3.1 熟悉编程环境

根据2007年9月教育部考试中心颁布的新大纲,二级C语言的编程环境由TC2.0改为VC++6.0,考生应该熟练掌握VC++6.0的使用方法,虽然VC支持鼠标操作,但是考生还是应该掌握几个常用快捷方式来提高编程效率。特别要注意在对程序进行改动以后要保存,要进行编译连接生成可执行(.exe)文件。3.2 养成良好的程序设计风格

二级C语言机试中的程序设计题,一般来说程序都比较简短,源代码一般不超过5行,在题目指定的函数内编写程序。考生在答题的时候尽量采用易于理解而且比较简单的代码来解决问题,注意不要改动函数的参数,语句的界符“{}”也应该具有层次性的缩进,必要时,使用一定的注释来帮助自己理解程序。3.3 谨慎使用指针

指针是C语言的精华,也是机试考查的重点内容,指针的使用非常灵活,在使用的指针的时候一定要注意对其进行初始化,所谓初始化也就是给指针一个初值,没有初值的指针是很危险的,除了一定得不到正确答案外,如果指针越界,容易引起死机。如果死循环带来的死机是“假死”,大部分可以用“Ctrl+Break”来恢复,但指针越界引起的死机却是真死,请考生一定要牢记。[3] 3.4 熟练掌握循环结构

循环结构的程序是程序设计中涉及最多的知识点,根据以上的分析,我们可以看出几乎每一类题目都会涉及到使用循环来解决问题,因此考生应该掌握循环结构的特征和使用方法,以达到能够熟练使用的目标。应该引起注意的是,在编制循环结构程序的时候考生应该尽量使用“for”循环和“while”循环,避免使用“do……while”循环和“goto”语句,因为“for”循环和“while”编写出来的循环程序易于理解,不容易出错。3.5 沉着应战,认真细心

二级C语言上机考试时间有限,虽然从以前的60分钟改为了90分钟,但是相对于其它语种的上机考试来说,二级C语言的上机时间还是非常紧迫的。考生在答题的过程中应该保持一个良好的心态和平静的心情,遇到问题的时候不能慌乱,最好能够在机试时带一张草稿纸和一支笔,在编程之前先画出程序的流程图来明确解题思路。在遇到程序错误时一定要根据错误代码检查相应位置,检查的过程中应该认真仔细,确保能够解决问题。4 结束语

篇3: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.

篇4:期末综合测试题(C)

1. 若关于x的不等式-3x+n>0的解集是x<2,则关于x的不等式-3x+n<0的解集是

()

A. x<2B. x≤2C. x>2D. x≥2

2. 在一次课堂练习中,小敏同学做了如下4道分解因式题.你认为小敏做得不够完整的一道题是()

A. x3-x=x(x2-1)B. x2-2xy+y2=(x-y)2

C. x2y-xy2=xy(x-y) D. x2-y2=(x-y)(x+y)

3. 从A地到B地的路程为m km,某汽车匀速行驶从A地到B地需t h.若汽车速度每小时加快a km,则行驶时间可以缩短()

A.h B.hC.hD.h

4. 如图1,AB∥CD,AE∥FD,AE、FD分别交BC于G、H,则图中共有相似三角形()

A. 4对 B. 5对 C. 6对D. 7对

5. 某校测量了八(1)班学生的身高(精确到1 cm),按10 cm为一段进行分组,绘制出图2所示的频数分布直方图.下列说法正确的是()

A. 该班人数最多的身高段的学生有7人

B. 该班身高低于160.5 cm的学生有15人

C. 该班身高最高段的学生有20人

D. 该班身高最高段的学生有7人

6. 有一三角形纸片ABC,已知∠A=65°,∠B=75°.将纸片的一角折叠,如图3所示,使点C落在△ABC内.若∠1=20°,则∠2为()

A. 30°B. 60°C. 20° D. 65°

二、填空题(每小题3分,共30分)

7. 如果正整数x的与2的和不小于x的一半与的和,则x的值可为.

8. 观察下列各式:2×4=32-1,3×5=42-1,4×6=52-1,…,10×12=112-1.将你猜想到的规律用只有一个字母的式子表示出来.

9. 小王在超市用24元钱买了某种品牌的牛奶若干盒.过一段时间再去该超市,他发现这种牛奶进行让利销售,每盒让利0.4元.他同样用24元钱比上次多买了2盒.若设他第一次买了x盒,那么可列方程 .

10. 如图4,△ABC中,BP ∶ PC=3 ∶ 4,PE∥AB,PD∥AC,则S△ABC ∶ S▱ADPE=.

11. 如图5,在平面直角坐标系中,已知点A(-3,0),B(0,-4),C(0,1).过C作直线l交x轴于D,使得以D、C、O为顶点的三角形与以A、B、O为顶点的三角形相似,这样的直线一共可以作出条.

12. 一组数据4,7,18,29,1,0,5,2的极差是.

13. 某职业技术学校甲、乙两个班举行电脑汉字输入比赛,参加比赛的学生每分钟输入汉字的个数经统计后填入下表:

表1

某同学根据上表得出如下结论:①甲、乙两班学生成绩的平均水平相同;②乙班优秀(每分钟输入汉字不少于100个为优秀)的人数多于甲班优秀的人数;③甲班的成绩波动比乙班的成绩波动大.上述结论正确的是(只填序号).

14. 如图6,AB∥CD,AF分别交AB、CD于A、C,CE平分∠DCF,∠1=100°,则∠2=.

15. 如图7,AB∥CD,AF交CD于E,若∠CEF=40°,则∠A=.

16. 有位同学验证了几个值就认为n2+3n+1(n为正整数)一定是质数.其实当n= 时,n2+3n+1=就不是质数,因而他的判断是错误的.

三、解答题(17~19题每题8分,20~21题每题9分,22题10分,共52分)

17. 深受海内外关注的沪杭磁悬浮交通项目2006年3月获得国务院批准.沪杭磁悬浮交通线建成后,分为中心城区段与郊区段两部分.其中中心城区段的长度约为70 km,约占全程的40%.沪杭磁悬浮列车的票价预定为每千米0.65元~0.75元,请你估计沪杭磁悬浮列车全程预定票价的范围.

18. 根据图8中所给出的长度,用因式的乘积分别表示图形中阴影部分的面积.

19. 阅读材料:

关于x的方程x+=c+的解是x1=c,x2=;x-=c-(即x+=c+)的解是x1=c,x2=-;x+=c+的解是x1=c,x2=;x+=c+的解是x1=c,x2=……

(1)请观察上述方程与其解的特征,比较关于x的方程x+=c+(m≠0)与它们的关系,猜想它的解是什么.并利用“方程的解”的概念进行验证.

(2)由上述的观察、比较、猜想、验证,可以得出结论:如果方程的左边是未知数与其倒数的倍数的和,方程右边的形式与左边完全相同,只是把其中的未知数换成某个常数,那么这样的方程可以直接求解.

请用这个结论解关于x的方程:x+=a+.

20. 如图9所示,花丛中有一盏路灯AB.在灯光下,小明在D点处的影长DE=3 m.沿BD延长线方向行走到达G点,DG=5 m,这时小明的影长GH=5 m.如果小明的身高为1.7 m,求路灯AB的高度(精确到0.1 m).

21. 某市实验中学王老师随机抽取该校八(4)班男生的身高(单位:cm)数据,整理之后制得如图10所示的频数分布直方图(每组含最低身高,但不含最高身高).

根据这个统计图,解答下列问题:

(1)写出一条你从图中获得的信息;

(2)王老师准备从该班挑选出身高差不多的16名男生参加广播操比赛,他应选择身高在哪个范围内的男生,为什么?

22. 已知AB∥CD,直线MN交AB、CD于E、F,EG、FH分别是∠MEB和∠MFD的平分线.求证:EG∥FH.

证法1:如图11(1)所示, 因AB∥CD且MN交AB、CD于E、F, 故∠MEB=∠MFD.

又∵ EG、FH分别平分∠MEB和∠MFD,

∴ ∠1=∠2.所以EG∥FH(同位角相等,两直线平行).

证法2:如图11(2)所示,延长GE到K.因AB∥CD且MN交AB、CD于E、F, 故∠AEF=∠DFE.

又∵ EG、FH分别平分∠MEB和∠MFD, ∴ EK平分∠AEF.

∴ ∠1=∠2. 所以KG∥FH(内错角相等,两直线平行).即EG∥FH.

篇5:C和C经典笔试题及答案

答案:必须使用静态成员变量在一个类的所有实例间共享数据.如果想限制对静态成员变量的访问,则必须把他们声明成保护型或私有型.不允许使用静态成员变量去存放一个对象的数据。静态成员数据是在这个类的所有对象间共享的。

静态数据成员:静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。节省内存;提高时间效率。使用静态数据成员可以因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,

1、静态数据成员在定义或说明时前面加关键字static。

2、静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下:

<数据类型><类名>::<静态数据成员名>=<值>

这表明:

(1) 初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆。

(2) 初始化时不加该成员的访问权限控制符private,public等。

(3) 初始化时使用作用域运算符来标明它所属类,静态数据成员是类的成员,而不是对象的成员。

3、静态数据成员是静态存储的,它是静态生存期,必须对它进行初始化。

4、引用静态数据成员时,采用如下格式:

<类名>::<静态成员名>

静态数据成员的访问权限允许的话(即public的成员),可在程序中,按上述格式来引用静态数据成员。

下面举一例子,说明静态数据成员的应用:

#include

class Myclass

{

public:

Myclass(int a, int b, int c);

void GetNumber;

void GetSum;

private:

int A, B, C;

static int Sum;

};

int Myclass::Sum = 0;

Myclass::Myclass(int a, int b, int c)

{

A = a;

B = b;

C = c;

Sum += A+B+C;

}

void Myclass::GetNumber

{

cout<<”Number=”<

}

void Myclass::GetSum

{

cout<<”Sum=”<

}

void main

{

Myclass M(3, 7, 10),N(14, 9, 11);

M.GetNumber;

N.GetNumber;

M.GetSum;

N.GetSum;

}

从输出结果可以看到Sum的值对M对象和对N对象都是相等的。这是因为在初始化M对象时,将M对象的三个int型数据成员的值求和后赋给了Sum,于是Sum保存了该值。在初始化N对象时,对将N对象的三个int型数据成员的值求和后又加到Sum已有的值上,于是Sum将保存另后的值。所以,不论是通过对象M还是通过对象N来引用的值都是一样的,即为54。

静态成员函数

静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。因此,对静态成员的引用不需要用对象名。

在静态成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中说明的静态成员。如果静态成员函数中要引用非静态成员时,可通过对象来引用。下面通过例子来说明这一点。

#include

class M

{

public:

M(int a) { A=a; B+=a;}

static void f1(M m);

private:

int A;

static int B;

};

void M::f1(M m)

{

cout<<”A=”<

cout<<”B=”<

}

int M::B=0;

void main

{

M P(5),Q(10);

M::f1(P); file://调用时不用对象名

M::f1(Q);

}

读者可以自行分析其结果。从中可看出,调用静态成员函数使用如下格式:

<类名>::<静态成员函数名>(<参数表>);

2.判断选择

1. C++语言没有可移植性。 B不正确

2. 定义数组时可以不确定元素个数。 B不正确

3. 指针是一种特殊的变量,只能用来保存地址。 A正确

4. 通过引用或者指针调用对象的成员函数时,如果引用或者指针的类型跟对象的类型不一致时,能自动正确调用对象所属的类中对这个函数的定义。 B不正确

5.类myclass,为myclass类对象以成员函数形式重载后++运算符的声明应该为 C myclass operator++( int );

A. myclass operator++;

B. myclass& operator++;

C. D. myclass& operator++( int );

5. 父类和子类各自定义一个成员函数,函数名相同,参数表不同,那么 C子类中的函数会覆盖父类中的函数。 函数同名,通通覆盖,不同层次的函数不能重载

6. 如果myclass类定义了拷贝构造函数和一个整型参数的构造函数,还重载了赋值运算符,那么语句

myclass obj = 100;会 B调用整型参数的构造函数。等价于 myclass obj = myclass(100)

7. 抽象类指的是 D有纯虚函数的类

8. 多重继承时,如果派生类的两个父类有一个共同的虚基类,那么虚基类的初始化参数由 C派生类

的构造函数来传递。

9. 多态性是通过 C虚函数 实现的。

10. 如果有如下语句

char str[20];

cin >> str;

cout << str;

执行时输入的是“this is a test line!”,则输出的内容是 D 。

A. this is a test line!

B. this is a test line

C. this is a test

D. this

11. 执行语句

char ch = “Hello”;

char * p = &ch[0];

cout << p;

结果是输出 C 。Hello

3.以下生面是否正确?

Class A{ const int size=0;};

答案:常量必须在构造函数的初始化列表里面初始化或者将其设置为static

正确的程序如下:

Class A

{ A{ const int size=0; }};

或者:

Class A

篇6:c语言试题及答案

1.在C语言中,下列类型属于构造类型的是(D)A.整型 B.字符型 C.实型 D.数组类型 2.下列字符串不是标识符的是(D)A.sum B.Average C.Day_night D.M.D.JOHN 3.在C语言中,回车换行符是(A)A.n B.t C.v D.b 4.在C语言中,语句和数据定义是用(C)作为结束标记的 A.句号 B.逗号 C.分号 D.括号 5.设有如下定义: int x=10,y=5,z;则语句printf(“%dn”,z=(x+=y,x/y));的输出结果是(C)A.0 B.1 C.3 D.4 6.10.以下程序的输出结果是(B)main(){char c1=’8’,c2=’2’;

printf(“%c,%c,%d,%dn”,c1,c2,c1-c2,c1+c2);} A.因输出格式不合法,输出出错信息 B.8,2,6,106 C.8,2,6,10 D.8,2,5,9 7.两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是(A)main(){int x;scanf(“%d”,&x);

if(x++>5)printf(“%dn”,x);else printf(“%dn”,x--);} A.7和5 B.7和4 C.6和4 8.表达式(int)2.1416的值时(A)A.2 B.2.1 C.0 D.3 9.下列运算符优先级最高的是(B)A.> B.+ C.&& D.!= 10.C语言容许函数值类型缺省定义,此时该函数值隐含的类型时(B)A.float型 B.Int型 C.Long 型 D.Double型

11、C程序的基本构成单位是(C)A、子程序 B、过程 C、函数 D、文件

12、C语言中要求操作数都为整型数据的算术符是(C)A、/ B、!C、% D、= =

13、若int x=1,y=1;则表达式(!x||y--)的值是(B)。A、0 B、1 C、2 D、-1

14、能正确表示逻辑关系:a≥10或a≤0的C语言表达式(D)A、a>=10 or a<=0 B、a>=0|a<=10 C、a>=10 && a<=0 D、a>=10||a<=0

15、double x,y;表达式x=1,y=x+3/2的值是(C)。A、1 B、2 C、2.0 D、2.5

16、运行C源程序的命令是(D)A、ALT+F5 B、ALT+F9 C、CTRL+F5 D、CTRL+F9

17、运行完C程序后,查看C程序运行结果的命令是(A)A、ALT+F5 B、ALT+F9 C、CTRL+F5 D、CTRL+F9 18.若有程序段:int i=2,j;j=i++;printf(“%d,%d”,++i,j);该程序段的输出结果是:(D)A、3,2 B、4,3 C、3,3 D、4,2 19设 int a=12;表达式a+=a-=a*=a的值是(C)。A 12 B 144 C 0 D 132 20、若给定条件表达式(M)?(a++):(a--),则其中表达式M和(D)等价。A M==0 B M=1 C M!=1 D M!=0

21、在C语言中,if语句后的一对圆括号中,用以决定分支流程的表达式为(D)。A 只能是逻辑表达式 B只能是关系表达式

C 只能是逻辑表达式或关系表达式 D可以是任意表达式

22、下列选项中,(A)给变量赋初值是错误的。

A int a=b=3;B int a,b,c=5;C int a=3,b,c=a;D float f=3.56;

23、在C语言中,一个字符变量在内存中占用(A)个字节。A 1 B 2 C 3 D 4

24、int a=12,b=13,c;c=(a

25、设有int i;则表达式i=1,++i,++i||++i,i的值为(C)A.1 B.2 C.3 D.4 30以下程序段中与语句k=a>b?(b>c?1:0):0;功能等价的是(A)A)if((a>b)&&(b>c))k=1;B)if((a>b)||(b>c))k=1 else k=0;C)if(a<=b)k=0;D)if(a>b)k=1;else if(b<=c)k=1;else if(b>c)k=1;else k=0;

31、算法具有五个特性,以下选项中不属于算法特性的是(A)有穷性(B)简洁性(C)可行性(D)确定性 32以下选项中可作为C语言合法常量的是(A)(A)-80.(B)-080(C)-8e1.0(D)-80.0e

33、以下叙述中正确的是(C)

(A)用C语言实现的算法必须要有输入和输出操作(B)用C语言实现的算法可以没有输出但必须要有输入(C)用C程序实现的算法可以没有输入但必须要有输出(D)用C程序实现的算法可以既没有输入也没有输出

33、以下选项中,不能作为合法常量的是(B)(A)1.234e04(B)1.234e0.4(C)1.234e+4(D)1.234e0

34、有以下程序

B)(main(){ int i=1,j=2,k=3;if(i++==1&&(++j==3||k++==3))printf(“%d %d %dn”,i,j,k);} 程序运行后的输出结果是(D)(A)1 2 3(B)2 3 4(C)2 2 3(D)2 3 3

35、判断变量ch中的字符是否为数字字符,正确表达式是____D___。

A)ch>=0&&ch<=9 B)’0’<=ch<=’9’ C)ch>=’0’||ch<=’9’ D)ch>=’0’&&ch<=’9’

36、若执行以下程序时从键盘上输入9,则输出结果是__B_____ A)11 B)10 C)9 D)8 main()

{ int n; scanf(“%d”,&n); if(n++<10)printf(“%dn”,n); else printf(“%dn”,n--); }

37、若w=1,x=2,y=3,z=4;则条件表达式w>x?w:y

38、以下非法的赋值语句是(C)A)n=(i=2,++i);B)j++;C)++(i+1);D)x=j>0;

39、设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是(D)A)6.500000 B)6 C)5.500000 D)6.000000 40、已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为

1、j的值为

2、k的值为3,以下选项中正确的输入语句是(C)A)scanf(“---”,&i,&j,&k);B)scanf(“%d %d %d”,&i,&j,&k);C)scanf(“%d,%d,%d”,&i,&j,&k);D)scanf(“i=%d,j=%d,k=%d”,&i,&j,&k);

41、若有以下程序: main(){ int k=2,i=2,m;m=(k+=i*=k);printf(“%d,%dn”,m,i);} 执行后的输出结果是(C)A)8,6 B)8,3 C)6,4 D)7,4 

42、已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1 && y+z/2的值是(D)A)6 B)0 C)2 D)1

43 以下选项中,与k=n++完全等价的表达式是(A)A)k=n,n=n+1 B)n=n+1,k=n C)k=++n D)k+=n+1

39、若有说明:int i,j=7, *p=&i;,则与i=j;等价的语句是B A)i= *P;B)*P=*&J;C)i=&j;D)i=* *p;40、若有以下说明: int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则数值为6的表达式是C A)*p+6 B)*(p+6)C)*p+=5 D)p+5

二、填空题

1.C语言是通过 库函数 来进行输入和输出的。

2.C语言的数据类型有四大类,他们是 基本类型、构造类型、指针类型和 空类型。

4.下面程序的运行结果是 3.600000,3 main(){float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);} 5.数组名定义规则和变量名相同,遵守 标识符 命名规则。

6、main(){char c1,c2,c3;c2=’c’;c1=c2-1;c3=c2+1;printf(“%c,%d,%cn”,c1,c2,c3);} 程序的运行结果是: b,99,d

7、main(){int a=5,b=6,c;c=a;if(a>b)c=1;else if(a= =b)c=0;else c=-1;printf(“c=%dn”,c);} 程序的运行结果是:-1 11.设x的值为15,n的值为2,则表达式x%=(n+=3)运算后,x的值为 0。12.设 int a=7,b=9,t;执行完表达式t=(a>b)?a:b后,t的值是 9。14.求100~200间的全部素数。# include main(){ int m,k,i,n=0;for(m=101;m<=200;m+=2){ if(n==0)printf(“n”);k=sqrt(m);for(i= 2;i<=k;i++)if(m%i==0)break;if(i== k){ printf(“%d ”,m);n++;} } }

15、main(){ int x,y=1,z=10;if(y!=0)x=5; printf(“x=%dt”,x);x=1;if(z<0)if(y>0)x=3;else x=5;printf(“x=%dn”,x);if(z=y<0)x=3;else if(y==0)x=5;else x=7;printf(“x=%dt”,x);printf(“z=%dn”,z);} 写出程序的运行结果:x=5 x=1 x=7 z=0

16、百马百担问题:有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问大、中、小马各多少匹? main(){ int hb,hm,hl,n=0;for(hb=0;hb<=100;hb+= 3)for(hm=0;hm<=100-hb;hm+= 2){ hl=100-hb-hm;if(hb/3+hm/2+2* hl ==100){ n++;printf(“hb=%d,hm=%d,hl=%dn”,hb/3,hm/2,2*hl);} } printf(“n=%dn”,n);}

17、写出程序运行结果,并简述功能(运行结果5分,功能描述3分,共8分)#include main(){ int i,t;int a[10]={2,4,6,8,10,1,3,5,7,9};for(i=0;i<=4;i++){ t=a[i];a[i]=a[9-i];a[9-i]=t;} for(i=0;i<=9;i++)printf(“%d ”,a[i]);} 运行结果: 7 5 3 1 10 8 6 4 2 功能描述:

将整型数组a以逆序形式显示出来

18、有以下语句段 int n1=10,n2=20;printf(“ n1=%dnn2=%d ”,n1,n2);

要求按以下格式输出n1和n2的值,每个输出行从第一列开始,请填空。n1=10 n2=20

19、有以下程序 main(){ int n=0,m=1,x=2;if(!n)x-=1;if(m)x-=2;if(x)x-=3;printf(“%dn”,x);} 执行后输出结果是-4。

21、.以下程序运行后的输出结果是____ main(){ int a,b,c;a=10;b=20;c=(a%b<1)||(a/b>1);printf(“%d %d %dn”,a,b,c);} 答案:10 20 0

22、任意输入三条边(a,b,c)后,若能构成三角形且为等腰、等边和直角,则分别输出DY、DB和ZJ,若不能构成三角形则输出NO。main(){ float a,b,c,a2,b2,c2 scanf(“%f%f%f%,&a,&b,&c);printf(”%5.1f,%5.1f,%5.1f“,a,b,c);if(a+b>c&&b+c>a&&a+c>b){ if(a==b || b==c || a==c)printf(”DY“);if(a==b && b==c)printf(”DB“);a2=a*a;b2=b*b;c2=c*c;if((a2+b2==c2)||(a2+c2==b2)||(b2+c2==a2))printf(”ZJ“);printf(”n“);} else printf(”NOn“);}

23、当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是___x=2______ if(a

24、以下程序运行后的输出结果是 20,0。 main(){ int x=10,y=20,t=0;if(x==y)t=x;x=y;y=t;printf(“%d,%d n”,x,y);}

三、程序题

1、在购买某物品时,若所花的钱x在下述范围内,所付钱y按对应折扣支付:

x x<1000 0.9x 1000≤x<2000 0.8x 2000≤x<3000 0.7x x.≥3000 y=

2、编一程序根据上网时间计算上网费用,计算方法如下:

费用= 30元基数 <10小时 每小时3元 10 ~50 每小时2.5元 ≥50小时

同时为了鼓励多上网,每月收费最多不超过150元。

3、已知输入某课程的百分制成绩mark,要求显示对应五级制的评定,评定条件如下:

篇7:C笔试题及答案

#include

main

{

int a;float b,c;

scanf(“%2d%3P%4f’,&a,&b,&C);

printf(”na=%d,b=%ec。%fn”,a,b,C);

}

若运行时从键盘上输入9876543210l,则上面程序的输出结果是________。

A)a=98,b=765,c=432 1

B)a=1 0,b=432,c=8765

C)a=98,b=765.000000,c=432 1.000000

D)a=98,b=765.0,c=432 1.0

答案:C

评析:scanf把用户从键盘录入的数字的第1、2位存入整型变量a;把第3、4、5位存入单精度实型变量b,把第6、7、8、9位存入单精度实型变量c,用户录入的第10位被scanf遗弃。这时变量a、b、c的值分别为:98、765.000000、4321.000000。

(2)一个良好的算法由下面的基本结构组成,但不包括__________。

A)顺序结构 B)选择结构 C)循环结构 D)跳转结构

答案:D

评析:1966年,Bohra和Jacopini提出了以下三种基本结构,用这三种基本结构作为表示一个良好算法的基本单元:1、顺序结构;2、选择结构;3、循环结构。

(3)请选出以下程序的输出结果________。

#include

sub(x,y,z)

int x,y,*z:

{*z=y-x;}

main{

int a,b,c;

sub(10,5,&a);sub(7,a,&b);sub(a,b,&C);

printf(”%d,%d,%dn”,a,b,C);

}

A)5,2,3 B)-5,-12,-7 C)-5,-12,-17 D)5,-2,-7

答案:B

评析:sub函数的作用是将形参y和x的差赋给了z指向的那个内存地址,所以在sub(10,5,&a/I,10和5属于值传递,a是属于地址传递,也就是a与z指向了同一个存储单元,在执行函数后,a的值随*z变化,所以此次函数被调用后,a的值为y-x=-5,同理可知,在sub(7,a,&b)后,b的值发生变化,其值为-5-7=-12,在sub(a,b,&C)后,c的值发生变化,其值为-12-(-5)=-7。

(4)下面程序在屏幕上的输出是________。

main

{

printf(”abbb c”);

}

A)abbb c B)a c C)abc D)ab c

答案:B

评析:c语言中允许使用一种特殊形式的字符常量,、就是以一个“”开头的字符序列,这样的字符称为“转义字符”。常用的转义字符有:n,换行;t,水平制表;b,退格;r,回车。

(5)若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是_______。

A)pb=&x; B)pb=x; C)*pb=&x; D)*pb=

答案:A

评析:选项A将变量x的地址赋给指针变量pb,使pb指向x‘选项B是将x的值当作地址赋给指针pb,Db指向一个地址等于x值的内存单元;选项c将x的地址赋给指针pb指向的地址等于x的内存单元。

(6)设整型数i=5,则printf(“%d”,i+++++i);的输出为________。

A)10 B)1l C)12 D)语法错误

答案:D

评析:c语言中有基本的算术运算符(+、-、*、/)还包括自增自减运算符(++、–),在c语言解析表达式时,它总是进行贪婪咀嚼,这样,该表达式就被解析为i++ ++ +i,显然该表达式不合c语言语法。

(7)若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元

int *p;

p=___________malloc(sizeof(im));

则应填入__________。

A)int B)int C)(*int) D)(int*)

答案:D

评析:不论p是指向什么类型的指针变量,都可以通过强制类型转换的方法使之类型一致,强制类型转换的格式为(数据类型+)。

(8)下面程序输出的结果是__________。

main

{

int i=5,J=9,x;

x=(I==j?i:(j=7));

printf(”n%d,%d”,I,J);

}

A)5,7 B)5,5 C)语法错误 D)7,5

答案:A

评析:条件表达式的一般形式为:表达式I?表达式2:表达式3;先求解表达式1,若为真则求解表达式2;若表达式l的值为假,则求解表达式3。本题中先判断i==j,不等,执行j=7;然后执行x=7。故本题为A。

(9)若执行下面程序时从键盘上输入5,

main

{

int x:

scanf(”%d”,&x);

if(x++>5)printf(”%dn”,x);

else printf(”%dn”,x–);

}

则输出是________。

A)7 B)6 C)5 D)4

答案:B

评析:根据c语言的语法,x++是在使用x之后,再将x的值加1,在if语句中,x的值为5,条件不成立,执行else后面的语句,因为x的值已经加1,为6,所以打印结果为6。

(10)若有以下定义和语句:

int a={l,2,3,4,5,6,7,8,9,10},*p=a;

则值为3的表达式是_________。

A)p+=2,*(p++) B)p+=2,*++p

C)p+=3,*p++ D)p+=2,++*p

答案:A

篇8:C语言程序设计的四个要点

在计算机科学技术快速发展,计算机教学内容不断变化的今天,怎样学C语言显然是个老话题了。C语言功能丰富,表达能力强,兼具低级语言特点,可移植性好,关键是广泛的应用,使其早已替代了Fortran、Pascal成为现今主要的教学语言。C语言也是进一步学好C++、C#、Java的必备基础。对初学者来说,由于C语言知识点多,灵活多变,学习起来如不得法,就会很长时间不能通其精要。学好C语言程序设计最主要的是掌握四个要点,即:数据类型、表达式、函数及常用算法。这是通过教学及编程实践,以及分析那层出不穷的试题基础上总结出的一些经验,供读者借鉴和探讨。

2 数据类型

C语言可由基本类型来构造数组及结构体类型,从而也可派生出各种复杂类型。通过类型定义变量来存储不同类别的数据,各种类型可有对应的指针类型,用来处理变量的地址。变量具有特定的存储类别、作用域和生存期。用一种类型定义一个变量要同时这样理解:(1)在内存中分配了特定大小的存储单元,确定了存储方式;(2)限定了变量的取值范围;(3)确定了此变量可进行的运算。

如多数教材中有定义存放一个班学生数据的结构数组,分析时清楚每个结构体成员占多少字节,可具体算一下整个结构数组占多少字节,它们又能进行何种运算,怎样存取成员变量,这些对初学者是很重要的。C语言构造新类型的能力很强,如二叉树结点类型的构造就可体现其简洁精巧之处:

typedef struct aBiTreeNode BTN,*BT;

struct aBiTreeNode{char d;BT lc,rc;};

那么BTN s;BT p;分别定义了一个5字节的树结点,和2字节的结点指针。

3 表达式运算

丰富的运算符和运算对象组成灵活多变的表达式,造就了C语言丰富的表达能力;C语言中的运算符多达40多种,优先级共分了15级,运算对象可以是常量、变量、函数、表达式。学习C语言要把重点放在理解和掌握表达式上,这也是其精华所在,计算机的“计算”在C语言中主要体现在对表达式的计算上;赋值语句和函数调用语句在C语言中也是运算表达式。分析表达式时要考虑运算符所要求的对象、优先级、结合性、运算次序,这几点在分析复杂表达式时都是很重要的。在表达式求值时,先按运算符的优先级别高低顺序执行,如果在一个运算对象两侧的运算符优先级别相同,则按规定的结合方向处理;C语言中有单目和三目运算符,结合方向均为自右至左,双目运算符除赋值运算外都是自左至右。逻辑运算要考虑短路作用,即只要确定了表达式的值就不再进行后面的运算。

赋值类运算表达式还要存储值到“变量”中,C语言中一般只能对简单类型对应的内存区取值、赋值,特殊之处有:(1)数组名作函数参数,(2)串常量赋给指针,等同strcpy)函数,(3)相同结构类型的结构变量之间赋值。

要正确理解表达式中的赋值:(1)赋值即“写内存”,相当于汇编语句MOV,完全不同比较符的等于。(2)因C语言缺乏数据类型的一致性检测机制,赋值号两端要“相容”,如两个字节的整型变量不能完整存放双精度数,指针变量也不能存放其它类型的变量,同时也不要存放指向其它类型的指针。(3)要有“左值”的概念,即赋值号左边一定是可存入值的、代表某块存储空间的变量。(4)对指针变量的赋值,可理解为“指向”,指针变量存有某变量的地址,也就是指针指向这一变量。(5)和赋值号“=”相当的方式还有变量定义时的初始化,函数调用时的实参形参结合,以及“++”、“--”运算符和一系列复合赋值运算符。

初学者都觉得指针和数组是难点,但它还是严格遵循了上述数据类型和表达式运用法则的。只要熟练掌握表达式,其实指针和数组也并不难理解和应用。指针加整数表示以此指针所指元素类型大小为单位的相对位移,取下标运算符“]”也类似,相当于变址再取值。指针是存放地址的变量,数组名是表示整个数组首地址的常量,但也可看作是指向该数组之元素的指针。

指针和数组的定义及运算都可用表达式分析法:(1)考虑运算符的优先级、结合性、运算次序;(2)由类型所决定的运算对象的性质;(3)对于指针的级别或数组的维数,定义时“*”、“[]”使级别升高,运算时“*”、“[]”使级别降低,“&”使级别升高。分析时最好要简单画图表示内存的开辟、存入、取读等状态,明白定义时分配了多大存储空间,以及执行或运算时值的变化。

4 函数调用

C程序由函数组成,实现了程序设计结构化。函数有返回类型,可有若干参数,要注意函数中变量的作用域和生存期。系统提供了大量函数供用户调用来完成复杂功能。理解函数的调用机制要知道计算机的基本组成和工作方式。在冯·诺依曼结构中,程序和数据都是要放入存储器中的。

可这样理解调用函数的过程:(1)把函数代码复制存放于内存;(2)调用指令的地址存放于堆栈;(3)分配形参存储空间;(4)把实参表达式值“赋值”给形参,即传值调用;(5)执行函数体,包括分配局部变量存储空间;(6)结束执行,或遇到return语句开始返回;(7)带上返回值从栈顶取出返回地址返到主调函数;(8)释放被函数代码及变量(除static静态变量)占用的内存。

指针作为函数参数,是传递了地址之值,相当于实现传址调用,在C语言中没有真正的传址调用,在C++中可用引用“&”实现。函数名也类似数组名,代表函数的起始地址或称入口地址;也可定义指向函数的指针实现间接调用,或把一个函数传递给另一个函数使用;当然函数指针是不能进行诸如++等运算的,其所指对象是不能确定存储空间大小的,这不同于数组。“()”也可看作是函数调用运算符,可用上述分析表达式的方式理解函数指针的定义和使用,如定义in*f()时,因()的优先级高于*,则f是一函数,返回类型是整型指针,定义int(*p)()中p先和*结合,则p是指针,是可指向整型函数的“函数指针”。

递归函数的特点是有自己调用到自己的部分和满足某个条件时结束并返回的部分。处理某些问题时使用递归可不用复杂的循环,使程序简化,但分析时还是要按上述函数调用机制来套用,机器的执行过程不会简化。

5 常用算法

算法设计的主要工作是分析问题、编写语句,实现问题空间向程序空间的映射转换,也就是把我们用自然语言描述的解决问题的方法翻译成计算机语言让机器来运算。为提高编程能力,设计出较好的算法,可按以下几点来学习。

初学算法设计时不但要考虑算法的正确性,也要遵循简洁可读、有效性等原则,可靠的算法一定是简洁的。不要只顾暂时解决问题,而忽略对设计一个好算法的追求,否则既不能发挥C语言的简洁性,也很难提高编程能力。

要学习和记住一些常用的算法,诸如需选择和循环结合的计算问题(如求素数、最小公倍数)、数列或级数的迭代处理、多维数组处理、字符串处理、查找排序、某些递归算法等。

对于算法的设计和实现可按以下几个步骤进行:(1)理解题意,把问题分析清楚;(2)考虑人工怎样解决,理清思路,有的问题一看就知道答案,却不知怎样写语句,其实在这一看之中,我们的大脑也是一步步地进行了运算;(3)再进行思路的细化,按电脑机械式分步计算或处理问题,多数问题可找出有规律的部分,用循环结构完成;(4)确定数据结构,即定义变量,分配存储空间,写流程轮廓;(5)进一步细化写出代码,并注意变量的命名和程序的格式;(6)上机调试,找出错误。这一步对初学者也不易,关键要锻炼“调试心理素质”,调试自己编写的代码时要能在自信的创作思维和批评性的自我怀疑之间反复“平和”转换;(7)进一步完善和优化,追求一个好的算法,好的算法应该有简洁性、可读性、节约存储空间及运算时间等特性。

6 结语

对于C语言其它知识,如控制流语句、常用输入输出等系统函数的学习,只是一个不断熟悉的过程。通过读程序和一些练习,多数是容易掌握的,如不能理解和运用好,只通过近乎死记硬背的方法很难掌握C语言的精华,学习C语言是有原则可遵循的。掌握好这四个要点,也有助于学好数据结构、C++或Java等后续课程。

参考文献

[1]谭浩强.C语言程序设计.第二版,清华大学出版社,1999.

[2]郭陵之.C语言基础教程[M].云南大学出版社,1995.

上一篇:三福百货促销计划下一篇:老家春节作文600字