利用指向指针的指针或指针数组,计算二维数组的平均数
时间: 2023-12-20 09:47:09 浏览: 195
可以使用指向指针的指针或指针数组来计算二维数组的平均数,具体实现方法如下:
假设二维数组为arr,有m行n列,则可以定义一个指向指针的指针p,p指向一个长度为m的指针数组,每个指针指向一行元素,如下所示:
```
int **p = new int*[m];
for (int i = 0; i < m; i++) {
p[i] = arr[i];
}
```
也可以使用指针数组来实现,如下所示:
```
int *p[m];
for (int i = 0; i < m; i++) {
p[i] = arr[i];
}
```
然后,可以遍历二维数组,计算平均数,如下所示:
```
int sum = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
sum += p[i][j];
}
}
double avg = (double)sum / (m * n);
```
其中,p[i][j]表示第i行第j列的元素,sum表示所有元素之和,avg表示平均数。
最后,记得释放指针数组的内存,如下所示:
```
delete[] p;
```
相关问题
请用C语言编写如下程序:利用指向指针的指针或指针数组,计算二维数组的平均数。
以下是用指针数组实现的二维数组平均数计算程序:
```c
#include <stdio.h>
#define ROWS 3
#define COLS 4
int main() {
int a[ROWS][COLS] = { {2, 4, 6, 8},
{3, 5, 7, 9},
{1, 8, 2, 6} };
int *p[ROWS];
for(int i=0; i<ROWS; i++) {
p[i] = a[i];
}
int sum = 0;
for(int i=0; i<ROWS; i++) {
for(int j=0; j<COLS; j++) {
sum += *(p[i]+j);
}
}
float avg = (float)sum/(ROWS*COLS);
printf("二维数组的平均数为:%.2f\n", avg);
return 0;
}
```
解释:
- 首先定义一个二维数组 `a`,包含 3 行 4 列;
- 然后定义一个指针数组 `p`,长度为 3,每个元素都是指向 `int` 类型的指针;
- 将指针数组的每个元素都指向二维数组的每一行;
- 使用两重循环遍历二维数组,累加每个元素的值;
- 最后计算平均数,输出结果。
注意:
- 在计算平均数的时候,需要将累加和转换成 `float` 类型,以便得到正确的结果;
- `%f` 格式化字符串默认输出 6 位小数,可以通过 `.2` 来限制小数位数。
请用C语言编写如下程序:用指向指针的指针或指针数组,计算二维数组的平均数(选做)。
以下是用指向指针的指针实现的代码:
```c
#include <stdio.h>
#define ROWS 3
#define COLS 4
int main()
{
int arr[ROWS][COLS] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
int *ptr[ROWS]; // 指向指针的指针
for (int i = 0; i < ROWS; i++) {
ptr[i] = arr[i]; // 每个指针指向二维数组的一行
}
int sum = 0;
int count = 0;
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
sum += *(ptr[i] + j); // 计算总和
count++; // 元素个数加1
}
}
float avg = (float)sum / count; // 计算平均数
printf("平均数:%f\n", avg);
return 0;
}
```
以下是用指针数组实现的代码:
```c
#include <stdio.h>
#define ROWS 3
#define COLS 4
int main()
{
int arr[ROWS][COLS] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
int *ptr[ROWS]; // 指针数组
for (int i = 0; i < ROWS; i++) {
ptr[i] = arr[i]; // 每个指针指向二维数组的一行
}
int sum = 0;
int count = 0;
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
sum += *(ptr[i] + j); // 计算总和
count++; // 元素个数加1
}
}
float avg = (float)sum / count; // 计算平均数
printf("平均数:%f\n", avg);
return 0;
}
```
阅读全文