7-3 實驗11_1_初識結構 (100分)
阿新 • • 發佈:2021-01-03
學生的屬性包括姓名、學號、5門課程的成績、平均成績與總成績。已知一個學生的姓名、學號與5門課程的成績,你的任務是計算該學生的平均成績與總成績,並將該學生的5門課程成績按照從高到底進行排序,最後將這個同學的完整資訊輸出。學生的姓名中只能包含大小寫字母與空格字元,不會超過20個字元;學生的學號是個長度不會超過20的字串,只包含數字字元;課程成績均為0—100的整數。
要求:
1.在本題中,你要設計一個結構來儲存學生的資訊。在此結構中,需要有一個字元陣列來儲存姓名;一個字元陣列來儲存學號;一個長度為5的整型陣列來儲存5門課程的成績;一個雙精度浮點型變數儲存平均成績,一個整型變數儲存總成績。2.在對結構變數的成員進行賦值與排序的時候,你要使用“結構變數名+‘.’+結構成員名”這種方式訪問變數,如“student.score”;而在輸出學生資訊時,你要用一個結構指標指向該結構,然後用結構指標訪問結構中的變數,即“結構指標名+‘->’+結構成員名”,如“ptr->score”。
輸入格式:
學生資訊的輸入按照姓名、學號、5門課程成績的順序輸入,共佔三行,具體格式見樣例。
輸出格式:
姓名佔一行;學號佔一行;5門成績中間用空格分開,最後一個成績後是換行符,從高到底進行排序,佔一行;平均成績與總成績用空格分隔,佔一行,平均成績保留兩位小數。
輸入樣例:
Liu Mengmeng0821131666666
88 90 93 91 85
輸出樣例:
Name:Liu Mengmeng
ID:0821131666666
Score:93 91 90 88 85
average:89.40 total:447
#include<stdio.h>
struct stu{
char name[21],id[21];
int grade[5];
double ave;
int sum;
};
main(){
struct stu s1;
int i,j,tmp;
gets(s1.name);
scanf("%s",s1.id);
s1. sum=0;
s1.ave=0;
for(i=0;i<5;i++){
scanf("%d",&s1.grade[i]);
s1.sum+=s1.grade[i];
}
s1.ave=s1.sum/5.0;//輸入資料並計算總成績與平均成績
for(i=0;i<4;i++){
for(j=0;j<4-i;j++){
if(s1.grade[j]<s1.grade[j+1]){
tmp=s1.grade[j];
s1.grade[j]=s1.grade[j+1];
s1.grade[j+1]=tmp;
}
}
}
printf("Name:%s\n",s1.name);
printf("ID:%s\n",s1.id);
printf("Score:");
for(i=0;i<5;i++){
printf("%d",s1.grade[i]);
if(i<4){
printf(" ");
}else{
printf("\n");
}
}
printf("average:%.2f total:%d",s1.ave,s1.sum);
}