【问题标题】:Find a pair of even number in array and insert their average between them [closed]在数组中找到一对偶数并在它们之间插入它们的平均值[关闭]
【发布时间】: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
  • 您是否考虑过创建一个列表?
  • fillArray 1) while (*arraySize &lt; 2) { *arraySize 未初始化 2) scanf_s("%d", *&amp;arraySize); --> scanf_s("%d", arraySize);
  • 也许for (int i = 0; i &lt; arraySize; i++)for (int i = 0; i &lt; arraySize - 1; i++)findPairs 函数中。
  • return *newArr; --> return newArr; 还有int *newArray(array = newArray(

标签: c arrays dynamic


【解决方案1】:

试试这个(那些已经被指出的修改)

#include <stdio.h>
#include <stdlib.h>
#include <conio.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 = 0;

   // 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
   array=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 -1; 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);
            ++*arraySize;
            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");
    }
}

【讨论】:

  • 我错过了一些东西,比如 ++*arraySize。谢谢!
猜你喜欢
  • 2019-09-21
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 2021-05-19
  • 2018-02-10
  • 2022-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多