计算机二级考试题库:C语言与阶乘问题解析

需积分: 10 6 下载量 153 浏览量 更新于2024-07-23 收藏 1.47MB DOC 举报
"计算机二级题库,包含最新C语言上机试题和求阶乘的程序修正" 在计算机二级考试中,编程题目通常是考核的重点之一。这里我们有两个编程问题,一个是涉及C语言的数字处理,另一个是关于计算阶乘的函数。 首先,让我们分析第一个题目,这是一个C语言的函数fun,它的功能是提取输入数中所有奇数位上的数字,并将这些数字按原顺序组成一个新的数。题目给出的代码中有三个空格需要填写。根据解题思路: 1. 第一处空格:我们需要获取当前数字的个位,可以使用模运算 `%` 来实现。由于我们是要获取个位,而十进制数的个位是除以10后的余数,所以这里填 `10`。 2. 第二处空格:我们需要判断取出的个位数是否为奇数,可以通过 `t%2` 是否等于 `0` 来判断,因此填 `0`。 3. 第三处空格:在循环结束后,形参n应该指向新组成的数,即变量x,所以填 `x`。 修正后的代码如下: ```c #include<stdio.h> 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; // 形参n指向新数x } main() { unsigned long n = -1; while (n > 99999999 || n < 0) { printf("Please input (0 < n < 100000000):"); scanf("%ld", &n); } fun(&n); printf("\nThe result is: %ld\n", n); } ``` 接下来是第二个题目,给定的程序MODI1.C中有一个计算阶乘的函数fun,其目的是计算n!。题目指出在现有代码中存在错误,需要修正。问题在于: 1. 第一处空格:条件语句if后面缺少了`=`, 应该是 `if (n == 0)`。 2. 第二处空格:while循环条件错误,应该确保n在1到170之间,因为阶乘可能会导致溢出,所以使用 `while (n > 1)` 而不是 `while (n > 1 && n < 170)`。 修正后的代码: ```c #include<stdio.h> double fun(int n) { double result = 1.0; if (n == 0) // 修正if语句 return 1.0; while (n > 1) { // 修正while循环条件 result *= n; n--; } return result; } // main函数保持不变... ``` 这两个题目都展示了C语言的基础知识,包括变量、运算符、控制流以及函数的使用。在准备计算机二级考试时,熟悉并能够熟练运用这些基础知识是非常关键的。通过练习类似的题目,考生可以提高自己的编程能力和对C语言的理解,从而提高考试的通过率。