死老百姓
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
      • Invitee
    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Versions and GitHub Sync Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
Invitee
Publish Note

Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

Your note will be visible on your profile and discoverable by anyone.
Your note is now live.
This note is visible on your profile and discoverable online.
Everyone on the web can find and read all notes of this public team.
See published notes
Unpublish note
Please check the box to agree to the Community Guidelines.
View profile
Engagement control
Commenting
Permission
Disabled Forbidden Owners Signed-in users Everyone
Enable
Permission
  • Forbidden
  • Owners
  • Signed-in users
  • Everyone
Suggest edit
Permission
Disabled Forbidden Owners Signed-in users Everyone
Enable
Permission
  • Forbidden
  • Owners
  • Signed-in users
Emoji Reply
Enable
Import from Dropbox Google Drive Gist Clipboard
   owned this note    owned this note      
Published Linked with GitHub
7
Subscribed
  • Any changes
    Be notified of any changes
  • Mention me
    Be notified of mention me
  • Unsubscribe
Subscribe
# C/C++從入門到精通 [TOC] 程式入門須知 === ### 初學常犯der錯誤 :grinning_face_with_one_large_and_one_small_eye: + 常忘記在敘述行尾端打上<font color="#f11">分號(;)</font> > cout << “hi” + 在不應該出現分號的地方多打 > If(a = b); + 大小寫沒區分 >C/C++語言規定大小寫字母是不同字元 + 拼錯字 >像是將char打成chr,如果錯誤訊息像是( ‘ )刮起來<font color="#f11">‘ chr ‘ was not declared in this score 字樣</font> + 括弧未配成對 >有左括弧,就一定有右括弧(只要是括弧就一定是成對) + 引號未成對 >無論雙引號(用於字串)或單引號(用於字元)都要成對出現 + 不該出現的空白符號 >像是namespace 打成name space 原本為連在一起的就不該隨意分開 cin輸入 === `cin 物件可輸入文數字至指定的變數` - **可輸入字元至變數a** ```cpp= char a; cin>>a; cout<<"a"<<a<<endl; ``` - **可輸入整數至變數b** ```cpp= int b; cin>>b; cout<<"b="<<b<<endl; ``` - **可輸入字串至變數c** ```cpp= char c[5]; cin>>c; cout<<"c="<<c<<endl; ``` ### cin 範例程式 ```cpp=! #include<iostream> using namespace std; int main(){ char a; //只輸出輸入的第一個字元EX:輸入106輸出1 cin>>a; cout<<"a="<<a<<endl; int b;//只輸出整數若為0.2只輸出0 cin>>b; cout<<"b="<<b<<endl; char c[5];//可輸出多個字元EX:輸入106輸出106 cin>>c; cout<<"c="<<c<<endl; //下面這幾段也是同樣意思,可連續輸入3個變數EX:a 1 300 輸出a=a b=1 c=300 和前面一樣都可用連續輸入讓他輸出 cin>>a>>b>>c; cout<<"a="<<a<<endl; cout<<"b="<<b<<endl; cout<<"c="<<c<<endl; return 0; } ``` cout 輸出 === `cout可輸出指定任何文數字與變數內容,且不用管變數的資料型態` ```cpp= int a=5; cout<<a; //輸出5 ``` ##### 或是 ```cpp=! int a=5; cout<<"a="<<a; //其中第一個用雙引號表示字串內容,以字串方式輸出,第二個a,則是變數,將會輸出對應變數的內容也是輸出5 ``` ### cout 範例程式1 ```cpp= #include<iostream> using namespace std; int main(){ cout << "Good" <<endl; int a =5; cout << "a=" <<a<<endl; return 0; } ``` #### 若要進行輸出資料的欄位寬度、符點小數位數、輸出靠左或靠右 >##### 使用cout物件所提供的width、setf等屬性 #### width屬性可設定輸出資料的欄位寬度,預設向右靠齊 ```cpp= int a1=1 ,a2=10 ,a3=100 ,a4=1000 ,a5=10000; cout.width(5);cout<<a1<<endl; cout.width(5);cout<<a2<<endl; cout.width(5);cout<<a3<<endl; cout.width(5);cout<<a4<<endl; cout.width(5);cout<<a5<<endl; ``` >輸出結果會是 1 10 100 1000 10000[color=#d35] :::success cout.width(5) **在每個輸出前都要設定,有效期只有一次** ::: ```cpp= cout.width(5) cout<< a1 <<endl; cout<< a2 <<endl; //只對a1有效 ``` ### 範例程式2 ```cpp= #include<iostream> using namespace std; int main(){ int a1=100,a2=100; cout.width(5); cout << a1 <<endl; cout << a2; return 0; } ``` 輸出會是 100 100 只會影響到第一個的輸出位置(預設靠右) #### **setf可輸出資料的小數點位數,資料靠左或靠右** + <font color="#f11">cout.setf(ios::fixed,ios::floatfield);</font> #### `ios>>命名空間名稱__"::">>範圍運算子__ floatfield >>表示浮點數欄位` + <font color="#f11">cout.precision(2);</font> ##### `precision(2)>>浮點數精準度(小數後取兩位)` + <font color="#f11">cout.setf(ios::right,ios::adjustfield)</font> #### `設定靠左(left)或靠右(right),adjustfield >>自動調整欄位` ### cout 範例程式3 ```cpp #include<iostream> using namespace std; int main(){ float b1=3.14159; cout.setf(ios::fixed,ios::floatfield); cout.precision(2); cout.setf(ios::right,ios::adjustfield); cout.width(8); cout<<b1<<endl; cout.width(8); cout<<b1*20<<endl; cout.width(8); cout<<b1*200<<endl; } ``` 輸出結果 3.14 62.83 628.32 printf 輸出 === `C語言採用printf()與scanf()作為輸出入函式` <font color="#f11">printf()</font>可輸出結果,期中括號內需放置一對<font color="#f11">大括號("")</font>達成將欲輸出的資料當作引數傳給printf()函式 ```cpp= printf("a"); printf("aa"); ``` >輸出結果為 aaa ##### 要跳列的話,需使用到<font color="#f11">跳脫字元 \n</font> `通常使用換行符\n,在其他情況下則使用控制符endl。一個差別是,endl確保程序將立即顯示在屏幕上;而使用“\n”不能提供這樣的保證,這意味著在有些系統中,有時可能在您輸入信息後才會出現提示。` ```cpp= printf("a\n"); printf("a\na"); ``` >輸出結果 a a a ### printf 範例程式1 ```cpp= #include <iostream> using namespace std; int main() { printf("a\n"); printf("a\nb\n"); return 0; } ``` 結果就是 a a b #### 如果是變數的輸出,則必須在引數敘述中加一個列印格式控制輸出格式 ### printf 範例程式2 ```cpp=! #include<iostream> using namespace std; int main(){ int a=3; int b=5; printf("a=%d\nb=%d",a,b); // a,b會依序對應 // %d>>整數 %ld>>長整數 %f>>浮點數 %c>>字元 %s>>字串(字元陣列) return 0; } ``` 結果是 a=3 b=5 scanf 輸入 === `scanf()可輸入資料,跟printf同樣方式,兩者都需用到列印格式控制輸出入資料` ```cpp=! 輸入字元 char a; scanf("%c,&a"); //%c>>字元 &a>>指定到a,&是取址符號用來取得欲放置輸入資料的變數位置 ``` ### scanf 範例程式1 ```cpp= #include <iostream> using namespace std; int main() { char a; printf("press any char: "); scanf("%c", &a); printf("char is %c",a); return 0; } ``` 輸出結果>> press any char: 1 char is 1 #### C語言的字串是由<font color="#f11">字元陣列</font>組成 #### 在輸入字串時,必須利用字元陣列完成輸入 ### scanf 範例程式2 ```cpp= #include<iostream> #include<stdio.h> using namespace std; int main(){ char c[6]; //一維陣列中有6個元素 printf("enter a string: "); scanf("%s", &c); //%s>>字元陣列 printf("enter is %s", c); return 0; } ``` >此程式輸入是什麼輸出就是什麼 ### scanf 範例程式3 ```cpp= #include <iostream> #include <stdio.h> using namespace std; int main(){ int a; long b; float c; printf("enter an int: "); scanf("%d", &a); printf("enter an long int: "); scanf("%ld", &b); printf("enter an float: "); scanf("%f", &c); printf("\n your enter.... \n"); printf("int a =%d \n", a); printf("long int b =%ld \n", b); printf("float c =%f", c); return 0; } ``` #### 如果設int >>10,long int>>1.11 #### 則float會直接將長整數的0.11拿過來 輸出結果 enter an int: 10 enter an long int: 1.11 enter an float: your enter..... int a =10 long int b=1 float c=0.110000 string 字串 === #### C因為要精簡編譯器,SO沒有string型態,所有字串處理都要使用字元陣列 #### C++新增string型態 `在使用前都要包含cstring巨集` ### string 範例程式 ```cpp= #include<iostream> #include<cstring> using namespace std; int main(){ string a; cin >> a; cout << "a=" <<a; } ``` ##### 兩個程式比對一下輸出結果na~~ ```cpp= #include<iostream> #include<cstring> using namespace std; int main(){ string b; getline(cin,b); cout << a<<endl; cout << "b=" <<b ; return 0; } //若要輸入含空白字串,則要使用getline()函式 ``` 若輸入HI HO 輸出結果 a = HI b = HI HO 跳脫字元(Escape Sequence) === #### 字元中的單引號(')、雙引號(")及反斜線(\)均有定義功能 #### 若一定要使用這些字元,使用前須加反斜線(\)跳脫定義功能 _______________________ 字元 | 跳脫字元序列 |:------:|:-----------:| 單引號 | \ \' 雙引號 | \ \" 反斜線 | \ \\ ## 範例程式 ```cpp= #include<iostream> #include<string> using namespace std; int main(){ string a= "HI" ; cout << "a=" <<a<<endl; string b= "\"HI\"" ; cout <<"b=" <<b<<endl; return 0; } ``` 輸出結果 a=HI b="HI" 資料分類與型態 === `下面整理C/C++語言數值資料型態,unsigned表示無號整數、即非負整數` | 數值資料型態 | 占用記憶體大小 | 代表的數值範圍| |:------:|:-----------:|:-----------:| short | 16 | -32768 ~ +32767 int | 16 | -32768 ~ +32767 long | 32 | -2147483648 ~ +2147483647 unsigned short | 16 | 0 ~ 65535 unsigned int | 16 | 0 ~ 65535 unsigned long | 32 | 0 ~ 4294967295 float | 32 | 大約3.4E-38 ~ 3.4E+38(負數亦同) double | 64 | 大約1.7E-308 ~ 1.7E+308(負數亦同) long double | 80 | 大約3.4E-4932 ~ 3.4E+4932(負數亦同) ## 資料分類 ### int(Integerts整數常數)的三種進位方式 * 十進位(Decimal) * 十六進位(Hexadecimal),<font color="#f11">以OX、Ox開頭</font> * 八進位(Octal),<font color="#f11">以O開頭</font> + OxA、OXB等類的均為16進制 + 11、12等等的一般書寫數字方式為10進位 + O72則為8進位 **可使用<font color="#f11">signed(有號)、unsigned(無號)</font>的short、int、long等的六種型態儲存整數** >`整數預設型態是16bits的int型態` ________________________________________________________________________________ ### float(Floating-poing literals浮點常數) ><font color="#f11">數字中含有小數點或指數的稱為浮點數</font> 以指數為例E、e表示10的次方 例如0.0023、2.3E-3、2.3e-3都是表示相同的浮點數或是2.3E+2>>230 浮點數可使用標準書寫>>24.101、1.123 科學符號>>2.3E+1、2.01e-4 **可以使用float、double、long double三種型態儲存浮點數常數** #### <font color="#f11">double是浮點數預設值</font>,若要使用float,則應該要在數值後加上F、f * 例如: double = 1.414,float = 1.414f #### 而要用long double應在數值後加L、l * 例如: long double = 1.414L ________________________________________________________________________________ ### char(character literals字元常數),使用單引號(')圍住的!!單一字元!! #### 例如'A'、'a'等 >***C/C++使用bits的ASCII,可表示256個字元包含<font color="#f11">大小寫英文字母、數字、標點符號、其他特殊符號</font>*** **char型態是8位元長** ________________________________________________________________________________ ### String(字串) #### 字串以雙引號" "圍住 >例如:"HI"、"你好" ##### 因C沒有字串型態,所以字串的使用要用字元陣列而C++新增string使用前要新增`#include<cstring>` ________________________________________________________________________________ ### Boolean(布林值) #### `使用1代表True、0代表False` <font color="#f11">**布林型態是bool**</font> 變數宣告 === #### `變數的功能是用來輸入、處理、儲存外界資料` **變數在使用前要<font color="#f11">事先宣告</font>才能用** >若變數未宣告的結果,編譯器便無法回應使用者在拼字上的錯誤,造成除錯的困難[color=#902bd9] >>hi = hi +1; 上式若事先宣告hi int hi; 沒宣告則編譯器遇到hi時,便會出現 hi 未宣告的錯誤訊息 **變數宣告的優點是可配置恰當的記憶體而提高資料的處理**效率[color=#901f7561] ____________________________________________ ## C/C++變數宣告語法如下 資料型態 變數名稱 [=初值]; - int a; `宣告變數 a 為int型態` - char b,c; `宣告變數b,c為char型態` **變數宣告亦可連同初值一同設定** - float e=1.1f; `宣告變數 e 為float型態` - char r='n'; `宣告變數 r為 char型態,初值為n` ### 這段程式宣告bool型態 ```cpp= #include<iostream> using namespace std; int main(){ bool g,v; g = 4>2; // 1 >> True cout <<g<<endl; v = 4<3; // 0 >>False cout <<v<<endl; cout << sizeof(v); //記憶體大小 return 0; } ``` 輸出結果 1 0 1 ________________________________________________________ ### C沒有字串型態要使用字串則要使用指標或字元陣列 **下列程式使用指標處理字串** ```cpp= #include<iostream> using namespace std; int main(){ char *a="abcd"; char *t; t="qwer"; cout<<a<<endl;//abcd cout<<t<<endl;//qwer a ="ok"; cout << a<<endl; a=t;//qwer cout <<a; } ``` 輸出結果 abcd qwer ok qwer _____________________________ **C++新增string型態** `可宣告變數b為字串型態` ```cpp= #include<iostream> #include<string> using namespace std; int main(){ string b; b ="QAQ"; cout <<b; return 0; } ``` 輸出結果 QAQ ## 範例程式 ```cpp= #include<iostream> #include<string> using namespace std; int main(){ int hi=0; hi = hi + 1 ; cout <<hi<<endl; char *K; char *N; K ="OH"; N ="YA"; string S; S = "HAHAHA"; cout << K<<endl; cout << N<<endl; cout << S; return 0; } ``` 輸出結果 1 OH YA HAHAHA #### 下面的程式碼出了許多錯誤,嘗試排錯先,再看答案 :smiling_face_with_smiling_eyes_and_hand_covering_mouth: ```cpp= #include<iostream> using namespace std; int main(){ int hihi123; int _a; int %as; int sum! ; int Age#3; int a c; int c + 3; int Score; score =4; int if; return 0; } ``` #### 找到錯誤了嗎? :serious_face_with_symbols_covering_mouth: `下面是排錯後der程式` ```cpp= int main(){ int hihi123; int _a; int as;//不能由符號開頭 int sum;//不可有! int Age3;//不可有# int a,c;//不可空白 int c; //不得含有加號 int Score; Score =4; //大小寫錯誤 int hi; //if是保留字 return 0; } ``` 常數符號的宣告 === **`常數符號需要記憶體儲存位置,與變數不同的是常數在整個程式中都不會也不會改變其值`** ### 程式設計有兩種表示常數的方式 >**文字式(Literal)**:直接以15或3.14表示某一常數[color=#a01d7961] >**常數符號式(Symbolic)**:因有些數字在程式中會不斷重複出現,為了增加程式可讀性及減少程式鍵入麻煩,此時可以用有意義的符號代替這就是**常數符號宣告**[color=#509f7349] #### C語言常數定義語法 `#define 常數名稱 常數值` #### C++則新增了const宣告常數 `const 型態 常數名稱=常數值;` ## 範例程式 ```cpp= #include<iostream> #define PIE 3.14 //常數符號通常用大寫表示 const double PI=100; using namespace std; int main(){ double a,b; a=3*3*PIE; //3*3*3.14 b=5*5*PI; // 5*5*100 cout<<a<<endl<<b; return 0; } ``` 輸出結果 28.26 2500 變數常數有效範圍 === **`在一個大型程式中,一個程式是由一或數個函式組合而成 為了防止變數互相干擾,才有變數的有效範圍`** #### 變數有效範圍如下>> >任一變數的宣告,若無特殊聲明,均屬於<font color="#f11">**區域變數**</font>,有效範圍僅止於<font color="#f11">該變數所在程式區塊</font> :::info 例如: 宣告在敘述區塊,則它的有效範圍僅止於該敘述區塊,別的敘述區塊是無法取得該區域變數的值 若宣告於函式中,則它的有效範圍僅止於該函式,其他函式均無法取得該區域變數的值 ::: :::spoiler EX: 全域的a有效範圍是main()、aa()、bb()等全部函式 b、c的有效範圍則是main()、aa()中c、d有效範圍是aa(),但此c與main()中的c只是同名,他們各自占有不同記憶體,且其值<font color="#a09">不會互相干擾</font> 其次,bb()中的a是全域a,與main共用a,在bb()內的改變會傳回main();for敘述區塊內又宣告a,則此a僅在for內有效不會改變全域的a 但若在for敘述區塊中未宣告a,而誤用a,則a會改變全域的a;if敘述區塊也宣告a,則a僅在if內有效,不改變全域a ::: `感覺看懂嘞對ㄅ 再來看程式碼吧!` #### 範例程式1 ```cpp= #include<iostream> using namespace std; //int double PI=3.14;//全域常數 int a;//全域a int main(){ void aa(); void bb(); int b,c; a=10;//全域a c=5;//main內c aa(); cout<<"2.main的c="<<c<<endl; bb(); cout<<"3.全域a="<<a<<endl; for(int a=2;a<=3;a++) cout<<"4.for內的a="<<a<<endl; cout<<"5.for內的a="<<a<<endl; for(a=2;a<=3;a++)//誤用 cout<<"6.for內的a="<<a<<endl; cout<<"7.for內的a="<<a<<endl; if(c>2){ int a; a=1; cout<<"8.if內a="<<a<<endl; } cout<<"9.for內的a="<<a<<endl; return 0; } void aa() { int c,d; c=3;//aa內的C cout<<"1.aa內的c="<<c<<endl; } void bb() { a=8;//全域a } ``` 輸出結果 1.aa der c=3 2.main der c=5 3.global variable a=8 4.for der a=2 4.for der a=3 5.for der a=8 6.for der a=2 6.for der a=3 7.for der a=4 8.if der a=1 9.for der Ba=4 #### 範例程式2 ```cpp= #include<iostream> using namespace std; int a=1; void aa(){ cout<<"1.a="<<a<<endl;//1 int a=2; cout<<"2.a="<<a<<endl;//2 } void bb(){ cout<<"4.a="<<a<<endl;//1 a=3; } int main(){ aa(); cout<<"3.a="<<a<<endl;//1 bb(); cout<<"5.a="<<a<<endl;//3 return 0; } ``` 輸出結果 1.a=1 2.a=2 3.a=1 4.a=1 5.a=3 變數資料型態轉換 === `每個變數宣告後,即有屬於自己的型態,往後此變數均只能給相同型態變數儲存 若執行階段指定給不同型態的變數儲存,則稱此為型態轉換` #### ==C/C++語言中型態轉換又可分為== #### <font color="#c153">隱含轉換(Implicit Conversion)與強制轉換(Explicit Conversion)</font> ### 隱含轉換 `將值域小的型態轉為值域大的型態,稱為自動轉換或轉型(Convert)` **<font color="#a13">此種轉換系統可以自動處理並確保資料不會流失</font>** ##### ==將short轉為long,因後者的值域比前者大,所以可順利轉換== `下列敘述可將型態為long的變數a指派給型態long的變數b,且原值不會改變` >short a=23; long b; b=a; cout<<b; 結果是23 [color=#a95] ### 強制轉換 `將值域大的轉為值域小的型態,稱為強制轉換或稱鑄型(Cast)`,語法如下 >**變數1 = (變數1的型態) 變數2;**[color=#b54178] ##### 以下敘述可將型態是int的c變數指派給型態是short的d變數 >int c=23; short d; d=(short) c; cout<<d; 結果是23[color=#a19] <font color="#a09">強制轉換的風險大,可能導致資料流失或溢位</font> ##### 以下是將float型態強制轉換為short型態,將造成小數部分流失 >float e=3.4f; short f; f=(short) e; cout<<f; 結果是3[color=#e54] ##### 以下敘述將long型態的g變數轉為short,將造成溢位 >long g=32769; short h; h=(short) g; cout << h; 輸出為-32767[color=#b494] #### 範例程式 ```cpp= #include<iostream> using namespace std; int main(){ short a=10; long b; b=a; cout<<b<<endl; char b1='a'; cout<<b1<<endl; short b2; b2=(short) b1; cout<<b2<<endl; int c=20; short d; d=(short) c; cout<<d<<endl; float e=3.4f; short f; f=(short) e; cout<<f<<endl; long g=32769; short h; h=(short) g; cout<<h<<endl; return 0; } ``` 輸出結果 10 a 97 20 3 -32767 運算子 === `所謂運算子(Operator),指的是可以對運算元(Operand)執行特定功能的特殊符號` >運算子一般分為五大類: 指派(Assignment)運算子 算數(Arithmetic)運算子 邏輯 (Logical) 運算子 關係(Relational)運算子 位元 (Bitwise) 運算子 [color=#b65656] #### 每種運算子又可再細分為 + **一元(Unary)運算子>>只需要一個運算元就可操作** + **二元(Binary)運算子>>需要兩個運算才可操作** #### ==優先順序決定同一式子擁有多個運算子時,每個運算子進行運算的優先順序== #### ==結合率決定同一敘述中,相鄰的運算子有相同優先順序的運算子執行順序== ### 指派運算子(Assignment Operator) `指派運算子的符號為(=),其作用為將運算符號右邊運算式的值指派給運算符號左邊的運算元` ##### EX: >int sum=0,a=3,b=5; sum=a+b;//將a+b指派給sum[color=#b34] ***<font color="#a026">上述與數學的等號是不同的,所以不要懷疑為何0=8 其次是不能將常數放在指派運算子的左邊***</font> ##### EX: >8=x;//不合法敘述 x=8//合法敘述 [color=#f53] ### 算數運算子(Arithmetic Operator) `算術運算子用來執行一般數學運算` #### 包含 :::info + 正負數 (+/-) + 加 (+) + 減 (-) + 乘 (*) + 除 (/) + 取餘數 (%) + 遞增 (++) + 遞減 (--) ::: | 運算子 | 定義 | 優先順序 | 結合率 | | :---------: | :------: | :-----------:| :----------:| | ++/-- | 遞增/遞減 | 1 | 由左而右| | +/- | 正負號,一元運算子 | 2 | 由右而左 | | * | 乘法運算 | 4 | 由左而右 | | / | 除法運算(商的型態同被除數) | 4 | 由左而右 | | % | 求餘數(Modulus) | 4 | 由左而右 | | +/- | 加法/減法運算 | 5 | 由左而右 | #### 範例程式 ```cpp= #include<iostream> using namespace std; int main(){ int x=5,y=4; float z=5; cout<<"1="<<x+z<<endl; //5+5 cout<<"2="<<x-z<<endl; //5-5 cout<<"3="<<x*z<<endl; //5*5 cout<<"4="<<y/z<<endl; //4/5取商 //這裡的z是浮點數 cout<<"5="<<x/y<<endl; //5/4取商 //若不是浮點數不會輸出小數後位數 cout<<"6="<<x%y<<endl; //5/4取餘數 cout<<"7="<<-x+y/z<<endl; //-5+4/5 cout<<"8="<<x-y%y*z<<endl; //5-4%4*5 return 0; } ``` >輸出結果 1=10 2=0 3=25 4=0.8 5=1 6=1 7=-4.2 8=5 [color=#f99] <font color="#f18">**需要注意C/C++語言的算術運算子只有以上那些,若需要運算沒有運算子則需要運用到數學函式**</font> :::warning **例如C++沒有次方運算子(^)與開根號 要算次方的話要使用到pow()函式** >a=pow(3,2);//include<math.h>或<cmath>[color=#a77] **要算根號的話要使用到sqrt()函式** >x=sqrt(9)//include<math.h>或<cmath>[color=#a77] ::: ### 遞增(++)及遞減(- -) `這兩個運算子又分為前置與後置` #### 前置是在運算子之前 EX: >a=1; ++a; cout<<a<<endl;//2[color=#f90] #### 後置是運算子在運算元後 ==不論 \++a,a++都是將值加1放回a,但是兩個執行結果還是有差異的== EX: >a=1; b=++a;//先執行a=a+1;在執行b=a; 輸出 a=2 b=2[color=#a10] #### 和 >a=1; b=a++;先執行b=a;在執行a=a+1; 輸出 a=2 b=1[color=#f20] **其a值均會加1,但b值會有差異,前置b值會得到+1的結果,後者能得到原a值** #### 範例程式 ```cpp= #include<iostream> using namespace std; int main(){ int a=1; int b,d,r,e; b=++a;//a=1+1=2=b d=++a;//此時a是2,a=2+1=d e=a++;//a還是2,e=a=2,2+1=3=a r=a++;//a現在是3,r=a=3,3+1=4=a cout<<b<<endl; cout<<d<<endl; cout<<e<<endl; cout<<r<<endl; return 0; } ``` 輸出結果 2 3 3 4 ### 關係運算子(Relational Operator)或稱比較運算子(Comparison Operator) `用於資料之間的大小比較的結果可得到int型別的1(True)或0(False)` EX: >if(a==b);//比較ab是否相等[color=#d48] | 運算子 | 定義 | 優先順序 | 結合率 | | :---------: | :------: | :-----------:| :----------:| | < | 小於 | 6 | 由左而右| | > | 大於 | 6 | 由左而右 | | <= | 小於等於 | 6 | 由左而右 | | >= | 大於等於 | 6 | 由左而右 | | == | 等於 | 7 | 由左而右 | | != | 不等於 | 7 | 由左而右 | #### 範例程式 ```cpp= #include<iostream> using namespace std; int main(){ int a,b,c; a=7>3; cout<<a<<endl;//T a=3>=7; cout<<a<<endl;//F b=7; c=3; a=b==c; cout<<a<<endl;//F b=7; c=3;a=b!=c; cout<<a<<endl;//T return 0; } ``` >輸出結果 1 0 0 1 [color=#a08] ### 邏輯運算子(Logical Operator) `當同一個運算式要同時存在兩個以上比較運算子,每兩個比較運算子之間必須使用邏輯運算子連結` | 運算子 | 定義 | 優先順序 | 結合率 | | :---------: | :------: | :-----------:| :----------:| | ! | 一元邏輯補數運算(NOT) | 2 | 由右而左 | | & | 完全評估的AND運算 | 8 | 由左而右 | | ^ | 完全評估的XOR運算 | 8 | 由左而右 | |\| | 完全評估的OR運算 | 8 | 由左而右 | | && | 快捷的AND運算 | 9 | 由左而右 | |\|\|| 快捷的OR運算 | 9 | 由左而右 | #### 範例程式 ```cpp= #include<iostream> using namespace std; int main(){ int a,b,x,y; x=5; y=4; a=x>y & y==3; //T & F = F cout<<a<<endl; b=x>3 || y<5; cout<<b<<endl; //T | T = T return 0; } ``` >輸出結果 0 1 [color=#c38] ___ ##### 完全評估系列的運算子==一定會把兩個關係運算子拿來運算== ***相反地*** #### 快捷系列的運算子==會先算出第一個關係運算子的值== **如果這個值已經可以決定出整個運算式的結果** **==快捷系統的運算子就不會對第二個關係運算子進行運算==** EX: >boolean1=(3>7)&(5>2); boolean2=(3>7)&&(5>2);//比boolean1更快完成運算 [color=#f49] ## 範例實作 :::danger 1.若有一數學式,判斷x是否滿足1<x<=6,請轉換C/C++敘述 2.若有一數學式,同時判斷4個變數是否滿足(a1/a2)=(b1/b2),請轉換C/C ++敘述 3.(a1/a2)=(b1/b2)!=(c1/c2)又如何表示 (記得要自己打過程式,題目沒有標準答案der) ::: __________________________ ```cpp= //第1題 #include<iostream> using namespace std; int main(){ int x; cin>>x; x=x>1 & x<=6; cout<<x<<endl; return 0; } ``` ```cpp= //第二題 #include<iostream> using namespace std; int main(){ int a1,a2,b1,b2; int A; cin >> a1; cin >> a2; cin >> b1; cin >> b2; A=(a1/a2) == (b1/b2); cout<<A; } ``` ```cpp= //第3題 #include<iostream> using namespace std; int main(){ int a1,a2,b1,b2,c1,c2; cin >> a1; cin >> a2; cin >> b1; cin >> b2; cin >> c1; cin >> c2; if((a1/a2)==(b1/b2)!=(c1/c2)){ cout<<"T"; } else{ cout<<"F"; } return 0; } ``` _____________________________ ### 複合指派運算子 `結合指派與算術、關係、邏輯運算子` ***這是C/C++特有的運算子*** ##### EX: >sum=sum+5; 又等於 sum+=5;[color=#c87] | 運算子 | 定義 | 優先順序 | 結合率 | | :---------: | :------: | :-----------:| :----------:| | = | 指派設定內容 | 11 | 由右而左 | | += | 相加後再設定內容 | 11 | 由右而左 | | -= | 相減後再設定內容 | 11 | 由右而左 | | * | 相乘後再設定內容 | 11 | 由右而左 | | /= | 相除後再設定內容 | 11 | 由右而左 | | &= | AND運算後再設定內容 | 11 | 由右而左 | | \|= | OR運算後再設定內容 | 11 | 由右而左 | | ^= | XOR運算後再設定內容 | 11 | 由右而左 | ------------------------------- ### 位元操作運算子(Bitwise Operator) `位元(Bitwise)操作運算子是將所運算的整數,先轉為二進制,在逐位元進行運算` **可分為** >位移(shift)運算子與布林運算子 位移運算子是逐位元向左或是向右移 布林運算子則可以逐位元進行布林運算[color=#a347] | 運算子 | 定義 | 優先順序 | 結合率 | | :---------: | :------: | :-----------:| :----------:| | ~ | 對各位元進行補數運算 | 2 | 由右而左 | | << | 考慮正負位元的向左位元 | 5 | 由左而右| | >> | 考慮正負位元的向右位元 | 5 | 由左而右 | | & | 位元AND運算 | 2 | 由左而右 | | \| | 位元OR運算 | 8 | 由左而右 | | ^ | 位元XOR運算 | 8 | 由左而右 | | <<= | 向左位移之後再指派內容 | 11 | 由左而右 | | >>= | 向右位移之後再指派內容 | 11 | 由左而右 | #### 數位邏輯幫大家整理一下 0 >>True 1 >>Falst ____________________ :::success AND >>遇 0 則 0 NAND >>遇 0 則 1 OR >>遇 1 則 1 NOR >>遇 1 則 0 XOR >>相同為 0 不同為 1 NXOR >>相同為 1 不同為 0 ::: ____________________ ```cpp= #include<iostream> using namespace std; int main(){ int i,j,k; i=1; //0000 0001 i=~i;//1111 1110取2補數 cout<<"1="<<i<<endl;//-2(10進制) i=6; //i=00000110 i=i<<2;//i=00011000 cout<<"2="<<i<<endl; i=i>>3; cout<<"3="<<i<<endl;//i=00000011 i=3; //i=00000011 j=2; //j=00000010 k=i & j;//k=00000010//遇0則0 cout<<"4="<<k<<endl; k=i | j;//k=00000011//遇1則1 cout<<"5="<<k<<endl; k=i ^ j;//k=00000001//相同為0不同為1 cout<<"6="<<k<<endl; return 0; } ``` 輸出結果 1=-2 2=24 3=3 4=2 5=3 6=1 __________ ### 運算子的優先順序 `同一敘述若同時有多個運算子,此時需定義運算子的優先順序` >x=a+b*c; 由以上各運算子的「優先順序」可知,乘號(*)的優先順序是第4而加號(+)則是第5 **x=(a+(b*c));//和上述結果相同** #### 同理 >x=a>b & b>z; #### 同義 >x=(a>b) & (b>z); #### 下面式子左右結果是相同的 | x=x+++2; | x=(x++)+2; | | :---------: | :---------: | | x=x+y*2+z++; | x=((x+(y*2))+(z++)); | | z=x>2 & y>3; | z=((x>2)&(y>3)); | ### 範例程式 ```cpp= #include<iostream> using namespace std; int main(){ int a,b,c; int x,y,z; x=2; x=x+++2; cout<<"X1="<<x<<endl; x=1;y=3;z=5; x=x+y*2+z++;//1+3*2+5=12,x=12=Z++ cout<<"X2="<<x<<endl; x=1;y=4; z=x>2 & y>3; cout<<z<<endl; return 0; } ``` ### 運算子的結合律 `當同一敘述,相鄰的運算子擁有相同優先順序的運算子,此時即需定運算子是左結合或右結合` >x=z-b-c;[color=#a08] **同是減號(-),優先順序相同,此時就要靠定義結合律,減法結合律是由左至右** >x=((a-b)-c);[color=#a08] ###### 而 >x=y=z=2;[color=#a08] ###### 指派運算子的結合律由左至右,上式同義於 >(x=(y=(z=2)));[color=#a08] ```cpp= #include<iostream> using namespace std; int main(){ int a,b,c; int x,y,z; a=2; b=3; c=4; x=a-b-c; cout<<x<<endl; x=y=z=2; cout<<"x="<<x<<endl; cout<<"y="<<y<<endl; cout<<"z="<<z<<endl; return 0; } ``` 輸出結果 -5 x=2 y=2 z=2 運算式 === `任何一個可求得一個值的式子,稱為一個運算式(Expression) 例如5+3會回傳一個數值,所以5+3是一個運算式` **這些運算式通常放在cout<<運算式,<font color="#f18">一般而言可以放在等號右邊的東西</font>,都可以稱為運算式** _______________ ### 敘述(Statement) #### 凡是控制執行的順序、對運算式取值或不做任何事均可稱為敘述 所有的敘述都要以分號(;)作結束,例如 >sum=sum+1;[color=#a90467] **==於C/C++語言中,若前一個敘述未以分號結束,則錯誤訊息通常會出現在下一個敘述的開頭==** ________________ ### 敘述區塊(Block Statement)或複合敘述(Compound Statement) `在任何可以放上單一敘述的地方,你都可以放上敘述區塊,一個複合敘述是由兩個大括號組合而成` **<font color="#a08">但大括號後不可再加分號</font>** >{ t=a; a=b; b=t; }[color=#f49] __________________ ### 註解(Comments) `適當的程式註解才能增加程式可讀性` > /\*我是註解*/ //我是註解[color=#c39429] #### 上式<font color="#f18">/\*符號以後的字串視為註解,編譯程式不予處理,直到遇到*/</font>為止 #### 還有同一列中,雙斜線(//)後面也視為註解,編譯器均不予處理 >x=x+3; /* x值加3 */ >sum=sum+y; //將y值加至sum[color=#b499] #### ==前者因為可超過兩列,較適合編寫較長的註解== #### ==後者僅能寫在同一列== ___________________ ### 縮排與空行 `除了適當的註解,程式設計應善用縮排與空行,才可以使程式讓人易於閱讀 因為有了縮排,程式才有了層次感,其次,空行則可使段落更加明顯` #### 程式架構介紹 **C/C++程式架構如下:** #### <font color="#f18">大致分為四大區塊,分別是</font> + 函式引用區 + 宣告區(類別、函式、全域變數宣告區) + 主程式區 + 類別、函式實作區 | 編號 | 標題 | 程式 | | :--------: | :-------------------------------: | :---------- | | 一 | 函式引用區(引入所需標頭檔) | #include <iostream>、#include<math.h> | | 二 | 命名空間、類別、函式、全域變數宣告區 | using namespace std; <br>int add(int a,int b);<br>int c; | | 三 | 主程式區main() | int main(){ <br>c=add(6,2);<br> cout<<c; <br>return 0;<br> } | | 四 | 類別、函式實作區 | int add(int a,int b){<br>int c;<br> c=a+b;<br> return ( c );<br>} | ## 範例程式 ```cpp= #include <iostream> #include<math.h>//函式引用區 using namespace std;//命名空間、類別、函式、全域變數宣告區 int add(int a,int b);//函式宣告 int c; int main(){ //主程式區 c=add(6,4); //6+4 cout<<c; //10 return 0; } int add(int a,int b){//類別或函式實作區 int c; c=a+b; return (c); } ``` #### 但是函式、類別實作區若與主程式區調換,則函式與類別不用宣告 ```cpp= #include <iostream> #include<math.h>//函式引用區 using namespace std;//命名空間、類別、函式、全域變數宣告區 int add(int a,int b);//函式宣告 int c; int add(int a,int b){//類別或函式實作區 //a,b不可省略 int c; c=a+b; return (c); } int main(){ //主程式區 c=add(6,4); //6+4 cout<<c; //10 return 0; } ``` 兩種寫法輸出都是10 實例應用 === ==**記得要自己想過寫過呦**== #### 第一題 `試寫一程式,可輸入長方形的長與寬,並計算周長與面積` :::info 長方形面積公式>>長乘寬 長方形周長公式>>2(長加寬) ::: ```cpp= #include<iostream> using namespace std; int main(){ int a,b,c,d; cout<<"Input length and width:"; cin >>a>>b;//a為長、b為寬 c = 2*(a+b); //周長 d = a*b;//面積 cout<<"c="<<c<<endl; cout<<"d="<<d<<endl; return 0; } ``` #### 第二題 `輸入長方體長寬高計算表面積與體積` :::success 長方體表面積=(長x寬+寬x高+高x長)x2 長方體的體積公式=長×寬×高 ::: ```cpp= #include<iostream> using namespace std; int main(){ int a,b,c;//長:a 寬:b 高:c int x,y; cout<<"Input length, width and height"; cin>>a>>b>>c; x=(a*b+b*c+c*a)*2;//面積 y=a*b*c;//體積 cout<<"rectangular Volume="<<y<<endl; cout<<"rectangular area="<<x; return 0; } ``` #### 第三題 **試寫一程式,滿足以下條件 1.可以輸入兩個座標 2.計算兩點座標距離 3.輸出此兩點距離** ```cpp= #include<iostream> #include<math.h> using namespace std; int main(){ int x1,x2,y1,y2; double d;//距離 cout<<"input x1,x2,y1,y2"<<endl; cin>>x1>>x2>>y1>>y2; d=sqrt(pow((x1-x2),2)+pow((y1-y2),2)); //pow是次方 sqrt是開根號 cout<<"The distance of the two points is:"<<d<<endl; return 0; } ``` #### 第四題 **試寫一程式,可輸入三角形三邊長a、b、c求面積** ```cpp= #include<iostream> #include<math.h> using namespace std; int main(){ int a,b,c; double d,e; cout<<"Input triangle "<<endl; cin>>a>>b>>c; d=(a+b+c)/2; e=sqrt(d*(d-a)*(d-b)*(d-c)); cout<<"The triangle area is:"<<e<<endl; return 0; } ``` ==這裡補充一下演算法則== **兩個數要交換,就如同兩杯水要交換 假設你有兩個杯子的水(分別為糖水a、鹽水b),交換其內容,方法如下** >1.先找來空杯子t 2.將a杯子的水倒入t杯子 t=a; 3.將b杯子的水倒入a杯子 a=b; 4.將t杯子倒入b杯子,而完成兩杯子的交換 b=t;[color=#a53] **其次,若未先找來空杯子t,而直接將b杯子的水往a杯子倒,再將a杯子的水往b杯子倒** >a=b; b=a;[color=#f46] **則執行a=b時,如果這時a杯中糖水已經沒了,此時在執行b=a,會出現錯誤結果** #### 第五題 >試寫一程式,滿足以下條件 1.可以輸入兩個數字 2.交換此兩個數字 3.輸出交換的結果 [color=#f50] ```cpp=! #include<iostream> using namespace std; int main(){ int a,b,z; //cout<<"Input 2 digit:"<<endl; //cin>>a>>b; //試比較兩種輸入輸出 printf("input a:"); scanf("%d",&a);// %d是整數 &取得a變數位址 printf("input b:"); scanf("%d",&b); z=a; a=b; b=z; //cout<<"Exchange import numerical a,b aftermath:<<endl<<"a="<<a<<endl<<"b="<<b<<endl; printf("after swap a=%d b=%d",a,b); return 0; } ``` #### 第六題 **試寫一程式,可以輸入三個數,並將1交給2、2交給3、3交給1並輸出三個數的結果** ```cpp=! #include<iostream> using namespace std; int main(){ int a,b,c; //a>>1,b>>2,c>>3 cout<<"input 3 numberal:"<<endl; cin>>a>>b>>c; b=a; c=b; a=c; printf("Exchange import numerical a,b,c aftermath: a=%d b=%d c=%d ",a,b,c); return 0; } //輸出結果有接力棒的fu ``` #### 第七題 **假設某次考試成績如下55、66、77、88、99** >1.試寫一程式輸入以上資料 2.輸入以上資料 3.計算總和 4.輸出總和與平均[color=#f568] ```cpp= #include<iostream> using namespace std; int main(){ int a,b,c,d,e; double x,y; a=55; b=66; c=77; d=88; e=99; //cout<<"input 5 achievement"<<endl;//如果是手動輸入成績的話 //cin>>a>>b>>c>>d>>e; x=a+b+c+d+e; y=x/5; cout<<"sum = "<<x<<endl; cout<<"averagely = "<<y; return 0; } ``` ==補充一下== :::danger 如果遇到大量需要輸入的資料千萬不要這樣一個一個慢慢輸入呦 想知道如何撰寫這樣的程式,會在迴圈與陣列的章節說到 ::: #### 第八題 **兩點式,兩點可決定一直線(ax+by+c=0) 試寫一程式,可輸入兩個二為座標,並求出此直線方程式** ***例如:輸入(2,1)、(4、6)則直線方程式為5x-2y-8=0*** ```cpp #include<iostream> #include<math.h> using namespace std; int main(){ int x1,y1,x2,y2; int a,b,c,x,y; cout<<"input x1,y1"<<endl; cin>>x1>>y1; cout<<"input x2,y2"<<endl; cin>>x2>>y2; x=x2-x1; y=y2-y1; a=y; b=-x; c=-y*x1+x*y1; cout<<a<<"x+"<<b<<"y+"<<c<<"=0"; return 0; } ``` 應用複習 == **1.試寫一程式,可輸入一個一元二次方程式,求解(設本例假設方程式有二解)** :::info ◎用公式法解一元二次方程式 ax^2 + bx + c = 0 的步驟如下: (一) 找出二次項係數 a,一次項係數 b,常數項 c。 (二) 算出 b^2-4ac 的值。 (三) 若 b^2-4ac > 0,則 x =−𝑏±√𝑏^2−4𝑎𝑐/2𝑎 若 b^2-4ac = 0,則 x =−𝑏/2𝑎(重根) 。 若 b^2-4ac < 0,則 x 無解。(在國中階段無解) ::: ==範例輸出2x^2-7x+3=0,x1=3,x2=0.5== ```cpp= #include<iostream> #include<math.h> using namespace std; int main(){ double a,b,c,d; double x1,x2,com; cout<<"input abc "<<endl; cin>>a>>b>>c; // 0==(pow((a*x1),2))+(b*x2)+c; if (b*b-4*a*c>0){ d=sqrt(b*b-4*a*c); x1=(-b+d)/(2*a); x2=(-b-d)/(2*a); } if (b*b-4*a*c==0){ // d2=sqrt(b*b-4*a*c); x1=-b/(2*a); x2=-b/(2*a); } cout<<"x1="<<x1<<endl; cout<<"x2="<<x2; } ``` **2.試寫一程式,可以輸入一個二元一次方程式,求其解(本例假設方程式洽有一解)** ==提示:使用克拉瑪公式== ```cpp= #include<iostream> #include<math.h> using namespace std; int main(){ double a1,a2,b1,b2,c1,c2,d; double x,y; cout<<"input a1_b1_c1_a2_b2_c2"<<endl; cin>>a1>>b1>>c1>>a2>>b2>>c2; // c1=((a1*x)+(b1*y)); // c2=((a2*x)+(b2*y)); d=((a1*b2)-a2*b1); x=((c1*b2)-c2*b1)/d; y=((a1*c2)-a2*c1)/d; cout<<"x="<<x<<endl; cout<<"y="<<y<<endl; } ``` **3.試寫一程式,可以輸入一個三元一次方程式,並求其解(本例假設所輸入的方程式洽有一解)** ```cpp=! #include<iostream> //#include<cmath> using namespace std; int main(){ double a1,a2,a3,b1,b2,b3,c1,c2,c3; double d1,d2,d3,e,x,y,z; cout<<"input a1_b1_c1_d1_a2_b2_c2_d2_a3_b3_c3_d3"<<endl; cin>>a1>>b1>>c1>>d1>>a2>>b2>>c2>>d2>>a3>>b3>>c3>>d3; e=((a1*b2*c3)+(a2*b3*c1)+(a3*b1*c2)-(a3*b2*c1)-(b3*c2*a1)-(c3*b1*a2)); z=((a1*b2*d3)+(b1*d2*a3)+(d1*b3*a2)-(d1*b2*a3)-(d2*b3*a1)-(d3*b1*a2))/e; x=((d1*b2*c3)+(b1*c2*d3)+(c1*b3*d2)-(c1*b2*d3)-(c2*b3*d1)-(c3*d2*b1))/e; y=((a1*d2*c3)+(d1*c2*a3)+(c1*d3*a2)-(c1*d2*a3)-(c2*d3*a1)-(c3*d1*a2))/e; cout<<"x="<<x<<endl; cout<<"y="<<y<<endl; cout<<"z="<<z; } ``` **4.計算自由落體的距離與時間關係,公式為d=v0t+gt^2/2** ```cpp= #include<iostream> #include<cmath> using namespace std; int main(){ double v0,t,g,d; cout<<"input v0,t,g"<<endl; cin>>v0>>t>>g; d=v0*t+(g*t*t)/2; cout<<"d="<<d; return 0; } ``` **5.請分別輸入1個0到9的整數,並將它合併為1個整數** ==例如:輸入1、2、3、4則輸出1234== ```cpp= #include<iostream> using namespace std; int main(){ int i; cin>>i; cout<<"your input is:"<<i<<endl; } ```

Import from clipboard

Paste your markdown or webpage here...

Advanced permission required

Your current role can only read. Ask the system administrator to acquire write and comment permission.

This team is disabled

Sorry, this team is disabled. You can't edit this note.

This note is locked

Sorry, only owner can edit this note.

Reach the limit

Sorry, you've reached the max length this note can be.
Please reduce the content or divide it to more notes, thank you!

Import from Gist

Import from Snippet

or

Export to Snippet

Are you sure?

Do you really want to delete this note?
All users will lose their connection.

Create a note from template

Create a note from template

Oops...
This template has been removed or transferred.
Upgrade
All
  • All
  • Team
No template.

Create a template

Upgrade

Delete template

Do you really want to delete this template?
Turn this template into a regular note and keep its content, versions, and comments.

This page need refresh

You have an incompatible client version.
Refresh to update.
New version available!
See releases notes here
Refresh to enjoy new features.
Your user state has changed.
Refresh to load new user state.

Sign in

Forgot password

or

By clicking below, you agree to our terms of service.

Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
Wallet ( )
Connect another wallet

New to HackMD? Sign up

Help

  • English
  • 中文
  • Français
  • Deutsch
  • 日本語
  • Español
  • Català
  • Ελληνικά
  • Português
  • italiano
  • Türkçe
  • Русский
  • Nederlands
  • hrvatski jezik
  • język polski
  • Українська
  • हिन्दी
  • svenska
  • Esperanto
  • dansk

Documents

Help & Tutorial

How to use Book mode

Slide Example

API Docs

Edit in VSCode

Install browser extension

Contacts

Feedback

Discord

Send us email

Resources

Releases

Pricing

Blog

Policy

Terms

Privacy

Cheatsheet

Syntax Example Reference
# Header Header 基本排版
- Unordered List
  • Unordered List
1. Ordered List
  1. Ordered List
- [ ] Todo List
  • Todo List
> Blockquote
Blockquote
**Bold font** Bold font
*Italics font* Italics font
~~Strikethrough~~ Strikethrough
19^th^ 19th
H~2~O H2O
++Inserted text++ Inserted text
==Marked text== Marked text
[link text](https:// "title") Link
![image alt](https:// "title") Image
`Code` Code 在筆記中貼入程式碼
```javascript
var i = 0;
```
var i = 0;
:smile: :smile: Emoji list
{%youtube youtube_id %} Externals
$L^aT_eX$ LaTeX
:::info
This is a alert area.
:::

This is a alert area.

Versions and GitHub Sync
Get Full History Access

  • Edit version name
  • Delete

revision author avatar     named on  

More Less

Note content is identical to the latest version.
Compare
    Choose a version
    No search result
    Version not found
Sign in to link this note to GitHub
Learn more
This note is not linked with GitHub
 

Feedback

Submission failed, please try again

Thanks for your support.

On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

Please give us some advice and help us improve HackMD.

 

Thanks for your feedback

Remove version name

Do you want to remove this version name and description?

Transfer ownership

Transfer to
    Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

      Link with GitHub

      Please authorize HackMD on GitHub
      • Please sign in to GitHub and install the HackMD app on your GitHub repo.
      • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
      Learn more  Sign in to GitHub

      Push the note to GitHub Push to GitHub Pull a file from GitHub

        Authorize again
       

      Choose which file to push to

      Select repo
      Refresh Authorize more repos
      Select branch
      Select file
      Select branch
      Choose version(s) to push
      • Save a new version and push
      • Choose from existing versions
      Include title and tags
      Available push count

      Pull from GitHub

       
      File from GitHub
      File from HackMD

      GitHub Link Settings

      File linked

      Linked by
      File path
      Last synced branch
      Available push count

      Danger Zone

      Unlink
      You will no longer receive notification when GitHub file changes after unlink.

      Syncing

      Push failed

      Push successfully