C语言编程练习:阶乘计算、素数因子与查找低分

需积分: 13 5 下载量 154 浏览量 更新于2024-07-29 2 收藏 882KB DOC 举报
“2011年计算机二级C语言99套上机操作题及答案.doc” 本资源包含的是关于计算机二级考试中C语言部分的99套上机操作题目及对应的答案,旨在帮助考生熟悉考试格式,提升C语言编程能力。以下是其中三道典型题目及其解析: ### 填空题 题目要求编写一个计算阶乘的递归函数`fun`。已给出部分代码如下: ```c long fun(int n) { if(___1___) return(n*fun(___2___)); return___3___; } ``` 正确答案如下: - 第1处填空:`n>1`。这是递归的基础条件,只有当`n`大于1时,才继续进行递归调用。 - 第2处填空:`n-1`。每次递归调用时,将`n`减1,直到`n`等于1。 - 第3处填空:`1`。当`n`等于1时,结束递归,返回1作为阶乘的基本值。 ### 改错题 该程序的目标是找出输入整数的所有素数因子。代码中的错误如下: ```c IsPrime(int n) { int i, m; m = 1; for(i = 2; i < n; i++) if!(n % i) // 错误1:需要添加括号 { m = 0; break; } return(m); } ``` 改正后的代码: ```c IsPrime(int n) { int i, m; m = 1; for(i = 2; i < n; i++) if (!(n % i)) // 正确1:添加括号 { m = 0; break; } return(m); } ``` ### 编程题 题目要求编写一个函数`fun`,找出数组`score`中低于平均分的分数,并将其存储到另一个数组`below`中。示例数据如下: ```c int score[] = {10, 20, 30, 40, 50, 60, 70, 80, 90}; ``` 函数`fun`可能的实现如下: ```c #include <stdio.h> void fun(int score[], int M, int below[], int *count) { int avg = 0, i, j = 0; for(i = 0; i < M; i++) // 计算平均分 avg += score[i]; avg /= M; for(i = 0; i < M; i++) // 找出低于平均分的分数 if(score[i] < avg) { below[j++] = score[i]; // 将分数存入below数组 (*count)++; } } int main() { int score[] = {10, 20, 30, 40, 50, 60, 70, 80, 90}, below[10], count = 0; fun(score, 9, below, &count); printf("Below average scores: "); for(int i = 0; i < count; i++) printf("%d ", below[i]); printf("\n"); return 0; } ``` 以上代码首先计算了数组`score`的平均分,然后遍历数组,将低于平均分的分数存入`below`数组。在主函数`main`中调用`fun`,并输出结果。 通过这些题目,考生可以复习和练习C语言的基础语法、递归、循环、数组操作以及错误排查等技能,为计算机二级考试做好充分准备。