C 的令牌(Token)
C 程序由各種令牌組成,令牌可以是關鍵字、標識符、常量、字符串值,或者是一個符號。例如,下面的 C 語句包括五個令牌:printf1(2"Hello, World! \n"3)4;5
類型轉換
類型轉換是將一個數據類型的值轉換為另一種數據類型的值。
C 語言中有兩種類型轉換:
隱式類型轉換:隱式類型轉換是在表達式中自動發生的,無需進行任何明確的指令或函數調用。它通常是將一種較小的類型自動轉換為較大的類型,例如,將int類型轉換為long類型或float類型轉換為double類型。隱式類型轉換也可能會導致數據精度丟失或數據截斷。
顯式類型轉換:顯式類型轉換需要使用強制類型轉換運算符(type casting operator),它可以將一個數據類型的值強制轉換為另一種數據類型的值。強制類型轉換可以使程序員在必要時對數據類型進行更精確的控制,但也可能會導致數據丟失或截斷。
例子:
int i = 10;
float f = 3.14;
double d = i + f; // 隱式將int類型轉換為double類型
c語言是直接將浮點數隱式轉化成整數,c++等需要強制類型轉化。
double d = 3.14159;
int i = (int)d; // 顯式將double類型轉換為int類型
兩個整數的結果只能是整數。比如10/3 = 3;
??size_t是size of的關鍵字結果,決定了接收變量類型
??= 賦值在c語言中是運算符,在其他語言可能是表達式,賦值運算符優先級最低
練習1:(身高單位換算類)
#include <stdio.h>
int main()
{
/* Write C code in this online editor and run it. */
//輸入厘米數,根據公式(foot+inch/12)*0.3048 算出對應英尺英寸
int centimeter = 170;
scanf("d% d%", ¢imeter);
int foot = centimeter/(0.3048 *100);
int inch = (centimeter/(0.3048 *100) - foot)*12;
printf("英尺是: %d 英寸是: %d",foot,inch);
return 0;
}
練習2:日期類
#include <stdio.h>
int main()
{
/* Write C code in this online editor and run it. */
//輸入起始時間(單位數時候沒有前導的0)和流逝時間(可能超過60,或者負數),輸出終止時間。
int start = 1230;
int spend = 70;
scanf("d% d%", &start, &spend);
int startime = start/100 *60 + start%100;
int end = startime + spend;
int hour = end/60;
int min = end%60;
int endtime = hour*100 + min;
printf(" %d",endtime);
return 0;
}
練習3:逆序三位數
#include <stdio.h>
int main()
{
/* Write C code in this online editor and run it. */
//逆序三位數 345 輸出543 700輸出7
int start = 700;
scanf("%d",&start);
int end = start/100 + start/10%10 *10 + start%10*100;
printf("%d", end);
return 0;
}
練習4: BCD數
#include <stdio.h>
int main()
{
//BCD數用一個字節來表示兩位十進制數,每四個比特表示一位,所以一個bcd數的十六是0x12,十進制就是12,但小明算錯了,吧所有bc的數都當作二進制轉化成十進制輸出了。于是bcd數的0x12輸出十進制變成了18,請你改回去
//要求輸入18(錯誤的數),輸出12(正確的十進制bcd數)
//解題思路:錯誤十進制18-》二進制00010010-〉十六進制0000000000010010-》正確十進制12
//簡化思路:錯誤十進制18-》十六進制-》轉化正確十進制進制(沒有標識的就是bcd數)
//最優方案:輸入十進制18 -》x%輸出16進制但是不帶前綴
int start = 18;
scanf("%d",&start);
printf("%x",start);
return 0;
}
練習5: 銀行復利問題
練習6:交換兩個數
練習7: a++ --a等問題練習