C语言二级考试原题解析:去除偶数位

需积分: 9 1 下载量 188 浏览量 更新于2024-08-01 收藏 991KB DOC 举报
"C2机试 二级考试必备 原题" 这篇资源主要涉及的是C语言编程题目,其中包含了两个具体的问题。第一个问题是关于处理一个无符号长整型变量(`unsigned long`),目的是移除其中所有偶数位上的数字,只保留奇数位上的数字。第二个问题是一个计算阶乘的函数,需要修复程序以正确计算整数的阶乘。 首先,我们分析第一个问题。给出的源程序中有一个名为`fun`的函数,它的作用是接收一个无符号长整型指针`n`,并根据输入的数值重新构造一个新的数,新数仅包含原数中奇数位的数字。以下是修复后的代码段: ```c void fun(unsigned long *n) { unsigned long x = 0, i; int t; i = 1; while (*n) { t = *n % 10; // 第一处填10,取个位数 if (t % 2 != 0) // 第二处填0,判断是否为奇数 { x = x + t * i; i = i * 10; } *n = *n / 10; // 无论是否满足条件,都要移除最低位 } *n = x; // 第三处填x,将新数赋值给n } ``` 在`main`函数中,用户被要求输入一个0到100000000之间的非负数,然后调用`fun`函数进行处理,并打印结果。 接下来是第二个问题,涉及到的源程序片段是一个计算阶乘的函数`fun`。这个函数应该接受一个整数`n`并返回`n!`。原程序中存在错误,我们需要找到并修复它。以下是修正后的代码: ```c double fun(int n) { double result = 1.0; for (int i = 1; i <= n; ++i) { result *= i; } return result; } ``` 在这个修复的版本中,我们使用一个`for`循环从1累乘到`n`,并将结果存储在`result`变量中。最后返回`result`作为阶乘的结果。 这两个问题都属于基础的C语言编程题,它们考察了对整数操作、条件判断、循环控制以及函数的理解。在准备C2级别的机试时,掌握这类问题的解决方法是非常重要的。