全国软件专业人才开发与设计赛题之中等题“统计省份人员信息”

本文主要是介绍全国软件专业人才开发与设计赛题之中等题“统计省份人员信息”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2.2基于人员名单:

李爱华,北京

张立,吉林
吴祖含,上海
张颖,河北
李文虎,北京
许林,湖南
赵平复,河北
唐笑,北京
刘小明,河北

董其云,北京

统计其信息,输出格式如下:

北京

李爱华

李文虎 

唐笑 

董其云

 

河北

1

……

 

其中省份不用考虑顺序,人员之间不用考虑顺序。

 参考程序:

  1  #include  < stdio.h >
  2  #include  < string .h >
  3  #include  < stdlib.h >
  4 
  5  FILE  * stream;
  6  FILE  * streamOut;
  7 
  8 
  9  // 构造存储结构
 10  struct  Node{
 11       char  Pro[ 20 ]; // 存储省份
 12       char  Name[ 50 ]; // 存储名字
 13       int  counts;
 14      Node *  nextPro; // 下一省份结点
 15      Node *  nextName; // 下一人员结点
 16  };
 17 
 18  Node root; // 根结点
 19 
 20  // 添加新的省份到链表中
 21  void  addPro(Node *  node)
 22  {
 23      Node *  tNode = root.nextPro;
 24      root.nextPro = node;
 25      node -> nextPro = tNode; // 插入结点
 26  }
 27 
 28  // 插入proNode结点后名字
 29  // pronode中的省份跟新插入结点的省份相同
 30  void  addName(Node *  proNode,Node *  node)
 31  {
 32      Node *  pNode = proNode -> nextName;
 33      proNode -> nextName = node;
 34      node -> nextName = pNode;
 35      proNode -> counts ++ ;
 36  }
 37 
 38  // 添加一个结点,根据判断是否之前出现过,进行插入或者新建的工作
 39  // 需要调用addName()和addPro()两个函数
 40  void  addNode(Node *  node)
 41  {
 42       if (root.nextPro == NULL) // 首次加入
 43      {
 44          root.nextPro = node;
 45      }
 46       else
 47      {
 48           // 循环找到相同的省份头结点
 49          Node *  cuNode = root.nextPro;
 50           while (cuNode != NULL  &&  strcmp(cuNode -> Pro,node -> Pro) != 0 )
 51          {
 52              cuNode = cuNode -> nextPro;
 53          }
 54           if (cuNode == NULL) // 没有找到相同省份的结点出现
 55          {
 56              addPro(node);
 57          }
 58           else
 59          {
 60              addName(cuNode,node);
 61          }
 62      }
 63  }
 64 
 65  // 对同级的结果进行格式化的输出
 66  void  outputFile()
 67  {
 68       if  ((streamOut  =  fopen(  " 人员名单2.txt " " w "  ))  !=  NULL)
 69      {
 70          Node *  pNode = root.nextPro;
 71           while (pNode != NULL)
 72          {
 73              fprintf(streamOut, " %s " ,pNode -> Pro);
 74              fprintf(streamOut, " %d\n " ,pNode -> counts);
 75               for (Node *  t = pNode;t != NULL;t = t -> nextName)
 76              {
 77                  fprintf(streamOut, " %s\n " ,t -> Name);
 78                   if (t -> nextName == NULL)
 79                      fprintf(streamOut, " \n " );
 80              }
 81              pNode = pNode -> nextPro;
 82          }
 83          fclose( streamOut );
 84      }
 85  }
 86 
 87 
 88  void  releaseNode()
 89  {
 90 
 91      Node *  tNode = root.nextPro;
 92      Node *  toDel;
 93       while (tNode != NULL)
 94      {
 95          Node *  delN = tNode -> nextName;
 96           while (delN != NULL)
 97          {
 98              Node *  de = delN;
 99              delN = delN -> nextName;
100              free(de);
101          }
102          toDel = tNode;
103          tNode = tNode -> nextPro;
104          free(toDel);
105      }
106  }
107  int  main()
108  {
109      
110       char  line[ 100 ];
111       int  position;
112 
113       // 初始化
114      root.nextPro = NULL;
115      root.nextName = NULL;
116 
117       if ( (stream  =  fopen(  " 人员名单.txt " " r "  ))  !=  NULL )
118      {
119           // printf("打开成功\n");
120           while (fgets( line,  100 , stream )  !=  NULL)
121          {
122               int  len = strlen(line);
123               // printf("%d\n",len);
124               if (feof(stream))
125              {
126                  line[len] = ' \n ' ;
127                  line[len + 1 ] = ' \0 ' ;
128                  len = strlen(line);
129                   // printf("%d\n",len);
130              }
131              
132              position = strcspn(line, " , " );
133               if (position != 0 ) // 分隔成功
134              {
135                  line[position] = ' \0 ' ;
136                  Node *  node = (Node * )malloc( sizeof (Node));
137                   // 清空数据
138                   // memset(node->Pro,0,sizeof(node->Pro));
139                   // memset(node->Name,0,sizeof(node->Name));
140                  node -> nextPro = NULL;
141                  node -> nextName = NULL;
142                  node -> counts = 1 ;
143                  strcpy(node -> Name,line);
144                  strcpy(node -> Pro, & line[position + 1 ]);
145                  addNode(node);
146              }
147               // printf( "%s", line);
148          }
149          outputFile();
150          releaseNode();
151          fclose( stream );
152          
153      }
154       return   1 ;
155  }
156 

 

版权声明版权归作者WeiSteven所有,转载请注明! 

这篇关于全国软件专业人才开发与设计赛题之中等题“统计省份人员信息”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/678576

相关文章

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

Mysql如何将数据按照年月分组的统计

《Mysql如何将数据按照年月分组的统计》:本文主要介绍Mysql如何将数据按照年月分组的统计方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql将数据按照年月分组的统计要的效果方案总结Mysql将数据按照年月分组的统计要的效果方案① 使用 DA

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件