课程设计:混合数据排序

一、题目:混合数据排序

二、目的与要求

1. 目的:

(1)通过该题目的设计,培养学生综合利用C++语言解决问题的能力,使学生理解和掌握C++中组的应用及

排序算法,将所学知识转化为分析和设计简单实际问题的能力,并学会查资料和工具书,进行创新设计。

(2)提高学生建立程序文档、归纳总结的能力。

2. 基本要求:

(1)要求用C++语言编程,在Visual C++环境下调试完成;

(2)要求使用C++的结构体和自定义函数完成设计;

(3)在VC++6.0环境中,学会调试程序的方法,及时查究错误,独立调试完成。

(4)程序调试通过后,完成程序文档的整理,加必要的注释。

三、设计方法和基本原理

1. 课题功能描述

开发一个排序程序,用户输入长度(数据个数)可变的数据,输入字母,则按字符排序;输入数字,则按

数字排序;输入字母和数字的混合数据,则首先区分数字和字母,然后各自排序。

2. 基本原理

1) 通过ASCII判断输入的是否为字母;

2)用两个数组各自保存字符和数字。

3. 问题解决方案(编程要求):

编写程序,实现区分混合数据并实现排序,并且由用户选择升序或降序两种方式。

例如:输入数据“abd3564fe”,则排序结果如选择“降序”如下图所示:、


四、主要技术问题的描述:

通过两个一维数组保存两种类型的数据,由于数组的大小不确定,可使用new函数分配数组存储空间。排序

的算法可使用冒泡法或比较互换法,或其他方法。

五、创新要求

实现对字符串和数字的混合排序。

六、课程设计的考核方式及评分方法

1.考核方式

(1) 学生要提交书面课程设计报告(A4纸打印);并将设计报告的电子文档、.cpp源文件和.h头文件放

到一个文件夹里(如果是基于MFC的编程,另外还包括源程序的压缩包)上传到所对应班级的学生名称相应

文件夹中。

(2) 课程设计结束时,在机房当场验收。教师提供测试数据,由学生运行所设计的系统,检查运行结果

是否正确,并回答教师提出的有关问题。

2.评分方法

根据出勤率、课程设计期间纪律、课程设计运行结果、课程设计报告及答辩情况综合评分。

七、书写设计报告的要求(详细内容见“设计报告模板”)

八、说明:课程设计的有关文档,“设计报告模板”和“课程设计要求”请在下载任务书处下载。

 

急忙急忙写额,不完善的地方希望指出:

PaiXu.cpp源代码如下:

#include <iostream>
#include "string"
#include <stdio.h>
void Ascending(char *pAscend,int nAsNum);    //声明升序函数
void Descending(char *pDescend,int nDeNum);  //声明降序函数
using namespace std;
int main()
{
	char *pCin=new char[1000]; //申请空间存放用户输入的数据
	char *pNum=new char[1000]; //申请空间存放用户输入数据中的数字
	char *pLetter=new char[1000]; //申请空间存放用户输入数据中的字母
	cout<<"请输入数据:"<<endl;
	cin>>pCin;
	int nNum=0;
	for (int i=0;pCin[i]!='\0';i++)
	{
		nNum++;
	}
	cout<<"输入的字符个数是:"<<nNum<<endl;
	int nNum_Num=0;  //数字个数
	int nNum_Letter=0;  //字母个数
	//判别是数字还是字母,分别存在各自的数组中
	for (int j=0;j<nNum;j++)
	{
		if ((pCin[j]<='9')&&(pCin[j]>='0'))
		{
			pNum[nNum_Num]=pCin[j];
			nNum_Num++;
		}
		if ((pCin[j]<='z')&&(pCin[j]>='a'))
		{
			pLetter[nNum_Letter]=pCin[j];
			nNum_Letter++;
		}
	}

	cout<<"字符为数字的是:";
	for (int m=0;m<nNum_Num;m++)
	{
		cout<<pNum[m];
	}
	cout<<endl;

	cout<<"字符为字母的是:";
	for (int n=0;n<nNum_Letter;n++)
	{
		cout<<pLetter[n];
	}
	cout<<endl;

	cout<<"其中数字个数是:"<<nNum_Num<<endl;
	cout<<"其中字母个数是:"<<nNum_Letter<<endl;
	
	cout<<endl;
	cout<<"选择排序方式(1--升序  2--降序):";
	char cHit;
	while(1)
	{
		cin>>cHit;
		switch (cHit)
		{
		case '1':
			cout<<"数字升序为:";
			Ascending(pNum,nNum_Num);
			cout<<"字母升序为:";
			Ascending(pLetter,nNum_Letter);
			break;
		case '2':
			cout<<"数字降序为:";
			Descending(pNum,nNum_Num);
			cout<<"字母降序为:";
			Descending(pLetter,nNum_Letter);
			break;
		default:
			cout<<"输入不符合要求!"<<endl;
			break;
		}
		cout<<endl;
		cout<<"选择排序方式(1--升序  2--降序):"<<endl;
	}
    cout<<endl;
	delete [] pCin;
	delete [] pNum;
	delete [] pLetter;

	return 0;
}

//升序函数  采用冒泡法
void Ascending(char *pAscend,int nAsNum)
{
	int i=0,j=0,n=0;
	char temp;
	for (i=nAsNum-1;i>0;i--)
	{
		for(j=0;j<i;j++)
		{
			if (pAscend[j]>=pAscend[j+1])
			{
				temp = pAscend[j];
				pAscend[j] = pAscend[j+1];
				pAscend[j+1] = temp;
			}
		}
	}
	for (n=0;n<nAsNum;n++)
	{
		cout<<pAscend[n];
	}
	cout<<endl;
}

//降序函数   采用冒泡法
void Descending(char *pDescend,int nDeNum)
{
	int i=0,j=0,n=0;
	char temp;
	for (i=nDeNum-1;i>0;i--)
	{
		for(j=0;j<i;j++)
		{
			if (pDescend[j]<=pDescend[j+1])
			{
				temp = pDescend[j];
				pDescend[j] = pDescend[j+1];
				pDescend[j+1] = temp;
			}
		}
	}
	for (n=0;n<nDeNum;n++)
	{
		cout<<pDescend[n];
	}
	cout<<endl;	
}

 

 

运行出来的如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值