C语言编程:去除偶数位数字的函数解析与实现

5星 · 超过95%的资源 需积分: 10 11 下载量 78 浏览量 更新于2024-07-26 3 收藏 995KB DOC 举报
"2013全国计算机二级考试机试试题完整版" 这篇资源包含了两道计算机编程题目,分别涉及C语言的数值处理和字符串转换。第一个题目是关于处理整数的,函数`fun`需要去除输入数值中各位为偶数的数字,保留奇数位,然后返回新的数。在提供的代码中,`fun`函数通过取模运算 `%` 来获取数值的个位,检查是否为奇数,并根据条件更新新数`x`。在`main`函数中,用户被要求输入一个在0和100000000之间的数,程序会调用`fun`函数处理这个数并打印结果。 具体修复如下: - 第一处:填写10,因为`t=*n%10`用于获取`n`的个位数。 - 第二处:填写0,`if(t%2!=0)`用于判断该位数字是否为奇数。 - 第三处:填写`x`,因为最终的新数需要通过`n`返回,所以`*n=x`。 第二个题目要求实现一个计算阶乘的函数`fun`,输入为整数`n`,返回`n!`。初始代码存在错误,需要修复。正确的实现应如下: - 第一处:条件语句修正为`if(n==0)`,确保当n等于0时返回1。 - 第二处:在`result*=n--`后添加分号,使其成为完整的语句。 最后,第三个题目要求编写一个函数`fun`,该函数不依赖C库函数将数字字符串转换为整数。这通常涉及到遍历字符串,逐位转换为数字并累加。由于这部分题目没有提供完整的代码,一个可能的实现是: ```c #include<stdio.h> #include<string.h> long fun(const char* str) { long result = 0; int sign = (*str == '-') ? -1 : 1; if (*str == '-' || *str == '+') str++; // 跳过符号 while (*str != '\0') { result = result * 10 + (*str - '0'); // 逐位转换为数字并累加 str++; } return sign * result; // 应用正负号 } int main() { char str[100]; printf("请输入一个数字字符串:"); scanf("%s", str); long num = fun(str); printf("转换后的整数是:%ld\n", num); return 0; } ``` 这个`fun`函数首先检查字符串的开头是否有符号,然后逐位处理字符串,直到遇到字符串结束符。注意,这里假设输入的字符串只包含数字和可选的符号。实际应用中,还需要处理非法输入的错误情况。