一、题目:混合数据排序
二、目的与要求
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;
}
运行出来的如下: