上一篇我們大概的介紹程式的結構,也出了一個小作業,不曉得大家有沒有試試看呢?
其實寫程式真的沒有想像中那麼困難的,就像學英文一樣好好的學習、理解文法,就可以很好上手了,希望大家不要害怕來跟著一步一步學習吧!
方法一、
#include <stdio.h>
int main(){
printf("*\n");
printf("**\n");
printf("***\n");
printf("****\n");
printf("*****\n");
return 0;
}
方法二、
#include <stdio.h>
int main(){
printf("*\n**\n***\n****\n*****\n");
return 0;
}
方法一定不只這兩種,也不是只有這兩種方法才是對的,多去嘗試吧!
可能大家對運算子這個名詞有點陌生,所以我們來舉個一定使用過的「+ - * /」,這個加減乘除大家一定是很熟悉的,這些符號在資訊領域我們會稱它為運算子;那說到加減乘除的話不可不提的,就是被運算子運算的運算元了,運算元舉簡單的例子「3+2」來說,其中的「3」、「2」就是運算元,是會被運算子處理的資料。
可能大家現在有點頭暈了,簡單來說運算子負責運算、處理運算元(資料),而「3+2」這整個式子我們會稱為運算式。
我們來用圖解結論一下:
然後除了這些當然還有很多很多,就不再一一介紹了,接下來我們來測試看看吧!(其他詳細資訊可以到wiki這裡參考)
以下只是簡單的介紹與測試,歡迎自己改數字等等的嘗試看看。
#include <stdio.h>
int main(){
printf("%d\n", 5 + 2);
printf("%d\n", 5 - 2);
printf("%d\n", 5 * 2);
printf("%d\n", 5 / 2);
printf("%d\n", 5 % 2);
printf("---我是分隔線---\n");
printf("%f\n", 5.0 + 2);
printf("%f\n", 5.0 - 2);
printf("%f\n", 5.0 * 2);
printf("%f\n", 5.0 / 2);
return 0;
}
而上段程式碼輸出的結果會為:
其中如果不看printf語法(之後會再提),比較特別的大概是「%」了,它是用於取餘數的運算子,所以「5%2」時會列印出無法被整除的餘數「1」;而「/」則是因為在程式碼中,若其運算的兩個運算元都是整數,會預設輸出可以被整除的商「2」。
而如果運算的兩個運算元有一方或雙方為浮點數(小數),輸出就會為浮點數了,但輸出為浮點數的情況下就不能使用「%」。
(2) + - (正負號)
我們以下面的程式碼來進行測試:
#include <stdio.h>
int main(){
printf("%d\n", + 2);
printf("%d\n", - 2);
printf("---我是分隔線---\n");
printf("%f\n", + 2.0);
printf("%f\n", - 2.0);
return 0;
}
而上段程式碼輸出的結果會為:
(3) ++ -- (遞增、遞減)
這裡我們就不多介紹了怕太混亂,有興趣的朋友可以自行爬文,查查看它的使用方式。
(或是可以查看這個網頁的介紹,寫的很清晰也有解釋前綴後綴時的差異)
以下範例若列印出1為ture、0則為false。
(1) > < >= <= (大於、小於、大於等於、小於等於)
我們以下面的程式碼來進行測試:
#include <stdio.h>
int main(){
printf("> 之結果:\n");
printf("%d\n", 5 > 2);
printf("%d\n", 2 > 5);
printf("%d\n", 5 > 5);
printf("------\n");
printf("< 之結果:\n");
printf("%d\n", 5 < 2);
printf("%d\n", 2 < 5);
printf("%d\n", 5 < 5);
printf("------\n");
printf(">= 之結果:\n");
printf("%d\n", 5 >= 2);
printf("%d\n", 2 >= 5);
printf("%d\n", 5 >= 5);
printf("------\n");
printf("<= 之結果:\n");
printf("%d\n", 5 <= 2);
printf("%d\n", 2 <= 5);
printf("%d\n", 5 <= 5);
printf("------\n");
return 0;
}
而上段程式碼輸出的結果會為:
(2) != == (不等於、等於)
我們以下面的程式碼來進行測試:
#include <stdio.h>
int main(){
printf("== 之結果:\n");
printf("%d\n", 5 == 2);
printf("%d\n", 5 == 5);
printf("------\n");
printf("!= 之結果:\n");
printf("%d\n", 5 != 2);
printf("%d\n", 5 != 5);
printf("------\n");
return 0;
}
而上段程式碼輸出的結果會為:
(3) && || (條件and比較、條件or比較)
我們以下面的程式碼來進行測試:
#include <stdio.h>
int main(){
printf("&& 之結果:\n");
printf("%d\n", (5 == 5) && (2 == 2));
printf("%d\n", (5 != 5) && (2 == 2));
printf("%d\n", (5 != 5) && (2 != 2));
printf("------\n");
printf("|| 之結果:\n");
printf("%d\n", (5 == 5) || (2 == 2));
printf("%d\n", (5 != 5) || (2 == 2));
printf("%d\n", (5 != 5) || (2 != 2));
printf("------\n");
return 0;
}
而上段程式碼輸出的結果會為:
「&&」在左右條件皆為ture的情況,輸出為ture,反之則為false;「||」在左右條件任一方為ture或兩方都為ture時,輸出為ture,反之雙方皆為false時則輸出false。
(4) ! (取反邏輯)
我們以下面的程式碼來進行測試:
#include <stdio.h>
int main(){
printf("! 之結果:\n");
printf("%d\n", (5 == 5));
printf("%d\n", !(5 == 5));
printf("%d\n", (5 != 5));
printf("%d\n", !(5 != 5));
printf("------\n");
return 0;
}
而上段程式碼輸出的結果會為:
我們以下面的程式碼來進行測試:
int main(){
printf("<< 之結果:\n");
printf("%d\n", 4 << 1);
printf("%d\n", 4 << 2);
printf("------\n");
printf(">> 之結果:\n");
printf("%d\n", 4 >> 1);
printf("%d\n", 4 >> 2);
printf("------\n");
return 0;
}
而上段程式碼輸出的結果會為:
雖然大概知道怎麼使用,但大家可能還對位元運算有點模糊,下面我用小畫家圖解一下原因:
(對二進制有疑惑的朋友可以另外查看這個頁面,這個是介紹數字系統的)
(2) & | (位元and運算、位元or運算)
我們以下面的程式碼來進行測試:
#include <stdio.h>
int main(){
printf("& 之結果:\n");
printf("%d\n", 0 & 5);
printf("%d\n", 0 & 10);
printf("%d\n", 15 & 5);
printf("%d\n", 15 & 10);
printf("------\n");
printf("| 之結果:\n");
printf("%d\n", 0 | 5);
printf("%d\n", 0 | 10);
printf("%d\n", 15 | 5);
printf("%d\n", 15 | 10);
printf("------\n");
return 0;
}
而上段程式碼輸出的結果會為:
運算子跟上一個一樣都是位元上的運算,而且是每個位元間的運算,都把數字轉成二進制會比較好理解,前面可能沒有把and、or說清楚,我們稍微圖解一下。
第一步驟:我們先來了解and跟or的規則
a. and
值1 | 值2 | 輸出 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
b. or | ||
值1 | 值2 | 輸出 |
-- | -- | -- |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
第二步驟:知道了and、or的規則我們再來把進制轉換一下。
十進制 | 二進制 |
---|---|
0 | 0 |
5 | 101 |
10 | 1010 |
15 | 1111 |
第三步驟:轉換完二進制後再進行「&」跟「|」的運算
舉四個例子:
a. 0 & 5
項目 | 二進制 | 十進制 |
---|---|---|
值1 | 0000 | 0 |
值2 | 0101 | 5 |
and 運算 | ---- | ---- |
結果 | 0000 | 0 |
b. 15 & 10
項目 | 二進制 | 十進制 |
---|---|---|
值1 | 1111 | 15 |
值2 | 1010 | 10 |
and 運算 | ---- | ---- |
結果 | 1010 | 10 |
c. 0 | 5
項目 | 二進制 | 十進制 |
---|---|---|
值1 | 0000 | 0 |
值2 | 0101 | 5 |
or 運算 | ---- | ---- |
結果 | 0101 | 5 |
d. 15 | 10
項目 | 二進制 | 十進制 |
---|---|---|
值1 | 1111 | 15 |
值2 | 1010 | 10 |
or 運算 | ---- | ---- |
結果 | 1111 | 15 |
我們以下面的程式碼來進行測試:
#include <stdio.h>
int main(){
int data;
data = 777;
printf("%d\n", data);
data = 8787;
printf("%d\n", data);
return 0;
}
而上段程式碼輸出的結果會為:
可以看到當「data = 777;」時,data變數就存進了777,列印data時顯示的結果就是777;而當我們第二次賦值時,「data = 8787;」會覆蓋掉上次的值,在列印data時顯示的就變成8787了。
(2) += -= *= /= %= (運算後賦值)
我們以下面的程式碼來進行測試:
#include <stdio.h>
int main(){
int data;
data = 2;
printf("%d\n", data);
data += 3;
printf("%d\n", data);
return 0;
}
而上段程式碼輸出的結果會為:
其實這類的運算子是由兩個步驟組成,先進行算術運算、最後再賦值,就不多做其他的例子了,有興趣可以自行嘗試看看這些運算子,而+=時如下圖解。