C++第三章课后作业答案及解析---指针的使用

今天继续完成上周没有完成的习题---C++第三章课后作业,本章题涉及指针的使用,有指向对象的指针做函数参数,对象的引用以及友元类的使用方法等

它们具体的使用方法在下面的题目中会有具体的解析(解析标注在代码中)。

题目:

1.建立一个对象数组,内放5个学生数据(学号,成绩),设立一个函数max,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。

 1 #include <iostream>
 2 #include<stdlib.h>
 3 using namespace std;
 4 class Student
 5  {public:
 6 //定义学生数据函数
 7    Student(int n,float s):num(n),score(s){}
 8    int num;
 9    float score;
10  };
11 
12 void main()
13 {
14     //构建五个学生数据信息
15     Student stud[5]={
16     Student(101,78.5),Student(102,85.5),Student(103,98.5),
17     Student(104,100.0),Student(105,95.5)};
18     void max(Student* );//定义max函数
19     Student *p=&stud[0];//p指向数组第一个元素,p为实参,arr为形参
20     max(p);//调用函数,找到学生中成绩最高者,并输出其学号
21  }
22  //构建max函数,用指向对象(学生)的指针作函数的参数
23 void max(Student *arr)
24 {    //假设学号为1的学生成绩最高
25     float max_score=arr[0].score;
26     int k=0;
27     //通过循环,逐个比较学生的成绩,直到查询完所有学生成绩,并返回最大值
28     for(int i=1;i<5;i++)
29     {
30         if(arr[i].score>max_score) 
31         {
32             max_score=arr[i].score;
33             k=i;
34         }
35     }
36 //打印出成绩最大的学生的学号和成绩        
37  cout<<arr[k].num<<" "<<max_score<<endl;
38  system("pause");
39 }

2.修改第6题的程序,增加一个fun函数,改写main函数。改为在fun函数中调用change和display函数。在fun函数中使用对象的引用(Student &)作为形参。

 1  #include<iostream>
 2  #include<stdlib.h>
 3  using namespace std;
 4  class Student
 5  {
 6  public:
 7     //学生数据的构造函数
 8     Student(int n,float s):num(n),score(s){}
 9     //修改学生成绩的函数
10     void change(int n,float s){num = n;score = s;}
11     //输出学生成绩和学号的函数
12     void display(){cout<<num<<" "<<score<<endl;}
13  private:
14     int num;
15     float score;
16 };
17 //在fun函数中使用对象的引用(Student & stud)作为形参
18  void fun (Student & stud){  
19      cout<<"修改前的学生数据信息"<<endl;
20      stud.display(); 
21      //调用change函数进行对学生数据信息的修改
22      stud.change(101, 80.5);
23      cout<<"修改后的学生数据信息"<<endl;
24      stud.display();
25  }
26  int main()
27  {
28     //定义一个学生数据信息
29     Student stud(101, 78.5); 
30     //调用fun函数
31     fun(stud);
32     system("pause");
33     return 0;
34      
35     
36  }

3.将例3.13中的Time类声明为Date类的友元类,通过Time类中的display函数引用Date类对象的私有数据,输出年,月,日和时,分,秒。

 1 #include <iostream>
 2 #include<stdlib.h>
 3 using namespace std;
 4 //声明Time,因为在Date中提前使用
 5 class Time;
 6 class Date{
 7 public:
 8     Date(int,int,int);
 9     //将Time类声明为Date类的友元类
10     friend Time;
11 private:
12     int month;
13     int day;
14     int year;
15 };
16 //Date函数
17 Date::Date(int y,int m,int d):year(y),month(m),day(d){ }
18 class Time{
19 public:
20     Time(int,int,int);
21     void display(const Date &);
22 private:
23     int hour;
24     int minute;
25     int sec;
26 };
27 //Time函数
28 Time::Time(int h,int m,int s):hour(h),minute(m),sec(s){ }
29 //display函数
30 void Time::display(const Date &d){
31     //引用Date类中的私有数据
32     cout<<d.year<<"/"<<d.month<<"/"<<d.day<<endl;
33     //引用本类中的私有数据
34     cout<<hour<<":"<<minute<<":"<<sec<<endl;}
35 int main(){
36     Time t1(17,15,50);
37     Date d1(2019,10,28);
38     //通过Time类中的display函数引用Date类对象的私有数据
39     t1.display(d1);
40     system("pause");
41     return 0;
42 }

小结:

  指针在编程学习过程中,是非常复杂的,必须非常明了其中的逻辑指向,才能更好的运用指针解决问题。C语言的指针使用非常广泛,但C++涉及的指针内容不多,主要为指针指向数组指定元素,指针指向函数,用指向对象的指针做函数参数几种。明确指针的指向和指针的取值,指针部分的学习就不难了。

posted @ 2019-10-28 18:27  小高冷  阅读(1327)  评论(1编辑  收藏  举报