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

标签 c arrays

问题是;我正在做作业。我需要读取首先给出的行和列(二维数组)大小的数组的一些值。读取值后,我需要使用冒泡排序算法按降序对它们进行排序。问题是;我需要为每个整数值分配一个字符(从 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

如何将一个字符分配给一个整数,并使用冒泡排序作为排序算法并使用函数和数组(分配规则很严格)对它们进行排序(如上所示)? (而且我不能使用结构......)

~感谢您抽出时间...

(PS。感谢您向我解释发帖规则。这是我第一次在这里写问题,抱歉写了一个难以理解的问题......我尽快编辑了它。)

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

最佳答案

如果我理解您的问题,您需要一种方法来存储带有整数值的字符值而不使用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);
}

编辑

Bu the problem is; I can't use structs. As I said in information; I only can use basic features of C and some of the intermediate ones (Functions & Arrays). Rules are strict, that is why I am struggling...

哦,看在████的份上,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,确实值得这么做。

关于c - 我需要在数组中存储一些整数并用字母符号打印它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53820807/

相关文章:

c - fwrite 没有在缓冲区中发送我想要的内容

c++ - 这是否被视为 C/C++ 中的未定义行为?

c - 在 C 中访问多维字符串数组的元素

arrays - 查找给定数组中每个窗口大小的最大值和最小值

c - 使用自定义系统调用编译 Linux 内核模块时出错

c - 应用程序和引导加载程序代码中的 vector 表问题

c++ - 我在哪里可以下载 Cygwin 的 gcc 和 glib?

c - void* 指向结构?

java - 迭代两个数组,遇到索引问题

php - 将多个关联数组数据插入MySQL数据库