gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:58:09 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com