我需要在数组中存储一些整数并用字母符号打印它们

时间:2018-12-17 18:05:06

标签: c arrays

问题是;我正在做作业。我需要读取一个数组的值,该数组的行和列的大小(2-D数组)首先是给定的。读取值后,我需要使用冒泡排序算法以降序对其进行排序。问题是;我需要为每个整数值分配一个字符(从A到Z)(对其进行命名/分类),并使用我为其分配的字符对整数值进行排序...

#include <stdio.h>
#define IL 81
#define PARTI 26

        ///Variables:
int partiSayisi;

/**This variable is going to take a value between [0,81]
  *so it will be ROW of the array when I read values.*/   
int plakaKodu;

/**This is equal to 'plakaKodu', and I'm using it as the index,
  *if I use the actual variable as the index, it isn't working. (Not
  *sure why...)*/
int plakaKoduIndex;

/**The 2D array which holds variables I read from input.*/
int oySiniflama[IL][PARTI] = {0};

char partiIsimleri[26]= 
 {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q',
                'R','S','T','U','V','W','X','Y','Z'};

 ///Function Prototypes:
//------------------------------------------//
void oyAl(int partiSayisi, int plakaKoduIndex); //Input Routine
//-------------------------------------------//
void ilOyGoster(int plakaKoduIndex, int partiSayisi); //Output Routine
//-------------------------------------------//
/**Bubble Sort Function:*/
void bubbleSort();
//-------------------------------------------//

   ///Functions.:
//-------------------------------------------//
void oyAl(int partiSayisi, int plakaKoduIndex)
{
    int i;
    char j='A';

    for(i=0; i<partiSayisi; i++)
    {
        printf("%c Partisi'nin oy sayisini giriniz: ", j);
        scanf(" %d", &oySiniflama[plakaKoduIndex-1][i]);
        ++j;
    }
}

//-------------------------------------------//
void ilOyGoster(int plakaKoduIndex, int partiSayisi)
{
    int i;
     for(i=0; i<partiSayisi; i++)
    {
        printf("\n %c Partisi: %d oy.", partiIsimleri[i], 
        oySiniflama[plakaKoduIndex-1][i]);

    }
}
//-------------------------------------------//
void bubbleSort()
{
    /**Bubble Sort icin: */
    int i = 0, j=0, m=0, gecici_int;
    char gecici_char;
    for(m=1; m<(IL*PARTI); m++)
    {
        for(i=0; i<IL; i++)
        {
            for(j=0; j<PARTI-1; j++)
            {
                if(oySiniflama[i][j] != 0)
                {
                    if(oySiniflama[i][j] < oySiniflama[i][j+1])
                    {
                        gecici_int = oySiniflama[i][j];
                        oySiniflama[i][j] = oySiniflama[i][j+1];
                        oySiniflama[i][j+1] = gecici_int;
                    }
                    if(oySiniflama[i][j] < oySiniflama[i][j+1]);   
                    {
                        gecici_char = partiIsimleri[j];
                        partiIsimleri[j] = partiIsimleri[j+1];
                        partiIsimleri[j+1] = gecici_char;
                    }
                }
            }
        }
//For control.
        for(i=0; i<IL-1; i++)
        {
            if (oySiniflama[i][PARTI-1] > oySiniflama[i+1][0])
            {
                gecici_int = oySiniflama[i][PARTI-1];
                oySiniflama[i][PARTI-1] = oySiniflama[i+1][0];
                oySiniflama[i+1][0] = gecici_int;
            }

            if (oySiniflama[i][PARTI-1] > oySiniflama[i+1][0])
            {
                gecici_char = partiIsimleri[i];
                partiIsimleri[i] = partiIsimleri[i+1];
                partiIsimleri[i+1] = gecici_char;
            }
        }
    }
}
//-------------------------------------------//

预期的输入和输出:

预期输入

//TEST
A Partisi'nin oy sayisini giriniz: 3082
B Partisi'nin oy sayisini giriniz: 2556
C Partisi'nin oy sayisini giriniz: 1900
D Partisi'nin oy sayisini giriniz: 2581
E Partisi'nin oy sayisini giriniz: 2000
F Partisi'nin oy sayisini giriniz: 1255
G Partisi'nin oy sayisini giriniz: 12

我按照指示输入了屏幕;输入一个字符(从A到Z)以对该整数值进行分类;现在这是预期的输出:

预期产量

A Partisi   3082
D Partisi   2581
B Partisi   2556
E Partisi   2000
C Partisi   1900
F Partisi   1255
G Partisi   12

如何将char分配给整数,然后使用Bubble Sort作为我的排序算法,并使用Function和Arrays(如严格的分配规则)对它们进行排序? (而且我不能使用结构...)

〜感谢您抽出宝贵的时间...

(PS。感谢您向我解释发布规则。这是我第一次在这里写问题,很抱歉写了一个难以理解的问题……我尽快对其进行了编辑。)

(PS。[@John Bode]感谢您抽出宝贵的时间。即使我第一次写了一个不清楚的问题……现在我也对其进行了编辑,以便其他人也需要类似的帮助时也可以寻求帮助。

1 个答案:

答案 0 :(得分:1)

如果我理解您的问题,您想要一种使用partiIsimleri数组将字符值存储为整数值而没有的方法,对吗?

可能最简单的方法是使用struct类型:

struct labeled_value {
  int value;
  char label;
};

您将oySinfiflama声明为

struct labeled_value oySiniflama[IL][PARTI] = {{0,0}};

您将更改输入例程以使用以下内容:

for(i=0, j='A'; i<partiSayisi; i++, j++)
{
    printf("%c Partisi'nin oy sayisini giriniz: ", j);
    scanf(" %d", &oySiniflama[plakaKoduIndex-1][i].value);
    oySiniflama[plakaKoduIndex-1][i].label = j;
}

您将按照以下方式更改气泡状泡沫的胆量:

if(oySiniflama[i][j].value < oySiniflama[i][j+1].value )   /* Azalan sirada siralamak icin, > u < e cevir. */
{
    struct labeled_value gecici = oySiniflama[i][j];
    oySiniflama[i][j] = oySiniflama[i][j+1];
    oySiniflama[i][j+1] = gecici;
}

IOW,您在value成员上进行比较,但是交换了整个struct值。这使您完全摆脱了partiIsimleri数组,因此可以完全从bubblesort例程中删除该部分。

然后,您的输出代码将显示为:

for(i=0; i<partiSayisi; i++)
{
    printf("\n %c Partisi: %d oy.", oySiniflama[plakaKoduIndex-1][i].label, oySiniflama[plakaKoduIndex-1][i].value);
}

编辑

  

问题出在哪里;我不能使用结构。正如我在信息中所说的;我只能使用C的基本功能以及一些中间功能(函数和数组)。规则很严格,这就是为什么我在努力……

噢,为了████,struct 是“ C的基本特征”。为使这项作业比需要的 1 难点给老师打耳光。

好吧,那么,您将不得不使用单独的数组来维护标签,并且它也必须是2D数组(这样,每个数字都有一个唯一的标签元素):

char partiIsimleri[IL][PARTI];

因此您的输入例程将如下所示:

for(i=0, j='A'; i<partiSayisi; i++, j++)
{
    printf("%c Partisi'nin oy sayisini giriniz: ", j);
    scanf(" %d", &oySiniflama[plakaKoduIndex-1][i]);
    partiIsimleri[plakaKoduIndex-1][i] = j;
}

您可以收紧气泡排序:

if(oySiniflama[i][j] != 0)
{
    if(oySiniflama[i][j] < oySiniflama[i][j+1])   /* Azalan sirada siralamak icin, > u < e cevir. */
    {
        gecici_int = oySiniflama[i][j];
        oySiniflama[i][j] = oySiniflama[i][j+1];
        oySiniflama[i][j+1] = gecici_int;

        gecici_char = partiIsimleri[i][j];
        partiIsimleri[i][j] = partiIsimleri[i][j+1];
        partiIsimleri[i][j+1] = gecici_char;
    }
}

也就是说,您可以在同一个循环中执行两个操作,而不是两个单独的循环来交换整数和标签。您真的不想在气泡排序中添加更多的循环。


  1. 开玩笑。实际上不要打你的老师。即使他们真的应得的,也可以使您假装正在编写Fortran 77。