PTA 2022秋季C语言专题实验08

目录

7-1 平面向量加法

7-2 通讯录排序

7-3 计算平均成绩

7-4 学分统计

7-5 游戏玩家


7-1 平面向量加法

本题要求编写程序,计算两个二维平面向量的和向量。

输入格式:

输入在一行中按照“x1​ y1​ x2​ y2​”的格式给出两个二维平面向量v1​=(x1​,y1​)和v2​=(x2​,y2​)的分量。

输出格式:

在一行中按照(x, y)的格式输出和向量,坐标输出小数点后一位(注意不能输出−0.0)。

输入样例:

3.5 -2.7 -13.9 8.7

输出样例:

(-10.4, 6.0)

代码: 

#include <stdio.h>
int main()
{
    double x1, y1, x2, y2, x, y;
    scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
    x = x1 + x2; y = y1 + y2;
    if (x > -0.05 && x < 0)    //x取(-0.05,0)区间输出的值取一位小数为:-0.0
        x = 0.0;               //所以这里是将值为-0.0的改为0.0
    if (y > -0.05 && y < 0)
        y = 0.0;
    printf("(%.1lf, %.1lf)", x, y);
    return 0;
}

7-2 通讯录排序

输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。

输入格式:

输入第一行给出正整数n(<10)。随后n行,每行按照“姓名 生日 电话号码”的格式给出一位朋友的信息,其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd格式的日期,“电话号码”是不超过17位的数字及+-组成的字符串。

输出格式:

按照年龄从大到小输出朋友的信息,格式同输出。

输入样例:

3
zhang 19850403 13912345678
wang 19821020 +86-0571-88018448
qian 19840619 13609876543

输出样例:

wang 19821020 +86-0571-88018448
qian 19840619 13609876543
zhang 19850403 13912345678

代码: 

#include<stdio.h>
struct ren//创建ren结构体
{
	char name[10];
	int year;
	char tel[17];
};
int main()
{
	int n;
	scanf("%d",&n);
	struct ren temp;//struct ren为结构体名; temp结构体变量
	struct ren fri[n];//fri[n]结构体数组
	for(int i=0;i<n;i++)//将输入的信息存放到数组当中
	{
		scanf("%s %d %s",&fri[i].name,&fri[i].year,&fri[i].tel);
	}
    //选择排序
	for(int i=0;i<n;i++)//排序次数
	{
		for(int j=i+1;j<n;j++)//第i+1次排序进行比较的次数
		{
			if(fri[i].year>fri[j].year)//生日年份越大岁数越小,将年龄小的一行信息排在后面
			{
				temp=fri[i];//年龄小的与年龄大的整行信息交换位置
				fri[i]=fri[j];
				fri[j]=temp;
			 } 
		}
	}
	for(int i=0;i<n;i++)
	{
		printf("%s %d %s\n",fri[i].name,fri[i].year,fri[i].tel);
	}
	return 0;
}

7-3 计算平均成绩

给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和成绩([0,100]区间内的整数),要求计算他们的平均成绩,并顺序输出平均线以下的学生名单。

输入格式:

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

输出格式:

首先在一行中输出平均成绩,保留2位小数。然后按照输入顺序,每行输出一位平均线以下的学生的姓名和学号,间隔一个空格。

输入样例:

5
00001 zhang 70
00002 wang 80
00003 qian 90
10001 li 100
21987 chen 60

输出样例:

80.00
zhang 00001
chen 21987

代码: 

#include<stdio.h>
struct std{
        char id[6];//存入字符 长度+1 保存结束标志'\0'
        char name[11];
        double score;
    };
int main()
{
    int n,i;
    double average,sum=0;//定义平均成绩
    scanf("%d",&n);
    struct std a[n];
    for(i=0;i<n;i++)
    {
        scanf("%s %s %lf",a[i].id,a[i].name,&a[i].score);//数组不要&
        sum+=a[i].score;
    }
    average=sum/n;//计算平均成绩
    printf("%.2f\n",average);
    for(i=0;i<n;i++)
    {
        if(a[i].score<average)
        {
            printf("%s %s\n",a[i].name,a[i].id);
        }
    }
    return 0;
}

7-4 学分统计

已知某大学校选课成绩选用四级制,分别为A、B、C、D,其中A、B、C级获得学分,D级没有学分。规定学业成绩大于等于85的为A级,70-84的评为B级,60-69的评为C级,60分以下的评为D级,请你写一个程序将得分转换为等级,并统计没有获得学分的人数。

输入格式:

输入第一行为一个正整数n(n<=10),代表选课学生人数,随后n行,每行为一个学生信息,包括学号(长度为12的不带空格的数字串)、姓名(长度不超过20的不带空格的一串字符)、得分(大于等于0且小于等于100的整数)。

输出格式:

按照输入顺序输出所有选课学生的最终成绩等级信息,一个选课学生信息占一行,包括学号、姓名、成绩等级,中间用一个空格分隔,随后一行输出没有获得学分的人数。

输入样例:

2
201001010101 li 85
201200000101 zhang 59

输出样例:

201001010101 li A
201200000101 zhang D
1

代码: 

#include<stdio.h>
struct stu{
    char id[13];
    char name[21];
    int score;
};
int main()
{
    int n;
    scanf("%d",&n);
    struct stu a[n];
    int count = 0;
    for(int i=0;i<n;i++)
    {
        scanf("%s %s %d",a[i].id,a[i].name,&a[i].score);
        printf("%s %s ",a[i].id,a[i].name);
        if(a[i].score >= 85)
            printf("A\n");
        else if(a[i].score >= 70)
            printf("B\n");
        else if(a[i].score >= 60)
            printf("C\n");
        else 
        {
            printf("D\n");
            count++;
        }
    }
    printf("%d",count);
    return 0;
}

7-5 游戏玩家

某游戏公司年末推出一款新游戏,共设置100层关卡,邀请游戏玩家们内测,根据到达关卡层级对玩家授予不同称号,并对获得神级玩家称号的玩家进行奖励,赠送高级游戏装备一套。已知到达关卡90-100的玩家授予神级玩家称号(S),到达关卡80-89的玩家授予牛级玩家称号(N),达到关卡70-79的玩家授予高级玩家称号(G),到达70以下关卡的授予普通玩家称号(C)。请你帮助该公司记录玩家称号,并统计能够获得高级游戏装备的玩家人数。

输入格式:

输入为2行,第一行为一个正整数n(n<=10),代表玩家人数,随后n行,每行为一个玩家信息,包括玩家ID(长度为9的不带空格的数字串)、昵称(长度不超过20的不带空格的一串字符)、到达关卡层级数(大于等于0的整数且小于等于100的整数)。

输出格式:

按照输入顺序输出所有玩家的等级信息,一个玩家信息占一行,包括玩家ID、昵称、称号,中间用一个空格分隔,随后一行输出能够获赠高级游戏装备的人数。

输入样例:

2
000001 li 90
000002 zhang 79

输出样例:

000001 li S
000002 zhang G
1

代码: 

#include<stdio.h>
struct std{
    char id[10];//采用字符类型,包含'\0'结束字符
    char name[21];
    int ceng;
};
int main()
{
    int n,i;
    int count=0;
    scanf("%d",&n);
    struct std a[n];
    for(i=0;i<n;i++)
    {
        scanf("%s %s %d",&a[i].id,&a[i].name,&a[i].ceng);//数组不用加&
        printf("%s %s ",a[i].id,a[i].name);//输出玩家ID、昵称
        if(a[i].ceng>=90&&a[i].ceng<=100)
        {
            printf("S\n");
            count++;
        }
        else if(a[i].ceng>=80&&a[i].ceng<=89)
            printf("N\n");
        else if(a[i].ceng>=70&&a[i].ceng<=79)
            printf("G\n");
        else if(a[i].ceng<70)
            printf("C\n");
    }
    printf("%d",count);
    return 0;
}

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值