C++基礎語法
內容:IDE、OJ、輸入輸出、
變數、運算子、if/else
佛倫斯
IDE
整合開發環境
Integrated Development Environment
- Visual Studio
- Eclipse
OJ
Online Judge
- Zerojudge
- Codeforces
註冊Zerojudge
語法
註解
註解內容不影響程式運作
#include <iostream>
using namespace std;
int main() {
// 這是單行註解
/*
這
是
多
行
註
解
*/
}
單行註解:// 註解內容
多行註解:/* 註解內容 */
#include <iostream>
using namespace std;
int main() {
// 張旭
}
變數
- int 整數 \(-2^{31}\)~\(2^{31}-1\approx2\times10^9\)
- double 雙精度浮點數(有小數點)
- char 字元
- string 字串
- bool 布林值(true/false)
- long long int \(-2^{63}\)~\(2^{63}-1 \approx 9\times10^{18}\)
- unsigned long long int \(0\)~\(2^{64}-1\approx1.8\times10^{19}\)
宣告變數
// 變數類型 變數名稱 = 值;
// 也可以不要先預設它的值
#include <iostream>
using namespace std;
int main() {
int a = 2; // a的值是2
double b; // b還沒有給值
string s, t = "changhsu";
// 宣告多個變數用,隔開
char changhsu = 'C';
}
#include <iostream>
using namespace std;
int main() {
int N = 47;
double d = 0.973321230;
char c = 'F';
string s = "forence";
bool b = false;
long long int X = 23034381;
unsigned long long int Y = 886901351808;
}
輸入輸出
輸入:cin >> a;
輸出:cout << a;
*其中a是一變數
#include <iostream>
using namespace std;
int main() {
// 輸出
string a = "changhsu";
cout << a;
// 輸出:changhsu
// 輸入
string b; // 先宣告變數
cin >> b; // 輸入一字串
cout << b; // 把剛剛輸入的字串輸出
}
//輸入多個變數
int a, b, c;
cin >> a >> b >> c;
// 輸入時用空白SPACE隔開三個變數
//輸出多個變數
cout << a << ' ' << b
<< ' ' << c << '\n';
運算子
int a = 3, b = 4;
cout << a+b << '\n'; // 輸出:7
cout << a-b << '\n'; // 輸出:-1
cout << a*b << '\n'; // 輸出:12
cout << a/b << '\n'; // 輸出:0
// 3÷4 = 0...3
// 整數除整數,輸出也只會輸出商
cout << b%a << '\n'; // 輸出:1
// 4÷3 = 1...1
// "b%a"表b除a的餘數
int a = 3, b = 4;
a += b; // 等同a = a+b;
// a現在是7
cout << a+b << '\n'; // 輸出:11
// 還有-=, *=, /=, %=
優先順序
a*b a/b a%b
↓
a+b a-b
判斷條件用
- ==:等於
- !=:不等於
- >:大於
- <:小於
- >=:大於等於
- <=:小於等於
- !:否定
- &&:和
- ||:或
詳細如何使用在「if/else」那邊再說明
if/else
/*
if (條件式A) {
條件A成立時執行的敘述1
}
else if (條件式B) {
條件B成立時執行的敘述2
*** 執行敘述2表示條件A必不成立
}
else {
條件A、B都不成立時執行的敘述3
}
*/
剛剛講的這些運算子可以放在條件式裡當判斷條件
- ==:等於
- !=:不等於
- >:大於
- <:小於
- >=:大於等於
- <=:小於等於
- !:否定
- &&:和
- ||:或
優先順序
! → * / % → + - →
> < >= <= → == != →
&& → ||
int a = 10, b = 20;
if (a == b) {
cout << "changhsu\n";
// a不等於b,不會執行這裡
// '\n'是一字元,表示換行
}
else if (a == b*2) {
cout << "lemon\n";
// b*2是40,而10不等於40,故不會執行這裡
}
else {
cout << "ckeisc_42nd\n";
}
// 輸出:ckeisc_42nd
布林值也可以放在條件式裡面
bool x = true;
if (x) {
// x是true,會執行這裡
cout << "abcde";
}
else {
// 上面的條件成立,不會執行這裡
cout << "vwxyz";
}
// 輸出:abcde
int x = 2, y = 1;
if (x > y) cout << 'A';
if (x != y) cout << 'B';
if (!(x <= 33)) cout << 'C';
// 跟數學一樣,括號括起來的先做
// x <= 33是true,括起來加否定變false
// 條件式是false,不執行
if (x == y*2) cout << '\n';
// '\n'是換行
if ((x+y)*2 > 0) cout << 'D';
/*
輸出:
AB
D
*/
int x = 2, y = 1;
if ((x > y) && (x == (2*y))){
cout << "roy ";
// x>y成立(2>1)且x==2*y成立(2==1*2)
// 執行
}
// x>y成立(2>1),
if (!(x-y == 1) || x > (y-2)) {
cout << x+y << '\n';
/* x-y是1,!(x-y==1)是錯的,
但x>(y-2)是對的(2>(1-2)),所以會執行 */
}
// 輸出:roy 3
// else if 可以很多個
int b = 3;
if (b == 1)
cout << "yeedrag";
else if (b == 2)
cout << "changhsu";
else if (b == 3)
cout << "lemon";
else if (b == 4)
cout << "forence";
else if (b == 5)
cout << "FN";
else if (b == 6)
cout << "roy";
// 輸出:lemon
大括號裡面只有一句可以省略大括號
初學者建議先不要省略大括號
int forence = 91;
int yeedrag = 3;
if (forence < yeedrag)
cout << "roy";
cout << "changhsu";
/*
上面等同於
int forence = 91;
int yeedrag = 3;
if (forence < yeedrag) {
cout << "roy";
}
cout << "changhsu";
*/
// 輸出:changhsu
題目
int p = 1, q = 2;
if (p == q) {
cout << p << ' ' << q << ' ';
}
else {
q = 3;
}
正確的輸出為:
(A) 1 3 (B) 1 2 (C) p q (D) 不輸出
第1題
正解:(D)
int p = 1, q = 2;
if (p == q) {
cout << p << ' ' << q << ' ';
}
else {
q = 3;
}
正確的輸出為:
(A) 1 3 (B) 1 2 (C) p q (D) 不輸出
第1題
int p = 1;
if (p != 1) {
p = 2;
if (p != 2) {
p = 3;
}
else {
p = 4;
}
}
else {
cout << "4";
}
cout << p;
第2題
正確的輸出為:
(A) 1
(B) 2
(C) 41
(D) 43
int p = 1;
if (p != 1) {
p = 2;
if (p != 2) {
p = 3;
}
else {
p = 4;
}
}
else {
cout << "4";
}
cout << p;
第2題
正確的輸出為:
(A) 1
(B) 2
(C) 41
(D) 43
正解:(C)
int p = 225, q = 20, r = 5;
cout << p+q%r << ", ";
cout << (q-p)*r << ", ";
cout << (p/q)+p;
請選出正確的輸出:
(A) 225, -1025, 236
(B) 0, -1025, 236.25
(C) 229, 1025, 236.25
(D) 225, -1025, 237
第3題
int p = 225, q = 20, r = 5;
cout << p+q%r << ", ";
cout << (q-p)*r << ", ";
cout << (p/q)+p;
請選出正確的輸出:
(A) 225, -1025, 236
(B) 0, -1025, 236.25
(C) 229, 1025, 236.25
(D) 225, -1025, 237
第3題
正解:(A)
bool r = false;
if (!r) {
r = true;
if (!r)
r = true;
else
r = false;
}
else
r = true;
if (r)
cout << "true\n";
else
cout << "false\n";
第4題
請問輸出為何?
(A) true
(B) false
bool r = false;
if (!r) {
r = true;
if (!r)
r = true;
else
r = false;
}
else
r = true;
if (r)
cout << "true\n";
else
cout << "false\n";
第4題
正解:(B)
請問輸出為何?
(A) true
(B) false
double x = 1.35, y = 25.0;
if (y*x > 34.8 || x < y)
cout << "yeedrag\n";
else if (y == 25 && x <= 2.277)
cout << "lemon\n";
第5題
請問輸出為何?
(A) yeedrag (C) lemon
(B) yeedrag (D) 不輸出
lemon
double x = 1.35, y = 25.0;
if (y*x > 34.8 || x < y)
cout << "yeedrag\n";
else if (y == 25 && x <= 2.277)
cout << "lemon\n";
第5題
請問輸出為何?
(A) yeedrag (C) lemon
(B) yeedrag (D) 不輸出
lemon
正解:(A)
實作
題目
- ZJ a799:正值國
- ZJ a003:兩光法師占卜術
- ZJ d050:妳那裡現在幾點了?
- ZJ a410:解方程
ZJ a799:正值國
輸入只有一行,包含一個整數N。若N是負的要去負號再輸出。輸出也是一個整數。
範例輸入:-5
範例輸出:5
-5是負數,依題目要去負號。所以輸出5。
ZJ a003:兩光法師占卜術
輸入一個日期,然後依照下面的公式:
M=月、D=日、S=(M*2+D)%3
得到S的值,再依照S的值從0到2分別給與「普通」、「吉」、「大吉」三種不同的運勢
輸入資料共一行,包含兩個整數,分別為月份及日期。輸出「普通」、「吉」、「大吉」
範例輸出:
普通
範例輸入:
1 1
(1*2+1)%3 = 3%3 = 0
ZJ d050:妳那裡現在幾點了?
輸入僅有一行,其中含有一個整數h(\(0\leq h\leq 23\)),代表台灣時間現在幾點(24小時制)。輸出美國山區時間(24小時制)。台灣的時間比美國山區時間快15小時(不考慮日光節約時間)。
*這題可以不要用到if/else
範例輸入:21
範例輸出:6
21-15 = 6
ZJ a410:解方程
輸入:a, b, c, d, e, f六整數
解二元一次聯立方程式
如果有解,那麼第1行先輸出「x=」,再輸出x的值,第2行先輸出「y=」,再輸出y的值,均保留2位小數,請參照範例輸出
如果無解,輸出「No answer」
如果有無限多組解,輸出「Too many」
範例輸入:1 1 2 1 -1 0
範例輸出:x=1.00
y=1.00
解
a, b, c, d, e, f代入
如何輸出兩位小數?
#include <iostream>
#include <iomanip>
// 注意這裡要include
int main() {
int a = 6987;
cout << fixed << setprecision(2) << a << '\n';
}
// 輸出:6987.00
解答
ZJ a799:正值國
#include <iostream>
using namespace std;
int main() {
int N; cin >> N;
if (N < 0)
N = (-1)*N;
cout << N << '\n';
}
ZJ a003:兩光法師占卜術
#include <iostream>
using namespace std;
int main() {
int M, D;
cin >> M >> D;
int S = (M*2+D)%3;
if (S == 0)
cout << "普通\n";
else if (S == 1)
cout << "吉\n";
else
cout << "大吉\n";
}
ZJ d050:妳那裡現在幾點了?
#include <iostream>
using namespace std;
int main() {
int a;
cin >> a;
cout << (a+24-15)%24 << '\n';
}
ZJ a410:解方程
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double a, b, c, d, e, f;
/* ax+by=c
dx+ey=f */
cin >> a >> b >> c >> d >> e >> f;
// a:d = b:e時可能無解或無限多組解
if (a*e == b*d) {
if (a*f == c*d) {
// a:d = b:e = c:f
// 無限多組解
cout << "Too many\n";
}
else {
// a:d = b:e ≠ c:f
// 無解
cout << "No answer\n";
}
}
else {
double x, y;
if (d != 0) {
if (a == 0) {
/* by=c
dx+ey=f */
y = c/b;
x = (f-e*c/b)/d;
}
else {
// dx+ey=f 整條式子乘上(a/d)
double D = a;
double E = e*a/d;
double F = f*a/d;
/* ax+by=c
ax+Ey=F */
// (b-E)y = c-F
y = (c-F)/(b-E);
// y代入1式
// x = (c-by)/a
x = (c-b*y)/a;
}
}
else {
/* ax+by=c
ey=f */
y = f/e;
x = (c-b*f/e)/a;
}
cout << "x=" << fixed << setprecision(2)
<< x << "\ny=" << fixed
<< setprecision(2) << y << '\n';
}
}
克拉瑪公式
方程組的解
:方程組有解
:方程組有無限多組解
:方程組無解
或
時
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double a, b, c, d, e, f;
cin >> a >> b >> c >> d >> e >> f;
/* ax+by = c
dx+ey = f */
double del = a*e - b*d; // Δ
double delx = c*e - b*f; // Δx
double dely = a*f - c*d; // Δy
// Δ=0時可能無解或無限多組解
// a:d = b:e 交叉相乘
// ae = bd,移向就得到Δ = ae-bd
if (del == 0) {
if (dely == 0)
cout << "Too many\n";
// 若Δy=0表示af-cd=0,整理得a:d = c:f
// a:d = b:e = c:f,有無限多組解
else
cout << "No answer\n";
// a:d = b:e ≠ c:f,無解
}
else {
double x = delx/del; // x = Δx/Δ
double y = dely/del; // y = Δy/Δ
cout << "x=" << fixed
<< setprecision(2) << x
<< "\ny=" << fixed
<< setprecision(2) << y << '\n';
}
}
ZJ a410:解方程-另解(克拉瑪公式)
C++1
By princetonbxxxh
C++1
- 580