结构 - PTA练习题
- 🐤计算平均成绩
- 🏀 题目要求
- 🏀 题解
- 💻step1.定义结构体
- 💻step2.输入N;随后N行 每行给出一位学生的信息
- 💻step3.求平均值
- 💻step4.输出平均线以下的学生的信息
- 🐳完整代码
- 🐤找出总分最高的学生
- 🏀 题目要求
- 🏀 题解
- 💻step1.定义结构体
- 💻step2.输入N;随后N行 每行给出一位学生的信息
- 💻step3.筛选总分最高的学生
- 🐳完整代码
- 🐤通讯录排序
- 🏀 题目要求
- 🏀 题解
- 💻step1.定义结构体
- 💻step2.输入n;随后n行 每行给出一个朋友的信息
- 💻step3.按照年龄从大到小输出
- 🐳完整代码
🐤计算平均成绩
🏀 题目要求
给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和成绩([0,100]区间内的整数),要求计算他们的平均成绩,并顺序输出平均线以下的学生名单。
输入格式:
输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩”,中间以空格分隔。
输出格式:
首先在一行中输出平均成绩,保留2位小数。然后按照输入顺序,每行输出一位平均线以下的学生的姓名和学号,间隔一个空格。
🏀 题解
💻step1.定义结构体
struct Student
{
char xuehao[5];//由5个数字组成的字符串
char name[10];//长度小于10的非空字符串
int score;
}xs[10];//因为N <= 10
💻step2.输入N;随后N行 每行给出一位学生的信息
int main()
{
int N;
scanf("%d",&N); //输入N
double sum=0;
int i;
for(i = 0;i<N;i++)
{
scanf("%s %s %d",&stu[i].xuehao,&stu[i].name,&stu[i].score);
getchar();//读换行
sum+=xs[i].score;
}
return 0;
}
💻step3.求平均值
double average = 1.0*sum/N;
printf("%.2lf\n",average);//保留2位小数
💻step4.输出平均线以下的学生的信息
for(i = 0;i<N;i++)
{
if(stu[i].score<average)
printf("%s %s\n",stu[i].name,stu[i].xuehao);
}
🐳完整代码
#include<stdio.h>
struct Student
{
char xuehao[10];
char name[15];
int score;
}xs[10];
int main()
{
int N,i;
scanf("%d",&N);
double sum=0;
for(i = 0;i<N;i++)
{
scanf("%s %s %d",&stu[i].xuehao,&stu[i].name,&stu[i].score);
getchar();
sum+=xs[i].score;
}
double average = 1.0*sum/N;
printf("%.2lf\n",average);
for(i = 0;i<N;i++)
{
if(stu[i].score<average)
printf("%s %s\n",stu[i].name,stu[i].xuehao);
}
return 0;
}
🐤找出总分最高的学生
🏀 题目要求
给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和3门课程的成绩([0,100]区间内的整数),要求输出总分最高学生的姓名、学号和总分。
输入格式:
输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩1 成绩2 成绩3”,中间以空格分隔。
输出格式:
在一行中输出总分最高学生的姓名、学号和总分,间隔一个空格。题目保证这样的学生是唯一的。
🏀 题解
💻step1.定义结构体
struct Student
{
char ID[5];
char name[10];
int score_1;//最好定义三个score变量,用数组的话会有问题(亲测)
int score_2;
int score_3;
}stu[10];
💻step2.输入N;随后N行 每行给出一位学生的信息
int main()
{
int N,i;
scanf("%d",&N);//输入N
for(i = 0;i<N;i++)
{
scanf("%s%s%d%d%d",stu[i].ID,stu[i].name,&stu[i].score1,&stu[i].score2,&stu[i].score3);
getchar();//读换行符
}
//继续
return 0;
}
💻step3.筛选总分最高的学生
先假设总分最高(max)的是第一个学生(stu[ 0 ])
再进入循环,计算每一个学生的总分,如果大于max,则max 等于该学生,记录下此时对应数组的下标x
int max=stu[0].score1+stu[0].score2+stu[0].score3;
int x;
for(i = 0;i<N;i++)
{
int tem = 0;
tem += stu[i].score1+stu[i].score2+stu[i].score3;
if(tem>max)
{
max = tem;
x = i;
}
}
printf("%s %s %d",stu[x].name,stu[x].ID,max);
//打印出下标为x的学生的姓名学号和总分即可
🐳完整代码
#include<stdio.h>
struct Student
{
char ID[5];
char name[10];
int score_1;
int score_2;
int score_3;
}stu[10];
int main()
{
int N;
scanf("%d",&N);
int i;
for(i = 0;i<N;i++)
{
scanf("%s%s%d%d%d",stu[i].ID,stu[i].name,&stu[i].score1,&stu[i].score2,&stu[i].score3);
getchar();
}
int max=stu[0].score1+stu[0].score2+stu[0].score3;
int x;
for(i = 0;i<N;i++)
{
int tem = 0;
tem += stu[i].score1+stu[i].score2+stu[i].score3
if(tem>max)
{
max = tem;
x = i;
}
}
printf("%s %s %d",stu[x].name,stu[x].ID,max);
return 0;
}
🐤通讯录排序
🏀 题目要求
输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。
输入格式:
输入第一行给出正整数n(<10)。随后n行,每行按照“姓名 生日 电话号码”的格式给出一位朋友的信息,其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd格式的日期,“电话号码”是不超过17位的数字及+、-组成的字符串。
输出格式:
按照年龄从大到小输出朋友的信息,格式同输出。
🏀 题解
💻step1.定义结构体
struct Friend
{
char name[10];
int birth;
char num[20];//比17大一点
}fri[10];
💻step2.输入n;随后n行 每行给出一个朋友的信息
int main()
{
int n;
scanf("%d",&n);
int i = 0;
for(i = 0;i<n;i++)
{
scanf("%s%d%s",fri[i].name,&fri[i].birth,fri[i].num);
getchar();
}
//继续
return 0;
}
💻step3.按照年龄从大到小输出
⭐注意注意注意,年龄越大,yyyymmdd越小
不要算反账!!!
(如20040101的年龄大于20050422的)
就是个选择排序,代码如下
int min = 0,j;
for(i = 0;i<n-1;i++)
{
min = i;
for(j = i+1;j<n;j++)
{
if(r=fri[min].birth>fri[j].birth)
{
min = j;
}
}
if(i!=min)
{
struct Friend tem = fri[i];
fri[i] = fri[min];
fri[min] = tem;
}
}
🐳完整代码
#include<stdio.h>
struct Friend
{
char name[10];
int birth;
char num[20];
}fri[10];
int main()
{
int n;
scanf("%d",&n);
int i = 0;
for(i = 0;i<n;i++)
{
scanf("%s%d%s",fri[i].name,&fri[i].birth,fri[i].num);
getchar();
}
int min = 0,j;
for(i = 0;i<n-1;i++)
{
min = i;
for(j = i+1;j<n;j++)
{
if(r=fri[min].birth>fri[j].birth)
{
min = j;
}
}
if(i!=min)
{
struct Friend tem = fri[i];
fri[i] = fri[min];
fri[min] = tem;
}
}
for(i = 0;i<n;i++)
{
printf("%s %d %s\n",fri[i].name,fri[i].birth,fri[i].num);
}
return 0;
}