我知道家庭作业政策,并且请放心,我已经将大量自己的时间投入到这项作业中,而且我不会找人简单地为我做作业。
我是计算机科学专业的初学者,在这门课之前没有任何编程经验(都是关于 C 编程的),除了我年轻时的少量网站开发。我非常喜欢类(class),并且发现自己比类的大多数其他人有更好的理解力,但这项作业让我感到难过。
作业是读取乘客姓名(名字和最后一个首字母)、座位(A1、B1、C1、D1、A2 等)和票价的文本文件。输出指定为一张乘客表,他们的座位按座位顺序排序,我还必须打印最低和最高票价以及每张票的所有者,以及所有票价的平均值。我的数组都正确读取,最低、最高和平均票价都很容易找到。我的问题是排序。几周前我们接触了数组,这是我们第一次进行任何排序。我们应该使用冒泡排序,虽然我想我知道如何使用冒泡排序,但它在我的程序中不起作用(所以显然我真的不知道如何使用它)。我尝试了几种不同的方法,有时一些座位/名字会来回切换(从来不是我想要的方式),有时什么也不会发生。
总之,TL;DR:编程新手,不想帮我完成作业,需要按座位顺序(A1、B1、C1、D1、A2 等)对飞机乘客和座位进行冒泡排序。在此先感谢您的帮助。
我的输入是这样的:
A Z A1 555.55 使用不同的首字母、座位和价格重复用户认为合适的次数。
我有一个用于列的一维字符数组 (A - D),一个用于行的一维整数数组(1 到最大整数),一个用于价格的一维 float 组,以及一个用于名称首字母的二维数组。
这是读取数组的函数:
void read_Arrays(char seat_cols[], int seat_rows[], char name[][LAST], float price[])
{
int i, j;
for(i = 0; i < SIZE; i++)
{
for(j = 0; j < LAST; j++)
{
scanf(" %c", &name[i][j]);
}
scanf(" %c %d %f ", &seat_cols[i], &seat_rows[i], &price[i]);
}
}
这是排序。我们展示的方法是使用嵌套在“do while”中的“for”循环:
do
{
flag = 0;
for(i=0; i < ROWSIZE-1; i++)
{
if(seat_rows[i] > seat_rows[i+1])
{
//swap first initial
tempName = name[i][0];
name[i][0] = name [i+1][0];
name[i+1][0] = tempName;
/*swap last initial*/
tempName = name[i][1];
name[i][1] = name [i+1][1];
name[i+1][1] = tempName;
//swap seat_cols
tempName = seat_cols[i];
seat_cols[i] = seat_cols[i+1];
seat_cols[i+1] = tempName;
//swap seat_rows
temp = seat_rows[i];
seat_rows[i] = seat_rows[i+1];
seat_rows[i+1] = temp;
//flag
flag = 1;
}//end if
}//end for
}while(flag == 1);
更新:感谢到目前为止提供的信息,很高兴知道我应该回答我自己的问题而不是编辑原始问题。但是,由于缺乏声誉点,此时它不会让我回答我自己的问题,所以我在这里发布更新。
输入文件:
S J D2 579.12
S G A4 176.98
B B B3 244.78
A M C9 337.15
B C A6 444.89
J B B2 891.55
M M D7 478.16
C H B1 119.63
W W A8 342.93
L R C5 588.22
输出:
B1 channel
B2 JB
D2 SJ
B3 BB
A4 纸
C5 左轮
A6BC
D7 毫米
A8 二战
C9上午
平均票价为 420.34。
最低票价119.63,车主CH。
最高票价为891.55,车主为JB。
忽略票价,这些都正常工作。我看到行号已排序,名称仍与其正确的座位相关联,但列到处都是。
这是更新后的排序:
do
{
flag = 0;
for(i=0; i < SIZE-1; i++)
{
if(seat_rows[i] > seat_rows[i+1])
{
//swap first initial
tempName = name[i][0];
name[i][0] = name [i+1][0];
name[i+1][0] = tempName;
/*swap last initial*/
tempName = name[i][1];
name[i][1] = name[i+1][1];
name[i+1][1] = tempName;
//swap seat_cols
tempName = seat_cols[i];
seat_cols[i] = seat_cols[i+1];
seat_cols[i+1] = tempName;
//swap seat_rows
temp = seat_rows[i];
seat_rows[i] = seat_rows[i+1];
seat_rows[i+1] = temp;
//swap prices
temp2 = price[i];
price[i] = price[i+1];
price[i+1] = temp2;
//flag
flag = 1;
}//end if
if(seat_rows[i] == seat_rows[i+1])
{
if(seat_cols[i] > seat_cols[i+1])
{
//swap first initial
tempName = name[i][0];
name[i][0] = name [i+1][0];
name[i+1][0] = tempName;
/*swap last initial*/
tempName = name[i][1];
name[i][1] = name[i+1][1];
name[i+1][1] = tempName;
//swap seat_cols
tempCol = seat_cols[i];
seat_cols[i] = seat_cols[i+1];
seat_cols[i+1] = tempCol;
//swap seat_rows
temp = seat_rows[i];
seat_rows[i] = seat_rows[i+1];
seat_rows[i+1] = temp;
//swap prices
temp2 = price[i];
price[i] = price[i+1];
price[i+1] = temp2;
//flag
flag = 1;
}
}
}//end for
}while(flag == 1);
最佳答案
冒泡排序中的比较只检查seat_rows
。当 seat_rows
相等时,需要检查 seat_cols
以确定是否需要交换。
另请注意,兑换代码需要包含价格
,否则价格会相对于座位分配发生困惑。
关于c - 按座位顺序对飞机座位及其乘客进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23437815/