習題13(結構體)
1、程式改錯題:以下程式功能是對任意輸入的5個學生成績中找出最高分成績及其對應的姓名。
#include <stdio.h>
struct student
{
char name[10];int score;
};
void main()
{
int i,max=0;
struct student st[5],*p=st,*q=st;
for(i=0;i<5;i++)
{
printf("請輸入第%d個學生資訊(姓名 成績):",i+1);
scanf("%s%d",st[i].name,&st[i].score);
}
for (;p<st+5;p++)
{
if(max<p->score)
{
max=p->score;
q=p;
}
}
printf("成績最高的學生資訊是:%s:%d\n",q->name,q->score);
}
2、編寫結構體stuscore(學號,英語,C語言,資料庫,編譯原理)kemuaver(科目,平均分)
程式設計實現:根據輸入的5個學生的成績計算出每科的平均分並存入相應的結構體變數中並輸出科目及其對應的平均分。
#include <stdio.h>
struct stuscore{
char sid[5];
int en;
int clan;
int data;
int bianyi;
}stc[5]={};
struct kemuaver
{ char sub[10];
float avg;
}av[4]={"英語:",0,"C語言:",0,"C語言:",0,"編譯原理:",0};
void main()
{
int i,sum[4]={0};
for(i=0;i<5;i++){
printf("請輸入第%d個學生資訊(學號 英語 C語言 C語言 編譯原理):",i+1);
scanf("%s%d%d%d%d",stc[i].sid,&stc[i].en,&stc[i].clan,&stc[i].data,&stc[i].bianyi);
}
for(i=0;i<5;i++){
sum[0]+=stc[i].en;
sum[1]+=stc[i].clan;
sum[2]+=stc[i].data;
sum[3]+=stc[i].bianyi;
}
for(i=0;i<4;i++){
av[i].avg=sum[i]/5;
}
printf("科的平均成績是:");
for(i=0;i<4;i++)
{
printf("%s%.2f ",av[i].sub,av[i].avg);
}
printf("\n");
}
3、編寫結構體stu(學號,姓名,成績)
編寫函式:對stu結構體型別的n個學生按成績由高到低排序
程式設計實現:任意輸入5個學生的資訊,按成績由高到低排序並輸出成績排序後的資訊(可任選排序方法實現)。
#include <stdio.h>
struct st
{
char sid[10];
char name[10];
int score;
} st[5] = {},t[5]={};
void sort(struct st st[],struct st t[],int len);
void main()
{
int i,j;
int len=sizeof(st)/sizeof(st[0]);
for (i = 0; i < 5; i++)
{
printf("請輸入第%d個學生資訊(學號 姓名 成績):", i+1);
scanf("%s%s%d", st[i].sid, st[i].name, &st[i].score);
}
sort(st,t,len);
printf("按成績從高到底排列為:\n");
for(i=len-1;i>=0;i--){
printf("%s %s %d\n",t[i].sid,t[i].name,t[i].score);
}
}
void sort(struct st st[],struct st t[],int len)
{
int i,j;
for(i=0;i<len;i++){
for(j=0;j<len-i;j++){
if(st[j].score>st[j+1].score){
t[j]=st[j];
st[j]=st[j+1];
st[j+1]=t[j];
}
}
}
}
小胖專屬學習分享