C语言上机考试题库解析:找中间数与构建特殊矩阵

需积分: 10 0 下载量 184 浏览量 更新于2024-07-30 收藏 611KB DOC 举报
"这份资源包含了二级C语言上机考试的50套题目,主要涵盖程序填空题,目的是帮助考生复习和准备上机考试。题目旨在训练考生在给定的9个正整数中找到升序排列的中间数并进行数据序列的调整,以及创建特定模式的N×N矩阵。" 第一部分:程序填空题 在这个问题中,我们需要完善一个函数`fun`,其功能是在9个正整数中找到中间数,并用中间数替换小于它的所有元素。首先,我们看到一个二分查找的过程,用于找到最小值并将其与第一个元素交换。然后,函数定义了一个变量`mid`来存储中间数,最后遍历数组,将所有小于`mid`的元素替换为`mid`。 1. 在第一个`found`标记处,我们需要将当前最小值(`b[j]`)存储到`t`中,以便之后的交换操作。所以,这里应该填写`b[j]`。 2. 在第二个`found`标记处,我们需要找到数组`b`的中间索引,因为我们要返回中间值。对于奇数大小的数组,中间值是`N / 2`,所以这里应填写`N/2`。 3. 在第三个`found`标记处,我们需要检查`x[i]`是否小于`mid`。因此,这里应填写`<`,使得语句为`if(x[i] < mid)`。 完整的`fun`函数应该如下所示: ```c int fun(int x[]) { int i, j, k, t, mid, b[N]; for (i = 0; i < N; i++) b[i] = x[i]; for (i = 0; i <= N / 2; i++) { k = i; for (j = i + 1; j < N; j++) if (b[k] > b[j]) k = j; if (k != i) { t = b[i]; b[i] = b[j]; b[k] = t; } } mid = b[N / 2]; for (i = 0; i < N; i++) { if (x[i] < mid) x[i] = mid; } return mid; } ``` 第二部分:创建特定模式的N×N矩阵 这个题目要求创建一个N×N的矩阵,其中最外层元素为1,次外层为2,以此类推。我们需要注意,这个模式是环状的,最后一行和第一行,最后一列和第一列是连续的。 ```c void fun(int (*a)[N]) { int i, j; for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { // 计算元素的相对层数 int layer = abs(i - N / 2) + abs(j - N / 2) + 1; a[i][j] = layer; } } } ``` 这个`fun`函数使用两个嵌套循环遍历矩阵的每个元素,计算其相对于中心的层数,并将该层数赋值给对应的元素。 通过解决这两个问题,考生可以熟悉C语言的基本操作,如数组、条件判断、循环和函数调用,这对于二级C语言上机考试至关重要。