上述代码,如果我不想手动输入数组长度,应如何修改
时间: 2024-03-14 13:47:28 浏览: 59
如果您不想手动输入数组长度,可以使用动态内存分配来分配数组空间。在这种情况下,您可以使用 `malloc` 函数来分配空间,并在输入数据后根据实际输入的元素个数重新分配空间。以下是修改后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
void input(int **p, int *len);
void output(int *p);
int sum(int *p, int len);
int aver(int *p, int len);
void input(int **p, int *len) {
printf("please input the length of the array: ");
scanf("%d", len);
*p = (int*)malloc(*len * sizeof(int));
printf("please input the numbers: ");
for(int i = 0; i < *len; i++) {
scanf("%d", *p+i);
}
}
int sum(int *p, int len) {
int res = 0;
for(int i = 0; i < len; i++) {
res += *(p+i);
}
return res;
}
int aver(int *p, int len) {
int res = sum(p, len) / len;
return res;
}
int main(void) {
int *arr;
int len;
input(&arr, &len);
int res = sum(arr, len);
printf("summation = %d\n", res);
res = aver(arr, len);
printf("average = %d\n", res);
free(arr);
return 0;
}
```
在这个版本的程序中,`input` 函数接受一个指向指针的指针 `**p` 和一个指向整数的指针 `len`,并使用 `malloc` 分配一个大小为 `len` 的整数数组。在输入数据后,程序使用 `realloc` 函数重新分配数组空间,以匹配实际输入的元素数量。`sum` 和 `aver` 函数也相应地修改为接受数组长度作为参数。记得在程序结束前使用 `free` 函数释放动态分配的内存。
阅读全文