3.23

文章讲述了C++中的函数重载、类型转换规则以及如何处理学生数据,包括计算总分、排序和输出学生信息。通过实例展示了结构体、数组的使用以及比较函数的编写。
摘要由CSDN通过智能技术生成

函数重载:

#include <iostream>

void f(char x){

std::cout<<"2";

}

void f(bool x){

std::cout<<"1";

}

int main(){

f('A');

f(true);

}

结果2,1。;

为什么?

因为虽然以char和bool为参数的两个函数的名字但是f,

但是系统会自动识别你输入的是什么类型

函数重载中,如果实参到形参可以有多种转换

c++标准明确地规定了到底转哪个类型

但是这套明确的标注太复杂了,正常人类根本记不住

好习惯:在系统不知道转哪个类型的时候自己转

注意:自动类型转换都是在运行时转的

decltype:取一个已知值的类型并定义一个另外的值也是这个类型。

格式:decltype(已知值名称) 另外一个要定义的值

enum:枚举类型,可以自创一个类型并在里面设置它能有的值

struct创建结构体

………………一大波题目即将来临,请做好准备………………………

一,输入学生数N,每个学生的语文,数学分数

输出最高总分学生的总分

#include<iostream>

#include <algorithm>

typedef long long Int;

constexpr Int MAX_N=100;

struct Student{

Int yuwen,shuxue,zongfen; //定义一个学生结构体,包含语文成绩、数学成绩和总分

};

Student A[1+MAX_N]; //定义一个学生数组,存储每个学生的成绩

Int N; //学生数量

bool zongfenxiaoyu(Student a,Student b){ //定义一个比较函数,用于排序

return a.zongfen<b.zongfen;

}

int main(){

std::cin>>N; //输入学生数量

for(Int i=1;i<=N;i++){ //循环输入每个学生的语文和数学成绩

std::cin>>A[i].yuwen>>A[i].shuxue;

}

for(Int i=1;i<=N;i++){ //循环计算每个学生的总分

A[i].zongfen=A[i].yuwen+A[i].shuxue;

}

std::cout<<std::max_element(A+1,A+1+N,&zongfenxiaoyu)->zongfen<<std::endl; //输出总分最高的学生的总分

}

二,输入学生数N,每个学生的语文,数学分数

输出最高总分学生的学号

#include<iostream>

#include <algorithm>

typedef long long Int;

constexpr Int MAX_N=100;

struct Student{

Int yuwen,shuxue,zongfen; //定义一个学生结构体,包含语文成绩、数学成绩和总分

};

Student A[1+MAX_N]; //定义一个学生数组,存储每个学生的成绩

Int N; //学生数量

bool zongfenxiaoyu(Student a,Student b){ //定义一个比较函数,用于排序

return a.zongfen<b.zongfen;

}

int main(){

std::cin>>N; //输入学生数量

for(Int i=1;i<=N;i++){ //循环输入每个学生的语文和数学成绩

std::cin>>A[i].yuwen>>A[i].shuxue;

}

for(Int i=1;i<=N;i++){ //循环计算每个学生的总分

A[i].zongfen=A[i].yuwen+A[i].shuxue;

}

std::cout<<std::max_element(A+1,A+1+N,&zongfenxiaoyu)-A<<std::endl; //输出总分最高的学生学号

}

三,输入学生数N,每个学生的语文,数学分数

输出并列最高总分学生的数量

#include<iostream>

#include <algorithm>

typedef long long Int;

constexpr Int MAX_N=100;

struct Student{

Int yuwen,shuxue,zongfen; //定义一个学生结构体,包含语文成绩、数学成绩和总分

};

Student A[1+MAX_N]; //定义一个学生数组,存储每个学生的成绩

Int N; //学生数量

Int sum=0; //定义一个变量,用于记录总分最高的学生的数量

bool zongfenxiaoyu(Student a,Student b){ //定义一个比较函数,用于排序

return a.zongfen<b.zongfen;

}

int main(){

std::cin>>N; //输入学生数量

for(Int i=1;i<=N;i++){ //循环输入每个学生的语文和数学成绩

std::cin>>A[i].yuwen>>A[i].shuxue;

}

for(Int i=1;i<=N;i++){ //循环计算每个学生的总分

A[i].zongfen=A[i].yuwen+A[i].shuxue;

}

Int zuigaozongfen=std::max_element( //找到总分最高的学生的总分

A+1,

A+1+N,

&zongfenxiaoyu

)->zongfen;

for(Int i=1;i<=N;i++){ //循环统计总分最高的学生的数量

if(A[i].zongfen==zuigaozongfen)

sum++;

}

std::cout<<sum; //输出总分最高的学生的数量

}

四,输入学生数N,每个学生的语文,数学分数

输出按语文成绩从小到大排序的每个学生的语文和数学分数

#include<iostream>

#include <algorithm>

typedef long long Int;

constexpr Int MAX_N=100;

struct Student{

Int yuwen,shuxue,zongfen; //定义一个学生结构体,包含语文成绩、数学成绩和总分

};

Student A[1+MAX_N]; //定义一个学生数组,存储每个学生的成绩

Int N; //学生数量

Int sum=0; //定义一个变量,用于记录总分最高的学生的数量

bool yuwenxiaoyu(Student a,Student b){ //定义一个比较函数,用于排序

return a.yuwen<b.yuwen;

}

int main(){

std::cin>>N; //输入学生数量

for(Int i=1;i<=N;i++){ //循环输入每个学生的语文和数学成绩

std::cin>>A[i].yuwen>>A[i].shuxue;

}

for(Int i=1;i<=N;i++){ //循环计算每个学生的总分

A[i].zongfen=A[i].yuwen+A[i].shuxue;

}

std::sort(A+1,A+1+N,yuwenxiaoyu); //按照语文成绩从小到大排序

for(Int i=1;i<=N;i++){ //循环输出每个学生的语文和数学成绩

std::cout<<A[i].yuwen<<' '<<A[i].shuxue<<std::endl;

}

return 0;

}

五,输入学生数N,每个学生的语文,数学分数

输出按总分从小到大排序的每个学生的学号

#include<iostream>

#include <algorithm>

typedef long long Int;

constexpr Int MAX_N=100;

struct Student{

Int yuwen,shuxue,zongfen,xuehao; //定义一个学生结构体,包含语文成绩、数学成绩、总分和学号

};

Student A[1+MAX_N]; //定义一个学生数组,存储每个学生的成绩

Int N; //学生数量

Int sum=0;

bool yuewnxiaoyu(Student a,Student b){ //定义一个比较函数,用于排序

return a.yuwen<b.yuwen;

}

int main(){

std::cin>>N; //输入学生数量

for(Int i=1;i<=N;i++){ //循环输入每个学生的语文和数学成绩

std::cin>>A[i].yuwen>>A[i].shuxue;

}

for(Int i=1;i<=N;i++){ //循环计算每个学生的总分

A[i].zongfen=A[i].yuwen+A[i].shuxue;

}

for(Int i=1;i<=N;i++) //循环给每个学生赋予一个学号

A[i].xuehao=i;

std::sort(A+1,A+1+N,yuewnxiaoyu); //按照语文成绩从小到大排序

for(Int i=1;i<=N;i++){ //循环输出每个学生的学号

std::cout<<A[i].xuehao<<' ';

}

return 0;

}

………………大BOSS出现……………………

输入学生数N,科目数M,每个学生的每个科目分数

输出按总分从小到大排序的每个学生的学号

#include <algorithm>

#include <iostream>

typedef long long Int;

constexpr Int MAX_N = 100,MAX_M=1000;

struct Student {

Int fenshu[1+MAX_M]; //定义一个数组,存储每个学生的每门成绩

Int zongfen,xuehao; //定义一个学生结构体,包含总分和学号

};

Student A[1 + MAX_N]; //定义一个学生数组,存储每个学生的成绩

Int N,M; //学生数量和科目数量

Int sum = 0;

bool xianyu(Student a, Student b) { //定义一个比较函数,用于排序

for(Int i=1;i<=M;i++){

if(a.fenshu[i]!=b.fenshu[i]) //如果两个学生在某一门科目上的成绩不同,就按照成绩从小到大排序

return a.fenshu[i]<b.fenshu[i];

}

return false;

}

int main() {

std::cin >> N>>M; //输入学生数量和科目数量

for (Int i = 1; i <= N; i++) {

for(Int j=1;j<=M;j++){

std::cin>>A[i].fenshu[j]; //循环输入每个学生的每门成绩

}

}

for (Int i = 1; i <= N; i++) {

A[i].zongfen=0; //初始化每个学生的总分

for(Int j=1;j<=M;j++){

A[i].zongfen+=A[i].fenshu[j]; //计算每个学生的总分

}

}

for (Int i = 1; i <= N; i++)

A[i].xuehao = i; //循环给每个学生赋予一个学号

std::sort(A + 1, A + 1 + N,xianyu); //按照成绩从小到大排序

for (Int i = 1; i <= N; i++) {

std::cout << A[i].xuehao; //循环输出每个学生的学号

}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值