现在的位置: 首页 > 10 结构体 > 正文

结构体(学生成绩比较)

2013年12月03日 10 结构体 ⁄ 共 661字 ⁄ 字号 结构体(学生成绩比较)已关闭评论

结构体的声明和使用,指针形式的结构体

有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)

样例输入
2
131001003 blue 90 80 70
131001008 clan 80 70 60
样例输出

85 75 65
131001003 blue 90 80 70
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
 
struct student {
  char sno[20];
  char name[20];
  int cj1, cj2, cj3;	
};
 
int main()
{
	int n, i, max=0;
	int av1=0, av2=0, av3=0;
	struct student s[100];
	scanf("%d", &n);
	for (i=0; i<n; i++) {
		scanf("%s %s %d %d %d", s[i].sno,s[i].name, 
		  &s[i].cj1, 
		  &s[i].cj2, &s[i].cj3);
	}
	for (i=0; i<n; i++) {
		av1=av1+s[i].cj1;
		av2=av2+s[i].cj2;
		av3=av3+s[i].cj3;	
		if (s[i].cj1+s[i].cj2+s[i].cj3>s[max].cj1+s[max].cj2+s[max].cj3)
		max = i;	
	}
	av1=av1/n; av2=av2/n; av3=av3/n;
	printf("%d %d %d\n", av1, av2, av3);
	printf("%s %s %d %d %d\n", s[max].sno, s[max].name,
	 s[max].cj1, s[max].cj2, s[max].cj3);
 
}

问题:假设学生的信息包括姓名、性别和数学成绩。编写程序,为3名学生输入信息,并将其中成绩最高的学生全部信息显示在屏幕上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
 
/* 定义了结构体 struct student */
struct student {     
    char name[10];
    char sex;
    int score;
};
 
int main()
{
    struct student s1, s2, s3, max;
    scanf("%s %c%d",s1.name,&s1.sex,&s1.score); 
    scanf("%s %c%d",s2.name,&s2.sex,&s2.score);
    scanf("%s %c%d",s3.name,&s3.sex,&s3.score);
    /* 注意细节:%s后面有一空格! */
    printf("All students are:\n");
    printf("%13s%3c%4d\n",s1.name,s1.sex,s1.score);
    printf("%13s%3c%4d\n",s2.name,s2.sex,s2.score);
    printf("%13s%3c%4d\n",s3.name,s3.sex,s3.score);
 
    max=s1;
    if (max.score<s2.score)  max=s2;
    if (max.score<s3.score)  max=s3;
 
    printf("The student is:\n");
    printf("%13s%3c%4d\n",max.name,max.sex,max.score);
    return 0;
}

下面是运行结果,前3行是输入,其他是输出。

1
2
3
4
5
6
7
8
9
ZhangShan M 88
LiSi M 98
WangWu F 78
All students are:
    ZhangShan  M  88
         LiSi  M  98
       WangWu  F  78
The student is:
         LiSi  M  98

假设学生的信息包括姓名、性别和数学成绩。编写程序,给定3名学生信息,并用指针变量找出其中成绩最高的学生。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
/* 定义了结构体 struct student */
typedef struct student {
    char name[10];
    char sex;
    int score;
} Student;
/* 结构体struct student 的别名 Student  */
 
int main()
{
    Student s1= {"liu",'f',78},s2= {"li",'m',88},s3= {"wang",'f',83};
    Student *p=&s1;
 
    printf("All students are:\n");
    printf("%13s%3c%4d\n",(*p).name,(*p).sex,(*p).score);
/* printf("%13s%3c%4d\n",s1.name,s1.sex,s1.score);   作用相同 */
/* printf("%13s%3c%4d\n",p->name,p->sex, p->score); 作用相同 */
    printf("%13s%3c%4d\n",s2.name,s2.sex,s2.score);
    printf("%13s%3c%4d\n",s3.name,s3.sex,s3.score);
 
    if(p->score<s2.score)  p=&s2;
    if(p->score<s3.score)  p=&s3;
 
    printf("The student is:\n");
    printf("%13s%3c%4d\n",p->name,p->sex,p->score);
    return 0;
}

假设学生的信息包括姓名、性别和数学成绩。编写程序,给定3名学生信息,并调用函数找出其中成绩最高的学生。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
typedef struct student {
    char name[10];
    char sex;
    int score;
} Student;
 
Student max_abc(Student a,Student b,Student c)
{
    Student m=a;
    if (m.score<b.score)  m=b;
    if (m.score<c.score)  m=c;
    return m;
}
 
int main()
{
    Student s1= {"liu",'f',78},s2= {"li",'m',88},s3= {"wang",'f',83},max= {0};
 
    printf("All students are:\n");
    printf("%13s%3c%4d\n",s1.name,s1.sex,s1.score);
    printf("%13s%3c%4d\n",s2.name,s2.sex,s2.score);
    printf("%13s%3c%4d\n",s3.name,s3.sex,s3.score);
 
    max=max_abc(s1,s2,s3);
 
    printf("The student is:\n");
    printf("%13s%3c%4d\n",max.name,max.sex,max.score);
    return 0;
}

假设学生的信息包括姓名、性别和数学成绩。编写程序,为100名学生输入信息,并将其中成绩最高的学生全部信息显示在屏幕上。

人数多,采用结构体数组。用符号常量暂定为5。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#define N 5
typedef struct student {
    char name[10];
    char sex;
    int score;
} Student;
 
int main()
{
    int i=0;
    Student s[N]= {0},max= {0};
 
    for(i=0; i<N; i++)
        scanf("%s %c%d",s[i].name,&s[i].sex,&s[i].score);
 
    printf("All students are:\n");
    for(i=0; i<N; i++)
        printf("%13s%3c%4d\n",s[i].name,s[i].sex,s[i].score);
 
    max=s[0];
    for(i=1; i<N; i++)
        if(max.score<s[i].score)  max=s[i];
 
    printf("The student is:\n");
    printf("%13s%3c%4d\n",max.name,max.sex,max.score);
    return 0;
}

假设学生的信息包括姓名、性别和数学成绩。编写程序,为100名学生输入信息,并调用函数找出其中成绩最高的学生。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#define N 5
typedef struct student {
    char name[10];
    char sex;
    int score;
} Student;
 
Student max_p(Student *p);
 
int main()
{
    int i=0;
    Student s[N], max;
    printf("Input data:\n");
    for(i=0; i<N; i++)
        scanf("%s %c%d",s[i].name,&s[i].sex,&s[i].score);
    printf("All students are:\n");
    for(i=0; i<N; i++)
        printf("%13s%3c%4d\n",s[i].name,s[i].sex,s[i].score);
    max=max_p(s);
    printf("The student is:\n");
    printf("%13s%3c%4d\n",max.name,max.sex,max.score);
    return 0;
}
 
Student max_p(Student *p)
{
    int i=0;
    Student m;
    m=p[0];
    for(i=1; i<N; i++)
        if(m.score<p[i].score)  m=p[i];
    return m;
}

抱歉!评论已关闭.