PTA结构体经典编程题

目录

第一题:计算平均成绩

第二题:平面向量加法

第三题:查找书籍

第四题:通讯录排序

第五题:计算职工工资


 

 

第一题:计算平均成绩

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

#include 
#include 
#include 
using namespace std;

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

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

    vector 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;
}

第二题:平面向量加法

PTA结构体经典编程题_第2张图片思路:

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

#include
#include
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;
}

第三题:查找书籍

查找书籍

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

 

#include 
#include 
#include 

using namespace std;

struct Book {
    string name;
    double price;
};

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

    vector 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;
}

第四题:通讯录排序

PTA结构体经典编程题_第4张图片

思路:

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

#include
using namespace std;
struct friends {
	string name;
	int birthday;
	string phone;
};
bool comparebirthday(friends friend1, friends friend2);
int main()
{
	int n;
	cin >> n;
	vectorlist(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;
}

第五题:计算职工工资

PTA结构体经典编程题_第5张图片思路:按步就班,先定义后输入然后输出,注意格式即可,

#include
using namespace std;
struct salry
{
	string name;
	float gz1;
	float gz2;
	float zc;
};
int main()
{
	int n;
	cin >> n;
	vectorworker(n);
	for (int i = 0; i < n; i++)
	{
		cin >> worker[i].name >> worker[i].gz1 >> worker[i].gz2 >> worker[i].zc;
	}
	vectorsj(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;
}

 

 

你可能感兴趣的:(c语言,笔记,微信,其他,经验分享)