我有一个我写的代码,基本上它的作用是array从用户那里获取一个命名的动态数组的大小和要插入它的数字,然后将数组发送到函数PartialSums。
PartialSums应该从 中获取数字array[i],将其添加到 中sum,然后放入sum,newarray[i]直到数组的末尾arraysize,之后它应该返回newarray并main打印两个数组。
我想您可以将其视为每个单元格array与之前的单元格的阶乘,但它将数字相加而不是相乘。
最后应该包含的内容示例newarray:
arraysize = 5
array = 1,2,3,4,5
newarray should be: 1,3,6,10,15
just to show what it looks like mathematically: 1,2+1,3+2+1,4+3+2+1,5+4+3+2+1
这是代码:
#include <stdio.h>
#include <stdlib.h>
int *PartialSums(int arrsize, int *array) {
int *newarray;
int sum = 0;
int i;
newarray = (int *)malloc(arrsize * sizeof(int));
for (i = 0; i < arrsize; i++) {
sum = sum + array[i];
newarray[i] = sum;
}
return newarray;
}
int main() {
int *array;
int *newarray;
int arrsize;
int num;
int flag = 1;
int i;
do {
printf("please insert amount of numbers to enter\n");
scanf("%d", &arrsize);
array = (int *)malloc(arrsize * sizeof(int));
newarray = (int *)malloc(arrsize * sizeof(int));
/* if memory cannot be allocated */
if (array == NULL || newarray == NULL) {
printf("Error! memory not allocated.\n\n");
flag = 0;
}
} while (flag = 0);
for (i = 0; i < arrsize; i++) {
printf("please insert a number: ");
scanf("%d", &num);
array[i] = num;
}
*newarray = PartialSums(arrsize, array);
printf("this is the main array: ");
for (i = 0; i < arrsize; i++) {
printf("%d", array[i]);
if (i < arrsize - 1)
printf(",");
}
printf("\nthis is the new array: ");
for (i = 0; i < arrsize; i++) {
printf("%d", newarray[i]);
if (i < arrsize - 1)
printf(",");
}
free(array);
free(newarray);
return 0;
}
直到总和部分一切正常,但由于某种原因,打印是这样的:
这是新数组: 18825296,0,0,0,0
第一个数字每次都会改变
我猜问题出在函数中,这意味着插入sum到newarray
或者它的东西newarray回到main
问题是我不知道我做错了什么,希望你们能帮助我理解。