C++入門教程:大白話講解,新手基礎篇⭐⭐⭐(附源碼及詳解、視頻課程資料推薦)

持續更新……

C++教程

首發於2020/3/14

更新開始於2021/2/6,改名以及補充,原名:C++新手基礎教程,必備!必看!最全手寫教程

前言

​ C++是一門古老的語言,C++是C語言的繼承,它既可以進行C語言的過程化程序設計,又可以進行以抽象數據類型為特點的基於對象的程序設計,還可以進行以繼承和多態為特點的面向對象的程序設計。C++擅長面向對象程序設計的同時,還可以進行基於過程的程序設計,因而C++就適應的問題規模而論,大小由之。看得懂看,看不懂跳過😃

我會盡量講的簡單一些😺,在這裡盡微薄之力幫助更多人在閑暇時間看一看學學C++的知識。

​ C++不僅擁有計算機高效運行的實用性特徵,同時還致力於提高大規模程序的編程質量與程序設計語言的問題描述能力。

  • 中文名:C++語言

  • 外文名:The C++ Programming Language/c plus plus

  • 類 別:計算機程序設計語言

  • 創始人:Bjarne Stroustrup

  • 創始公司:貝爾實驗室

  • 基本內容:類、封裝、重載、繼承、模版

​ 世界上第一種計算機高級語言是誕生於1954年的FORTRAN語言。之後出現了多種計算機高級語言。1970年,AT&T的Bell實驗室的D.Ritchie和K.Thompson共同發明了C語言。研製C語言的初衷是用它編寫UNIX系統程序,因此,它實際上是UNIX的「副產品」。它充分結合了彙編語言和高級語言的優點,高效而靈活,又容易移植。

視頻教程

BTW:如果想入門C++,可以點下面這個網站看視頻教程,我當初就是跟他們的老師入門的。

//www.csai.online/course/explore/B02

在這裡插入圖片描述

文字教程

推薦兩個比較好的教程網站

w3cschool://www.w3cschool.cn/cpp/

runoob菜鳥教程://www.runoob.com/cplusplus/cpp-intro.html

集成開發環境(IDE)

​ 編寫程序需要工具,代碼需要有不同的顏色,叫代碼高亮,大體有兩種工具——文本編輯器和IDE,文本編輯器就是只提供代碼高亮,工具較少,所以下載大小比較小。通常有Notepad++、EMACS、Vim、sublime Text2和Xcode等。但是IDE的功能就全面了,對於開發人員來說,IDE對於開發的幫助是巨大的。

Visual Studio (Visual C++)

C++ Builder

kDevelop

Anjuta

Code::Blocks——開放源碼的全功能的跨平台C/C++集成開發環境 。

Visual Mingw

Ideone

Eclipse CDT

Compilr

Code Lite

Netbeans C++

上面就是一個個IDE,我最常用的是Visual Studio。

編譯器

​ 編譯器是為了讓計算機讀懂代碼的工具,必須下載。

Dev C++

Ultimate++

Digital Mars

C-Free

MinGW

Tiny C Compiler

工作原理

​ C++語言的程序因為要體現高性能,所以都是編譯型的。但其開發環境,為了方便測試,將調試環境做成解釋型的。即開發過程中,以解釋型的逐條語句執行方式來進行調試,以編譯型的脫離開發環境而啟動運行的方式來生成程序最終的執行代碼。

學習指南

入門書籍

《C++程序設計教程》,錢能

《易學C++》,潘嘉傑

《大話設計模式》,程傑

《C++編程規範:101條規則、準則與最佳實踐》,劉基誠

《C和C++程序員面試秘籍》,董山海

進階書籍

《C++程序設計語言》英文第四版,Bjarne Stroustrup

《C++ Primer 第5版(英文版)》,Stanley Lippman、Josee Laoie、Barbara Moo

《C++標準庫:自學教程與參考手冊(第2版)(英文版)》,Nicolai Josuttis

《C++ Concurrency in Action|C++ 並發實戰》,Anthony Wiliams

《C和C++安全編碼(第2版)(英文版)》,Robert Seacord

《C++ Primer Plus》

算法、競賽書籍

《數據結構與算法分析,C語言描述》[美]馬克·艾倫·維斯 著

《數據結構(C語言版)》 清華大學出版社

《算法競賽 入門到進階》 清華大學出版社

教程

標準構建

#include <iostream>
using namespace std;
int main(){
    return 0;
}

上面的程序是一個標準的c++程序,什麼都不幹。

程序解釋

​ 第一句:#include <iostream>是一個預處理語句,在#include後面可以調用c++標準庫,基礎的c++程序定義一個iostream是標準輸入輸出流,第二行using namespace std;可以先不用管,只要記住就行。後面的int main()是定義一個函數,int是返回值類型,main() 是函數名,以後將自定義函數的時候會仔細講,main()主函數,不可以改名!後面的{}一對大括號括起來的地方就是你寫代碼的地方了。return 0;是代表程序結束的地方,叫返回值,返回值的默認值是0,不可以改!

第一個C++程序——「hello world」

​ 我們弄明白了標準構建就可以寫帶有功能的代碼了😜,這種代碼叫做源代碼。任何語言的第一步都是輸出「hello world」,C++也一樣,讓我們開始吧?!

寫代碼前先得有一個IDE或者文本編輯器
新手我建議使用Dev-Cpp,因為Dev-Cpp有自帶編譯器,不用下載編譯器了,😜

#include <iostream>
using namespace std;
int main() {
    cout << "hello world" << endl;
    return 0;
}

把這段代碼寫下來

編譯

​ 編譯是什麼?是把你寫出的代碼轉化成電腦💻可以讀懂的代碼。首先會轉成彙編,再轉成機器碼,計算機就明白了。
怎麼編譯?(用Dev-Cpp)

在這裡插入圖片描述

這是你的代碼對不對?

​ 然後按上圖的灰色片可以新建源代碼,黃色的是保存,保存你的代碼到你想保存的位置,往右看🙈看到一個四格格的圖標,是編譯,點擊會彈出一個框,如下圖,等它停下來就編譯完成,點擊編譯左邊的另一個灰色片片,點擊就運行了,如果想簡單點,直接點擊運行右邊的編譯運行,就一體化了。

運行後彈出一個黑色的框,輸出「hello world」,成功!💪


​ 這個代碼只有一個新的地方cout << 「hello world" << endl;,我們分析一下,cout是什麼意思?cout是輸出到控制台(終端),<<是輸出流符號,""這是代表字符串,輸出一個hello world的字符串,最後endl是回車的意思,輸出換行,最後分號;每行都要有;

C++基礎語法

輸入與輸出

儘管C和C++已經很相似了,不過還是有略微差別……

C++風格

c++的輸入與輸出相對簡單,但是有些功能會缺失,所以c++中也支持C語言的輸入與輸出

實例:

#include <iostream>
using namespace std;
int main(){
    int aNum;
    cin >> aNum;
    cout << "aNum:" << aNum << endl;
    return 0;
}

​ 程序第一行的#include <iostream>大家都還記得吧?這個iostream就是為了cin和cout,當然還有其他功能,都是相對高級,所以這裡不說🙂,第4行定義了一個整形變量aNum,下面有講解變量,第5行cin是輸入標識符,>>是輸入流符號,cout是輸出標識符,<<是輸出流符號。簡單吧

C風格

C風格的相對難些,不過應該可以看懂,C風格的輸入輸出補全了C++的一些(cout,cin)小問題。

實例(C語言):看得懂看,看不懂跳過

int aNum;
scanf("%d", &aNum);
printf("%d\n", aNum);

結果:

輸入:
5
輸出:
5

應該可以看出來,scanf是輸入,printf是輸出,「」雙引號內是確定輸出格式的語句,,後面就是輸出中切入的變量參數。看不懂可以跳過,參考:菜鳥教程<-想學的話猛戳

變量

C++中可以有變量

全局變量

​ 全局變量顧名思義,整個文件可用,通常用來聲明常量,定義位置:命名空間(using namespace std;)下面,具體方法見下面實例:

#include <iostream>
using namespace std;
int n = 10;
void out(){
    cout << n << endl; //自定義函數,下面講
    //函數中可用
}
int main(){
    cout << n << endl;//every where可用
    return 0;
}

懂了吧

局部變量

有是顧名思義

#include <iostream>
using namespace std;
void func(){
    cout << n << endl;//報錯,找不到n
}
int main(){
    int n = 10;
    cout << n << endl;
}
常量

還是顧名思義,常量就是不能改變的量,用保留字const定義,實例:

#include <iostream>
using namespace std;
const int an = 100;
int main(){
    //常量可以定義在任何地方
    cout << an << endl;//輸出100
    const long long int aln = 200;
    cout << aln << endl;//輸出200
    aln = 100;//報錯,不可篡改常量
    return 0;
}

注釋

​ 程序中適當的注釋可以美化程序,使得程序更加清晰,簡單明了,C++同樣支持注釋,下面來介紹一下,C++的注釋一共有兩種:單行注釋多行注釋,單行注釋用//雙斜杠表示,多行注釋用一對單斜杠+星號/**/實現,編譯器會自動跳過注釋,不編譯註釋,注釋是給人看的

實例:

#include <iostream>
//
using namespace std;//命名空間——單行注釋

int main(){
    /*
    programer:thomas
    date:2020****
    "hello world"
    */
    return 0;
}

C++關鍵字、保留字

C++關鍵字
asm do if return typedef
auto double inline short typeid
bool dynamic_cast int signed typename
break else long sizeof union
case enum mutable static unsigned
catch explicit namespace static_cast using
char export new struct virtual
class extern operator switch void
const false private template volatile
const_cast float protected this wchar_t
continue for public throw while
default friend register true
delete goto reinterpret_cast try

上表格是C++的所有關鍵字、保留字
關鍵字不可作為變量名、函數名等等,它們是固定的。

先不着急講,以後再說,有些我都不知道。🙌

C++數據類型

C++含有很多的數據結構

數字類型

C++的數字類型有整形浮點型兩種,先知道這兩種。

整形

​ 整形,顧名思義是存儲整數的類型,用整形聲明的變量可以存儲整數,來看一個實例:

#include <iostream>
using namespace std;
int main(){
    short aNum_short;
    int aNum_int;
    long long aNum_long;
    cin >> aNum_short;
    cin >> aNum_int;
    cin >> aNum_long;
    cout << aNum_short << " " << aNum_int << " " << aNum_long << endl;
    return 0;
}

運行結果

輸入:

5 6 7

輸出:

5 6 7

解析:

用int類型定義了一個變量aNum,輸入aNum為5,輸出aNum為5,很簡單對不?:happy:

難的以後再說。

整形還有兩個類型,一個short int和long int,和unsigned都是顧名思義,短整形和長整形。

名稱 所佔位元組數 取值範圍
short[int] 2 -32768~32767
unsigned short[int] 2 0~65535
int 4 -2147483648~2147483647
unsigned int 4 0~4294967295
long long 8 -263~263-1
unsigned long long 8 0~264-1

如果數據比較小,就用short,正常數據還是用純int,要是用比較大的數據,用long long int,能存儲的範圍大,unsigned是無符號的意思,就是無號,unsigned long long的數據值可以翻倍!你們自己可以試試264是多少,unsigned用法詳見//blog.csdn.net/cool99781/article/details/104505559

浮點型

​ 浮點形,顧名思義是存儲帶小數點(小數)的類型,用浮點型聲明的變量可以存儲整數,浮點型有幾個定義方法:float單精度浮點數,double雙精度浮點數,long double高精度浮點數。

精度 名稱 所佔位元組數 取值範圍
單精度浮點數 float 4 $-3.4E+38~3.4E+38(7位有效數字)$
雙精度浮點數 double 8 $-1.79E+308~1.79E308(15位有效數字)$
高精度浮點數 long double 12 $3.4E-4932~1.1E+4932(19位有效數字)$

實例:

#include <iostream>
using namespace std;
int main(){
    float f_float;
    double f_double;
    long double f_longD;
    cin >> f_float >> f_double >> f_longD;
    cout << f_float << " " <<  f_double << " " << f_longD << endl;
    return 0;
}

輸入:1 2.5 3.0

輸出:1 2.5 3.0

布爾類型

​ 布爾類型從某種意義上來說,也是一種整形,可以轉化為整形,不過這個整形很小,只能有0和1,就像二進制一樣,0是false,1是true,布爾類型的關鍵字是bool,實例如下

bool flag = true;//賦值初始值
cout << int(flag) << endl; //強制類型轉換變成int,輸出1
flag = false;
cout << int(flag) << endl; //輸出0
字符類型

​ 字符類型只能存儲一個字符,用單引號 『 』 括起來,c++中的字符類型只支持ASCLL編碼,不懂ASCLL編碼的朋友可以百度一下,我就不嘮叨了,要不然寫不完了。關鍵字是char

char ch = 'A';
cout << ch << endl;//輸出A、
cout << int(ch) << endl;//輸出A的ASCLL碼,65
小測試

為下面的程序挑錯😙

#include <oistream>
using namespace;
int hello(){
    int a
    cin << a;
    cout << "a = " << a << endl;
    double f;
    cin << f;
    char c = 'f'; 
    cout << c"  "  << endl;
    return 'a';
}

錯誤多了😅

運算符

C++ 運算符

運算符是一種告訴編譯器執行特定的數學或邏輯操作的符號。C++ 內置了豐富的運算符,並提供了以下類型的運算符:

  • 算術運算符
  • 關係運算符
  • 邏輯運算符
  • 位運算符
  • 賦值運算符
  • 雜項運算符

本章將逐一介紹算術運算符、關係運算符、邏輯運算符、位運算符、賦值運算符和其他運算符。

算術運算符

下表顯示了 C++ 支持的算術運算符。

假設變量 A 的值為 10,變量 B 的值為 20,則:

運算符 描述 實例
+ 把兩個操作數相加 A + B 將得到 30
從第一個操作數中減去第二個操作數 A – B 將得到 -10
* 把兩個操作數相乘 A * B 將得到 200
/ 分子除以分母 B / A 將得到 2
% 取模運算符,整除後的餘數 B % A 將得到 0
++ 自增運算符,整數值增加 1 A++ 將得到 11
自減運算符,整數值減少 1 A– 將得到 9
實例

請看下面的實例,了解 C++ 中可用的算術運算符。

複製並粘貼下面的 C++ 程序到 test.cpp 文件中,編譯並運行程序。

實例
#include <iostream> 
using namespace std;  
int main() {   
    int a = 21;   
    int b = 10;   
    int c;    
    c = a + b;   
    cout << "Line 1 - c 的值是 " << c << endl ;   
    c = a - b;   
    cout << "Line 2 - c 的值是 " << c << endl ;   
    c = a * b;   
    cout << "Line 3 - c 的值是 " << c << endl ;  
    c = a / b;   cout << "Line 4 - c 的值是 " << c << endl ;  
    c = a % b;   cout << "Line 5 - c 的值是 " << c << endl ;   
    int d = 10;   // 測試自增、自減   c = d++;   cout << "Line 6 - c 的值是 " << c << endl; 
    d = 10;    // 重新賦值   c = d--;   cout << "Line 7 - c 的值是 " << c << endl ;   
    return 0; 
}

當上面的代碼被編譯和執行時,它會產生以下結果:

Line 1 - c 的值是 31
Line 2 - c 的值是 11
Line 3 - c 的值是 210
Line 4 - c 的值是 2
Line 5 - c 的值是 1
Line 6 - c 的值是 10
Line 7 - c 的值是 10
關係運算符

下表顯示了 C++ 支持的關係運算符。

假設變量 A 的值為 10,變量 B 的值為 20,則:

運算符 描述 實例
== 檢查兩個操作數的值是否相等,如果相等則條件為真。 (A == B) 不為真。
!= 檢查兩個操作數的值是否相等,如果不相等則條件為真。 (A != B) 為真。
> 檢查左操作數的值是否大於右操作數的值,如果是則條件為真。 (A > B) 不為真。
< 檢查左操作數的值是否小於右操作數的值,如果是則條件為真。 (A < B) 為真。
>= 檢查左操作數的值是否大於或等於右操作數的值,如果是則條件為真。 (A >= B) 不為真。
<= 檢查左操作數的值是否小於或等於右操作數的值,如果是則條件為真。 (A <= B) 為真。
實例

請看下面的實例,了解 C++ 中可用的關係運算符。

複製並黏貼下面的 C++ 程序到 test.cpp 文件中,編譯並運行程序。

實例
#include <iostream> 
using namespace std;  
int main() {   
    int a = 21;   
    int b = 10;   
    int c ;    
    if( a == b )   {      
        cout << "Line 1 - a 等於 b" << endl ;   
    }   else   {      
        cout << "Line 1 - a 不等於 b" << endl ;   
    }   
    if ( a < b )   {      
        cout << "Line 2 - a 小於 b" << endl ;   
    }   else   {      
        cout << "Line 2 - a 不小於 b" << endl ;   
    }   
    if ( a > b )   {      
        cout << "Line 3 - a 大於 b" << endl ;   
    }   else   {      
        cout << "Line 3 - a 不大於 b" << endl ;   
    }   /* 改變 a 和 b 的值 */   
    a = 5;   b = 20;   
    if ( a <= b )   {      
        cout << "Line 4 - a 小於或等於 b" << endl ;   
    }   
    if ( b >= a )   {      
        cout << "Line 5 - b 大於或等於 a" << endl ;   
    }   
    return 0; 
}

當上面的代碼被編譯和執行時,它會產生以下結果:

Line 1 - a 不等於 b
Line 2 - a 不小於 b
Line 3 - a 大於 b
Line 4 - a 小於或等於 b
Line 5 - b 大於或等於 a
邏輯運算符

下表顯示了 C++ 支持的關係邏輯運算符。

假設變量 A 的值為 1,變量 B 的值為 0,則:

運算符 描述 實例
&& 稱為邏輯與運算符。如果兩個操作數都非零,則條件為真。 (A && B) 為假。
|| 稱為邏輯或運算符。如果兩個操作數中有任意一個非零,則條件為真。 (A || B) 為真。
! 稱為邏輯非運算符。用來逆轉操作數的邏輯狀態。如果條件為真則邏輯非運算符將使其為假。 !(A && B) 為真。
實例

請看下面的實例,了解 C++ 中可用的邏輯運算符。

複製並黏貼下面的 C++ 程序到 test.cpp 文件中,編譯並運行程序。

實例
#include <iostream> 
using namespace std;  
int main() 
{   
    int a = 5;   
    int b = 20;   
    int c ;    
    if ( a && b )   {      
        cout << "Line 1 - 條件為真"<< endl ;   
    }   
    if ( a || b )   {      
        cout << "Line 2 - 條件為真"<< endl ;   
    }   /* 改變 a 和 b 的值 */   
    a = 0;   b = 10;   
    if ( a && b )   {      
        cout << "Line 3 - 條件為真"<< endl ;   
    }   else   {      
        cout << "Line 4 - 條件不為真"<< endl ;   
    }   
    if ( !(a && b) )   
    {      
        cout << "Line 5 - 條件為真"<< endl ;   
    }   
    return 0; 
}

當上面的代碼被編譯和執行時,它會產生以下結果:

Line 1 - 條件為真
Line 2 - 條件為真
Line 4 - 條件不為真
Line 5 - 條件為真

數組

C++ 數組

C++ 支持數組數據結構,它可以存儲一個固定大小的相同類型元素的順序集合。數組是用來存儲一系列數據,但它往往被認為是一系列相同類型的變量。

數組的聲明並不是聲明一個個單獨的變量,比如 number0、number1、…、number99,而是聲明一個數組變量,比如 numbers,然後使用 numbers[0]、numbers[1]、…、numbers[99] 來代表一個個單獨的變量。數組中的特定元素可以通過索引訪問。

所有的數組都是由連續的內存位置組成。最低的地址對應第一個元素,最高的地址對應最後一個元素。

聲明數組

在 C++ 中要聲明一個數組,需要指定元素的類型和元素的數量,如下所示:

type arrayName [ arraySize ];

這叫做一維數組。arraySize 必須是一個大於零的整數常量,type 可以是任意有效的 C++ 數據類型。例如,要聲明一個類型為 double 的包含 10 個元素的數組 balance,聲明語句如下:

double balance[10];

現在 balance 是一個可用的數組,可以容納 10 個類型為 double 的數字。

初始化數組

在 C++ 中,您可以逐個初始化數組,也可以使用一個初始化語句,如下所示:

double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};

大括號 { } 之間的值的數目不能大於我們在數組聲明時在方括號 [ ] 中指定的元素數目。

如果您省略掉了數組的大小,數組的大小則為初始化時元素的個數。因此,如果:

double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};

您將創建一個數組,它與前一個實例中所創建的數組是完全相同的。下面是一個為數組中某個元素賦值的實例:

balance[4] = 50.0;

上述的語句把數組中第五個元素的值賦為 50.0。所有的數組都是以 0 作為它們第一個元素的索引,也被稱為基索引,數組的最後一個索引是數組的總大小減去 1。以下是上面所討論的數組的的圖形表示:

數組表示

訪問數組元素

數組元素可以通過數組名稱加索引進行訪問。元素的索引是放在方括號內,跟在數組名稱的後邊。例如:

double salary = balance[9];

上面的語句將把數組中第 10 個元素的值賦給 salary 變量。下面的實例使用了上述的三個概念,即,聲明數組、數組賦值、訪問數組:

實例
#include <iostream> 
using namespace std;  
#include <iomanip> 
using std::setw;  
int main () {   
int n[ 10 ]; // n 是一個包含 10 個整數的數組    // 初始化數組元素
for ( int i = 0; i < 10; i++ )   {      
n[ i ] = i + 100; // 設置元素 i 為 i + 100   
}   cout << "Element" << setw( 13 ) << "Value" << endl;    // 輸出數組中每個元素的值                        
for ( int j = 0; j < 10; j++ )   {      
cout << setw( 7 )<< j << setw( 13 ) << n[ j ] << endl;   
}    
return 0; 
}

上面的程序使用了 setw() 函數來格式化輸出。當上面的代碼被編譯和執行時,它會產生下列結果:

Element        Value
      0          100
      1          101
      2          102
      3          103
      4          104
      5          105
      6          106
      7          107
      8          108
      9          109

字符串

需要用到C++的STL庫,自己查查吧,參考//www.runoob.com/cplusplus/cpp-strings.html

字符串用string定義,還要預處理一個庫#include <string>

#include <iostream>
#include <string>
using namespace std;
int main(){
    string str;
    cin >> str;
    cout << str[0] << endl;
    cout << str[2] << endl;
    cout << str << endl;
    return 0;
}

StdIn:
HelloWorld
StdOut:
H
e
HelloWorld

字符串可以用[]訪問下標,仔細研究上網查🔼

控制語句

循環 2021.2.7補

for 2021.2.7補

一般用於循環次數固定的循環,而且比較常用,格式如下:

for(表達式1;表達式2;表達式3)
{
    循環體(可無)
}

表達式1:循環變量初始化,整個循環不管執行多少次這一個表達式也只執行一次且執行在第一次。

表達式2:循環的終止條件,如果返回true繼續執行,返回false退出循環

表達式3:每一次循環執行完執行此表達式,一般寫一些循環變量的自增自減。

實例:

for (int i = 1; i <= 10; i++)
{
    cout << i  << " ";
}
cout << endl;

註:這裡是為了輸出才把i的初始值設為1,如果沒有題目要求或限定,一般建議初始值設為0,數組等數據結構一般都是從0開始。

for循環的結構也比較靈活,可以調整。

比如

for (int i = 0; i < 10; i++);

是沒有循環體的結構

再比如

int i = 0;
for (; i < 10; i++)
{
    cout << i << " ";
}

這是把表達式1放出了循環

還有for(int i = 0; true; i++)屬於無限循環等等

這裡來一個例題,輸出n個同學的成績平均值,輸入一個n,第二行輸入n個成績,輸出一個平均值。

兩種解決方案,一種用數組,一種直接解決。

Solution1:

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    int n; // 最多1001個人
   	double sum = 0.0, a[1001]; // 最多1001個人
    cin >> n;
    for (int i = 0; i <  n; i++)
        cin >> a[i];
    for (int i = 0; i < n; i++)
    {
        sum += a[i];
    }
    printf("%.2f\n", sum / (double)n);
    return 0;
}
// 寫的有點匆忙,有錯誤請評論

Solution2,這個方法其實我更喜歡,跟着輸入就加了,這樣更快

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    int n;
    double sum = 0.0, t;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> t;
        sum += t;
    }
    printf("%.2f\n", sum / (double)n);
    return 0;
}
while 2021.2.8補

基礎訓環網站//www.runoob.com/cplusplus/cpp-loops.html

判斷分支 2021.2.8補

基礎判斷網站//www.runoob.com/cplusplus/cpp-decision.html

函數

函數是一組一起執行一個任務的語句。每個 C++ 程序都至少有一個函數,即主函數 main() ,所有簡單的程序都可以定義其他額外的函數。

您可以把代碼劃分到不同的函數中。如何劃分代碼到不同的函數中是由您來決定的,但在邏輯上,劃分通常是根據每個函數執行一個特定的任務來進行的。

函數聲明告訴編譯器函數的名稱、返回類型和參數。函數定義提供了函數的實際主體。

C++ 標準庫提供了大量的程序可以調用的內置函數。例如,函數 strcat() 用來連接兩個字符串,函數 memcpy() 用來複制內存到另一個位置。

函數還有很多叫法,比如方法、子例程或程序,等等。

定義函數

C++ 中的函數定義的一般形式如下:

return_type function_name( parameter list ) {   body of the function }

在 C++ 中,函數由一個函數頭和一個函數主體組成。下面列出一個函數的所有組成部分:

  • 返回類型:一個函數可以返回一個值。return_type 是函數返回的值的數據類型。有些函數執行所需的操作而不返回值,在這種情況下,return_type 是關鍵字 void
  • 函數名稱:這是函數的實際名稱。函數名和參數列表一起構成了函數簽名。
  • 參數:參數就像是佔位符。當函數被調用時,您向參數傳遞一個值,這個值被稱為實際參數。參數列表包括函數參數的類型、順序、數量。參數是可選的,也就是說,函數可能不包含參數。
  • 函數主體:函數主體包含一組定義函數執行任務的語句。

更多//www.runoob.com/cplusplus/cpp-functions.html

2021/2/7更新,繼續寫函數

先來一個實例:

#include <iostream>
using namespace std;
int f(int aNum)
{
    aNum -= 1;
    return aNum;
}
int main()
{
    int ans;
    int n;
    cin >> n;
    ans = f(n);
    cout << n << " " << ans << endl;
    return 0;
}

我們來猜一下這個程序的輸出結果,如果我輸入3,輸出的是3 2?還是2 2?

首先來分析:輸入了一個n=3,將n傳遞給f()函數,aNum是一個參數,這個名字你可以自己定,但是其中的值並不改變,所以aNum還是3,當然aNum也可以改成bNum、cNum、aMum隨便。

函數的返回值是int,也就是整數,返回aNum-1也就是3-1=2,返回的值是2。ans作為返回值的接收變量,它獲得的值也就是2。

🚩這裡要注意了,n作為傳值參數,給函數中的aNum傳送了一個數字,而這兩個變量的地址不同,所以aNum的改變對於n沒有改變,所以aNum-1是2,而n還等於3!所以上面的程序輸出為:3 2

⭐怎麼讓n跟隨aNum一起改變呢?別急,也是有方法的,只要把這兩個變量的地址統一就行。怎麼理解?例如n的地址是X,那麼把n的地址傳給aNum,而不是只傳一個數字,於是aNum的改變就是n的改變。

下面是實現方法,只要在參數變量前面加一個&。

即:

#include <iostream>
using namespace std;
int f(int &aNum)
{
    aNum -= 1;
    return aNum;
}
int main()
{
    int ans;
    int n;
    cin >> n;
    ans = f(n);
    cout << n << " " << ans << endl;
    return 0;
}

此程序輸出為:2 2

2021/2/7更新,標準庫函數

C++已經幫你寫好了很多函數,你可以包含一些庫去直接調用。比如memset()、strlen()、strcpy()、setw()等等。

常用的庫也有iostream,cstring,cstdio,cstdlib,iomanip等,需要用#include語句包含。

C++常用庫大全://en.cppreference.com/w/cpp/header

C++ 基本中的基礎算法

找數組中最大值(及最小值)

排序數組(簡單算法——選擇排序、冒泡排序、sort函數)

C++標準庫

STL

小練習題

命名空間using namespace std

//www.runoob.com/cplusplus/cpp-namespaces.html

對於C++的常見答疑(來自百度百科)

問題1:學習C++大約需要多久?有些書籍上說幾十天就能學會C++這是真的嗎?

回答:在高校中安排的C++課程約為半年至一年左右,但事實上要精通C++,這點時間是遠遠不夠的。C++並不只是一門簡單的計算機語言,而是逐漸形成了一個學科體系。要熟練運用C++,做出界面美觀、功能強大的程序,還必須對數據結構、STL、設計模式等各個專題進行深入學習。因此,學習C++所需時間取決於學習者本身的基礎和期望達到的學習效果。如果一位零基礎的初學者要掌握C++語言本身的所有特性,1~2年的時間是比較正常的。至於說幾十天能夠學會C++,對於已經精通其他計算機語言的學習者來說也是可能的。

問題2:學習C++需要什麼樣的數學和英語水平?學歷較低可以學C++么?

回答:學習程序設計必然會用到數學和英語。至少輸入的代碼基本都是英文字母,我們要用的算法多少和數學、邏輯學有些關係。因此,徹底沒有數學和英語基礎就學習程序設計真的很困難。一般認為,有初中或以上的數學和英語基礎就可以學習程序設計了。在現實中,很多中學生已經成為了編程高手。如果已經忘記以前所學的數學和英語知識,建議略花一些時間去回顧一下。數學和英語對學習程序設計還是有莫大的裨益。數學能夠鍛煉一個人的邏輯思維能力,使接受算法的速度更快;英語則有助於學習者看懂計算機的反饋信息、閱讀更多原版的技術資料。

問題3:以前學習過程序設計,時間長都忘記了,現在不從事計算機行業。隨着年齡增加,學習能力和記憶力都可能有所減弱,這樣能學習C++么?

回答:學習能力和記憶力的確會隨年齡受到影響。但是學習C++本來就是一個周期相對較長的過程,最重要的是保持學習的熱情和耐心。C++語言的基礎部分已經基本固定,不會經常發生重大變化,因此即使年齡稍大,經過努力後掌握C++是完全可能的。

問題4:很多網友說學習C++之前要學C語言,是這樣嗎?

回答:C語言的部分語法的確與C++相似甚至相同。如果有C語言的基礎學習C++肯定會更快。但是,這並不意味着學習C++之前必須要學C語言,而且對於初學者來說在短時間內接觸這兩種語言反而會造成部分概念的混淆。因此,如果你的目標是C++而不是C語言,那麼不必特意在學習C++之前先去學C語言。

問題5:現在學習C++主要有哪些集成開發環境?哪個最適合初學者?

回答:首先需要說明的是,集成開發環境和編譯器又不是一回事情。通常集成開發環境可以搭配一種或多種編譯器。編譯器的功能是將C++源程序轉變成可執行的程序,而集成開發環境則是一系列代碼編輯、調試和管理工具。目前Windows操作系統下使用比較廣泛的集成開發環境有微軟的Visual Studio(包括6.0版、2010版和2012版等)、Dev-C++、Eclipse、Code::Blocks等。從集成開發環境的界面友好程度來看,微軟的Visual Studio有着不小的優勢。並且Visual Studio的市場佔有率也是非常高的,很多院校、培訓機構、企業都在使用。因此,建議有條件的初學者優先選用Visual Studio。如果實在無法安裝Visual Studio,那麼Dev-C++或Code::Blocks也可以作為替代。

問題6:如何保持學習C++的積極性和熱情?

回答:對於大多數初學者來說,學習C++語言還是有一定難度的。因此,必須要掌握好學習的速度和節奏,不要對自己產生過大的壓力。有些讀者說只需要3周就能把小半本書看完,可是剩下的那部分卻始終看不進去。事實上這說明了前面的小半本書還沒有完全消化吸收——暴飲暴食自然就要沒胃口了。建議初學者不要貪急貪快,那樣很容易毀掉自己的學習熱情。如果為自己訂製了一個相對長期的、寬鬆的學習計劃,反而更容易培養自己的積極性。

問題7:零基礎的初學者應該學VB還是學C++?

分已經基本固定,不會經常發生重大變化,因此即使年齡稍大,經過努力後掌握C++是完全可能的。

問題4:很多網友說學習C++之前要學C語言,是這樣嗎?

回答:C語言的部分語法的確與C++相似甚至相同。如果有C語言的基礎學習C++肯定會更快。但是,這並不意味着學習C++之前必須要學C語言,而且對於初學者來說在短時間內接觸這兩種語言反而會造成部分概念的混淆。因此,如果你的目標是C++而不是C語言,那麼不必特意在學習C++之前先去學C語言。

問題5:現在學習C++主要有哪些集成開發環境?哪個最適合初學者?

回答:首先需要說明的是,集成開發環境和編譯器又不是一回事情。通常集成開發環境可以搭配一種或多種編譯器。編譯器的功能是將C++源程序轉變成可執行的程序,而集成開發環境則是一系列代碼編輯、調試和管理工具。目前Windows操作系統下使用比較廣泛的集成開發環境有微軟的Visual Studio(包括6.0版、2010版和2012版等)、Dev-C++、Eclipse、Code::Blocks等。從集成開發環境的界面友好程度來看,微軟的Visual Studio有着不小的優勢。並且Visual Studio的市場佔有率也是非常高的,很多院校、培訓機構、企業都在使用。因此,建議有條件的初學者優先選用Visual Studio。如果實在無法安裝Visual Studio,那麼Dev-C++或Code::Blocks也可以作為替代。

問題6:如何保持學習C++的積極性和熱情?

回答:對於大多數初學者來說,學習C++語言還是有一定難度的。因此,必須要掌握好學習的速度和節奏,不要對自己產生過大的壓力。有些讀者說只需要3周就能把小半本書看完,可是剩下的那部分卻始終看不進去。事實上這說明了前面的小半本書還沒有完全消化吸收——暴飲暴食自然就要沒胃口了。建議初學者不要貪急貪快,那樣很容易毀掉自己的學習熱情。如果為自己訂製了一個相對長期的、寬鬆的學習計劃,反而更容易培養自己的積極性。

問題7:零基礎的初學者應該學VB還是學C++?

回答:不得不承認,用Visual Basic製作一個Windows窗口界面的程序比C++方便得多。因此,初學者可能在學習Visual Basic的時候覺得更容易,更有成就感。Basic和C++屬於計算機高級語言中的兩支路線,各有所長。但是,從計算機高級語言的發展趨勢來說,C++更具有代表性。如果只是想了解一下程序設計,學習Visual Basic也未嘗不可。


入門課程推薦

BTW:如果想入門C++,可以點下面這個網站看視頻教程,我當初就是跟他們的老師入門的。

//www.csai.online/course/explore/B02

在這裡插入圖片描述