【PTA|编程题|期末复习|part 2】结构体

目录

7-5 找出总分最高的学生

输入格式:

输出格式:

输入样例:

输出样例:

代码

7-6 通讯录的录入与显示

输入格式:

输出格式:

输入样例:

输出样例:

代码

7-7 一帮一

输入格式:

输出格式:

输入样例:

输出样例:

代码

7-8 考试座位号

输入格式:

输出格式:

输入样例:

输出样例:

代码


7-5 找出总分最高的学生

给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和3门课程的成绩([0,100]区间内的整数),要求输出总分最高学生的姓名、学号和总分。

输入格式:

输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩1 成绩2 成绩3”,中间以空格分隔。

输出格式:

在一行中输出总分最高学生的姓名、学号和总分,间隔一个空格。题目保证这样的学生是唯一的。

输入样例:

5
00001 huanglan 78 83 75
00002 wanghai 76 80 77
00003 shenqiang 87 83 76
10001 zhangfeng 92 88 78
21987 zhangmeng 80 82 75

输出样例:

zhangfeng 10001 258

代码

 
#include<stdio.h>
struct Student{ //定义结构类型struct student
    char id[10];
    char name[11];
    int s1,s2,s3;
    int total;
} students[11]; //定义结构数组students

int main()
{
    int n;
    struct Student temp; //定义结构变量temp
    scanf("%d",&n);  //输入整数
    for(int i=0;i<n;i++) //给结构数组下标i的元素(结构)的成员赋初值
    {
        scanf("%s %s",students[i].id,students[i].name);
        scanf("%d %d %d",&students[i].s1,&students[i].s2,&students[i].s3);
        students[i].total=students[i].s1+students[i].s2+students[i].s3;//求和结果赋值给结构成员total
    }
    temp=students[0];//假设总分total最高的是结构数组下标为0的元素,即第一个
    for(int i=1;i<n;i++)
    {//循环比较,找出总分total最高的学生
        if(temp.total<students[i].total)
        {
            temp=students[i];
        }
    }
	printf("%s %s %d",temp.name,temp.id,temp.total);//输出学生信息
 
    return 0;
}

7-6 通讯录的录入与显示

通讯录中的一条记录包含下述基本信息:朋友的姓名、出生日期、性别、固定电话号码、移动电话号码。
本题要求编写程序,录入N条记录,并且根据要求显示任意某条记录。

输入格式:

输入在第一行给出正整数N(≤10);随后N行,每行按照格式姓名 生日 性别 固话 手机给出一条记录。其中姓名是不超过10个字符、不包含空格的非空字符串;生日按yyyy/mm/dd的格式给出年月日;性别用M表示“男”、F表示“女”;固话手机均为不超过15位的连续数字,前面有可能出现+

在通讯录记录输入完成后,最后一行给出正整数K,并且随后给出K个整数,表示要查询的记录编号(从0到N−1顺序编号)。数字间以空格分隔。

输出格式:

对每一条要查询的记录编号,在一行中按照姓名 固话 手机 性别 生日的格式输出该记录。若要查询的记录不存在,则输出Not Found

输入样例:

3
Chris 1984/03/10 F +86181779452 13707010007
LaoLao 1967/11/30 F 057187951100 +8618618623333
QiaoLin 1980/01/01 M 84172333 10086
2 1 7

输出样例:

LaoLao 057187951100 +8618618623333 F 1967/11/30
Not Found

代码

 
#include<stdio.h>
struct note{ //定义结构类型struct note
    char name[20],birth[20],sex[20],tel[20],phone[20];
}a[10]; //定义结构数组a


int main()
{
	
	int N;
	scanf("%d",&N);//输入整数N
    
	for(int i=0;i<N;i++)//结构数组循环赋初值
		scanf("%s %s %s %s %s",a[i].name,a[i].birth,a[i].sex,a[i].tel,a[i].phone);
	int K;
	scanf("%d",&K);//输入整数K
	int label[K]; //定义数组lable长度为K
	for(int i=0;i<K;i++)
		scanf(" %d",&label[i]); //给数组label赋初值
		
	for(int i=0;i<K;i++) //for循环 执行K次
	{
        int t=label[i]; //将数组label的值赋给t
		if(t>N-1 || t<0) //超出数组label范围,输出not found
			printf("Not Found\n");
		else //否则输出结构数组a的下标为t的相应信息
		{			
			printf("%s %s %s %s %s\n",a[t].name,a[t].tel,a[t].phone,a[t].sex,a[t].birth);	
		}
	}
	return 0;
}

7-7 一帮一

“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。

输入格式:

输入第一行给出正偶数N(≤50),即全班学生的人数。此后N行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。

输出格式:

每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。

输入样例:

8
0 Amy
1 Tom
1 Bill
0 Cindy
0 Maya
1 John
1 Jack
0 Linda

输出样例:

Amy Jack
Tom Linda
Bill Maya
Cindy John

代码

 
#include <stdio.h>

struct student//定义结构类型struct student
{
    int sex;
    char name[9];
}stu[50];//定义结构数组stu

int main()
{
    int n, i, j, temp;

    scanf("%d", &n);//输入整数n
    for (i = 0; i < n; i++)//给结构数组的成员赋初值
    {
        scanf("%d %s", &stu[i].sex, stu[i].name);
    }
    //双重for循环
    for (i = 0; i < n; i++)
    {
        for(j = n - 1; j >= i; j--)
        {
            if (stu[i].sex != stu[j].sex && stu[j].sex != 3)
            {
                printf("%s %s\n", stu[i].name, stu[j].name);
                stu[j].sex = 3;//已经有分组的就赋值为3
                break;
            }
        }
    }
    return 0;
}

7-8 考试座位号

每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。

输入格式:

输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 试机座位号 考试座位号。其中准考证号由 16 位数字组成,座位从 1 到 N 编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。

考生信息之后,给出一个正整数 M(≤N),随后一行中给出 M 个待查询的试机座位号码,以空格分隔。

输出格式:

对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空格分隔。

输入样例:

4
3310120150912233 2 4
3310120150912119 4 1
3310120150912126 1 3
3310120150912002 3 2
2
3 4

输出样例:

3310120150912002 2
3310120150912119 1

代码

#include <stdio.h>

#define N 1000
 
struct stu //定义结构类型struct stu
{
    char s[17];
    int shi;
    int kao;
};

int main ()
{
    struct stu p[N];//定义结构数组p
    int n,i,j,m,a[N];
    scanf("%d",&n);//输入整数n
    
    for(i=0;i<n;i++)//结构数组赋值
        scanf("%s%d%d",p[i].s,&p[i].shi,&p[i].kao);
    
    scanf("%d",&m);//输入整数m
    
    for(i=0;i<m;i++) //数组赋值,m个试机座位号
        scanf("%d",&a[i]);
    
    for(i=0;i<m;i++)//for循环m次,m个试机座位号
    {
        for(j=0;j<n;j++) //for循环n次,n行数据
        {
            if(a[i]==p[j].shi) //试机座位号相等
                printf("%s %d\n",p[j].s,p[j].kao);//输出准考生号与座位号
        }
    }
    return 0;

}

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值