程式設計C 實驗四 題目一 排序查詢(0616)
阿新 • • 發佈:2018-12-09
用選擇法對N個學生的成績按從大到小的順序排序,N個學生的成績整數用scanf 輸入,輸入的成績在[0,100]之間。排序完成後,輸入一個成績,要求用逐個比較查詢的方式找出該成績是該組中第幾個元素的值(即第幾名)。如果該成績不在陣列中,則輸出“no this score!”。 要求: 1、把排序演算法寫成函式形式,在主函式中輸入N個數據,然後呼叫排序函式排序。 2、在排序過程中儘量減少資料的交換和移動。 3、把查詢演算法寫成函式形式,在主函式中輸入1個數據,然後呼叫查詢函式查詢。
輸入共有三行:第一行是一個數N(N < 50),表示學生的人數; 第二行輸入N個學生的成績; 第三行輸入一個數m(你要查詢的成績)
第一行輸出N個已經排好序的成績,每兩個成績之間有一個空格隔開,每10個數據換一行(由大到小排列)。 第二行輸出你要查詢的成績的名次(如果成績相同,則並列)。具體的見Sample Output。
Output1 2 3 4 5 6 7 | 15 23 32 43 54 65 65 78 87 98 87 76 76 76 55 65 87 23 32 43 54 89 89 78 89 78 55 65 76 87 87 87 65 65 89 86 65 78 54 57 54 86 |
1 2 3 4 5 6 7 8 | 98 87 87 78 76 76 76 65 65 65 55 54 43 32 23 2 89 89 89 89 87 87 87 86 78 78 78 76 65 65 65 65 57 55 54 54 54 43 32 8 |
#include <stdio.h>
int main() {
void sort(int a[],int N);
int search(int a[],int N,int s);
int N,i,a[50],m;
scanf("%d",&N);
for(i = 0;i < N;i++) { //輸入N個人的成績
scanf("%d",&a[i]);
}
scanf("%d",&m);
sort(a,N);
for(i = 0;i < N;i++) {
if(i % 10 == 9) {
printf(" %d\n",a[i]);
} else if(i % 10 == 0 || i == 0){
printf("%d",a[i]);
} else {
printf(" %d",a[i]);
}
}
printf("\n");
if(!search(a,N,m)) {
printf("no this score!\n");
} else {
printf("%d\n",search(a,N,m));
}
return 0;
}
void sort(int a[],int N) { //排序演算法
int i,k,j,temp;
for(i = 0;i < N -1;i++) {
k = i;
for(j = i +1;j < N;j++) {
if(a[k] < a[j]) {
k = j; //交換下標號
}
}
if(k != i) {
temp = a[k];
a[k] = a[i];
a[i] = temp;
}
}
}
int search(int a[],int N,int s) {
int i;
for(i = 0;i < N;i++) {
if(a[i] == s)
return i+1;
}
return 0;
}