C语言刷题系列——17.计算平均成绩 18.找出总分最高的学生19.通讯录排序
创始人
2024-05-01 11:29:27
0

结构 - 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); //输入Ndouble sum=0;int i;for(i = 0;iscanf("%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;iif(stu[i].score

🐳完整代码

#include
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;iscanf("%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;iif(stu[i].score

🐤找出总分最高的学生

🏀 题目要求

给定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);//输入Nfor(i = 0;iscanf("%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;iint 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
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;iscanf("%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;iint tem = 0;tem += stu[i].score1+stu[i].score2+stu[i].score3if(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;iscanf("%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;imin = i;for(j = i+1;jif(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
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;iscanf("%s%d%s",fri[i].name,&fri[i].birth,fri[i].num);getchar();}int min = 0,j;for(i = 0;imin = i;for(j = i+1;jif(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;iprintf("%s %d %s\n",fri[i].name,fri[i].birth,fri[i].num);}return 0;
}

相关内容

热门资讯

安卓双系统添加应用,轻松实现多... 你有没有想过,你的安卓手机里可以同时运行两个系统呢?听起来是不是很酷?想象一边是熟悉的安卓系统,一边...
pipo安卓进系统慢,探究pi... 最近是不是发现你的Pipo安卓系统更新或者运行起来特别慢?别急,今天就来给你好好分析分析这个问题,让...
怎样使用安卓手机系统,安卓手机... 你有没有发现,安卓手机已经成为我们生活中不可或缺的一部分呢?从早晨闹钟响起,到晚上睡前刷剧,安卓手机...
双系统安卓安装caj,轻松实现... 你有没有想过,你的安卓手机里装上双系统,是不是就能同时享受安卓和Windows系统的乐趣呢?没错,这...
安卓使用ios系统教程,安卓用... 你是不是也和我一样,对安卓手机上的iOS系统充满了好奇?想要体验一下苹果的优雅和流畅?别急,今天我就...
安卓系统gps快速定位,畅享便... 你有没有遇到过这样的情况:手机里装了各种地图导航软件,但每次出门前都要等上好几分钟才能定位成功,急得...
安卓手机系统更新原理,原理与流... 你有没有发现,你的安卓手机最近是不是总在提醒你更新系统呢?别急,别急,让我来给你揭秘一下安卓手机系统...
安卓系统通知管理,全面解析与优... 你有没有发现,手机里的通知就像是一群调皮的小精灵,时不时地跳出来和你互动?没错,说的就是安卓系统的通...
安卓系统手机哪买,揭秘哪里购买... 你有没有想过,拥有一部安卓系统手机是多么酷的事情呢?想象你可以自由安装各种应用,不受限制地探索各种功...
安卓系统 ipv4,基于安卓系... 你知道吗?在智能手机的世界里,有一个系统可是无人不知、无人不晓,那就是安卓系统。而在这个庞大的安卓家...
目前安卓是什么系统,探索安卓系... 亲爱的读者,你是否曾好奇过,如今安卓系统究竟是什么模样?在这个科技飞速发展的时代,操作系统如同人体的...
安卓6.0系统比5.0,从5.... 你有没有发现,自从手机更新了安卓6.0系统,感觉整个人都清爽了不少呢?没错,今天咱们就来聊聊这个话题...
安卓2.36系统升级,功能革新... 你知道吗?最近安卓系统又来了一次大变身,那就是安卓2.36系统升级!这可不是一个小打小闹的更新,而是...
安卓系统源码怎么打开,并可能需... 你有没有想过,安卓系统的源码就像是一扇神秘的门,隐藏着无数的技术秘密?想要打开这扇门,你得掌握一些小...
安卓8.0系统体验视频,智能革... 你有没有听说安卓8.0系统最近可是火得一塌糊涂啊!作为一个紧跟科技潮流的数码达人,我当然要来给你好好...
宣传系统漫画app安卓,探索安... 亲爱的读者们,你是否曾在某个午后,百无聊赖地打开手机,想要寻找一些轻松愉悦的读物?今天,我要给你介绍...
鸿蒙替换安卓系统吗,开启智能生... 你知道吗?最近科技圈里可是炸开了锅,因为华为的新操作系统鸿蒙系统,据说要大举进军手机市场,替换掉安卓...
手机安卓系统深度清理,解锁手机... 手机里的东西是不是越来越多,感觉就像一个装满了杂物的储物柜?别急,今天就来教你一招——手机安卓系统深...
安卓上的windows系统,融... 你有没有想过,在安卓手机上也能体验到Windows系统的魅力呢?没错,这就是今天我要跟你分享的神奇故...
安卓系统焦点变化事件,Andr... 你知道吗?在安卓系统的世界里,最近发生了一件超级有趣的事情——焦点变化事件。这可不是什么小打小闹,它...