10 명의 학생 이 있 는데 각 학생 의 데 이 터 는 학 번, 성명, 3 개의 과정 성적 을 포함 하고 키보드 에서 10 개의 학생 데 이 터 를 입력 하여 3 개의 과정 총 평균 성적 과 최고 점 수 를 받 은 학생 의 데이터 (학 번, 성명, 3 개의 과정 성적, 평균 점수 포함) 를 수출 하도록 요구한다.

10 명의 학생 이 있 는데 각 학생 의 데 이 터 는 학 번, 성명, 3 개의 과정 성적 을 포함 하고 키보드 에서 10 개의 학생 데 이 터 를 입력 하여 3 개의 과정 총 평균 성적 과 최고 점 수 를 받 은 학생 의 데이터 (학 번, 성명, 3 개의 과정 성적, 평균 점수 포함) 를 수출 하도록 요구한다.
방법 1:
#include 

struct student
{
     
    int num;
    char name[10];
    float score[3];
    float aver;
}stu[10];

void input(struct student s[], int n);
void average(struct student s[], int n);
void high_score(struct student s[], int n);

int main()
{
     
    input(stu, 10);
    average(stu, 10);
    high_score(stu, 10);
    return 0;
}

void input(struct student s[], int n)
{
     
    int i, j;
    for (i=0; i<n; i++)
	{
     
        printf("Please enter No.%d student's num name score:",i+1);
        scanf("%d %s", &s[i].num, s[i].name);
        for (j=0; j<3; scanf("%f", &s[i].score[j++]));
    }
}

void average(struct student s[], int n)
{
     
    int i, j;
    float sum,total=0; 
    
    printf("
"
); for (i=0; i<n; i++) { sum=0; for(j=0; j<3; j++) { sum+=s[i].score[j];// i } printf("The average score of No.%d is %.2f
"
, s[i].num, sum/3);// total+=sum;// 10 30 } printf("Total Average: %.2f

"
, total/30.0);// 10 30 } void high_score(struct student s[], int n) { int i, j; float sum; struct student temp; for (i=0; i<n; i++) { sum=0; for(j=0; j<3; j++) { sum+=s[i].score[j]; } s[i].aver=sum/3; } for (i=0; i<n; i++) { for (j=i+1; j<n; s[i].aver<s[j].aver ? temp=s[i], s[i]=s[j], s[j]=temp, j++ : j++); } printf("The num and name of the student that achieved the highest scores are:%d %-5s
"
, s[0].num, s[0].name);// printf("His(Her) three scores are:"); for (i=0; i<3; printf("%.2f ", s[0].score[i]),i++);// printf("
"
); printf("His(Her) average is:%.2f
"
, s[0].aver);// }

방법 2:
#include 
#include 

struct Student
{
     
    int num; 
    char name[10];
    float score[3];
    float aver;
};

void input(struct Student *st);
void print(struct Student *st);

int main()
{
     
	struct Student *stu=(struct Student*)malloc(10*sizeof(struct Student));
    input(stu);
    print(stu);
    return 0;
}

void input(struct Student *st)
{
     
    int i,j;
    struct Student *p;
    for (p=st, i=0; p<st+10; p++, i++)
	{
     
        printf("Please enter No.%d student's num name score:", i+1);
        scanf("%d %s", &(p+i)->num, (p+i)->name);
        for (j=0; j<3; j++)
        {
     
        	scanf("%f",&p->score[j]);
		}
    }
}

void print(struct Student *st)
{
     
    int i, j;
    float sum[10], total=0, max;
    
    printf("
"
); struct Student *p; for (p=st, i=0; p<st+10; p++, i++) { sum[i]=0; for(j=0; j<3; j++) { sum[i]+=p->score[j];// i } printf("The average score of No.%d is %.2f
"
, (p+i)->num, sum[i]/3);// total+=sum[i];// 10 30 } printf("Total Average: %.2f

"
, total/30.0);// 10 30 for (i=0; i<10; i++) { if (sum[i]>max || i==0) { max=sum[i]; j=i; } } printf("The num and name of the student that achieved the highest scores are:%d %-5s
"
, (st+j)->num, (st+j)->name);// printf("His(Her) three scores are:"); for (i=0; i<3; i++) printf("%.2f ", (st+j)->score[i]);// printf("
"
); printf("His(Her) average is:%.2f
"
,max/3.0);// }

방법 2 개선:
#include 
#include 

struct Student
{
     
    int num; 
    char name[20];
    float score[3];
};

void input(struct Student *st);
void print(struct Student *st);

int main()
{
     
	struct Student stu[10];
    input(stu);
    print(stu);
    return 0;
}

void input(struct Student *st)
{
     
    int i,j;
    for (i=0; i<10; i++)
	{
     
        printf("Please enter No.%d student's num name score:", i+1);
        scanf("%d %s", &(st[i].num), &(st[i].name));
        for (j=0; j<3; j++)
        {
     
        	scanf("%f", &(st[i].score[j]));
		}
    }
}

void print(struct Student *st)
{
     
    int i, j;
    float sum[10], total=0, max;
	
	printf("
"
); for (i=0; i<10; i++) { sum[i]=0; for(j=0; j<3; j++) { sum[i]+=st[i].score[j];// i } printf("The average score of No.%d is %.2f
"
, st[i].num, sum[i]/3);// total+=sum[i];// 10 30 } printf("Total Average: %.2f

"
, total/30.0);// 10 30 for (i=0; i<10; i++) { if (sum[i]>max || i==0) { max=sum[i]; j=i; } } printf("The num and name of the student that achieved the highest scores are:%d %-5s
"
, st[j].num, st[j].name);// printf("His(Her) three scores are: "); for (i=0; i<3; i++) printf("%.2f ", st[j].score[i]);// printf("
"
); printf("His(Her) average is:%.2f
"
, max/3.0);// }

방법 3:
#include

#define N 10

struct student
{
     
	char num[6];
	char name[8];
	float score[3];
	float avr;
}stu[N];

int main()
{
     
	int i,j,maxi;
	float sum,max,average;
	for(i=0;i<N;i++)//i       
	{
     
		printf("input scores of students %d:
"
,i+1); printf("NO.:"); scanf("%s",stu[i].num);// printf("name:"); scanf("%s",stu[i].name);// for(j=0;j<3;j++)//j { printf("score %d:",j+1); scanf("%f",&stu[i].score[j]);// } } average=0; max=0; maxi=0; for(i=0;i<N;i++) { sum=0; for(j=0;j<3;j++) { sum+=stu[i].score[j];// i } stu[i].avr=sum/3.0;// average+=stu[i].avr;// 10 30 if(sum>max) { max=sum; maxi=i; } } average/=N;// 10 30 printf(" NO. name score1 score2 score3 average
"
); for(i=0;i<N;i++) { printf("%5s%10s",stu[i].num,stu[i].name); for(j=0;j<3;j++) { printf("%9.2f",stu[i].score[j]); } printf(" %8.2f
"
,stu[i].avr); } printf("average=%5.2f
"
,average);// printf("The highest score is:student %s,%s
"
,stu[maxi].num,stu[maxi].name);// printf("his scores are:%6.2f,%6.2f,%6.2f,average:%5.2f.
"
,stu[maxi].score[0],stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr);// return 0; }

좋은 웹페이지 즐겨찾기