实战解题训练
例题1:一维数组改错题 中等
考点定位:一维数组定义、初始化、引用规范(考试重点题型)
题目:找出以下程序中的错误并改正(考试常考题型,分值20分)
// 错误程序
#include <stdio.h>
int main() {
int n = 5;
int arr[n];
arr[5] = {1,2,3,4,5};
printf("第三个元素:%d", arr[3]);
return 0;
}
错误分析与改正:
- int arr[n]; → int arr[5]; (数组长度必须是常量,不能用变量n)
- arr[5] = {1,2,3,4,5}; → int arr[5] = {1,2,3,4,5}; (初始化需在定义时完成,不能单独赋值;且arr[5]是下标越界)
- arr[3] → arr[2] (第三个元素下标是2,下标从0开始)
解题技巧:一维数组改错题检查优先级:①长度是否为常量 → ②初始化位置是否正确 → ③下标是否越界 → ④输出格式是否匹配。
例题2:二维数组编程题 较难
考点定位:二维数组定义、遍历、求和(考试压轴题型,分值20分)
题目:编写一个C程序,定义3行4列的二维数组并初始化,计算数组中所有元素的累加和,要求符合程序设计规范。
参考答案:
// 程序功能:计算3行4列二维数组所有元素的累加和
#include <stdio.h>
int main() {
// 定义并初始化3行4列二维数组
int arr[3][4] = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
int sum = 0;
// 双层for循环遍历二维数组
for (int i = 0; i < 3; i++) { // 外层循环:行
for (int j = 0; j < 4; j++) { // 内层循环:列
sum += arr[i][j]; // 累加每个元素
}
}
printf("二维数组累加和:%d\n", sum); // 输出结果:78
return 0;
}
解题技巧:二维数组编程题得分要点:①数组定义格式正确 ②双层for循环遍历(外层行、内层列) ③下标范围正确(行0到行数-1,列0到列数-1) ④累加变量初始化为0。
例题3:字符数组选择题 简单
考点定位:字符数组定义与引用(考试高频题型)
题目:以下关于字符数组的定义,正确的是?(分值10分)
A. char str[5] = "Hello"; B. char str[] = "Hello"; C. char str[5] = {'H','e','l','l','o','\0'}; D. char str[5]; str = "Hello";
答案:B
解析:
- A错误:"Hello"包含6个字符(含'\0'),超出数组长度5
- B正确:省略长度,数组长度自动为6(包含'\0')
- C错误:初始化元素个数(6个)超过数组长度5
- D错误:字符数组不能直接用赋值号赋值字符串,需用strcpy函数
解题技巧:字符数组选择题快速判断法:①看字符串长度是否留'\0'位置 ②看赋值方式是否正确 ③看初始化元素个数是否超出数组长度。