南开大学计算机等级考试上机真题解析

需积分: 1 0 下载量 175 浏览量 更新于2024-07-31 收藏 647KB DOC 举报
"这是两套计算机等级考试的上机题目,主要涉及C语言编程。第一套题目是一道关于计算阶乘的填空题,要求完成FUN函数以计算10的阶乘;第二套题目是一个改错题,目的是找到并修正代码中的错误,以便程序能正确输出给定整数的所有素数因子。" 在第一套题目中,我们需要填写的FUN函数是一个递归函数,用于计算整数n的阶乘。填空如下: 1. 第1处填空:n>1。这里是一个条件判断,确保只有当n大于1时才进行递归计算,因为1的阶乘是1,0的阶乘是1,而负数没有定义阶乘,所以n必须大于1。 2. 第2处填空:n-1。这是递归调用的一部分,每次递归都将n减1,直到n等于1为止。 3. 第3处填空:1。当n等于1时,递归结束,返回1作为阶乘的基础值。在C语言中,长整型常量可以用L或l后缀表示,但在这里返回1即可,因为1的长整型表示与整型相同。 第二套题目中,给定的程序旨在找出并打印出输入整数的所有素数因子。错误出现在两个地方: 1. 第1处:Isprime(intn); 应该改为 Isprime(int n)。这是函数声明的语法错误,缺少了空格。 2. 第2处:if!(n%i) 应该为 if (!(n%i))。这里是一个逻辑运算符的优先级问题,!应在括号内,以确保先判断n是否能被i整除,再进行逻辑非操作。 修正后的IsPrime函数如下: ```c IsPrime(int n) { int i, m; m = 1; for (i = 2; i < n; i++) { if (!(n % i)) { // 修正此处 m = 0; break; } } return (m); } ``` 斐波纳契数列的题目中,要求编写一个函数输出斐波纳契数列,其规则是每个数是前两个数的和。通常,斐波纳契数列的前两个数字是0和1。因此,可以这样填写函数: ```c void fun(int N) { int a = 0, b = 1, c; printf("%d %d ", a, b); for (int i = 2; i < N; i++) { c = a + b; printf("%d ", c); a = b; b = c; } } ``` 这个函数首先打印前两个数0和1,然后通过循环计算并打印接下来的N-2个斐波纳契数。