C語言入門(三)之運算子、sizeof運算子、if表示式
阿新 • • 發佈:2019-01-27
型別轉換、型別提升
#include <stdio.h> void test(); int main(int argc, const char * argv[]) { // 1.型別轉換 /* // int 佔用4個位元組 double 佔用8個位元組 // 只是相同型別的資料才能進行運算, 隱式型別轉換 將小型別轉換為大型別, 然後再進行運算 // 在賦值的時候系統又給我們進行了一次隱式型別轉換 // 發現, 如果在隱式型別轉換的時候, 將大型別轉換為小型別會丟失精度 int result = 10.9; printf("result = %d\n", result); // 強制型別轉換格式: (型別)被強制型別轉換的資料 int result2 = (int)10.9; printf("result2 = %i", result2); // 自動型別提升 // 自動型別的提升, 將參與運算的資料都轉換為同一型別後再運算 // 會自動將小的資料型別提升為大的資料型別 int result3 = 1 + 9.9; // 1.0 + 9.9 = 10.9 */ /* // 在算術運算中, 參與運算的是什麼型別, 計算出來就是什麼型別 // double result = 1.0 / 2; // 1.0 / 2.0 --> 0.5 // double result = (double)1 / 2;// 1.0 / 2.0 --> 0.5 double result = (double)(1 / 2); // (double)(0) --> 0.0 printf("result = %lf\n", result); */ // 2.算術運算子的結合性, 左結合, 從左至右的計算 // 3.算術運算子的優先順序 * / % 大於 + - // 如果優先順序和結合同時存在, 那麼先優先順序再結核性 // int result = 3 + 4 * 5 + 6; // printf("result = %i\n", result); //test(); return 0; } void test() { /* + 加法 - 減法 * 乘法 / 除法 % 取模(取餘) */ // 1.定義變數儲存計算結果 int result; // 2.開始計算 result = 1 + 1; result = 1 - 1; result = 2 * 2; result = 6 / 3; // 注意: 取模運算只能用於整數 // result = 10 % 3; // result = 12 % 5; // result = 10.0 % 3.0; // 取模運算的正負性取決於左邊的運算元, 如果左邊為負數, 那麼結果就是負數 // result = 10 % -3; // result = -10 % -3; // result = -10 % 3; // 如果取模運算的左邊小於右邊, 那麼結果就是左邊 result = 2 % 9; // 3.驗證計算結果 printf("result = %i\n", result); }
賦值運算子
#include <stdio.h> int main(int argc, const char * argv[]) { // 1.最簡單的賦值運算子 // 賦值運算子的結合性: 從右至左 // int result = 10; // 2.複合賦值運算子: += -= *= /= %= int result = 10; // result = result + 5;// result = 10 + 5; result = 15 // result += 5; // 相當於 result = result + 5; result -= 5; // 相當於result = result - 5; printf("result = %i\n", result); return 0; }
自增自減
#include <stdio.h> int main(int argc, const char * argv[]) { // 1.自增自減基本概念 /* int result = 10; // result = result + 5; // result += 5; // result = result + 1; // result += 1; // 自增: 如果想讓某一個數加1可以使用自增 // result++; // result++; // result = result - 1; // result -= 1; // 自減: 如果想讓某一個數減1可以使用自減 // result--; */ // 2.自增的兩種寫法 /* // result++; // ++result; // 自減的兩種寫法 result--; --result; printf("result = %i\n", result); */ // 3.自增自減寫在前面和後面的區別 /* // 如果++寫在變數的前面, 那麼會先將變數自增再用自增之後的結果參與運算 // 如果++寫在變數的後面, 那麼會先將變數的值參與運算再將變數自增 // 總結一句話: ++在前, 先自增再運算, ++在後, 先運算再自增 int a = 10; // int b = a++;// b = 10, a = 11 // int b = ++a;// a = 11, b = 11; // int b = a--;// b = 10, a = 9; int b = --a; // a = 9, b = 9; printf("a = %i , b = %i\n", a, b); */ /* // 無論++在前還是在後, 最終都會自增一次 int a = 10; // 10 + 12 // int b = (a++) + (++a); // a = 12 // b = 22 // 10 + 11 // int b = (a++) + (a++); // a = 12 // b = 21 // 11 + 12 int b = (++a) + (++a); // a = 12 // b = 23 printf("a = %i, b = %i\n", a, b); */ /* // 5++; double doubleValue = 10.9; doubleValue++; printf("%f", doubleValue); */ int a = 10; // int b = a++; // b = a; a = a + 1; int b = ++a; // a = a + 1; b = a; printf("a = %i, b = %i\n", a, b); // a = 11, b = 11 return 0; }
sizeof運算子
sizeof不是函式,是運算子,用來計算變數、常量、資料型別所佔的記憶體位元組數。
#include <stdio.h>
int main(int argc, const char * argv[]) {
// sizeof可以用來計算一個變數或一個常量、一種資料型別所佔的記憶體位元組數
// 注意: sizeof是一個運算子, 不是一個函式
// 利用sizeof計算的格式: sizeof(變數/常量/資料型別);
// 1.計算常量佔用的記憶體位元組數
/*
// int number = sizeof(10);// 10是一個整型常量, 整型 == int == 4
// 如果利用sizeof計算常量, 那麼可以省略()
int number = sizeof 10;
printf("number = %i\n", number);
*/
// 2.計算變數
/*
double doubleValue = 10.9;// doubleValue是實型 , 實型 == double == 8
// int number = sizeof(doubleValue);
// 如果利用sizeof計算變數, 那麼可以省略()
int number = sizeof doubleValue;
printf("number = %i\n", number);
*/
// 3.計算資料型別
int number = sizeof(char);
// 注意: 如果利用sizeof計算資料型別, ()不能省略
// int number = sizeof char;
printf("number = %i\n", number);
return 0;
}
逗號運算子
關係運算符
0代表假,其他都為真
>
<
>=
<=
==
!=
邏輯運算子
&&(短路與,一假則假,前面的表示式為假,真個表示式為假,不需要計算後面的表示式)
||(短路或,一真則真,前面的表示式為真,後面的表示式不需要計算,整個表示式為真)
!
三目運算子
if表示式
// C語言中, 任何數值都有真假性, 非0即真
if (0) {
printf("來這二\n");
}else
{
printf("不去\n");
}
上面程式碼始終輸出不去
如果要判斷某一個變數是否等於某一個值, 建議把常量寫前面, 變數寫後面
if (18 = age) {
printf("開網絡卡\n");
}
石頭剪刀布
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[]) {
/*
有兩個角色 : 玩家(我), 電腦
兩個角色都可以出 0 == 石頭/ 1 == 剪子 / 2 == 布
由於我們不知道玩家和電腦到底出的什麼拳, 所以我們用0, 1, 2來代替石頭/ 剪子 / 布
玩家的出拳可以讓使用者自己輸入
電腦的出拳必須生產一個隨機數, 如何生產隨機數?
將玩家的出拳和電腦的出拳進行比較, 得到比賽結果
石頭 > 剪刀 / 剪刀 > 布 / 布 > 石頭
*/
// 1.生產電腦的出拳
// arc4random_uniform方法會根據傳入的整數生產一個隨機數
// 生成的值就是 0~(N-1)的值
int cmp = arc4random_uniform(3);
// printf("cmp = %i\n", cmp);
// 2.接收玩家的出拳
// 2.1定義變數儲存玩家的出拳
int player = -1;
// 2.2利用scanf接收
printf("請輸入出拳, 0代表石頭, 1代表剪刀, 2代表布\n");
scanf("%i", &player);
// 3.比較玩家和電腦的出拳
if (((0 == player)&&(1 == cmp)) ||
((1 == player) && (2 == cmp)) ||
((2 == player) && (0 == cmp))) {
printf("玩家獲勝\n");
}else if (((0 == cmp)&&(1 == player)) ||
((1 == cmp) && (2 == player)) ||
((2 == cmp) && (0 == player)))
{
printf("電腦獲勝\n");
}else
{
printf("以和為貴\n");
}
printf("player = %i, cmp = %i\n", player, cmp);
return 0;
}