来自网络,联系侵删
923 字
2 分钟
考试套题-第八套
C 语言考试套题 - 第八套
本套题包含填空题、改错题、程序设计题三个部分,涵盖数组插入、数学函数计算、指针交换等核心考点。
一、填空题:数组指定位置插入元素
题目说明
题目:在数组内指定位置 i 插入元素 x。
解题思路
数组插入操作的核心是”先移动、后插入”:
- 数组原有 10 个元素,预留 1 个位置共 11 个空间
- 从最后一个元素开始,将下标
i及之后的元素整体后移一位 - 移动方向必须从后向前(
j从 9 递减到i),否则从前向后移动会覆盖尚未移动的元素 - 移动完成后,在位置
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)); - 错误原因:
a、b是double*指针,必须用*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与%lf:double类型输入用%lf,输出用%f
三、程序设计题:交换两个整数
题目说明
功能:实现两个整数的交换。
例如:给 a 和 b 分别输入:60 和 65,输出为:a=65 b=60。
解题思路
交换两个变量的值需要借助第三个临时变量:
- 定义临时变量
temp temp = *a:暂存a的原值*a = *b:把b的值赋给a*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 函数:交换函数无需返回值,通过指针参数直接修改原变量
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时
相关文章 智能推荐












