实战解题训练
例题1:函数定义与调用改错 中等
考点定位:函数定义格式 + 调用规范(考试重点题型)
题目:找出以下程序中的错误并改正(考试常考题型,分值20分)
// 错误程序
#include <stdio.h>
void printMsg() {
printf("Hello Function!")
return 0;
}
int main() {
printMsg(10); // 调用函数
return 0;
}
错误分析与改正:
- printf行末尾漏分号 → 修正为:printf("Hello Function!");
- void类型函数不能有return 0 → 修正为:删除return 0; 或改为return;
- 调用printMsg时传递了实参10 → 修正为:printMsg(); (函数定义无参数,调用不能传参)
解题技巧:函数改错题检查优先级:①返回类型与return匹配性 ②参数列表与调用实参匹配性 ③语法错误(分号、括号) ④函数体逻辑。
例题2:函数声明(原型)判断 简单
考点定位:函数声明格式(考试高频题型)
题目:以下哪个是合法的函数声明?(分值15分)
已知函数定义:int max(int a, int b) { return a>b?a:b; }
A. int max(int a, int b) B. int max(int, int); C. int max(a, b); D. max(int a, int b);
答案:B
解析:
- A错误:是函数定义(有{}),不是声明(声明需末尾加分号)
- B正确:函数声明简化写法,只写参数类型,末尾有分号
- C错误:未指定参数类型
- D错误:缺少返回类型
解题技巧:函数声明判断三步法:①有返回类型 ②有函数名和参数类型 ③末尾有分号;参数名可省略,类型不可省略。
例题3:数组作为函数参数编程题 较难
考点定位:数组传参 + 函数设计(考试压轴题型,分值20分)
题目:编写一个C程序,定义函数实现数组元素逆序存放,要求符合程序设计规范。
参考答案:
// 程序功能:数组元素逆序存放
// 符合函数设计规范:数组传参+功能封装
#include <stdio.h>
// 函数声明:数组逆序函数
void reverseArray(int arr[], int len);
int main() {
int nums[] = {1,2,3,4,5};
int length = sizeof(nums)/sizeof(nums[0]);
// 调用逆序函数
reverseArray(nums, length);
// 输出逆序结果
for (int i=0; i
printf("%d ", nums[i]); // 输出5 4 3 2 1
}
return 0;
}
// 函数定义:数组逆序实现
void reverseArray(int arr[], int len) {
int temp, i, j;
for (i=0, j=len-1; i
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
解题技巧:数组类编程题得分要点:①函数封装功能(单一职责) ②数组传参+长度参数 ③声明与定义匹配 ④注释清晰说明功能 ⑤语法无错误(分号、括号配对)。