码农小屋 码农小屋
  • 首页
  • 文章
    • Python
    • 计算机基础
    • C语言
    • Java
    • 数据库
    • Linux
  • 资源
  • 随笔
  • 优秀软件
  • 24h新鲜事
  • 专题
  • 留言板
  • 注册
    登录
立即登录
  • 首页
  • 博客中心
    • 文章
    • 资源
  • 随笔
  • 优秀软件
  • 24h新鲜事
  • 专题
  • 留言板

C语言实验——合并表记录

Mr Gu7月前

题目

数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。

要求

  • 输入描述:先输入键值对的个数,然后输入成对的index和value值,以空格隔开
  • 输出描述:输出合并后的键值对(多行)

设计思路

本道题的目的是对相同的表索引求和并按表索引升序排序。按照题目思路是先合并再进行排序。但由于输入的表索引是杂乱无章的,很难进行系统的合并,特别容易疏漏,所以直接合并就显得似乎有些困难。但如果先对表索引进行排序的话,只有临近的表索引才有可能相同,这样就比较容易合并,不会有遗漏。所以先排序再合并,这样的思路也比较清晰,编写起来也相对简单,代码比较简洁。

模块设计

  • 升序排序 采用冒泡法对表索引进行升序排序
  • 合并数值 先比较两个的表索引是否相等,如果相等,第二个数值就等于前一个数值加上它本身,并指向下一个表索引,这样数值就合并了,如果不相等,则依次输出表索引和数值
  • 输出数据 采用一边比较表索引一边按相应格式输出表索引和数值的方法

源程序清单

#include<stdio.h>
int main()
{
    /*定义变量*/
    int index[1000],value[1000];  
    int i,j,n;
    int temp1,temp2;
    printf("请输入表格行数:\n");
    while(scanf("%d",&n)!=EOF)
    {
	printf("请输入表格数据:\n");
	for(i=0;i<n;i++)
	{
	    /*输入数据*/
	    scanf("%d%d",&index[i],&value[i]);  
	}
	for(i=0;i<n-1;i++)
	{
	    for(j=i+1;j<n;j++)
	    {
	        /*冒泡法排序*/
		if(index[i]>index[j])  
		{
		    temp1=index[i];
		    index[i]=index[j];
		    index[j]=temp1;
		    temp2=value[i];
		    value[i]=value[j];
		    value[j]=temp2;
		}
	    }
	}
	printf("\n");
	printf("结果为:\n");
	for(i=0;i<n;i++)
	{
	    /*合并相同表索引的数值*/
	    while(i<n&&index[i]==index[i+1]) 
	    {
	        value[i+1]=value[i]+value[i+1];
	        i++;
	    }
	    /*按格式输出数据*/
	    printf("%d %d\n",index[i],value[i]); 
	}
    }
return 0;
}

最终程序效果

C语言实验——合并表记录-码农小屋
C语言实验——合并表记录-码农小屋
0
分享
Mr Gu 管理员
文章 43评论 1
赞赏
Mr Gu
相关文章
  • C语言 * 与 &
  • C语言中的“>>”和“<<”
  • C语言基础知识
  • C语言和C++的区别
  • C语言简介
评论 (0)
再想想
    沙发抢一发
  • 专题
  • 文章
  • 友情链接
  • 留言板
Copyright © 2020-2021 码农小屋. 苏ICP备20033168号