《算法笔记》2.8小节——C/C++快速入门-结构体(struct)的使用

2024-02-28 00:38

本文主要是介绍《算法笔记》2.8小节——C/C++快速入门-结构体(struct)的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《算法笔记》2.8小节——C/C++快速入门->结构体(struct)的使用

问题 A: C语言11.1

[命题人 : 外部导入]
时间限制 : 1.000 sec 内存限制 : 32 MB

题目描述
完成一个对候选人得票的统计程序。假设有3个候选人,名字分别为Li,Zhang和Fun。使用结构体存储每一个候选人的名字和得票数。记录每一张选票的得票人名,输出每个候选人最终的得票数。结构体可以定义成如下的格式:
struct person {
char name[20];
int count;
}leader[3] = {“Li”, 0, “Zhang”, 0, “Fun”, 0};

输入
第一行有一个整数n,表示以下有n张选票信息将会输入。保证n不大于100。
以后的n行中,每一行包含一个人名,为选票的得票人。保证每一个人名都是Li,Zhang和Fun中的某一个。

输出
有三行,分别为Li,Zhang和Fun每人的得票数。格式为首先输出人名,其后输出一个冒号,最后输出候选人的得票数。
请注意行尾输出换行。

样例输入 Copy
10
Li
Li
Fun
Zhang
Zhang
Fun
Li
Fun
Zhang
Li
样例输出 Copy
Li:4
Zhang:3
Fun:3

程序代码:

#include<cstdio>
#include<cstring>
struct person {char name[20];int count;
}leader[3] = {"Li", 0, "Zhang", 0, "Fun", 0};
int main() 
{int N;scanf("%d",&N);for(int i=0;i<N;i++){char s[10];scanf("%s",s);if(strcmp(s,leader[0].name)==0)leader[0].count++;else if(strcmp(s,leader[1].name)==0)leader[1].count++;else if(strcmp(s,leader[2].name)==0)leader[2].count++;}for(int i=0;i<3;i++){printf("%s:%d\n",leader[i].name,leader[i].count);}return 0;
}

问题 B: C语言11.2

[命题人 : 外部导入]
时间限制 : 1.000 sec 内存限制 : 32 MB

题目描述
定义一个结构体student,存储学生的学号、名字、性别和年龄,读入每个学生的所有信息,保存在结构体中,并输出。结构体student的定义如下:
struct student {
int num;
char name[20];
char sex;
int age;
};
本题要求使用指向结构体数组的指针进行输入和输出。

输入
第一行有一个整数n,表示以下有n个学生的信息将会输入。保证n不大于20。
以后的n行中,每一行包含对应学生的学号、名字、性别和年龄,用空格隔开。保证每一个人名都不包含空格且长度不超过15,性别用M和F两个字符来表示。

输出
有n行,每行输出一个学生的学号、名字、性别和年龄,用空格隔开。
请注意行尾输出换行。

样例输入 Copy
3
10101 LiLin M 18
10102 ZhangFun M 19
10104 WangMin F 20
样例输出 Copy
10101 LiLin M 18
10102 ZhangFun M 19
10104 WangMin F 20

程序代码:

#include<cstdio>
#include<cstring>
struct student {int num;char name[20];char sex;int age;
};
int main() 
{int n;scanf("%d",&n);student s[10];for(int i=0;i<n;i++){scanf("%d %s %c %d",&s[i].num,s[i].name,&s[i].sex,&s[i].age);}for(int i=0;i<n;i++){printf("%d %s %c %d\n",s[i].num,s[i].name,s[i].sex,s[i].age);}return 0;
}

问题 C: C语言11.4

[命题人 : 外部导入]
时间限制 : 1.000 sec 内存限制 : 32 MB

题目描述
设有若干个人员的数据,其中包含学生和教师。学生的数据中包括:号码、姓名、性别、职业、班级。教师的数据包括:号码、姓名、性别、职业、职务。可以看出,学生和教师所包含的数据是不同的。现在要求把这些数据放在同一个表格中储存,使用结构体中的共用体实现。结构体定义如下:
struct {
int num;
char name[10];
char sex;
char job;
union {
int class;
char position[10];
}category;
};
在以上的结构体中,如果job项为s(学生),则第5项为class(班级);如果job项是t(教师),则第5项为position(职务)。
输入几个人员的数据,将其保存在以上包含共用体的结构体数组中,并输出。

输入
第一行有一个整数n,表示以下n行分别表示n个人员的数据。保证n不超过100。
之后的n行,每行有5项用空格隔开的内容。前4项分别为人员的号码(整数)、姓名(长度不超过9的无空格字符串)、性别(字符,m或f)和职业(字符,s或t)。如果第4项是s,则第5项为一个整数,表示班级;如果第4项是t,则第5项为一个长度不超过9的无空格字符串,表示职务。

输出
共有n行,与输入格式相同,输出读入的所有内容。
请注意行尾输出换行。

样例输入 Copy
2
101 Li f s 501
102 Wang m t prof
样例输出 Copy
101 Li f s 501
102 Wang m t prof

程序代码:

#include<cstdio>
#include<cstring>
struct person{int num;char name[10];char sex;char job;union {int Class;char position[10];}category;
};
int main()
{int n;scanf("%d", &n);person per[n];for(int i=0;i<n;i++){scanf("%d %s %c %c",&per[i].num,per[i].name,&per[i].sex,&per[i].job);if(per[i].job=='s')scanf("%d",&per[i].category.Class);else if(per[i].job=='t')scanf("%s",per[i].category.position);}for(int i=0;i<n;i++){printf("%d %s %c %c\n",per[i].num,per[i].name,per[i].sex,per[i].job);if(per[i].job=='s')printf("%d\n",per[i].category.Class);else if(per[i].job=='t')printf("%s\n",per[i].category.position);}return 0;
}

问题 D: C语言11.7

[命题人 : 外部导入]
时间限制 : 1.000 sec 内存限制 : 32 MB

题目描述
编写两个函数input和print,分别用来输入5个学生的数据记录和打印这5个学生的记录。对于每一个学生,其记录包含了学号、名字、3门课程的成绩共5项。用主函数分别调用input和print函数进行输入和输出。
要求使用结构体数组实现,结构体中包括了每个学生的5项记录。

输入
共有5行,每行包含了一个学生的学号(整数)、名字(长度不超过19的无空格字符串)和3门课程的成绩(0至100之间的整数),用空格隔开。

输出
与输入格式相同,每行输出一个学生的所有记录。
请注意行尾输出换行。

样例输入 Copy
101 AAA 80 81 82
102 BBB 83 84 85
103 CCC 86 87 88
104 DDD 89 90 91
105 EEE 92 93 94
样例输出 Copy
101 AAA 80 81 82
102 BBB 83 84 85
103 CCC 86 87 88
104 DDD 89 90 91
105 EEE 92 93 94

程序代码:

#include<cstdio>
struct student
{int num;char name[20];int score1;int score2;int score3;	
}stu[5];
void input()
{for(int i=0;i<5;i++)scanf("%d %s %d %d %d",&stu[i].num,stu[i].name,&stu[i].score1,&stu[i].score2,&stu[i].score3);
}
void print()
{for(int i=0;i<5;i++)printf("%d %s %d %d %d\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3);
}
int main()
{			input();print();return 0;
}

问题 E: C语言11.8

[命题人 : 外部导入]
时间限制 : 1.000 sec 内存限制 : 32 MB

题目描述
有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩。读入这10个学生的数据,要求输出3门课程的总平均成绩,以及个人平均分最高的学生的数据(包括学号、姓名、3门课程成绩、平均分数)。

输入
共有10行,每行包含了一个学生的学号(整数)、名字(长度不超过19的无空格字符串)和3门课程的成绩(0至100之间的整数),用空格隔开。

输出
第一行包含了3个实数,分别表示3门课程的总平均成绩,保留2位小数,每个数之后输出一个空格。
第二行输出个人平均分最高的学生的数据,与输入数据格式相同。如果有多位个人平均分最高的学生,输出按照输入顺序第一个最高分的学生数据。
请注意行尾输出换行。

样例输入 Copy
101 AAA 80 81 82
102 BBB 83 84 85
103 CCC 86 87 88
104 DDD 89 90 91
105 EEE 92 93 94
106 FFF 80 90 100
107 GGG 85 90 95
108 HHH 80 85 90
109 III 90 91 92
110 JJJ 91 88 87
样例输出 Copy
85.60 87.90 90.40
105 EEE 92 93 94

程序代码:

#include <cstdio>
struct student
{int num;char name[20];int score1;int score2;int score3;double average;
}stu[10];
void input() 
{for(int i=0;i<10;i++) scanf("%d %s %d %d %d", &stu[i].num, stu[i].name, &stu[i].score1, &stu[i].score2, &stu[i].score3);
}
void output()
{int max=0;double sum1=0,sum2=0,sum3=0;for(int i=0;i<10;i++){scanf("%d %s %d %d %d",&stu[i].num,stu[i].name,&stu[i].score1,&stu[i].score2,&stu[i].score3);stu[i].average=double(stu[i].score1+stu[i].score1+stu[i].score2+stu[i].score3)/3;sum1+=stu[i].score1;sum2+=stu[i].score2;sum3+=stu[i].score3;if(stu[i].average>stu[max].average)max=i;}printf("%.2f %.2f %.2f\n",sum1/10,sum2/10,sum3/10);printf("%d %s %d %d %d\n",stu[max].num,stu[max].name,stu[max].score1,stu[max].score2,stu[max].score3);
}
int main()
{input();output();return 0;
}

这篇关于《算法笔记》2.8小节——C/C++快速入门-结构体(struct)的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/754010

相关文章

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、