我知道家庭作业政策并且放心,我已经把大量的时间投入到这项任务中,而我并不是在寻找一个人来为我做我的工作。
我是一名计算机科学专业的开始,在本课程之前没有任何编程经验(这是关于C编程的),除了我年轻时的少量网站开发之外。我非常享受课程,并且发现自己比我班上的其他大多数人都有了更好的理解,但这项任务让我感到难过。
作业是读取旅客姓名(首位和最后一位),座位(A1,B1,C1,D1,A2等)和门票价格的文本文件。输出被指定为按乘客顺序排列的乘客及其座位表,我还必须打印最低和最高票价以及每张票的所有者,以及所有票价的平均值。我的阵列都正确阅读,最低,最高和平均票价都很容易找到。我的问题是排序。几个星期前我们被引入阵列,这是我们第一次进行任何排序。我们应该使用冒泡排序,虽然我认为我收集了如何使用冒泡排序,但它在我的程序中不起作用(显然我不知道如何使用它)。我尝试了几种不同的东西,有时候会有几个座位/名字转换(从来没有我想要的方式),有时根本不会发生任何事情。
无论如何,TL; DR:编程新手,不试图为我完成作业,需要按座位顺序(A1,B1,C1,D1,A2等)对飞机乘客和座位进行冒泡。提前感谢您的帮助。
我的输入如下:
A Z A1 555.55 重复使用不同的首字母,座位和价格,但用户认为很多次。
我有一列(A - D)的1D字符数组,行(1到最大整数)的1D整数数组,价格的1D浮点数组和名称初始的2D数组。
这里是读取数组的函数:
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]);
}
}
这就是那种。我们被证明这样做的方式是用'&#39; for&#39;循环嵌套在&#39; do while&#39;:
中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 CH
B2 JB
D2 SJ
B3 BB
A4 SG
C5 LR
A6 BC
D7 MM
A8 WW
C9 AM
平均票价为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);
答案 0 :(得分:1)
冒泡排序中的比较仅检查seat_rows
。当seat_rows
相等时,需要检查seat_cols
以确定是否需要交换。
另请注意,交换代码需要包含price
,否则价格将相对于座位分配进行加扰。