C++ 教程 - 01 基礎篇

文章目錄

  • C++介紹
  • 環境配置
  • 第一個cpp程序
    • 案例練習
  • 變量
  • 常量
  • 關系運算符
  • 邏輯運算符
  • 條件運算符
  • 位運算符
  • 類型轉換
  • 分支
  • 循環
  • 程序調用
  • 綜合案例

C++介紹

  • 基于C語言,繼承了C的所有語法;

  • 靜態類型語言,需要先編譯,再執行;

  • 貼近底層硬件,運行速度快;
    ?

  • 支持面向對象、面向泛型,增強版的C;

  • 應用領域
    在這里插入圖片描述

  • 編譯(Compile),編譯器 將整個源代碼翻譯成機器碼(二進制文件),一次性交給計算機執行,如C/C++;

  • 解釋(Interpret),由解釋器將代碼逐行解釋為機器碼,交給計算機執行,如 python/js ;

  • c++的運行
    在這里插入圖片描述

  • 版本C++ 98、C++ 11、 C++ 14、 C++ 17、C++ 20

環境配置

集成開發環境Visual Studio ,編輯、編譯;
下載地址
工具 -> 選項 可調整字體等
項目上右鍵 -> 設為啟動項目,做項目切換;
Ctrl + k, c 注釋;
Ctrl + k, u 取消注釋;

?

第一個cpp程序

#include <iostream>    // 包含頭文件
using namespace std;  // 使用std 命名空間/*多行注釋
int, 返回值類型
main,主函數
arr, 形式參數
{}, 函數體
*/
int main(char* arr[]) { //一個項目中僅僅一個main函數// cout 輸出  cin >> 變量 輸入// << 流輸出運算符// endl  結束一行cout << "Hello jack" << endl; // 必須分號結束// 系統調用system("pause"); // 暫停return 0;
}

在這里插入圖片描述
選中源碼-右鍵-編譯,可以生成.obj目標文件;
選中項目-右鍵-生成(build),可以生成exe文件;
查看路徑如下:
在這里插入圖片描述

?

案例練習

  • 基于函數封裝實現功能;
  • 輸入用戶名,輸出歡迎信息;
#include <iostream>    // 包含頭文件
using namespace std;  // 使用std 命名空間// 函數封裝 void 表示 函數沒有返回值
void welcomeUser() {cout << "請輸入用戶名:" << endl;// C++ 支持字符串類型  而C不支持string name;// 輸入cin >> name;// 輸出歡迎信息cout << "Welcome " << name << endl;
}int main(char* arr[]) {// 調用函數welcomeUser();// 系統調用system("pause"); // 暫停return 0;
}

也可以將該函數定義在另一個源文件中,本源文件內僅僅聲明即可使用。聲明如void welcomeUser(); 是沒有函數體的;編譯器會自動查找。

?

變量

  • 聲明變量,即分配內存;
  • 命名以字母、數字、下劃線,不以數字開頭;
  • 在代碼塊{ }內部的變量為局部變量;在所有{}外的變量為全局變量
  • 局部變量必須先初始化賦值,才可以使用;而全局變量默認初始化;
  • 代碼塊內部,優先查找(作用域最小的)局部變量,使用 :: + 變量 訪問全局變量;
#include <iostream>    // 包含頭文件
using namespace std;  // 使用std 命名空間// 定義枚舉類型
enum Sex
{MALE,  // 默認從0開始FEMALE
};int main(char* arr[]) {// 整型定義int age; // 變量的聲明age = 23; // 初始化賦值// double  double score = 79.534;  // 聲明并賦值  為變量定義float scoreF = 60.8f;// 字符串定義string name = "jack";string fullName = name + "li";  // 字符串的拼接// 布爾bool isGood = false;// 枚舉enum Sex sex = MALE; // 定義 并賦值// 輸出cout << "姓名:" << name << endl;cout << "全名:" << fullName << endl;cout << "性別:" << sex << endl;cout << "年齡:" << age << endl;cout << "分數:" << score << endl;cout << "是否好學生:" << isGood << endl;// 系統調用system("pause"); // 暫停return 0;
}
  • 變量基本類型(本質占用多少內存空間)
    • char, 字符類型 單引號+單字符;1byte;對應ASCII碼整數值;
    • short,短整型 2bytes
    • int ,整型 2-4bytes,注意數據溢出,超出范圍循環到另一端;一般使用int;
    • long,4bytes
    • long long 8bytes
    • unsigned short/int/long/long long 無符號(非負);
    • unsigned char 無符號的字符
    • float,單精度浮點型 4bytes
    • double 雙精度,8bytes
    • string,字符串
    • bool,true/false,本質為整型
    • void 空類型;
    • 整數字面量默認為int; 可以后綴指定 LL 長整型/ ULL無符號長整型
    • 小數字面量默認為double; 指定后綴 f -> float,L -> long double;
    • 字符串的字面量是字符的數組;
      ?
  • 自定義類型
    • enum,枚舉
    • struct,結構體
    • union,共用體
  • sizeof 查看占用內存大小
    • sizeof age
      ?

常量

  • const 類型 常量名=賦值;值不可更改;
  • #define ABC 5 宏定義常量;
  • 常量值不可更改
    ?

關系運算符

  • <、<=、 >、>= 優先;
  • ==、!= 次之
  • 表達式返回bool類型

邏輯運算符

&& 同true 則為true ,第一個為false,則不再計算第二個條件;
|| 有一個true 則返回true ,第一個為true,則不再計算第二個條件;
!取反
優先級
在這里插入圖片描述

條件運算符

  • 表達式 ?值1 :值2
  • 表達式為true,則取值1;否則取值2
  • 優先級較低,一般使用()包裹;

位運算符

  • ~ 按位取反;
  • << 按位左移、>> 按位右移; 如 int a = 5; a << 2; 一般無符號的數左移、右移;
  • & 按位與,同1則為1;
  • | 按位或,有1則為1;
  • ^ 按位異或,相同則為0,不同則為1;
  • 優先級從上到下依次降低;

類型轉換

  • 隱式轉換,
    • 短的數據類型向長的數據類型轉換;如int -> long long; 4 + 5.5 這里4轉為double
    • short/char/bool 一般會轉為int;
    • 判斷時,0轉為false,非0轉為true;
    • 賦值時,右側值類型轉為左側變量的類型;
  • 強制轉換,長的類型向短的類型中轉換;
    • int age = 5;
    • double aa =(double)age; // C風格
    • double bb = double(age); // C++風格
    • static_cast<double>(age)

分支

  • if …else
if (表達式) {}if (表達式) {}
else if (表達式) {}
else {}
  • switch
int age = 5;
switch(age){ // 必須傳入數值case 1: 語句;break;case 2: 語句;brea;default: 語句;
}

案例1:輸入一個人的姓名,分數,輸出他的平分等級;
>=90 優秀;
>=80 良好;
>=70中等;
>=60及格;
否則,不及格

#include <iostream>using namespace std;int main() {// declarestring name;double score;cout << "輸入姓名:" << endl; // endl換行//獲取輸入cin >> name;cout << "輸入分數:" << endl;cin >> score;// 判斷if (score >= 90) {cout << name << ":優秀" << endl;}else if (score >= 80) {cout << name << ":良好" << endl;}else if (score >= 70) {cout << name << ":中等" << endl;}else if (score >= 60) {cout << name << ":及格" << endl;}else {cout << name << ":不及格" << endl;}// system("dir");system("pause");return 0;
}

?
案例2: 輸入績效等級,輸出獎金數額;
使用switch

#include <iostream>using namespace std;int main() {// declarechar level;cout << "輸入等級:" << endl;cin >> level;switch (level) { // 傳入數值case 'A': cout << 1000 << endl; break;case 'B': cout << 500 << endl; break;case 'C': cout << 300 << endl; break;default: cout << "沒有獎勵" << endl;}// system("dir");system("pause");return 0;
}

?

循環

  • while
  • do…while
  • for
    C是面向過程,為擴展C的功能,開發出了C++,擴展了面向對象、基于泛型的操作;
    C的所有語法在C++中基本都可以使用;
    由于C++的復雜性,基于C++ 實現了java語言,在保留好用的語法的同時,進行了不好的語法的修改;
    ?
    while循環:
#include <iostream>using namespace std;int main() {// declarechar level;int i = 3;// 用戶循環輸入while (1) {// 異常捕獲try{cout << "輸入等級:" << endl;cin >> level;switch (level) {case 'A': cout << 1000 << endl; break;case 'B': cout << 500 << endl; break;case 'C': cout << 300 << endl; break;default: cout << "沒有獎勵" << endl;}--i;cout << "i:" << 5 / i << endl; //  除0會退出進程continue;  // 繼續下次循環}catch (const std::exception&)  // 異常捕獲 與java js類似{cout << "捕獲異常" << endl;break; // 結束循環}}// system("dir");system("pause");return 0;
}

?
do…while:

int i = 10;
do {cout << "current i:" << i << endl;--i;
}while(i > 0);

?
for循環:

// C 的用法
int i;   
for(i=0; i < 10; i++){ // 滿足i<10,則執行代碼塊,最后執行i++,再判斷是否滿足條件cout << "current i:" << i << endl;
}// 遍歷數組元素  同java
int arr[] = {1, 2, 5, 9};
for (int e : arr) {if (e % 5 == 0) {continue; // 繼續下次循環,后面的代碼不再執行}else if(e / 3 == 3){break; // 結束循環}elsecout << e << endl;
}
// 最終輸出 1 2 

&nbsp;
goto 標簽: 跳轉到語句塊,不推薦使用

#include <iostream>
using namespace std;int main() {goto laufing; // 語句塊 跳轉 windows批處理支持goto// 聲明語句塊
laufing: cout << "input your name:" << endl;string name;cin >> name; // 直接輸入空格,不會停止掃描,輸入字符串后遇到空格則停止// name.empty()  是否為空// name.length() 長度// name.at(idx)  獲取對應索引處的字符// name.substr(start_idx, count)  從idx索引開始,截取count個字符// name.find(sub_string)  返回找到的第一個位置的索引,找不到則返回一個很大的數字// name.rfind(sub_string) 從右邊開始查找,返回第一個的起始索引// name.clear() 清空該地址的字符串if (name.empty()) { // 字符串為空cout << "empty name" << endl;goto laufing;}else if (name.length() < 2) {cout << "to short" << endl;goto laufing;}else{cout << "idx 0:" << name.at(0) << endl;cout << "substr:" << name.substr(1, 3) << endl;cout << "find:" << name.find("ja") << endl;cout << "find:" << name.rfind("ja") << endl;name.clear();cout << "clear:" << name << endl;}// system("dir");system("pause");return 0;
}

?

程序調用

  • 源代碼打斷點,直接在對應的行處點擊;再次點擊取消斷點
    在這里插入圖片描述
  • 調試快捷鍵
    • F5 開始調試,shift+F5 結束調試,Ctrl+F5 直接執行(不調試)
    • F11 逐行執行,shift+F11 到下一個斷點;
    • shift+F9 快速監視變量值,選中一個變量->shift+F9,點擊‘添加監視’
      在這里插入圖片描述
    • 也可以點擊菜單欄的‘調試’;

?

綜合案例

  • 輸入一個自然數 n,判斷是否為質數;
    • 只能被1和自身整除,則為質數;
    • 1和自身 不用判斷,可以取 2 -> n / 2 之間的值,依次判斷是否被n整除;
    • n特別大時,為優化性能,可以取 2 - > sqrt(n)之間的值來判斷;
#include <iostream>
using namespace std;// bool是函數返回值類型
// n是函數的形式參數
bool isPrimer(int n){  //定義一個函數int i = 2;int upperVal = n / 2;// 標志位bool flag = true;while (i <= upperVal) {if(n % i == 0){flag = false;break;}++i;}if (flag) {cout << n << "是質數" << endl;return 1;}else {cout << n << "不是質數" << endl;return 0;}
}int main() {int n;cout << "input a value:" << endl;cin >> n;isPrimer(n);// system("dir");system("pause");return 0;
}
  • 輸入一個自然數n,輸出n以內的所有質數;
int i;
for(i=2; i <= n/2; i++){if(isPrimer(i))cout << i << endl;  // 單行語句,可以省略 { }elsecontinue;
}

?

  • 猜數字游戲
    • 程序運行時,隨機設定一個目標數值;
    • 讓用戶輸入一個數字,與目標數值比較;
    • 大于目標值,則輸出‘大了’;
    • 小于目標值,則輸出‘小了’;
    • 等于目標值,則輸出“恭喜,猜對了”

int main() {//當前時間戳 秒int curTimestamp = time(0);  // python中 time.time() 獲取時間戳 秒  // js: new Date().getTime() 毫秒// 設置隨機數種子// srand(10); 種子固定,則每次運行程序時,都產生同樣的隨機數,為了產生不同的隨機數// 需要設置隨機數的種子,即偽隨機  --不是真正的隨機srand(curTimestamp);//生成 100 內的隨機數int target = rand() % 100;  // 1000以內就 %1000int guessTimes = 5;int curTimes = 1;int guessVal;while (curTimes <= guessTimes) {// 讓用戶輸入cout << "input your guess:" << endl;cin >> guessVal;if (guessVal < target) {cout << "小了" << endl;++curTimes;}else if (guessVal > target) {cout << "大了" << endl;++curTimes;}else {cout << "恭喜,猜對了" << endl;break;}}if (curTimes > guessTimes) {cout << "game over" << endl;}// system("dir");system("pause");return 0;
}

?
?

下一篇:C++ 教程 - 02 復合數據結構

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211914.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211914.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211914.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

雪花算法:分布式系統的關鍵藝術

導言 在探索分布式系統的奧秘時&#xff0c;我們經常遇到一個看似簡單卻極其關鍵的挑戰&#xff1a;如何高效、可靠地生成唯一的標識符&#xff08;ID&#xff09;。這不僅是技術的問題&#xff0c;更是一種藝術。讓我們深入探討雪花算法&#xff08;Snowflake Algorithm&…

windows下分卷解壓文件

我的文件是這樣的&#xff1a; 存放路徑為&#xff1a;C:\Users\Luli_study\MICCAI_MMAC\fudanuniversity\DDR dataset 首先要進入分卷文件的目錄cd&#xff1a; 第一步&#xff1a;cd /path/o/分卷問文件目錄 第二步&#xff1a; 執行之后的結果(紅色框出來的)&#xff1a; …

?functools --- 高階函數和可調用對象上的操作?

源代碼: Lib/functools.py functools 模塊應用于高階函數&#xff0c;即參數或&#xff08;和&#xff09;返回值為其他函數的函數。 通常來說&#xff0c;此模塊的功能適用于所有可調用對象。 functools 模塊定義了以下函數: functools.cache(user_function) 簡單輕量級未綁…

Vellum —— Fluid

目錄 Vellum fluids setups Fluid tips and troubleshooting Fluid phases Vellum fluids and soft bodies Vellum fluid vs FLIP fluid Vellum fluids setups Vellum fluid solver是基于粒子流體的解算框架&#xff0c;被完全集成到了Vellum動力學系統&#xff08;可與gr…

王道數據結構課后代碼題 p149 第3—— 7(c語言代碼實現)

目錄 3.編寫后序遍歷二叉樹的非遞歸算法 4.試給出二叉樹的自下而上、自右到左的層次遍歷算法 &#xff08;有圖解代碼詳解&#xff09;c語言代碼實現 5.假設二叉樹采用二叉鏈表存儲結構&#xff0c;設計一個非遞歸算法求二叉樹的高度。 ?編輯 6.設一棵二叉樹中各結點的值互不…

普冉(PUYA)單片機開發筆記(7): ADC-輪詢式多路采樣

概述 應用中經常會有使用單片機進行模數轉換的需求。PY32F003 具有 1 個 12 位的模擬數字轉換器&#xff08;ADC&#xff09;&#xff0c;今天我們一起來使用一下這個 ADC。 數據手冊中對 ADC 簡介如下。 SAR ADC&#xff1a;逐次逼近式 ADC&#xff0c;原理參見“參考鏈接&a…

1830_emacs lisp的交互式模式

org-mode的標記語法 Grey 全部學習匯總&#xff1a; GitHub - GreyZhang/g_org: my learning trip for org-mode 交互式模式 emacs的交互式模式讓我對emacs的生命力有了更進一步的認識&#xff0c;但是我并沒有找到什么特別豐富的資料做這方面的學習與分析。尤其是理論與實…

class070 子數組最大累加和問題與擴展-上【算法】

class070 子數組最大累加和問題與擴展-上【算法】 code1 53. 最大子數組和 // 累加和最大子數組和 // 給你一個整數數組 nums // 請你找出一個具有最大累加和的非空子數組 // 返回其最大累加和 // 測試鏈接 : https://leetcode.cn/problems/maximum-subarray/ dp[i]&#xff…

【Docker】Docker Compose,yml 配置指令參考的詳細講解

作者簡介&#xff1a; 辭七七&#xff0c;目前大二&#xff0c;正在學習C/C&#xff0c;Java&#xff0c;Python等 作者主頁&#xff1a; 七七的個人主頁 文章收錄專欄&#xff1a; 七七的閑談 歡迎大家點贊 &#x1f44d; 收藏 ? 加關注哦&#xff01;&#x1f496;&#x1f…

基于c++版數據結構基于數組棧改-Python思維總結

##棧部分-&#xff08;疊貓貓&#xff09; ##抽象數據類型棧的定義&#xff1a;是一種遵循先入后出的邏輯的線性數據結構。 換種方式去理解這種數據結構如果我們在一摞盤子中取到下面的盤子&#xff0c;我們首先要把最上面的盤子依次拿走&#xff0c;才可以繼續拿下面的盤子&…

【Java期末復習資料】(2)常見例題 //持續更新

本文章主要是常見例題&#xff0c;解析不會太詳細&#xff0c;有問題、不會的可以給我發消息哦&#xff0c;后續會出模擬卷 常見例題&#xff1a; 1.下列跟Java技術平臺有關的是&#xff08;ABD&#xff09; A.JVM B.JDK C.JPN D.JRE 2.面向對象的特征包括&#xff08;ACD&…

wxPython的控件tree

wxPython樹控件介紹 樹&#xff08;tree&#xff09;是一種通過層次結構展示信息的控件&#xff0c;如下圖所示是樹控件示例&#xff0c;左窗口中是樹控件&#xff0c;在wxPython中樹控件類是wx.TreeCtrl。 wx.TreeCtrl常用的方法有 AddRoot(text, image-1, selImage-1, data…

在Deepin中安裝x11vnc工具并結合內網穿透軟件實現遠程訪問桌面

文章目錄 1. 安裝x11vnc2. 本地遠程連接測試3. Deepin安裝Cpolar4. 配置公網遠程地址5. 公網遠程連接Deepin桌面6. 固定連接公網地址7. 固定公網地址連接測試 x11vnc是一種在Linux系統中實現遠程桌面控制的工具&#xff0c;它的原理是通過X Window系統的協議來實現遠程桌面的展…

P4 Qt如何添加qss樣式表文件和添加圖片資源

目錄 前言 01 添加圖片資源文件 02 添加qss文件 前言 &#x1f3ac; 個人主頁&#xff1a;ChenPi &#x1f43b;推薦專欄1: 《C_ChenPi的博客-CSDN博客》??? &#x1f525; 推薦專欄2: 《Qt基礎_ChenPi的博客-CSDN博客》??? &#x1f33a;本篇簡介 &#xff1a;這一章…

JVM Optimization Learning(六)

目錄 一、JVM Optimization 1、Shenandoah Shenandoah的使用方法 2、ZGC ZGC的版本更迭 ZGC的使用方法 ZGC的參數設置 3、JMH測試GC性能 一、JVM Optimization 1、Shenandoah Shenandoah是由Red Hat開發的一款低延遲的垃圾收集器&#xff0c;Shenandoah并發執行大部分…

機器人純阻抗控制接觸剛性環境(阻尼影響因素)

問題描述 在機器人學中&#xff0c;阻抗控制是一種常用的控制策略&#xff0c;用于管理機器人在與環境交互時的運動和力。阻抗控制背后的關鍵概念是將環境視為導納&#xff0c;而將機器人視為阻抗。 純阻抗控制接觸剛性環境時&#xff0c;機器人的行為方式主要受其阻抗參數的…

數據結構和算法專題---6、定時算法與應用

本章我們會對定時算法做個簡單介紹&#xff0c;包括常用的定時算法&#xff08;最小堆、時間輪&#xff09;的概述、實現方式、典型場景做個說明。 概述 系統或者項目中難免會遇到各種需要自動去執行的任務&#xff0c;實現這些任務的手段也多種多樣&#xff0c;如操作系統的…

【C++】使用“/**/“進行注釋的好處

2023年12月10日&#xff0c;周日晚上 我今天下午看Google Chrome的源碼時&#xff0c;才發現"/**/"原來還能這么用 使用"/**/"的好處就是&#xff0c;可以在任何地方進行注釋&#xff0c;哪怕是參數列表 void CircularWindow::enterEvent(QEvent *event/…

【Python】判斷域名是否合法

python判斷域名是否合法|校驗域名 域名以點號分隔成多個字符串。單個字符串由各國文字的特定字符集、字母、數字、連字符&#xff08;-&#xff09;組成&#xff0c;字母不區分大小寫&#xff0c;連字符&#xff08;-&#xff09;不得出現在字符串的頭部或者尾部。單個字符串長…

GitHub Enterprise Server 添加代碼安全、自動化功能

GitHub的軟件更新用于管理私有服務器上的存儲庫&#xff0c;具有GitHub容器注冊訪問、Dependabot安全警報和更新以及可重用工作流的特性。 GitHub Enterprise Server 3.5是GitHub用于托管和管理私有服務器上存儲庫的最新版本&#xff0c;它引入了新的代碼安全特性&#xff0c;新…