程序设计与算法(三)第02周测验001:编程填空:学生信息处理程序

举报
陈沧夜 发表于 2022/04/29 23:18:46 2022/04/29
【摘要】 程序设计与算法(三)第02周测验001:编程填空:学生信息处理程序 本文是中国大学MOOC,北京大学程序设计与算法(三)C++面向对象程序设计第二周测验。 总时间限制: 1000ms 内存限制: ...

程序设计与算法(三)第02周测验001:编程填空:学生信息处理程序

本文是中国大学MOOC,北京大学程序设计与算法(三)C++面向对象程序设计第二周测验。

  • 总时间限制:

    1000ms

  • 内存限制:

    1024kB

  • 描述

    实现一个学生信息处理程序,计算一个学生的四年平均成绩。要求实现一个代表学生的类,并且类中所有成员变量都是【私有的】。补充下列程序中的 Student 类以实现上述功能。

    #include <iostream>
    #include <string>
    #include <cstdio>
    #include <cstring>
    #include <sstream>
    #include <cstdlib>
    using namespace std;
    
    class Student {
    // 在此处补充你的代码
    };
    
    int main() {
    	Student student;        // 定义类的对象
    	student.input();        // 输入数据
    	student.calculate();    // 计算平均成绩
    	student.output();       // 输出数据
    }
    
        
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 输入

    输入数据为一行,包括: 姓名,年龄,学号,第一学年平均成绩,第二学年平均成绩,第三学年平均成绩,第四学年平均成绩。 其中姓名为由字母和空格组成的字符串(输入保证姓名不超过20个字符,并且空格不会出现在字符串两端),年龄、学号和学年平均成绩均为非负整数。信息之间用逗号隔开。

  • 输出

    输出一行数据,包括: 姓名,年龄,学号,四年平均成绩。 信息之间用逗号隔开。

  • 样例输入

    Tom Hanks,18,7817,80,80,90,70

  • 样例输出

    Tom Hanks,18,7817,80

  • 提示

    必须用类实现,其中所有成员变量都是私有的。 输出结果中,四年平均成绩不一定为整数。

注意提示:四年平均成绩不一定为整数,所以平均值我们应该用double类型

我们需要的数据是:

姓名		//不超过20字符,包含空格,故用char name[20]
年龄		//int即可
学号		//看样例,int即可
第一年成绩		//int即可
第二年成绩
第三年成绩
第四年成绩
平均成绩		//可能会出现小数点,所以用double

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

输入格式为:

姓名,年龄,学号,四年平均成绩
//Tom Hanks,18,7817,80,80,90,70

  
 
  • 1
  • 2

并且所有成员变量都是私有的,故有:

private:
    char name[20];
    int old;
    int card;
    int n1,n2,n3,n4;
    double aver;
    char c;		
//输入使用的是`,`分隔,所以我们需要使用一个`char`字符接收`,`的输入

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这时候我们就要注意了。

cin的输入是遇到空白停止的,所以我们不能使用。有人说了,既然是遇到空白停止了。用两次cin,一次存姓,一次存名,不行嘛?

是不可以的。看看输入格式我们发现后面存名的一次cin可能会把,号也输入进去。导致后面的数据不能完好的存储起来。

所以我们的输入要求是:

输入遇到,停止或者输入了20个字符停止。

按照这个条件,我们可以使用getline()

getline()有三个参数,第一个是存入的数组名,第二个是输入的字符数,第三个是遇到哪个字符就停止输入。

getline(name, 20 ,',')
//第一个是存入的数组名,第二个是输入的字符数20个,第三个是遇到字符,就停止输入。

  
 
  • 1
  • 2

输入的问题解决了。接下来看主函数。

int main() {
	Student student;        // 定义类的对象
	student.input();        // 输入数据
	student.calculate();    // 计算平均成绩
	student.output();       // 输出数据
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

发现成员函数都没有参数输入。且成员函数有:

input(), calculate(), output()三个,现在开始写成员函数

public:
    void input(){
        cin.getline( name, 20, ',');
  		cin >> old >> c >> card >> c >> n1 >> c >> n2 >> c >> n3 >> c >> n4;
    }
    void calculate(){
        aver = (n1 + n2 + n3 + n4) / 4.0;
    }
    void output(){
        cout << name << "," << old << "," << card << "," << aver;
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

至此,编写完成。我们看看最终的代码

private:
    char name[20];
    int old;
    int card;
    int n1,n2,n3,n4;
    double aver;
    char c;
public:
    void input(){
        cin.getline(name,20,',');
        cin>>old>>c>>card>>c>>n1>>c>>n2>>c>>n3>>c>>n4;
    }
    void calculate(){
        aver = (n1 +n2 +n3 +n4)/4.0;
    }
    void output(){
        cout<<name<<","<<old<<","<<card<<","<<aver;
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

提交,通过,记得下载通过码

文章来源: blog.csdn.net,作者:沧夜2021,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/CANGYE0504/article/details/104709328

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。