目前分類:C++ (56)

瀏覽方式: 標題列表 簡短摘要

按此前往C++完整教學目錄

 

 

計時器:

(1)

C++的計時器有許多,在此介紹其中一樣:

標頭檔加入 #include <ctime>  或是 #include<time.h> 

程式碼如:

int j=0;   

clock_t a,b;      //建立clock_t變數(長整數形態)以記錄時間,以毫秒(0.001)為單位

a=clock();     //a程式開始執行本行程式碼被執行時的時間差

for (int i=0;i<100000000;i++){j=i;}

b=clock();    //b程式開始執行本行程式碼被執行時的時間差

cout<<a<<endl;  //顯示46,表示從程式開始執行a=clock();被執行時的時間差為46毫秒

cout<<b<<endl;  //顯示328,表示從程式開始執行b=clock();被執行時的時間差為328毫秒

cout<<double(b)/CLOCKS_PER_SEC<<endl; //顯示0.328CLOCKS_PER_SECC++內建常數,表示經過一秒所要花費的計時單元。由顯示可知,本操作環境系統的CLOCKS_PER_SEC=1000。也就是說,一個計時單元記一毫秒。

 

註一:由b-a可以估計出系統在進行for (int i=0;i<100000000;i++){j=i;}所需的時間

註二:同樣的程式碼,ab的時間與電腦CPU功率有關。

註三:同樣的程式碼,若已經編譯過一次,也無更動編譯器再執行一次,則a可能為0。若該程式是第一次被編譯,a可能大於0。這編譯所花的時間也被算在clock()之內了,若該程式碼已經被編譯過一次且無更動編譯器,則省下了編譯的時間直接執行。每次執行,顯示的時間未必一樣。

註四:a=0不代表時間差為0,應是指時間差遠小於1毫秒。

 

(2)

time_t tt;     //建立time_t變數(長整數形態)以記錄時間。單位為秒。

tt=time(NULL);  //指派tt「從197011000秒」到「現在」的時間差,單位為秒。

cout<<tt;   //顯示1385883695

 

 

上一篇:用typeid查詢變數型態

下一篇:變數型態轉換

文章標籤

埃伯 發表在 痞客邦 留言(0) 人氣()

按此前往C++完整教學目錄

 

 

資料形態查詢:

引用標頭檔:#include <typeinfo>

使用typeid(變數名稱).name()可以回傳該變數的資料形態。

常見回傳值與其代表意義如下:

iint,整數。

ffloat,單精度浮點數。

ddouble,雙精度浮點數。

SsString,字串。

c:字元。

 

 

上一篇:typedef

下一篇:計時器

文章標籤

埃伯 發表在 痞客邦 留言(0) 人氣()

按此前往C++完整教學目錄

 

 

利用typedef保留字定義新的資料型態名稱

typedef 資料型態 資料型態名稱; 如:

typedef string my_string;  //定義一個新的資料型態名稱my_string,其本質是string

typedef string your_string;  //定義一個新的資料型態名稱your_string,其本質是string

my_string aa="111";   //宣告一個my_string

string bb="222";

your_string cc;   //宣告一個your_string

cc=aa+bb;   //my_stringyour_string本質上都是string,故可以對之進行任何關於string的操作

cout<<cc;   // 顯示111222

 

 

上一篇:goto 範例

下一篇:用typeid查詢變數型態

文章標籤

埃伯 發表在 痞客邦 留言(0) 人氣()

按此前往C++完整教學目錄

 

 

建立程式的執行點,可以跳躍到此執行點執行。例如:

start:  //建立執行點 start

int input=0;

int inp; 

room1:  //建立執行點 room1

if(input==1){

cout<<"瑋瑋:啊~...你想幹什麼?(1:逃走 2:XXX)"<<endl;

cin>>inp;

if(inp==2){cout<<"瑋瑋:不要這樣...好癢!!"<<endl;;goto start;}

else {goto start;}}  //跳躍到執行點start

room2:  //建立執行點 room2

if(input==2){

cout<<"小蘭:哥,幫我把浴巾拿進來好嗎...?(1:逃走 2:XXX)"<<endl;

cin>>inp;

if(inp==2){cout<<"小蘭:嗚...幫我擦擦好嗎?"<<endl;goto start;}

else {goto start;}}   //跳躍到執行點start

room3:  //建立執行點 room3

if(input==3){

cout<<"狼姊:喂,今天算你八折?(1:逃走 2:XXX)"<<endl;

cin>>inp;

if(inp==2){cout<<"狼姊:付了錢再來!"<<endl;;goto start;}

else {goto start;}}  //跳躍到執行點start

cout<<"請輸入要進的房間編號(123),或輸入0離開:";

cin>>input;

if (input==1){goto room1;}  //跳躍到執行點 room1

else if (input==2){goto room2;}  //跳躍到執行點 room2

else if (input==3){goto room3;}  //跳躍到執行點 room3

  

system("PAUSE");

return EXIT_SUCCESS;

 

 

上一篇:數學函數

下一篇:typedef

文章標籤

埃伯 發表在 痞客邦 留言(1) 人氣()

按此前往C++完整教學目錄

 

 

基本數學運算:

需在標頭檔寫入:

#include <Cmath>

#include <math.h>

即可以使用C++內建的數學運算。常用數學函數如下:

(1) 指對數:

pow(a,b):回傳ab次方之值。

sqrt(a):回傳a的開根號之值。

exp(a):回傳expa次方之值。

log(a):回傳以exp為底數、a為真數的對數之值。

(2) 三角函數:

cos(a):回傳cos(a)之值。其中a的單位為徑度。

sin(a):回傳sin(a)之值。其中a的單位為徑度。

tan(a):回傳tan(a)之值。其中a的單位為徑度。

(3) 四捨五入與進位:

round(a):回傳a之小數經四捨五入後之值。

floor(a):回傳a之小數無條件捨去後之值。

ceil(a):回傳a之小數無條件進位後之值。

(4) 絕對值:

fabs(a):回傳a之絕對值。

範例程式碼如:

cout<<cos(1.1)+sin(2.2)+tan(2); //顯示-0.922947

註:三角函數括號內的數字,單位是徑度。又如:

cout<<exp(1);  //顯示2.71828

cout<<exp(2);  //顯示7.38906 (exp2次方)

cout<<sqrt(5);  //顯示2.23607(5的開根號)

 

 

 

上一篇:c++ sizeof

下一篇:goto 範例

文章標籤

埃伯 發表在 痞客邦 留言(3) 人氣()

按此前往C++完整教學目錄

 

 

sizeof()函式:

可以檢查變數或者資料形態所占據的記憶空間大小(回傳值為整數資料形態,以位元組為單位)

如:sizeof(對象); //對象,可為變數名稱或資料形態名稱。

範C++例如:

int i=10;

float f=5.5;

double d=4.6543;

char c='d';

cout<<sizeof(i)<<endl;  //顯示4,表示變數i占有4個位元組(4 bytes)

cout<<sizeof(f)<<endl;  //顯示4,表示變數f占有4個位元組(4 bytes)

cout<<sizeof(d)<<endl;  //顯示8,表示變數d占有8個位元組(8 bytes)

cout<<sizeof(c)<<endl;  //顯示1,表示變數c占有1個位元組(1 byte)

cout<<sizeof(int)<<endl;  //顯示4,表示資料形態int占有4個位元組(4 bytes)

cout<<sizeof(float)<<endl;  //顯示4,表示資料形態float占有4個位元組(4 bytes)

cout<<sizeof(double)<<endl;  //顯示8,表示資料形態double占有8個位元組(8 bytes)

cout<<sizeof(char)<<endl;  //顯示1,表示資料形態char占有1個位元組(1 bytes)

cout<<sizeof(bool)<<endl;  //顯示1,表示資料形態bool占有1個位元組(1 bytes)

 

 

上一篇:c++ sleep

下一篇:數學函數

文章標籤

埃伯 發表在 痞客邦 留言(0) 人氣()

按此前往C++完整教學目錄

 

 

Sleep函數:可使程式暫停執行一段時間。使用時要先在標頭檔打上

#include <windows.h>

Sleep(N)可讓程式暫停執行N毫秒,如:

Sleep(1000);  //程式暫停執行1000毫秒(1)

 

 

上一篇:c++ 亂數

下一篇:sizeof

文章標籤

埃伯 發表在 痞客邦 留言(0) 人氣()

按此前往C++完整教學目錄

 

 

1. 亂數:

(1) rand()

如下範例程式碼:

int a=rand();  // a會被設定成一個亂數整數,其值在0~32767之間

cout<< a <<endl; 

(2) rand()所產生的亂數每次重新執行後都是一樣的。欲使亂數每次執行都不一樣,可在rand()執行前寫下srand(time(NULL))函式。程式碼如下:

srand(time(NULL));

int d=rand();

int b=rand();

cout<<d%10<<endl;  //產生0~9的亂數

cout<<b%10<<endl;  //產生0~9的亂數

若覺得time的數值變化太慢,可:

srand(time(NULL)*1000);  //1000只是例子,可以改成任何數字(盡量以大數為佳)

int d=rand();

int b=rand();

cout<<d%10<<endl;  //產生0~9的亂數

cout<<b%10<<endl;  //產生0~9的亂數

註一:欲使用time,需在開頭寫下#include <time.h>

註二:欲使用rand()srand(),需在開頭寫下#include <cstdlib>

 

 

 

上一篇:子字串 substring

下一篇:c++ sleep

文章標籤

埃伯 發表在 痞客邦 留言(0) 人氣()

按此前往C++完整教學目錄

 

 

子字串(substring)的操作:

因字串(string)是在std命名空間中,故要在C++中使用,需先在開頭寫下:

using namespace std;

using std::string;

(1) 利用成員函式substr()呼叫子字串,如:

string a="123456789";

cout<<a.substr(2,5)<<endl;  //表示呼叫字串a索引2數起的5個字元所構成的子字串,顯示34567

cout<<a.substr(2)<<endl;  //表示呼叫字串a索引2數起之後的所有字元所構成的子字串,顯示3456789

註:substr()並沒有回傳字串的參考,所以只能取不能存。

(2) 利用成員函式find()搜尋子字串:

字串名稱.find(‘某字元’ [,n]); //從字串的索引n開始尋找某字元,若找到,則回傳最先找到的某字元的索引。

字串名稱.find(“子字串” [,n]); //從字串的索引n開始尋找子字串,若找到,則回傳最先找到的該子字串的索引。

字串名稱一.find(“字串名稱二” [,n]); //從字串的索引n開始尋找與字串二相同型式的子字串,若找到,則回傳最先找到的該子字串的索引。

註一:若第二個參數n不輸入,則n會預設為0

註二:若找不到欲搜尋的字元或字串,則回傳作業系統能代表的最大正整數,通常為232-1=4294967295(32位元的作業系統而言),這個值在C++中已有名稱,可用string::npos來呼叫。

註三:尚有一些成員函式,其使用方法與find()相同,若沒找到亦會傳回232-1

rfind():由字串末往前搜尋。

find_first_of():回傳所有符合比對的子字串中,最前面的索引值。

find_last_of():回傳所有符合比對的子字串中,最後面的索引值。

find_first_not_of():回傳所有不符合比對的子字串中,最前面的索引值。

find_last_not_of():回傳所有不符合比對的子字串中,最後面的索引值。

程式碼如:

string a = "1122331122556";

string b="22";

cout<<a.find("22")<<endl;    //顯示2

cout<<a.find(b,5)<<endl;    //顯示8

cout<<a.find("7",0)<<endl;   //顯示4294967295

cout<<a.rfind("22")<<endl;   //顯示8

cout<<a.find_first_of("22")<<endl;  //顯示2

cout<<a.find_last_of("22")<<endl;  //顯示9

cout<<a.find_first_not_of("11")<<endl;  //顯示2

cout<<a.find_last_not_of("11")<<endl;  //顯示12

(3) 取代子字串

字串一名稱.replace(n1 , k , 字串二名稱);:將從字串一的索引n1數起的k個字元,用字串二取代。

字串一名稱.replace(n1 , k1 , 字串二名稱 , n2 , k2);:將從字串一的索引n1數起的k1個字元,用從字串二的索引n2數起的k2個字元取代。

亦可結合find()函式取代特定字串,如:

string a ="123456789";

a.replace(a.find("345"),3,"000");

cout<<a<<endl;  //顯示120006789

(4) 刪除子字串

字串名稱.erase();:刪除字串所有字元使其為空字串。

字串名稱.erase(n);:刪除索引n後所有字元。

字串名稱.erase(n1 , n2 );:刪除索引n1後的n2個字元。

 

 

上一篇:字串 string

下一篇:亂數

文章標籤

埃伯 發表在 痞客邦 留言(0) 人氣()

按此前往C++完整教學目錄

 

 

 

一、字串、傳統字串、C++字串

1. 字元的宣告:

char 字元名稱 = ‘字元值’; ,如:

char a=’b’;

cout<<a; //顯示b

2. 傳統字串即是由字元所組成的陣列:

char a[]="make a string";

cout<<a;  //顯示make a string

 

 

二、C++字串的使用

因字串(string)是在std命名空間中,故要在C++中使用,需先在開頭寫下:

using namespace std;

using std::string;

1. 字串的建構與複製:字串的建構有許多種方法如下:

(1) string 字串名稱(n,’某字元’);:此字串之內容為n個某字元。例:

string op(5,'w');

cout<<op<<endl; //顯示 wwwww

(2)string 字串名稱一(字串名稱二);:將字串二複製給字串一。例:

string tt="I visit weiwei";

string op(tt);

cout<<op<<endl; //顯示I visit weiwei

(3) string 字串名稱一(字串名稱二 , n1 , n2);:將字串二下標n1開始,連續n2個字元複製給字串一。例:

string tt="I visit weiwei";

string op(tt, 8,6);

cout<<op<<endl; //顯示weiwei

 

2. 字串中字元的指定:

(1) 利用下標運算子[]

string tt="I visit weiwei";

cout<<tt[0]<<endl;  //顯示I

cout<<tt[1]<<endl;  //顯示空格。空格也算是一個字元。

cout<<tt[2]<<endl;  //顯示v

(2) 利用成員函式at(),並在括號中輸入索引值:

string tt="I visit weiwei";

cout<<tt.at(0)<<endl;  //顯示I

cout<<tt.at(1)<<endl;  //顯示空格

cout<<tt.at(2)<<endl;  //顯示v

 

3. 利用成員函式assign(),將字串宣告後再指派值。括號內的程式碼意義同於建構或複製建構:

string op,tt="I visit weiwei";

op.assign(5,'a');

cout<<op<<endl; //顯示 aaaaa 

 

4. 字串與字串可以用比較運算子==!=>=<=><來進行比較。乃是從雙方的第一個字元之ASCII的大小比較起。也可以使用成員函式compare()進行比較:字串一.compare(字串二);,若字串一大於字串二則回傳1,若字串二大於字串一則回傳-1,若兩者相等則回傳0。如下例:

string a="aaa",b="bbb",c="ccc";

cout<<b.compare(c)<<endl;  //顯示 -1

cout<<b.compare(a)<<endl;  //顯示 1

cout<<b.compare(b)<<endl;  //顯示 0

 

5. 字串的合成與插入:

(1) 利用加法運算子+

string a="aaa",b="bbb",c="ccc";

a=a+b+"kkk";cout<<a<<endl; //顯示 aaabbbkkk

也可以利用+=運算子來疊加字串:

string a="aaa",b="bbb",c="ccc";

a+="qqq";cout<<a<<endl;  //顯示 aaaqqq

(2) 利用成員函式append()(註:append 此一英文單字的意思是附加”)

(2-1) 字串名稱一.append(字串名稱二);,將字串二附加在字串一的末端。如:

string a="aaa",b="bbb",c="ccc";

a.append(b);

cout<<a<<endl;  //顯示aaabbb

(2-2) 字串名稱一.append(字串名稱二 , n1 , n2);,將字串二從索引n1數起的n2個字元附加在字串一的末端。如:

string a="aaa",b="bbb",g="gggGGGggg";

a.append(g,1,7);

cout<<a<<endl;  //顯示aaaggGGGgg

(2-3) 字串名稱.append(n,’某字元’);,將n個某字元附加在字串一的末端。

3. 利用成員函式insert(),可插入字串:

(3-1) 字串一名稱.insert( n , 字串二名稱);,可將字串二整個插入字串一在索引n的位置。如:

string a="aaaaaa";

string b="ng";

a.insert(2,b);

cout<<a<<endl;  //顯示aangaaaa

(3-2) 字串一名稱.insert( n , 字串二名稱 , n1 ,n2);,可將字串二在索引n1之後的n2個字元插入字串一在索引n的位置。如:

string a="aaaaaa";

string b="12345678";

a.insert(2,b,2,5);

cout<<a<<endl;   //顯示aa34567aaaa

(3-3) 字串一名稱.insert( n , n1 , ‘某字元’);,可將n1個某字元插入字串一在索引n的位置。如:

string a="aaaaaa";

a.insert(3 , 3 ,'g');

cout<<a<<endl;   //顯示aaagggaaa

 

6. 其他常用函式:

字串名稱.size();:回傳字串的字元數目。

字串名稱.length();:回傳字串的字元數目。

字串名稱.empty();:若字串為空,回傳true,否則回傳false

swap(字串名稱一 , 字串名稱二);:將字串一與字串二的內容對調。

 

 

上一篇:函式參數

下一篇:子字串 substring

文章標籤

埃伯 發表在 痞客邦 留言(2) 人氣()

< C++完整教學目錄 >

 

              函式概說:

函式就像一部工作機器,將某些「原料」丟進去,會有「產品」跑出來,最大的好處是可以隨時使用、重複執行。這些原料稱為「參數」,而產品稱為「回傳資料」。

  1. 函式的基本架構:欲建立函式,程式碼如:

回傳資料型態 函式名稱(參數1資料型態 參數1名稱 , 參數2資料型態 參數2名稱 , 參數3資料型態 參數3名稱){//函式內容 ;}

例如:

int getmax(int a, int b)

{ int R;

if (a>=b){R=a;}

else{R=b;}

return R ; //表示回傳變數R

}

註一:建立函式時,如不需輸入參數,可以不寫參數列,如:

回傳資料型態 函式名稱(){//函式內容 ;}

註二:建立函式時,如不需回傳資料,則可將回傳資料型態寫為void,如:

void 函式名稱(){//函式內容 ;}

函式內容內的return可以省略不寫。

註三:所謂的函式特徵,指的是:

回傳資料型態 函式名稱(參數1資料型態 參數1名稱 , 參數2資料型態 參數2名稱 , 參數3資料型態 參數3名稱)

函式特徵不包括函式內容在內。

若兩函式的函式特徵完全相同,則在呼叫函式時,C++並無法分辨到底要呼叫哪一個函式,故最好避免這種情況。

註(重要:一般來說,C++程式是由主函式main()開始執行,故所有自訂函式在撰寫上的順序都必需在main()之前。

(2) 呼叫函式:函式名稱(參數1資料型態 參數1名稱 , 參數2資料型態 參數2名稱 , 參數3資料型態 參數3名稱);

這不僅會執行該函式,也會得到該函式的回傳資料。範例如:

#include <cstdlib>

#include <iostream>

 

using namespace std;

 

int getmax(int a, int b)

{

int R;

  if (a>=b){R=a;}

  else{R=b;}

  return R ;  //表示回傳變數R

}

   

int main(int argc, char *argv[])

{   

    cout<<"最大的是"<<getmax(10,50)<<endl;  //在此呼叫函式

   

    system("PAUSE");

    return EXIT_SUCCESS;

}

執行後顯示:

最大的是50

 

2. 一種特殊的資料形態:參考(reference)

(1) 例:

int var1=5;

int &var2 = var1;

稱「var2var1參考」。對var2進行存取,等於直接對var1進行存取。

更正確的來說,var2var1有著相同的記憶體位址,即&var2 = &var1

(2) 若:

int var1=5;

const int &var2 = var1;

仍表示var2var1參考,且仍有&var2 = &var1。const表明了無法對var2進行「存」的動作,但可以進行「取」的動作。此時若欲改變var2的取值,可直接改變var1的值。

  1. 另一種特殊的資料形態:指標(pointer),例:

int a=3;  

int *b=&a;  //稱「b為a的指標」,b的意義為:指向a在記憶中的位址。

cout<<b;    // 顯示b的意義,也就是a在記憶中的位址,也就是&a。

cout<<*b;    //顯示b所指向的變數的值,也就是a,也就是3

 

   3.參數的傳遞方式:

   (1)傳值方式。為最簡單而基礎的方式,將外部的資料值複製到函數內進行操作再輸出,不會改變外部資料本身。例:

int setvar(int b)  //使用傳值方式進行參數傳遞

{b=4;return b;}

void main(){

int a =5;

cout<<setvar(a);  //顯示4

cout<<a;  //顯示5

}

   (2)參考型態傳遞方式。這種方式是將外部資料「直接拿到」函式內進行操作再輸出,「有可能改變」外部資料本身。例:

   int setvar(int &b)  //使用參考型態傳遞方式進行參數傳遞

{b=4;return b;}

void main(){

int a =5;

cout<<setvar(a);  //顯示4

cout<<a;  //顯示4a已經從5變成4了!表示函式已經「動到」a了!

}

 

 

<下一頁--(1)~(4)綜合範例 >

 

 

文章標籤

埃伯 發表在 痞客邦 留言(0) 人氣()

< C++完整教學目錄 >

 

※ 綜合應用:一個很簡單的剪刀石頭布遊戲

    string hand[3]  = {"剪刀","石頭",""};

    for (int i=1;i>0;i++)

    {

        int A = (i%3) + 1;

        int B;

        string s1 = "電腦出";

        string s2 = ",請問您要出?(1出剪刀,按2出石頭,按3出布,按其他離開遊戲)";

        cout<<s1+hand[A-1]+s2<<endl;

        cin>>B;

        if (A==1)

        {

            if (B==1){cout<<"雙方平手!"<<endl;}

            else if (B==2){cout<<"你贏了!"<<endl;}

            else if (B==3){cout<<"你輸了!"<<endl;}

            else {break;}

        }

        else if (A==2)

        {

            if (B==1){cout<<"你輸了!"<<endl;}

            else if (B==2){cout<<"雙方平手!"<<endl;}

            else if (B==3){cout<<"你贏了!"<<endl;}

            else {break;}

        }

        else if (A==3)

        {

            if (B==1){cout<<"你贏了!"<<endl;}

            else if (B==2){cout<<"你贏了!"<<endl;}

            else if (B==3){cout<<"雙方平手!"<<endl;}

            else {break;}

        }     

    }

上一頁--迴圈 

文章標籤

埃伯 發表在 痞客邦 留言(0) 人氣()

< C++完整教學目錄 >

 

5. 迴圈:

迴圈可以重複執行某一段程式碼,並對某些變數進行重複的操作。

利用forwhile等關鍵字可以寫出迴圈,常用形式如下:

(1) for迴圈:

for ( 變數型態 變數名稱 = ; 執行條件; 控制程式碼)

{

    內容程式碼

}

兩個小括號( )內可分為三部分:

第一部份是變數型態 變數名稱 = ;。這是迴圈的初始設定,在for迴圈剛開始時就會執行,且只執行一次。

第二部分是執行條件,乃是迴圈執行的條件,每一次迴圈內的內容程式碼要被執行前,這個執行條件就會被檢查一次,若條件成立則繼續執行內容程式碼,若不成立則結束迴圈。

第三部分是控制程式碼,用來控制迴圈執行的次數。每一次迴圈內的內容程式碼被執行完後,控制程式碼就會被執行一次。

範例,求21次方到210次方之值:

int result = 1;

for (int i=1;  i<=10;  i++)

{

       result = result*2;

       cout<<"2"<<i<<"次方是"<<result<<endl;   

}

執行後顯示:

範例說明:

-1:此for迴圈的初始設定,是將整數變數i設為1,在i <=10之情況下執行,每執行一次i的值就增加1。由此可見,當迴圈執行10次之後,i的值會是11,也就是1+10,因此使條件i <=10不成立而造成迴圈結束。可知,此迴圈只執行10次。

-2:此for迴圈的內容程式碼是:

        result = result*2;

       cout<<"2"<<i<<"次方是"<<result<<endl;

表示此迴圈每執行一次,變數result的值就會變成原先的2倍,並且輸出一行文字來顯示那時的result值。由於迴圈執行了10次,故知總共顯示了10行。譬如第3行就表示了迴圈執行第3次時的i值和result值。

(2) 強制中斷執行、強制跳過執行:

(2-1) 如上所述,一旦執行條件不成立,for迴圈就不會繼續執行。但在某些情況下,程式設計者需要令for迴圈在執行條件不成立之前,就中斷for迴圈的執行。此時可用break關鍵字來強迫for迴圈中斷。譬如,將之前的範例問題改成:

2N-1次方小於50000,而2N次方大於50000,問N為多少?

int result = 1;

for (int i=1;  i>0;  i++)

{

       result = result*2;

       if (result>50000)

       {

        cout<<"N="<<i<<endl;

        break;

    }         

}

執行後顯示:N=16

範例說明:題目只說2N-1次方小於50000,而2N次方大於50000,光憑這樣無法知道到底要執行幾次迴圈才能得到答案。故先把執行條件設計成i>0,因為每執行一次迴圈i都會增加1,故知這條件永遠都成立。這也就是說,迴圈會一直跑下去,直到找到N為止。而在result大於50000N找到了,迴圈沒有必要再跑了,就用break強制迴圈結束。(執行break後,其後的內容程式碼不會再被執行)

(2-2) 在某些情況下,程式設計者需要令for迴圈跳過某次執行,然後去執行下一次。此時可用關鍵字continue來跳過。譬如,將之前的範例問題改成:

已知N是偶數,且2N-1次方小於50000,而2N次方大於50000,問N為多少?

int result = 1;

for (int i=1;  i>0;  i++)

{

       result = result*2;

    if (i%2==1){continue;}

       if (result>50000)

       {

        cout<<"N="<<i<<endl;

        break;

    }         

}

範例說明:既然已知N是偶數,那i為奇數(i%2==1)的情況就不要理它了,直接用continue跳過。之後會進入到下一次執行,而本次執行中,continue後面的:

        if (result>50000)

       {

        cout<<"N="<<i<<endl;

        break;

    }

則不會被執行。

(3) while 迴圈:

while 迴圈跟for 迴圈在執行的邏輯上很類似,只是寫法比較簡單。while 迴圈寫法為:

while (執行條件)

{

    內容程式碼

}

for迴圈一樣,while每執行一次內容程式碼之前,都會檢查執行條件是否成立,成立就執行,不成立就結束迴圈。以範例來說,上述(1)中的問題:求21次方到210次方之值,用while迴圈來寫是這樣的:

int result = 1;

int i=1;

while (i<=10)

{

       result = result*2;

       cout<<"2"<<i<<"次方是"<<result<<endl; 

    i++; 

}

其中原本for迴圈內的初始設定int i=1;被移到迴圈之外,而原本的控制程式碼i++被寫到內容程式碼裡了。而執行後的顯示在螢幕上的結果是一樣的。

註:while迴圈也可以使用breakcontinue來中斷迴圈、跳過執行。

 

 

<下一頁--函式 >

 

 

 

文章標籤

埃伯 發表在 痞客邦 留言(1) 人氣()

< C++完整教學目錄 >

 

4. if判斷式與邏輯運算子:

(1) if判斷式可用來判斷條件是否成立,並且依照條件之成立與否,來執行不同的程式碼。if判斷式的標準形式為:

簡易型:

If (條件)

{

程式碼

}

表示在條件成立的情況下才執行程式碼

另外是複雜型:

If (條件一)

{

程式碼一

}

else If (條件二)

{

程式碼二

}

else If (條件三)

{

程式碼三

}

else

{

後備程式碼

}

執行的流程是:

先看條件一是否成立,若成立就會執行程式碼一;若不成立就看條件二是否成立,成立就執行程式碼二;這個寫法可以類推到條件三條件四等等,若所有條件都不成立,就會執行後備程式碼。上述的「條件」,和布林變數一樣具有true(條件成立)和false(條件不成立)。這些條件的寫法,通常有兩種:

(1-1)

第一種寫法使用到「比較運算子」,去比較其左右兩邊的變數或值。常用的比較運算子如下:

比較運算子

意義

==

左邊等於右邊

!=

左邊不等於右邊

左邊大於右邊

>=

左邊大於或等於右邊

左邊小於右邊

<=

左邊小於或等於右邊

如:1>10這個條件,他的意義是「數字1大於數字10」,很明顯這個條件是不成立的。

又如:若已先設定int a = 11; a>10這個條件的意義是「數字11大於數字10」,條件成立。

再如:若已先設定string b = "abc”; b=="cba” 這個條件即不成立。

完整範例如下:

int a=10;

int b=12;

int c=15;

if (a>15)

{   cout<< "a 大於 15!"; }

else if (a> 5)

{   cout<< "a大於5!"; }

else

{   cout<< "a 太小了";}

執行後顯示:a大於5!

(1-2)

條件的第二種寫法是直接使用到布林變數。如:

bool is_white = true;

if (is_white)

{ cout<<"我是白的"; }

執行後顯示:我是白的

(2) 邏輯運算子(&&||!):邏輯運算子可以組合多個上述介紹的條件,來形成一個新的大條件。語法如下:

條件一 && 條件二 取兩條件之交集,兩條件必須都成立,大條件才成立。

條件一 || 條件二 取兩條件之聯集,兩條件只要有一個成立,大條件就成立。(|不是英文字的L小寫,其稱為「管線符號」。在鍵盤中要打出管線符號,可先按住shift鍵不放,再按 \ 鍵。)

!條件 取該條件之反集,條件若不成立,大條件就成立。

範例如:

int a=10;

int b=12;

int c=15;

if (a>5 && b<100)

{   cout<< "大條件一成立"<<endl; }

else

{   cout<< "大條件一不成立"<<endl; }

 

if (a>5 || c<5)

{   cout<< "大條件二成立"<<endl; }

else

{   cout<< "大條件二不成立"<<endl; }

 

if (!c<5)

{   cout<< "大條件三成立"<<endl; }

else

{   cout<< "大條件三不成立"<<endl; }

執行後顯示:

大條件一成立

大條件二成立

大條件三成立

 

下一頁--迴圈 

文章標籤

埃伯 發表在 痞客邦 留言(2) 人氣()

< C++完整教學目錄 >

 

2. 矩陣:

矩陣是用來放置一群同類型變數,在處理大量資料時是很好用的。矩陣的宣告方法為:

變數型態 矩陣名稱[元素數量] = { 元素一, 元素二, 元素三… };

範例如:

string letter[5] = {"A","B","C","D","E"};

乃是一個字串矩陣。程式設計師可以對矩陣內的任一個元素進行存取或呼叫,其方法為矩陣名稱[元素序數]。其中,元素序數0開始,數到元素數量-1為止,表示所想要呼叫之元素的號碼。

範例如:

string letter[5] = {"A","B","C","D","E"};

cout<< letter[2]<<endl;

執行後顯示:C

 

3. 變數的運算:

(1) 數字(int,float和double)的運算:

運算符號

符號意義

範例

範例意義

+

相加

a=b+c;

將變數a之值設為bc之值

-

相減

a=b-c;

將變數a之值設為bc之值

*

相乘

a=b*c;

將變數a之值設為bc之值

/

相除

a=b/c;

將變數a之值設為bc之值

%

求餘數

a=b%c;

將變數a之值設為bc後之餘數

此符號只有在abc均為整數時才有用。

++

遞增

a++;

將變數a之值增加1

--

遞減

a--;

將變數a之值減少1

(2) 字串(string)的相加,如範例:

    string a ="aaa";

    string b ="bbb";

    string c = a+b+"xxx";

    cout<<c<<endl;

執行後顯示:

aaabbbxxx

(3) 布林變數(bool)的運算:

運算符號

符號意義

範例

真值表

&&

交集(and)

a&&b

 

a

b

a&&b

true

true

true

true

false

false

false

true

false

false

false

false

 

||

聯集(or)

a||b

 

a

b

a||b

true

true

true

true

false

true

false

true

true

false

false

false

 

!

反值(not)

!a

 

a

!a

true

false

false

true

 

註:在dev-c++中,若使用cout顯示一個bool,該bool會以10來代表truefalse

(4) 四則運算的先後順序:

C++對於四則運算程式碼的解讀,是採「先乘除後加減」的順序。也就是說,如int a=2+3*4;,是先計算3*4得到12,再將2+12得14,故a結果等於14。若要強迫C++改變解讀的順序,可用小括號( ),例如將程式碼寫成int a=(2+3)*4;,那麼就會先計算2+3得到5,再計算5*4得到20,這樣一來a結果就等於20。

 

下一頁--if判斷式與邏輯運算子 

文章標籤

埃伯 發表在 痞客邦 留言(1) 人氣()

< C++完整教學目錄 >

 

 

各位朋友若覺得本教學對您有幫助,請點個讚~

 

以下範例均使用dev-C++(免費,可自行google下載)中,「專案」內的Console Application來撰寫,如下圖:

 

(1)

(2)

以下文字中,黑色文字是說明,淺藍色文字代表程式碼,紫色文字代表程式之輸出結果。

選擇Console Application之後,dev-C++會自動產生下列程式碼:

#include <cstdlib>

#include <iostream>

using namespace std;

 

int main(int argc, char *argv[])

{

    system("PAUSE");

    return EXIT_SUCCESS;

}

以上的main是主程式名稱,故以下本教學所使用的所有程式碼皆是寫在兩個大括號 {} 之間、system("PAUSE"); 之前。

 

1. 基礎語法:

(1) 斷行:

每行C++程式碼,在行尾要加個分號 ;

(2) 變數宣告:

變數宣告利用到等號 =,其基本語法為:

變數型態 變數名稱 = ;

其中,常用的變數形態介紹如下:

變數形態

的說明

bool

這種變數形態叫做「布林變數」,其值只有兩種可能,truefalsetrue表示邏輯上的「真」,false表示邏輯上的「假」。

int

這種變數形態叫做「整數」,其值如:-2, -1, 0, 1, 2, 3, 4 ……

float

這種變數形態叫做「浮點數」,即是帶有小數點的數字。其值如:-2.3321, 0, 1.0, 2623.292 ……

double

這種變數形態叫做「雙精度浮點數」,和float一樣是帶有小數點的數字,不過比float更佔記憶空間。其值如:-2.3321, 0, 1.0, 2623.292 ……

char

這種變數形態叫做「字元」,也就是文字,可以是英文、中文、數字等等。字元的左右兩邊需要用單引號 ' 包起來,如 '''a''1'

string

這種變數形態叫做「字串」,也就是一連串的文字,可以是英文、中文、數字等等。字串的左右兩邊需要用雙引號 " 包起來,如 "大小你我他""abcde""12345"

變數名稱:一個由程式設計師自訂的名稱。但要注意,變數名稱只能是英文、

數字或底線符號 _,且開頭第一個字母一定要是英文,否則編譯軟體無法辨識。

:該變數的值,和變數型態有關。

變數宣告的範例如:

string name = "白龍馬";

int money = 20000;

bool is_white = true;

其中,namemoneyis_white都是變數名稱

※ 變數的宣告,事實上是在電腦中安排一記憶體空間來存放。而不同的變數型態所佔的記憶體空間也是不同的。

(3) 註解:

單行註解可用雙斜線//,如:

// 註解ABCD

多行註解可用雙斜線/與星號*搭配,如:

/*

這是註解一

這是註解二

*/

這些被註解的文字是不會被執行的,且註解可用中文。程式設計師寫註解的目的在於提醒自己這一行、或這一段程式碼是寫來幹嘛的,以免過幾天再看自己寫的程式碼,忘了自己為何要這樣寫。

(4) 基本輸出:

可使用cout<<變數名稱或值來進行基本輸出,然後會在螢幕上顯示。如:

string B= "蘋果";

cout<<B;

執行後螢幕上顯示:蘋果

(dev-C++的輸出螢幕最後方可能會出現:請按任意鍵繼續,不必理他)

此外,上述的cout方法也支持多變數連續輸出,如:

string A = "我買了";

int number = 5;

string B= "蘋果";

cout<<A<<number<<B;

執行後螢幕上顯示:我買了5蘋果

斷行:

若想輸出到下一行,可用cout<<endl; 如:

cout<<"我是第一行"<<endl;

cout<<"我是第二行"<<endl;

cout<<"我是第三行"<<endl;

執行後螢幕上顯示:

我是第一行

我是第二行

我是第三行

(5) 基本輸入:

可使用cin>>變數名稱來使用鍵盤輸入為該變數輸入值。執行後螢幕會停留、等待使用者用鍵盤輸入,輸入完畢會再繼續執行。範例如:

int n;

cout<<"你買了幾顆蘋果?"<<endl;

cin>>n;

cout<<"我買了"<<n<<"顆蘋果"<<endl;  

執行後,螢幕停留在:

用鍵盤隨便輸入一個數字,譬如3,之後按下enter,螢幕顯示:

 

 

下一頁--常用變數型態與矩陣 

 

 

 

 

文章標籤

埃伯 發表在 痞客邦 留言(23) 人氣()

«123