#include <iostream> using namespace std; struct rationalNumber { int fenzi; // 分子 int fenmu; // 分母 }; rationalNumber reduction(rationalNumber n) { rationalNumber m; int s = (n.fenzi > n.fenmu ? n.fenzi : n.fenmu); int a; for (int i = s; s > 0; s--) { if (n.fenzi % s == 0 && n.fenmu % s == 0) { a = s; break; } } m.fenzi = n.fenzi / a; m.fenmu = n.fenmu / a; return m; } // 函数rnMean:计算n个有理数的平均数 // 参数:a-存放有理数的数组,n-有理数的个数 // 返回值:n个有理数的平均数 rationalNumber rnMean(rationalNumber a[], int n); int main() { char c; rationalNumber a[100], z; int n, i; cin >> n; // 输入有理数个数 // 输入n个有理数 for (i = 0; i < n; i++) cin >> a[i].fenzi >> c >> a[i].fenmu; z = rnMean(a, n); // 计算有理数平均数 // 输出平均数 if (z.fenmu == 1) cout << z.fenzi << endl; else cout << z.fenzi << "/" << z.fenmu << endl; return 0; } // 请在此添加代码,实现函数rnMean /********** Begin *********/ rationalNumber rnMean(rationalNumber a[], int n) { rationalNumber m = { 0,1 }; for (int i = 0; i < n; i++) { int s; int a = m.fenmu > a[i].fenmu ? m.fenmu : a[i].fenmu; for (int i = a; i++;) { if (i % m.fenmu == 0 && i % a[i].fenmu == 0) { s = i; break; } } int tmp1 = s / m.fenmu; int tmp2 = s / a[i].fenmu; m.fenzi = m.fenzi * tmp1 + a[i].fenzi * tmp2; } m = reduction(m); return m; } /********** End **********/ 修改一下使之正确
时间: 2024-01-25 15:05:13 浏览: 153
使用include <iostream>时一定要加using namespace std
好的,这段代码存在一些问题,需要做出如下修改:
1.在循环中,第二个参数应该是比较i和a[i].fenmu的大小,而不是比较i和1。
2.在计算tmp1和tmp2时,应该分别计算s除以m.fenmu和s除以a[i].fenmu的商,而不是直接将s除以m.fenmu或a[i].fenmu。
3.在计算有理数平均数时,应该将分子和分母分别累加,而不是只累加分子。
修改后的正确代码如下:
```c++
#include <iostream>
using namespace std;
struct rationalNumber {
int fenzi; // 分子
int fenmu; // 分母
};
rationalNumber reduction(rationalNumber n) {
rationalNumber m;
int s = (n.fenzi > n.fenmu ? n.fenzi : n.fenmu);
int a;
for (int i = s; s > 0; s--)
{
if (n.fenzi % s == 0 && n.fenmu % s == 0)
{
a = s;
break;
}
}
m.fenzi = n.fenzi / a;
m.fenmu = n.fenmu / a;
return m;
}
// 函数rnMean:计算n个有理数的平均数
// 参数:a-存放有理数的数组,n-有理数的个数
// 返回值:n个有理数的平均数
rationalNumber rnMean(rationalNumber a[], int n);
int main() {
char c;
rationalNumber a[100], z;
int n, i;
cin >> n;
// 输入有理数个数
// 输入n个有理数
for (i = 0; i < n; i++)
cin >> a[i].fenzi >> c >> a[i].fenmu;
z = rnMean(a, n);
// 计算有理数平均数
// 输出平均数
if (z.fenmu == 1)
cout << z.fenzi << endl;
else
cout << z.fenzi << "/" << z.fenmu << endl;
return 0;
}
// 请在此添加代码,实现函数rnMean
/********** Begin **********/
rationalNumber rnMean(rationalNumber a[], int n) {
rationalNumber m = { 0,1 };
for (int i = 0; i < n; i++)
{
int s;
int a_max = m.fenmu > a[i].fenmu ? m.fenmu : a[i].fenmu;
for (int j = a_max; j <= m.fenmu * a[i].fenmu; j++)
{
if (j % m.fenmu == 0 && j % a[i].fenmu == 0)
{
s = j;
break;
}
}
int tmp1 = s / m.fenmu;
int tmp2 = s / a[i].fenmu;
m.fenzi = m.fenzi * tmp1 + a[i].fenzi * tmp2;
m.fenmu *= tmp1;
}
m = reduction(m);
return m;
}
/********** End **********/
```
阅读全文