C++第三章课后作业答案及解析---指针的使用
今天继续完成上周没有完成的习题---C++第三章课后作业,本章题涉及指针的使用,有指向对象的指针做函数参数,对象的引用以及友元类的使用方法等
它们具体的使用方法在下面的题目中会有具体的解析(解析标注在代码中)。
题目:
1.建立一个对象数组,内放5个学生数据(学号,成绩),设立一个函数max,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。
#include <iostream>
#include<stdlib.h>
using namespace std;
class Student
{public:
//定义学生数据函数
Student(int n,float s):num(n),score(s){}
int num;
float score;
}; void main()
{
//构建五个学生数据信息
Student stud[]={
Student(,78.5),Student(,85.5),Student(,98.5),
Student(,100.0),Student(,95.5)};
void max(Student* );//定义max函数
Student *p=&stud[];//p指向数组第一个元素,p为实参,arr为形参
max(p);//调用函数,找到学生中成绩最高者,并输出其学号
}
//构建max函数,用指向对象(学生)的指针作函数的参数
void max(Student *arr)
{ //假设学号为1的学生成绩最高
float max_score=arr[].score;
int k=;
//通过循环,逐个比较学生的成绩,直到查询完所有学生成绩,并返回最大值
for(int i=;i<;i++)
{
if(arr[i].score>max_score)
{
max_score=arr[i].score;
k=i;
}
}
//打印出成绩最大的学生的学号和成绩
cout<<arr[k].num<<" "<<max_score<<endl;
system("pause");
}
2.修改第6题的程序,增加一个fun函数,改写main函数。改为在fun函数中调用change和display函数。在fun函数中使用对象的引用(Student &)作为形参。
#include<iostream>
#include<stdlib.h>
using namespace std;
class Student
{
public:
//学生数据的构造函数
Student(int n,float s):num(n),score(s){}
//修改学生成绩的函数
void change(int n,float s){num = n;score = s;}
//输出学生成绩和学号的函数
void display(){cout<<num<<" "<<score<<endl;}
private:
int num;
float score;
};
//在fun函数中使用对象的引用(Student & stud)作为形参
void fun (Student & stud){
cout<<"修改前的学生数据信息"<<endl;
stud.display();
//调用change函数进行对学生数据信息的修改
stud.change(, 80.5);
cout<<"修改后的学生数据信息"<<endl;
stud.display();
}
int main()
{
//定义一个学生数据信息
Student stud(, 78.5);
//调用fun函数
fun(stud);
system("pause");
return ; }
3.将例3.13中的Time类声明为Date类的友元类,通过Time类中的display函数引用Date类对象的私有数据,输出年,月,日和时,分,秒。
#include <iostream>
#include<stdlib.h>
using namespace std;
//声明Time,因为在Date中提前使用
class Time;
class Date{
public:
Date(int,int,int);
//将Time类声明为Date类的友元类
friend Time;
private:
int month;
int day;
int year;
};
//Date函数
Date::Date(int y,int m,int d):year(y),month(m),day(d){ }
class Time{
public:
Time(int,int,int);
void display(const Date &);
private:
int hour;
int minute;
int sec;
};
//Time函数
Time::Time(int h,int m,int s):hour(h),minute(m),sec(s){ }
//display函数
void Time::display(const Date &d){
//引用Date类中的私有数据
cout<<d.year<<"/"<<d.month<<"/"<<d.day<<endl;
//引用本类中的私有数据
cout<<hour<<":"<<minute<<":"<<sec<<endl;}
int main(){
Time t1(,,);
Date d1(,,);
//通过Time类中的display函数引用Date类对象的私有数据
t1.display(d1);
system("pause");
return ;
}
小结:
指针在编程学习过程中,是非常复杂的,必须非常明了其中的逻辑指向,才能更好的运用指针解决问题。C语言的指针使用非常广泛,但C++涉及的指针内容不多,主要为指针指向数组指定元素,指针指向函数,用指向对象的指针做函数参数几种。明确指针的指向和指针的取值,指针部分的学习就不难了。
C++第三章课后作业答案及解析---指针的使用的更多相关文章
- CSAPP深入理解计算机系统(第二版)第三章家庭作业答案
<深入理解计算机系统(第二版)>CSAPP 第三章 家庭作业 这一章介绍了AT&T的汇编指令 比较重要 本人完成了<深入理解计算机系统(第二版)>(以下简称CSAPP) ...
- Hand on Machine Learning第三章课后作业(1):垃圾邮件分类
import os import email import email.policy 1. 读取邮件数据 SPAM_PATH = os.path.join( "E:\\3.Study\\机器 ...
- Hand on Machine Learning第三章课后作业(2):其余小练习
-#!/usr/bin/env python -# # # -- coding: utf-8 -- -# # # @Time : 2019.5.22 14:09 -# # # @Author : An ...
- c++ primer plus 第三章 课后题答案
#include<iostream> using namespace std; int main() { ; int shen_gao; cout <<"Please ...
- C语言程序设计:现代方法(第2版)第三章全部习题答案
前言 本人在通过<C语言程序设计:现代方法(第2版)>自学C语言时,发现国内并没有该书完整的课后习题答案,所以就想把自己在学习过程中所做出的答案分享出来,以供大家参考.这些答案是本人自己解 ...
- JAVA第三周课后作业
JAVA课后作业 一.枚举类型 代码: enum Size{SMALL,MEDIUM,LARGE}; public cl ass EnumTest { public static void main( ...
- Java语言程序设计(第三版)第二章课后习题答案(仅供参考)
2.1 注意不同类型转换 import java.util.Scanner; public class Ch02 { public static void main(String[] args) ...
- 深入理解计算机系统_3e 第二章家庭作业答案
初始完成者:哈尔滨工业大学 李秋豪 许可:除2.55对应代码外(如需使用请联系randy.bryant@cs.cmu.edu),任何人可以自由的使用,修改,分发本文档的代码. 本机环境: (有一些需要 ...
- 中级Perl 第三章课后习题
3. 10. 1. 练习1 [25 分钟] 读当前目录的文件列表并转换成全路径.不能用shell 命令或外部程序读当前目 录.Perl 的File::Spec 和Cwd 两个模块对这个程序有帮助.每个 ...
随机推荐
- learning、trying、teaching
在工作中学习和提升,学以致用,学习的效果是最好的:工作后学习不需要大段时间,而是要挤出时间,利用时间碎片来学习. 1,Learning 这是第一阶段,看书.google.看视频.看别人的博客,但要是“ ...
- maven dependency中provided和compile的区别
重点:这个项目打成war包时,scope=provided的jar包,不会出现在WEB-INFO/lib目录下,而scope=compile的jar包,会放到WEB-INFO/lib目录 scope= ...
- CF28B pSort
题目描述 给定一个含有n个元素的数列,第i号元素开始时数值为i,元素i可以与距离为d[i]的元素进行交换.再给定一个1-n的全排列,问初始的数列可否交换成给定的样式. 输入:第一行一个整数n,第二行n ...
- c++基础(四)—— 泛型算法
1.find(first, last, value) 头文件:algorithm 参数:前两个参数是“表示元素范围的迭代器”,第三个是一个值 说明:find 将范围中进行寻找.搜索失败:如果范围中无匹 ...
- MySQL运维中的Tips--持续更新
1.into outfile 生成sql:一般都是生成文本或者其他形式的文件,现在需要生成sql形式的文件.配置文件加secure_file_priv=''select concat('insert ...
- docker深入学习三
docker学习三:network docker支持容器之间的网络通信,docker的网络通信方式有以下五种: bridge docker 默认的网络驱动,如果不指定网络驱动,docker就会创建一个 ...
- go 疑难杂症
func Test_doSeond(t *testing.T) { msg := make([]Msg, 0) for i := 0; i < 5; i++ { m := Msg{ data: ...
- GC收集器
新生代收集器 Serial New 单线程收集器,工作时必须暂停其他线程: 简单高效,没有线程交互开销: 基于复制算法: Parallel New 对Serial的改进,多线程: CPU数量<4 ...
- 3D星形贴图
3D星形贴图: /** * * *---------------------* * | *** 3D星形贴图 *** | * *---------------------* * * 编辑修改收录:fe ...
- Appium_Page object设计模式
Page object设计模式思维,把app按页面去划分,一个页面就是一个page对象 每个页面的元素集中管理.页面上按钮操作方法单独封装 # __author__ = " Caric Le ...