【发布时间】:2016-03-24 10:46:17
【问题描述】:
我几天前开始学习 C 语言,但我很难完成这个简单的任务。
我需要做的是:
在动态数组中(所有数字都应该由用户输入)找到一对偶数及其平均值( (arr[i] + arr[i+1])/2) ) 应该加在这对偶数之间
我写了这段代码:
#include "stdafx.h"
int *fillArray(int *arraySize);
int findPairs(int *array, int arraySize);
int newArray(int *array, int arraySize, int avg, int avgPos);
void printArray(int *array, int arraySize);
int main() {
int *array;
int arraySize;
// Creating the array
array = fillArray(&arraySize);
// Printing the array, which was entered
printf("You just have entered this: \n");
printArray(array, arraySize);
// Finding a pair of even numbers
findPairs(array, arraySize);
// Printing the new array
printf("The new array looks like this now! \n");
printArray(array, arraySize);
free(array);
_getch();
}
// Creating dynamicly allocated array
int *createArray(int arraySize) {
int *array;
array = (int*) malloc ( sizeof(int) * arraySize);
if (array == NULL) {
printf("No memmory avaible/n");
exit(8);
}
return array;
}
// Function for filling the array with elements
int *fillArray(int *arraySize) {
int *array = NULL;
// Array size
printf("Enter array size: ");
while (*arraySize < 2) {
scanf_s("%d", *&arraySize);
if (*arraySize < 2) {
printf("Array size should be bigger than 2! \n");
scanf_s("%d", *&arraySize);
}
}
// Calling function for creating array
array = createArray(*arraySize);
// Filling the array with numbers
printf("Enter %d numbers: \n", *arraySize);
for (int i = 0; i < *arraySize; i++) {
scanf_s("%d", &array[i]);
}
return array;
}
// Function for finding pairs of even numbers
int findPairs(int *array, int arraySize) {
int avg = 0, avgPos = 0;
for (int i = 0; i < arraySize; i++) {
if (array[i] % 2 == 0 && array[i + 1] % 2 == 0) {
avg = (array[i] + array[i + 1]) / 2;
avgPos = i + 1;
//Resizing the array size +1 position
*array = newArray(array, arraySize, avg, avgPos);
i++;
}
}
return *array;
}
// Function transfering into new array
int newArray(int *array, int arraySize, int avg, int avgPos) {
int *newArr = NULL;
arraySize++;
newArr = createArray(arraySize);
// Copy all the elements from 0 to the first position of first pair even numbers
for (int i = 0; i < avgPos; i++) {
newArr[i] = array[i];
}
// Add the average number between the even numbers
newArr[avgPos] = avg;
// Copy rest of the elements
for (int i = avgPos + 1; i < arraySize; i++) {
newArr[i] = array[i - 1];
}
free(array);
return *newArr;
}
// Function for printing the array
void printArray(int *array, int arraySize) {
for (int i = 0; i < arraySize; i++) {
printf("%d ", array[i]); printf("\n");
}
}
它在控制台中启动没有任何问题,但是在你用数字填充数组后,你会得到这个错误:
填充数组后出错:
错误列表中的错误:
我哪里做错了?
【问题讨论】:
-
不要发布文字图片!见How to Ask。
-
您是否考虑过创建一个列表?
-
fillArray1)while (*arraySize < 2) {*arraySize未初始化 2)scanf_s("%d", *&arraySize);-->scanf_s("%d", arraySize); -
也许
for (int i = 0; i < arraySize; i++)→for (int i = 0; i < arraySize - 1; i++)在findPairs函数中。 -
return *newArr;-->return newArr;还有int *newArray(和array = newArray(