C语言编程:求阶乘与打印素数因子

4星 · 超过85%的资源 需积分: 1 5 下载量 199 浏览量 更新于2024-07-30 收藏 647KB DOC 举报
"2011南开100真题" 这部分内容包含了两套计算机编程题目,主要涉及C语言的基础知识,包括递归函数、条件判断、循环结构以及函数的定义与调用。以下是这两套题目的详细解析: ### 第1套 题目要求编写一个名为`fun`的函数,计算10的阶乘。这是一个递归函数的问题。在C语言中,递归函数是通过函数自身调用来实现的。在给定的代码中: 1. **第1处填空**:函数`fun`的递归终止条件是`n`等于1的情况,因此此处应该填入`n==1`。考虑到整数溢出的可能性,也可以使用`n<=1`或者`n<2`,但为了确保递归正常结束,使用`n==1`更合适。 2. **第2处填空**:当`n`不等于1时,函数需要调用自身计算`n-1`的阶乘,所以填入`n-1`。 3. **第3处填空**:当`n`等于1时,阶乘的结果为1,所以返回值为`1`。在C语言中,长整型常量可以使用后缀`L`或`l`表示,因此这里可以写成`1L`。 ### 改错题 此题目的目标是找出并修复程序中的错误,使得程序能够正确打印出输入整数的所有素数因子。问题出现在`IsPrime`函数及其调用中: 1. **第1处**:`IsPrime(int n)`的函数声明缺少了分号,应该是`IsPrime(int n);`。 2. **第2处**:在`if`语句中,逻辑操作符`!`和`(`的位置错误,应该是`if (!(n % i))`,因为`!(n % i)`等价于`n % i == 0`,表示`i`能被`n`整除,即`i`是`n`的因子。 ### 第2套 题目要求编写一个函数`fun`,输出斐波纳契数列。斐波纳契数列的前两个数是0和1,后续每个数都是前两个数的和。题目没有给出完整的代码,但根据要求,`fun`函数应该接受一个整数`N`作为参数,然后输出斐波纳契数列的前`N`项。可以使用循环或递归来实现,但考虑到递归可能会导致效率低下,这里更适合使用循环结构。 ```c void fun(int N) { int fib[N + 1]; fib[0] = 0; fib[1] = 1; for (int i = 2; i <= N; i++) { fib[i] = fib[i - 1] + fib[i - 2]; printf("%d ", fib[i]); } } ``` 在`main`函数中调用`fun(N)`即可输出斐波纳契数列的前`N`项。 这些题目旨在测试考生对C语言基本语法、控制结构(如if、for)、函数的理解以及递归和循环解决问题的能力。在实际编程中,理解和熟练掌握这些基础知识是至关重要的。