English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

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 printf("%d\t%d\t%d\t%d\t%d\n",id[i],ex1[i],ex2[i],ex3[i],avg[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 for(i=0;i if(e[i]>e[i+1]){
e[i]=f;
e[i]=e[i+1];
e[i+1]=f;
}
}
}
printf("ID\tEX1\tEX2\tEX3\tAVG\n");
for(j=0;j printf("%d\t%d\t%d\t%d\t%d\n",a[j],b[j],c[j],d[j],e[j]);
}
}

2007-01-08 17:43:13 · 1 個解答 · 發問者 Xue 1 in 電腦與網際網路 程式設計

為啥這跟指標有關悉阿 不是要用*才是指標ㄇ@@"

2007-01-09 19:21:26 · update #1

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("%d\t%d\t%d\t%d\t%5.2f\n",id[i],ex1[i],ex2[i],ex3[i],avg[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 if(e[n[i]]>e[n[i+1]]){ /* 換指標 */
f=n[i];
n[i]=n[i+1];
n[i+1]=f;
}
}
}
printf("ID\tEX1\tEX2\tEX3\tAVG\n");
for(j=0;j printf("%d\t%d\t%d\t%d\t%5.2f\n",a[n[j]],b[n[j]],c[n[j]],d[n[j]],e[n[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

fedest.com, questions and answers