【题目解析】
1. 代码填空(满分2分)
题目要求交换一个两位整数的十位和个位。已知代码中定义了变量a存储十位,b存储个位,然后需要返回一个新的整数,这个整数由b的个位乘以10加上a的十位构成。因此,缺失的代码是`b*10+a`。
2. 代码填空(满分3分)
这段代码将二进制字符串转换为整数。循环遍历字符串,计算每一位的二进制值,并将其左移适当位置累加到n中。题目要求填充缺失的语句,即在每次循环中,将当前字符减去'0'(将字符'0'转换为整数0)并左移。所以,填充的代码是`(p[i] - '0')<<(strlen(p)-1-i)`。
3. 代码填空(满分3分)
这段代码目的是找出三个整数a, b, c中的中位数。首先通过swap函数调整a, b, c的顺序,使得a <= b <= c。b就是居中的数。因此,缺失的代码是`int m = b;`。
4. 代码填空(满分5分)
这是一个递归问题,计算m个A和n个B的不同排列数量。当m或n为0时,只有一个排列(空序列或全是A或全是B)。递归公式应该是`f(m, n) = f(m-1, n) + f(m, n-1)`,因为每个排列要么是A开头的排列加上一个A,要么是B开头的排列加上一个B。所以,填充的代码是`f(m-1, n) + f(m, n-1)`。
5. 代码填空(满分6分)
这段代码用于重新排列数组,使所有负数都在正数之前。首先找到第一个负数的指针pBegin和最后一个正数的指针pEnd,然后交换它们。循环继续,直到pBegin超过pEnd。缺失的代码分别是`pEnd = pData + len - 1;`(初始化pEnd为数组末尾),`*(pEnd+1)`(在负数元素后交换),以及`*(pBegin-1)`(在正数元素前交换)。
6. 代码填空(满分9分)
此题要求输出一个字符串的所有全排列。这是一个典型的回溯法问题。在每次递归中,需要选择一个未使用的字符放在当前位置,然后递归处理剩余字符。当n等于len-1时,意味着已经构建了一个完整的排列,此时打印字符串。所以,填充的代码是`len`(分配与字符串长度相等的内存),`*(str+i)`(在i位置处选择字符),以及`*(p+n)`(在新字符串中放置选择的字符)。
这些题目涵盖了C语言的基础知识,包括变量、运算符、条件判断、循环、字符串处理、递归以及数组操作等。解决这些问题需要理解C语言的基本语法和逻辑思维能力。在实际编程比赛中,这样的题目可以帮助参赛者检验他们的编程技能和问题解决能力。