JUST-HLL战队 电控视觉培训 第一周
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.oGCC默認將.i文件看成是預處理后的C語言源代碼,因此上述命令將自動跳過預處理步驟而開始執行編譯過程,也可以使用-x參數讓GCC從指定的步驟開始編譯。最后一步是將生成的目標文件鏈接成可執行文件:
# gcc hello.o -o hellogcc常用編譯選項
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(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战队 电控视觉培训 第一周的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: aText--问题四:Need a va
- 下一篇: coreldrawX6实例视频教程