面向对象程序设计实验四:指针、引用与结构体

简介: 面向对象程序设计实验四:指针、引用与结构体

 

这个是大一的代码,清理网盘,存为博客,仅供参考。

一、面向对象课程设计作品(基于MFC的仓库管理系统完整工程完整工程):

面向对象课程设计作品(完整)(也适用于软件工程大实验).7z_采用面向对象方法分析,设计和实现订货系统。-C/C++文档类资源-CSDN下载

二、实验四题目:

1. 运用指针或引用实现数据访问与参数传递,题目如下:

① 输入10个整数存入数组list,然后用指针法从后向前输出该数组中的整数。

#include<iostream>
#include <iomanip>
using namespace std;
int main()
{
  int *p, list[10];
  for (int i = 0; i < 10; i++)
  {
    cout << "请输入一个数值\t" ;
    cin >> list[i];
  }
  p = &list[0];
  for(int a=9;a>=0;a--)
  {
    cout << setw(4) << *(p + a);
  }
  system("pause");
  return 0;
}

image.gif

② 编写函数getlen计算字符串长度,形参使用指针或引用,函数返回值是字符串的长度(不包含字符串的结束标志),在主函数中调用并测试结果。

#include <iostream>
using namespace std;//蓝多多作业
int getlen(char *p)
{
  int a = 0;
  for (int i = 0; i < 1000; i++)
  {
    int j = p[i];
    if (p[i] != 0)
    {a++;}
    else
    {break;}
  }
  return a;
}
int main()
{
  char s[1000];
  cin >> s;
  int b = getlen(s);
  cout << b << endl;
  system("pause");
  return 0;
}

image.gif

③ 编写一个函数swap实现两个数据的互换,形参分别指针和引用,在调用并测试结果。

#include<iostream>
#include <iomanip>
using namespace std;
void swap(int *P, int *q)
{
  int n;
  n = *P; *P = *q; *q = n;
}
void swap1(int &y, int &z) 
{
  int x;
    x = y; y = z; z = x;
}
int main()
{
  int a,b;
  cout << "请输入需要交换的两个数" << endl;
  cin >> a>>b;
  swap1(a,b);
  cout << "a=" << a <<setw(6)<< "b=" << b;
  cout << endl;
  swap(&a, &b);
  cout << "a=" << a << setw(6) << "b=" << b;
  system("pause");
  return 0;
}

image.gif

2. 运用结构体组织复杂数据,参考题目如下:

① 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天。

#include<iostream>
#include <iomanip>
using namespace std;//蓝多多作业
struct date
{
  int month;
  int day;
  int year;
};
int days(date a) {
  int i, m = 0, q;
  for (i = 1; i < a.month; i++)
  {
    switch (i)
    {
    case 1:q = 31; break;
    case 2:q = 28; break;
    case 3:q = 31; break;
    case 4:q = 30; break;
    case 5:q = 31; break;
    case 6:q = 30; break;
    case 7:q = 31; break;
    case 8:q = 31; break;
    case 9:q = 30; break;
    case 10:q = 31; break;
    case 11:q = 30; break;
    case 12:q = 31; break;
    }
    m += q;
  }
  m+=a.day;
  if (a.year%4 ==0&&a.year % 100 != 0 || a.year % 400 == 0)
    m++;
  return m;
}
int main()
{
  date c;
  int a;
  cout << "请输入年份\t"; cin >> c.year;
  cout << "请输入月份\t"; cin >> c.month;
  cout << "请输入日子\t"; cin >> c.day;
  a = days(c);
  cout << "该日期是本年的第"<<setw(5)<<a<<setw(5)<<"天";
  system("pause");
  return 0;
}

image.gif

② 有5个学生,每个学生的资料包括学号、姓名、3门课的成绩,用赋初值的方法输入5个学生的数据到结构体数组中,输出每个学生3门课的平均成绩(保留2位小数)。输出格式为:

No    name   score1  score2  score3   average

101    Zhou     93      89      87     ------

102    Yang     85      80      78     ------

103    Chen     77      70      83     ------

104    Qian     70      67      60     ------

105    Li       72      70      69     ------

#include<iostream>
#include <cmath>
#include <iomanip>//蓝多多作业
using namespace std;
struct chengji
{
  int NO;
  char name[5];
  int score1;
  int score2;
  int score3;
};struct chengji a[5] = { {101,"zhou",93,89,87},{102,"yang",85,80,78},{103,"chen",77,70,83},{104,"qian",70,67,60},{105,"li",72,70,69} };
  double average(int o,int p,int q) 
{
  float b;
  cout << fixed << setprecision(2);
  b=(o+p+q)/3.0;
    return b;
}
int main()
{
  int x, y, z;
  struct chengji *p;
  cout << "NO" << setw(10) << "name" << setw(10) << "score1" << setw(10) << "score2" << setw(10) << "score3" << setw(10)<<"average"<<endl;
  p = a;
  for (; p <= a+4; p++) 
  {
    cout << p->NO <<setw(9)<< p->name << setw(7) << p->score1 << setw(10) << p->score2 << setw(10) << p->score3 ;
    x = p->score1; y = p->score2; z = p->score3;
    cout<<setw(9)<<average(x,y,z);
    cout << endl;
  }
  system("pause");
  return 0;
}

image.gif

③ 在上题中,按平均成绩由高到低排序,输出每个学生的成绩,输出格式与上题相同。

#include<iostream>
#include <cmath>
#include <iomanip>//蓝多多作业
using namespace std;
struct chengji
{
  int NO;
  char name[5];
  int score1;
  int score2;
  int score3;
  double average;
}; struct chengji a[5] = { {101,"zhou",93,89,87},{102,"yang",85,80,78},{103,"chen",77,70,83},{104,"qian",70,67,60},{105,"li",72,70,69} };
void swap(struct chengji *x, struct chengji *y)//交换函数
{
  struct chengji *t;
  t = x; x = y; y = t;
}
double average(int o, int p, int q)
{
  double b;
  cout << fixed << setprecision(2);
  b = (o + p + q) / 3.0;
  return b;
}
int main()
{
  int x, y, z;
    struct chengji *p;
  cout << "NO" << setw(10) << "name" << setw(10) << "score1" << setw(10) << "score2" << setw(10) << "score3" << setw(10) << "average" << endl;
  p = a;
  for (int i=0; p <= a + 4; p++,i++)
  {
    cout << p->NO << setw(9) << p->name << setw(7) << p->score1 << setw(10) << p->score2 << setw(10) << p->score3;
    x = p->score1; y = p->score2; z = p->score3;
    a[i].average=average(x, y, z);
    cout << setw(9) << average(x, y, z);
    cout << endl;
  }
  for (int j = 4; j >= 1; j--)//按平均成绩从大到小给结构体数组排序
  {
    p = a;
    if (a[j].average > a[j - 1].average)
      swap(*(p + j), *(p + j - 1));
  }
  for (int m = 0; m < 5; m++)//再按排序后的顺序输出
  {
    cout << a[m].NO << "\t" << a[m].name << "\t" << a[m].score1 << "\t" << a[m].score2 << "\t" << a[m].score3 << "\t" << a[m].average << endl;
  }
  system("pause");
  return 0;
}

image.gif

相关文章
|
5月前
|
存储 安全 C++
C++中的引用和指针:区别与应用
引用和指针在C++中都有其独特的优势和应用场景。引用更适合简洁、安全的代码,而指针提供了更大的灵活性和动态内存管理的能力。在实际编程中,根据需求选择适当的类型,能够编写出高效、可维护的代码。理解并正确使用这两种类型,是掌握C++编程的关键一步。
76 1
|
2月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
2月前
|
存储 Go
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。
|
4月前
|
存储 安全 C++
浅析C++的指针与引用
虽然指针和引用在C++中都用于间接数据访问,但它们各自拥有独特的特性和应用场景。选择使用指针还是引用,主要取决于程序的具体需求,如是否需要动态内存管理,是否希望变量可以重新指向其他对象等。理解这二者的区别,将有助于开发高效、安全的C++程序。
32 3
|
3月前
|
存储 C语言
指针与结构体
指针与结构体
32 0
|
5月前
|
存储 安全 编译器
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
66 5
|
5月前
|
算法 Java 程序员
面向对象编程(OOP)通过对象组合构建软件,C语言虽是过程式语言,但可通过结构体、函数指针模拟OOP特性
【6月更文挑战第15天】面向对象编程(OOP)通过对象组合构建软件,C语言虽是过程式语言,但可通过结构体、函数指针模拟OOP特性。封装可使用结构体封装数据和方法,如模拟矩形对象。继承则通过结构体嵌套实现静态继承。多态可通过函数指针模拟,但C不支持虚函数表,实现复杂。C语言能体现OOP思想,但不如C++、Java等语言原生支持。
64 7
|
5月前
结构体\结构体指针
结构体\结构体指针
31 3
|
5月前
|
存储 安全 编译器
C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字
C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字
44 2