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

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

 

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

一、面向对象课程设计作品(基于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

相关文章
|
3月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
276 13
|
3月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
81 4
|
5月前
|
存储 Go
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。
|
5月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
204 4
|
6月前
|
存储 C语言
指针与结构体
指针与结构体
56 0
|
7月前
|
存储 安全 C++
浅析C++的指针与引用
虽然指针和引用在C++中都用于间接数据访问,但它们各自拥有独特的特性和应用场景。选择使用指针还是引用,主要取决于程序的具体需求,如是否需要动态内存管理,是否希望变量可以重新指向其他对象等。理解这二者的区别,将有助于开发高效、安全的C++程序。
48 3
|
8月前
|
存储 安全 编译器
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
83 5
|
8月前
【洛谷 P1563】[NOIP2016 提高组] 玩具谜题(模拟+结构体数组+指针)
**摘要:** NOIP2016提高组的玩具谜题是一个编程挑战,涉及理解玩具小人在圆圈中的相对位置。题目要求解决一系列基于小人朝向(内或外)的左右数指令,来找到最终目标小人。输入包含小人数量、指令数、每个小人的朝向和职业,以及指令详情。输出是最后到达的小人的职业。给定的AC代码使用指针模拟环状数组,通过按位异或判断朝向来移动指针。样例展示了问题的解决过程。子任务有不同的数据规模和限制条件。
75 0
|
8月前
结构体\结构体指针
结构体\结构体指针
46 3

热门文章

最新文章