欢迎光临
免费的PDF电子书下载网站

C语言程序设计与实训 PDF下载

编辑推荐

本书作为应用型本科计算机及相关专业的C语言程序设计课程教材,面向“程序设计零基础”的读者。由浅入深,深入浅出,集知识传播和编程能力训练为一体。本书理论适度,注重实训和实践能力培养。使用通俗易懂的文字讲解C语言中的主要知识内容,采用初学者易于理解的方式,并辅以形象类比的方法,对一些复杂或抽象的概念进行清晰的描述。书中每一章都安排了相应的实训任务,用于对所学内容知识的强化与巩固,真正做到知识讲授与能力训练并重。本书强调语法,淡化算法。以程序功能实现为*终目标,书中的每一个程序都采用相对简单的方法来实现,强调对C语言语法知识的掌握。淡化程序中涉及的复杂而抽象的数学算法,使初学者更容易理解程序语句的组织结构与功能。本书结合实际,突出应用。以实际应用为目的,从培养分析与解决问题的能力入手,注重知识学习与实训内容的关联性,注重实训内容的层次性与实用性,使初学者能够在有限时间内学以致用,真正掌握C语言程序设计的方法及内涵。本书配套资源,读者可登录清华大学出版社网站下载使用。 ;

内容简介

本书根据应用型本科高校计算机类、信息类等相关工科专业开设的C语言程序设计课程的教学要求和特点编写,内容共分为10章,包括C语言概述、数据类型与运算、数据输入与输出、程序结构设计与应用、数组、函数、指针、结构体、文件、结构化程序设计与实训。全书以C语言的基本概念与基本知识为引领,从实际问题出发,以应用为基础,本着“理论适度,突出实训,增强职业素养”的原则,通过实训任务,由浅入深、循序渐进地引导读者学习与掌握C语言程序设计方法,激发学生学习兴趣,提高动手实践能力。 本书内容通俗易懂,理论适度,实践性强,适用面广。每章*后配有习题,作为对本章学习知识点的巩固,以方便学生复习与自学。 本书适合作为应用型本科高校、高职高专院校计算机及其相关专业的课程教材,也可以作为软件企业的职业培训类书籍以及各类软件技术人员的参考书。

作者简介

暂无

C语言程序设计与实训 PDF下载

目录

目录

第1章C语言概述1

1.1计算机程序设计1

1.1.1计算机程序1

1.1.2计算机程序设计语言及其分类1

1.1.3程序设计过程3

1.2为什么要学习C语言5

1.2.1C语言发展历程简介5

1.2.2C语言语法结构的特点5

1.3简单的C程序6

1.4C程序的结构8

1.4.1C程序的结构及特点8

1.4.2养成良好的代码书写规范9

1.5在Visual C 6.0环境下运行C程序10

1.5.1C程序的执行流程11

1.5.2Visual C 6.0简介11

1.5.3Visual C 6.0环境下运行C程序的方法11

实训1熟悉Visual C 6.0环境18

1.6本章小结19

习题119第2章数据类型与运算21

2.1C语言基本数据类型21

2.1.1数据类型的概念21

2.1.2数据类型的分类21

2.1.3基本数据类型22

2.2数据的表现形式23

2.2.1关键字24

2.2.2标识符24

2.2.3常量24

2.2.4变量27

2.3运算符与表达式32

2.3.1算术运算符34

2.3.2赋值运算符37

2.3.3关系运算符38

2.3.4逻辑运算符39

2.3.5条件运算符42

2.3.6逗号运算符42

2.3.7其他运算符43

2.4数据类型自动转换45

2.4.1算术运算中的数据类型转换45

2.4.2赋值中的数据类型转换45

实训2运算符与表达式的综合应用47

2.5本章小结50

习题250第3章数据输入与输出52

3.1单个字符输入与输出52

3.1.1单个字符输出函数——putchar函数52

3.1.2单个字符输入函数——getchar函数53

实训3putchar函数与getchar函数的应用54

3.2格式化输入与输出函数56

3.2.1用printf函数输出数据56

3.2.2用scanf函数输入数据62

实训4scanf函数与printf函数的综合应用68

3.3本章小结71

习题371第4章程序结构设计与应用75

4.1算法简介75

4.1.1算法的特性75

4.1.2算法的描述工具76

4.1.3程序的基本流程结构78

4.2顺序结构程序设计80

4.2.1顺序结构程序设计概念80

4.2.2顺序结构程序设计举例80

实训5顺序结构程序设计实训83

4.3选择结构程序设计85

4.3.1if语句85

4.3.2switch语句95

4.3.3选择结构程序设计举例98

实训6选择结构程序设计实训104

4.4循环结构程序设计111

4.4.1while语句和for语句112

4.4.2dowhile语句120

4.4.3循环的嵌套121

4.4.4循环跳转语句123

4.4.5循环结构程序设计举例127

实训7循环结构程序设计实训131

4.5本章小结135

习题4136第5章数组138

5.1一维数组138

5.1.1一维数组的定义139

5.1.2一维数组元素的引用140

5.1.3一维数组元素的初始化142

5.1.4一维数组应用举例143

实训8一维数组应用实训145

5.2二维数组148

5.2.1二维数组的定义149

5.2.2二维数组元素的引用150

5.2.3二维数组元素的初始化151

5.2.4二维数组应用举例154

实训9二维数组应用实训158

5.3字符数组与字符串162

5.3.1字符数组的定义162

5.3.2字符数组与字符串163

5.3.3字符数组的初始化164

5.3.4字符数组的引用166

5.3.5常用的字符串处理函数169

5.3.6字符数组应用举例173

实训10字符数组应用实训175

5.4本章小结179

习题5179第6章函数181

6.1模块化程序设计方法181

6.2函数的定义与调用182

6.2.1函数概述183

6.2.2函数的定义184

6.2.3函数的调用185

实训11函数的定义与调用实训191

6.3函数的嵌套调用与递归调用193

6.3.1嵌套调用193

6.3.2递归调用195

实训12嵌套调用与递归调用应用实训197

6.4数组与函数参数200

6.4.1数组元素作为函数实参200

6.4.2数组名作为函数参数201

实训13数组作为函数参数应用实训204

6.5变量的作用域206

6.6变量的存储类型211

实训14变量的存储类别及其应用实训215

6.7本章小结218

习题6219第7章指针221

7.1指针与指针变量221

7.1.1地址与指针221

7.1.2指针变量的定义223

7.1.3指针变量的初始化223

7.1.4指针变量的引用与运算225

实训15指针变量的引用及其运算实训230

7.2指针与数组231

7.2.1指针与一维数组231

7.2.2指向二维数组的指针变量234

7.2.3指向字符串的指针变量236

实训16指向一维数组的指针变量及其应用实训240

7.3指针与函数243

7.3.1使用指向函数的指针变量调用函数243

7.3.2指针变量作为函数参数244

7.3.3指针型函数简介249

实训17指针与函数及其应用实训251

7.4本章小结255

习题7256第8章结构体258

8.1结构体类型的数据258

8.1.1结构体类型258

8.1.2结构体类型变量260

8.1.3结构体类型变量的引用与初始化262

8.2结构体数组266

8.2.1结构体数组的定义267

8.2.2结构体数组的初始化267

实训18结构体数组应用实训269

8.3指向结构体类型数据的指针272

8.3.1指向结构体变量的指针272

8.3.2指向结构体数组的指针275

实训19指向结构体的指针变量及其应用实训277

8.4本章小结280

习题8281第9章文件282

9.1文件概述282

9.2文件的打开与关闭283

9.2.1打开文件函数(fopen函数)283

9.2.2关闭文件函数(fclose函数)284

9.3文件读/写函数285

9.3.1单个字符读/写函数285

9.3.2字符串读/写函数285

9.3.3数据块读/写函数286

9.3.4格式化读/写函数287

实训20文件操作及其应用实训288

9.4本章小结291

习题9292第10章结构化程序设计与实训293

10.1结构化程序设计293

10.2“万年历”程序的设计与实训295

10.2.1需求分析295

10.2.2程序设计296

10.2.3编码296

10.2.4测试300

10.2.5维护302

10.3本章小结303

习题10303附录AC语言关键字(32个)304附录BC语言常用字符ASCII代码对照表306附录CC语言运算符的优先级与结合性307

 ;

参考文献309

媒体评论

评论

前沿

前言C语言是目前广泛使用的一种高级程序设计语言,也是国内外高校讲述程序设计方法的首选语言。“C语言程序设计”已成为计算机类课程体系中的第一门重要的基础课程。该课程实践性较强,需要进行大量的上机操作与实训。在实践中发现问题、分析问题、解决问题,才能更好地掌握C语言,并最终学会利用C语言解决实际问题。目前市面上出版的C语言程序设计类教材比较多,所介绍的理论知识及其应用案例也很全面。很多教材提倡项目(案例)教学思路,把一个或多个真实的软件项目(案例)及其运作流程从头至尾融入C语言课程教学中,通过项目驱动逐一介绍C语言的基本知识内容,以培养学生的工程实践能力,提高学生的动手技能。这种教学思路具有新颖性,但前提是要对所教授学生的实际认知状况进行一个合理的评估。对于一些地方性的应用型本科高校或高职院校层次的学生而言,学习C语言之前大都缺乏一定深度的计算机与软件方面的专业基础知识,加之数学知识较薄弱,又没有实际项目开发经验,因此会觉得课程内容空洞乏味,理解起来有一定难度。编者长期在应用型本科高校一线从事C语言课程的教学及指导实践工作,所在高校的学生在大一阶段学习C语言课程之前,绝大多数都是“程序设计零基础”学习,更不用说具备软件项目实践经历。以各种实际软件项目(案例)为驱动,去讲解C语言的各种语法知识,反而使大多数学生感到课程知识枯燥无味,因为课后还要专门查阅一系列后续计算机类专业课程的资料辅助学习,从而加重了学习负担。在多年的教学实践中,编者能亲身感受到“零基础”学生在学习C语言过程中产生的困惑。很多学生学习时会出现“课堂上老师一讲就懂,上机调试程序总是一调就错,自己又找不出原因”的窘况,反而降低了学习积极性。例如,上机调试程序时,很多学生分不清C语言中=与==、1/3与1/30的区别,会把C语言表达式if(x>;2&;&;x<;3)错写成if(2

<;3),把p=pn;错写成p=pn;等情况,导致程序运行异常。归根结底,还是课堂上对c语言的基本语法知识没有掌握扎实,课后又未能及时复习,也没有通过上机实训环节对所学知识进行巩固造成的。所以,编者认为,针对应用型本科学生,c语言课程的教学应定位于“理论知识适度,强调上机实训以强化基本概念,增强学生的职业素养”的教学思想,而对于项目驱动为主导的教学方式,则适合作为对日常教学活动的拓展。同样,仅通过校内几十个学时的学习,试图使“程序设计零基础”的大一学生具备良好的软件项目工程实践能力是不现实的,也是不科学的。因为良好的工程实践能力是需要学生今后通过专门的(校内、外)实习实训,以及在未来的工作岗位中逐渐培养与建立起来的。基于此,针对应用型本科大一学生的认知特点,结合实际教学环境,编者通过对c语言的了解与感悟以及多年的教学实践,在对自己的备课讲义进行认真而系统的梳理后编写了本书。本书定位于“程序设计零基础”的读者,着眼于理论适度,突出实用。书中对c语言的主要知识内容进行了通俗易懂的讲解,每一个c程序实例则采用了较为简单的方法来实现,注重对c语言语法知识的掌握,而淡化程序算法设计思想,以便学生更容易理解程序的组织结构与功能。针对一些难理解、易混淆的知识点,书中为初学者指出了一些学习上的注意事项,而这些大都来自于近几届学生在课堂学习、课后作业、上机操作等方面所出现的共性问题,希望读者学习时要引起足够重视。全书内容在编排上循序渐进,在一些重要章节的后面都安排了相应的实训任务,实训程序大都由相应章节中的例题所改写,并做适当拓展,目的是要求学生通过上机实训加强对本节所学内容知识的强化与巩固,从而做到举一反三,融会贯通。实训任务既可以安排在上机课内完成,也可以让学生课后自行上机完成。编者建议,学生一定要亲自调试书中的每一个c程序(包括例题程序与实训程序),认真观察与分析程序运行结果,而不能仅局限于“字面上看懂了程序”。最后,本书第10章通过一个简易的“万年历”程序案例,介绍如何使用c语言代码完成程序设计及项目实践过程。任课老师可以根据学时安排,把该案例作为选学内容或c语言课程设计的参考内容。本书以2014年安徽省职业与成人教育学会教育科研规划项目、2015年安徽省省级质量工程项目、2015年安徽三联学院校级质量工程项目为依托,系项目研究成果之一。成书过程中,编者得到了安徽三联学院校领导的大力支持。此外,合肥工业大学张佑生教授、张正武教授与杜习英教授,安徽三联学院计算机工程学院操晓峰主任也为该书内容的编写提出了宝贵的建议,在此表示衷心的感谢。本着学习与借鉴的目的,本书在编写过程中参考了大量同类c语言书籍及文献,在此谨向原作者表示诚挚的谢意。由于编者水平有限,加之时间仓促,书中的疏漏和不当之处在所难免,还望各位同行批评指正。

编者2016年8月
<;3),把p=pn;错写成p=pn;等情况,导致程序运行异常。归根结底,还是课堂上对c语言的基本语法知识没有掌握扎实,课后又未能及时复习,也没有通过上机实训环节对所学知识进行巩固造成的。所以,编者认为,针对应用型本科学生,c语言课程的教学应定位于“理论知识适度,强调上机实训以强化基本概念,增强学生的职业素养”的教学思想,而对于项目驱动为主导的教学方式,则适合作为对日常教学活动的拓展。同样,仅通过校内几十个学时的学习,试图使“程序设计零基础”的大一学生具备良好的软件项目工程实践能力是不现实的,也是不科学的。因为良好的工程实践能力是需要学生今后通过专门的(校内、外)实习实训,以及在未来的工作岗位中逐渐培养与建立起来的。基于此,针对应用型本科大一学生的认知特点,结合实际教学环境,编者通过对c语言的了解与感悟以及多年的教学实践,在对自己的备课讲义进行认真而系统的梳理后编写了本书。本书定位于“程序设计零基础”的读者,着眼于理论适度,突出实用。书中对c语言的主要知识内容进行了通俗易懂的讲解,每一个c程序实例则采用了较为简单的方法来实现,注重对c语言语法知识的掌握,而淡化程序算法设计思想,以便学生更容易理解程序的组织结构与功能。针对一些难理解、易混淆的知识点,书中为初学者指出了一些学习上的注意事项,而这些大都来自于近几届学生在课堂学习、课后作业、上机操作等方面所出现的共性问题,希望读者学习时要引起足够重视。全书内容在编排上循序渐进,在一些重要章节的后面都安排了相应的实训任务,实训程序大都由相应章节中的例题所改写,并做适当拓展,目的是要求学生通过上机实训加强对本节所学内容知识的强化与巩固,从而做到举一反三,融会贯通。实训任务既可以安排在上机课内完成,也可以让学生课后自行上机完成。编者建议,学生一定要亲自调试书中的每一个c程序(包括例题程序与实训程序),认真观察与分析程序运行结果,而不能仅局限于“字面上看懂了程序”。最后,本书第10章通过一个简易的“万年历”程序案例,介绍如何使用c语言代码完成程序设计及项目实践过程。任课老师可以根据学时安排,把该案例作为选学内容或c语言课程设计的参考内容。本书以2014年安徽省职业与成人教育学会教育科研规划项目、2015年安徽省省级质量工程项目、2015年安徽三联学院校级质量工程项目为依托,系项目研究成果之一。成书过程中,编者得到了安徽三联学院校领导的大力支持。此外,合肥工业大学张佑生教授、张正武教授与杜习英教授,安徽三联学院计算机工程学院操晓峰主任也为该书内容的编写提出了宝贵的建议,在此表示衷心的感谢。本着学习与借鉴的目的,本书在编写过程中参考了大量同类c语言书籍及文献,在此谨向原作者表示诚挚的谢意。由于编者水平有限,加之时间仓促,书中的疏漏和不当之处在所难免,还望各位同行批评指正。

免费在线读

第5章数组本章学习目标 数组的作用。一维数组与二维数组的概念、定义,数组元素的引用、初始化、输入与输出的方法,与数组有关的程序设计算法(如冒泡排序算法) 一维数组与二维数组元素下标的表示方法 使用字符数组存储字符串、输入与输出字符串的方法以及常用的字符串处理函数在程序设计中,经常需要对若干个具有相同数据类型的数据进行分析与处理。如果使用基本数据类型(整型、实型、字符型)变量来处理这样众多的数据,使用起来会很不方便。例如,某个班级有60个学生,分别用int类型变量score1,score2,…,score60来存放每一个学生的成绩。依次输入每个学生的成绩,如果采用C语言顺序结构程序设计的方法,则需要书写60个scanf函数来完成。即: scanf("%d",&;score1);scanf("%d",&;score2); …scanf("%d",&;score60);如果在同一个scanf函数中完成对60个成绩数据的输入,仅格式控制符“%d”就需要书写60次。即: scanf("%d,%d,...... ,%d",&;score1,&;score2,......,&;score60);共60个  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;共60个可见工作量较大。为了解决诸如此类的复杂问题,C语言提供了构造数据类型,即把若干个基本数据类型按照一定规则构造,主要有数组类型、结构体类型、共同体类型等。本章介绍C语言中最常用的一种构造数据类型——数组类型。数组是由相同数据类型的元素组成的数据集合,也是若干个同类型变量的有序集合,这些元素存放在计算机内存中一个连续的存储区域内。数组用统一的数组名和不同的下标来唯一标识数组中的每一个元素。同样是依次输入60个学生的成绩,如果使用数组来解决,即程序段书写形式如下: …for(i=0;i<;60;i )scanf("%d",&;score[i]); //依次完成对60个成绩数据的输入;…显而易见,采用数组处理多个相同类型的数据时,会大大简化书写程序代码的工作量,使程序简明而高效。5.1一 维 数 组一维数组用一维线性顺序关系把若干个具有相同数据类型的数据组织起来,这些数据在计算机内存中占有连续的存储空间。一维数组较简单,只需要用数组名与一个下标就能够唯一确定数组中的元素。5.1.1一维数组的定义与C语言基本类型的数据一样,数组也必须先定义,后使用。即事先“告诉”计算机由哪些数据组成数组,这些数据属于什么样的数据类型,数组中允许最多具有这些数据元素的个数。1. 定义形式一维数组的定义形式如下: 类型说明符 数组名[常量];例如: int b[5];float a_1[10];char abc[4];说明: ;① 数组名的命名规则要遵循C语言标识符的命名规则,且数组名不能与同一程序中其他的变量名相同。例如,在某C程序段中: main(){int b;int b[5];//非法,数组名b与已有变量重名;…}对数组b的定义是错误的,因为数组名“b”与普通变量b的名字重合了。② 方括号[]表明定义的是数组变量,不能用其他样式的括号,如{ }、()、<; >;等。定义数组时,方括号中的正整数表明了该数组中所能容纳(包含)元素的个数,也称之为该数组的长度。数组中所含元素的个数不能用小数、0、负数等来表示。例如,对数组的定义: float a_1[10];则表明数组a_1中最多可以容纳10个元素。如果写成float a_1[9.5];float a_1[0];float a_1[-10];float a_1[];等形式,均是错误的。③ 数组的类型其实就是数组中所含元素的数据类型。对于同一个数组,其所含元素的数据类型都是相同的。④ 定义数组时,数组中所含元素的个数不能用变量表示。例如: int n=4;char abc[n];//n是变量,非法! 但是,允许使用整型常量表达式或符号常量来表示数组中所含元素的个数。(本书建议初学者不要采用这种方式。)例如: int b[3 2];//"3 2"是整型常量表达式,合法! ⑤ C语言允许对具有同一数据类型的多个数组以及多个变量同时定义。例如: int x,y,z,a[5],b[8];2. 数组内容及其存储结构在计算机内存里,数组中的元素是按照由低地址至高地址的顺序依次存放的,存放次序不能颠倒。每一个数组元素所占内存空间大小由该数组的数据类型所占内存空间大小决定。例如: int a[5];定义了一个a数组,类型为int类型。它含有5个元素,依次表示为a[0]、a[1]、a[2]、a[3]、a[4]。数组a在计算机内存里的存储结构如图5.1所示。其中,每一个元素所占内存空间大小为4个字节。图5.1一维数组a在计算机内存里的存储结构
需要注意的是,一旦定义了某一个数组,其数组名中存放的是一个地址常量,它代表了该数组的首地址(有关数组的首地址及其应用,第7章将介绍),也就是数组中第一个元素的地址。比如,在a数组中,元素1(a[0])的地址就是a(a数组的数组名)。而其余元素的地址则为数组首地址加上该元素位置偏移量(该元素所在位置减去第一个元素位置)与数组类型所占内存字节数的乘积。即: ;元素2(a[1])的地址: a 14(字节)=a 4 ;元素3(a[2])的地址: a 24(字节)=a 8元素4(a[3])的地址: a 34(字节)=a 12元素5(a[4])的地址: a 44(字节)=a 165.1.2一维数组元素的引用定义完一个数组之后,就可以引用数组中的任意一个元素。引用一维数组元素的表示形式如下: 数组名[下标表达式];有几点说明如下: ;① 不能对数组进行整体引用,也不能整体引用数组中的全部元素,只能逐个引用数组中的每一个元素。数组中的一个元素,其实也就是一个简单变量,可以对它进行赋值操作以及做各种数学运算等,具有与同一数据类型的其他简单变量同样的属性。② “下标表达式”可以是整型常量、整型变量或者是一个返回整型量的表达式。但是,“下标表达式”的值必须是非负整数。③ 对于已定义的数组,在引用数组元素时,其下标表达式的取值范围是0至“数组中所能包含元素的个数-1”。也就是说,对于该数组中的第一个元素,引用时的下标值为0,而不是1;而对于该数组中的最后一个元素,引用时的下标值为n-1,而不是n(假设n为数组中所能包含元素的个数,即数组长度)。④ 不能把数组当做一个整体参与数学运算,但是可以对数组中的任意一个元素进行相应的数学运算。例5.1假设定义数组a: int a[5];下列对数组a中元素的引用方式,哪些是正确的?① a[0]; ② a[5]; ③ a[-1]; ④ a[1] a[3]; ⑤ a[2]5; ⑥ 1 a;分析: ①正确,a[0]表示引用数组a中的第1个元素。②③错误,对于a[5]与a[-1],引用时的下标值不合法。④⑤正确,可以对数组中的元素进行相应的数学运算。a[1] a[3];表示计算a数组中第2个元素与第4个元素之和;a[2]6;表示a数组中第3个元素乘以5。⑥错误,不能把数组a当做一个整体参与数学运算。例5.2依次输入5个整数,要求将这5个整数顺序输出与逆序输出。分析: 定义一个int类型的数组a,数组长度为5。可以通过for语句依次输入5个整数,并完成顺序与逆序输出。C程序代码如下: #include <; stdio.h >;main(){ ;int i,a[5];printf("依次输入5个整数: \n");for (i=0;i<;5;i ){scanf("%d",&;a[i]);}for (i=4;i>;=0;i- -){printf("%d\t",a[i]);}printf("\n");}假设依次输入: 54671↙程序运行结果如下: 5.1.3一维数组元素的初始化数组元素的初始化,也就是在定义数组时为数组中的元素赋初值。一维数组元素初始化的形式如下: 类型说明符 数组名[常量]={初始值表};数组元素的初始值写在一对大括号{ }里面,每个初始值之间要用逗号,分开。在C语言中,对一维数组元素的初始化分为全部元素初始化与部分元素初始化两种情形。1. 全部元素初始化定义一维数组时,对数组中所有的元素都赋初值。例如: int a[5]={ 3,4,5,6,7};在数组a中,其所含5个元素的初始值分别为3、4、5、6、7。即a[0]=3、a[1]=4、a[2]=5、a[3]=6、a[4]=7。说明: ;① 对一维数组进行全部元素初始化时,数组中所含元素的个数(数组长度)要与元素初始值的个数相等。比如,下面的两种写法均是错误的: int a[4]={ 3,4,5,6,7};错误原因: 数组a的长度(4)小于元素初始值的个数(5)。int a[6]={ 3,4,5,6,7};错误原因: 数组a的长度(6)大于元素初始值的个数(5)。尽管C编译系统不会报错,但是,这已不是对数组a中的全部元素进行初始化了。② 对一维数组进行全部元素初始化时,一维数组的长度值在定义时可以省略。例如: int a[ ]={ 3,4,5,6,7};等价于: int a[5]={ 3,4,5,6,7};2. 部分元素初始化定义一维数组时,只对该数组中的部分元素赋初值。对于未被赋初值的元素,系统为其自动赋以“0”值(整型与实型)或‘\0’(字符型)。例如: int a[5]={ 2,4,5};在数组a中,只对其中的前3个元素赋了初值,分别为2、4、5。即a[0]=2;a[1]=4;a[2]=5。而后2个元素的初值则默认为0,即a[3]=0;a[4]=0。说明: ;① 对一维数组中的部分元素初始化时,C编译系统将按照对数组元素的前后顺序进行赋值操作。例如: int b[5]={ 1,4};即“1”与“4”分别为数组b中前2个元素的初值。(数组b中后3个元素的初值均为“0”)② 对一维数组中的部分元素初始化时,数组的长度值定义时不能省略。注: 对于只定义而未初始化的数组,如果数组的存储类别是静态存储类别或外部存储类别,系统为数组中的所有元素自动赋上数值“0”(整型与实型数组)或‘\0’(字符型数组)。如果是自动存储类别与内部存储类别的数组,则数组中所有元素的初始值是不确定的。(有关C语言数据的存储类别,本书将在函数一章中详细介绍。)5.1.4一维数组应用举例例5.3从键盘上任意输入6个整数,要求输出其中的最大值。分析: 定义一个数组长度为6的整型数组a,用来存放输入的6个整数。比较前,先假设数组a中的第一个元素a[0]为最大值,然后与数组a中的第二个元素a[1]作比较。如果a[0]大于a[1],则最大值仍为第一个元素a[0];反之,最大值则变成了第二个元素a[1]。用二者的最大值再与第三个元素a[2]作比较,用同样的方法求得最大值。以此类推,直至比较出数组a中6个元素的最大值。这种比较方法也被称做“打擂台”的方法,适合求解数组元素的最值问题。C程序代码如下: #include <; stdio.h >;main(){ ;int i,a[6],max;printf("依次输入6个整数: \n");max=a[0];for (i=1;i<;6;i ){scanf("%d",&;a[i]);if(a[i]>;=max)  ;max=a[i];}printf("max=%d \n",max);}假设依次输入: 380327↙程序运行结果如下: 例5.4任意输入8个整数,要求按照由小到大的顺序排序并输出。分析: 在数学中,完成对n个数的排序问题可以有很多种方法。如冒泡排序、快速排序、希尔排序等。这里主要介绍通过“冒泡排序”的方法完成排序过程。冒泡排序的算法思想如下: 对于任意n个数,从左至右,通过相邻两个数之间的比较和交换,始终保持数值较小的数在前,数值较大的数在后。每一轮比较结束后,即最大的数被交换到该轮所有数字的最后(最右端)。如此类推,除去第一轮比较结束后所得到的最大数(已位于所有数字的最右端),从最左边第一个数开始,用同样的方法对剩下的n-1个数进行排序与排序,完毕后,则所有数中第二大的数又被交换到右端倒数第二的位置(位于最大数的左边)。这样,经过了n-1轮排序之后,便完成了对n个数由小至大的排序过程。以6个数(2、7、5、6、8、1)为例,进行冒泡排序: ;第一轮排序: 275681第一次2和7比较,不交换: 275681第二次7和5比较,交换: 257681第三次7和6比较,交换:  ; 256781第四次7和8比较,不交换:  ; 256781第五次8和1比较,交换:  ;  ; 256718在第一轮排序中,6个数比较了5次,得到排序序列: 256718可见,6个数中的最大数“8”排到了最后。第二轮排序: 256718(其中“8”不参与比较)第一次2和5比较,不交换: 256718第二次5和6比较,不交换: 256718第三次6和7比较,不交换: 256718第四次7和1比较,交换: 256178在第二趟排序中,最大数“8”不参与比较,其余的5个数比较了4次,得到排序序列: 256178可见,6个数中的第二大数“7”排到了右端倒数第二的位置(“8”的左边)。以此类推……第三轮排序,比较3次,排出: 251678第四轮排序,比较2次,排出: 215678第五轮排序,比较1次,排出: 125678最后还剩下1个数“1”,其实不需再比较,写在最左端,而得到最终的排序结果: 125678下面是采用冒泡排序的算法思想,实现对任意8个数由小到大排序的实现程序。C程序代码如下: #include <; stdio.h >main(){ int i,j,temp,a[8];for(i=0;i<8;i ) scanf("%d",&a[i]);for(i=0;i<7;i )//外层循环控制比较轮数;{for(j=0;j<8-(i 1);j ) //内层循环控制在每轮中,数字比较的次数;{if(a[j]>=a[j 1])    { temp=a[j];a[j]=a[j 1];a[j 1]=temp;}}for(i=0;i<8;i )  //排序结果的输出;printf("%d\t",a[i]);}假设依次输入:761231502↙程序运行结果如下: 实训8一维数组应用实训任务1任意输入6个整数,求出前三个数的最大值与后三个数的平均值(结果保留两位小数)。C程序代码如下: #include < stdio.h >main(){ int i,a[6],max,s=0;float ave;printf("依次输入6个整数: \n");for(i=0;i<6;i ) {scanf("%d",&a[i]);}max=a[0];for(i=1;i<3;i ) {if(max<= a[i])  max=a[i];}printf("max=%d\n,max");for(i=3;i<6;i ) {s=s a[i];}ave=s/3.0;printf("ave=%.2f\n",ave);}请读者调试程序,观察与分析运行结果。假设依次输入:479184↙程序运行结果如下: 任务2任意输入10个整数,统计出正数、负数与零的个数,并计算出所有的正数之和与负数之和。C程序代码如下: #include < stdio.h >main() { int a[10],zhengshu=0,fushu=0,zero=0,sumz=0,sumf=0,i;//变量zhengshu、fushu、zero分别表示正数、负数、零的个数,其初始值为0; 变量sumz、sumf分别表示所有的正数之和以及负数之和,其初始值为0;printf("依次输入10个整数: \n");for(i=0;i<10;i ) {scanf("%d",&a[i]);}for(i=0;i<10;i ){if(a[i]>0)  { sumz=sumz a[i];zhengshu ;}else if(a[i]<0)  { sumf=sumf a[i];fushu ;}else zero ;}printf("sumz=%d,sumf=%d\n",sumz,sumf);printf("zhengshu=%d,zero=%d,fushu=%d\n",zhengshu,zero,fushu);}请读者调试程序,观察与分析运行结果。假设依次输入:3417-8-10-495↙程序运行结果如下: 任务3已知int型数组a[7],数组中包含的前6个元素已按照由小至大的顺序排好次序,分别为1、3、5、8、9、13。从键盘上任意输入一个整数并插入到数组a中,要求插入新数之后数组元素a中的7个元素仍然有序排序。分析: 该问题具有一定的难度。在初始状态下,原数组内部的6个元素已排好顺序,我们采取这样一个思路: 从数组中的第一个数开始,依次与新(插入的)数进行比较,在原数组中找到合适的插入(新数)位置。然后将该位置原有的数以及其后面的数依次“后移”一个位置,即为新插入的数“空出”一个位置。当然,也会存在一种特殊情况,即新插入的数值比原数组中的最后一个数(a[5])都要大(例如,插入数值14),这时只要把该数放至数组中的最后一个位置上,而其余数组元素则不必移动。所以,按照上述思路,给出了实现任务3的C程序,仅供参考。C程序代码如下: #include < stdio.h >main() { int a[7]={1,3,5,8,9,13};int t1,t2,b,end,i,j; printf("原数组元素队列: \n"); for(i=0;i<6;i ) printf("%4d",a[i]); printf("\n"); printf("插入一个新的数: \n"); 

C语言程序设计与实训 pdf下载声明

本pdf资料下载仅供个人学习和研究使用,不能用于商业用途,请在下载后24小时内删除。如果喜欢,请购买正版

pdf下载地址

版权归出版社和作者所有,下载链接已删除。如果喜欢,请购买正版!

链接地址:C语言程序设计与实训