2011南开大学上机编程题解:阶乘函数与素数因子查找

需积分: 1 0 下载量 75 浏览量 更新于2024-07-30 收藏 647KB DOC 举报
南开大学100上机真题包含了两套不同的编程题目,旨在考察学生的基础编程技能和对特定算法的理解。 第一套题目是关于计算阶乘的函数实现。题目要求补充`fun`函数,该函数的目标是计算10的阶乘。函数定义如下: ```c long fun(int n) { if (___1___) // 第1处填空:判断n是否大于1且小于等于10 return(n * fun(___2___)); // 递归调用fun(n-1) else return ___3___; // 第3处填空:当n满足条件时返回1或10的阶乘 } ``` 在这里,第1处填空应该填入一个条件表达式检查n是否大于1且小于10,第2处填入`n-1`用于递归调用,第3处填入1或10的阶乘结果(因为10! = 3628800)。 第二套题目涉及查找并打印给定整数K的所有因子,特别是素数因子。原程序存在错误,主要在`IsPrime`函数中。首先,函数声明应修改为`IsPrime(int n)`,然后在判断条件中,将`if !(n%i)`更正为`if (n % i == 0)`。修正后的代码如下: ```c IsPrime(int n) { int i, m; m = 1; for (i = 2; i < n; i++) // 修改:去掉感叹号 if (n % i == 0) // 修改:更正为取模判断 { m = 0; break; } return m; } ``` 这部分主要考察了学生对素数检测算法和条件语句的掌握。 第三部分是填空题,要求实现斐波那契数列函数。斐波那契数列的定义是每个数字(F(n))等于前两个数字之和,通常从0和1开始。学生需要编写`fun`函数来完成这个任务。由于题目没有提供完整的代码,但提示不要改动其他部分,可以推断出函数的逻辑应该是使用循环或递归计算并返回下一个斐波那契数。例如,使用循环的方法可能如下: ```c void fun() { int N, t1 = 0, t2 = 1, nextNum; scanf("%d", &N); printf("Fibonacci sequence up to %d:\n", N); for (int i = 0; i < N; i++) { printf("%d ", t1); nextNum = t1 + t2; t1 = t2; t2 = nextNum; } } ``` 综上,这些题目涵盖了C语言的基础知识,包括递归、条件判断、循环结构以及对特定算法(阶乘和斐波那契数列)的理解。通过解答这些问题,学生可以检验自己的编程技能和对数学概念的实际应用能力。