小題目練習

設score數組中存儲8名同學的C語言成績,字符串數組name中存儲同學們的姓名。這兩個數組中,每名同學的姓名與成績的下標要始終保持一致(例如name[i]和score[i]表示同一位同學(下標爲i)的姓名和C語言成績,否則會張冠李戴)。
(1)輸出按成績排序後的同學的名單;

(2)輸出按同學姓名排序後的成績單(排序對象是字符串)。

#include<stdio.h>
#include<string.h>
#define num 8
int main()
{
    int i,j;
    double t;
    char p[10];
    char name[num][10]= {"zhao","qian","sun","li","zhou","wu","zheng","wang"};
    double score[num]= {79,84,65,89,60,92,78,56};
    //(1)按成績排序並輸出結果
    for(i=0;i<num-1;i++)
        for(j=0;j<num-1-i;j++)
                if(score[j]<score[j+1])
                {
                    t=score[j+1];
                    score[j+1]=score[j];
                    score[j]=t;
                    strcpy(p,name[j+1]);
                    strcpy(name[j+1],name[j]);
                    strcpy(name[j],p);
                }
    printf("按成績排序後的結果是:\n");
    for(i=0; i<num; i++)
        printf("%s\t%.1f\n", name[i], score[i]);
    //(2)按姓名排序並輸出結果
       for(i=0;i<num-1;i++)
        for(j=0;j<num-1-i;j++)
                if(strcmp(name[j],name[j+1])==1)
                {
                    strcpy(p,name[j+1]);
                    strcpy(name[j+1],name[j]);
                    strcpy(name[j],p);
                    t=score[j+1];
                    score[j+1]=score[j];
                    score[j]=t;

                }
        printf("按成績排序後的結果是:\n");
        for(i=0; i<num; i++)
        printf("%s\t%.1f\n", name[i], score[i]);

    return 0;
}
編寫心得:

1、此題排序採用的冒泡排序,

2、p爲char類型數組指針,name爲二維數組名,name[j]也可看成一維數組名,與p的類型一致,所以p[]作爲中間變量,將字符串的地址複製給p;

3、對於姓名的比較,採用strcmp函數 if(strcmp(name[j],name[j+1])==1);



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章