西北工业大学 程序设计大作业
- 格式:doc
- 大小:563.00 KB
- 文档页数:19
西工大2020年4月《面向对象程序设计<C++>》作业机考参考答案试卷总分:100 得分:94要答案:wangjiaofudao一、单选题<共50 道试题,共100 分>1.在多继承中,公有派生和私有派生对于基类成员在派生类中的可访问性的规则〔。
A.完全相同B.完全不同C.部分相同,部分不同D.以上全不对正确答案:A2.若Sample类中的一个成员函数说明如下:A.指向类Sample的名为a的指针B.a是类Sample的对象引用,用来作函数Set〔的形参C.将a的地址赋给变量SetD.变量Sample与a按位与的结果作为函数Set的参数正确答案:B3.有关类和对象的说法错误的是〔。
A.对象是类的一个实例B.任何一个对象只能属于一个具体的类C.一个类只能有一个对象D.类与对象的关系和数据和变量的关系相似正确答案:C4.在C++中,函数原型不能标识〔。
A.函数的返回类型B.函数参数的个数C.函数参数类型D.函数的功能正确答案:D5.下列运算符中,〔运算符在C++中不能重载。
A.?:B.+C._D.<=正确答案:6.catch〔……一般放在其他catch子句的后面,该子句〔。
A.抛掷异常B.捕获所有类型的异常C.检测并处理异常D.有语法错误正确答案:7.关于成员函数特征的下述描述中,〔是错误的。
A.成员函数一定是联函数B.成员函数可以重载C.成员函数可以设置参数的默认值D.成员函数可以是静态的正确答案:8.下列说法错误的是〔。
A.如果try块中没有抛出异常,则try块执行完后忽略该try块的异常处理器catch块,程序在最后一个catch块后恢复执行。
B.如果在try块以外抛出异常,程序将被终止。
C.try块抛出异常后,从对应的try块开始到异常被抛出之间所构造的所有自动对象将被析构。
D.抛出异常和异常处理必须放在同一个函数中。
正确答案:9.实现运行时的多态要使用〔。
A.重载函数B.构造函数C.析构函数D.虚函数正确答案:10.公有成员提供了类对外部的界面,私有成员只能被类的成员访问,而〔不允许外界访问,但允许派生类的访问,这样既有一定的隐藏能力,有提供了开放的界面A.公有成员B.私有成员C.私有成员函数D.保护成员正确答案:11.通常的拷贝初始化构造函数的参数是〔。
吉大2020-2022学期《C语言程序设计》在线作业二提醒:本科目含有多少随机试卷,请核实本套试卷是否是您需要的材料!!!一、单选题(共10题,40分)1、一个C语言程序是由A一个主程序和若干子程序组成B函数组成C若干过程组成D若干子程序组成提示:复习课程相关知识802,并完成上述题目[正确参考选择]:B2、C语言中,能识别处理的文件为A文本文件和数据块文件B文本文件和二进制文件C流文件和文本文件D数据文件和二进制文件提示:复习课程相关知识802,并完成上述题目[正确参考选择]:B3、下列程序的输出结果是int b=2; int func(int *a){ b += *a; return (b);} main(){ int a=2, res=2; res += func(&a); printf("%d \n",res); }A4B6C8D10提示:复习课程相关知识802,并完成上述题目[正确参考选择]:B4、函数 rewind 的作用是A使文件位置指针重新返回文件的开始位置B将文件位置指针指向文件中所要求的特定位置C使文件位置指针指向文件的末尾D使文件位置指针自动移至下一个字符位置提示:复习课程相关知识802,并完成上述题目[正确参考选择]:A5、若x,i,j和k都是int型变量,则计算表达式x=(i=4,j=16,k=32)后,x的值为A4B16C32D52提示:复习课程相关知识802,并完成上述题目[正确参考选择]:C——————————6、以下叙述中不正确的是A在不同的函数中可以使用相同的名字的变量B函数中的形式参数是局部变量C在一个函数内定义的变量只在本函数范围内有效D在一个函数内的复合语句中定义的变量在本函数范围内有效提示:复习课程相关知识802,并完成上述题目[正确参考选择]:D7、下面程序的输出结果是main(){ int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; printf("%d\n",*(p+2));}A3B4C1D2提示:复习课程相关知识802,并完成上述题目[正确参考选择]:A8、下面程序的运行结果是#include main(){ int y=10; do{y;}while (y); printf("%d\n",y); }A1B1C8D0提示:复习课程相关知识802,并完成上述题目[正确参考选择]:D9、在16位IBMPC机上使用C语言,若有如下定义struct data { int i; char ch; double f; } b; 则结构变量b占用内存的字节数是A1B2C7D11提示:复习课程相关知识802,并完成上述题目[正确参考选择]:D10、阅读以下程序及对程序功能的描述,其中正确的描述是#include main(){ FILE *in,*out; char ch,infile[10],outfile[10]; printf("Enter the infile name:\n"); scanf("%s",infile); printf("Enter the outfile name:\n"); scanf("%s",outfile); if((in=fopen(infile,"r"))==NULA程序完成将磁盘文件的信息在屏幕上显示的功能B程序完成将两个磁盘文件合二为一的功能C程序完成将一个磁盘文件复制到另一个磁盘文件中D程序完成将两个磁盘文件合并并在屏幕上输出提示:复习课程相关知识802,并完成上述题目[正确参考选择]:C二、多选题(共5题,20分)1、在C语言中,正确的int类型的常数是:______。
1数据处理系统一、软件开发目的该软件主要是使用C语言设计开发数据处理程序,实现对数据的排序、查找、插入、计算、输出等功能。
二、数据结构定义一个11*10的二维数组。
三、软件功能说明1.生成100个随机数:调用库函数rand()或random()产生100个随机数,并存储在二维数组中的前十行。
2.选择法排序:用选择法将数据由小到大排序输出,保存在数组中,按行优先的原则存放(将小数先存满第一行,然后第二行….)。
3.冒泡法排序:用冒泡法将数据由小到大排序输出,保存在数组中,按行优先的原则存放(将小数先存满第一行,然后第二行….)。
4.插入法排序:用插入法将数据由小到大排序输出,保存在数组中,按行优先的原则存放(将小数先存满第一行,然后第二行….)。
5.查找数据:输入待查找数据, 在二维数组中逐个查找,若找到输出数据所在位置的行列号,若无该数值则输出“无此数”。
6.转换二进制:将数组中数据转换为二进制并转存到另一数组中输出。
7.转换为素数之和:对于原数组中的数进行判断:若为偶数,则表示成两个素数的和,并输出。
8.插入数据:输入一个数,将该数插入原数组中,使数组中的数仍然按从小到大排序,将数组中数据按从小到大顺序输出。
9.删除数据输入一个数,若原数组中存在该数,则删除该数,使数组中的数仍然按从小到大排序,将数组中数据按从小到大顺序输出。
10.退出系统,结束任务。
四、软件验收标准1.有较为美观简洁大方的菜单,能保证用户方便、直观、快捷的熟悉并使用软件的各项功能。
系统菜单功能项:1生成100个随机数2选择法排序3冒泡法排序4插入法排序5查找数据6转换二进制7转换为素数之和8插入数据9删除数据10退出系统注意:要求每执行一个具体的功能之后,程序将重新显示菜单。
2.系统要有一定的可靠性、稳定性,能够实现各功能模块。
2图书借阅管理系统一、软件开发目的该软件主要是使用C语言设计开发一个简单的图书借阅管理系统,实现对图书的借书,还书的管理和数据统计。
西工大16秋《有限元及程序设计》在线作业试卷总分:100 得分:100一、单选题 (共 10 道试题,共 20 分)1. 空间问题的基本未知位移分量有()个。
A. 2B. 3C. 4D. 5满分:2 分正确答案:B2. 下列不属于薄板小挠度弯曲理论基本假定的是()。
A. 直法线假定B. 中面位移假定C. 板内无挤压假定D. 曲线法假定满分:2 分正确答案:D3. 空间问题的基本平衡微分方程有()个。
A. 2B. 3C. 4D. 5满分:2 分正确答案:C4. 边界内应力的处理,最常用的方法有置大数法和()。
A. 绕结点平均法B. 二单元平均法C. 结点平衡法D. 划0置1法满分:2 分正确答案:D5. 属于不规则单元的有()。
A. 正四面体单元B. 正三棱体单元C. 任意曲边单元D. 任意六面体单元满分:2 分正确答案:D6. 不属于规则单元的是()。
A. 正四面体单元B. 正三棱体单元C. 正六面体单元D. 曲边单元满分:2 分正确答案:D7. 空间问题的未知应力分量有()个。
A. 6B. 7C. 8D. 9满分:2 分正确答案:A8. 在应力函数上任意增减一个(),对应力分量无影响。
A. 线性项B. 非线性项C. 边界项D. 体力项满分:2 分正确答案:A9. 边界条件的处理方法有几何近似和()。
A. 物理近似B. 绕结点平均法C. 二单元平均法D. 结点平衡法满分:2 分正确答案:A10. 空间问题的基物力方程有()个。
A. 5B. 6C. 7D. 8满分:2 分正确答案:B二、多选题 (共 5 道试题,共 10 分)1. 空间单元可大致分为()。
A. 规则单元B. 不规则单元C. 等参元D. 多结点单元满分:2 分正确答案:ABC2. 确定应力分量正负号的规则是()。
A. 正面正向B. 负面负向C. 正面负向D. 负面正向满分:2 分正确答案:AB3. 弹性力学的边界条件有()。
A. 位移边界条件B. 应力边界条件C. 混合边界条件D. 摩擦力边界条件满分:2 分正确答案:ABC4. 弹性力学中的方程有()。
西工大2020年4月《C语言程序设计》作业机考试卷总分:100 得分:96一、单选题(共35 道试题,共70 分)1. 一个C程序的执行是从()。
A.本程序的main函数开始,到main函数结束B.本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C.本程序的main函数开始,到本程序文件的最后一个函数结束D.本程序文件的第一个函数开始,到本程序main函数结束正确答案:A2. 在C语言中,只有在使用时才占用内存单元的变量,其存储类型是()。
A.auto和registerB.extern和registerC.auto和staticD.static和register正确答案:A3. 以下存储类型只有在使用时才为该类型变量分配内存的是()。
A.auto和staticB.auto和registerC.register和staticD.static和extern正确答案:B4. 运行程序:#includemain(){int n='c';switch(n++){ default: printf("error");break;case 'a':case 'A':case 'b':case 'B':printf("good");break;case 'c':case 'C':printf("pass");case 'd':case 'D':printf("warn");}}则输出结果是()。
A.goodB.passC.warnD.passwarn。
西北工业大学2020春机考《C语言程序设计》作业1单选题1.下面程序的输出结果是()。
main() { int a[10]={1,2,3,4,5,6,7,8,9,10,*p=a;A.3B.4C.1D.2答案:VX:34637870获取参考答案2.以下描述错误的是()。
A.break 语句不能用于循环语句和 switch 语句外的任何其他语句B.在 switch 语句中使用 break 语句或 continue 语句的作用相同C.在循环语句中使用 continue 语句是为了结束本次循环,而不是终止整个循环D.在循环语句中使用 break 语句是为了使流程跳出循环体,提前结束循环答案:VX:34637870获取参考答案3.下面程序的输出结果是()。
main() { int x=10; x+=(x=8); printf("%d\n",x); }A.10B.8C.18D.16答案:VX:34637870获取参考答案4.定义 int i=1; 则执行语句 while(i++<5); 后,i 的值为()。
A.3B.4C.5D.6答案:VX:34637870获取参考答案5.若有语句 scanf("%d%d",&a,&b);要使变量 a,b 分别得到 10 和 20,正确的输入形式为()。
A.10 20B.10,20C.1020D.10:20答案:VX:34637870获取参考答案6.有以下定义 #include char a[10],*b=a; 不能给 a 数组输入字符串的语句是()。
A.gets(a)B.gets(a[0]);C.gets(&a[0]);D.gets(b)答案:VX:34637870获取参考答案7.当 c 的值不为 0 时,在下列选项中能够将 c 的值赋给变量 a、b 的是()。
A.c=b=a;B.(a=c)||(b=c);C.(a=c)&&(b=c);答案:VX:34637870获取参考答案8.以下描述中正确的是()。
西工大2020年4月《C语言程序设计》作业机考试卷总分:100 得分:96一、单选题(共35 道试题,共70 分)1. 一个C程序的执行是从()。
A.本程序的main函数开始,到main函数结束B.本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C.本程序的main函数开始,到本程序文件的最后一个函数结束D.本程序文件的第一个函数开始,到本程序main函数结束正确答案:A2. 在C语言中,只有在使用时才占用内存单元的变量,其存储类型是()。
A.auto和registerB.extern和registerC.auto和staticD.static和register正确答案:A3. 以下存储类型只有在使用时才为该类型变量分配内存的是()。
A.auto和staticB.auto和registerC.register和staticD.static和extern正确答案:B4. 运行程序:#includemain(){int n='c';switch(n++){ default: printf("error");break;case 'a':case 'A':case 'b':case 'B':printf("good");break;case 'c':case 'C':printf("pass");case 'd':case 'D':printf("warn");}}则输出结果是()。
A.goodB.passC.warnD.passwarn正确答案:D5. 下面程序的输出结果是()。
main(){int x=177;printf("%o\n",x);A.177B.261C.-61D.61正确答案:B6. 若二维数组a由m列,则在a[i][j]之前的元素个数为()。
第一章测试题一.简答题1:Internet提供的常用服务有哪些?答案Internet提供的常用服务包括:电子邮件服务;文件传输服务;远程登录;信息查询。
2:在TCP/IP协议簇中属于应用层的协议有哪些?答案在TCP/IP协议簇中属于应用层的协议有:文件传输协议FTP;网络终端协议Tel-net; 简单电子邮件协议SMTP;域名服务DNS;网络文件系统NFS。
3:什么是IP地址?目前的IP地址由多少位二进制数构成?答案为确保整个网络的正确通信,Internet为每个网络和每台主机都分配了一个唯一的地址,我们称之为IP地址。
每个IP地址由网络标识和主机标识两部分构成,其中网络标识用来标识一个逻辑网络,主机标识用来标识网络中的一台主机。
目前IP地址的长度为4字节,即32位二进制数。
例如202.112.34.37表示一个IP地址。
4:什么是DNS?Internet顶级域名分为哪几类?答案为了解决IP地址难于记忆的缺点,Internet引入了域名服务系统DNS(Domain Name System)。
域名采用分层命名,各层间用“.”号隔开,且从右向左分别为最髙层域名、机构名、网络名、主机名,例如,www. nwpu. edu. cn表示中国(cn)教育网(edu)西北工业大学(nwpu)的一台WWW服务器。
Internet的顶级域名分为:商业机构com;教育机构edu;政府机构gov;国际机构int;军事机构mil;网络服务提供商net;非经营机构org;国家或地区名cn、us、jp等。
5:试述WWW的工作原理。
答案WWW是以HTML与HTTP协议为基础,提供面向Internet服务器的、一致的用户界面的信息浏览系统。
WWW系统的结构采用客户机(Client)/服务器(Sever)模式。
信息资源以网页的形式存储在WWW服务器中,用户在自己的计算机(客户机)上浏览某WWW服务器上的网页,其工作步骤如下:(1)用户启动客户端浏览器,在浏览器地址栏输人想要访问网页的URL,浏览器软件通过HTTP 协议向URL地址所在的Web服务器发出服务请求。
目录1 摘要 (3)1.1设计题目 (3)1.2设计内容 (3)1.3开发工具 (3)1.4应用平台 (3)2 详细设计 (3)2.1程序结构 (3)2.2主要功能 (10)2.4开发日志 (11)3 程序调试及运行 (11)3.1程序运行结果 (11)3.2程序使用说明 (13)3.3程序开发总结 (13)1 摘要1.1 设计题目(1)阶乘求和(2)数组排序(3)图形绘制1.2 设计内容(1)求1!+2!+3!+4!+5!(2)有一个数组中有10个数组元素,输入所有数组元素的值,对数组进行从大到小排序(3)绘制图形1.3 开发工具Raptor是一种基于流程图的可视化编程开发环境。
流程图是一系列相互连接的图形符号的集合,其中每个符号代表要执行的特定类型的指令。
符号之间的连接决定了指令的执行顺序。
一旦开始使用Raptor 解决问题,这样的理念将会变得更加清晰。
1.4 应用平台Windows XP / 7/Vista 32位2 详细设计2.1 程序结构(1)(2)(3)2.2 主要功能(1)通过调用子程序,利用循环思想,实现阶乘求和;(2)先输入十个数组元素,再利用冒泡法,使它们按照由大到小的顺序排列;(3)通过过程调用,进行图形编程,计算坐标,合理排布线段、矩形、圆等图形,最后绘制出优美的图形。
2.4 开发日志按照题目要求设计程序,运用各种工具把程序编写好,然后进行试运行,找出错误进行改正后,继续运行,知道运行结果正确。
3 程序调试及运行3.1 程序运行结果(1)(2)(3)3.2 程序使用说明(1)先切换至中级模式,再开始运行程序,最后可得到结果;(2)开始运行后,按照程序提示,依次输入10个数组元素,程序运行后即可使其按从大到小排列;(3)直接运行程序,即可得到预先设计好的美丽的图形。
3.3 程序开发总结(1)了解了如何调用子程序,切实感受到了利用子程序可以使程序更为简捷,运行更为迅速,十分方便;(2)实际体会了循环,判断等思想在数组排序中的应用,受益匪浅;(3)体会到了raptor的强大功能,可以快速而准确地绘制图形。
实验二FreeBSD的应用软件安装一、实验目的学习如何使用FreeBSD安装应用软件。
二、实验内容与要求1、查阅资料,了解FreeBSD 安装软件的主要方式,每种方式的具体步骤、操作指南;2、学习使用FreeBSD安装方法的一种进行安装简单的SSH;3、详细记录探索学习的内容和实验的整个过程,包括资料的查询、资料的来源(资料名称、网址等)、所做的各种尝试、以及最终的结果(包含截屏);三、实验过程1、FreeBSD 安装软件的主要方式(1).package用 package 安装,只要抓取该程序 package 档案,简单的透过 --> 安装pkg_add package_name --> 移除 pkg_delete package_name就可以完成安装 / 移除。
注意:文件名称 .tgz 结尾的是 package 文件名称 .tar.gz 结尾的是 source 注 : 目前已经安装的 package 数据库放在 /var/db/pkg/ 这个数据夹之中。
通常在比较大型的套件(需要编译很久)或是老是无法编译成功以及想先快速了解未使用过的套件是长成什么样子时,我们会采用这种方式来安装套件。
(2)port如果你要使用 ports 安装软件,你必须先确认 /usr/ports 这个目录是否有安装。
如果没有的话,使用 /stand/sysinstall 来安装 ports 的目录:1. 以 root 执行 /stand/sysinstall2. 选择 Configure 后按 Enter3. 选择 Distributions 后按 Enter4. 选择 ports 后按空格键5. 选择 Exit 后按 Enter6. 选择你要从 CDROM 或 FTP 安装等7. 跟着选单照做,最后离开 sysinstall或者我们也可以到 /ports/ 去手动抓回 port.tar.gz 这个档案,将它放在 /usr/ 下。
西工大C语言程序作业第2季:循环第1题Title 完全数TimeLimit1000MSMemory Limit10000KBDescrip tion 一个数如果恰好等于它的因子之和,这个数就称为"完数"。
例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。
请编写程序,找出1000之内的所有完数。
InputOutput 每行按格式输出其因子:6=1+2+3 SampleInputSample Output 6=1+2+328=1+2+4+7+14496=1+2+4+8+16+31+62+124+2481.完全数#include int main(){int m,i,j,s;for(m=6;m<1000;m++){s=1;for(i=2;i<m;i++)< p="">if(m%i==0) s=s+i;if(m-s==0){printf("%5d its fastors are 1 ",m);for(j=2;j}}第2题Title 迭代求根Time1000MSLimit10000KBMemory LimitDescriptionInput 输入a为实型Output 输出根为实型,保留五位小数。
Sample 2 Sample1.41421 Output2.迭代求根#include#includeint main(){float x0,x1,a;scanf("%f",&a);x1=a/2;do{x0=x1;x1=(x0+a/x0)/2;}while(fabs(x0-x1)>=0.00001); printf("%.5f\n",x1); return 0;}第3题Title 二分求根Time 1000MSMemory Limit10000KBDescrip tion 请编写程序,用二分法求下面方程在(-10,10)之间的根:Input 输入区间数据为实型、用空格隔开输出均。
《面向对象程序设计》大作业要求和任务书一、目的和要求检验学生学习《面向对象程序设计》课程后的学习成果,对于软件程序设计主流方法和思想——面向对象程序设计方法和思想的牢固掌握和熟练应用是一个非常重要的检测,是后续实践课程得以顺利进行的必要保证,对学生的程序设计能力培养和软件工程能力的培养具有重要的作用和意义。
要求学生综合应用已学的相关知识,例如程序设计基本思想和方法、C++语言、面向对象程序设计思想和方法,通过对真实世界的模拟和抽象来解决一些比较简单的实际问题。
要求学生针对比较系统的题目进行编码、测试,并进行设计说明书的撰写,从而培养和锻炼学生初步的工程意识和做法。
加深对所学知识的理解和掌握,巩固课程学习的内容,培养学生掌握面向对象程序设计(OOP)的思想,锻炼其使用面向对象的程序设计思想分析和解决实际问题的能力,培养上机动手能力,培养文档报告书面表达和思辨的能力。
要求学生对自己学过的C++知识进行综合运用,要求要用到类的特性:即类的封装、类的抽象、继承和多态,编写一些小型的具有一定应用价值的程序,通过对真实世界的模拟和抽象来解决一些比较简单的实际问题;掌握在Visual C++集成开发环境下编辑、编译、链接和运行一个C++程序的基本方法。
二、任务内容参考后附的大作业题目,规定每位同学完成两道题目(第一个题目是计算机类,第二个题目从第2-4题中任选一题)。
针对所选题目完成如下具体任务:1. 问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?对功能进行说明;2. 类设计:综合考虑系统功能,对问题描述中涉及的操作对象定义相应的数据类型。
抽象数据类型的实现尽可能做到数据封装,充分运用继承、派生、多态等知识,给出用UML描述的类之间的关系图;3. 详细设计:给出各个主要模块的算法,并画出模块之间的调用关系图;要使得系统结构清晰、合理、简单和易于调试,写出主要函数的算法框架;4. 程序编码:把详细设计的结果进一步求精为程序设计语言程序。
西工大noj答案【篇一:西工大poj100题(全新)】圆及圆球等的相关计算#includestdio.hint main(){int a,b,sum;scanf(%d %d,a,b);sum=a+b;printf(%d,sum); }#includestdio.hint main(){float r,h,l,s,sq,vq,vz,pi=3.141592653; scanf(%f %f,r,h);l=2*pi*r;s=pi*r*r;【篇二:西北工业大学 c语言 poj题目及答案_第一季】>毋庸置疑,学习程序设计就是奔着“程序员梦”去的。
编程本质是运用计算机科学的基本思想求解问题、设计系统以及理解人类的思维行为和普适技能,核心是“实现”。
因此,诸如“中国梦”、“程序员梦”是编写出来,即“coding now,programming future”。
在这个学期,你将尝试用“编写”的方式去“实现”,体验与过去完全不同的“实现”。
在这个过程中,有太多的“if”不确定、有太多的“for”死循环、有太多的“bug”愁断魂,“实现”并不容易。
有人的地方就有江湖,有江湖的地方就有武林大会。
poj(problems online judge)是学编程的江湖。
在这里,做习题叫做“刷题”,习题做错叫做“被挖”(wa=wrong answer,结果错误),习题通过叫做“a了”(ac=accepted,结果通过),简单习题称为“水题”,“刷一圈”指连续刷题12小时以上。
总会有人用一、两周的时间完成100题的oj,这不叫“刷题”,叫“梦游”。
2012学年,一个大三的哥哥将100题的源码整理出版了(长安校区超市旁的复印店),大一亲们蜂拥而至,一时间“a4纸贵”,交叉着下载、复制、粘贴、上传的能力训练,唯独不见“编写”。
待到期末上机考试,亲们那双瞠目的眼睛与希望工程那双大眼睛神似,最终贡献了两位数的gdp。
有道是出来混的,迟早要还,哥哥今昔完美毕业,亲们继续“梦游”。
西北工业大学POJ答案绝对是史上最全版(不止100题哦……按首字母排序)1.“1“的传奇2.A+B3.A+BⅡ4.AB5.ACKERMAN6.Arithmetic Progressions7.Bee8.Checksum algorithm9.Coin Test10.Dexter need help11.Double12.Easy problem13.Favorite number14.Graveyard15.Hailstone16.Hanoi Ⅱ17.Houseboat18.Music Composer19.Redistribute wealth20.Road trip21.Scoring22.Specialized Numbers23.Sticks24.Sum of Consecutive25.Symmetric Sort26.The Clock27.The Ratio of gainers to losers28.VOL大学乒乓球比赛29.毕业设计论文打印30.边沿与内芯的差31.不会吧,又是A+B32.不屈的小蜗33.操场训练34.插入链表节点35.插入排序36.插入字符37.成绩表计算38.成绩转换39.出租车费40.除法41.创建与遍历职工链表42.大数乘法43.大数除法44.大数加法45.单词频次46.迭代求根47.多项式的猜想48.二分查找49.二分求根50.发工资的日子51.方差52.分离单词53.分数拆分54.分数化小数55.分数加减法56.复数57.高低交换58.公园喷水器59.韩信点兵60.行程编码压缩算法61.合并字符串62.猴子分桃63.火车站64.获取指定二进制位65.积分计算66.级数和67.计算A+B68.计算PI69.计算π70.计算成绩71.计算完全数72.检测位图长宽73.检查图像文件格式74.奖金发放75.阶乘合计76.解不等式77.精确幂乘78.恐怖水母79.快速排序80.粒子裂变81.链表动态增长或缩短82.链表节点删除83.两个整数之间所有的素数84.路痴85.冒泡排序86.你会存钱吗87.逆序整数88.排列89.排列分析90.平均值函数91.奇特的分数数列92.求建筑高度93.区间内素数94.三点顺序95.山迪的麻烦96.删除字符97.是该年的第几天98.是该年的第几天?99.数据加密100.搜索字符101.所有素数102.探索合数世纪103.特殊要求的字符串104.特殊整数105.完全数106.王的对抗107.危险的组合108.文件比较109.文章统计110.五猴分桃111.小型数据库112.幸运儿113.幸运数字”7“114.选择排序115.寻找规律116.循环移位117.延伸的卡片118.羊羊聚会119.一维数组”赋值“120.一维数组”加法“121.勇闯天涯122.右上角123.右下角124.圆及圆球等的相关计算125.圆及圆球等相关计算126.程序员添加行号127.找出数字128.找幸运数129.找最大数130.整数位数131.重组字符串132.子序列的和133.子字符串替换134.自然数立方的乐趣135.字符串比较136.字符串复制137.字符串加密编码138.字符串逆序139.字符串排序140.字符串替换141.字符串左中右142.组合数143.最次方数144.最大乘积145.最大整数146.最小整数147.最长回文子串148.左上角149.左下角1.“1“的传奇#include <stdio.h>#include <stdlib.h>#include <math.h>int main(){int n,i,j,k=0,x=1,y,z,m,p,q,a,s=0; scanf("%d",&n);m=n;for(i=1;i<12;i++){m=m/10;k++;if(m==0)break;}q=n;k=k-1;for(a=1;a<=k;a++){x=x*10;}y=q%x;z=q/x;p=q-y;if(z>=2)s=s+x+z*k*(x/10);elses=s+z*k*(x/10);for(j=p;j<=n;j++){m=j;for(i=1;i<12;i++) {x=m%10;if(x==1)s++;m=m/10;if(m==0)break;}}printf("%d",s);return 0;}2.A+B#include <stdio.h>int doubi(int n,int m) {n=n+m;n=n%100;return n;}int main(){int t,i,a[100],n,m;scanf("%d",&t);for (i=0;i<=(t-1);i++){ scanf("%d%d",&n,&m); a[i]=doubi(n,m);}for (i=0;i<=(t-1);i++)printf("%d\n",a[i]); return 0;}3.A+BⅡ#include <stdio.h>int main(){int A,B,sum;scanf("%d%d",&A,&B);sum=A+B;printf("%d\n",sum); return 0;}4.AB#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){char s[100],q[100];double a,b,c;int n=0,i;scanf("%lf%lf",&a,&b);c=a*b;sprintf(s,"%.0lf",c);for(i=0;i<strlen(s);i++){n=n+s[i]-48;}while(n>=10){sprintf(q,"%d",n);n=0;for(i=0;i<strlen(q);i++) n=n+q[i]-48;}printf("%d",n);return 0;}5.ACKERMAN#include <stdio.h>#include <stdlib.h>#include <math.h>int ack(int x,int y){int n;if (x==0) {n=y+1;return n;}else if (y==0) n=ack(x-1,1);else n=ack(x-1,ack(x,y-1)); return n;}int main(){int m,b;scanf("%d%d",&m,&b);m=ack(m,b);printf("%d",m);return 0;}6.Arithmetic Progressions#include <stdio.h>#include <stdlib.h>#include <math.h>int g(int n){int i;if(n==1) return 0;if(n==2) return 1;if(n==3) return 1;for(i=2;i<=sqrt(n);i++) if(n%i==0) return 0; return 1;}int f(int a,int b,int c){int i=0,s=a-b;if(c==1&&g(a)==1) return a;if(b==0&&g(a)!=1) return -1;while(1){s=s+b;if(g(s)) i++;if(i>=c) break;}return s;int main(){int a,b,c,d[100],i=0,n;while(1){scanf("%d%d%d",&a,&b,&c); if(a==0&&b==0&&c==0) break; d[i]=f(a,b,c);i++;}n=i;for(i=0;i<n;i++)printf("%d\n",d[i]);return 0;}7.Bee#include <stdio.h>#include <stdlib.h>int main()int A[100],i=0,j,k,female=0,male=1,x; for(;;i++){scanf("%d",&A[i]);if(A[i]==-1)break;}for(j=0;j<i;j++){female=0,male=1;for(k=1;k<A[j];k++){x=female;female=male;male=x+male+1;}printf("%d %d\n",male,female+male+1);}return 0;}8.Checksum algorithm#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){int i,n,t,j;char s[100][100];for(i=0;;i++){gets(s[i]);if(s[i][0]=='#') break;}n=i;for(i=0;i<n;i++){t=0;for(j=0;j<strlen(s[i]);j++)if(s[i][j]==32) t=t;else t=t+(j+1)*(s[i][j]-64);printf("%d\n",t);}return 0;}9.Coin Test#include <stdio.h>#include <stdlib.h>int main(){char A[100000];int n,i=0,a=0,b=0,j; double x;while(1){scanf("%c",&A[i]);if(A[i]=='\n')break;i++;}for(j=0;j<i;j++){if(A[j]=='S'){printf("WA");goto OH;}if(A[j]=='U')a++;if(A[j]=='D')b++;}x=a*1.0/(a+b)*1.0;if(x-0.5>0.003||x-0.5<-0.003) printf("Fail");elseprintf("%d/%d",a,a+b);OH:return 0;}10.Dexter need help#include <stdio.h>int fun(int a){if(a==1) return 1;elsereturn fun(a/2)+1;}int main(){int a,b[100],i=0,j; while(1){scanf("%d",&a);if(a==0)break;b[i]=fun(a);i++;}for(j=0;j<i;j++){printf("%d\n",b[j]); }return 0;}11.Double#include <stdio.h>#include <stdlib.h>#include <math.h>int main(){int a[100],b[100],i,j,n,t=0; for(i=0;;i++){scanf("%d",&a[i]);if(a[i]==0) break;}n=i;for(i=0;i<n;i++)b[i]=2*a[i];for(i=0;i<n;i++)for(j=0;j<n;j++)if(a[i]==b[j]) t++;printf("%d",t);return 0;}12.Easy problem#include <stdio.h>#include <stdlib.h>#include <math.h>int main(){int N,i,n,j=0;scanf("%d",&N);for(i=2;i<N+1;i++){if((N+1)%i==0)j++; }printf("%d",j/2);return 0;}13.Favorite number#include <stdio.h>#include <string.h>#define MAXNUM 100000int prime_number = 0;int prime_list[MAXNUM]; bool is_prime[MAXNUM];int ans[MAXNUM + 2];int dp[MAXNUM + 2];void set_prime() {int i, j;memset(is_prime, 0, sizeof(is_prime));for (i = 2; i < MAXNUM; i++) {if (is_prime[i] == 0) {prime_list[prime_number++] = i;if (i >= MAXNUM / i) continue;for (j = i * i; j < MAXNUM; j+=i) { is_prime[j] = 1;}}}}int main() {int i, j, k,o=0,d[100];memset(dp, -1, sizeof(dp));set_prime();ans[0] = 0;dp[1] = 0;for (i = 1; i <= MAXNUM; i++) {ans[i] = ans[i - 1] + dp[i];if (dp[i + 1] == -1 || dp[i + 1] > dp[i] + 1) {dp[i + 1] = dp[i] + 1;}for (j = 0; j < prime_number; j++) {if (i > MAXNUM / prime_list[j]) break; k = i * prime_list[j];if (dp[k] == -1 || dp[k] > dp[i] + 1) { dp[k] = dp[i] + 1;}}}while (scanf("%d%d", &i, &j) == 2 && (i || j)) { d[o]=ans[j] - ans[i - 1];o++;}for(i=0;i<o;i++)printf("%d\n",d[i]);}14.Graveyard#include <stdio.h>#include <stdlib.h>#include <math.h>int main(){int a[100],b[100],n,i,j;double s,p,l,t;for(i=0;;i++){scanf("%d%d",&a[i],&b[i]);if(a[i]==0&&b[i]==0) break;}n=i;for(i=0;i<n;i++){p=10000;if(b[i]%a[i]==0){printf("0.0000\n");continue;}; t=10000/((double)a[i]);for(j=1;j<a[i]+b[i];j++){l=10000/((double)(a[i]+b[i]));l=t-j*l;l=fabs(l);if(l<p) p=l;}s=(a[i]-1)*p;printf("%.4lf\n",s); }return 0;}15.Hailstone#include <stdio.h>#include <stdlib.h>#include <string.h>int f(int n){int s=1;while(1){if(n==1) return s;else if(n%2==0) n=n/2,s++; else n=3*n+1,s++;}}int main(){int n,m,i,j=0,t;scanf("%d%d",&m,&n);printf("%d %d",m,n);if(m>n) t=m,m=n,n=t;for(i=m;i<=n;i++)if(f(i)>j) j=f(i);printf(" %d",j);return 0;}16.Hanoi Ⅱ#include <stdio.h>#include <stdlib.h>#define M 70int start[M], targe[M];long long f(int *p, int k, int fina) {if(k==0) return 0;if(p[k]==fina) return f(p,k-1,fina);return f(p,k-1,6-fina-p[k])+(1LL<<(k-1));}int main (){long long ans;int n;while(scanf("%d",&n),n){int i;for(i=1;i<=n;i++) scanf("%d",&start[i]);for(i=1;i<=n;i++) scanf("%d",&targe[i]);int c=n;for(;c>=1&&start[c]==targe[c];c--);if(c==0){printf("0\n"); continue;}int other=6-start[c]-targe[c];ans=f(start,c-1,other)+f(targe,c-1,other)+1; printf("%lld\n",ans);}return 0;}17.Houseboat#include <stdio.h>#include <stdlib.h>#include <math.h>#define pi 3.1415926int f(float x,float y){int i;for(i=0;;i++)if(50*i>sqrt(x*x+y*y)*sqrt(x*x+y*y)*pi/2) break;return i;}int main(){int n,i,a[100];float x,y;scanf("%d",&n);for(i=0;i<n;i++){scanf("%f%f",&x,&y);a[i]=f(x,y);}for(i=0;i<n;i++)printf("%d %d\n",i+1,a[i]);return 0;}18.Music Composer19.Redistribute wealth#include <stdio.h>#include <stdlib.h>#include <math.h>int main(){inta[1000],b[1000],n,i,j,s,sum,t,m,mid,c[100],k=0; while(1){scanf("%d",&n);if(n==0) break;{s=0;for(i=1;i<=n;i++){scanf("%d",&a[i]);s=s+a[i];}m=s/n;b[1]=a[1]-m;b[0]=0;for(i=2;i<n;++i)b[i]=b[i-1]+a[i]-m;for(i=0;i<n;i++)for(j=0;j<n-1-i;j++)if(b[j]>b[j+1])t=b[j],b[j]=b[j+1],b[j+1]=t;mid=b[n/2];sum=0;for(i=0;i<=n-1;++i) sum=sum+fabs(mid-b[i]); c[k]=sum;k++;}}for(i=0;i<k;i++) printf("%d\n",c[i]);return 0;}20.Road trip#include <stdio.h>#include <stdlib.h>#include <math.h>int f(int n){int a[100],b[100],i,s;for(i=0;i<n;i++)scanf("%d%d",&a[i],&b[i]); s=a[0]*b[0];for(i=1;i<n;i++)s=s+a[i]*(b[i]-b[i-1]);return s;}int main(){int n,c[100],i=0;while(1){scanf("%d",&n);if(n==-1) break;c[i]=f(n);i++;}n=i;for(i=0;i<n;i++)printf("%d\n",c[i]);return 0;}21.Scoring#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){int i,j,sum,min,c,count,n,a,b; char s1[50],s2[50];scanf("%d",&n);for(i=0;i<n;i++){count=sum=0;scanf("%s",s2);for(j=0;j<4;j++){scanf("%d%d",&a,&b);if(b!=0){sum+=(a-1)*20+b;count++;}}if(i==0){c=count,min=sum;strcpy(s1,s2);}else if(count>c||(count==c&&sum<min)) {min=sum;c=count;strcpy(s1,s2);}}printf("%s %d %d\n",s1,c,min); return 0;}22.Specialized Numbers#include <stdio.h>#include <stdlib.h>int main(){int i,n,sum10,sum12,sum16;for(i=2992;i<3000;i++){n=i;sum10=0;while(n){sum10+=n%10;n/=10;}n=i;sum12=0;while(n){sum12+=n%12;n/=12;}n=i;sum16=0;while(n){sum16+=n%16;n/=16;}if(sum10==sum12&&sum12==sum16) printf("%d\n",i);}return 0;}23.Sticks#include <stdio.h>#include <string.h>#include <stdlib.h>int len[64], n, minlen, get;bool b[64];int cmp(const void *a, const void *b){return *(int *)a < *(int *)b ? 1 : -1;}bool dfs(int nowlen, int nowget, int cnt){if(cnt >= n) return false;if(get == nowget) return true;int i;bool f = false;if(nowlen == 0) f = true;for(i = cnt; i < n; i++){if(!b[i]){if(len[i] + nowlen == minlen) {b[i] = true;if(dfs(0, nowget+1, nowget)) return true;b[i] = false;return false;}else if(len[i] + nowlen < minlen){b[i] = true;if(dfs(nowlen+len[i], nowget, i+1)) return true;b[i] = false;if(f) return false;while(i + 1 < n && len[i] == len[i+1]) i++;}}}return false;}int main(){int i, tollen;while(scanf("%d", &n), n){tollen = 0;int j = 0, p;for(i = 0; i < n; i++){scanf("%d", &p);if(p <= 50){len[j] = p;tollen += len[j];j++;}}n = j;if(n == 0){printf("0\n");continue;}qsort(len, n, sizeof(int), cmp); for(minlen = len[0]; ; minlen++) {if(tollen % minlen) continue; memset(b, 0, sizeof(b));get = tollen / minlen;if(dfs(0, 0, 0)){printf("%d\n", minlen);break;}}}return 0;}24.Sum of Consecutive#include <stdio.h>#include <stdlib.h>#include <string.h>int len[64],n,minlen,get;int b[64];int cmp(const void *a,const void *b){return *(int *)a<*(int *)b?1:-1;}int dfs(int nowlen,int nowget,int cnt){if(cnt>=n) return 0;if(get==nowget) return 1;int i,f=0;if(nowlen==0) f=1;for(i=cnt;i<n;i++){if(len[i]+nowlen==minlen){b[i]=1;if(dfs(0,nowget+1,nowget)) return 1;b[i]=0;return 0;}else if(len[i]+nowlen<minlen){b[i]=1;if(dfs(nowlen+len[i],nowget,i+1)) return 1;b[i]=0;if(f) return 0;while(i+1<n&&len[i]==len[i+1]) i++;}}return 0;}int main(){int i,tollen,q=0,c[100];while(scanf("%d",&n),n){tollen=0;int j=0,p;for(i=0;i<n;i++){scanf("%d",&p);if(p<=50){len[j]=p;tollen+=len[j];j++;}}n=j;if(n==0){printf("0\n");continue;}qsort(len,n,sizeof(int),cmp); for(minlen=len[0];;minlen++){if(tollen%minlen) continue; memset(b,0,sizeof(b));get=tollen/minlen;if(dfs(0,0,0)){c[q]=minlen;q++;break;}}}for(i=0;i<q;i++)printf("%d\n",c[i]);return 0;}25.Symmetric Sort#include <stdio.h>#include <stdlib.h>#include <math.h>int main(){double A[100];int i=0,j=0,k=0,l=0,sum=0; while(1){scanf("%lf",&A[i]);if(A[i]==0)break;i++;}for(j=0;j<i;j++){if(A[j]==2)printf("1\n");else{int B[10000],m=1,number=0;double n;B[0]=2;for(k=3;k<=A[j];k+=2){n=(double)k;for(l=2;l<=sqrt(n);l++){if(k%l==0)goto ai;}B[m]=k;m++;ai:;}for(k=0;k<m;k++){sum=0;for(l=k;l<m;l++){sum+=B[l];if(sum==A[j]){number++;break;}}}printf("%d\n",number);}}return 0;}26.The Clock#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){char s[100][100],a[100];int i,j,n;scanf("%d",&n);for(i=0;i<n;i++) scanf("%s",s[i]);for(i=0;i<n-1;i++)for(j=0;j<n-1-i;j++)if(strlen(s[i])>strlen(s[i+1]))strcpy(a,s[i]),strcpy(s[i],s[i+1]),strcpy(s[i+1],a) ;if(n%2==0){for(i=0;i<n-1;i=i+2) printf("%s ",s[i]);printf("%s ",s[n-1]);for(i=i-3;i>0;i=i-2) printf("%s ",s[i]);}else{for(i=0;i<n-1;i=i+2) printf("%s ",s[i]); printf("%s ",s[n-1]);for(i=i-1;i>0;i=i-2) printf("%s ",s[i]); }return 0;}27.The Ratio of gainers to losers#include<stdio.h>int main(){char s[5];int i,sum=0;gets(s);for(i=0;s[i]!='\0';i++){switch(s[i]){case'I': sum+=1;break;case'V': sum=5-sum;break; case'X':sum=10-sum;break; }}printf("%d\n",sum);return 0;}28.VOL大学乒乓球比赛#include <stdio.h>#include <stdlib.h>int main(){printf("A=Z\nB=X\nC=Y\n"); return 0;}29.毕业设计论文打印#include <stdio.h>#include <stdlib.h>int main(){int a[100],j=1,i,n,m;scanf("%d%d",&n,&m);for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n;i++)if(a[i]>a[m]) j++;printf("%d",j++);return 0;}30.边沿与内芯的差#include <stdio.h>#include <stdlib.h>int main(){int A[100][100],i,j,m,n,s=0,t=0; scanf("%d%d",&n,&m);for(i=1;i<=n;i++){for(j=1;j<=m;j++){scanf("%d",&A[i][j]);。
学院××××学院班级××××××××学号××××××××姓名×××目录1 摘要 (3)1.1设计题目 (3)1.2设计内容 (3)1.3开发工具 (3)1.4应用平台 (3)2 详细设计 (3)2.1程序结构 (3)2.2主要功能 (4)2.3函数实现 (5)2.4开发日志 (7)3 程序调试及运行 (7)3.1程序运行结果 (7)3.2程序使用说明 (12)3.3程序开发总结 (12)4 附件(源程序) (12)1 摘要1.1 设计题目算法型大作业题目:编写七种排序算法的演示程序。
1.2 设计内容编写快速排序、插入排序、选择排序、冒泡排序、堆排序、归并排序、基数排序函数,通过主函数调用以实现七种排序算法的演示。
1.3 开发工具Visual C++ 6.01.4 应用平台Windows 2000/XP/Vista 32位2 详细设计2.1 程序结构程序的整体结构与流程见下图所示。
程序运行时在主菜单中输入序号选择排序方法或选择结束程序,当进行某种排序方法后,在主函数中输入待排数据个数和待排数据,通过调用对应的排序函数实现排序并输出。
该排序结束后再次进入主函数,通过循环重复上述操作。
其中,主函数中将数组地址和待排序数据个数传递给排序函数,在排序函数中实现排序功能。
2.2 主要功能函数的功能为对快速排序、插入排序、选择排序、冒泡排序、堆排序、归并排序、基数排序算法的演示。
主函数:程序运行时,可使运行者根据提醒输入相关操作,从而进入不同的排序方法或者退出。
快速排序函数:根据快速排序的算法,最后输出插入排序函数:根据插入排序的算法,最后输出选择排序函数:根据选择排序的算法,最后输出冒泡排序函数:根据冒泡排序的算法,最后输出堆排序函数:根据堆排序的算法,最后输出归并排序函数:根据归并排序的算法,最后输出基数排序函数:根据基数排序的算法,最后输出2.3 函数实现主函数:在主函数中对菜单输出,通过switch语句中的case分支选择所需要的排序方法;通过while循环使演示程序在运行时能够持续进行快速排序:快速排序(kuaisu)又被称做分区交换排序,这是一种平均性能非常好的排序方法。
其算法基本思想是:任取排序表中的某个数据元素(例如取第一个数据元素)作为基准,按照该数据元素的关键字大小,将整个排序表划分为左右两个子表:左侧子表中所有数据元素的关键字都小于基准数据元素的关键字。
右侧子表中所有数据元素的关键字都大于或等于基准数据元素的关键字,基准数据元素则排在这两个子表中间(这也是该数据元素最终应安放的位置),然后分别对这两个子表重复施行上述方法的快速排序,直到所有的子表长度为1,则排序结束。
插入排序:插入排序(charu)的基本思想:开始时把第一个数据元素作为初始的有序序列,然后从第二个数据元素开始依次把数据元素按关键字大小插入到已排序的部分排序表的适当位置。
当插入第i(1<i<=n)个数据元素时,前面的i-1个数据元素已经排好序,这时,用第i个数据元素的关键字与前面的i-1个数据元素的关键字顺序进行比较,找到插入位置后就将第i个数据元素插入。
如此进行n-1次插入,就完成了排序。
以下是在顺序表上实现的直接插入排序在顺序表上进行直接插入排序时,当插入第i(1<i<=n)个数据元素时,前面的A[0]、A[1]、…、A[i-2]已经排好序,这时,用A[i-1]的关键字依次与A[i-2],A[i-3],…的关键字顺序进行比较,如果这些数据元素的关键字大于A[i-1]的关键字,则将数据元素向后移一个位置,当找到插入位置后就将A[i-1]插入,就完成了A[0],A[1],…,A[n-1]的排序。
选择排序选择排序(xuanze)的算法基本思想是:a)开始时设i的初始值为0。
b)如果i<n-1,在数据元素序列A[i](A[n-1]中,选出具有最小关键字的数据元素A[k];否则算法结束。
c)若A[k]不是这组数据元素中的第一个数据元素(i≠k),则将A[k]与A[i]这两数据元素的位置对调;d)令i=i+1转步骤 b)。
冒泡排序:冒泡排序(maopao) 的基本思想是:设排序表中有n个数据元素。
首先对排序表中第一,二个数据元素的关键字A[0]和A[1]进行比较。
如果前者大于后者,则进行交换;然后对第二,三个数据做同样的处理;重复此过程直到处理完最后两个相邻的数据元素。
我们称之为一趟冒泡,它将关键字最大的元素移到排序表的最后一个位置,其他数据元素一般也都向排序的最终位置移动。
然后进行第二趟排序,对排序表中前n-1个元素进行与上述同样的操作,其结果使整个排序表中关键字次大的数据元素被移到A[n-2]的位置。
如此最多做n-1趟冒泡就能把所有数据元素排好序。
堆排序:堆排序(duipai)sa.对排序表中的数据元素,利用堆的调整算法形成初始堆。
b.输出堆顶元素。
c.对剩余元素重新调整形成堆。
d.重复执行第b、c步,直到所有数据元素被输出。
如果建立的堆满足最大堆的条件,则堆的第一个数据元素A[0]具有最大的关键字,将A[0]与A[n-1]对调,把具有最大关键字的数据元素交换到最后,再对前面的n-1个数据元素使用堆的调整算法,重新建立最大堆,结果把具有次最大关键字的数据元素又上浮到堆顶,即A [0]的位置,再对调A[0]和A[n-2],…,如此反复执行n-1次,最后得到全部排序好的数据元素序列。
归并排序:其基本思想是:设有两个有序表A和B,其数据元素个数(表长)分别为n和m,变量i和j分别是表A和表B的当前检测指针;设表C是归并后的新有序表,变量k是它的当前存放指针。
开始时i、j、k都分别指向A、B、C三个表的起始位置;然后根据A[i]与B[j]的关键字的大小,把关键字小的数据元素放到新表C[k]中;且相应的检测指针(i或j)和存放指针k增加1.如此循环,当i与j 中有一个已经超出表长时,将另一个表中的剩余部分照抄到新表C[k]~C[m+n]中。
下面的归并算法中,两个待归并的有序表首尾相接存放在数组sourcetable.arr[]中,其中第一个表的下标范围从left到mid,另一个表的下标范围从mid+1到right。
前一个表中有mid-left+1个数据元素,后一个表中有right –mid个数据元素。
归并后得到的新有序表有right –mid个数据元素。
归并后得到的新有序表存放在另一个辅助数组mergedtable.arr[]中,其下标范围从left到right。
一趟归并算法:设数组sourcetable.arr[0]到sourcetable.arr[n-1]中的n个数据元素已经分为一些长度为len的归并项,将这些归并项两两归并,归并成一些长度为2len的归并项,结果放到mergedtable.arr[]中。
如果n不是2len的整数倍,则一趟归并到最后,可能遇到两种情况:剩下一个长度为len的归并项和一个长度不足len的归并项,可用一次merge算法,将它们归并成一个长度小于2len的归并项。
只剩下一个归并项,其长度小于或等于len,可将它直接复制到数组mergedtable.arr[]中。
在一趟归并算法的基础上,实现两路归并排序算法。
在两路归并排序算法中,初始排序表存放在数组table.arr[]中,第一趟归并将table.arr[]中的归并项两两归并,结果存放在辅助数组temptable.arr[]中。
第二趟将temptable.arr[]中的归并项两两归并,结果放回原数组table.arr[]中,如此反复进行。
为了将最后归并结果仍放在数组table.arr[]中,归并趟数应为偶数。
如果做奇数趟就能完成时,最后还需要执行一次一趟归并过程,由于这时的归并项长度len>=n,因此在则趟归并中while循环不执行,只做把temptable.arr[]中的数据元素复制到table.arr[]的工作。
基数排序:“基数排序法”(radix sort)则是属于“分配式排序”(distribution sort),基数排序法又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的比较性排序法。
具体可以参看后面的代码进行理解。
其它:使用了stdlib头文件里包含的系统函数,包括清屏函数和运行时的暂停,增强了程序运行时的效果。
2.4 开发日志在老师布置了大作业的题目后,我就把题目下载下来并进行分析已选择合适的题目。
经过我的慎重考虑,选择了算法型大作业题目中的编写七种排序算法的演示程序,觉得自己有能力把这道题目很好完成。
在认真分析连题目后,基本确定了整体的思路,但是其中有堆排序,归并排序,基数排序我没有在教材中接触过,于是借助了图书馆和网络上的资源,重点对这三的函数进行编写。
在编写大作业过程中大的困难我没有遇到,只是有些小的疏忽常常导致程序无法运行,如形参和实参的不一致等。
我也在其中意识到对知识掌握的不够熟练,在解决了这些问题后,我觉得自己对程序的编写更加熟练了,对问题的分析也更加严谨了。
在C程序设计的实验和理论考试之前代码已基本完成。
在考试结束后,我又对程序稍微进行了修改,使之运行时效果更好。
接着开始写实验报告,整理自己的大作业。
我对我的作业是很满意的。
3 程序调试及运行3.1 程序运行结果1.进入程序运行后所显示的菜单:2.快速排序:3.插入排序:4.选择排序:5.冒泡排序:6.堆排序:7.归并排序:8.基数排序:9.结束:3.2 程序使用说明1.打开源程序,调试完毕后开始运行,开始进行七种算法的演示;2.按照说明进行输入,选择数字1~7即可进入相应的排序算法演示程序,选择8结束程序;3.选择排序的方法后,按要求输入待排数据的个数,然后输入待排序数据即可(数据排序结束后,会自动清屏,进入菜单进行接下来的选择);4.应当注意,本演示程序对数据进行的是升序;3.3 程序开发总结在选择这个题目时,我觉得难度系数10对我有挑战性,并且我对排序有相对比较熟悉,所以就选了这个题目。
但是在编写过程中却遇到很多问题。
我和我的同学进行了讨论,查阅了图书馆和网络上的资料,结合力我个人对本题目的理解对各种问题进行了处理,学到了很多教材上没有的知识。