软件系统分析与设计 第七节 第八节 制表符

本文详细介绍了C++中如何使用结构体存储学生各科成绩,并通过函数计算总分、平均分及绩点,展示了代码实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第7 8节 绩点结构体版

main.cpp

#include “Score.h”
int main()
{
outputTitle();
Score ZhangSan = {58,90,73,81,77};
Score LiSi = {66,52,83,79,61};
Score WangWu = {92,64,100,64,70};
output(ZhangSan);
output(LiSi);
output(WangWu);
return 0;
}

Score.cpp

#include “Score.h”
#include
#include //包含标准库的头文件
using std::cout;
using std::endl;
using namespace std;
using std::fixed;
using std::setprecision;
using std::left;
using std::setw;

int getSum(Score score)
{
int sum = score.chinese +score.english + score.maths+score.chemistry+
score.physical;
return sum;
}
//求平均值
double getAverage(Score score)
{

return getSum(score)/static_cast(amount);

}
//输出各科成绩即平均值
void output(Score score)
{
cout<<setw(columnWidth)<<score.chinese<<setw(columnWidth)<<score.maths<<setw(columnWidth)<<score.english<<setw(columnWidth)<<
score.physical<<setw(columnWidth)<<score.chemistry<<setw(columnWidth)<<getSum(score)<<setw(columnWidth)<<getAverage(score)<<endl;
}
void outputTitle()
{
//水平制表符setw(columnWidth)是一个转义字符,属于字符型字面量
//输出一setw(columnWidth)所产生的效果:输出若干个空格(最少输出1个空格 最多输出8个空格),让光标自动跳到下一个制表位
//制表位所占位置是有规律的:第1位[0] 第9位[8] 第17位[16] 第25位[24]
//由于physical 所占位数为8 输出完后光标来到了下一个制表位所以输出了8个空格 导致没有对齐

//制表位的所占位置的规律是由操作系统决定的

//指定被输出的每一个数据的字符宽度 ,默认字符宽度是0
//数据的标准宽度:58的标准宽度的是2 "chinese"的标准宽度是7,…
//如果标准宽度>字符宽度,那么以标准宽度进行输出
//如果字符宽度>标准宽度,那么以字符宽度进行输出,空余位置将被填充字符填充
//默认填充字符是空格

//我的理解:标准宽度是字符实际的宽度
// 字符宽度是指定的一个制表符站位的宽度(如默认是8)

//如果指定对齐格式是左对齐,那么填充字符将填充在数据的右边
//右对齐 填充在数据的左边

//操纵器 设置左对齐
cout<<left;

cout<<fixed<<setprecision(2);
//setw只对下一个被输出的数据有效,不会一直有效
cout<<setw(columnWidth)<<“chinese”<<setw(columnWidth)<<“maths” <<setw(columnWidth)<<“english” <<setw(columnWidth)<<
“physical”<<setw(columnWidth)<<“chemistry”<<setw(columnWidth)<<“sum”<<setw(columnWidth)<<“average”<<endl;
}
//将一个百分制的成绩转换为绩点
double toPoint(int grade)
{
double point = 0.0;
const int passGrade =60;
if(grade>=passGrade)
point =(grade-passGrade)/10.0+1.0;
return point;
}

//计算某个学生(score类型结构变量)的平均分绩点
double getAveragePoint(Score score)
{
double average=getAverage(score);
//C++11 版本以上支持使用标准库round函数进行四舍五入
int interger=static_cast(average);
double decimal =average-interger;
if(decimal>=0.5)
interger++;
return toPoint(interger);

}

Score.h

#ifndef SCORE_H_INCLUDED
#define SCORE_H_INCLUDED

struct Score
{
int chinese;
int maths;
int english;
int physical;
int chemistry;
};
const int columnWidth=10; //列的宽度
const int amount = 5; //科目数量
int getSum(Score score);
double getAverage(Score score);
void output(Score score);
void outputTitle();
#endif // SCORE_H_INCLUDED

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值