C++

自我介紹

我是誰??

胡若家 社長

有什麼問題都可以問我

綽號:若G (ㄐ)

FB:胡若家

line:kellyhu6686

開始囉><

C++程式的編譯器

DEV C++

Sublime text 3

notepad++

網上編譯

~課程開始~

前置處理指令

在 寫 程 式 的 時 候 , 常 會 碰 到 某 些 資 料 重 覆 使 用, 如 果 以 正 常 的 方 式 來 寫 作 程 式 , 可 能 會 增 加 無 謂 的 程 式 片 段 , 使 的 程 式 看 起 來 會 笨 重 不 堪 、不 俐 落。

 

電 腦 會 把 這 些 模 組 存 在 C: 內,要 用 的 時 候 再 include 出 來。

 

前 置 處 理 器 的 解 釋 , 如 圖 所 示 , 因 為 它 是 在 程 式 編 譯 之 前 執 行 , 所 以 顧 名 思 義 稱 之 前 置 處 理 。

什麼是前置處理指令?

#include <iostream>

  • 在編譯程式前將 iostream 這個檔案放到目前的原始程式中來

  • 有用到cout 物件的程式皆需加以上這個前置處理指令

#include <stdlib.h>

  • 聲明了數值與字符串轉換函數, 偽隨機數生成函數, 動態內存分配函數, 進程控制函數等公共函數
  • rand() : 隨機亂數
  • srand() : 初始化 rand()

#include <time.h>

  • 需要一個參數做為種子,以產生一個新的亂數數列,而這個參數我們通常以目前的時間傳入,也就是使用 time() 函數
  • 為什麼要用time()呢?? 因為時間會一直跑,所以每次取的值都會不一樣

#include <cmath.h>

當程式中需要用到數學公式,例如:log、abs、pow

建立main()函數

#include <iostream>
#include <stdlib.h>
#include <time.h>

int main(){

    return 0;
}
  • int : 視這個區段為整數函數
  • main() : 每次執行此程式都會先跑此區段(為程式的起點)
  • return 0; 是讓程式跑到最後回傳正常結束

如果沒有打上去程式可能就會出錯

輸出

cout << "hello world" << endl;
std::cout << "hello world" << std::endl;
using namespace std;

命名

輸入

cin >> x;
  • x為變數,可儲存輸入進去的數字
  • 變數都要宣告
    • ​int x;

陣列 array

做一個輸入班上30人成績的程式

不可能取30個不同的變數名稱去輸入

int arr[5];

陣列的index(起始位元值)永遠都從0開始

//0,1,2,3,4

可以存入5個整數

  • endl : 換行
  • \n : 換行
cout << "hello world" << endl << 123;

cout << "hello world\n" << 123;
  • // : 單行註解
  • /* ... */ : 多行註解

大家有沒有注意到一個東西

cin >> x;
cout << "hello world" << endl;

每一行程是後面都要加 " ; "

只要是一行程式,後面都要加!!!

(非常重要)

一段小程式完成啦

#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;

int main(){
    int x;
    cout << "請輸入數字: ";
    cin >> x;
    cout << x << endl;
    return 0;
}

for 迴圈

for( 起始 ; 結束 ; 每次增加多少 ){ ... }

結束 - 起始 = 要做的次數

for(i=0;i<5;i++){
    cout << i << ",";
}

() 中的 i 記得也要宣告

if()判斷式

if( 關係式 ){ ... }

else{ ... }

如果成立做這裡

如果沒成立做這裡

int i=1;
if(i==1)
    cout << "yes" << endl;
else
    cout << "no" << endl;
  • = : 指定
  • == : 關係式 "等於" 的意思
i=8
i==8

do{}while()判斷式

做 { ... }當我的(判斷式)成立的時候

int i=1;
do{
    cout << "OH!!!" << endl;
    i++;
}while( i<=5 );

至少會做一次

接下來要實作一個程式囉~

100個數中取5個不重複的數字

#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;

int main(){
	
    return 0;
}

先把基底打上吧

int i,j,n[5];
  • 在main()內先宣告兩個變數及一個陣列
    • 陣列用來儲存我們要取的5個數字
  • 讓每次跑程式都會重新跑一組亂數進去
  • 要取 5 個數字所以 for 迴圈跑 5 次
srand(time(NULL));
for(i=1;i<=5;i++){

}
  • 生產的亂數跟前面取的亂數做比較,如果有重複的話就再生產一次
do{

}while( )
  • 判斷有幾次重複,故再加一個變數 re變數
int i,j,n[5],re;
n[i-1]=rand()%5+1;
  • 先從1~5開始做、% 為除後取餘數
  • 要判斷取的亂數和之前的是否一樣
re=0; //歸零
for(j=1;j<i;j++){

}
if([n-i]==[n-j]){

}

如果符合

re++;
do{
	n[i-1]=rand()%5+1;
	re=0;
	for(j=0;j<i;j++){
		if(n[i-1]==n[j-1])
			re++;
	}	
}while(re>=1);

當 re>=1重新做一次

cout << "n[" << i << "]=" << n[i-1] << endl;
  • 最後沒有問題就印出來

ya~~~終於做完了

來測測看可不可以用吧

#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;

int main(){
	int i,j,n[5],re;
	srand(time(NULL));
	for(i=1;i<=5;i++) {
		do{
			n[i-1]=rand()%5+1;
			re=0;
			for(j=1;j<i;j++){
				if(n[i-1]==n[j-1
				])
					re++;
			}	
		}while(re>=1);
		cout << "n[" << i << "]=" << n[i-1] << endl;
	}
	return 0;
}

最後再把%5改成%100就OK了

END

C++

By kellyhu0109