C语言程序:去除偶数位数字,保留奇数位

5星 · 超过95%的资源 需积分: 3 22 下载量 192 浏览量 更新于2024-08-02 收藏 10.13MB PDF 举报
"这是一个关于2008年南开大学二级C语言上机考试题库的PDF文件,包含了100套题目。其中展示了一道具体的编程题,要求编写一个函数fun,该函数的功能是从一个无符号长整型数值中移除所有偶数位上的数字,仅保留奇数位数字,并保持原有的高位到低位的顺序。提供的源代码中有三处需要填写的内容,解题思路已经给出。" 在C语言中,处理这种问题通常涉及到数字的位操作和条件判断。这道题目中,函数`fun`接受一个无符号长整型指针作为参数,该指针指向要处理的数字。程序的核心部分是一个循环,它遍历数字的每一位,判断每位是否为奇数,并根据判断结果决定是否保留该位。 第一处填空:`t=*n%__1__;` 这里`t`用于存储当前数字的个位,因此需要取模10,因为10是十进制的一位数的基数,所以应填入10。 第二处填空:`if(t%2!=__2__)` 这个条件用于检查`t`(即当前位)是否为奇数。如果`t`除以2的余数不等于0,则`t`是奇数,应填入0,使得条件为`t%2!=0`。 第三处填空:`*n=__3__;` 在循环结束后,需要将处理后的新数赋值回原数的指针位置,即`*n`应为变量`x`,`x`存储了处理后的结果,所以此处填入`x`。 完整的代码应该是这样的: ```c #include<stdio.h> 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; // 第三处填空:返回新数 } main() { unsigned long n = -1; while (n > 99999999 || n < 0) { printf("Please input (0<n<100000000):"); scanf("%ld", &n); } fun(&n); printf("\nThe result is: %ld\n", n); } ``` 这个程序对于输入的数字,会打印出经过处理后的新数,只包含原始数字的奇数位。例如,输入27638496,输出将是739。