C语言编程:去除偶数位数字的试题与阶乘计算函数修正

需积分: 0 0 下载量 178 浏览量 更新于2024-07-31 收藏 1.56MB DOC 举报
"这是一个关于计算机二级C语言考试题库的练习,包含了两个编程题目,一个是去除数字中偶数位,另一个是计算阶乘。" 在第一个编程题目中,我们需要完成一个函数`fun`,该函数接收一个无符号长整型指针`n`,其目的是从输入的数字中移除所有偶数位上的数字,只保留奇数位。题目给出了部分代码,我们需要填写三处下划线处的内容。 第一处下划线处:`t=*n%__1__;` 这里的目的是获取当前数字的个位数,因此填入 `10`,完整语句为 `t=*n%10;`。 第二处下划线处:`if(t%2!=__2__)` 这里是为了检查个位数是否为奇数,因此填入 `0`,完整条件为 `if(t%2!=0)`。 第三处下划线处:`*n=__3__;` 在循环结束后,将处理后的新数`x`赋值回`n`,所以填入 `x`,完整语句为 `*n=x;`。 这个函数的工作原理是遍历输入数字的每一位,如果是个位数为奇数,就将其添加到新数`x`中,并更新指数`i`以便保留位置信息。最后,原指针`n`指向的新数就是处理后的结果。 第二个编程题目中,我们需要修正`fun`函数,使其能正确计算阶乘。给定的源程序中,`fun`函数有一个逻辑错误,需要更正。 在错误的地方,`ifn==0`应该改为`if (n == 0)`,因为条件判断语句需要使用括号来确保正确的语法。同时,`while(n>1&&n<170)`这部分看起来是为了防止溢出,但在这里并不适用,因为题目要求计算的阶乘不会超过170!,所以可以直接去掉这段代码,简化为`while(n>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; } ``` 这样,当调用`fun(5)`时,将会正确地输出`5!`的结果,即`120.000000`。 这两个题目都涉及到基本的C语言编程技能,包括指针操作、条件判断、循环控制以及数学运算。熟悉这些概念对于通过计算机二级C语言考试至关重要。