大家好啊,这里是Cyber Striver的博客。今天我继续为大家带来PAT乙级的题解。
目录
题目
题解
#include <stdio.h>
int main()
{
struct
{
char name[11];
char number[11];
int score;
}a[10000];
int n = 0;
scanf("%d", &n);
int i = 0,max=0,min=0;
for (i = 0; i < n; i++)
{
scanf("%s", &(a[i]).name);
scanf("%s", &(a[i]).number);
scanf("%d", &(a[i]).score);
}
int MAX = a[0].score,MIN=a[0].score;
for (i = 0; i < n; i++)
{
if (a[i].score > MAX)
{
MAX = a[i].score;
max = i;
}
}
for (i = 0; i < n; i++)
{
if (a[i].score < MIN)
{
MIN = a[i].score;
min = i;
}
}
printf("%s %s\n", (a[max]).name, (a[max]).number);
printf("%s %s\n", (a[min]).name, (a[min]).number);
return 0;
}
思路
这道题比较简单,考察的是比较基本的结构体的知识。在一看见这道题的时候我就想到了要用一个结构体来容纳不同学生的各项数据。思路也比较简单:先创建结构体,然后把数据存在结构体中,然后通过比大小的程序得出最大值和最小值,最后输出。
虽然比较简单,但是跟着我一起来分析分析代码吧!
struct
{
char name[11];
char number[11];
int score;
}a[10000];
int n = 0;
scanf("%d", &n);
int i = 0,max=0,min=0;
for (i = 0; i < n; i++)
{
scanf("%s", &(a[i]).name);
scanf("%s", &(a[i]).number);
scanf("%d", &(a[i]).score);
}
这一部分,我创建了一个结构体类型的数组,因为怕输出的太多了导致溢出问题,所以就直接怼到10000个了。
创建了max,min用来记录最大最小值的下标以便后期追踪打印。
然后就开始输入各项数据。
int MAX = a[0].score,MIN=a[0].score;
for (i = 0; i < n; i++)
{
if (a[i].score > MAX)
{
MAX = a[i].score;
max = i;
}
}
for (i = 0; i < n; i++)
{
if (a[i].score < MIN)
{
MIN = a[i].score;
min = i;
}
}
printf("%s %s\n", (a[max]).name, (a[max]).number);
printf("%s %s\n", (a[min]).name, (a[min]).number);
这一部分实现了,找到成绩的最大值和最小值,并把它们对应的下标存储到max和min当中以便接下来打印。
经验总结
记得没错的话,这是我第一次在刷题中使用结构体,一开始使用的时候还有点生疏,甚至是结构体的一些基本定义方式都有点模糊不清了!学而不用则忘啊!
1)结构体的定义方式:
struct
{
char name[11];
char number[11]; 语句;不要忘记打“:”
int score;
}a[10000]; 这里是需要定义的变量名,注意变量名后也需要“:”
2)结构体类型的定义方式:
第一种:
struct student
{
char name[11];
char number[11];
int score;
}; //定义了名为student的结构体类型。注意大括号面的“;”
student a[10000];
第二种:
typedef struct //注意student这时必须在末尾而不能在struct左边。
{
char name[11];
char number[11];
int score;
}student;
student a[10000];
3)一些运算符的优先级:(如果你拿不定把握,用括号就完事了!)
本次博客到这里就结束了,如果你觉得我的文章还不错的话,请给我多多点赞评论哦!