C语言编程:去除偶数位数字题目解析与解答

需积分: 9 1 下载量 140 浏览量 更新于2024-07-25 收藏 800KB DOC 举报
"C语言编程练习,包括处理数字的函数和计算阶乘的函数" 在C语言中,处理数字的函数通常涉及到数值操作,如提取位、判断奇偶性以及进行数学运算。在提供的代码片段中,我们有两个独立的题目,分别涉及去除偶数位和计算阶乘。 首先,让我们详细分析第一个题目。这个程序的目标是创建一个函数`fun`,它接收一个无符号长整型指针`n`,并移除输入数中所有偶数位的数字。以下是程序的主要逻辑: 1. 定义一个变量`x`用于存储新数,初始化为0。 2. 定义一个整型变量`i`作为权重,初始值为1,用于将每位数字加入到`x`中。 3. 使用`while`循环,条件为`*n`非零,意味着还有数字需要处理。 - 计算`*n`对10取模,得到当前位的数字`t`。这里填写`10`是因为我们想获取个位数字。 - 判断`t`是否为奇数,即`t%2`是否不等于`0`。如果`t`是奇数,将`t`乘以`i`并累加到`x`,同时更新`i`为`i*10`,以便下一次累加时能对应更高的位。 - 将`*n`除以10,移除已处理的最低位。 4. 循环结束后,`*n`应为新数的值,因此将`x`赋值给`*n`。 在第二个题目中,函数`fun`的任务是计算输入整数`n`的阶乘。这里有两个错误需要修正: 1. 首先,`ifn==0`的语法有误,应该是`if (n == 0)`,用括号包围条件表达式。 2. 其次,`while`循环的条件`while(n>1&&n<170)`限制了`n`的范围,但阶乘计算不需要这样的限制,应该更改为`while(n > 1)`,因为任何大于1的整数都可以计算阶乘。 修正后的`fun`函数应该如下所示: ```c double fun(int n) { double result = 1.0; if (n == 0) return 1.0; while (n > 1) result *= n, n--; return result; } ``` 这两个题目展示了C语言基本的数学和逻辑操作,对于学习C语言的初学者来说是非常好的实践题目。它们可以帮助理解指针、条件语句、循环以及基本的数学运算。通过解决这些题目,开发者可以提高对C语言控制流和数值处理的理解。