PAT1004----冒泡排序,简单的结构体

读入 n(>)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

输入格式:

每个测试输入包含 1 个测试用例,格式为

第 1 行:正整数 n
第 2 行:第 1 个学生的姓名 学号 成绩
第 3 行:第 2 个学生的姓名 学号 成绩
  ... ... ...
第 n+1 行:第 n 个学生的姓名 学号 成绩

其中姓名学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。

输出格式:

对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。

输入样例:

3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95

输出样例:

Mike CS991301
Joe Math990112

--------------------------------

因为要同时处理姓名学号和成绩三种不同类型的变量,因此需要使用结构体。而排名的时候,应当用成绩进行比较。比较以后输出成绩最高的同学和成绩最低的同学即可完成本题目。

进行排序的时候可以进行统一的排序,输出第一名和最后一名,也可以单独设置变量来记录最高成绩和最低成绩,而无需进行统一排序。

#include <stdio.h>
#include<string.h>
#include<iostream>
#include <malloc.h>
using namespace std;
typedef struct people{                  //结构体的定义等待补充
char name[11];
char numbei[11];
int chengji;
}peo;
int main(){
int n,i,j;
cin>>n;
peo *a;
a=(peo*)malloc(n*sizeof(peo));            //由于不知道人数是多少所以要动态分配空间,下文要释放空间free()
for(i=0;i<n;i++)
{
cin>>a[i].name;
cin>>a[i].numbei;
cin>>a[i].chengji;
}
peo bijiao;             //结构体相当于一个数据类型,所以可以直接相等
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(a[j].chengji<a[i].chengji)
{
bijiao=a[i];
a[i]=a[j];
a[j]=bijiao;
}
}
}
cout<<a[n-1].name<<" "<<a[n-1].numbei<<endl;
cout<<a[0].name<<" "<<a[0].numbei<<endl;

free(a);
return 0;
}

关于peo *a,我给出解释,因为我们不知道有多少个人,所以要用动态分配空间,malloc返回得是void*类型,

分配了N个空间,所以有a【0】->a【n-1】,这样的数据,所以你可以直接通过数组调用结构体里面的数据,

因为a与bijiao为同类型的,所以可以直接相等。

最后记得释放你申请的空间。

原文地址:https://www.cnblogs.com/BananaMan/p/11191510.html

时间: 2024-07-31 15:19:22

PAT1004----冒泡排序,简单的结构体的相关文章

结构体学习心得

结构体 1.简单认识结构体 #include<stdio.h> /*struct tag(member list)(varible list)*/ 成员列表     变量列表 struct stu { char name[20]; int age; char sex[5]; char tele[12]; char addr[30]; }; int main() { struct stu stu2; struct stu arr[10]; return 0; } 2.结构体的重命名 ①.type

p/invoke碎片,对结构体的处理

结构体的一些相关知识 可直接转换类类型,比如int类型,在托管代码和非托管代码中占据内存大小 和意义都是一个样的. 结构体封送的关键是:在托管代码和非托管代码中定义的一致性.什么是定义的一致性?包括结构体的对齐粒度:结构体成员的顺序和每个结构体成员在托管代码和非托管代码中的占据内存的大小.本来想着是只是类型一样就行了,但是像布尔类型,在托管代码中占据1个字节,但是在非托管代码中是4个字节,也就是非可直接转换类型. 对齐粒度.这个东西感觉和内存布局有关,以前有一个错误的理念:在一个结构体中定义了一

C++ 结构体深入理解

1. 结构体基础知识 有时需要将不同类型的数据组合成一个有机的整体,以供用户方便地使用.这些组合在一个整体中的数据是互相联系的.例如,一个学生的学号.姓名.性别.年龄.成绩.家庭地址等项,都是这个学生的属性,见图7.1. 图 7.1 可以看到学号(num).姓名(name).性别(sex).年龄(age).成绩(score ).地址(addr)是与姓名为“Li Fun”的学生有关的.如果在程序中将num,name,sex,age,score,addr分别定义为互相独立的变量,就难以反映出它们之间

C++结构体:默认构造函数,复制构造函数,重载=运算符

做leetcode的时候经常看到有结构体的默认构造函数,觉得很奇怪,才发现原来c++的结构体与c语言的结构体不一样,c++的结构体更像是一个类, C++结构体提供了比C结构体更多的功能,如默认构造函数,复制构造函数,运算符重载,这些功能使得结构体对象能够方便的传值. 比如,我定义一个简单的结构体,然后将其作为vector元素类型,要使用的话,就需要实现上述三个函数,否则就只能用指针了. 转:http://blog.csdn.net/fu_zk/article/details/10539705 #

逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式

一丶了解什么是结构体,以及计算结构体成员的对其值以及总大小(类也是这样算) 结构体的特性 1.结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合 2.在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类. 3. 结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据结构.结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问. 高级代

Golang 入门 : 结构体(struct)

Go 通过类型别名(alias types)和结构体的形式支持用户自定义类型,或者叫定制类型.试图表示一个现实世界中的实体. 结构体由一系列命名的元素组成,这些元素又被称为字段,每个字段都有一个名称和一个类型. 结构体的目的就是把数据聚集在一起,以便能够更加便捷地操作这些数据.结构体的概念在 C 语言里很常见,被称为 struct.Golang 中的结构体也是 struct.Go 语言中没有类的概念,因此在 Go 中结构体有着更为重要的地位.结构体是复合类型(composite types),当

【转】 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能讲讲其用法: 1.sort入门: 使用sort需要包含algorithm头文件,完整代码如下 #include<iostream> #include<vector> #include<algorithm>//貌似可以不用,但最好加上. using namespace std

例题:输入学生的各项资料,然后根据学生的分数,重新排序。重新复习结构体,集合,数组,for循环,冒泡排序,水平符的使用。

class Program { struct student     //定义一个student的结构体 { public string name;   //基本格式 public int code; public int age; public int fenshu; } static void Main(string[] args) { while (true) { ArrayList al = new ArrayList();  //定义一个新的集合 Console.Write("请输入人

代码案例(结构体,函数指针,指针函数,冒泡排序) 修改

#import <Foundation/Foundation.h> typedef struct {     char name[20];     int age;     float score; }Stu; //建立字符串和函数之间的一一对应关系. typedef BOOL (*PStu) (Stu stu1,Stu stu2) ; typedef struct nameFunctionPair{     char name[20]; //存储函数对应的字符串     PStu funct