【问题标题】:Array issue in CC中的数组问题
【发布时间】:2020-04-22 03:11:51
【问题描述】:

我有一个 C 编程的大学项目。我遇到了以下任务的问题。我的程序应该在两个数组中排序数字。在第一个数组中,我必须保存(每五个元素中最大的一个),这是我的问题。我不知道如何使读取五个元素的循环比较它们,取最大的一个,然后继续对其他元素执行此操作。我希望有人帮忙,因为我被屏蔽了。

#define A 100

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


void show(int x[], int nx); //функция за показване на масивите
float vavedi(int x[], int nx); //функция, чрез която ръчно въвеждаме числата и ги обработваме
FILE* readFile(char* fname); //функция която чете файл и представя съдържанието му като масиви

int main()
{
    int call, a = 0, b = 0, mode = 0, i = 0;
    int check = 0;
    char fail[A];
    char* menu[] = {
     "PROGRAM STARTED!",
     "Enter an option:",
     "1 : Write the numbers.",
     "2 : Choose from a file.",
     "0 : Exit."
    };

    do {
        for (i = 0; i < 5; i++)
        printf("%s\n", menu[i]);

        check=scanf("%d", &mode);

            if (check != 1)
                printf("ERROR! Try again!");


        switch (mode)
        {
            case 1: {
                //в случай 1 числата се въведждат от потребителя
                call = vavedi(a, b);
                break;
            }

            case 2: {
                //в случай 2 потребителя използва съществуващ файл
                printf("Enter the path of the file you want to open:\n");
                scanf("%s", fail);
                call = readFile(fail);
                if (call == NULL) {
                    printf("The file doesn't exist! Try again!\n");
                }
                break;
            }
            case 0:
                break;

            default:
            {
                printf("ERROR! Try again!\n");
            }
        }

    } while (mode != 0);

    printf("\nThe program ended!\n");
    return 0;
}
void show(int x[], int nx)
{
    int k;
    for (k = 0; k < nx; k++)
        {
         printf("\n Element[%d]= %d", k, x[k]);
        }
}

float vavedi(int x[], int nx)
{
    int call=0;
    int enter=0;
    int imin, max;
    int b[A], c[A];
    int i, j, j1, count;
    j = 0;
    do {
        printf("\nCount of the elements:");
        scanf("%d", &count);
            if (count <= 0 || count > 100)
                printf("Invalid input! Try again!\n");
    } while (count <= 0 || count > 100);

    for (i = 0; i < count; i++)
    {
        printf("\nEnter an element:");
        scanf("%d", &c[i]);
    } 


    printf("\n");
    return enter;
}

【问题讨论】:

  • i 在您的第二个循环中永远不会改变...
  • max5(a, b, c, d, e) 可以实现为max(a, max(b, max(c, max(d, e))))(其中max 是您的教科书函数(或宏),它返回两个值中的最大值)

标签: c arrays function sorting


【解决方案1】:

更新:包括@pmg 提到的头文件。

如果我理解正确,您的问题是为每五个元素找到最大的元素:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    #include <limits.h> // Put this after your header files
    ..
    .. //Rest of the code.
    ..
    for (i = 0; i < count; i++)
    {
       printf("\nEnter an element:");
       scanf("%d", &c[i]);
    } 

   size_t size = ceil(count/5.0);
   memset(b , INT_MIN , size);
   for(int i = 0 ; i < count ; i++)
   {
      b[i/5] = b[i/5] > c[i] ? b[i/5] : c[i];
   }

   // Print b like this:
   for(i = 0 ; i < size; i++)
       printf("%d" , b[i] );       

让我们看看这对于大小为9 的数组是如何工作的。数组的索引将从 0 to 8 开始。如果我将它们中的每一个除以 5,我得到 0 对应 i = 0 to 41 对应 i = 5 to 8。现在我们可以对 5 个桶中的元素进行最大处理。您似乎是初学者,希望这有助于您更好地理解。

【讨论】:

  • 我知道什么是 INT_MAX 以及如何使用它?
  • INT_MAX 定义在&lt;limits.h&gt;
  • @ЦветомирБановски 请立即查看。
  • 我现在的最大值有问题
  • @ЦветомирБановски 请说明您的问题。
【解决方案2】:

另一个问题如下:

{

   int c[A], b[A];
   int i = 0, j = 0, k = 0, num;
   FILE* fp= NULL; //указател за файл
   fp = fopen(fname, "r");
   if (fp)
   {
       while (fscanf(fp, "%d", &c[i]) != EOF)
       i++;

      num=i;
    size_t size = ceil(num/5.0);
    memset(b , INT_MIN , size);
    for(i = 0 ; i < num ; i++)
   {
     b[i/5] = b[i/5] > c[i] ? b[i/5] : c[i];
   }
   printf("\nARRAY1:\n");
   for(i = 0 ; i < size; i++)
   {
    buble(b, i);
    printf(" Element[%d]=%1d\n", i, b[i]);
   }

   printf("\nARRAY2:");
   buble(c, num);
   show(c, num);

   printf("\n");

   }
  fclose(fp);
return fp;
}

It doesn't calculate the rigth way.

【讨论】:

  • @E.N.D 你怎么看?
猜你喜欢
  • 1970-01-01
  • 2021-11-23
  • 2011-10-02
  • 2018-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多