C语言编程练习:去除偶数位与阶乘函数实现

需积分: 0 2 下载量 155 浏览量 更新于2024-07-30 收藏 1.33MB DOC 举报
C语言上机试题100道包含了两道具体的编程题目,旨在考察考生对C语言基础操作和函数理解的掌握程度。第一题要求实现一个名为`fun`的函数,该函数的主要任务是根据给定规则处理一个无符号长整型变量,保留其中偶数位并将剩余数字重新排列。函数接受一个指向无符号长整型的指针作为参数。代码中存在三个需要填充的空格,解题思路提示: 1. 第一处填写`10`,因为使用取模运算 `%` 得到的是当前数字的个位,需要与10进行比较以判断是否为偶数。 2. 第二处填写`0`,用于判断当前数字`t`是否为奇数,非零即奇数,题目要求保留偶数位。 3. 第三处填写`x`,表示将处理后的结果存储回原指针`n`所指向的变量中。 第二个题目涉及计算阶乘(`n!`),函数`fun`接收一个整数`n`作为参数。该函数需要计算并返回n的阶乘。代码中的错误在于条件判断语句和循环控制,解题时需要: 1. 第一处:由于阶乘的定义,当`n`等于0时,结果应为1,因此此处应去掉错误的判断条件,改为`if (n == 0)`。 2. 第二处:循环条件应该是`while (n > 1)`,以避免包含170在内的数值,因为题目没有提及170,可能是一个误标。 修复后的代码示例: ```c // 第一部分:处理偶数位函数 fun.c #include<stdio.h> void fun(unsigned long *n) { unsigned long x = 0, i; int t; i = 1; while (*n) { t = *n % 10; // 第一处:使用10获取个位 if (t % 2 != 0) // 第二处:判断是否为奇数 { x = x + t * i; i = i * 10; } *n = *n / 10; } *n = x; // 第三处:将处理后的结果赋值给原指针 } // 第二部分:计算阶乘函数 MODI1.C #include<stdio.h> double fun(int n) { double result = 1.0; if (n == 0) // 第一处:修复错误条件 return 1.0; while (n > 1) // 第二处:修复循环条件 { result *= n--; } return result; } // 主函数 main.c int main() { // 主程序调用函数并输出结果 // ... } ``` 这些题目着重考察了C语言的基本数据类型、算术运算、条件控制和函数应用,是提升编程基础和逻辑思维能力的好材料。