C语言51-100套试题答案及详解_第1页
C语言51-100套试题答案及详解_第2页
C语言51-100套试题答案及详解_第3页
免费预览已结束,剩余17页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、c语言51-100套试题答案及详解 第 51套试题答案及详解 一、程序填空题 【答案】 难度指数 (3)i+1 (1)*a (2)2 【审题分析】 本题中函数的功能是将数组中的元素下标为偶数的元 素按照从大到小排序,下标为奇数的元素按照从小到大排 序,相当于 2个排序过程。在 fun函数中,采用选择排序 法进行排序,分别用 max和 min存储每次寻找的最大值和 最小值,px和 pn记录每次查找到的最大值和最小值的下 标位置。 【解题思路】 第一空:主函数内 fun函数的调用“fun(b, n);”,其中 b 为整型数组名,故 fun函数的第一参数为整型指针,又根据 “max=aj”可知第一个

2、参数名为 a,故第一空处为“*a”。 第二空:根据题意 a所指数组中的最大值放在 a0中, 接着求出 a所指数组中的最小值放在 a1中;再把 a所指数 组元素中的次大值放在 a2中,把 a数组元素中的次小值放 在 a3中,升序排序和降序排序的下标变化是每次在前一次 的基础上+2,即 a0、a2、a4降序排序,a1、a3、 a5升序排序,故第二空应为“2”。 第三空:选择排序法中的升序排序,首先从数组中挑选 一个最小的元素,把它和第一元素交换,接着从剩下的 n-1 个元素中再挑出一个最小的元素,把它和第二个元素交换, 不断重复以上过程,直到比较完最后两个元素。故内层循环 变量 j应该从 i+1开

3、始,因此第三空处应为“i+1”。 【考点链接】数组;循环结构。 double ave=0.0; *n=0; for(i=0; iif(ai.s9 (*n)+; /*人数加 1 */ 10 11 return ave; /*返回平均值 */ 【审题分析】 该程序功能是把低于平均分的学生数据放在 b所指的 数组中,低于平均分的学生人数通过形参 n传回,平均分通 过函数值返回。 【解题思路】 (1)首先,通过循环求总分,然后求得平均分。 (2)在循环中,进行平均分与每个成绩进行比较,并将 满足条件的数据存入数组及对其进行累加。 【考点链接】数组操作;结构体。 2 3 4 5 6 7 第 52套试题答

4、案及详解 一、程序填空题 【答案】 难度指数 (1)n/2 (2)i (3)an-i-1 【审题分析】 本题中函数 fun的功能是将数组中的元素倒置,即第一 个元素和最后一个元素交换,第二个元素和倒数第二个元素 交换,依此类推,总共交换 n/2次,n为数组的长度。 【解题思路】 第一空:由审题分析可知,总共交换 n/2次,故循环的 终止条件为 i等于 n/2,故第一空处应为“n/2”。 第二空:a0和 an-1交换,a1和 an-2交换,因此 ai和 an-i-1交换,故第二空处应为“i”。 第三空:“t=ai; ai=an-1-i;”所以第三空处是把 t值 赋值 an-1-i,故第三空处应为

5、“an-1-i”。 【考点链接】函数逻辑;数组操作。 二、程序修改题 【答案】 难度指数 (1)sum=0.0; (2)if(i+1)%5=0) 【审题分析】 本题函数的功能是对每五个元素求一个平均值。首先要 依顺序读取每五个元素,并对这五个元素取平均值。 【解题思路】 (1)在第一标识下“sun=0.0;”,根据题意,这是给 sum 赋值,而 sun没有定义编译时会提示错误,应改为 “sum=0.0;”。 (2)错误标识下的 if判断语句是依顺序取五个字符,if 中的逻辑表达式语法有误,由于 1%5恒等于 1,所以 i+1%5 也就等价于 i+1了,所以将“if(i+1%5=0)”改为“if

6、(i+1)%5= 0)”,此处主要注意的是运算符的优先级。 【考点链接】if条件语句。 二、程序修改题 【答案】 难度指数 (1)n=*p-0; (2)n=n*8+*p-0; 【审题分析】 (1)该题中函数功能是实现八进制到十进制的转换。其 中,八进制与十进制之间的转换关系是:八进制就是逢 8 进 1。八进制数采用 07这 8个数来表达一个数。八进制 数第 1位的权值为 8的 0次方,第 2位权值为 8的 1次方, 第 3位权值为 8的 2次方,等等。 (2)从已给定源程序的 main主函数开始入手,首先通 过 if语句判断串是否过长,是否符合题干要求;然后循环 判断串中的每一位是否都在 07

7、之间,是否符合八进制要 求,最后调用 fun(s)实现八进制到十进制的转换。 三、程序设计题 【答案】 1 int i; 难度指数 1 【解题思路】 (1)第一个标识下面:语句“n=*p-o;”中的o不是数 因此第二空处为“k”。 第三空:此处是将字符串长度不超过 k的字符串 ssi 拷贝到 ssj+中,故第三空处为“ssi”。 【考点链接】函数功能;指针。 字零,而是字母o,根据前面的分析因此改为:“n=*p-0;”。 (2)第二个标识下面:语句“n=n*8+*p-o”,首先进行 同(1)相同的修改,变量 p没有定义,根据题意要求这里 应该是“*p-0”,所以此句改为:“n=n*8+*p-0

8、;”。 【考点链接】字符;数制。 二、程序修改题 【答案】 难度指数 (1)int k=0; (2)while(*p|*q) 【审题分析】 该程序功能是逐个比较两数组对应字符的 ascii值大 小。从已给定源程序的 main主函数开始入手,调用函数 “fun(a,b,c);”,对字符串 a、b进行比较,生成字符串 c。 【解题思路】 (1)第一个标识下面的“int k=1;”在题目中要求将字 符放在数组 c,如果数组中有 n个元素,应该从 c0到 cn-1。 所以,应将 k的初始化定义改为从 0开始,即“int k=0;”。 (2)第二个标识下面的判断条件,是根据题目要求逐个 比较两个数组对应

9、字符的 ascii值的大小,所以判断条件 应该是直到两个字符数组所有元素比较完毕,而不是数组对 应元素不相等。 其中,该题主要考查变量的初始化,逻辑关系。 【考点链接】函数逻辑。 三、程序设计题 【答案】难度指数 1 strec c; 2 int i; 3 c.num0=0; /*置初始空串 */ 4 c.s=-1; /*置成绩为-1 */ 5 for(i=0; i6 if(strcmp(ai.num, b)=0) /*判 断学号是否相等 */ 7 strcpy(c.num, ai.num); /*相 等,则对学号进行赋值 */ 8 c.s=ai.s; /*相等,则对成绩进行 赋值 */ 9

10、break; /*退出循环体 */ 10 11 return c; /*返回结构体变量 */ 【审题分析】 该程序功能是函数返回指定学号的学生数据,指定的学 号在主函数中输入。解题思路是在循环过程中,使用 if判 断表达式,将输入的学号与所有的学号进行比较,如果找到 该学号,将其赋值到指定变量,否则将空格赋值到指定变量, 表明没有查找到该学号。 【解题思路】 在 for循环中,利用 c语言自带字符串比较函数 strcmp, 对输入的学号与所有的学号进行比较,以求出指定学号。 【考点链接】结构体;函数传值。 三、程序设计题 【答案】 难度指数 1 int i=0; 2 char *p=a; 3

11、while(*p 6 i+; 7 p+; 8 9 while(*p) 10 11 if(*p!=*) 12 13 ai=*p; 14 i+; 15 16 p+; 17 18 ai=0; 【审题分析】 该程序功能是除了字符串前导的“*”号之外,将串中 其他“*”号全部删除。本题的解题过程首先确定由串起始 位置开始的第一个非“*”位置,然后对由第一个非“*”开 始的字符到串尾的字符进行判断,如果不是“*”的字符拷 贝到字符串。 【解题思路】 (1)首先,使用一个指针 p指向串的起始位置,然后对 指针 p指向的字符进行判断,并且如果是“*”,将其拷贝到 字符串,这样确定了由头开始的第一个非“*”的位

12、置。 (2)然后,在循环过程中对由第一个非“*”字符起始 第 53套试题答案及详解 一、程序填空题 【答案】 难度指数 (1)n (2)k (3)ssi 【审题分析】 本题中函数 fun的功能是在形参 ss所指字符串数组中, 删除所有串长超过 k的字符串,函数返回所剩字符串的个 数。 【解题思路】 第一空:“ for(i=0; i第二空:“ if(len 2 到串尾的字符进行判断,如果不是“*”就将其拷贝到字符 串 a,否则跳过。 (3)最后,在新生成的字符串尾加0。 【考点链接】指针操作。 5 p+; 6 7 aj=0; 【审题分析】 第 54套试题答案及详解 一、程序填空题 【答案】 难度

13、指数 (1)1 (2)j+ (3)j 【审题分析】 函数 fun的功能是把形参 a所指数组中的奇数按原顺序 依次存放到 a中,把偶数从数组中删除,奇数和偶数的判断 可用取余的方法来实现,ai%2等于 0那么 ai是偶数,否 则是奇数。 【解题思路】 第一空:根据“aj=ai;”可知,ai是奇数,变量 j记 录奇数的个数,故第一空处是判断 ai是否是奇数,故第一 空处应为“1”。 第二空:变量 j记录奇数的个数,故第二空处 j计数应 当加 1,因此第二空处应为“j+”或“j=j+1”。 第三空:fun函数的返回值是奇数个数,故第三空处应 为“j”。 【考点链接】函数逻辑。 该程序功能是删除字符串

14、中所有的*号。解题思路是在 while循环过程中,利用 if判断表达式判断每一个字符是否 为“*”号,如果不是将其拷贝到字符串,否则跳过,这样 就实现了函数功能。 【解题思路】 (1)首先利用工作指针指向字符串,当指针不指向串尾 时,就对字符串进行循环判断。 (2)在循环中利用 if判断表达式,判断是字符是否为 “*”,如果不是“*”将其拷贝到字符串,否则跳过“*” 字符。 (3)所有字符处理完后,记得在新串 s的末尾加上结束 符“0”。 【考点链接】指针操作。 第 55套试题答案及详解 一、程序填空题 【答案】难度指数 (1)j=3(2)i(3)j 【审题分析】 函数 fun的功能是统计所有

15、小于等于 n(n2)的素数的个 数,素数的个数作为函数值返回,判断一个整数 n是否是素 数。素数是指能被 1和本身整除的正整数(1),所以判别 n是否为素数,只要用 2、3、n-1这些数逐个去除 n, 观察余数是否为 0即可,只要有一次相除余数为 0,n就不 是素数,否则 n为素数。 【解题思路】 第一空:n2,由“printf(to %dn”可知,从 3开始寻找素数,故第一空处应为 “j=3”。 第二空:由审题分析可知,判断 i是否是素数用 2、3、 i-1这些数逐个去除 i即可,故第二空处应为“i”。 第三空:由“count+; printf( count? i);”可知找到一个素数 i了

16、,在 i是素数的时候,变量 j从 2 到 i-1都不能被 i整除,退出 for循环的是 j的值已经变成 i 了,故判断 j是否大于等于 i便可知 i是不是素数,所以第 三空应为“j”。 【考点链接】函数功能。 二、程序修改题 【答案】难度指数 (1)t=a;a=b;b=t;(2)return(b); 【审题分析】 (1)本题中函数的功能是求出两个非零正整数的最大公 约数。其中,最大公约数是指能最大约去给出的几个数字的 数字,例如 15和 30能最大约去的数字是 15,所以 15就是 它们的最大公约数。 (2)从源程序的 main主函数开始入手,通过键盘输入 两个正整数,语句“a=fun(num

17、1,num2);”调用 fun函数求得 它们的最大公约数。 【解题思路】 (1)根据算法分析,首先要确保 a、b两个数中 a是较 大数,b是较小数,如果不是,则交换 a和 b。但是第一个 标识下,交换 a和 b两个数的算法有误,所以应将“t=a; b=a; a=t;”改为“t=a;a=b;b=t;”。 (2)算法到循环结束,最后余数为 0的时候,b中所存 的数即为最大公约数,也就是函数要返回的值。因此,第二 个标识下面的“return (a);”改为“return (b);”。 【考点链接】函数实现的逻辑关系。 二、程序修改题 【答案】难度指数 (1)sum=0;j=0;(2)if(sum%4

18、=2) 【审题分析】 本题中函数的功能是计算前 n(4(1)根据题意第一标识下“sum=j=0;”是给 sum和 j 三、程序设计题 【答案】难度指数 1 int j=0; 2 char *p=a; 3 while(*p) 4 if(*p !=*)aj+=*p; 3 赋初值 0,故应改成“sum=0;j=0;”。 (2)第二个标识下的 if语句是根据题干要求,累加和 被 4除后余 2,而原题是将 2赋值给 sum%4。所以,第二个 标识下“if(sum%4=2)”应该改为“if(sum%4=2)”。 【考点链接】变量初始化;if条件语句;逻辑表达式。 【审题分析】 本题中函数的功能是用递归算法

19、计算斐波拉契级数数 三、程序设计题 【答案】难度指数 1 int i; 2 double sum=0.0; 3 if (n1 i5 sum+=1.0/(2*i-1)-1.0/(2*i); 6 7 return sum; 【审题分析】 该程序功能是计算并输出多项式值。根据题干中给出的 数列,首先推出每一项的表达式,然后再对多项式进行累加 求和。 【解题思路】 (1)根据题干中给出的数列,推出每一项是(1.0/(2*i- 1)-1.0/(2*i)。 (2)在循环中求得每一项,然后对其进行累加求和。 【考点链接】逻辑关系;运算符。 列中第 n项的值。本题主要是对于 switch - case语法的介

20、绍。 【解题思路】 (1)第一个标识下的 switch后用括号括起来的表达式 的标准语法后面是没有“;”的,所以“switch(g);”应该改 为“switch(g)”。 (2)第二个标识下的 case加常量表达式的后面用冒号 连接选择语句,所以“case 1;”改为“case 1:”。“case 1:” 和“case 2:”都是返回 1,应该写两个“return 1”。 【考点链接】switch分支语句。 三、程序设计题 【答案】难度指数 1 int i; 2 for(i=0; i3 a-ave=a-ave+a-si; 4 a-ave /=n; 【审题分析】 该程序功能是计算结构体中某一成员

21、的平均值。这类题 主要考查是对结构体的操作,关于平均分数的求解过程首先 统计成员的总分,然后计算平均分。 【解题思路】 (1)本题中给出的题干中定义了结构体变量 strec用 来存储学生的记录。 (2)利用 for循环求得总分,然后求得平均分,最后将 平均分放入记录 ave中。其中,结构体成员的引用形式可以 为 a.ave、a.si等。 【考点链接】结构体;for循环。 第 56套试题答案及详解 一、程序填空题 【答案】 难度指数 (1)ai (2)aj (3)aj 【审题分析】 本题中函数的功能是将数组中的元素下标位置为偶数 的元素按照从小到大排序,下标为奇数位置的元素按照从大 到小排序,相

22、当于 2个排序过程。在 fun函数中,采用选择 排序法进行排序,分别用 max和 min存储每次寻找的最大 值和最小值,px和 pn记录每次查找到的最大值和最小值的 下标位置。 【解题思路】 第一空:根据“max=min=_1_; px=pn=i;”可知, px和 pn初始化为 i,max和 min初始化为 ai,假定第一个 元素为最大值、最小值,然后逐个和其他的元素比较找出最 大值和最小值,因此第一空应为“ai”。 第二空:根据“max=aj; px=j;”可知,max保存了 aj 的值,说明 max比元素 aj小,故第二空处应为“aj”。 第三空:根据“min=aj; pn=j;”可知,m

23、in保存了 aj 的值,说明 min比元素 aj大,故第三空处应为“aj”。 【考点链接】数组;循环结构。 第 57套试题答案及详解 一、程序填空题 【答案】 难度指数 (1)filename (2)fp (3)fp 【审题分析】 本题中函数 fun的功能是重写形参 filename所指文件中 最后一个学生的数据,即用新的学生数据覆盖该学生原来的 数据,本题主要考察文件的读写。 【解题思路】 第一空:“fp=fopen(_1_, ”补充 fopen的参数, fopen的调用形式是:fp=fopen(文件名,文件使用方式),因 此第一空处应填文件名“filename”。 第二空:此处是补充 fs

24、eek函数的参数,fseek的调用形 式是:fseek(fp, offset, position),其中第一个参数是文件型指 针,故第二空处应填文件型指针变量“fp”。 第三空:fwrite的调用形式是(buffer,size,count,fp),最后 一个参数是文件型指针,故第三空处应填“fp”,将新的学 生数据写在最后一个学生数据位置。 【考点链接】结构图;文件操作。 二、程序修改题 【答案】 难度指数 (1)switch(g) (2)case 1: return 1; case 2:return 1; 4 二、程序修改题 【答案】难度指数 (1)p=(node *)malloc(size

25、of(node); (2)return h; 【审题分析】 该题中函数功能是创建带头结点的单向链表。从已给定 源程序的 main主函数开始入手,首先通过“ head= creatlink(8,22);”语句调用 creatlink函数生成单向链表,然 后“outlink(head);”输出该链表。 【解题思路】 (1)第一标识下“p=(node )malloc(sizeof(node);”, maclloc函数的返回类型是 void*类型,表示未确定类型的指 针,因此需要指针类型转换,而“(node )”不是指针类型, 故第一标识下应改成“p=(node *)malloc(sizeof(nod

26、e);”。 (2)第二个标识下,最后将单链表返回,应该是返回头 指针 h指向的链表,而不是其中的一个节点 p,所以“return p;”应该改为“return h;”。 【考点链接】函数功能。 【解题思路】 第一空:由“return sum;”可知 sum变量记录了主对角 线元素和反向对角线元素之和,第一空处是在使用 sum变 量之前对其初始化,因此第一空处应为“sum=0;” 第二空:由第二个循环内“sum+=tin-i-_3_;”可 知,第一个循环是主对角元素和,第二个循环求反向对角线 元素之和,因此第二空处应为“tii”。 第三空:第二个循环求反向对角线元素之和,反向对角 元素为 tin-i-1,故第三空应为“1”。 【考点链接】数组;逻辑关系。 二、程序修改题 【答案】 难度指数 (1)double r; (2)while(fabs(n-m)0.001) 【审题分析】 (1)该题中函数功能是二分法求方程根。其中,二分法 的求根过程,是将含根区间平均分为两个小区间,然后判断 哪个区间是含根区间。在此基础上,将这里的小含根区间进 一步划分为两个更小的区间,继续判断根所在区间。继续细 分下去,含根区间将划分地越来越小,区间的范围也越来越 小。经过多次细分后,就可以将此很小区间的中点近似为方 程的根了。 (2)从已给定源程序的 main主函数开始入手,通过

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论