2011国信蓝点软件设计大赛C语言模拟试题与解答

1星 需积分: 3 14 下载量 159 浏览量 更新于2024-09-22 收藏 89KB DOC 举报
"2011国信蓝点软件设计大赛C模拟题及答案" 这篇资源提供了2011年国信蓝点软件设计大赛的本科C语言模拟试题及相应解答,旨在帮助参赛者了解比赛的命题形式和考核范围。题目涵盖了代码填空和程序设计两大类型,旨在测试参赛者的C语言基础、逻辑思维和编程能力。 1. 代码填空(满分2分) 题目要求编写一个函数`switch_num`,功能是将一个两位整数的十位和个位交换。已给出部分代码如下: ```c int switch_num(int x) { int a = x / 10; int b = x % 10; return b * 10 + a______; } ``` 解决方案:在空白处添加操作符`+`,使`b`和`a`相加,形成新的整数。 ```c return b * 10 + a; ``` 2. 代码填空(满分3分) 这段代码用于将二进制字符串转换为整数。需填写缺失的语句: ```c char* p = "1010110001100"; int n = 0; for (int i = 0; i < strlen(p); i++) { n = _n * 2 + p[i] - '0'_; } printf("%d\n", n); ``` 解决方案:在空白处添加操作符`=`,将每次循环的结果累加到`n`上。 ```c n = n * 2 + p[i] - '0'; ``` 3. 代码填空(满分3分) 这部分代码用于找出三个整数`a`, `b`, `c`中的中间值并存储在`m`中。需填充`swap()`函数调用: ```c if (a > b) swap(&a, &b); if (b > c) swap(&b, &c); if (a > b) swap(&a, &b); int m = b; ``` 解决方案:在最后一个`if`语句中,如果`a`仍然大于`b`,则需要再次调用`swap()`函数交换`a`和`b`。 ```c if (a > b) swap(&a, &b); ``` 4. 代码填空(满分5分) 这是一个递归函数`f(m, n)`,计算`m`个A和`n`个B的不同排列数量。需填写递归调用: ```c int f(int m, int n) { if (m == 0 || n == 0) return 1; return f(m-1, n) + f(m, n-1)___; } ``` 解决方案:在空白处添加操作符`+`,表示递归调用的组合。 ```c return f(m-1, n) + f(m, n-1); ``` 5. 代码填空(满分6分) 这段代码用于将一个整数数组按照正负数重新排序,所有负数在正数之前。需补充缺失的条件判断: ```c void reorder(int* pData, int len) { if (pData == NULL || len ==______) ``` 解决方案:检查数组长度是否为0,如果是,则直接返回。 ```c if (pData == NULL || len == 0) return; ``` 这些题目覆盖了C语言的基础知识,如算术运算、逻辑判断、字符串处理、递归以及数组操作。解答这些题目需要对C语言的基本语法和编程概念有深入理解。