C++实习报告(集合交,并,差运算的实现)

一、问题描述

1、问题描述
集合元素类型可以是整数、字符串和小数,实现集合的交、并、差运算。
2、功能要求
(1)用户能够输入两个集合元素;
(2)能够完成集合的交、并、差运算;
(3)集合元素的类型可以为整数、字符串和小数;
(4)输出运算结果。

二、解决思路

           图2.1 系统模块流程图      

            图2.2 用户操作流程图

1.主函数先建立一个菜单可根据处理用户输入并根据用户选择执行整数、小数、字符串和退出的不同操作并通过运用do while循环 与switch选择程序要运行是什么数字类型的集合,若是无效的输入则通过default直接退出。

2. case1是整数集合交、并、差集运算的实现,调用function1() function2() function3()函数。

case2是小数集合交、并、差集运算的实现,调用function4() function5() function6()函数。

case3是字符串集合交、并、差集运算的实现,调用function7() function8() function9()函数。

case0 是退出。

3.交集的实现:

定义一个函数 function()以及四个参数。指向数组a1、数组b1的指针,指向数组a1、数组b1的长度m1、n1,再定义一个数组c1并将结果存储在动态分配的数组 c1 中。定义一个变量len,其值为两个数组长度m1和n1中较大的一个作为数组c1的长度。 然后用嵌套的 for 循环用于历遍数组 a1  b1。对于数组 a1 中的每个元素,检查它是否在数组 b1 中出现过。如果出现过,则将该元素添加到交集数组 c1 中。如果没有出现过,则不管该元素。下一个循环遍历交集数组 c1,并打印其中的每个元素。总之,这个函数的主要目的是找出两个数组的交集,并将结果存储在动态分配的数组中。然后,它将交集数组中的元素打印出来。

4.并集的实现:

定义一个函数名为function()以及四个参数。指向数组a1、数组b1的指针,指向数组a1、数组b1的长度m1、n1,再定义一个数组c1并将结果存储在动态分配的数组 c1 中,用于计算两个数组a1和b1的并集函数。数组a1将其元素依次添加到数组c1中,再看数组b1对于每个元素检查是否已经在数组c1中出现过,如果未出现过,则将其添加到数组c1中,然后再创建一个临时数组temp用于储存最终的并集结果,并打印其中的每个元素。

5.差集的实现:

定义一个函数名为function()以及四个参数。指向数组a1、数组b1的指针,指向数组a1、数组b1的长度m1、n1,再定义一个数组c1并将结果存储在动态分配的数组 c1 中,通过循环将数组a1的元素复制到数组c1中,然后看数组b1,并检查是否在c1中。通过嵌套循环检查数组b1中的每个元素是否存在于数组c1中,如果不存在,则将该元素添加到数组c1中 ,并将数组c1的有效元素复制到临时数组temp中,最终输出数组中的每个元素。

四、核心程序

运行结果:

                    整数                                               小数                                         字符串

核心代码:

//交集运算                          //数返回类型为void,表示该函数没有返回值。
void function1(int *a1, int *b1, int m1, int n1)   
{     int len = m1 > n1 ? m1 : n1;              // 定义一个变量len,其值为两个数组长度m和n中较大的一个  int *c1 = (int*)malloc(sizeof(int)*len); // 使用malloc函数动态分配一个长度为len的数组c的内存空间  int d1 = 0;                              // 定义一个变量d,初始值为0,用于记录交集数组c中的元素个数  for (int i = 0; i < m1; i++)   // 使用两层嵌套循环遍历数组a和b。对于数组a中的每个元素,检查数组b中出现过,//则将该元素添加到交集数组c中。  {  for (int j = 0; j < n1; j++)      {  if (a1[i] == b1[j])  {  c1[d1++] = a1[i]; // 这里直接将a[i]赋值给c[d]  }                                  }                                  }  cout << "输出a1与b1的交集:" << endl;  for (int i = 0; i < d1; i++)  {  cout << c1[i] << " "; // 这里添加了一个空格来分隔不同的元素  }      cout << endl;  delete[] c1;  // 释放动态分配的内存空间,避免内存泄漏  
}
//并集运算
void function2(int *a1,int *b1,int m1,int n1)  
{                                                 //使用malloc动态分配一个长度为m1+n1的整数数组的内存空间,int *c1 = (int*)malloc(sizeof(int) * (m1+ n1));//并将指针c1指向这块内存。int k = 0;       //定义一个变量k并初始化为0。这个变量用于记录并集数组c1中的元素个数。for (int i = 0; i < m1; i++)  {  c1[k++] = a1[i];  }  for (int i = 0; i < n1; i++)  {  bool found = false;  for (int j = 0; j < k; j++) // 检查b[i]是否在已添加的元素中重复  {  if (b1[i] == c1[j])  {  found = true;  break;  }  }  if (!found) // 如果b[i]不在已添加的元素中,则将其添加到结果数组c中  {  c1[k++] = b1[i];  }  }  // 裁剪c数组到有效长度k  int *temp = (int*)malloc(sizeof(int) * k);  for (int i = 0; i < k; i++)    //一个循环用于将并集数组c1的内容复制到临时数组temp中。{  temp[i] = c1[i];  }  delete[] c1;  c1 = temp;   //将指针c1指向临时数组。cout << "输出集合a1,b1的并集:" << endl;  for (int i = 0; i < k; i++)  {  cout << c1[i] << " ";  }  cout << endl;  delete[] c1; // 释放动态分配的内存空间,避免内存泄漏  
}
//差集运算
void function3(int *a1, int *b1, int m1, int n1)      
{      int k = 0;      int *c1 = (int *)malloc(sizeof(int) * m1); //使用malloc动态分配一个长度为m1的整数数组c1,用于存储结果for(int i = 0; i < m1; i++)     {      c1[i] = a1[i];      }      for(int i = 0; i < n1; i++)     //检查数组b1中的每个元素是否存在于数组c1中。//如果不存在,则将该元素添加到数组c1中,并增加计数器k。{      bool found = false;      for(int j = 0; j < m1; j++)      {      if(b1[i] == c1[j])      {      found = true;      break;      }      }      if(!found)      {      c1[k] = b1[i];      k++; // 当在集合b中找到不在集合a中的元素时,k自增    }      }      // 裁剪c数组到有效长度k    int *temp = (int*)malloc(sizeof(int) * k);    for(int i = 0; i < k; i++) {    temp[i] = c1[i];    }    delete[] c1;    c1 = temp;    cout << "输出集合a2与集合b2的差集:" << endl;      for(int i = 0; i < k; i++)      {      cout << c1[i] << " ";      }      cout << endl;      delete[] c1;  //释放动态分配的内存空间,避免内存泄漏      
}

主函数:

int main()  
{  int choice;    do {    cout << "--------------------------------"<< endl;  //菜单cout << "| 选择输入数字类型对应的数字:  |"<< endl;    cout << "| 1. 整数                      |"<< endl;    cout << "| 2. 小数                      |"<< endl;    cout << "| 3. 字符串                    |"<< endl;    cout << "| 0. 退出                      |"<< endl; cout << "--------------------------------"<< endl;   cin >> choice;    switch (choice) {    case 1:int *a1,*b1;  int m1,n1;        //集合a,b的个数  cout<<"输入集合a1的长度:"<<endl;cin>>m1;cout<<"输入集合b1的长度:"<<endl;cin>>n1;    a1=(int*)malloc(sizeof(int)*m1);    //使用动态内存分配函数为a分配内存空间b1=(int*)malloc(sizeof(int)*n1);    //使用动态内存分配函数为b分配内存空间cout<<"输入集合a1:"<<endl;for(int i=0;i<m1;i++){cin>>a1[i];    }cout<<"输入集合b1:"<<endl;for(int i=0;i<n1;i++){cin>>b1[i];    }    function1(a1,b1,m1,n1); function2(a1,b1,m1,n1);function3(a1,b1,m1,n1); delete[] a1;           //释放动态分配的内存空间,避免内存泄漏  delete[] b1;     break;    case 2:double *a2, *b2;    int m2, n2;        //集合a,b的个数    cout << "输入集合a的长度:" << endl;  cin >> m2;  cout << "输入集合b的长度:" << endl;  cin >> n2;      a2 = (double*)malloc(sizeof(double) * m2);    //使用动态内存分配函数为a分配内存空间  b2 = (double*)malloc(sizeof(double) * n2);    //使用动态内存分配函数为b分配内存空间  cout << "输入集合a2:" << endl;  for(int i = 0; i < m2; i++)  {  cin >> a2[i];      }  cout << "输入集合b2:" << endl;  for(int i = 0; i < n2; i++)  {  cin >> b2[i];      }      function4(a2, b2, m2, n2); function5(a2, b2, m2, n2);function6(a2, b2, m2, n2);  break; case 3:   string *a3, *b3;  int m3, n3; // 集合a3,b3的个数  cout << "输入集合a3的长度:" << endl;  cin >> m3;  cout << "输入集合b3的长度:" << endl;  cin >> n3;  a3 = new string[m3]; // 使用动态内存分配函数为a分配内存空间  b3 = new string[n3]; // 使用动态内存分配函数为b分配内存空间  cout << "输入集合a1:" << endl;  for (int i = 0; i < m3; i++) {  cin >> a3[i];  }  cout << "输入集合b3:" << endl;  for (int i = 0; i < n3; i++) {  cin >> b3[i];  }  function7(a3, b3, m3, n3);  function8(a3, b3, m3, n3);function9(a3, b3, m3, n3);  delete[] a3; // 释放动态分配的内存空间,避免内存泄漏  delete[] b3;    break;  case 0:    cout << "退出程序" << endl;    break;    default:    cout << "无效的输入" << endl;    break;    }    } while (choice != 0);    return 0;    }

五、总结

1、对实习的过程和解决思路以及编程实现进行总结。

A:实习的过程总结:

(1)首先对于集合的交、并、差运算的概念进行了学习。

(2)对c++基础知识进行了巩固复习和加强学习了更深的知识。

(3) 解决问题:在实习期间,参与了集合交、并、差运算的实现的认为,首先学会了合理分配时间,会遇到各种实际问题需要解决。首先要找到问题,然后通过上网查询,改错得到了进一步的知识的提高。通过C++实习的提升了自己的能力,掌握多种解决问题的方法。

(4)通过本次实验,我们成功实现了集合的交、并、差运算,并输出了结果。实验过程中,我们加深了对集合运算的理解,并熟练掌握运用循环语句、函数、数组、指针提高了编程能力。同时,我们也发现了一些需要注意的问题,避免出现错误。在未来的学习和实践中,我们将继续努力,提高自己的编程能力和解决问题的能力。

B:解决思路的过程总结:

首先学会了合理分配时间,合理分配每日学习内容、熟悉使用C++的开发环境和常用的工具,编写清晰、简洁、的代码,遵循编码规范,进行多次的调试和测试,完成初步的实现后,再对代码进行优化和改进,并且使功能更强,界面更美。且掌握多种解决问题的方法。先设置一个菜单,后用switch语句来分别进行交、并、差的实现,再通过函数调用等实现。

C:编程实现的过程总结:

在编程实现过程中,我主要使用了C++语言进行开发。通过使用do while语句 、switch语句、 调用function()函数、数组、指针等,成功地实现了集合的交、并、差运算。在这个过程中,我不仅提高了自己的编程能力,而且还学会了多种方法解决实际问题。并代码的注释帮助理解,严格规范自己代码的规范性。

2、写出对程序设计综合实习的体会,自己在哪些方面有所提高,学到了哪些知识。

(1)理论与实际的相异性:在实习过程中,我发现许多编程,与在实际应用中不同,增加了更多实践的经验。

(2)团队学习合作与沟通:在实习过程中,我们经常需要与团队成员进行沟通并协作。在老师的点拨下,向组长,同学请教,学习他们的经验和技巧。明白了团队合作的重要性,每个人的专长和优点都被充分利用,以实现共同的目标。

(3)编程技能的提升:通过这次实习,我深入学习了c++编程语言。以及如何编写和调试代码。这些技能不仅让我在实习期间能够高效地完成任务,而且对我未来的职业发展也大有裨益。

(4)问题解决能力提升:面对复杂的问题和挑战,我学会了如何进行有效的分析和寻找解决方案。这种能力不仅来自于编程知识,也来自于我在实习过程中学会的如何使用调试工具、查阅文档和寻求帮助。

(5)自我学习、主动提出问题:在实习过程中,我学会了主动提问并寻求帮助。当遇到问题时,我会先尝试自己解决,查阅典籍但如果无法解决,我会寻求同学或老师的指导和帮助,提高效率解决问题。

(6)代码质量与可维护性:在实习过程中,我深刻理解了高质量代码和可维护性的重要性。编写清晰、简洁且可读性强的代码不仅可以提高工作效率,而且也有利于团队成员之间的协作,代码注释也非常重要。

(7)持续学习:技术领域的发展非常迅速,我需要不断学习新的技术和工具。在实习过程中,我明白了持续学习和适应新技术的重要性。

总的来说,这次程序设计综合实习让我学到了很多知识和技能,学会了如何使用C++语言进行编程,并熟悉了C++的基本语法和常用库函数。我不仅提高了我的技术能力、学会了如何分析问题,也增强了我在团队中的合作能力和解决问题的能力。这次实习是我学习生涯中一个重要的里程碑,我将珍视这次经验并继续努力提高我的编程技能。

         

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/655963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

07. STP的基本配置

文章目录 一. 初识STP1.1. STP概述1.2. STP的出现1.3. STP的作用1.4. STP的专业术语1.5. BPDU的报文格式1.6. STP的选择原则&#xff08;1&#xff09;选择根桥网桥原则&#xff08;2&#xff09;选择根端口原则 1.7. 端口状态1.8. STP报文类型1.9. STP的收敛时间 二. 实验专题…

【MySQL 流浪之旅】 第六讲 浅谈 MySQL 锁

系列文章目录 【MySQL 流浪之旅】 第一讲 MySQL 安装【MySQL 流浪之旅】 第二讲 MySQL 基础操作【MySQL 流浪之旅】 第三讲 MySQL 基本工具【MySQL 流浪之旅】 第四讲 MySQL 逻辑备份【MySQL 流浪之旅】 第五讲 数据库设计的三个范式 目录 系列文章目录 一、什么是锁&#x…

07-Nacos-接入Mysql实现持久化

1、默认内嵌的数据库 Derby 存于/data目录 2、扩展仅支持Mysql 5.6.5 执行Nacos中的SQL脚本&#xff0c;该脚本是Nacos-server文件夹中的nacos-mysql.sql 详见 01-Nacos源码打包、部署-CSDN博客 3、修改配置文件 Nacos-server中的conf目录下&#xff0c;application.proper…

5种ai智能自动写作,让你的写作效率秒拔高

写作是一项需要耗费大量时间和精力的任务&#xff0c;但现在有了AI智能自动写作软件&#xff0c;我们可以轻松提高写作效率。在国内市场上&#xff0c;有许多优秀的写作软件可供选择。本文将向您推荐5款国内的写作软件&#xff0c;并详细说明每款软件的功能特点。 爱制作AI 使…

小项目:使用MQTT上传温湿度到Onenet服务器

前言 我们之前分别编写了 DHT11、ESP8266 和 MQTT 的代码&#xff0c;现在我们将它们仨整合在一起&#xff0c;来做一个温湿度检测小项目。这个项目可以实时地将 DHT11 传感器获取到的温湿度数据上传到 OneNET 平台。通过登录 OneNET&#xff0c;我们随时随地可以查看温湿度数…

山体滑坡在线安全监测预警系统(解决方案)

在近年来&#xff0c;随着全球气候变化的影响&#xff0c;山体滑坡等自然灾害频发&#xff0c;给人们的生命财产安全带来了严重威胁。为了有效预防和减少山体滑坡带来的危害&#xff0c;许多地方开始在山上安装山体滑坡在线安全监测预警系统&#xff08;解决方案&#xff09;。…

Java版大厂算法题1——数字颠倒

问题描述 输入一个整数&#xff0c;将这个整数以字符串的形式逆序输出&#xff0c;程序不考虑负数的情况&#xff0c;若数字含有0&#xff0c;则逆序形式也含有0。如果输入为100&#xff0c;则输出为001。 数据范围&#xff1a;0<n<(2^30)-1 * 输入描述&#xff1a;输入…

SpringBoot+SqlServer查询接口

SpringBootSqlServer查询接口 文章目录 SpringBootSqlServer查询接口1. pom环境配置2. common工具包3. 实体类接口映射4. Service层Controller层 需求&#xff1a;根据站号查询前一个小时的所有数据&#xff0c;将数据返回格式为Map<String,List<Map<String,String>…

【硬件产品经理】避免硬件产品失败 | 技术维度

目录 简介 技术维度一&#xff1a;低估产品开发 技术维度二&#xff1a;低估规模生产的复杂性 技术维度三&#xff1a;测试不足 技术维度四&#xff1a;产品太复杂 技术维度五&#xff1a;对客户承诺太高 推荐内容 简介 这节内容主要从技术维度来谈谈避免硬件产品失败这…

vue3封装el-pagination分页组件

1、效果如图&#xff1a; 2、分页组件代码&#xff1a; <template><div class"paging"><el-config-provider :locale"zhCn"><el-paginationv-model:current-page"page.currentPage"v-model:page-size"page.pageSize…

基于Prompt Learning的信息抽取

PTR: Prompt Tuning with Rules for Text Classification 清华&#xff1b;liuzhiyuan&#xff1b;通过规则制定subpromptRelation Extraction as Open-book Examination: Retrieval-enhanced Prompt Tuning Relation Extraction as Open-book Examination: Retrieval-enhance…

iPhone 14支持NFC吗?如果支持,那么怎么启用

你准备好通过启用NFC来释放iPhone 14的全部潜力了吗&#xff1f;如果你曾经想知道如何在你的设备上利用NFC&#xff0c;那么你就来对地方了。 在本综合指南中&#xff0c;我们将引导你完成在iPhone 14上激活NFC的步骤&#xff0c;使你能够无缝连接其他设备&#xff0c;进行非接…

github添加 SSH 密钥

1 打开终端 输入 ssh-keygen -t rsa -b 4096 -C "github邮箱地址"如果不需要密码可以一路回车 出现这个页面就是生存成功了 open ~/.ssh // 打开.ssh 找到id_rsa.pub复制出内容新建ssh密钥输入内容,保存即可

网络安全|重大失误!微软被盗测试账号拥有公司Office 365管理员权限

微软网络近期遭黑客入侵&#xff0c;高管电子邮件被监视长达两个月。 一位研究员表示&#xff0c;黑客通过获取一个拥有管理员权限的老旧测试帐号的访问权限来实施入侵&#xff0c;这是微软犯下的重大失误。 微软在1月25日&#xff08;上周四&#xff09;发布第二篇公告&…

Linux:重定向

Linux&#xff1a;重定向 输出重定向追加重定向输出重定向与追加重定向的本质输入重定向 输出重定向 在Linux中&#xff0c;输出重定向是一种将命令的输出发送到不同位置的方法。通常&#xff0c;执行命令时&#xff0c;输出会显示在终端上。然而&#xff0c;使用输出重定向&a…

vue3 + antd 封装动态表单组件(三)

传送带&#xff1a; vue3 antd 封装动态表单组件&#xff08;一&#xff09; vue3 antd 封装动态表单组件&#xff08;二&#xff09; 前置条件&#xff1a; vue版本 v3.3.11 ant-design-vue版本 v4.1.1 我们发现ant-design-vue Input组件和FormItem组件某些属性支持slot插…

数据写入HBase(scala)

package sourceimport org.apache.hadoop.hbase.{HBaseConfiguration, TableName} import org.apache.hadoop.hbase.client.{ConnectionFactory, Put} import org.apache.hadoop.hbase.util.Bytesobject ffff {def main(args: Array[String]): Unit {//hbase连接配置val conf …

Tensorflow2.0笔记 - tensor的padding和tile

本笔记记录tensor的填充和tile操作&#xff0c;对应tf.pad和tf.tile import tensorflow as tf import numpy as nptf.__version__#pad做填充 # tf.pad( tensor,paddings, modeCONSTANT,nameNone) #1维tensor填充 tensor tf.random.uniform([5], maxval10, dtypetf.int32) pri…

猫咪不吃东西怎么办?排行榜上适口性好、性价比高的生骨肉冻干推荐

猫咪不吃东西怎么办&#xff1f;遇到这类情况需要主人去观察猫咪的情况&#xff0c;如果猫咪除了不吃猫粮还出现了呕吐、腹泻、体温异常等其他情况就要考虑猫咪是不是生病了。如果排除了疾病原因&#xff0c;猫咪不吃东西怎么办&#xff1f;可能是猫粮的口感不佳&#xff0c;使…

【重磅发布】已开放!模型师入驻、转格式再升级、3D展示框架全新玩法…

1月23日&#xff0c;老子云正式发布全新版本。此次新版本包含多板块功能上线和升级&#xff0c;为用户带来了含模型师入驻、三维格式在线转换升级、模型免费增值权益开放、全新3D展示框架等一系列精彩内容&#xff01; 1月23日&#xff0c;老子云正式发布全新版本。此次新版本…