C - 来自一维数组的最大值

时间:2016-12-12 15:18:38

标签: c arrays max

所以,我的任务是让用户填充一维数组A.这个数组在每个组中有M个组和P个成员。我需要用A数组中的每个组的最大值填充数组B,然后在每个组中显示最大值的结果。我无法找到任何方法来做到这一点。我非常感谢你的帮助,因为我是一名初学程序员,并尽力学习。所以我在代码中的主要问题是fillBArray函数。

#include <stdio.h>
#include <stdlib.h>

int checkingvariable(int k, int a, int b);
void fillArray(int M, int P,int A[]);
void printArray(int M, int P,int A[]);
void fillBArray(int M, int P,int A[]);


int main()
{

int M, P;

    printf("Enter M (the number of groups): ");
    scanf("%d", &M);

    M=checkingvariable(M, 1, 10);

    printf("Enter P (the number of cars in one group): ");
    scanf("%d", &P);

    P=checkingvariable(P, 1, 10);
    int i = P*M;
    int A[i];
    fillArray(M, P, A);
    printArray(M, P, A);
    fillBArray(M, P, A);
    return 0;
}

void printArray(int M, int P,int A[])
    {
        int i;
        for (i=0 ; i< M*P ; i++)
        {
              printf("%d ", A[i]);
              printf("\n");
        }
    }

void fillArray(int M, int P, int A[])
    {

        int i;
        for (i=0 ; i< M*P ; i++)
        {
             printf("Enter speed of car %d: ", i+1);
             scanf("%d", &A[i]);
        }

    }

void fillBArray(int M, int P, int A[])
{
    int c, k=0;
    int maximum = A[0];
    int B[M], group;
    for (c = 0; c < P*M; c++)
    {
        if (A[c] > maximum)
        {
            maximum  = A[c];
        }
        maximum = B[k];
        printf("Maximum value for %d group is: %d", group, maximum);
    }
}

int checkingvariable(int k, int a, int b)
    {
        if (k<a || k>b)
            {
                while(k<a || k>b)
                    {
                        printf("Enter correct value between %d and %d: ", a, b);
                        scanf("%d", &k);
                    }
            }
            return k;
    }

2 个答案:

答案 0 :(得分:1)

一种方法是用两个嵌套循环替换一个循环。外部循环将迭代组,而嵌套循环将迭代每个组中的成员。

开始之前的一个观察:数组g中的组A的成员位于索引g*P(包含)和(g+1)*P之间,不包括在内。组的成员m位于索引A[g*P + m]

现在应该清楚如何制作你的循环:

for (int g = 0 ; g != M ; g++) { // Groups
    int max = A[g*P];
    for (int m = 1 ; m != P ; m++) { // Members
        ... // Compute max
    }
    // Store max for group g in B[]
}

答案 1 :(得分:1)

#include <stdio.h>
#include <stdlib.h>

int checkingvariable(int k, int a, int b);
void fillArray(int M, int P,int A[]);
void printArray(int M, int P,int A[]);
void fillBArray(int M, int P,int A[]);


int main()
{

int M, P;

    printf("Enter M (the number of groups): ");
    scanf("%d", &M);

    M=checkingvariable(M, 1, 10);

    printf("Enter P (the number of cars in one group): ");
    scanf("%d", &P);

    P=checkingvariable(P, 1, 10);
    int i = P*M;
    int A[i];
    fillArray(M, P, A);
    printArray(M, P, A);
    fillBArray(M, P, A);
    return 0;
}

void printArray(int M, int P,int A[])
    {
        int i;
        for (i=0 ; i< M*P ; i++)
        {
              printf("%d ", A[i]);
              printf("\n");
        }
    }

void fillArray(int M, int P, int A[])
    {

        int i;
        for (i=0 ; i< M*P ; i++)
        {
             printf("Enter speed of car %d: ", i+1);
             scanf("%d", &A[i]);
        }

    }

/*void fillBArray(int M, int P, int A[])
{
    int c, k=0;
    int maximum = A[0];
    int B[M], group;
    for (c = 0; c < P; c++)
    {
        if (A[c] > maximum)
        {
            maximum  = A[c];
        }
        if (c < P)
        {
            group = 1;
            maximum = A[c];
            printf("Maximum value for %d group is: %d", group, maximum);
        }
        if (c < P*2)
        {
            group = 2;
            k=1;
            maximum = A[c];
            printf("Maximum value for %d group is: %d", group, maximum);
        }
    }
}*/

void fillBArray(int M, int P, int A[])
{
    int B[M], maximum = 0, m;
    for (int g = 0 ; g != M ; g++)// Groups
    {
        int max = A[g*P];
        for (m = 0 ; m != P ; m++) // Members
        {
            if (A[g*P + m] > maximum)
            {
                maximum = A[g*P + m];
            }
        }
    B[g] = maximum;
    printf("Maximum value for %d group is: %d", g+1, maximum);
    printf("\n");
    maximum = 0;
    }
}

int checkingvariable(int k, int a, int b)
    {
        if (k<a || k>b)
            {
                while(k<a || k>b)
                    {
                        printf("Enter correct value between %d and %d: ", a, b);
                        scanf("%d", &k);
                    }
            }
            return k;
    }

这是我的问题的答案,请检查fillBArray。