c语言程序设计与项目实践第18章
c语言程序设计项目实践

C语言程序设计项目实践1. 项目背景和目的C语言是一种广泛应用于嵌入式系统、操作系统和底层开发的高级编程语言。
它具有高效性、可移植性和灵活性等特点,因此在许多领域都有广泛的应用。
本项目旨在通过实践的方式,帮助学习者更好地掌握C语言程序设计的基本原理和技巧,并锻炼其解决实际问题的能力。
2. 项目内容本项目主要包括以下几个方面的内容:2.1 环境搭建首先,我们需要搭建C语言程序设计的开发环境。
可以选择合适的集成开发环境(IDE),如Code::Blocks、Dev-C++等。
同时,还需要安装C语言编译器,常用的有GCC、MinGW等。
安装完成后,进行环境配置,确保能够正常编译和运行C语言程序。
2.2 基本语法和数据类型在掌握了基本的开发环境后,我们需要学习C语言的基本语法和数据类型。
包括变量的声明和赋值、运算符的使用、控制结构(如if-else、for、while等)、函数的定义和调用等。
通过编写简单的程序,加深对这些概念的理解和掌握。
2.3 数组和指针数组和指针是C语言中非常重要的概念,也是实际开发中经常使用的数据结构和技巧。
学习数组和指针的用法,并编写相关的程序进行实践。
了解数组和指针在内存中的存储方式和访问方式,掌握指针的运算和指针与数组的关系。
2.4 文件操作文件操作是C语言中常见的任务之一,它涉及到文件的读取、写入和修改等操作。
学习如何打开文件、读取文件内容、写入文件内容,并编写相关的程序进行实践。
了解文件指针的概念和文件操作函数的使用方法。
2.5 结构体和链表结构体和链表是C语言中用于组织和管理复杂数据的重要工具。
学习结构体和链表的定义和使用,并编写相关的程序进行实践。
了解结构体和链表的基本原理和操作方式,掌握结构体和链表在实际开发中的应用。
3. 项目实施步骤为了顺利完成本项目,我们可以按照以下步骤进行实施:3.1 环境搭建•下载并安装合适的集成开发环境(IDE)和C语言编译器。
•进行环境配置,确保能够正常编译和运行C语言程序。
《C语言程序设计》课后习题参考答案 李勃 邱晓红 主编 清华大学出版社

《C语言程序设计》课后习题参考答案第1章C语言及程序设计概述1.单选题(1)A (2)B (3)A (4)B (5)C2.填空题(1)//,/*…*/(2)scanf()(3)printf()3.判断题(1)对(2)错(3)错(4)对第二章:数据类型运算符与表达式1.单选题(1)C (2)D (3)C (4)B (5)C (6)A (7)B (8)D (9)A(8)D(9)A(10)B(11)C(12)C(13)D(15)B(16)C(17)A(18)A(19)B(20)C(21)C(22)D(23)C(24)A(25)D(26)B(27)C(28)B(29)B(30)A2.填空题(1)sqrt(pow(y,x)+log10(y)) (2)36(3)6(4)3 3(6)36(7)int x=8,y=8;(8)1(9)E(10)6,7,8,9(11)6(12)66,96(13)240(14)1,1,-1,-1(15)5,2,6(16)1(17)!(18)2(19)(a>0&&a<101)&&(a%3==0||a%7==0) (20)A3.程序分析题(1)2 72 74 94 412 12116(3)100 d 68 D97 a 49 1 (4)0 1 0 1 (5)2 4 6 7-0.58 7046.587.5(6)33 12 113 13 082 32(7)618 30181814.改错题(1)①无初始赋值,不能输出②数据精度丢失③少“;”号④单字符变量不能保存字符串常量⑤不能连续初始化⑥非法标识符(2)short i=38000溢出PI=3.1416 常量不能修改值Printf(“%d”,x%y) %必须是整数a*=(b+c)/=d符合赋值左边不能是表达式第三章:算法概念与顺序结构程序设计1.选择题(1)D(2)B、D(3)D(4)B(5)C(6)A(8)C(9)B(10)D2.填空题.(1)一条语句;(2)小于左右(3)%%(4)输出项列表输出控制符(5)取地址取a的地址(6)从盘获取一个字符(7)大括号(8)f=68.00(9)n1=%d\n n2=%d(10)7,5,c=33.程序分析题.(1)i=100,c=a,f=1.234000(2)65535,65536(10)1234,123.5,12345.5第四章:选择结构程序设计(1)C (2)B (3)B (4)B (5)D (6)D (7)D (8)A (9)B (10)A (11)B (12)B (13)D (14)A (15)C (16)A (17)C (18)D (19)B (20)D (21)A(23)A(24)A2.填空题.(1)1(2)5 8 8(3)4 5 99(4)2(5)10 20 0(6)2 1(7)-4(8)3(9)No(10)25(11)45 45(12)0(13)5.5(14)13(15)3第五章:循环结构程序设计(1)C(2)A(3)D(4)B(5)D(6)B(7)A A或B(8)输出4444(9)B(10)A(11)B(12)C(13)A(14)B2.填空题.(1)r=m;m=n;n=rm%n(2)3(3)-5(4)i%3==2&&i%5==3&&i%7==2 j==5j!=k(6)int s=8,j=i+2k+i+j==8(7)8(8)k&&i<=500 k/10 continue第六章:数组1.选择题(1)B(2)C(3)D(4)D(5)B(6)C(7)B(8)A(9)A(10)D2.填空题.(1)按行序优先的原则(2)0 9(4)1 2(5)6(6)前者以回车后者以空格或回车作为间隔符(7)gets()(8)&a[i](9)char k -1(10)9 83.程序分析题.(1)1 3 7 15(2)0 0 0(3)读取输入字符串中数字字符(4)①if(str1==str2) (strcmp(str1,str2)==0)②&c1[0]③m[i][k-1]第七章:函数的调用1.选择题(1)B(2)C(3)C(4)A(6)D(7)D(8)D(9)B(10)D(11)A(12)A(13)B(14)B2.填空题.(1)有参无参(2)顺序类型(3)定义调用(4)①fmax(a,N) ②s[k]=s[p](5)①age(n-1)+2 ②age(5)(6)①prt(c,n-1) ②prt(…‟,n-i) ③prt(…*‟,2*i-1) 3.程序分析题.(1)h l o(2)3(3)2 6(4)5 25。
c语言程序设计与项目实践第18章

18.2.2 选择排序
范例18.2 SelectionSortAirScheduled.c 设计一段选择排序算法的排序程 序,将周四由上海飞往各地的内地航班按目的地首字母先后顺序排序, 并输出航班号、航班所属公司以及起飞时间。
18.2.3 合并排序
合并排序又叫归并排序,合并排序的主要目的是将两个或多个有 序的数组或链表等有序表合并成一个新的有序表。最简单的合并是将 两个有序数组合并成一个有序数组。典型的合并排序算法是2-路合并排 序,即按照排序规则将两个位置相邻的有序表合并为一个有序表。
18.2.1 起泡排序
起泡排序也叫冒泡排序,它的一般实现规则为:首先制定排序规 则,然后,依次两两比较待排序的数据,若不符合排序规则,则进行 交换,然后依次比较下去,直到全部元素排列有序为止。 例如,有如下一组数据{85,279,948,521,616,888},按照 从大到小的顺序排列,使用起泡法排序,首先执行第一趟交换,过程 如图所示。
18.2.2 选择排序
经过第四趟排序之后,数值18被交换到第四的位置,此时数据序 列顺序为{-88,30,6,18,77,45}。然后,排序遍历起始位置移到第5个参 数,进行第五趟排序,第五趟排序之后,将得到从小到大的有序数列{88,30,6,18,45,77}。 选择排序的一般表达代码为:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 void SelectionSort(DataList array[],long len) { int loop1=0,loop2=0,temp=0; for(loop1=0;loop1<=len-1;loop1++) //外层循环,控制每一趟起始位置 { for(loop2=loop1+1;loop2<len;loop2++) //内层循环,控制每趟循环比较次数 { if(array[loop1]>array[loop2]) //判断是否符合交换规则 { temp=array[loop1]; array[loop1]=array[loop2]; array[loop2]=array[loop1]; } } } } }
C语言程序设计实验报告(实验大纲+过程)

C语言程序设计实验报告(实验大纲+过程)C语言程序设计实验报告(实验大纲+过程)一、实验目的本实验旨在通过实际的C语言程序设计任务,培养学生的编程思维、动手能力,加深对C语言程序设计的理解和掌握。
二、实验内容1. 实验环境的搭建在计算机上安装C语言编程环境,如C语言编译器。
2. 实验材料准备根据给定的实验题目和要求,准备相应的实验材料,包括输入输出测试数据、参考文档等。
3. 实验任务根据实验题目,编写C语言程序,实现特定的功能要求。
程序需包括输入部分、处理部分和输出部分。
4. 程序调试与测试对编写完成的程序进行调试,确保程序的正确性。
使用多组测试数据进行测试,验证程序的功能是否符合要求。
5. 实验总结与思考对实验过程中遇到的问题进行总结,并提出改进建议。
思考课程的重点和关键,深化对C语言程序设计的理解。
三、实验步骤1. 实验环境的搭建在计算机上下载并安装C语言编译器,如Dev-C++或Code::Blocks等。
2. 实验材料准备根据实验题目要求,准备好实验所需的输入测试数据和输出要求。
3. 编写C语言程序根据实验题目,使用C语言编写程序。
在程序的开头部分添加必要的注释,说明程序的功能和使用方法。
4. 程序调试与测试编译并运行程序,查看是否存在语法错误。
使用给定的测试数据,验证程序的输出是否符合要求。
5. 实验总结与思考对实验过程中遇到的问题进行总结,并提出改进建议。
思考课程的重点和关键,深化对C语言程序设计的理解。
四、实验结果与分析根据实验题目要求,给出实验编写的C语言程序的详细代码,并解释程序的设计思路和实现方法。
同时,给出实验所得的输出结果,并分析结果是否符合预期。
五、实验心得体会通过完成本次实验,我对C语言程序设计的基本语法和思维方式有了更深入的理解。
在编写程序的过程中,我遇到了一些问题,但通过不断尝试和调试,最终顺利完成了实验任务。
在今后的学习中,我将进一步加强对C语言的理解和应用能力,提高程序设计的质量和效率。
C程序设计与项目实践教学设计

C程序设计与项目实践教学设计一、前言C语言是计算机专业中的基础课程之一,也是编程语言中的一个典范。
对于计算机本科生而言,学好C语言对于以后的学习和科研具有十分重要的意义。
在C语言本课程教学中,除了理论教授之外,项目实践也是本课程中不可缺少的一部分。
本文将从C语言本课程的教学内容、课程目标以及项目实践等方面展开讨论和探索。
二、C程序设计教学内容C语言的教学内容基础围绕C语言的基本语法、流程控制语句、数组、指针、函数、结构体、文件操作等内容进行讲解。
教师应该在讲解内容的同时,将代码编写示范和实际操作结合起来,将理论内容转化为实用技能。
此外,注重C语言编程的基础知识的讲解和练习,对于提高C程序理解和编写水平非常有帮助。
三、C程序设计教学目标1.掌握C语言基础语法和流程控制语句,能够编写简单的控制程序。
2.学习数组、指针、函数、结构体等高级语言特性,可以编写复杂的C程序并进行调试。
3.熟练掌握文件操作和文件读取功能。
4.掌握常用的C语言开发工具,例如Visual Studio等。
5.学会使用常用的调试工具,例如gdb调试器。
6.学习软件开发所需要的基本思路和方法,并能够独立完成小型项目的实现。
四、项目实践在C语言课程中,项目实践是不可缺少的一部分。
学生可以根据自己的兴趣和爱好,结合实际应用场景,设计和实现个人小型程序项目。
例如,学生可以选择电子商务网站设计、数据库管理系统、游戏开发等,从而锻炼自己的编程能力和团队协作能力。
在实现项目时,除了实际编程之外,还需要学习和掌握软件工程的基本思路和方法。
例如,流程图、伪代码、模块化编程等,这将有助于学习者更好地组织自己的编程项目,并为以后的开发工作打下良好的基础。
五、项目实践的评估方法对于C语言课程中的项目实践,可以通过多种方式进行评估。
其中最常用的方式是提交完整的项目源代码和可执行文件,并根据项目难度、完成度和代码质量等因素进行评估。
此外,还可以通过PPT或实验报告的形式,展示项目研发的全过程、思路及成果,从而了解学生在项目研发过程中的思路和实际操作能力。
《C语言程序设计》实训任务书

某某某学院《C语言程序设计》课程设计任务书系别:计算机工程系专业:计算机网络设计班级:网班指导教师:某某。
某某二○一一年六月二日一、基本目的与任务本课程实训是计算机网络专业重要的实践性环节之一,是在学生学习完《C 语言程序设计》课程后进行的一次全面的综合练习。
本课程实训的目的和任务:(1)巩固和加深学生对C语言课程的基本知识的理解和掌握;(2)掌握C语言编程和程序调试的基本技能;(3)利用C语言进行简单软件设计的基本思路和方法;(4)提高运用C语言解决实际问题的能力。
二、基本要求:1.设计正确,方案合理。
根据自己对应的课题完成以下主要工作:①完成系统需求分析:包括系统设计目的与意义;系统功能需求(系统流程图);输入输出的要求。
②完成系统总体设计:包括系统功能分析;系统功能模块划分与设计。
③完成系统详细设计:包括数据库需求分析;界面设计与各功能模块实现。
④系统调试:调试出现的主要问题,编译语法错误及修改,重点是运行逻辑问题修改和调整。
⑤使用说明书及编程体会:说明如何使用你编写的程序,详细列出每一步的操作步骤。
⑥关键源程序(带注释)。
2.按规定格式完成课程设计报告,将其打印稿(A4纸)上交给老师存档。
设计报告5000字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。
3.不得抄袭他人程序、课程设计报告,每个人应体现自己的个性设计。
4.在基本要求达到后,可进行创新设计。
三、设计报告格式1.课题名称:2.正文:(1)课题的目的意义(2)功能介绍:(3)模块和流程图(4)程序清单(5)用户使用说明书(6)总结:包括此设计的结论,特点及此项设计的改进意见。
四、实训课题下列5个课题供同学们参考。
每位同学可选其一完成,鼓励自拟。
1)班级成绩管理系统2)班级档案管理系统3)学生考勤管理系统4)通讯录程序设计5)高校人事管理系统五、成绩考核由指导教师根据学生在设计中的平时表现、任务的完成情况、课程实训报告的质量等综合打分。
C语言程序设计项目式教程完整版课件全书电子教案教材课件完整

例如,有一函数
,编写程序,其功能是对已知 x 求 y
程序说明 ① if 和 else 后面的语句可以是复合语句。 ②注意 if 与 else 的配对原则,else 总是与前面离它最近的没成对的 if 成对。
简单的C语言程序结构
说明4——语句
C语言中以“;”作为语句结束的标志。函数体就是由若干语句组成的,同时语句也出现在 函数之间,示例代码如下所示:
简单的C语言程序结构
学习一种编程语言,最佳途径就是多阅读代码段,多编写程序代码,接下来通过最基本的 C语言程序的基本构成学习基本格式和书写规范,代码示例如下所示:
单一if结构
选择结构中最基本的分支结构是 if 语句,按形式分 if 语句可以分为单分支、双分支和多 分支等,单一 if 语句定义形式如下所示
当上述中“表达式”值为“逻辑真”时,执行“语句”中内容。例如计算整型变量 x 的 绝对值,示例代码如下所示:
If-else结构
if 语句的第二种形式为 if-else 结构的双分支。其定义形式如下所示 : 当“表达式”值为“逻辑真”时,执行“语句 1”;当“表达式”值为“逻辑假”时,执 行“语句 2”。例如,判断整型变量 x 是 5,则输出“right”,否则输出“error”,示例代码如 下所示:
简单的C语言程序结构
说明2——预处理
include称为文件包含命令,其意义是把双引号""或尖括号<>内指定的文件包含到本程序来, 成为本程序的一部分。被包含的文件通常是由系统提供的,其扩展名为.h的头文件。C语言的 头文件中包括了各个标准库函数的函数原型。因此,凡是在程序中调用一个库函数时,都必 须包含该函数原型所在的头文,示例代码如下所示:
原型在头文件 “stdio.h”中。具体格式如下:
《C语言程序设计实践教程》答案-完整版

4.2练习题一、选择题1.D2.B3.A4.B和D5.C6.A7.B二、填空题1.//或/* */2.主或main3.函数首部和函数体4.编译和连接5.公号5.2练习题一、选择题1.A2.D3.B4.B5.C6.C7.D8.A9.B10.B11.D12.B13.A或B14.C15.B17.D18.D19.C20.D21.B22.A23.D24.C25.C26.B27.C28.D29.A30.B二、填空题1.102,102.#define 宏名字符串3.14.n=15.-46.a=1,b= ,c=27.c=A8.n1=%d\nn2=%d9.a+b>c&&a+c>b&&b+c>a10.ch>=’a’&&ch<=’z’|| ch>=’A’&&ch<=’Z’11.712.013.1111000014.8,46.2练习题一、选择题1.A2.C3.D4.C5.A7.A8.D9.B10.C11.A12.A13.C14.B15.正确答案为:12345678二、填空题1.102.y=1 x%i==03.屏幕中间输出一个由星号组成的菱形4.15.136.(cx=getchar())!=-1 front=cx; 7.m%n8.49.*p px=&x py=&y三、读程序,写结果1.-12.3,1,-1,3.a=16,y=604.x=12,y=45.597.2练习题一、选择题1.B2.C3.C4.A5.D6.C8.D9.C10.D11.D12.D13.A14.B15.C16.B17.B18.A19.A20.D21.B22.D23.C24.D25.D26.C二、填空题1.‘a’02.a[k] a[k] a[k]3.0 64.A B C D EA5.1,66.k=p;7.i<j8.189.4,some string * test 10.you&me三、读程序,写结果1.5 4 8 2 02.10 24 15 6 3.love china! H w l 4.66 66 555.Front一、选择题1. A2. A3. B4. B5. B6. A7. D8. C9. A10. A11. A12. B13. B14. A15. B16. B17. C二、填空题1.122.Itis3.fun(n-1)*n fun(k)4.s[i]-t[i]5.n%m i-1 x[d]6.x=n x%10 x7.m=f(a,4)+f(b,4)-f(a+b,3)8.a=1,b=1三、读程序,写结果1.s=72.s=373.bij12一、选择题1. B2. C3. B4. D5. B6. A7. B8. D9. D10. B11. D12. A13. B14. C15. C16. C17. A18. D19. B20. D二、填空题1.b->day (*b).day2.DDBBCC3.zhang 170.000000wang 150.0000004.995.max=i min=i stud[max].name,stud[max].score stud[min].name,stud[min].score6.&r 1 feof(fp) break7.BBB AAA 1238.rewind三、读程序,写结果1.2002,shangxian2.32。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
未排序序列 [85] [279] [948] [521] [616] [888] [0]
第一趟合并排序
[85
279]
[521
948]
[616
888]
[0]
第二趟合并排序
[85
279
521
948]
[0
616
888]
第三趟合并排序
[0
85
279
521
616
888
948]
18.2.3 合并排序
使用递归方式的合并排序算法一般实现函数如下:
18.2.3 合并排序
2.合并排序算法
合并排序算法最常用的是2-路合并排序。使用2-路合并排序算法, 可以将无序序列排列成有序序列, 递归形式的2-路合并排序方法基本思想:将含有n个元素的待排序 序列分为n个子序列,然后,两两进行合并,得到n/2或n/2+1个含有2 个元素的子序列,将这些子序列再两两合并,直到生成一个长度为n的 有序序列为止。 例如,有序列{85,279,948,521,616,888,0},将上述序 列按从小到大排列,使用合并排序算法的示意图如图所示。
18.2.1 起泡排序
在第一趟数据比较的基础上,继续进行第二趟数据比较。第二趟 数据比较共执行4次比较与交换,执行完毕后数据顺序为{948,521, 616,888,279,85},次小值279将被放到倒数第二的位置,如图所 示。
279 948 521 616 888 85 第 一 次 交 换 948 279 521 616 888 85 第 二 次 交 换 948 521 279 616 888 85 第 三 次 交 换 948 521 616 279 888 85 第 四 次 交 换 948 521 616 888 279 85 第 二 趟 交 换 结 果
18.2.2 选择排序
范例18.2 SelectionSortAirScheduled.c 设计一段选择排序算法的排序程 序,将周四由上海飞往各地的内地航班按目的地首字母先后顺序排序, 并输出航班号、航班所属公司以及起飞时间。
18.2.3 合并排序
合并排序又叫归并排序,合并排序的主要目的是将两个或多个有 序的数组或链表等有序表合并成一个新的有序表。最简单的合并是将 两个有序数组合并成一个有序数组。典型的合并排序算法是2-路合并排 序,即按照排序规则将两个位置相邻的有序表合并为一个有序表。
第18章 C语言常用算法
本章的学习重点
◆ ◆ ◆ ◆ 了解起泡排序、选择排序及合并排序算法 掌握快速排序算法 掌握折半查找算法 了解二叉树的概念及其简单操作
18.1 什么是算法
算法的程序公式: 程序 = 数据结构 + 算法
1.计算机算法
计算机算法主要有两类:数值运算算法和非数值运算算法。
2.算法的程序实现
3.非数值算法
C语言中最常用的非数值算法主要包括排序算法和查找算法。在 这些算法的理论设计中,有时需要用到某些数学模型,通常称为数据 结构。典型的数据结构类型主要有链表、二叉树、图等。
18.2 排序算法
排序,是指将一系列数据按照某种规则按照一定的顺序进行排列, 以符合实际处理需求的操作过程。 例如,对于一组数据,可以按照由大到小的顺序排序,也可以按 照由小到大的顺序排序。对于人员姓名,可以按照首字母前后顺序排 序,也可以按照姓名长度排序等等。一个合理的排序算法可以使程序 执行效率提高,程序健壮性增强。
使用程序实现算法,应做到程序简洁明了,易读性强,执行效率高。 例如,要实现下面的公式的加和运算: 1+3+5+7+……+99+100 对于这样的累加计算,可以使用下面的C语言程序实现:
01 02 03 04 05 06 int loop = 0, sum = 0; for(loop=1;loop<100;loop=loop+2) { sum = sum + loop; } sum = sum + 100;
1.两个数组合并排序
将两个有序数组Array1和Array2进行排序并放到另一个数组 ArrayMerge的基本思想为: 首先,在Array1和Array2数组中各取第一个元素进行比较,将小 的元素放入数组ArrayMerge; 然后,取较小的元素所在数组的下一个元素与另一数组中上次比 较后较大的元素比较,重复上述比较过程,直到某个数组被先排完; 最后,将另一个数组中剩余元素拷贝到数组ArrayMerge。
01 02 03 04 05 06 07 08 09 10 11 MergeSort(int array[], int firstIndex, int lastIndex) { int midIndex = 0; if (firstIndex < lastIndex) { midIndex = (firstIndex + lastIndex) / 2; MergeSort(array, firstIndex, midIndex); MergeSort(array, midIndex + 1, lastIndex); arrayMergeFun(array, firstIndex, midIndex, lastIndex); } }
希腊(2),意大利(17),喀麦隆(6)。
18.2.2 选择排序
选择排序的基本思想是:首先制定排序规则(例如按照从小到大 排序原则),排序过程中首先在未排序序列中找到最小值,放在排序 序列的起始位置,随后,逐趟从余下未排序的数值中逐次寻找最小值, 直到整个序列有序为止。 例如,有如下随机序列{6,18,45,3,77,-88},将该序列从小到大排 序,使用选择排序算法过程如下: 首先,进行第一趟排序,找出其中最小的数,如图所示。
18.1 什么是算法
如果利用数学算法,可以使程序效率提高近10倍。数学运算中, 可以使用和差算法计算这样的加和运算,公式为: sum = n*(a1+an)/2 使用C语言实现的程序为:
01 02 03
int sum = 0; sum = 49 * (99 + 1) / 2.0; sum = sum +100;
18.2.1 起泡排序
起泡排序也叫冒泡排序,它的一般实现规则为:首先制定排序规 则,然后,依次两两比较待排序的数据,若不符合排序规则,则进行 交换,然后依次比较下去,直到全部元素排列有序为止。 例如,有如下一组数据{85,279,948,521,616,888},按照 从大到小的顺序排列,使用起泡法排序,首先执行第一趟交换,过程 如图所示。
18.2.4 快速排序
范例18.3 QuickSort.c 某公司执行年度考评,考评结果放在一个二 维数组PerformanceScore中,第一维记录员工工号,第二维记录员 工年终考评成绩,使用快速排序算法,将员工考评成绩编号。
18.3 查找算法
查找算法是程序设计中最常用的算法之一。所谓查找,就是要在一 组数据中找出某个特定的元素,若找到,则执行某种预定的动作,若未 找到,则输出提示信息,并执行相应的操作。查找的算法很多,常用的 查找算法是顺序查找算法和折半查找算法。
顺序查找的基本思想是:从元素序列开始位置,逐个比较序列中的 元素与被查找关键元素,若序列中某元素与关键元素相等,则查找成功, 否则,继续查找直到找到对应元素。若直到最后一个序列元素仍未找到, 则该序列中没有与关键元素相匹配的数据,查找失败。 例如,有数组array[10]={101, -80, 96, 11458, -3.14, 495, 6174, 705, 56, 93.45},要在该数组中查找关键元素key=56,并返回其数组下 标位置。则可以定义遍历变量i,然后顺次遍历数组元素,直到找到该元 素值为止。查找循环代码如下:
a1; 1)设置两个变量i和j,排序初始时设置初始值为:i=1,j=n-1; 2)取第一个元素a1作为关键数据,赋值给临时变量KeyTemp,令KeyTemp =
3)从j开始逐渐向序列前面搜索,即执行j--操作,依次与KeyTemp比较,直到 找到第一个小于KeyTemp的元素为止,然后将找到的元素与KeyTemp交换; 4)从i开始向序列后面搜索,即执行i++操作,依次与KeyTemp比较,直到找 到第一个大于KeyTemp的元素,然后将找到的元素与KeyTemp交换; 5)重复上述第3、4步,直到i = = j;
18.2.4 快速排序
快速排序的基本思想是:通过一趟数据比较和交换,将要排序 的数据分成前后两部分,其中一部分的数据都比另外一部分的数据 都要小,然后,再按这种方法对分开的两部分数据分别进行一次快 速排序,依次执行下去,直到整个序列有序为止。 例如,有无序序列{a1,a2,a3,a4,……,an},使用快速 排序的过程为: 首先,任选一个数据(通常选第一个元素数据a1)作为关键数 据。然后,将所有比它小的元素都交换到它前面,所有比它大的元 素都交换到它后面,执行这样一次比较和交换过程称为一趟快速排 序。一趟快速排序的算法描述如下:
12
13 14 15 16 } } } }
r[loop2-1]=temp;
18.2.1 起泡排序
范例18.1 BubbleSortContryTimes.c 设计一段起泡排序算法的排序程序, 将下面几个国家到2010年为止打入世界杯决赛圈的次数,按从大到小 排列,相同次数的随机排列。国家及进入世界杯决赛圈次数:法国 (13),西班牙(13),荷兰(9),美国(9),德国(13),巴西 (19),英格兰(13),阿根廷(15),中国(1),澳大利亚(3),