计算机二级C语言操作题高频考卷二
一、程序填空题 1 [填空题] 给定程序中,函数 fun 的功能是:将形参s 所指字符串中的数字字符转换成对应的 数值,计算出这些数值的累加和作为函数值返回。 例如,形参 s 所指的字符串为 abs5def126jkm8,程序执行后的输出结果为 22。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1.C 中。 不得增行或删行,也不得更改程序的结构! 试题程序: 【参考答案】 【解题思路】 本题是把字符串中是数字字符转换成对应的数值并进行累加。 填空 1: 0 字符对应的 ASCII 码值是 48,因此数字字符转换成对应数值时只要减 去 48,即是该数字字符对应的数值,所以应填48 或者 0 。 填空 2:判断完一个字符之后,将字符串指针移到下一个位置,所以应填s++。 填空 3:返回累加和 sum,所以应填 sum。 二、程序修改题 2 [简答题] 给定程序 MODII.C 中,函数 fun 的功能是:判断输入的任何一个正整数n,是否等 于某个连续正整数序列之和。若是,则输出所有可能的序列,否则输出“不能分解”。 例如:当输入 100 时,输出: 100=9+10+11+12+13+14+15+16 100=18+19+20+21+22 请改正函数 fun 中指定部位的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 试题程序: 【参考答案】 【解题思路】 (1)每次循环, 程序需要对 n 执行减去连续的正整数序列来判断n 是否刚好为 0, 即 n 是否是连续的正整数序列之和,所以需要使用临时变量m 寄存 n 的值,每次循环对 m 执行减运算操作,不满足继续下一轮。另外,程序声明变量m 时,未初始化它的值,所 以此处应该修改为:m=n。 (2)语法错误。C 语言中每个语句必须以分号结束,所以应修改为:m=m-c;c++;。 (3)题目判断 n 是否是连续的正整数序列之和,若是,则输出所有序列,程序中m 依次减去连续的正整数,当 m 为 0 时,表示 m(即 n)满足条件,再输出当前序列中的每 个正整数,所以此处判断条件反了,应修改为:if(m==0)。 三. 程序设计题 3 [简答题] 请编写函数 fun,其功能是:将 M 行 N 列的二维数组中的字符数据,按列的顺序依 次放到一个字符串中。 例如,若二维数组中的数据为 则字符串中的内容应是:WSHWSHWSHWSH。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你 编写的若干语句。 试题程序: 【参考答案】 【解题思路】 看到程序后,很容易便能想到用循环嵌套的方法,本题中按列的顺序依次放到一个 字符串中,所以列标变化慢,行标变化快。 注意:第 1 个循环条件为 i 一、程序填空题 1 [填空题] 函数 fun 的功能是:将一副扑克牌编号为1,2,3,…,53,54,以某种特定的方式洗 牌,这种方式是将这副牌分成两半,然后将它们交叉,并始终保持编号为1 的牌在最上方, 如第一次这样洗牌后的结果为:1,28,2,29,…,53,27,54。两次洗牌后的结果为:1, 41,28,15,2,42…,53,40,27,14,54。 程序的功能是:输出经过n 次这样洗牌后的结果。 请在程序的下画线处填入正确的内容,并把下画线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C 中。不得增行或删行,也不得更改程序 的结构! 试题程序: 参考解析: 【参考答案】 (1)b (2)2 (3)b[k] 【解题思路】 填空 1:for 循环中使用了一个数组b.用来临时存放交换位置后的扑克牌,C 语言中变 量需要先声明后使甩,所以填空(1)处需要声明一个数组 b。答案为 b。 填空 2:第二个 for 循环是将数组 a 中前一半元素(即 1~27 编号的扑克牌)放人数组 b 的奇数位置,将数组 a 中的后一半元素(即 28~54 编号的扑克牌)放人数组 b 的偶数位置, 实现扑克牌的交叉洗牌。所以填空(2)处是数组 b 的起始值为 2 的偶数下标 2k,答案为 2。 填空 3: 由于数组 b 属于函数中的临时变量, 所以将数组 a 的元素交叉存储到数组b 后, 还需要将数组 b 的元素依次赋值给数组 a, 第三个 for 循环实现的功能是将数组b 赋值给数 组 a,所以填空(3)处需要填入对应下标为k 的数组 b 的元素,答案为 b[k]。 二、程序修改题 2 [简答题] 下列给定程序中,函数 fun 的功能是:依次取出字符串中所有的数字字符, 形成新的字 符串,并取代原字符串。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: 参考解析: 【参考答案】 【解题思路】 题目要求依次取出字符串中所有的数字字符, 因此将元素 S[i]存入 s[j]后要使 j 加 1, 为下次存储做准备。s[j]=“\0”;是一个语法错误。 三. 程序设计题 3 [简答题] 学生记录由学号和成绩组成,N 名学生的数据已放入主函数中的结构体数组中,请编写 函数 fun,其功能是:把分数最低的学生数据放入b 所指的数组中,注意:分数最低的学生 可能不止一个,函数返回分数最低的学生人数。 注意:部分源程序在文件PROG1.C 中。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编写 的若干语句。 参考解析: 【参考答案】 【考点分析】 本题考查:查找结构体数组中的最小数据,需要通过for 循环语句和 if 条件语句来完 成。 【解题思路】 本题中第一个循环语句的作用是遍历数组求出最低分数, 第二个循环语句的作用是将数 组中的元素与最低分比较,查找是否存在与最低分相等的成绩。 一、程序填空题 1 [填空题] 给定程序中,函数 tim 的作用是:不断从终端读入整数,由变量a 统计大于 0 的个数, 用变量 c 来统计小于 0 的个数, 当输入 0 时结束输入, 并通过形参 pa 和 pb 把统计的数据传 回主函数进行输出。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:源程序存放在BLANK1.C 中。不得增行或删行,也不得更改程序的结构! 试题程序: 参考解析: 【参考答案】 (1)a=0,b=0,k (2)(k1.0) (3)scanf( “%d”,而字符串:uvxwyz 不满足要求。 注意: 部分源程序存放在 PROG1.C 中, 请勿改动主函数 main 和其他函数中的任何内容, 仅在函数 fun 指定的部位填入所编写的若干语句。 试题程序: 参考解析: 【参考答案】 【解题思路】 函数 fun 的功能是判断指针 t 指向的字符串是否是由连续递增的字母构成, 返回值为整 数,0 代表不满足条件。根据题目要求,字符串长度必须大于等于2,所以首先需要对 t 指 向的字符串进行长度判断,小于2 的字符串返回 0。接着需要对字符串中的连续字符,逐个