當前位置:成語大全網 - 新華字典 - 第三個高分!C語言程序題[3],比較簡單,但是思路不清晰,高手幫忙

第三個高分!C語言程序題[3],比較簡單,但是思路不清晰,高手幫忙

由鍵盤輸入N名學生姓名,再按字典排列輸出結果.

算法設計:

(1) 定義壹個二維字符數組,用以存儲N名學生的姓名

char name[N][13];

(2) 用選擇排序方法,對N個字符串,用比較函數strcmp( ) 排序

(3) 輸出結果

選擇排序思想

(1) 第壹趟,從N個記錄中選擇關鍵字值最小的記錄作為第壹個記錄;

k=0;

for(j=0+1;j if(k != 0){t=a[k]; a[k]=a[i];a[i]=t;} /*k號單元與0號單元交換*/

(2) 第二趟,從余下的N-1個記錄中選擇關鍵字值最小的記錄作為第二個記錄;

k=1;

for(j=1+1;j if(k != 1){t=a[k]; a[k]=a[i];a[i]=t;}

(3) 壹般地,第i趟,從余下的N-i+1(i=1,2,...,N-1)個記錄中選擇關鍵字值最小的記錄作為第i個記錄(i=1,2,3,…,N-2).

k=i-1;

for(j=i; j if(k != 1){t=a[k]; a[k]=a[i];a[i]=t;}

對具有N個元素的數組a,用C語言實現選擇排序程序段是:

for(i=0;i{ k=i;

for(j=i+1;j if(k != i){t=a[k]; a[k]=a[i];a[i]=t;}

}

完全類似,我們把二維字符數組char name[N][13]看作N個壹維字符數組:

name[0], name[1], name[2], …, name[N-1].

在選擇排序程序段中,將兩數比較語句:

if(a[j]更改為: if(strcmp(name[j],name[k])<0)k=j;

而數據交換語句:{t=a[k]; a[k]=a[i];a[i]=t;}

更改為: {strcpy(t,name[k]);strcpy( name[k],namea[i]);strcpy(name[i],t);}

完整的程序清單

#include "stdio.h"

#include "string.h"

main()

{cahr name[10][13],temp[13]; int i;

for(i=0;i<10;i++){

printf("請輸入第%d名學生的姓名:\n",i+1);

gets(name[i]);

}

for(i=0;i<9;i++)

{k=i;

for(j=i+1;j<10;j++)if(strcmp(name[j],name[k])<0)k=j;

if(k!=i){strcpy(temp,name[k]);

strcpy(name[k],name[i]);strcpy(name[i],temp);

}

}

printf("10名學生的姓名按字典排列結果:\n");

for(i=0;i<10;i++)printf("\n %s",name[i]);

}