C语言程序:计算公式与排序算法错误修正

需积分: 42 96 下载量 49 浏览量 更新于2024-07-18 13 收藏 575KB DOC 举报
在C语言程序改错题库中,第1题考察的是编写一个函数来计算一个公式,该函数接受一个整数形参`m`,计算从3到\(2m-3\)的所有奇数倒数之和。题目给出的代码中存在几个错误: 1. 在`double y=1`的定义中,缺少了分号`;`,应该将其补全。 2. `for`循环的条件判断错误,当前的`i<m`会导致循环结束在\(2m-4\),因为最后一个奇数是\(2m-3\)。应更改为`for(i=3; i<=m; i++)`或`for(i=3; i<m+1; i++)`,确保循环直到\(2m-3\)。 3. 计算1/(2i-3)时,表达式中的`2i-3`需要加上括号`(2i-3)`,确保优先级正确。 修正后的代码如下: ```c double fun(int m) { double y = 1; // 添加分号 int i; for(i = 3; i <= m; i++) // 修改循环条件 { y += 1.0 / (2 * i - 3); } return(y); } ``` 第2题涉及选择排序算法,代码中的错误包括: - 选择法中交换`a[p]`和`a[j]`的位置时,应当将`t`保存`a[j]`的值,而不是直接赋值。 - `p`的初始值在内层循环后仍然保持不变,应将其初始化为`j+1`,以便找到较小的元素。 修正后的`fun`函数部分代码如下: ```c for(i=j+1; i<n; i++) // 更新内层循环的起始位置 { if(a[i] > a[p]) { t = a[j]; // 保存a[j]的值 a[j] = a[i]; // 交换位置 a[i] = t; p = j; // 更新最小元素的索引 } } ``` 这两个问题的修正不仅涉及语法,还涉及算法逻辑的理解和实现,通过这些实例,学习者可以提升对于C语言基础语法和常用算法的掌握。