繁体   English   中英

C-一维数组组中的最大值

[英]C - maximum value from one dimensional array's groups

因此,我的任务是让用户填充一维数组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;
    }

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

开始之前的一个观察:数组A中的组g成员位于索引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[]
}
#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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM