JUST-HLL战队 电控&视觉培训 第一周

1.C语言与C++简介

C语言百度百科 C

C++百度百科 C++

计算机语言分类(按执行方式)

编译型语言

先将源代码编译成目标语言之后通过连接程序连接到生成的目标程序进行执行
编译程序工作时,先分析,后综合,从而得到目标程序。所谓分析,是指词法分析和语法分析;所谓综合是指代码优化,存储分配和代码生成。为了完成这些分析综合任务,编译程序采用对源程序进行多次扫描的办法,每次扫描集中完成一项或几项任务,也有一项任务分散到几次扫描去完成的。

解释型语言

由解释器根据输入的数据当场执行而不生成任何的目标程序,
如在终端上打一条命令或语句,解释程序就立即将此语句解释成一条或几条指令并提交硬件立即执行且将执行结果反映到终端,从终端把命令打入后,就能立即得到计算结果。这的确是很方便的,很适合于一些小型机的计算问题。但解释程序执行速度很慢,
如果源程序中出现循环,则解释程序也重复地解释并提交执行这一组语句,这就造成很大浪费。

混合型语言

典型的语言Java,Java很特殊,Java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后在Java虚拟机上用解释方式执行字节码。

C++和Python有什么区别?

1.C++为编译型语言;python为解释型的脚本语言。

2.C++效率高,编程难;python效率低,编程简单。同样的功能,或许python可以很快的写出代码,但运行所需的时间需要成倍于C++。

2.DEVC++的基本使用

DEVC++百度百科 DEVC++

Dev-C++ 是一个 C/C++ 开发工具。它包括多页面窗口、工程编辑器,在工程编辑器中集合了编辑器、编译器、连接程序和执行程序。它也提供高亮度语法显示的,以减少编辑错误。它使用了GCC3.2.3做为它的编译器,但也支持更高版本的Mingw(Windows版的GCC) 。跟VC和BCB相比,有相当明显的优势。

Dev-C++是一个Windows下的C和C++程序的集成开发环境。它使用MingW32/GCC编译器,遵循C/C++标准。开发环境包括多页面窗口、工程编辑器以及调试器等,在工程编辑器中集合了编辑器、编译器、连接程序和执行程序,提供高亮度语法显示的,以减少编辑错误,还有完善的调试功能,能够适合初学者与编程高手的不同需求,是学习C或C++的首选开发工具!

基础使用

1.创建新的源文件

按照下面这一幅图的步骤,先重新编译文件,由于这是一个空的源文件,它会提示你先保存成一个.cpp源文件,所以自己找一个自己知道的位置,写好这个文件的命名即可,记住,文件名后面的后缀是.cpp,这样软件才能编译这个文件

编译完成后就可以运行了

第一个程序就这样完成了

技巧&快捷键

自动整理代码 Ctrl+Shift+A

黑色主题 工具 -> 编辑器选项 -> 语法 预设

代码补全 Ctrl+Space(可以更改)

其他快捷键 快捷键

3.MinGW以及GCC

MinGW百度百科 MinGW

MinGW,是Minimalist GNU**for Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时(C Runtime)库。MinGW 是一组包含文件和端口库,其功能是允许控制台模式的程序使用微软的标准C运行时(C Runtime)库(MSVCRT.DLL),该库在所有的 NT OS 上有效,在所有的 [Windows 95](https://baike.baidu.com/item/Windows 95)发行版以上的 Windows OS 有效,使用基本运行时,你可以使用 GCC 写控制台模式的符合美国标准化组织(ANSI)程序,可以使用微软提供的 C 运行时(C Runtime)扩展,与基本运行时相结合,就可以有充分的权利既使用 CRT(C Runtime)又使用 WindowsAPI功能。

1、从目标上说

  • MinGW 是让Windows 用户可以用上GNU 工具,比如GCC。
  • Cygwin 提供完整的类Unix 环境,Windows 用户不仅可以使用GNU 工具,理论上Linux 上的程序只要用****Cygwin 重新编译,就可以在Windows 上运行。

2、从能力上说

  • 如果程序只用到C/C++ 标准库,可以用MinGW 或Cygwin 编译。
  • 如果程序还用到了POSIX API,则只能用Cygwin 编译。

3、从依赖上说

  • 程序经MinGW 编译后可以直接在Windows 上面运行。

  • 程序经Cygwin 编译后运行,需要依赖安装时附带的cygwin1.dll。

    Cygwin百度百科 Cygwin

    POISX API 百度百科 POSIX

什么是GNU?

GNU百度百科 GNU

GNU是一个自由的操作系统,其内容软件完全以GPL方式发布。这个操作系统是GNU计划的主要目标,名称来自GNU’s Not Unix!的递归缩写,因为GNU的设计类似Unix,但它不包含具著作权的Unix代码。GNU的创始人,理查德·马修·斯托曼,将GNU视为“达成社会目的技术方法”。

作为操作系统,GNU的发展仍未完成,其中最大的问题是具有完备功能的内核尚未被开发成功。GNU的内核,称为Hurd,是自由软件基金会发展的重点,但是其发展尚未成熟。在实际使用上,多半使用Linux内核、FreeBSD等替代方案,作为系统核心,其中主要的操作系统是Linux的发行版。Linux操作系统包涵了Linux内核与其他自由软件项目中的GNU组件和软件,可以被称为GNU/Linux。

GPL定义见上超链接

什么是GCC?

GCC百度百科 GCC

GCC是以GPL许可证所发行的自由软件,也是GNU计划的关键部分。GCC的初衷是为GNU操作系统专门编写一款编译器,现已被大多数类Unix操作系统(如Linux、BSD、MacOS X等)采纳为标准的编译器,甚至在微软的Windows上也可以使用GCC。GCC支持多种计算机体系结构芯片,如x86、ARM、MIPS等,并已被移植到其他多种硬件平台 [1] 。

GCC原名为GNU C语言编译器(GNU C Compiler),只能处理C语言。但其很快扩展,变得可处理C++,后来又扩展为能够支持更多编程语言,如Fortran、Pascal、Objective -C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection) 。

gcc、g++两者有何关系?

gcc(GUN C Compiler)是GCC中的c编译器,而g++(GUN C++ Compiler)是GCC中的c++编译器。
gcc和g++两者都可以编译c和cpp文件,但存在差异。gcc在编译cpp时语法按照c来编译但默认不能链接到c++的库(gcc默认链接c库,g++默认链接c++库)。g++编译.c和.cpp文件都统一按cpp的语法规则来编译。所以一般编译c用gcc,编译c++用g++。

gcc使用实例

首先用熟悉的编辑器输入例程

#include "stdio.h"
int main(void)
{printf ("Hello world, Linux programming!\n");return 0;
}

然后在终端执行下面的命令编译和运行这段程序:

#gcc hello.c -o hello
# ./hello

输出结果应该是

Hello world, Linux programming!

如图

为了更好地理解GCC的工作过程,可以把上述编译过程分成几个步骤单独进行,并观察每步的运行结果。第一步是进行预编译,使用-E参数可以让GCC在预处理结束后停止编译过程:

# gcc -E hello.c -o hello.i

此时若查看hello.cpp文件中的内容,会发现stdio.h的内容确实都插到文件里去了,而其它应当被预处理的宏定义也都做了相应的处理。下一步是将hello.i编译为目标代码,这可以通过使用-c参数来完成:

# gcc -c hello.i -o hello.o

GCC默认将.i文件看成是预处理后的C语言源代码,因此上述命令将自动跳过预处理步骤而开始执行编译过程,也可以使用-x参数让GCC从指定的步骤开始编译。最后一步是将生成的目标文件链接成可执行文件:

# gcc hello.o -o hello

gcc常用编译选项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0mb57Dkb-1636273810115)(/Users/wangzihang/Library/Application Support/typora-user-images/Screen Shot 2021-10-30 at 1.09.44 AM.png)]

4.主函数编写介绍,运行第一个Hello World (C++)

main函数规范

主函数(main函数)是一个特殊的函数,不管把它放在代码的什么位置,每个程序的运行都是从主函数开始的。所以,我们说每个程序有且只能有一个主函数,否则电脑将不知道从何运行。既然电脑知道必须有且只能有一个主函数,那么就没必要去写主函数的函数原型了。

C++98 中定义了如下两种 main 函数的定义方式:

int main( )
int main( int argc, char *argv[] )

int main( ) 等同于 C99 中的 int main( void ) ;int main( int argc, char *argv[] ) 的用法也和 C99 中定义的一样。同样,main 函数的返回值类型也必须是int。如果main函数的末尾没写return语句,C++98 规定编译器要自动在生成的目标文件中加入 return 0; 。同样,vc6 也不支持这个特性,但是 g++3.2(Linux 下的 C++ 编译器)支持。

tip:函数原型

返回值的作用

main 函数的返回值 用于说明程序的退出状态如果返回 0,则代表程序正常退出,否则代表程序异常退出

第一个程序

在编辑器中输入以下代码

#include <iostream>
int main() {std::cout << "Hello World!" << std::endl;return 0;
}

IDE(集成开发环境 Dev-C++)运行结果

命令行(Cmd,Terminal)运行结果

5.关于#include预处理命令

#include是怎么样工作的?

#include设施是C++预处理器的一部分。

预处理器处理程序的源代码,是在编译器之前运行。

#include只接受一个参数:头文件名

预处理器用指定的头文件的内容替代每个include。

我们自己的头文件存储在文件中。系统的头文件可能用特定于编译器的更高效的格式保存。头文件经常#include其他头文件。头文件定义的实体经常使用在其他文件的设施。所以设计的头文件时,应使其可以多次包含在同一源文件中。我们必须保证包含同一头文件不会引起该头文件定义的类和对象被多次定义。使得头文件安全的通过做法,使用预处理器定义头文件保护符。

#include <> 与 #include " " 区别

如果头文件名在<>中,就会被认为是标准头文件。编译器会在预定义的位置查找该头文件,如果是""就认为它是非系统头文件,非系统文件查找通常开始于源文件所在路径。

什么是预处理器?

预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理。

所有的预处理器指令都是以井号(#)开头,只有空格字符可以出现在预处理指令之前。预处理指令不是 C++ 语句,所以它们不会以分号(;)结尾。

我们已经看到,之前所有的实例中都有 #include 指令。这个宏用于把头文件包含到源文件中。

6.关于C++标准命名空间(std)

什么是命名空间?

假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等。

同样的情况也出现在 C++ 应用程序中。例如,您可能会写一个名为 xyz() 的函数,在另一个可用的库中也存在一个相同的函数 xyz()。这样,编译器就无法判断您所使用的是哪一个 xyz() 函数。

因此,引入了命名空间这个概念,专门用于解决上面的问题,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。

什么是标准命名空间?

using namespace std;

标准C++库的所有的标识符都是在一个名为std的命名空间中定义的,或者说标准头文件(如iostream)中函数、类、对象和类模板是在命名空间 std中定义的。std是standard(标准)的缩写,表示这是存放标准库的有关内容的命名空间。

7.C/C++变量的声明与定义

声明(declaration):意味着告诉编译器关于变量名称、变量类型、变量大小、函数名称、结构名称、大小等等信息,并且在声明阶段不会给变量分配任何的内存。

定义(definition):定义就是在变量声明后,给它分配上内存。可以看成“定义 = 声明 + 内存分配”。

#include <iostream>
using namespace std;
int addtion(int a,int b);//声明
struct product{unsigned int weight;double price;};//声明int main(){
cout << "addtion is " << addtion(6,8) << endl;
product apple,orange;//定义
return 0;
}
//定义
int addtion(int a,int b){
return a+b;
}

上面的案例中,

int addtion(int a,int b);
struct product{unsigned int weight;double price;};

上面是声明,它们只是告诉编译器有这个东西,并不会分配内存。

product apple,orange;
int addtion(int a,int b){return a+b;}

上面是定义,给他们会被分配内存。

另一种用extern修饰的变量…

extern是一个关键字,它告诉编译器存在着一个变量或者一个函数,如果在当前编译语句的前面中没有找到相应的变量或者函数,也会在当前文件的后面或者其它文件中定义,来看下面的例子。

// extern.cpp : Defines the entry point for the console application.#include "stdafx.h"
#include <iostream>
using namespace std;extern int i;
extern void func();
int _tmain(int argc, _TCHAR* argv[])//typedef wchar_t     _TCHAR;#define _tmain      wmain
{i = 0;func();return 0;
}int i;void func()
{i++;cout << "i = " << i << endl;
}

8.cout与printf的基本用法以及区别

基本用法

cout: std::cout<<“任意类型函数”<<std::endl;

例子: (C++)

#include<iostream>
using namespace std;
int main()
{  cout<<"Hello,World!"<<endl;  return 0;
}

printf: printf(“其他+%转换+其他”,参数);

printf是标准库函数,用于格式化输出数据。函数名中的f代表format。

例子: ©

#include "stdio.h"
int main()
{char arr[5] = {90,91,92,93,94};printf("%s \n", arr);printf("%d \n", arr[0]);return 0;
}

区别

我们在C中学习的标准输入输出的方法是借助输出函数printf和scanf,但是在C++中我们经常用cout和cin来进行输出和输入。cout看上去并不像一个函数,在C++的大趋势下,用printf和scanf显得格格不入,而且似乎也并不能理解为什么要用位计算符来进行输入输出字符的分隔?而且我们在使用cin和cout的时候发现发现它们在进行标准输入输出的时候<<和>>的用法有点类似于运算符,因为本身<<和>>是双目运算符,在进行标准输出和输出的时候我们如果当做运算符理解的话,的确就像一个双目运算符一样,左右量变的参数一个都不能少,实际上,在后续对于运算符重载的学习中,发现实际上cout和cin以及cerr其实都是运算符重载的结果。

tip:cerr与cout的主要区分就是,cout输出的信息可以重定向,而cerr只能输出到标准输出(显示器)上。

C++的iostream库和C中的stdio库中分别的cout/cin和printf/scanf相比有哪些优势呢?首先是类型处理更加安全,更加智能,我们无须应对int、float中的%d、%f,而且扩展性极强,对于新定义的类,printf想要输入输出一个自定义的类的成员是天方夜谭的,而iostream中使用的位运算符都是可重载的,并且可以将清空缓冲区的 自由交给了用户(在printf中的输出是没有缓冲区的),而且流风格的写法也更加自然和简洁。

9.注释

注释是什么?

程序的注释是解释性语句,您可以在 C++ 代码中包含注释,这将提高源代码的可读性。所有的编程语言都允许某种形式的注释。

注释怎么写?

C++ 支持单行注释和多行注释。注释中的所有字符会被 C++ 编译器忽略。

C++ 注释一般有两种:

// 一般用于单行注释。

例子:

#include <iostream>
using namespace std;int main()
{cout << "Hello World!"; // 输出 Hello World!return 0;
}

/ … */ 一般用于多行注释。*

例子:

#include <iostream>
using namespace std;int main() {/* 这是注释 *//* C++ 注释也可以* 跨行*/ cout << "Hello World!";return 0;
}

注释规范-Doxygen

Doxygen是一个程序的文档产生工具,可以将程序中的注释转换成说明文档或者说是API参考手册,从而减少程序员整理文档的时间。当然这里程序中的注释需要遵循一定的规则书写,才能让Doxygen识别和转化。

目前Doxygen可处理的程序语言包含C/C++、Java、Objective-C、IDL等,可产生出来的文档格式有HTML、XML、LaTeX、RTF等,此外还可衍生出不少其它格式,如HTML可以打包成CHM格式,而LaTeX可以通过一些工具产生出PS或是PDF文档等。

参考文档 https://www.cnblogs.com/silencehuan/p/11169084.html

10.使用cin和scanf读取用户键盘输入演示

cin演示代码

#include <iostream>
using namespace std;
int main()
{int intNumber;float floatNumber;cout << "Input a number. ";cin >> intNumber;cout << "Input a second number.\n";cin >> floatNumber;cout << "You entered: " << intNumber << " and " << floatNumber << endl;return 0;
}

scanf演示代码

#include <stdio.h>
int main()
{int a = 0, b = 0, c = 0, d = 0;scanf("%d", &a);  //输入整数并赋值给变量ascanf("%d", &b);  //输入整数并赋值给变量bprintf("a+b=%d\n", a+b);  //计算a+b的值并输出scanf("%d %d", &c, &d);  //输入两个整数并分别赋值给c、dprintf("c*d=%d\n", c*d);  //计算c*d的值并输出return 0;
}

推荐参考网站 菜鸟教程 runoob.com

JUST-HLL战队 电控视觉培训 第一周相关推荐

  1. 马哥linux 培训第一周作业

    本周作业内容: 1.描述计算机的组成及其功能. 运算器.控制器.存储器.输入设备.输出设备 CPU bus:总线 memory: 编址存储设备 read ahead IO: 与外部部件交互 磁盘: 网 ...

  2. 工作室培训第一周总结

    经过了工作室一周的练习.我在本周收获很多: 1.在一周的工作室时间里,截至到12月3日我共完成老师的作业以及工作室的任务要求,共刷36道题,并且将会在一周计划去回顾所做的题目.去进一步思考其基本思路, ...

  3. 中软培训第一周复习总结 --简单的HTML 与CSS

    一些需要记住的点: day1 HTML格式及简单标签: html 文件一般格式: 1 <html> 2 <head lang="en"> 3 <met ...

  4. 点亮LED-STM32电控学习笔记03

    Robocon战队电控学习笔记03 day3:2022/9/21 [基本界面/结构] 在学习开始之前肯定要先了解我们开发的是个什么东西,每个部位是啥功能,这里我放几张官方(fuza)的图片 图一:C板 ...

  5. 薪火培训电控第一讲——单片机与GPIO

    薪火培训电控第一讲--单片机与GPIO 关于单片机 初识单片机 时钟 GPIO简介 GPIO函数 八种输入输出模式 Cube和keil使用简介 使用cube建立项目 keil使用 作业讲解与点评 讲解 ...

  6. 智能车大赛AI视觉组培训第一弹——基础篇

    智能车大赛AI视觉组培训第一弹: ▌基础篇 1.培训简介 ■时间安排: 2021年03月18日 14:00 ■内容简介: 由恩智浦赞助的AI视觉组,今年由于把人工智能应用在智能车竞赛中,使得难度提升了 ...

  7. 福州安卓培训_关于利用东风商学院开展电控发动机维修技师远程培训的通知

    关于利用东风商学院开展DDI50&75&11国六电控发动机基础理论远程培训的通知 各商务代表处.网络成员: 依据维修技师能力提升工作安排,为满足电控技师能力提升学习需求,现总部通过东风 ...

  8. 【Robomaster】电控入门手册

    文章目录 0 电控介绍 0.1 电控学习内容 0.2 物资准备 1 C语言学习 1.1 学习资料 1.2 学习规划 1.2.1 基础 1.2.2 函数 1.2.3 数组 1.2.4 进阶 2 Ardu ...

  9. 场效应管原理_场效应管——不就是一个电控开关?

    管在mpn中,它的长相和我们常面讲的三极管非常像,所以有不少修朋友好长时间还分不清楚,统一的把这些长相相同的三极管.场效应管.双二极管.还有各种稳压IC统统称作"三个脚的管管",呵 ...

最新文章

  1. 十五分钟介绍 Redis数据结构
  2. python有序字典_python 学习 有序字典
  3. Duplicate property mapping of xxx found in xx 嵌套异常,重复的属性在映射中发现。
  4. 方舟服务器建家位置,《方舟 生存进化》最佳建家位置,新手玩家根本无法想象!...
  5. 产品运营必须知道的几个概念,什么是用户群体?
  6. oracle数据库如何授权收费吗,如何减少Oracle数据库的License和支持费用
  7. Ruby 和 Python 分析器是如何工作的?
  8. NP、OSPF路由聚合
  9. python3 xpath_【学习笔记】Python3-爬虫-xpath
  10. SQL 数据表基本操作
  11. 乱码问题的原理及解决方法
  12. Axure8注册码,亲测可用
  13. 【贪玩巴斯】传感器与检测技术 (二)「半导体传感器基础」2021-09-30
  14. 零点起飞学java web_零点起飞学Java Web开发 (徐林林) 高清PDF_IT教程网
  15. [707]Apache NiFi安装及简单使用
  16. PDF如何编辑?教你几个常用的PDF编辑方法
  17. Gym - 100519 B Bring Your Own Bombs 离散化+二分+思维
  18. 谷歌colab运行自己的项目的一些细节
  19. 可能是最全的人工智能入门书单(附PDF链接)
  20. 中国城市人口排名(最新版)

热门文章

  1. 关于ERP、PLM、APS、MES的数据集成
  2. iPhone手机史上最全的扫盲帖【解锁,激活,Cydia,基带,裸机】
  3. 编程实战(4)——python识别图像中的坐标点并保存坐标数据
  4. iPad,iPad Pro和iPad Mini有什么区别?
  5. CISCO路由器配置完全手册
  6. 微信公众号支付: JSAPI缺少参数:total_fee ;没有生成预支付ID package=prepay_id=null;
  7. 解决 hsdb jinfo jmap sa-jdi等mac不可用问题
  8. Java+SSM酒店管理系统旅店管理(含源码+论文+答辩PPT等)
  9. 利用ffmpeg将mp4视频转换成多张jpg图片
  10. 【CISSP备考】AIO综合错题集