x[0] | x[1] | x[2] | x[3] |
#include <iostream>
using namespace std;
int main(){
int x[4];
for(int i=0 ; i<4 ; i++){
cin >> x[i];
}
for(int i=0 ; i<4 ; i++){
cout << x[i] << " ";
}
}
x[0][0] | x[0][1] | x[0][2] |
x[1][0] | x[1][1] | x[1][2] |
#include <iostream>
using namespace std;
int main(){
int x[2][3];
for(int i=0 ; i<2 ; i++){
for(int j=0 ; j<3 ; j++){
cin >> x[i][j];
}
}
for(int i=0 ; i<2 ; i++){
for(int j=0 ; j<3 ; j++){
cout << x[i][j] << " ";
}
cout << endl;
}
}
陣列基本上是所有東西的核心
所以一定要弄熟悉喔喔喔
在C++中文字的儲存是用ASCII編碼
有英文字母、數字、空白、特殊符號...
變數型別為char,用單引號括起來,
單引號內只能放一個字元
#include <iostream>
using namespace std;
int main(){
char a = 'A', b = '5';
cout << a << ' ' << b; // A 5
cin >> a >> b;
}
#include <iostream>
using namespace std;
int main(){
char x = 'A';
x += 1;
cout << x << endl; // B
cout << (int)x << endl; // 66
}
字元其實有他自己代表的值,
只是他呈現出來是字元而不是數字
#include <iostream>
using namespace std;
int main(){
char s[10000] = "Hello OAOAO";
char c[10000] = {'H', 'e', 'l', 'l', 'o', ' ', 'O', 'A', 'O', 'A', 'O'};
}
但它比較屬於C語言,所以暫時先不講
字串是用雙引號括起來的一堆字元
在字串尾端的下個字元會自動加上'\0',為空字元
#include <iostream>
using namespace std;
int main(){
string a, b;
cin >> a;
cout << a << endl;
cout << a[0] << endl; // 可以直接存取第i個字元
int n = a.size(); //取得字串長度
a = "123", b = "abc"; //=一樣是賦值
string c = a + "www" + b; // 可以直接用+把字串串接起來
cout << c << endl; // 123wwwabc
cout << (a == b) << endl; //可以比較字串是否相同、字典序
}
字串是用雙引號括起來的一堆字元
型別為string
\(y = f(x) = \) ...
回傳型態 函式名稱(傳入的參數型態 參數名稱, ...) {
// blablabla
耶回傳東西;
}
放在全域、main的上面。
#include <iostream>
using namespace std;
int add(int a, int b){
return a + b;
}
int main(){
int x, y;
cin >> x >> y;
int z = add(x, y);
cout << add(x, y) << endl;
}
#include <iostream>
using namespace std;
void what(int x){
x = 0;
// 不寫
return;
return void();
}
int main(){
int qq;
qq = 1;
what(qq);
}
#include <iostream>
using namespace std;
int f(int n){
if(n == 1) return 1;
return n * f(n-1);
}
int main(){
int x;
cin >> x;
cout << f(x);
}
***要有遞迴
終止條件!!!!!
#include <iostream>
using namespace std;
int f(int n){
if(n == 1 || n == 2) return 1;
return f(n-1) + f(n-2);
}
int main(){
int n;
cin >> n;
cout << f(n);
}
\(\begin{cases} f_1 = f_2 = 1 \\ f_n = f_{n-1} + f_{n-2}, \ n \geq 3 \end{cases}\)
\(\begin{cases} f(x) = f(f(x+11)), \ x \leq 100 \\ f(x) = x-10, \ x > 100 \end{cases}\)
\(\begin{cases} f(1) = g(1) = 1 \\ f(x) = x + f(x-1) \\ g(x) = f(x) + g(x-1)\end{cases}\)
//其實很明顯可以化簡一些東西
結構變數
#include <iostream>
using namespace std;
struct OAO{
int a;
double b;
char c;
} ;
int main(){
}
一樣放全域,要有分號!
#include <iostream>
using namespace std;
struct OAO{
int a;
double b;
char c;
} ;
int main(){
OAO yee, ooo;
cin >> yee.a >> yee.b >> yee.c;
cout << yee.a << yee.b << yee.c;
}
#include <iostream>
using namespace std;
struct OAO{
int a;
double b;
char c;
} arr[100];
OAO haha[1000];
int main(){
for(int i=0 ; i<100 ; i++){
cin >> arr[i].a >> arr[i].b >> arr[i].c;
}
}
型態 | 名稱 | 在記憶體中的位址 |
---|---|---|
e.g. int | x | 0x?????? (16進位) |
指標就是用來存變數的位址的OAo
#include <iostream>
using namespace std;
int main(){
int x = 2;
int *p;
p = &x;
cout << x << endl; // 2
cout << &x << endl; // 0x??????
cout << p << endl; // 0x??????
cout << *p << endl; // 2
*p = 5; // 等價於 x = 5;
}
指標型別 *指標名稱;
&為取位址,*為讀取位址上的值
#include <iostream>
using namespace std;
int main(){
int *p, q; // (X), q仍為int型別變數
int *x, *y; // (O)
int *a[100]; // (O)
}
如果要一次宣告好幾個指標
Linked List, Segment Tree, Treap...
#include <iostream>
using namespace std;
int main(){
int a, b;
cin >> a >> b;
int c = a;
a = b;
b = c;
cout << a << " " << b << endl;
}
假如要交換 \(a, \ b\) 兩數
能直接 \(a = b; \ b = a;\) 嗎?
#include <iostream>
using namespace std;
void swap(int &a, int &b){
int tmp = a;
a = b;
b = tmp;
}
int main(){
int a, b;
cin >> a >> b;
swap(a, b);
cout << a << " " << b;
}
#include <iostream>
using namespace std;
int main(){
int t;
cin >> t;
for(int i=0 ; i<t ; i++){
//做題目要做的事
}
while(t--){
//做題目要做的事
}
}
如果有給測資數 \(T\)
#include <iostream>
using namespace std;
int main(){
int x;
while(cin >> x){
//做題目要做的事
}
}
如果以EOF (End of File) 結束
這樣高中的資訊課應該都可以躺了
之後就要進到演算法ㄉ世界ㄌ
有問題一定要問學長姊(?)喔喔喔
不然問題會像滾雪球一樣
加油啊阿阿,多多刷題OAO