c语言程序设计项目,《C语言程序设计项目式教程》巨同升;李业刚;李增祥_孔网...

本书在教学内容的编排上,采用“项目驱动知识”的方式,即根据每一章项目案例的需求,合理地安排每一个知识主题的切入点,从而将C语言中枯燥难懂的语法知识分解到全书各章中,并力求通过程序实例归纳出来。

本书在讲解程序实例时,采用“逐步构造法”写出程序,即通过编程思路、算法设计、程序原型等环节一步一步地构造出完整的程序,从而加深读者对编程方法的理解和掌握。

在本书的各主要章节中,分别提供了若干个项目式案例,供读者学习参考之用。仔细研究这些案例,将有助于提高读者的程序设计能力。

本书内容依据当前*版的C语言参考手册编写,兼顾C89与C99标准。内容包括引论、基本数据与运算、顺序结构程序设计、选择结构程序设计、循环结构程序设计、数组、指针、字符与字符串处理、函数、函数的进一步讨论、编译预处理命令、结构体与共用体、位运算、文件等。

本书依据Visual C

2010 Express和DEV C

5.11集成开发环境进行讲述,符合当前软件的发展趋势,便于读者上机调试程序。

本书教学内容的编排顺畅合理,编程方法的讲解新颖独特,特别适合于初学者自学。本书可作为高等院校各专业学生学习C语言程序设计的教材和参考书。

目录

第1章引论

1.1程序与程序设计语言

1.2C语言的发展及特点

1.2.1C语言的发展

1.2.2C语言的标准化

1.2.3C语言的特点

1.3C语言程序的构成

1.4C语言程序的运行

1.4.1Dev C

1.4.2Visual C

2010

1.4.3程序的调试

第2章基本的数据与运算

2.1常量、变量与标识符

2.1.1关键字与标识符

2.1.2变量

2.1.3常量

2.2整型、实型与字符型数据

2.2.1整型数据

2.2.2实型数据

2.2.3字符型数据

2.2.4sizeof运算符

2.3算术运算符和算术表达式

2.3.1基本算术运算符

2.3.2算术表达式

2.3.3运算符的优先级

2.3.4运算符的结合性

第3章顺序结构程序设计

3.1C语言的语句类型

3.2变量的赋值和初始化

3.2.1赋值表达式

3.2.2变量的初始化

3.3数据的格式输入与格式输出

3.3.1格式输出函数(printf函数)

3.3.2格式输入函数(scanf函数)

3.4拓展:  赋值运算中的类型转换

3.4.1实型数据赋给整型(或字符型)变量

3.4.2整型(或字符型)数据赋给实型变量

3.4.3整型数据赋给类型不同的等长整型变量

3.5项目式案例

第4章选择结构程序设计

4.1关系表达式与逻辑表达式

4.1.1关系运算符

4.1.2关系表达式

4.1.3逻辑运算符

4.1.4逻辑表达式

4.2算法与流程图

4.2.1简单算法举例

4.2.2算法的表示

4.3if语句

4.3.1if语句的两种基本形式

4.3.2if语句的嵌套

4.3.3嵌套if结构与平行if结构的区别

4.4混合运算与强制类型转换

4.4.1混合运算

4.4.2强制类型转换

4.5switch语句

4.6拓展: 逻辑运算量、条件表达式与goto语句

4.6.1逻辑运算量的扩展

4.6.2条件表达式

4.6.3语句标号与goto语句

4.7项目式案例

第5章循环结构程序设计

5.1while循环

5.1.1while语句

5.1.2while循环程序举例

5.2自增自减运算符与复合赋值运算符

5.2.1自增自减运算符

5.2.2复合赋值运算符

5.3for循环

5.3.1for语句

5.3.2for循环程序举例

5.4do?while循环

5.4.1do?while语句

5.4.2do?while循环程序举例

5.5循环的嵌套

5.6循环辅助语句和while(1)循环

5.6.1break语句

5.6.2continue语句

5.6.3while(1)形式的循环

5.7拓展: 逗号表达式与for语句变式

5.7.1逗号运算符与逗号表达式

5.7.2for语句变式

5.8项目式案例

第6章数组

6.1一维数组

6.1.1一维数组的定义

6.1.2一维数组的使用

6.1.3一维数组的初始化

6.1.4一维数组应用举例

6.2二维数组

6.2.1二维数组的定义

6.2.2二维数组的初始化

6.2.3二维数组的引用

6.2.4二维数组应用举例

6.3项目式案例

第7章指针

7.1变量的指针

7.1.1指针的概念

7.1.2指针变量

7.1.3指针变量的定义

7.2变量的间接引用

7.2.1取地址运算符“&”

7.2.2间接引用运算符“*”

7.2.3指针变量的初始化

7.2.4几点说明

7.3指针与一维数组

7.3.1指向一维数组元素的指针

7.3.2通过指针引用一维数组元素

7.4拓展: 指针与二维数组

7.4.1指向二维数组元素和行的指针

7.4.2行指针变量

7.5拓展: 指针数组与二重指针

7.5.1指针数组

7.5.2二重指针

第8章字符与字符串处理

8.1字符型数据的使用

8.1.1字符型数据的输入与输出

8.1.2字符型数据与整型数据的混合运算

8.1.3字符处理函数

8.2字符串的存储与引用

8.2.1字符串在内存中的存储形式

8.2.2用字符数组存储和引用字符串

8.2.3用字符指针变量引用字符串

8.3字符串的输入和输出

8.3.1用printf函数输出字符串

8.3.2用puts函数输出字符串

8.3.3用scanf函数输入字符串

8.3.4用gets函数输入字符串

8.4字符串处理函数

8.4.1字符串长度函数strlen

8.4.2字符串复制函数strcpy

8.4.3字符串连接函数strcat

8.4.4字符串比较函数strcmp

8.4.5字符查找函数strchr

8.4.6字符串查找函数strstr

8.4.7字符串大写转小写函数strlwr

8.4.8字符串小写转大写函数strupr

8.5字符串处理应用举例

8.6项目式案例

第9章函数

9.1库函数

9.2用户函数的定义与调用

9.2.1无参函数的定义

9.2.2无参函数的调用

9.2.3有参函数的定义和调用

9.3函数的参数和返回值

9.3.1函数的参数

9.3.2函数的返回值

9.4函数的调用方式与函数原型

9.4.1函数的调用方式

9.4.2函数原型的声明

9.5变量的作用域和生存期

9.5.1变量的作用域

9.5.2变量的生存期

9.6拓展: 多文件程序

9.6.1多文件程序的运行

9.6.2函数的存储类别

9.6.3全局变量的存储类别

9.7项目式案例

第10章函数的进一步讨论

10.1指针作函数参数

10.2数组名作函数参数

10.2.1一维数组名作函数参数

10.2.2拓展: 二维数组名作函数参数

10.3指针型函数和指向函数的指针

10.3.1指针型函数

10.3.2指向函数的指针

10.4函数的递归调用

10.5项目式案例

第11章编译预处理命令

11.1宏定义命令

11.1.1不带参数的宏定义

11.1.2带参数的宏定义

11.2文件包含命令

11.3拓展: 条件编译

第12章结构体与共用体

12.1结构体类型与结构体变量

12.1.1结构体变量的定义

12.1.2结构体类型标识符的定义

12.2结构体变量的引用和初始化

12.2.1结构体变量的初始化

12.2.2结构体变量的引用

12.3结构体数组

12.3.1结构体数组的定义

12.3.2结构体数组的初始化

12.4结构体指针

12.4.1指向结构体变量的指针

12.4.2指向结构体数组元素的指针

12.5结构体变量的跨函数引用

12.5.1结构体变量作函数参数

12.5.2结构体指针作函数参数

12.6共用体

12.6.1共用体变量的定义

12.6.2共用体类型标识符的定义

12.6.3共用体变量的初始化

12.6.4共用体变量的引用

12.7枚举类型

12.7.1枚举类型标识符的定义

12.7.2枚举类型变量的定义与使用

12.8用typedef定义类型别名

12.9内存的动态分配

12.10拓展: 链表

12.10.1链表的概念

12.10.2链表的创建与遍历

12.10.3链表的插入与删除

第13章位运算

13.1位运算符

13.1.1按位取反运算符~

13.1.2按位与运算符&

13.1.3按位或运算符|

13.1.4按位异或运算符∧

13.1.5按位左移运算符

13.2项目式案例

第14章文件

14.1文件概述

14.1.1文本文件和二进制文件

14.1.2FILE类型

14.2文件的打开与关闭

14.2.1文件打开函数fopen

14.2.2文件关闭函数fclose

14.3文件的读写

14.3.1fscanf函数和fprintf函数

14.3.2fgetc函数和fputc函数

14.3.3fgets函数和fputs函数

14.3.4fread函数和fwtrite函数

14.4拓展: 文件的读写定位与随机读写

14.4.1rewind函数

14.4.2fseek函数

14.4.3ftell函数

14.4.4文件的随机读写

14.5项目式案例

附录A ASCII码字符表

附录BC语言的关键字

附录C运算符的优先级和结合性

附录D常用的C语言库函数

参考文献

内容简介:

本书在教学内容的编排上,采用“项目驱动知识”的方式,即根据每一章项目案例的需求,合理地安排每一个知识主题的切入点,从而将C语言中枯燥难懂的语法知识分解到全书各章中,并力求通过程序实例归纳出来。

本书在讲解程序实例时,采用“逐步构造法”写出程序,即通过编程思路、算法设计、程序原型等环节一步一步地构造出完整的程序,从而加深读者对编程方法的理解和掌握。

在本书的各主要章节中,分别提供了若干个项目式案例,供读者学习参考之用。仔细研究这些案例,将有助于提高读者的程序设计能力。

本书内容依据当前*版的C语言参考手册编写,兼顾C89与C99标准。内容包括引论、基本数据与运算、顺序结构程序设计、选择结构程序设计、循环结构程序设计、数组、指针、字符与字符串处理、函数、函数的进一步讨论、编译预处理命令、结构体与共用体、位运算、文件等。

本书依据Visual C

2010 Express和DEV C

5.11集成开发环境进行讲述,符合当前软件的发展趋势,便于读者上机调试程序。

本书教学内容的编排顺畅合理,编程方法的讲解新颖独特,特别适合于初学者自学。本书可作为高等院校各专业学生学习C语言程序设计的教材和参考书。

目录:

目录

第1章引论

1.1程序与程序设计语言

1.2C语言的发展及特点

1.2.1C语言的发展

1.2.2C语言的标准化

1.2.3C语言的特点

1.3C语言程序的构成

1.4C语言程序的运行

1.4.1Dev C

1.4.2Visual C

2010

1.4.3程序的调试

第2章基本的数据与运算

2.1常量、变量与标识符

2.1.1关键字与标识符

2.1.2变量

2.1.3常量

2.2整型、实型与字符型数据

2.2.1整型数据

2.2.2实型数据

2.2.3字符型数据

2.2.4sizeof运算符

2.3算术运算符和算术表达式

2.3.1基本算术运算符

2.3.2算术表达式

2.3.3运算符的优先级

2.3.4运算符的结合性

第3章顺序结构程序设计

3.1C语言的语句类型

3.2变量的赋值和初始化

3.2.1赋值表达式

3.2.2变量的初始化

3.3数据的格式输入与格式输出

3.3.1格式输出函数(printf函数)

3.3.2格式输入函数(scanf函数)

3.4拓展:  赋值运算中的类型转换

3.4.1实型数据赋给整型(或字符型)变量

3.4.2整型(或字符型)数据赋给实型变量

3.4.3整型数据赋给类型不同的等长整型变量

3.5项目式案例

第4章选择结构程序设计

4.1关系表达式与逻辑表达式

4.1.1关系运算符

4.1.2关系表达式

4.1.3逻辑运算符

4.1.4逻辑表达式

4.2算法与流程图

4.2.1简单算法举例

4.2.2算法的表示

4.3if语句

4.3.1if语句的两种基本形式

4.3.2if语句的嵌套

4.3.3嵌套if结构与平行if结构的区别

4.4混合运算与强制类型转换

4.4.1混合运算

4.4.2强制类型转换

4.5switch语句

4.6拓展: 逻辑运算量、条件表达式与goto语句

4.6.1逻辑运算量的扩展

4.6.2条件表达式

4.6.3语句标号与goto语句

4.7项目式案例

第5章循环结构程序设计

5.1while循环

5.1.1while语句

5.1.2while循环程序举例

5.2自增自减运算符与复合赋值运算符

5.2.1自增自减运算符

5.2.2复合赋值运算符

5.3for循环

5.3.1for语句

5.3.2for循环程序举例

5.4do?while循环

5.4.1do?while语句

5.4.2do?while循环程序举例

5.5循环的嵌套

5.6循环辅助语句和while(1)循环

5.6.1break语句

5.6.2continue语句

5.6.3while(1)形式的循环

5.7拓展: 逗号表达式与for语句变式

5.7.1逗号运算符与逗号表达式

5.7.2for语句变式

5.8项目式案例

第6章数组

6.1一维数组

6.1.1一维数组的定义

6.1.2一维数组的使用

6.1.3一维数组的初始化

6.1.4一维数组应用举例

6.2二维数组

6.2.1二维数组的定义

6.2.2二维数组的初始化

6.2.3二维数组的引用

6.2.4二维数组应用举例

6.3项目式案例

第7章指针

7.1变量的指针

7.1.1指针的概念

7.1.2指针变量

7.1.3指针变量的定义

7.2变量的间接引用

7.2.1取地址运算符“&”

7.2.2间接引用运算符“*”

7.2.3指针变量的初始化

7.2.4几点说明

7.3指针与一维数组

7.3.1指向一维数组元素的指针

7.3.2通过指针引用一维数组元素

7.4拓展: 指针与二维数组

7.4.1指向二维数组元素和行的指针

7.4.2行指针变量

7.5拓展: 指针数组与二重指针

7.5.1指针数组

7.5.2二重指针

第8章字符与字符串处理

8.1字符型数据的使用

8.1.1字符型数据的输入与输出

8.1.2字符型数据与整型数据的混合运算

8.1.3字符处理函数

8.2字符串的存储与引用

8.2.1字符串在内存中的存储形式

8.2.2用字符数组存储和引用字符串

8.2.3用字符指针变量引用字符串

8.3字符串的输入和输出

8.3.1用printf函数输出字符串

8.3.2用puts函数输出字符串

8.3.3用scanf函数输入字符串

8.3.4用gets函数输入字符串

8.4字符串处理函数

8.4.1字符串长度函数strlen

8.4.2字符串复制函数strcpy

8.4.3字符串连接函数strcat

8.4.4字符串比较函数strcmp

8.4.5字符查找函数strchr

8.4.6字符串查找函数strstr

8.4.7字符串大写转小写函数strlwr

8.4.8字符串小写转大写函数strupr

8.5字符串处理应用举例

8.6项目式案例

第9章函数

9.1库函数

9.2用户函数的定义与调用

9.2.1无参函数的定义

9.2.2无参函数的调用

9.2.3有参函数的定义和调用

9.3函数的参数和返回值

9.3.1函数的参数

9.3.2函数的返回值

9.4函数的调用方式与函数原型

9.4.1函数的调用方式

9.4.2函数原型的声明

9.5变量的作用域和生存期

9.5.1变量的作用域

9.5.2变量的生存期

9.6拓展: 多文件程序

9.6.1多文件程序的运行

9.6.2函数的存储类别

9.6.3全局变量的存储类别

9.7项目式案例

第10章函数的进一步讨论

10.1指针作函数参数

10.2数组名作函数参数

10.2.1一维数组名作函数参数

10.2.2拓展: 二维数组名作函数参数

10.3指针型函数和指向函数的指针

10.3.1指针型函数

10.3.2指向函数的指针

10.4函数的递归调用

10.5项目式案例

第11章编译预处理命令

11.1宏定义命令

11.1.1不带参数的宏定义

11.1.2带参数的宏定义

11.2文件包含命令

11.3拓展: 条件编译

第12章结构体与共用体

12.1结构体类型与结构体变量

12.1.1结构体变量的定义

12.1.2结构体类型标识符的定义

12.2结构体变量的引用和初始化

12.2.1结构体变量的初始化

12.2.2结构体变量的引用

12.3结构体数组

12.3.1结构体数组的定义

12.3.2结构体数组的初始化

12.4结构体指针

12.4.1指向结构体变量的指针

12.4.2指向结构体数组元素的指针

12.5结构体变量的跨函数引用

12.5.1结构体变量作函数参数

12.5.2结构体指针作函数参数

12.6共用体

12.6.1共用体变量的定义

12.6.2共用体类型标识符的定义

12.6.3共用体变量的初始化

12.6.4共用体变量的引用

12.7枚举类型

12.7.1枚举类型标识符的定义

12.7.2枚举类型变量的定义与使用

12.8用typedef定义类型别名

12.9内存的动态分配

12.10拓展: 链表

12.10.1链表的概念

12.10.2链表的创建与遍历

12.10.3链表的插入与删除

第13章位运算

13.1位运算符

13.1.1按位取反运算符~

13.1.2按位与运算符&

13.1.3按位或运算符|

13.1.4按位异或运算符∧

13.1.5按位左移运算符

13.2项目式案例

第14章文件

14.1文件概述

14.1.1文本文件和二进制文件

14.1.2FILE类型

14.2文件的打开与关闭

14.2.1文件打开函数fopen

14.2.2文件关闭函数fclose

14.3文件的读写

14.3.1fscanf函数和fprintf函数

14.3.2fgetc函数和fputc函数

14.3.3fgets函数和fputs函数

14.3.4fread函数和fwtrite函数

14.4拓展: 文件的读写定位与随机读写

14.4.1rewind函数

14.4.2fseek函数

14.4.3ftell函数

14.4.4文件的随机读写

14.5项目式案例

附录A ASCII码字符表

附录BC语言的关键字

附录C运算符的优先级和结合性

附录D常用的C语言库函数

参考文献

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 目标检测的定义 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。 目标检测任务可分为两个关键的子任务,目标定位和目标分类。首先检测图像中目标的位置(目标定位),然后给出每个目标的具体类别(目标分类)。输出结果是一个边界框(称为Bounding-box,一般形为(x1,y1,x2,y2),表示框的左上角坐标和右下角坐标),一个置信度分数(Confidence Score),表示边界框中是否包含检测对象的概率和各个类别的概率(首先得到类别概率,经过Softmax可得到类别标签)。 1.1 Two stage方法 目前主流的基于深度学习的目标检测算法主要分为两类:Two stage和One stage。Two stage方法将目标检测过程分为两个阶段。第一个阶段是 Region Proposal 生成阶段,主要用于生成潜在的目标候选框(Bounding-box proposals)。这个阶段通常使用卷积神经网络(CNN)从输入图像中提取特征,然后通过一些技巧(如选择性搜索)来生成候选框。第二个阶段是分类和位置精修阶段,将第一个阶段生成的候选框输入到另一个 CNN 中进行分类,并根据分类结果对候选框的位置进行微调。Two stage 方法的优点是准确度较高,缺点是速度相对较慢。 常见Tow stage目标检测算法有:R-CNN系列、SPPNet等。 1.2 One stage方法 One stage方法直接利用模型提取特征值,并利用这些特征值进行目标的分类和定位,不需要生成Region Proposal。这种方法的优点是速度快,因为省略了Region Proposal生成的过程。One stage方法的缺点是准确度相对较低,因为它没有对潜在的目标进行预先筛选。 常见的One stage目标检测算法有:YOLO系列、SSD系列和RetinaNet等。 2 常见名词解释 2.1 NMS(Non-Maximum Suppression) 目标检测模型一般会给出目标的多个预测边界框,对成百上千的预测边界框都进行调整肯定是不可行的,需要对这些结果先进行一个大体的挑选。NMS称为非极大值抑制,作用是从众多预测边界框中挑选出最具代表性的结果,这样可以加快算法效率,其主要流程如下: 设定一个置信度分数阈值,将置信度分数小于阈值的直接过滤掉 将剩下框的置信度分数从大到小排序,选中值最大的框 遍历其余的框,如果和当前框的重叠面积(IOU)大于设定的阈值(一般为0.7),就将框删除(超过设定阈值,认为两个框的里面的物体属于同一个类别) 从未处理的框中继续选一个置信度分数最大的,重复上述过程,直至所有框处理完毕 2.2 IoU(Intersection over Union) 定义了两个边界框的重叠度,当预测边界框和真实边界框差异很小时,或重叠度很大时,表示模型产生的预测边界框很准确。边界框A、B的IOU计算公为: 2.3 mAP(mean Average Precision) mAP即均值平均精度,是评估目标检测模型效果的最重要指标,这个值介于0到1之间,且越大越好。mAP是AP(Average Precision)的平均值,那么首先需要了解AP的概念。想要了解AP的概念,还要首先了解目标检测中Precision和Recall的概念。 首先我们设置置信度阈值(Confidence Threshold)和IoU阈值(一般设置为0.5,也会衡量0.75以及0.9的mAP值): 当一个预测边界框被认为是True Positive(TP)时,需要同时满足下面三个条件: Confidence Score > Confidence Threshold 预测类别匹配真实值(Ground truth)的类别 预测边界框的IoU大于设定的IoU阈值 不满足条件2或条件3,则认为是False Positive(FP)。当对应同一个真值有多个预测结果时,只有最高置信度分数的预测结果被认为是True Positive,其余被认为是False Positive。 Precision和Recall的概念如下图所示: Precision表示TP与预测边界框数量的比值 Recall表示TP与真实边界框数量的比值 改变不同的置信度阈值,可以获得多组Precision和Recall,Recall放X轴,Precision放Y轴,可以画出一个Precision-Recall曲线,简称P-R
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值