C语言二级考试题库:100道上机题目解析

需积分: 3 6 下载量 9 浏览量 更新于2024-09-15 1 收藏 348KB TXT 举报
"这是一份针对二级C语言上机考试的题库,包含了100道题目,据称覆盖了大部分考试内容,甚至可能存在原题。题库中提供了两个编程题目,分别是C语言的‘C Spartan 01’问题和求阶乘的‘MODI1.C’问题。" 在C Spartan 01问题中,目标是编写一个函数`fun`,该函数接收一个无符号长整型指针`n`,用于处理输入的数字。函数的主要任务是将输入的数字倒序存储,即反转数字的位序。题目中已经给出了部分代码,有三个空格需要填写正确的内容。 首先,我们需要找到`*n % __1__`,这里应该填写10,因为我们需要获取数字的个位(即模10的余数)来开始位序反转的过程。 接着,`if (t % 2 != __2__)`检查数字是否为奇数,这里填写0,因为只有当个位不是偶数(即`t % 2`不等于0)时,我们才将其加入到结果`x`中,并且乘以当前的指数`i`。 最后,`*n = __3__`,这里是将`n`更新为去掉个位后的值,即`*n / 10`。因此,完整的代码应该是: ```c void fun(unsigned long *n) { unsigned long x = 0, i; int t; i = 1; while (*n) { t = *n % 10; if (t % 2 != 0) { x = x + t * i; i = i * 10; } *n = *n / 10; } *n = x; } ``` 在MODI1.C问题中,我们有一个计算阶乘的函数`fun`,接受一个整型参数`n`,并返回`n!`的结果。为了确保安全,函数限制了`n`的范围在1到169之间,防止溢出。同样,这里也有两处需要填充的地方。 第一处`if (n == 0)`表示当`n`为0时,阶乘的结果为1,所以返回1.0。 第二处`result *= n--`,在这里`n`自减1后乘以`result`,逐步计算阶乘。完整的代码应为: ```c double fun(int n) { double result = 1.0; if (n == 0) return 1.0; while (n > 1 && n < 170) { result *= n--; } return result; } ``` 在主函数`main`中,用户输入一个整数`n`,然后调用`fun`函数计算阶乘并打印结果。注意,题目中给出的`f"..."`可能是误写,应该是`printf`的格式化字符串。 总结来说,这份题库包含了两个与数字操作相关的C语言编程题目,一个是数字位序反转,另一个是计算阶乘,这两个题目可以锻炼考生对指针操作、条件判断以及循环结构的理解和运用。