西苑高一電腦課 C++ 題目的最佳解。如果解不出來到想砸電腦或想只到更簡單的方法可以來看看。

最後更新:10/6 我整理出 C++ 題目常見的題目並寫出我認為的最佳解 (取自西苑高一電腦課)。也有提供一些減少程式碼的常用技巧。如果解不出來到想砸電腦或想只到更簡單的方法可以來看看

警告 網站終於搶救成功啦!這兩天來更新!這裡的程式僅供參考,請不要偷懶直接複製貼上,小考你不會過的。

關於有人問我是誰,選單有各種連結。

目前更新到 503 上課只會上到 425

小提示

當然如果你只是想看解答然後像月同學一樣手機開超大聲打音遊可以點我跳到解答

C 語言 如果你忘記 C 語言的語法想看看可以閱讀這篇文章,不過相信你學過 C++ 就不會想要碰它了。

減少程式碼的常用技巧

這裡講的是真的少打一點,不是全部縮成一排。減少程式碼可以方便閱讀且在 bebug(找錯誤) 比較方便

定義時賦予值

1int a b;
2a=87;

可以簡化成int a=87, b;一行

在輸出行內進行運算

1a=x+y;
2cout<<a

可以簡化成cout<<x+y;一行

if else 省去大括號

if else 裡面如果只有一行指令可以省去大括號{}

1if(a>b){
2    cout<<a;
3}else{
4    cout<<b
5}

可以簡化成if(a>b) cout<<a; else cout<<b;一行

數學含式庫<math.h>

列出來怕你忘記

  • M_E 回傳自然常數 e
  • M_PI 回傳圓周率 π
  • M_SQRT2 回傳根號 2
  • sin(x) cos(x) tan(x) asin(x) acos(x) atan(x) 不解釋 bj4
  • exp(x) 回傳自然常數 e 的 x 次方
  • pow(x, y) 回傳 xy 次方
  • pow(x) 回傳 10 的 x 次方
  • sqrt(x) 回傳 x 的根號
  • log(x) 回傳以 e 為底的對數
  • log10(x) 回傳以 10 為底的對數
  • abs(x) 回傳整數 x 的絕對值
  • fabs(x) 回傳實數 x 的絕對值

題目解答

就..雖然我很貼心還給你了複製鍵...但有問題要問...

裡面的換行空格是大家的習慣寫法,可以參考。且你會發現雖然空格多一點程式還是比標準答案少

提醒 裡面有一些東西還沒有教過,有興趣可以問我或是 Google。

目前只更新到 308

Ch.1

101.Hello C++

1#include<iostream>
2
3using namespace std;
4int main() {
5  cout << "Hello C++";
6  return 0;
7}

102.BMI

1#include<iostream>
2
3using namespace std;
4int main() {
5  float weight, height, BMI;
6  cin >> weight >> height;
7  BMI = weight / ((height / 100) * (height / 100));
8  cout << "BMI 為" << BMI;
9  return 0;
10}

Ch.2

201.運算子

提示筆記 先乘除後加減 (依照優先順序)

  • 有括弧的先計算
  • 多個括弧皆使用小括弧。EX:((8+9)-7)
  • 整數跟整數相除的結果為整數
運算子 定義 優先順序 結合律
++/-- 後置遞增/遞減 2
++/-- 前置遞增/遞減 3
+/- 正負號 3
* 乘法 5
/ 除法 5
% 餘數 (mod) 5
+/- 加法/減法 6
1#include<iostream>
2
3using namespace std;
4int main() {
5  int x, y;
6  cin >> x >> y;
7  cout << x << " 加 " << y << " 的和是 " << x + y << endl;
8  cout << x << " 減 " << y << " 的差是 " << x - y << endl;
9  cout << x << " 乘 " << y << " 的積是 " << x * y << endl;
10  cout << x << " 除 " << y << " 的結果是 " << 1.0 * x / y << endl;
11  cout << x << " 除 " << y << " 的商是 " << x / y << endl;
12  cout << x << " 除 " << y << " 的餘數是 " << x % y << endl;
13  return 0;
14}

202.成績計算

請製作一個程式,輸入五個成績,計算總和與平均並輸出

提示筆記 C++ 換行可以用<<endl,但 C 語言的\n明顯短了三倍

1#include<iostream>
2
3using namespace std;
4int main() {
5  float sum, a, b;
6  for (int i = 1; i < 6; ++i) {
7    cin >> b;
8    a += b;
9  }
10  cout << "總和:" << a;
11  cout << "\n平均:" << a / 5;
12  return 0;
13}

203.矩形周長面積

請製作一個程式,輸入長方形的長 寬,並計算周長與面積

1#include<iostream>
2
3using namespace std;
4int main() {
5  int x, y;
6  cin >> x >> y;
7  cout << "周長=" << 2 * (x + y);
8  cout << "\n面積=" << x * y;
9  return 0;
10}

204.畢氏定理

請製作一個程式,輸入直角三角形兩邊長,利用畢氏定理求斜邊長

提示筆記

sqrt(x) 回傳 x 的平方根 (Square Root)

1#include<iostream>
2#include<cmath>
3
4using namespace std;
5int main() {
6  float x, y;
7  cin >> x >> y;
8  cout << "斜邊長=" << sqrt(x * x + y * y);
9  return 0;
10}

205.兩點距離

請製作一個程式,輸入二維中兩點座標,計算出兩點距離

提示筆記

pow(x, y) 回傳 xy 次方

1#include<iostream>
2
3#include<cmath>
4
5using namespace std;
6int main() {
7  float x1, x2, y1, y2;
8  cin >> x1 >> y1 >> x2 >> y2;
9  cout << "兩點距離=" << sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));
10  return 0;
11}

206.兩點求一線

請製作一個程式,輸入二維中兩點座標,計算出通過兩點的直線方程式

1#include<iostream>
2#include<cmath>
3
4using namespace std;
5int main(){
6	float x1,x2,y1,y2,m;
7	cin>>x1>>y1>>x2>>y2;
8	cout<<"方程式:y="<<(y1-y2)/(x1-x2)<<"x+"<<(y1*x2-y2*x1)/(x2-x1);
9}

原本想法

斜率m為 y 變化量除以 x 變化量。將一數代數y=mx+b即可求出 b 並寫出方程式。b只會用一次算出來直接輸出,不用多設一個變數。

不過浮點數是使用科學記號儲存,有一定的誤差 當斜率本身已經有誤差時,再用來算出截距,誤差將擴大。因此最後一個測資會有誤差。

1#include<iostream>
2#include<cmath>
3using namespace std;
4int main(){
5	float x1,x2,y1,y2,m;
6	cin>>x1>>y1>>x2>>y2;
7	m=(y1-y2)/(x1-x2);
8	cout << "方程式:y=" << m << "x+" << y2-x2*m;
9}

Ch.3

301.奇偶同籠?

請製作一個程式,可以讓使用者輸入一個整數,判斷是奇數還是偶數

提示筆記

如果否則的語法是

1if (條件式){
2	程式區塊;
3} else {
4    程式區塊;
5}

如果大括號裡面只有一行程式可以省略

1#include<iostream>
2
3using namespace std;
4int main() {
5  int a;
6  cin >> a;
7  if (a % 2 == 0) cout << "偶數";
8  else cout << "奇數";
9  return 0;
10}

302.及格?

請製作一個程式,讓使用者輸入一個成績,顯示「成績及格」或「成績不及格」

1#include<iostream>
2
3using namespace std;
4int main() {
5  int a;
6  cin >> a;
7  if (a >= 60) cout << "成績及格";
8  else cout << "成績不及格";
9  return 0;
10}

303.幾科不及格

請製作一個程式:

  1. 可以輸入五個成績

  2. 計算有幾科不及格

  3. 提示筆記 這裡使用了for-each循環。它將y設置為a的第一個元素,運行大掛號(可省略)的程式,然後它將y設置為a的第二個元素,然後...

使用它是因用for (int i = 0; i < 2; i++ )太長了(如果要自動判斷陣列有多長要打for (int i = 0; i < i.length; i++ ))。重點是要存取清單的內容要用a[i]而不是i