C语言编程:去除偶数位后的数值处理与阶乘计算问题解析

需积分: 0 0 下载量 23 浏览量 更新于2024-06-28 收藏 3.58MB PDF 举报
"2012年9月国家计算机二级C语言上机考试题库.pdf" 在2012年9月的国家计算机二级C语言上机考试题库中,涉及了两个主要的编程题目,主要考察了考生对C语言基本语法、数值处理以及算法设计的能力。以下是这两道题目的详解: 第一道题目要求编写一个函数`fun`,其功能是移除输入整数的每一位上的偶数数字,只保留奇数数字。函数接受一个无符号长整型指针`n`作为参数,处理完后的结果会通过该指针返回。解题的关键在于理解题意并正确使用C语言的逻辑运算符和算术运算符。 1. 第一处空格:用`*n%10`获取`n`的个位数,因此填写`10`。 2. 第二处空格:检查个位数是否为奇数,用`t%2!=0`判断,因此填写`0`。 3. 第三处空格:在循环结束后,将处理好的新数`x`赋值回`*n`,因此填写`x`。 完整的`fun`函数如下: ```c 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; } ``` 第二道题目要求实现一个计算阶乘的函数`fun`,输入一个整数`n`,返回`n!`的结果。这里存在两个错误需要修正: 1. 第一处错误:条件语句`ifn==0`应修正为`if(n==0)`,确保语法正确。 2. 第二处错误:`result*=n--`语句后面缺少分号`;`,应补全。 修正后的`fun`函数如下: ```c double fun(int n) { double result = 1.0; if (n == 0) return 1.0; while (n > 1 && n < 170) { result *= n--; } return result; } ``` 这两个题目分别涉及了C语言中指针、位运算、条件判断、循环和函数等核心概念,对于准备计算机二级C语言考试的考生来说,这些都是必须掌握的基础知识。通过解答这些题目,考生可以提高对C语言的理解和编程能力。