15.撰寫一程式,可由鍵盤讀入最多20筆學生資料,每筆資料包括學生學號與三次考試成績, 依據成績平均值,由大到小加以排序,列印出學生學號與成績。輸入學號為0時,表示輸入結束。
#include
void print(int a[],int b[],int c[],int d[],int e[],int x);
int main(){
int id[20]={0},ex1[20]={0},ex2[20]={0},ex3[20]={0},avg[20]={0};
int i=0,k=0;
while(1){
if(i==20){
break;
}
printf("STU%d",i+1);
printf("ID\n");
scanf("%d",&id[i]);
if(id[i]==0){
break;
}
printf("1\n");
scanf("%d",&ex1[i]);
printf("2\n");
scanf("%d",&ex2[i]);
printf("3\n");
scanf("%d",&ex3[i]);
avg[i]=(ex1[i]+ex2[i]+ex3[i])/3;
i++;
k++;
}
printf("ID\tEX1\tEX2\tEX3\tAVG\n");
for(i=0;i
}
print(id,ex1,ex2,ex3,avg,k);
return 0;
}
void print(int a[],int b[],int c[],int d[],int e[],int x){
int i,j,f;
for(j=0;j
e[i]=f;
e[i]=e[i+1];
e[i+1]=f;
}
}
}
printf("ID\tEX1\tEX2\tEX3\tAVG\n");
for(j=0;j
}
}
2007-01-08 17:43:13 · 1 個解答 · 發問者 Xue 1 in 電腦與網際網路 ➔ 程式設計
為啥這跟指標有關悉阿 不是要用*才是指標ㄇ@@"
2007-01-09 19:21:26 · update #1
#include
void print(int a[],int b[],int c[],int d[],float e[],int x);
int main(){
int id[20]={0},ex1[20]={0},ex2[20]={0},ex3[20]={0};
float avg[20]; /* 平均值大多不是整數 */
int i=0,k=0;
while(1){
if(k==20){
break;
}
printf("\nSTU%d ID : ",k+1); /* 直接用 k 來記錄就可以 */
scanf("%d",&id[k]);
if(id[k]==0){
break;
}
printf("1 : "); /* 接受輸入時以不換行較清楚 */
scanf("%d",&ex1[k]);
printf("2 : ");
scanf("%d",&ex2[k]);
printf("3 : ");
scanf("%d",&ex3[k]);
avg[k]=(float)(ex1[k]+ex2[k]+ex3[k])/3;
k++;
}
printf("Original score\n"); /* 可以考慮放標題 */
printf("ID\tEX1\tEX2\tEX3\tAVG\n");
for(i=0;i
}
printf("\nSorted score\n");
print(id,ex1,ex2,ex3,avg,k);
return 0;
}
/* 副程式不要放在主程式內 */
void print(int a[],int b[],int c[],int d[],float e[],int x){
int i,j,f, n[20]; /* 因為有五個要換 所以用指標來換 */
for(i=0;i<20;i++)
n[i]=i;
for(j=x-1;j>=0;j--){
for(i=0;i
f=n[i];
n[i]=n[i+1];
n[i+1]=f;
}
}
}
printf("ID\tEX1\tEX2\tEX3\tAVG\n");
for(j=0;j
}
}
如果有問題, 請來函討論. 不然, 我可能會錯失你再補充的疑點.
2007-01-16 23:03:05 補充:
這裡說的指標是 index 不是 pointer
平常陣列的 index 都是照順序來的
一旦要排序就得換資料
現在有五個資料要換
所以我們就祇換 index
你可以看到
我們不是輸出 a[i] 而是輸出 a[n[i]]
2007-01-09 07:14:51 · answer #1 · answered by JJ 7 · 0⤊ 0⤋