2013年3月计算机二级考试C语言上机题库解析

下载需积分: 14 | DOC格式 | 1.06MB | 更新于2024-07-26 | 110 浏览量 | 5 下载量 举报
收藏
"这是两道关于计算机二级考试,特别是C语言编程的题目。第一题要求编写一个函数,该函数接收一个无符号长整型变量的指针,移除其中所有偶数位上的数字,只保留奇数位上的数字,并保持原有顺序。第二题要求实现一个计算阶乘的函数,即计算n的阶乘,但原代码存在错误,需要修正。" 在第一题中,我们需要理解函数fun的工作原理。函数的目标是接收一个无符号长整型数值的指针,然后遍历这个数值的每一位,检查每位是否为奇数。如果是奇数,就将其添加到新数x中,新数x按照从高位到低位的顺序构建。首先,我们需要在*t%__1__处填入10,因为我们要获取*n的个位数。然后,判断条件*t%2!=__2__是为了确认当前位是否为奇数,因此填入0。最后,在*n=__3__处,我们需要将新构建的数x赋值回*n,因此填入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; // 保留奇数位并累加到新数x i = i * 10; // 更新权重,准备处理下一位 } *n = *n / 10; // 移除已处理的位 } *n = x; // 将新数x赋值回*n } 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); } ``` 第二题中,我们看到函数fun的目的是计算阶乘。原代码中的错误包括条件语句的格式错误和缺少分号。正确的代码应该是: ```c #include<stdio.h> double fun(int n) { double result = 1.0; if (n == 0) // 修正条件语句格式 return 1.0; while (n > 1 && n < 170) { // 计算阶乘 result *= n--; } // 添加丢失的分号 return result; } main() { int n; printf("Input N: "); scanf("%d", &n); printf("\n\n%d! = %lf\n\n", n, fun(n)); } ``` 修正后的fun函数会正确地计算n的阶乘,而不会超出double类型的最大值(由于限制n<170),并在main函数中显示结果。 这两题涉及的知识点包括C语言的基本语法,如条件语句、循环、取模运算以及指针的使用。同时,也涉及到算法设计,如数字处理和阶乘计算。对于参加计算机二级考试的考生来说,理解和掌握这些知识点至关重要。

相关推荐