2012年9月计算机二级C语言考试上机题库与解题攻略

需积分: 0 1 下载量 84 浏览量 更新于2024-07-27 收藏 1.1MB DOC 举报
"这是两道关于计算机二级C语言考试的题目,分别涉及数字处理和阶乘计算。" 在第一个题目中,我们面临的问题是如何从一个给定的无符号长整型数值中移除所有偶数位上的数字,保留奇数位数字,并按照原顺序组成新的数字。函数`fun`接收一个指向无符号长整型变量的指针`n`,通过一系列操作将符合条件的数字重新组合。具体步骤如下: 1. 初始化一个新的无符号长整型变量`x`为0,用于存储新组成的数字。 2. 使用变量`i`作为权重,初始值为1,每次增加10的倍数,以便将保留的数字放在正确的位置。 3. 使用`while`循环,条件为`*n`非零,确保遍历到所有位。 4. 在循环内,计算`*n`对10取模的结果,即`t=*n%10`,获取当前位数字。 5. 接下来判断`t`是否为奇数,即`t%2!=0`,如果为奇数则满足保留条件。 6. 如果`t`是奇数,将其与`i`相乘并加到`x`上,`x=x+t*i`,并将`t`添加到新数的位置。 7. 更新`*n`,去除已检查过的最低位,`*n=*n/10`。 8. 循环结束后,将新数`x`赋值回`*n`,即`*n=x`。 在主函数`main`中,程序会提示用户输入一个0到100000000之间的数,然后调用`fun`函数处理这个数,并输出处理后的结果。 第二个题目涉及计算阶乘。函数`fun`应该计算`n!`,但目前存在错误。修正后的程序应该是: 1. 初始化`result`为1.0,表示初始的乘积。 2. 检查条件`if(n==0)`,当n等于0时,返回1.0,因为0的阶乘定义为1。 3. 使用`while`循环,条件为`n>1&&n<170`,确保n在合法范围内且不超出浮点数精度范围。 4. 在循环体内,将`result`与`n`相乘,然后递减`n`,`result*=n--;` 5. 最后,不要忘记在`while`循环后添加分号结束语句,`return result;`。 在主函数`main`中,程序会提示用户输入一个整数`n`,然后调用`fun`函数计算阶乘,并输出结果。这两个题目都体现了C语言基础的数字处理和控制流程知识。