当前位置: 首页 > article >正文

PTA结构体经典编程题

目录

第一题:计算平均成绩

第二题:平面向量加法

第三题:查找书籍

第四题:通讯录排序

第五题:计算职工工资


 

 

第一题:计算平均成绩

ead5ae0dde7d4200a3393a12e5ad7378.png思路:看到一个学生的基本信息,所以定义一个结构体变量,然后呢,不知道人数的多少,这里用vector设立一个动态数组,接着遍历所有的学生,输入信息。将学生的成绩累加起来,接着求解平均值。然后判断遍历输出即可

#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;

struct Student {
    string id;
    string name;
    int score;
};

int main() {
    int N;
    cin >> N;

    vector<Student> students(N);
    double sum = 0.0;

    for (int i = 0; i < N; i++) {
        cin >> students[i].id >> students[i].name >> students[i].score;
        sum += students[i].score;
    }

    double average = sum / N;
    printf("%.2lf\n", average);

    for (int i = 0; i < N; i++) {
        if (students[i].score < average) {
            cout << students[i].name << " " << students[i].id << endl;
        }
    }

    return 0;
}

第二题:平面向量加法

ed9e356af8874b7085f67af1e08e5a51.png思路:

简单定义见结构体变量,最后if(fabs(v.x)<0.05) 的判断是为了解决浮点数精度问题。在实际计算中,由于浮点数的表示方式和计算精度的限制,可能会导致一些微小的误差。因此,当两个浮点数本应为零但实际上非常接近零时,为了避免输出 -0.0 这样不符合要求的格式,可以通过判断绝对值小于一个很小的阈值(比如 0.05)来将其修正为零。

#include<stdio.h>
#include<math.h>
struct ping {
	double x;
	double y;
};
int main(){
	struct ping v,v1,v2;
	scanf("%lf%lf%lf%lf",&v1.x,&v1.y,&v2.x,&v2.y);
	v.x=v1.x+v2.x;
	v.y=v1.y+v2.y;
	if(fabs(v.x)<0.05) v.x=fabs(v.x);
	if(fabs(v.y)<0.05) v.y=fabs(v.y);
	printf("(%.1f, %.1f)",v.x,v.y);
    return 0;
}

第三题:查找书籍

查找书籍

348c3aa54aa946de942fa61af98deb27.png思路:这个题的细节还是蛮多的。整体思路很简单,定义结构体变量,然后输入每本书的书名和价格,但是,要注意在输入书的价格的时候,cin不读取最后的\n,这里必须要把\n给处理掉,这里在c++可以用cin.ignore,如果在c可以用getchar,如果不处理,那么\n一直在缓冲区,那么下一次\n就会被geiline给读取,影响结果。接着由于不知道最低价格多少,我们就令第一本书为最低价,然后遍历判断即可,最后输出书名的时候也要注意格式,如用printf输出string类型的时候,必须在变量名后加.c_str(),否则不能输出。

 

#include <iostream>
#include <vector>
#include <string>

using namespace std;

struct Book {
    string name;
    double price;
};

int main() {
    int n;
    cin >> n;
    cin.ignore();  // 忽略第一个换行符

    vector<Book> books(n);
    for (int i = 0; i < n; i++) {
        getline(cin, books[i].name);
        cin >> books[i].price;
        cin.ignore();  // 忽略每个价格后面的换行符
    }

    double maxPrice = books[0].price;
    double minPrice = books[0].price;
    string maxBook = books[0].name;
    string minBook = books[0].name;

    for (int i = 1; i < n; i++) {
        if (books[i].price > maxPrice) {
            maxPrice = books[i].price;
            maxBook = books[i].name;
        }
        if (books[i].price < minPrice) {
            minPrice = books[i].price;
            minBook = books[i].name;
        }
    }

    printf("%.2lf, %s\n", maxPrice, maxBook.c_str());
    printf("%.2lf, %s", minPrice, minBook.c_str());

    return 0;
}

第四题:通讯录排序

d18ac6f4f9fb4d769cf2375807bf2bb9.png

思路:

这个题的关键是,要判断年龄的大小,这里我们不要想复杂,直接通过日期数的大小来判断,数越小,年龄越大。然后就是根据年龄大小来排序

#include<bits/stdc++.h>
using namespace std;
struct friends {
	string name;
	int birthday;
	string phone;
};
bool comparebirthday(friends friend1, friends friend2);
int main()
{
	int n;
	cin >> n;
	vector<friends>list(n);
	for (int i = 0; i < n; i++)
	{
		cin >> list[i].name;
		cin >> list[i].birthday;
		cin >> list[i].phone;
	}
	//sort
	sort(list.begin(), list.end(), comparebirthday);
	//shuchu
	for (int i = 0; i < n; i++)
	{
		cout<< list[i].name << ' ' << list[i].birthday << " " << list[i].phone << endl;
	}
	return 0;
}
bool comparebirthday(friends friend1, friends friend2)
{
	return friend1.birthday < friend2.birthday;
}

第五题:计算职工工资

f4fb415333494f1890d49a08673811a9.png思路:按步就班,先定义后输入然后输出,注意格式即可,

#include<bits/stdc++.h>
using namespace std;
struct salry
{
	string name;
	float gz1;
	float gz2;
	float zc;
};
int main()
{
	int n;
	cin >> n;
	vector<salry>worker(n);
	for (int i = 0; i < n; i++)
	{
		cin >> worker[i].name >> worker[i].gz1 >> worker[i].gz2 >> worker[i].zc;
	}
	vector<float>sj(n);
	for (int i = 0; i < n; i++)
	{
		sj[i] = worker[i].gz1 + worker[i].gz2 - worker[i].zc;
	}
	for (int i = 0; i < n; i++)
	{
		printf("%s %.2lf\n", worker[i].name.c_str(), sj[i]);
	}

	return 0;
}

 

 


http://www.kler.cn/a/155101.html

相关文章:

  • 行业类别-金融科技-子类别区块链技术-细分类别智能合约-应用场景供应链金融课题
  • [JAVAEE] 面试题(四) - 多线程下使用ArrayList涉及到的线程安全问题及解决
  • AUTOSAR_EXP_ARAComAPI的7章笔记(3)
  • 【数据结构与算法】第12课—数据结构之归并排序
  • neo4j desktop基本入门
  • Qt 和 WPF(Windows Presentation Foundation)
  • Android studio Load error:undefined path variables
  • ARM架构安全简介
  • 数据链路层之VLAN基本概念和基本原理
  • springboot 整合 RocketMQ 可用于物联网,电商高并发场景下削峰,保证系统的高可用
  • HarmonyOS应用开发——程序框架UIAbility、启动模式与路由跳转
  • 鸿蒙绘制折线图基金走势图
  • 一缕青丝寄相思
  • 万宾科技第四代可燃气体监测仪的作用
  • C-语言每日刷题
  • 测试类运行失败:TestEngine with ID ‘junit-jupiter‘ failed to discover tests
  • docker+jmeter+influxdb+granfana
  • 力扣labuladong一刷day25天
  • MacDroid Pro for Mac – 安卓设备文件传输助手,实现无缝连接与传输!
  • 整数分频,奇偶分频。
  • 【BVITS2】配置debug记录——Bert-VITS2-Integration-Pack-v2.0.2
  • 第十节HarmonyOS 使用资源引用类型
  • 在 TypeScript 中,interface、implements 和 extends 的作用
  • WT2003H语音芯片系列:通过bin文件实现板载语音更新,支持宽范围音频码率
  • CC++枚举类型与类型定义(typedef)
  • 【MySql】悲观锁和乐观锁的介绍