(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);