按座位顺序对飞机座椅及其乘客进行分类

时间:2014-05-02 22:22:04

标签: c arrays sorting

我知道家庭作业政策并且放心,我已经把大量的时间投入到这项任务中,而我并不是在寻找一个人来为我做我的工作。

我是一名计算机科学专业的开始,在本课程之前没有任何编程经验(这是关于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);      

1 个答案:

答案 0 :(得分:1)

冒泡排序中的比较仅检查seat_rows。当seat_rows相等时,需要检查seat_cols以确定是否需要交换。

另请注意,交换代码需要包含price,否则价格将相对于座位分配进行加扰。