C语言考试上机题解析:去除偶数位

需积分: 3 0 下载量 153 浏览量 更新于2024-07-25 1 收藏 1.16MB DOC 举报
"此资源包含两套C语言编程题目,主要针对二级C语言上机考试的复习,涵盖了处理数字位操作和计算阶乘的函数编写。" 第一部分:去除偶数位数字的题目详解 在给定的程序中,函数`fun`的目标是创建一个新的数,该数由原数中各位上的奇数构成,且保持原有的顺序。具体实现方法如下: 1. 定义一个无符号长整型变量`x`用于存储新数,初始化为0。 2. 使用`i`作为位权,初始值为1,每次循环时乘以10以递增位权。 3. 在循环内,首先获取当前数`*n`的个位数字,这可以通过`*n % 10`实现,因此第一处下划线应填写`10`。 4. 接下来,检查这个个位数字是否为奇数,即`t % 2 != 0`,因此第二处下划线应填写`0`。 5. 如果个位数字是奇数,将它与当前的位权`i`相乘,然后累加到`x`上。 6. 更新原始数`*n`,将其除以10,以便在下次循环中处理下一个位。 7. 循环结束后,新数`x`应当被赋值回`*n`,因此第三处下划线应填写`x`。 经过以上步骤,程序将能够正确地去除原数中所有偶数位的数字,并保留奇数位,形成新的数字。 第二部分:计算阶乘的题目详解 在第二个程序中,函数`fun`的目标是计算输入整数`n`的阶乘。错误在于条件判断和乘法操作的实现。正确的实现如下: 1. 定义结果变量`result`,初始值为1.0,用于存储阶乘结果。 2. 首先检查`n`是否为0,因为0的阶乘定义为1,所以此处的错误是缺少了等号,应改为`if (n == 0)`。 3. 接下来的`while`循环用于计算阶乘。错误在于条件`while (n > 1 && n < 170)`,这里应该去掉对`n < 170`的限制,因为阶乘只关注`n > 0`的情况。所以正确版本应为`while (n > 1)`。 4. 在循环体内,应当将`result`乘以`n`,然后递减`n`。错误在于`result *"`,应改为`result *= n`,表示`result`和`n`的乘积赋值回`result`。 修复这两个错误后,程序将能正确计算输入整数`n`的阶乘,并输出结果。 总结,这两道题目主要考察了C语言的基础知识,包括位运算、条件判断、循环控制以及数学函数的实现。熟悉这些基本概念和操作对于通过二级C语言上机考试至关重要。