Kagenden的領域
2013年1月29日 星期二
2012年8月21日 星期二
C++生活筆記 資料型態~
程 式在執行的過程中,需要運算許多的資訊,也需要儲存許多的資訊,資訊是儲存在記憶體空間中,由於資料的型態各不相同,在儲存時所需要的容量不一,不同的 資料必須要配給不同的空間大小來儲存,因而有了「資料型態」(Data type)的規範。
C++中基本的資料型態主要區分為「整數」(Integer)、「浮點數」(Float)、「字元」(Character),而這幾種還可以細分,如下所 示:
整數
用 來表示整數值,可以區分為short、int、與long,可容納的大小各不相同,short的長度為半個word,int表示一個word,而long 可能是一個或兩個word,在32位元機器上int與long的長度通常是相同的,型態的長度越長,表示可表示的整數值範圍越大。
浮點數
用 來表示小數值,可以區分為float、double與long double,float的長度為一個word,double的長度為二個word,long double長度為3或4個word。
字元
用 來儲存字元,長度為1個位元組,其字元編碼主要依ASCII表而來,由於字元在記憶體中所佔有的空間較小,所以它也可以用來儲存較小範圍的整數。
以上的資料型態在記憶體中所佔有的大小依平台系統而有所差異,word的大小取決於機器,在32位元機器上通常一個word是4個位元組,如果想要知道這 些資 料型態在您所使用的平台上,所佔有的記憶體空間有多少,最好的作法是使用sizeof()運算子,它可以告訴您確實的記憶體大小,下面這個程式是個簡單的 示範:
#include <iostream> /*前置處理器指令 告訴程式裡需要用到iostream這個表頭檔中的一些些函式與類別定義~
using namespace std; /*只令表示使用者空間在std下的名稱 之後再詳細解說 現在就只要記得 只要再電腦上輸入輸出都要寫這一段
int main() { /*這個程式執行完畢之後回傳一個整數,括號的位置可設置參數列,之後會學到在程式執行的時候,可同時將程式的相關引數傳 遞給程式,目前我們並不需要傳遞引數,所以括號中不設定任何參數,表示程式不接收任何引數
cout << "\n型態\t大小(bytes)";
cout << "\nint\t" << sizeof(int);
cout << "\nlong\t" << sizeof(long);
cout << "\nfloat\t" << sizeof(float);
cout << "\ndouble\t" << sizeof(double);
cout << "\nchar\t" << sizeof(char);
cout << "\n";
return 0;
}
其中'\t'是跳格字元,它相當於在主控台中按下Tab鍵的效果,可以用來對齊下一個顯示位置;以下是執行結果:
型態 大小(bytes)
int 4
long 4
float 4
double 8
char 1
由於使用的平台不同,您的結果不一定會與這邊的結果相同;因為每種資料型態所佔有的記憶體大小不同,因而可以儲存 的數值範圍也就不同,例如在上例中,整數 int的記憶體空間是4個位元組,所以它可以儲存的整數範圍為-2147483648至2147483647,如果儲存值超出這個範圍的話稱之為「溢值」 (Overflow),會造成程式不可預期的結果。
整數計算範圍的方式很簡單,例如int整數佔4位元組的話,可儲存範圍為2^32 / 2,除以2是因為要分另一半儲存負整數的關係,整數的最左邊位元被用來表示正負號,如果最左邊位元為0表示正號,若為1則表示負號,在C++中還可以宣告 無正負號整數,此時最左邊位元不用來表示正負號,例如一個8位元字元被用來表示整數時,可以表示數值-128到127,而一個無正負號字元則可以表示0到 255的正整數。
浮點數的儲存方式則是分為兩個部份,例如float佔四個位元組的話,前三個位元組是用來儲存假數,後一個位元組儲存指數,例如3.14*10^8, 3.14儲存在前三位元組,而8儲存於後一位元組,所以float大致上可以儲存的範圍為10^38到10^-38(就指數來算出的),而double則 可以大致儲存10^308至10^-308之間的數值。
C++中還有bool型別,用來表示布林數,在程式中佔一個位元組,可以使用true或false 字面常量(Literal constant) 來表示,實際上的數值則分別對應於1與0,可以使用下面這個程式來印證:
#include <iostream>
using namespace std;
int main() {
cout << "sizeof(bool)\t" << sizeof(bool) << "\n";
cout << "sizeof(true)\t" << sizeof(true) << "\n";
cout << "sizeof(false)\t" << sizeof(false) << "\n";
cout << "true\t" << static_cast<int>(true) << "\n";
cout << "false\t" << static_cast<int>(false) << "\n";
system("PAUSE");
return 0;
}
執行結果:
sizeof(bool) 1
sizeof(true) 1
sizeof(false) 1
true 1
false 0
在程式當中使用到static_cast,這是顯式型態轉換(Explicit type conversion),將bool型態轉型(Cast)為int型態,您可以在 算術運算、型態轉換 中看到型態轉換的相關說明。
2012年7月3日 星期二
C生活筆記 第三課 條件敘述 - if
< 小於
> 大於
== 等於 (注意,是兩個等號)
<= 小於或等於
>= 大於或等於
!= 不等於
舉例
變數 a 是否大於 9 : a > 9
變數 a 和 b 的值是否相等 : a == b
變數 c 是否小於等於 100 : c <= 100
變數 d 是否不等於 e : d != e
&& (And 且)及 || (Or 或)將之連起來
舉例
a大於1且小於100:(a>1)&&(a<100)
a等於b或等於c: (a==b)||(a==c)
如果我們在條件式的前面加上一個驚嘆號 !代表否定not
!( a>9) 和 a<=9 是一樣的。
因為a不大於九 所以就會變成小於等於九
二、if 敘述的語法
接下來我們看到 if 敘述的語法:
if (條件式) 指令一;
上面的語法是如果符合該條件,則執行指令一;有時候我們在條件不成立的時候也必需執行一些指令,這時候可以改用下面的語法:
if (條件式) 指令一;
else 指令二;
上面 else 後面的指令二就是當條件不成立時所要執行的指令。而有時候我們要執行的指令並不只一行,這個時候可以用一對大括弧 { } 把要執行的指令包起來,例如:
if (條件式) {
指令一;
指令二;
指令三;
}
else {
指令四;
指令五;
指令六;
}
上面的語法,當條件成立時程式會執行指令一至三,而當條件不成立的時候則是執行指令四至六。
三、印出 A、B 的大小關係
接下來,我們來寫一個輸入兩個整數 A、B,然後印出兩個變數的大小關係,程式執行的畫面如下(粉紅色代表輸出,淺藍色則是輸入的值):
A, B => 10 20
10 < 20
A, B => 30 20
30 > 20
A, B => 20 20
20 = 20
=>是輸出 前面都忘了講
整個程式如下:
#include <stdio.h>
int main()
{
int a, b;
printf("A, B=> ");
scanf("%d %d", &a, &b);
if(a<b) printf("%d<%d\n", a, b);
if(a>b) printf("%d>%d\n", a, b);
if(a==b) printf("%d=%d\n", a, b);
return 0;
}
上面的例子,我們用一行 scanf() 同時讀取兩個變數 a、b,只要在 scanf 的第一個參數中,將原先的 "%d" 改成兩個 %d 即為 "%d %d",這就是告訴 scanf 要讀取兩個 %d 也就是整數進來,而當然我們後面也要補上兩個整數變數的位址,讓 scanf 可以把讀入的數值寫到變數裡。而同樣的,在 printf 的第一個參數裡如果有兩個以上的 %d 或其他的 %*,後面也要接著同樣數量的變數,而 printf 會自動把後面的第一個變數的值填到第一個 %d 的位置,第二個變數的值填到第二個 %d 的值置,以此類推,全部的變數的值填入完成後,再將整行印出來。
三、練習:
輸入一個整數 a,如果 a 是偶數,則印出 "Yes!",否則印出 "No!"。
10
Yes!
23
No!
提示:可以使用取餘數符號 %, a % 2 代表 a 除以 2 的餘數,當 a 偶數時,a 除以 2 的餘數為 0 。
連續輸入兩個整數 a、b,如果 a 是 b 的倍數,則印出 "Yes!",否則則印出 "No!"。
20 5
Yes!
33 12
No!
提示:可以使用取餘數符號 %, a % b 代表 a 除以 b 的餘數,當 a 是 b 的倍數時,a 可以被 b 整除,即 a 除以 b 的餘數為 0 。
ANS1:
#include <stdio.h>
int main()
{
int a;
printf("A=> ");
scanf("%d", &a);
if(a%2==0)
printf("YES!");
else
printf("NO!");
return 0;
}
ANS2:
#include <stdio.h>
int main()
{
int a, b;
printf("A, B=> ");
scanf("%d %d", &a, &b);
if(a%b==0) printf("YES!");
else
printf("NO!");
return 0;
}
C生活筆記 第二課 (變數的使用)
一、變數是什麼
在程式設計的過程中,我們會需要記錄某些資料,可能是文字,也可能是數字,我們把這些資料記錄在記憶體的某個位址中,並給它一個名稱,這就是變數。由於記憶體的容量是有限的,而每個資料所佔用的空間必須定義清楚,因此 C 語言有下列的基本變數型態:
char 字元,佔 1 Byte
int 整數,佔 2 Bytes(DOS/Win16) 或 4 Bytes(Win32/Unix)
long 長整數,佔 4 Bytes(DOS/Win16) 或 8 Bytes(Win32/Unix)
float 浮點數,佔 4 Bytes (有效位數 7 位)
double 倍精確度浮點數,佔 8 Bytes (有效位數 15 位)
在 C 語言中,宣告一個變數的語法為:
變數型態 變數1, 變數2, ...., 變數n;
例如宣告 a、b、c 三個整數變數:
int a, b, c;
另外,我們也可以在宣告的同時給變數起始值,如:
int a=1, b=2, c=3;
至於變數的名稱,可以使用大小寫字母 A-Z、數字 0-9 及底線符號 _ 等任意組合,但是第一個字母不可以是數字,且組合出來的不可以和 C 的保留字相同(在 Turbo C++ 中以白色表示,如 int、if 等),而且大小寫不同則視為不同的變數,例如 abc 和 Abc 是兩個不同的變數。
二、印出 A+B
接下來,我們來寫一個輸入兩個整數 A、B,然後印出 A+B 的結果,程式執行的畫面如下:
A=> 10
B=> 20
A+B=30
在這邊我們要用到一個新的函數 scanf(),scanf 也是定義在 stdio.h 中,所以我們只要在程式一開頭寫一行 #include <stdio.h>,就可以使用 printf 及 scanf 兩個函數。scanf 的使法如下:
scanf("%d", &變數名稱);
上述 %d 為要輸入的變數種類:
%d -> int %ld -> long
%f -> float %lf -> double
%c -> char %s -> string(字串,以後再說)
第二個參數為該變數的名稱,前面加上一個 & 符號代表該變數的位址,因為 C 語言是傳變數的值給 scanf 而不是傳變數本身,所以必須加上 & 符號傳遞變數的位址,如此 scanf 才能將輸入的值寫到該變數中。
至於要印出變數的值,也是用 printf 中用 %d、%f 之類的語法。因此整個程式如下:
#include <stdio.h>
int main()
{
int a, b;
printf("A=> ");
scanf("%d", &a);
printf("B=> ");
scanf("%d", &b);
printf("A+B=%d\n", a+b);
return 0;
}
程式執行完畢,請按 Alt+F5 看結果。而最後一個 printf 中的 \n 代表 "換行"。
三、練習:
- 將上述程式改成下列的輸出方式:
A=> 10
B=> 20
10+20=30 - 再將上題改成可輸入帶有小數的數字。(提示 int -> float、 %d -> %f )
ANS:#include <stdio.h>
int main()
{
float a, b;
printf("A=> ");
scanf("%f", &a);
printf("B=> ");
scanf("%f", &b);
printf("%f+%f=%f\n",a,b,a+b);
return 0;
}
int main()
{
float a, b;
printf("A=> ");
scanf("%f", &a);
printf("B=> ");
scanf("%f", &b);
printf("%f+%f=%f\n",a,b,a+b);
return 0;
}
2012年6月30日 星期六
C生活筆記 第一課
簡單的C程式
int main ()
{
return 0;
}
main() 每個C程式裡面都匯有main 函數 他前面的int的意似是main函數的執行結果整數Integer 而程式的return 0; 代表程式結果回傳到0 請注意程式主體的每一行敘述必須以分號 ; 做為結束
其實上面的寫法也可以寫程一行
int main () { return 0; }
不建議這樣寫 因為程式的可讀性很差 所以建議1行1行的分輕楚
int main ()
{
return 0;
}
main() 每個C程式裡面都匯有main 函數 他前面的int的意似是main函數的執行結果整數Integer 而程式的return 0; 代表程式結果回傳到0 請注意程式主體的每一行敘述必須以分號 ; 做為結束
其實上面的寫法也可以寫程一行
int main () { return 0; }
不建議這樣寫 因為程式的可讀性很差 所以建議1行1行的分輕楚
二、國際標準程式「Hello, World!」
前面提到第一個 C 程式什麼結果也沒有印出來就結束了,似乎沒什麼用,接下來我們試著寫一個每一種程式語言教科書的第一個範例程式:印出「Hello, World!」。
#include <stdio.h>
int main()
{
printf("Hello, World!");
return 0;
}
這個程式比上面的程式多了兩行,首先 printf() 這個函數的功能是把結果印在螢幕上,括號裡面的文字就是要印出來的內容(前後要用 " 夾起來)。而要使用 printf() 這個函數,必須加入它的宣告,而它的宣告是定義在 stdio.h 這個檔案中,所以我們在第一行加上 #include 把它加進來,stdio 是 Standard I/O 也就是標準輸入輸出的意思,它裡面有很多函數的宣告,這個我們日後再講。另外,井字號開頭的指令,例如#include、#define 等必須單獨成為一行。
三、Turbo C++ 的操作:
Turbo C++ 是 DOS 時代的軟體,不過在 Windows 中也可以用滑鼠來操作,只不過不像一般 Windows 方便罷了。為了方便我們操作,在此列出幾個快速鍵供各位參考:
F2:存檔
F3:讀檔
F5:放大視窗
F9:編譯程式
Ctrl+F9:執行程式
Alt+F5:執行結果
Alt+X:離開
訂閱:
文章 (Atom)