by 程教們
程教們:
有問題可以問我們~~
line id: sandy930314
ig: @zsisc27_cyt
line id: apple310en
ig: @zsisc27_ining
line id: dora921125
ig: @zsisc27_jumping
上課規範啦--你最好給我認真聽不然就ㄉㄐㄉㄍㄍ
電腦教室不准 正大光明||偷偷 吃||喝 東西
請準時到電教二,遲到需說明原因
不可以抄襲他人程式碼,不會就問!!
有問題直接 舉手||大叫 ,基本上都會回答
可以小聲討論,不要影響到他人
上課時盡量不要 睡覺||滑手機||寫中叢(其他作業)
p.s. 當然 如果你都會了且解完指定題目,就隨你~
最感興趣的部分 (ㄅ?
每堂社課上課完都會有 有獎徵答
but only 前三名 才有
玩過幾次ㄌ應該瞭ㄅ
所以想要有禮物的請認真聽課 !!!
時程規劃
by h94usu/6
#class1_0924
>> if ( 有雞蛋 ) 買 6 顆蘋果;
else 買一顆;
今晚,我想來點C++...
變數宣告
次方
大括號
分號
int x;
x = 924;
a = a*a*a; //或
for (int i=0; i<3; i++) a=a*a;
if (date == "0924") {
cout << "First class!\n";
}
string str;
str = "Hello";
cout << str + "World!\n";
x = 924;
a = a**3;
if date == "0924":
print("First class!")
str = "Hello"
print(str + " world!")
C++
python
所以所以 希望你在星期四的社課中
即使沒有完全聽懂 也能收穫良多!!
希望大家都能寫出可讀性高
且前後一致的code
該縮牌就縮排
不要擠成一坨
在哪打扣 ??
Code::Blocks官網連結: http://www.codeblocks.org/
Code::Blocks官網連結: http://www.codeblocks.org/
Code::Blocks官網連結: http://www.codeblocks.org/
Code::Blocks官網連結: http://www.codeblocks.org/
Code::Blocks官網連結: http://www.codeblocks.org/
Code::Blocks官網連結: http://www.codeblocks.org/
就從頭按「同意」、「允許」到尾
Code::Blocks官網連結: http://www.codeblocks.org/
你想要的位置,通常預設就好
Code::Blocks官網連結: http://www.codeblocks.org/
建立新檔案(Empty file),也可以新增專案(Create a new project)
Code::Blocks官網連結: http://www.codeblocks.org/
記得儲存(才會變顏色xd) p.s. ctrl+s是個好用的東西
副檔名記得調成 .cpp 檔
Code::Blocks官網連結: http://www.codeblocks.org/
顏色變了就代表儲完存ㄌ!!! 開始開心打扣ㄅ
Code::Blocks官網連結: http://www.codeblocks.org/
編譯 + 執行 (compile+run)
「跟世界打招呼」
p.s.為啥都是跟世界說哈囉, "hello my friend!" 感覺也還不錯ㄅ...
#include<iostream>
using namespace std;
int main () {
cout << "Hello world";
return 0;
}
#include<iostream> //引入C++, 輸出輸入的函式庫 (input output stream)
using namespace std; //讓你少打一些code的東西
int main () { //主函式
return 0; //可加可不加, 加一下比較好, 之後在教函數時就會瞭啦
} //大括號!!
"//" 兩個反斜線後面可以加註解 讓你記得你之前在幹嘛 也增加程式可讀性!!
有個萬用標頭檔 "#include <bits/stdc++.h>" 之後再談談
#include<iostream>
using namespace std;
int main () {
cout << "Hello world"; //加這行
return 0;
}
std::cout << "Hello world";
cout << "字";
c++ 的 output
輸出用 << (小於)
要輸出的字用 " " (雙引號)框住
#include<bits/stdc++.h>
using namespace std;
int main () {
string name;
cin >> name;
cout << "Hello, " << name << "!";
return 0;
}
std::cin >> name;
cin >> 變數;
c++ 的 input
輸入用 >> (大於)
要輸入值進去的變數
#include<iostream>
#include<string>
using namespace std;
int main() {
string str;
cin >> str;
cout << "hello, " << str;
return 0;
}
by h94usu/6
#class2_1008
一個不能忽視的存在 -- 變數
a^2+2*a*b+b^2=(a+b)^2
x+y=4, x-y=2 x=3, y=2
y=f(x)=ax+b
a^2+b^2=c^2
...
int a = -2147483648;
char _b = 'b';
long long int c = 9223372036854775807;
float d = 3.1415926; //7位
double e = 3.141592653589793; //15位
...
(但是好棒棒的編譯器大哥其實會幫你用 粗體 或 不同顏色 標起來)
以後會講這個概念
型態 | 中文意思 | 英文字義 | 儲存空間(位元) | 數值範圍 |
---|---|---|---|---|
int | 整數 | Integer | 4 bytes/ 32 bits | -2^31~2^31-1 (10 位數) |
long long | 長整數 | long long integer | 8 bytes/ 64 bits | -2^63~2^63-1 (19 位數) |
float | 浮點數(小數) | floating point | 4 bytes/ 32 bits | 3.4E +/- 38 (7 位數) |
double | 倍精度浮點數 | double | 8 bytes/ 64 bits | 1.7E +/- 308 (15 位數) |
char | 字元(半形字) | Character | 1 byte/ 8 bits | 0~255(ASCII) |
bool | 布林(是非) | boolean | 1 byte/ 8 bits | false, true, 0~255 |
小數點後XX位
布林值 false=0, true=1(非0即為true)
int num_1, num_2, num_3;
//宣告整數型, 分別叫num_1, num_2, num_3的變數
int num_4 = 3;
//宣告一個整數型, 叫num_4的變數, 並分配一個整數給它(賦值)
num_1 = 1; //賦值
cin>> num_2;
//輸入一個整數進num_2
num_3 = num_1 + num_2
cout<< num_1<<" "<< num_2<< " "<< num_3<< " "<<num_4;
//分別輸出值
Q: 要輸入己才能輸出"1 1 2 3"的費式數列??
A: 1
宣告 賦值 輸入/ 輸出
int var; //宣告一個名為var的整數
cin >> var; //把值輸進var
cout << var; //輸出var
char c = 'C'; //宣告名為c的字元,並賦值'C'
cout << c << " " << c; //輸出C C
double a, b = 10.08;
//宣告名為a、b的,並於b賦值10.08
a = b; //於a賦值b的值,也就是 a=10.08
cout << a << b; //輸出10.0810.08
bool _b = false; //宣告名為_b的布林值,並賦值false
_b = true; //將_b改為true
cout << "bool" << _b; //輸出bool1
#include<iostream>
using namespace std;
int main() {
string str;
cin >> str;
cout << "hello, " << str;
return 0;
}
小學就會的 1+1 = 王田二 -- 運算子
#include<iostream>
using namespace std;
int main() {
int a, b;
cout << a+b;
return 0;
}
#include<iostream>
using namespace std;
int main() {
int a, b;
int ans;
ans = a + b;
cout << ans;
return 0;
}
#include<iostream>
using namespace std;
int main() {
int M, D;
cin >> M >> D;
if ((M*2+D)%3 == 0) cout << "普通";
else if ((M*2+D)%3 == 1) cout << "吉";
else cout << "大吉";
return 0;
}
by 阿問
#class3_1022
if (我就爛 == true) -- 條件判斷
>如果今天沒有下雨,那麼我就可以去打球
如果(今天沒有下雨){
去打球;
}
if(!週會) everyone=happy; -- 單向選擇
if(要判斷的條件){
//條件成立時要執行的指令
}
if(score>=60){
cout<<"PASS";
}
if(score>=60){
cout<<"PASS";
credits+=1;
}
#include <iostreram>
using namespace std;
int main(){
int score,credits=0;
cin>>score;
if(score>=60){
cout<<"PASS";
credits+=1;
}
return 0;
}
if(7>5&&3<=4){
cout<<"YES";
}
if(1<0||5==5){
cout<<"YES";
}
if(!週會) happy; else sad; -- 雙向選擇
if(要判斷的條件){
//條件成立時要執行的指令
}
else{
//條件不成立時要執行的指令
}
if(score>=60){
cout<<"PASS";
}
else{
cout<<"FAIL";
}
#include <iostreram>
using namespace std;
int main(){
int score;
cin>>score;
if(score>=60){
cout<<"PASS";
}
else{
cout<<"FAIL";
}
return 0;
}
if(!週會) :D ; else if(短) : ) ; else : ( ; -- 多向選擇
if(條件1){
//條件1成立時要執行的指令
}
else if(條件2){
//不滿足條件1但條件2成立時要執行的指令
}
else{
//以上條件皆不成立時要執行的指令
}
if(score>=80){
cout<<"excellent";
}
else if(score>=60){
cout<<"good";
}
else{
cout<<"keep going";
}
#include <iostream>
using namespace std;
int main(){
int score;
cin>>score;
if(score>=80){
cout<<"excellent";
}
else if(score>=60){
cout<<"good";
}
else{
cout<<"keep going";
}
return 0;
}
if(條件1){
//條件1成立時要執行的指令
}
else if(條件2){
//條件2成立時要執行的指令
}
else if(條件3){
//條件3成立時要執行的指令
}
. . .
else{
//以上條件皆不成立時要執行的指令
}
在同組條件判斷中,
當上方條件成立便會執行該對應敘述,
就不會繼續執行下面的判斷了!
#include <iostream>
using namespace std;
int main(){
int score=95;
if(score<60){
cout<<"E";
}
else if(score>=60){
cout<<"D";
}
else if(score>=70){
cout<<"C";
}
else if(score>=80){
cout<<"B";
}
else{
cout<<"A";
}
return 0;
}
//D
#include <iostream>
using namespace std;
int main(){
int score=95;
if(score>=90){
cout<<"A";
}
else if(score>=80){
cout<<"B";
}
else if(score>=70){
cout<<"C";
}
else if(score>=60){
cout<<"D";
}
else{
cout<<"E";
}
return 0;
}
#include <iostream>
using namespace std;
int main(){
int score=95;
if(score>=90){
cout<<"A";
}
if(score>=80){
cout<<"B";
}
if(score>=70){
cout<<"C";
}
if(score>=60){
cout<<"D";
}
if(score<60){
cout<<"E";
}
return 0;
}
a003
d064
d065
大家有空可以練習~
a053
d066
d067
d058
【補充】
不是電動(x
>因此應用範圍較不廣泛
switch(變數名稱){
case 條件1:
//條件1成立時執行的指令
break;
case 條件2:
//條件2成立時執行的指令
break;
. . .
default:
//以上皆不成立時執行的指令
}
//條件只能為某個整數或字元,或者是整數或字元的區間
否則程式會繼續往下進行直到遇到break或程 式碼結束
整數/字元(空格)...(空格)整數/字元
int score;
cin>>score;
switch(score){
case 100: //意思為score==100
cout<<"滿分";
break;
case 60 ... 99: //包含60及99
cout<<"及格";
break;
default:
cout<<"不及格";
}
char grade;
cin>>grade;
switch(grade){
case 'A':
cout<<"90~100";
break;
case 'B':
cout<<"80~89";
break;
case 'C':
cout<<"70~79";
break;
case 'D':
cout<<"60~69";
break;
case 'E':
cout<<"0~59";
break;
case 'F' ... 'Z':
cout<<"error";
break;
}
by h94usu/6
#class4_1029
讓我們先釐清一下
讓我們先釐清一下
還有嗎???
of course!!!
#include <iostream>
using namespace std;
int main () {
cout << "again and ";
cout << "again and ";
cout << "again and ";
...
cout << "again and ";
cout << "again";
return 0;
}
ctrl+c & ctrl+v 永遠是我們的好幫手
但似乎有更快的方法??
#include <iostream>
using namespace std;
int main () {
int n;
cin >> n;
while (n--) {
cout << "again and ";
}
cout << "again";
return 0;
}
this is a loop
this is a circle
also a loop
真是個讓人又愛又恨的東西
well well well
while(condition){ //條件
statement; //內容
//do something...
}
#include<iostream>
using namespace std;
int main(){
int i = 1;
while(i <= 99){
cout << i <<endl;
i++;
}
return 0;
}
#include<iostream>
using namespace std;
int main(){
int i = 99;
while(i >= 1){
cout << i <<endl;
i--;
}
return 0;
}
#include<iostream>
using namespace std;
int main(){
int i = 99;
while(i){ //當 i 為 true // i != 0
cout << i <<endl;
i--;
}
return 0;
}
for u ~~
for((宣告)初始化變數; 條件; 更新){
statement; //內容
//do something...
}
(int) i=0
i<5
i++
#include<iostream>
using namespace std;
int main(){
for(int i = 1; i <= 99; i++){
cout << i <<endl;
}
return 0;
}
#include<iostream>
using namespace std;
int main(){
for(int i = 99; i >= 1; i--){
cout << i <<endl;
}
return 0;
}
#include<iostream>
using namespace std;
int main(){
int i = 1;
while(i <= 99){
cout << i <<endl;
i++;
}
return 0;
}
#include<iostream>
using namespace std;
int main(){
for(int i = 1; i <= 99; i++){
cout << i <<endl;
}
return 0;
}
初始化
條件式
更新 ( 遞增||遞減 )
迴圈裡有迴圈裡有迴圈...
for(int i=0; i<5; i++){ //外層迴圈
for(int j=0; j<5; j++){ //內層迴圈
cin>> array[i][j];
}
}
巢狀
1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9 1*10=10
2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18 2*10=20
3*1=3 3*2=6 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27 3*10=30
4*1=4 4*2=8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36 4*10=40
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45 5*10=50
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54 6*10=60
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63 7*10=70
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72 8*10=80
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 9*10=90
10*1=10 10*2=20 10*3=30 10*4=40 10*5=50 10*6=60 10*7=70 10*8=80 10*9=90 10*10=100
#include<iostream>
using namespace std;
int main(){
int i = 1, j = 1;
while(i <= 10){
while(j <= 10){
cout << i << "*" << j;
cout<< "=" << i*j << " " ;
j++;
}
cout << endl;
j = 1;
i++;
}
return 0;
}
"Dormammu, I've come to bargain...."
while(1){
//do something...
}
無窮
#include<iostream>
using namespace std;
int main(){
while(1) cout << "true ";
return 0;
}
dont break up, lets continue
for(int i=0; i<5; i++){
if(i==3) break;
cout<< i<<" ";
}
//0 1 2
for(int i=0; i<5; i++){
if(i==3) continue;
cout<< i<<" ";
}
//0 1 2 4
#include <iostream>
using namespace std;
int main(){
int n;
while(cin >> n){
if(n <= 0)
break;
else if(n >= 99999)
continue;
else if(n % 2 == 1)
cout << "odd" << endl;
else
cout << "even" << endl;
}
return 0;
}
one! two!!
#include<iostream>
using namesapce std;
int a=5;
int main(){
int x=1;
for(int i=0; i<3; i++){
cout<< i<< " "; //ok
cout<< x<< " "; //ok
cout<< a<< " "; //ok
}
cout<< i; //X
return 0;
}
by jumping
#class5_1112
回憶一下ㄅ
#上上週 我們上了甚麼 ??
while(condition){ //條件
statement; //內容
//do something...
}
int i=5;
while(i){
cout<< i <<" ";
i--;
}
for((宣告)初始化變數; 條件; 更新){
statement; //內容
//do something...
}
for(int i=5 ; i>=1 ; i--){
cout<<i<<" ";
}
for(int i=0; i<5; i++){ //外層迴圈
for(int j=0; j<5; j++){ //內層迴圈
cout<< i << j <<endl;
}
}
巢狀
老師你錯了 是從0開始不是1 -- 陣列
Q:如果我是天天的小老師,
今天天天要我幫他登記班上10個人的成績,
而且還規定我一定要用程式登記,
(對她就是這麼固執一定要用程式)
我可以怎麼做?
A:我可以
int s1,s2,s3,s4,s5,s6,s7,s8,s9,s10;
int s1
int s2
.........
int s100
for(int i=0;i<100;i++){
int si;
}
Q:可是今天天天說我10個人登記太快了,
他變成要我登記3個班共100個人的成績,
而且仍舊規定我要用程式登記,
我該怎麼辦呢?
A:我想我可能可以....
都不行ㄚ!!!
一維陣列
int a[10];
// 資料型態: 整數(陣列), 陣列名稱: a, 陣列大小: 10
// 沒有初始化的陣列
// 裡面也許長這樣 a = {-2147483648, 2147483657, ...}
double b[100] = {0.1, 0.1, 0.2};
// 資料型態: 浮點數(陣列), 陣列名稱: b, 陣列大小: 100
// 陣列值用大括號括
//除了初始化的3個數其他預設為0
char str[6] = {'a'};
// 資料型態: 字元(陣列), 陣列名稱: str, 陣列大小: 6
// 字元陣列會包含最後一個字元'\0', 因此開的大小要字數+1
// 初始化為str[0]為a,後面為空白
//我可以用array來儲存這100個資料!
a[0]
a[2]
s[5]
s[6]
a[1]
a[4]
a[3]
int a[7];
for(int i=0;i<7;i++) a[i]=i;
a[0]
a[2]
s[5]
s[6]
a[1]
a[4]
a[3]
0
6
5
4
3
2
1
int a[10];
cout<<a[100]<<endl;
cout<<a[1000]<<endl;
int n;
int a[n];
s[0]
s[2]
s[98]
s[99]
s[1]
.............
s[97]
int s[100];
for(int i=0;i<100;i++){
cin>>s[i];
}
by jumping
#class6_1217
多維陣列
Q:今天天天要我幫他登記班上10個人的成績,
而且越來越過分
竟然要我一次登記一個人兩科的成績
重點是叫我登記他們國文跟數學的成績
(奇怪了跟他有什麼關係)
我們可以怎麼做?
A:我可以
int chinese[10],math[10];
Q:今天天天要我幫他登記班上10個人的成績,
但竟然說要身家調查
竟然要我一次登記一個人全科的成績
(他是不是偷偷喜歡哪個學生)
我們可以怎麼做?
A:我可以
int chinese[10],math[10],english[10],social[10],science[10];
int a[2][5];
double b[7][1][2];
(0,0)
(0,0)
(1,4)
(0,4)
(1,3)
(1,2)
(0,3)
(0,2)
(1,1)
(1,0)
(0,1)
int a[3][3];
for(int i=0;i<3;i++){
for(int j=0;j<3;j++)
a[i][j]=i+j;
}
0 | 1 | 2 | |
---|---|---|---|
0 | |||
1 | |||
2 |
0
4
3
3
2
2
1
2
1
for(int i=0;i<n;i++){
for(int j=0;j<m;j++)
{
cin>>a[i][j];
}
}//輸入陣列
for(int i=0;i<a;i++){
for(int j=0;j<b;j++)
{
cout<<a[c][d]<<" ";
}
cout<<endl;
}//翻轉陣列
5
2
6
1
4
9
5
1
2
4
6
9
by jumping
#class7_1217
跳脫字元
Q:今天天天想用程式跟別人揮手手
他想輸出"\o_o/"
cout<<""\o_o/""<<endl;
A:你可能會想
字元 | 意義 | 字元 | 意義 |
---|---|---|---|
\' | 單引號' | \t | 定位字元tab |
\" | 雙引號" | \b | 倒退backspace |
\\ | 反斜線\ | \n | 換行enter |
\0 | 空字元NULL | \a | 發出一聲警告 |
跟endl一樣,只是放的位置不同
#include<iostream>
using namespace std;
int main(){
cout<<" _\n";
cout<<" .\' `\'.__\n";
cout<<" / \\ `\'\"-,\n";
cout<<" .-\'\'\'\'--...__..-/ . | \\\n";
cout<<" .\' ; :\' \'. |\n";
cout<<" / | :. \\ o \\\n";
cout<<" ; \\\':. / ,-.__;.-;`\n";
cout<<" /| . \'--._ /-.7`._..-;`\n";
cout<<" ; | \' |`-\' \\ =|\n";
cout<<" |/\\ . -\' / / ; | =/\n";
cout<<" (( ;. ,_ .:| | / /\\ | =|\n";
cout<<" ) / `\\ | `\"\"`; / | | / / =/\n";
cout<<" | ::| | \\ \\ \\ \\ `--\' =/\n";
cout<<" / \'/\\ / ) |/ `-...-`\n";
cout<<" / | | `\\ /-\' /;\n";
cout<<" \ ,,/ | \\ D .\' \\\n";
cout<<" `\"\"` \\ nnh D_.-\'L__nnh\n";
cout<<" `\"\"\"`\n";
return 0;
}
字元字串
char a='s';
cout<<a; //s
char b[7]="ZSISC";
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] |
---|---|---|---|---|---|---|
Z
C
S
I
S
\0
未知
strlen(s) | |
strcmp(s1,s2) | |
strcat(s1,s2) | |
strcpy(s1,s2) | |
strstr(s1,s2) |
指令
說明
回傳s1的長度
比較s1&s2的內容,一樣回傳0
將s2接到s1後面
將s2的值複製到s1上
回傳s2第一次出現在s1的位置
char a=65;
char b=48;
cout<<a;
//A
cout<<b;
//0
cout<<a+b;
//113
a=a+2;
cout<<a;
//C
char c[10]="ZSISC27";
cout<<c+2;
//ISC27;
string a="ZSISC";
cout<<a; //ZSISC
cout<<a[2]; //I
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] |
---|---|---|---|---|---|---|
Z
C
S
I
S
strlen(s) | s.length( ) or s.size( ) | |
strcat(s1,s2) | s1+s2 | |
strstr(s1,s2) | s1.find(s2,0) | |
strcpy(s1,s2) | s1=s2 | |
strcmp(s1,s2) | s1==s2 |
字串長度
字串串接
char
string
字串尋找
字串複製
字串比較
輸出輸入
基本運算子
條件判斷
迴圈
一維陣列
二維陣列
字元字串
by h94usu/6
#class2_0311
讓我們先釐清一下
呼叫 (+給值)
呼叫 (+給值)
#include<iostream>
int func(int a, int b) {
return a+b;
}
int main() {
std::cout << func(2, 3);
return 0;
}
Life is action, not equal to death.
TYPE FUNCTION(TYPE PARAMETER1, TYPE PARAMETER2, ..) {
//do something...
return SOMETHING;
}
TYPE FUNCTION(TYPE PARAMETER1, TYPE PARAMETER2, ..) {
//do something...
return SOMETHING;
}
int func(int a, int b) {
int c = a+b;
return c;
}
TYPE FUNCTION(TYPE PARAMETER1, TYPE PARAMETER2, ..) {
//do something...
return SOMETHING;
}
void func() {
cout << "HelloHa";
}
int main() {
TYPE result = FUNCTION(PARAMETER);
return 0;
}
TYPE FUNCTION(TYPE PARAMETER1, TYPE PARAMETER2, ..) {
//do something...
return SOMETHING;
}
int func(int a, int b) {
int c = a+b;
return c;
}
int main() {
int ans;
ans = func(5, 6);
cout << ans;
}
//Output: 11
void func() {
cout << "HelloHa";
}
int main() {
cout << func();
}
//Output: HelloHa
#include<iostream>
using namespace std;
??? max() {
//???
return ??;
}
int main() {
//???
cout << ??;
return 0;
}
前人栽樹,後人乘涼
#include <iostream>
#include <algorithm> // sort, max, swap
#include <cmath> // sqrt
using namespace std;
int main(){
int a = 9, b = 10, arr[3] = {0, 3, 2};
sort(arr,arr+3);
cout << arr[2] << endl; // 3
cout << max(a, b) << endl; // 10
swap(a, b);
cout << a << endl; // 10
cout << sqrt(b) << endl; //3
}
try try see
by 阿問
#class4_0325
以我的名字呼喚我呼...喚我呼喚我 --遞迴
int f(int n){
if(...)...
...
else f(n-1);
...
}
fac(5)
int fac(int n){
if(n==1)return 1;
else return n*fac(n-1);
}
5*fac(4)
(n=5)
4*fac(3)
3*fac(2)
2*fac(1)
1
cout<<fac(5);
//5*4*3*2*1
//120
0,1,1,2,3,5,8,13,21,34,55,89,144,233......
F(5)
int F(int n){
if(n==0)return 0;
if(n==1)return 1;
else return F(n-1)+F(n-2);
}
(n=5)
cout<<F(5);
//1+0+1+1+0+1+0+1
//5
F(4)
F(3)
F(3)
F(2)
F(2)
F(1)
F(2)
F(1)
F(1)
F(0)
F(1)
F(0)
1
F(0)
F(1)
0
0
0
1
1
1
1
(GCD)
34
10
3
30
4
8
2
2
2
4
0
gcd(34,10)
int gcd(int a,int b){
if(a%b==0)return b;
return gcd(b,a%b);
}
gcd(10,4)
gcd(4,2)
2
cout<<gcd(34,10);
//2
34
10
3
30
4
8
2
2
2
4
0
gcd(34,10)
int gcd(int a,int b){
if(a%b==0)return b;
return gcd(b,a%b);
}
gcd(10,4)
2
cout<<gcd(10,34);
//2
34
10
3
30
4
8
2
2
2
4
0
數字順序前後會影響嗎?
gcd(10,34)
gcd(4,2)
:不會
程式碼簡潔
占用大量記憶體空間、
執行時間長
#include <iostream>
using namespace std;
??? sum(){
if(???)???;
else return ???;
}
int main(){
???;
cout<<???;
return 0;
}
a024
b127
c002
b190
by h94usu/6
#class3,5_03180401
蝦? 變數??
第0個櫃子
第1個櫃子
第2個櫃子
「放學校的書的櫃子」
「放食物的櫃子」
「放『每個人都會有一些不可告人的東西』的櫃子」
放了國文課本
放了「來自熊媽媽買菜網的一顆雞蛋」
放了 ??????
它在哪裡? | 它是什麼? | 它放了什麼? |
---|---|---|
第0個櫃子 (0x00) | 放學校的書的櫃子 | 國文課本。 |
第1個櫃子 (0x01) | 放食物的櫃子 | 一顆雞蛋。 |
第2個櫃子 (0x02) | 放『每個人都會有一些不可告人的東西』的櫃子 | ????? |
地址
通常用十六進位表示。
變數名稱
放/存了 什麼
int a = 5;
int a = 5;
它在哪裡? | 它是什麼? | 它放了什麼? |
---|---|---|
0x00000 |
int x | 7 |
0x00001 | 空的。 | 沒放東西。 |
0x00002 | 空的。 | 沒放東西。 |
int a
5
指標 好難!!
好 很簡單 目前都非常簡單
跟文科一樣
背起來就會有分數??????
#include<iostream>
using namespace std;
int main(){
int a;
cout << &a; //(maybe)0x70fe1c a的記憶體位址
return 0;
}
#include<iostream>
using namespace std;
int main(){
int a;
int *p;
p = &a;
cout << p; //(maybe)0x70fe1c 一樣是a的記憶體位址
return 0;
}
你就把 int * 當成一種存記憶體位址的 型態,就跟int, double 一樣
但注意,指標形態 T 要跟其要存的變數 a 一樣
#include<iostream>
using namespace std;
int main(){
int a = 5;
int *p = &a;
cout << *p; //5
//取記憶體P的值,也就是取a記憶體&a的值,也就是5
return 0;
}
#include<iostream>
using namespace std;
int main(){
int a = 5;
int *p = &a;
*p = *p+1;
cout << a; //6
//改記憶體P的值,也就是取a記憶體&a的值,也就是把5改成5+1=6
return 0;
}
#include<iostream>
using namespace std;
int main(){
int a = 5;
int *p = &a;
*p = *p+1;
cout << a; //6
//改記憶體P的值,也就是取a記憶體&a的值,也就是把5改成5+1=6
return 0;
}
#include<iostream>
using namespace std;
int main(){
int* a, b;
// 上下兩個等價
int *a;
int b;
// 所以宣告兩個指標要
int *a, *b;
return 0;
}
是不是比想像中簡單呀~
大小
1 Byte = 8 bits
#include <iostream>
int is_admin = 0;
int ary[160];
int main(){
std::cout << sizeof(char) << std::endl;
std::cout << sizeof(int) << std::endl;
std::cout << sizeof(long long) << std::endl;
std::cout << sizeof(float) << std::endl;
std::cout << sizeof(int *) << std::endl;
std::cout << sizeof(double *) << std::endl;
}
// 1 4 8 4 8 8
阿不是教過函式了ㄇ..
#include<iostream>
using namespace std;
void f(int A, int B) {
int tmp = A;
A = B;
B = tmp;
cout << A << " " << B << endl; //2 1
}
int main(){
int a = 1, b = 2;
f(a, b);
cout << a << " " << b; //1 2
return 0;
}
#include<iostream>
using namespace std;
void f(int *A, int *B) { //A, B 是 a, b的記憶體位址 //存址型態
int tmp = *A; //取A記憶體位址的值,也就是a的值 //取值A
*A = *B; //把A記憶體位址的值(a),改成B記憶體位址的值(b) //取值A,B
*B = tmp; //把B記憶體位址的值(b),改成tmp //取值B
cout << *A << " " << *B << endl; //2 1 //取值A,B
}
int main(){
int a = 1, b = 2;
f(&a, &b); //傳入a, b的記憶體位址 //取址a,b
cout << a << " " << b; //2 1
return 0;
}
#include<iostream>
using namespace std;
void f(int &A, int &B) {
int tmp = A;
A = B;
B = tmp;
cout << A << " " << B <<endl;
}
int main(){
int a = 1, b = 2;
f(a, b);
cout << a << " " << b;
return 0;
}
by jumping
#class6_0408
by jumping
#class6_0408
那就讓我們開始ㄅ
OMG pointer+struct!!
OMG pointer+struct!!
#include<iostream>
using namespace std;
int main(){
int a = 5;
int *p = &a;
*p = *p+1;
cout << a; //6
//改記憶體P的值,也就是取a記憶體&a的值,也就是把5改成5+1=6
return 0;
}
#include<iostream>
using namespace std;
struct person{
string name;
person father, mother, child;
};
int main(){
person A, B, a;
A.name = "alice";
B.name = "kelly";
a.father = A;
a.mother = B;
cout << a.father.name << " " << a.mother.name;
return 0;
}
#include<iostream>
using namespace std;
struct person{
string name;
person *father, *mother, *child; //存他親人的記憶體位址
};
int main(){
person A, B, a;
A.name = "alice";
B.name = "kelly";
a.father = &A; //存他父親A的記憶體位址
a.mother = &B; //存他母親B的記憶體位址
cout << (*a.father).name << " " << (*a.mother).name; //kelly alice
//a的father(存A的位址)型態是person *,取值轉成person型態,再找他的name
return 0;
}
#include<iostream>
using namespace std;
struct person{
string name;
person *father, *mother, *child;
};
int main(){
person A, B, a;
A.name = "alice";
B.name = "kelly";
a.father = &A;
a.mother = &B;
cout << a.father->name << " " << a.mother->name; //kelly alice
return 0;
}
by 阿問
#class6_0415
以由小排到大為例
#include <iostream>
using namespace std;
int main(){
int a[10]={7,1,8,6,2,3,9,10,4,5},n=10;
for(int i=0;i<n-1;i++){
for(int j=0;j<n-1-i;j++){
if(a[j>a[j+1]]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
//1 2 3 4 5 6 7 8 9 10
#include <iostream>
using namespace std;
int main(){
int a[10]={7,1,8,6,2,3,9,10,4,5},n=10;
for(int i=0;i<n-1;i++){
int min_idx=i;
for(int j=i+1;j<n;j++){
if(a[j]<a[min_idx])min_idx=j;
}
int temp=a[i];
a[i]=a[min_idx];
a[min_idx]=temp;
}
}
//1 2 3 4 5 6 7 8 9 10
#include <iostream>
using namespace std;
int main(){
int a[10]={7,1,8,6,2,3,9,10,4,5},n=10;
for(int i=1;i<n;i++){
int num=a[i];
int j=i-1;
while(j>=0&&a[j]>num){
a[j+1]=a[j];
j--;
}
a[j+1]=num;
}
}
//1 2 3 4 5 6 7 8 9 10
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int a[10]={7,1,8,6,2,3,9,10,4,5};
sort(a,a+10); //1 2 3 4 5 6 7 8 9 10
int b[10]={7,1,8,6,2,3,9,10,4,5};
sort(b,b+5); //1 3 6 7 8 3 9 10 4 5
}
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(int a,int b){
return a>b;
}
int main(){
int a[10]={7,1,8,6,2,3,9,10,4,5};
sort(a,a+10,cmp); //10 9 8 7 6 5 4 3 2 1
}
a104
a225
b964
a915
by jumping
#class8_0422
如果我今天有一堆編號不同(無重複)的卡牌,我要從中找到我要找的數字對應到的卡牌
我可以
int a[8]={6,22,5,14,9,65,54,87};
int number;
cin>>number;
for(int i=0;i<8;i++)
{
if(a[i]==number)
{
cout<<i<<endl;
break;
}
}
但如果我今天有一萬張卡牌呢?
線性搜尋法
int a[8]={0,2,5,4,9,65,54,87};
sort(a,a+8);
for(int i=0;i<8;i++) cout<<a[i]<<" ";
cout<<endl;
int number;
cin>>number;
for(int i=0;i<8;i++)
{
if(a[i]==number)
{
cout<<i<<endl;
break;
}
}
但如果我要找的數字在最後面或根本找不到呢?
二分搜尋法
int binary_serch(int arr[],int length, int target) {
int L = 0, R = length - 1;
while(L<=R)
{
int M = floor((L+R)/2);
if(arr[M]==target) return M;
else if(arr[M]>target) R = M - 1;
else L = M + 1;
}
return -1;
}