mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6mobile wallpaper 7
923 字
2 分钟
考试套题-第八套
2026-06-15

C 语言考试套题 - 第八套#

本套题包含填空题、改错题、程序设计题三个部分,涵盖数组插入、数学函数计算、指针交换等核心考点。


一、填空题:数组指定位置插入元素#

题目说明#

题目:在数组内指定位置 i 插入元素 x

解题思路#

数组插入操作的核心是”先移动、后插入”:

  1. 数组原有 10 个元素,预留 1 个位置共 11 个空间
  2. 从最后一个元素开始,将下标 i 及之后的元素整体后移一位
  3. 移动方向必须从后向前(j 从 9 递减到 i),否则从前向后移动会覆盖尚未移动的元素
  4. 移动完成后,在位置 i 处放入新元素 x

完整代码#

#include <stdio.h>
void main()
{
int a[11], i, j, x;
/* 读取10个元素存入a[0]~a[9] */
for (i = 0; i < 10; i++)
scanf("%d", &a[i]);
/* 读取插入位置i和插入值x */
scanf("%d%d", &i, &x);
/* 填空1:从后向前移动,j从9递减到i */
for (j = 9; j >= i; j--)
/* 填空2:元素后移一位,a[j]搬到a[j+1] */
a[j + 1] = a[j];
/* 在位置i放入新元素x */
a[i] = x;
/* 输出插入后的11个元素 */
for (i = 0; i < 11; i++)
printf("%d ", a[i]);
}

关键考点#

  • 数组插入算法:插入前需腾出位置,插入后元素个数加 1
  • 移动方向:必须从后向前移动,避免覆盖未处理的数据
  • 数组容量预留a[11] 比 10 个元素多 1 个空间,保证插入不越界
  • 下标控制for (j = 9; j >= i; j--) 确保下标 i 到 9 的元素全部后移

二、改错题:求平方和的平方根#

题目说明#

功能:输入两个双精度数,函数返回它们的平方和的平方根值。

例如:输入:22.936 和 14.121,输出为:y = 26.934415。

错误分析与修正#

该程序有三处 FOUND 标记:

错误 1:函数返回类型错误

  • 原错误写法:int fun(double* a, double* b)void fun(...)
  • 修正写法:double fun(double* a, double* b)
  • 错误原因:计算结果是双精度浮点数,返回类型必须为 double,否则精度丢失或无法返回正确值。

错误 2:指针解引用错误

  • 原错误写法:c = sqrt(a * a + b * b);(直接用指针参与运算)
  • 修正写法:c = sqrt((*a) * (*a) + (*b) * (*b));
  • 错误原因:abdouble* 指针,必须用 *a*b 解引用才能取到实际数值。直接用指针参与运算得到的是地址的运算,结果毫无意义。

错误 3:缺少返回语句

  • 原错误写法:缺少 return c;
  • 修正写法:return c;
  • 错误原因:函数声明返回 double,必须有 return 语句将结果返回给调用者。

完整代码#

#include <stdio.h>
#include <conio.h>
#include <math.h>
/* 修正1:返回类型应为double */
double fun(double* a, double* b)
{
double c;
/* 修正2:用*a和*b解引用取值,再计算平方和的平方根 */
c = sqrt((*a) * (*a) + (*b) * (*b));
/* 修正3:必须返回计算结果c */
return c;
}
main()
{
double a, b, y;
printf("Enter a, b : ");
scanf("%lf%lf", &a, &b);
y = fun(&a, &b);
printf("y = %f \n", y);
}

关键考点#

  • 指针解引用*a 取指针指向的值,a 是地址,二者不可混用
  • sqrt 数学函数<math.h> 中的平方根函数,参数和返回值均为 double
  • 函数返回类型:返回值的类型必须与函数声明一致
  • double%lfdouble 类型输入用 %lf,输出用 %f

三、程序设计题:交换两个整数#

题目说明#

功能:实现两个整数的交换。

例如:给 ab 分别输入:60 和 65,输出为:a=65 b=60。

解题思路#

交换两个变量的值需要借助第三个临时变量:

  1. 定义临时变量 temp
  2. temp = *a:暂存 a 的原值
  3. *a = *b:把 b 的值赋给 a
  4. *b = temp:把暂存的原 a 值赋给 b

由于函数要修改主调函数中的变量,必须通过指针(传地址)实现。

完整代码#

#include <stdio.h>
#include <conio.h>
void fun(int* a, int* b)
{
/**********Program**********/
int temp;
/* 第1步:暂存a的值 */
temp = *a;
/* 第2步:将b的值赋给a */
*a = *b;
/* 第3步:将暂存的原a值赋给b */
*b = temp;
/********** End **********/
}
int main()
{
int a, b;
printf("Enter a,b:");
scanf("%d%d", &a, &b);
fun(&a, &b);
printf("a=%d b=%d\n", a, b);
return 0;
}

关键考点#

  • 指针传址调用:通过传入变量地址,使函数能修改主调函数的变量
  • 三变量交换法:借助临时变量实现两个变量值互换的经典方法
  • 解引用赋值*a = *b 表示把 b 指向的值赋给 a 指向的变量
  • void 函数:交换函数无需返回值,通过指针参数直接修改原变量
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

考试套题-第八套
https://blog.radarweb.top/posts/c/考试套题-第八套/
作者
Sherry
发布于
2026-06-15
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录