c语言编写函数inputints(),动态分配内存,保存用户输入的n个整数,返回保存这些整数的内存区的基地址。n的值在本函数被调用前已知。函数原型如下:int*input ints(intn); 编写函数sum all(),以inputints()返回的指针和数组元素个数n为参数,对该数组中任意数目的任意相邻元素求和,动态分配内存,保存这些元素的和(此数组称为和数组),对和数组按照元素从小到大的顺序进行排序,返回排序后的和数组的基地址。 例如:如果传入的数组为{1,2,3},则其和数组为{1,3,6,2,5,3},本函数返回的排序后的和数组应为{1,2,3,3,5,6}。即:取0号元,作为从0号元开始的只包含1个相邻元素的和;取0号元和1号元求和,作为从0号元开始的包含2个相邻元素的和:取0号元、1号元和2号元求和,作为从0号元开始的包含3个相邻元素的和。取1号元,作为从1号元开始的只包含1个相邻元素的和,……… 函数原型如下:int *sum all( constint*src,intn):
时间: 2024-03-20 15:39:31 浏览: 42
以下是inputints()和sumall()函数的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
int* inputints(int n) {
int* arr = (int*)malloc(n * sizeof(int)); // 动态分配内存
printf("请输入%d个整数:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]); // 保存用户输入的n个整数
}
return arr; // 返回数组的基地址
}
int* sumall(const int* src, int n) {
int count = n * (n + 1) / 2; // 和数组的元素个数
int* sum_arr = (int*)malloc(count * sizeof(int)); // 动态分配内存
int k = 0; // sum_arr的下标
for (int i = 0; i < n; i++) {
int sum = 0;
for (int j = i; j < n; j++) {
sum += src[j]; // 求和
sum_arr[k++] = sum; // 保存到和数组中
}
}
// 对和数组进行排序
for (int i = 0; i < count - 1; i++) {
for (int j = i + 1; j < count; j++) {
if (sum_arr[i] > sum_arr[j]) {
int temp = sum_arr[i];
sum_arr[i] = sum_arr[j];
sum_arr[j] = temp;
}
}
}
return sum_arr; // 返回和数组的基地址
}
```
使用示例:
```c
int main() {
int n = 3;
int* arr = inputints(n);
int* sum_arr = sumall(arr, n);
printf("和数组:\n");
for (int i = 0; i < n * (n + 1) / 2; i++) {
printf("%d ", sum_arr[i]);
}
free(arr); // 释放内存
free(sum_arr);
return 0;
}
```
输入:
```
请输入3个整数:
1 2 3
```
输出:
```
和数组:
1 2 3 3 5 6
```
阅读全文