帮我修改这段代码#include<stdio.h> int main() { int a[5][4] = {0}; float b[5] = {0.f}; int *p[5] = {a[0], a[1], a[2], a[3], a[4]}; int sum[5] = {0}; int *p1 = sum; float *q = b, ave; int i, j; for(i = 0; i < 5; i++) { for(j = 0; j < 4; j++) { scanf("%d", *(p[i] + j)); *(p1 + i) += *(p[i] + j); } } for(i = 0; i < 5; i++) { *(q + i) = *(p1 + i) / 4; printf("%.2f ", (q + i)); } return 0; }
时间: 2023-06-18 21:03:08 浏览: 85
修改后的代码如下:
```c
#include <stdio.h>
int main() {
int a[5][4] = {0};
float b[5] = {0.f};
int *p[5] = {a[0], a[1], a[2], a[3], a[4]};
int sum[5] = {0};
int *p1 = sum;
float *q = b;
int i, j;
for (i = 0; i < 5; i++) {
for (j = 0; j < 4; j++) {
scanf("%d", *(p + i) + j);
*(p1 + i) += *(*(p + i) + j);
}
}
for (i = 0; i < 5; i++) {
*(q + i) = (float) *(p1 + i) / 4;
printf("%.2f ", *(q + i));
}
return 0;
}
```
主要修改如下:
1. 在第一个 for 循环中,修改了 `*(p[i] + j)` 为 `*(*(p + i) + j)`,表示通过指针数组 `p` 访问二维数组 `a` 的元素,这样可以使代码更加简洁,避免使用指针数组下标的方式。
2. 在第二个 for 循环中,修改了 `(q + i)` 为 `*(q + i)`,表示访问指针数组 `q` 中第 `i` 个元素的值,同时将 `(q + i)` 修改为 `*(q + i)`,表示访问指针数组 `q` 中第 `i` 个元素的地址,这样可以正确打印出平均值。同时在计算平均分时需要将分数转化为浮点数,所以需要将 `(float)` 强制类型转换放在除法运算符前面。
阅读全文