2011国信蓝点杯c语言试题
【知识点详解】 1. **代码填空 - 位操作**: 在题目1中,我们需要交换一个两位整数的十位和个位。这可以通过位操作实现,将个位乘以10并加上十位,然后将十位乘以10再加上个位,最后返回结果。所以缺失的代码是 `return (b*10) + a;`。 2. **字符串到整数转换**: 题目2要求将二进制字符串转换为整数。在循环中,我们需要将当前位的值(1或0)乘以2的当前位置次方,并累加到结果`n`上。所以,缺失的代码是 `n = n + (p[i] - '0') * (1 << (strlen(p)-1-i));`。 3. **排序与居中值**: 题目3的目的是找到三个整数中居中的值。根据已有的`swap()`函数,首先比较`a`和`b`,然后比较`b`和`c`,最后如果`a`比`b`大,再次交换`a`和`b`。所以,缺失的代码是 `if(a>b) swap(&a, &b);`。 4. **递归计算排列数**: 题目4是计算m个A和n个B的排列数。这是一个典型的递归问题,可以用斐波那契序列的思路解决。如果m或n为0,则返回1,否则返回`f(m-1, n) + f(m, n-1)`。所以,缺失的代码是 `return f(m-1, n) + f(m, n-1);`。 5. **数组排序**: 题目5是重新排列数组,使得所有负数都在正数的左边。这里使用了双指针法,`pBegin`指向负数,`pEnd`指向正数,它们向中间靠拢,交换元素。缺失的代码是:`pEnd = pData + len - 1;`,`*(pEnd--) = *pBegin;`,以及`*(pBegin++) = *pEnd;`。 6. **全排列**: 题目6要求生成一个字符串的所有排列。这是一个经典的回溯法问题。在递归过程中,每次选择一个字符放到目标位置,然后递归处理剩余的字符。所以,缺失的代码是 `f(p, len, n+1);`,以及`p = malloc(len+1);`。 这些题目涵盖了C语言的基础知识,包括位操作、字符串处理、基本算法(排序、递归、回溯)以及数据结构操作。解决这些问题需要对C语言有深入理解,并具备良好的逻辑思维能力。在实际编程中,掌握这些知识点对于编写高效、准确的代码至关重要。
- yxqxhmln2012-03-28比较前面,但内容太少!
- nyist_xiazhimo2013-05-21还行吧,内容有点少,不过不错的
- 粉丝: 1
- 资源: 45
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助