C++编程:去除偶数位数字,计算阶乘问题解析

需积分: 3 1 下载量 153 浏览量 更新于2024-07-26 收藏 1.09MB DOC 举报
“计算机题库,包含C++编程题目解析及函数修复建议。” 在这个计算机题库中,我们有两个编程题目,都是关于数值处理的。第一个题目是C++编程题,涉及的函数`fun`旨在从一个无符号长整型变量中移除所有偶数位上的数字,只保留奇数位数字,并保持原有顺序。根据提供的解题思路,我们可以分析以下内容: 1. 第一处空格应该填写`10`,因为`t=*n%10`是为了获取当前数字的个位数。当我们对一个整数进行模运算10的操作时,可以得到它的个位数。 2. 第二处空格应填写`0`,条件`t%2!=0`用于检查这个个位数是否为奇数,即是否不能被2整除。 3. 第三处空格应填写`x`,这是为了让最终处理后的新数通过形参`n`返回。在循环结束后,`*n`应该被赋值为`x`,即新构建的数。 完整的`fun`函数代码应该是这样的: ```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; } ``` 第二个题目同样是一个C++编程题,要求计算阶乘。提供的程序中,`fun`函数用于计算`n!`,但是存在错误。按照解题思路,我们需要对错误进行修正: 1. 第一处错误是缺少了等号,应该写成`if (n == 0)`,表示当n等于0时返回1。 2. 而第二处错误在于`while`循环条件,应当去掉`n<170`,因为阶乘计算只关心`n`的值是否大于1,而不需要限制在170以内。 修正后的`fun`函数代码如下: ```c double fun(int n) { double result = 1.0; if (n == 0) return 1.0; while (n > 1) result *= n--; return result; } ``` 这两个题目都是基础的算法实现,对于学习C++编程和理解数值处理的初学者来说非常有帮助。通过解决这些题目,不仅可以提高编程技巧,还能加深对整数运算和控制流的理解。