學習內(nèi)容
注釋的使用
#include的作用
main函數(shù)介紹
printf函數(shù)格式化輸出
C語言基本數(shù)據(jù)類型
scanf函數(shù)格式化輸入
變量
運算符
循環(huán):if
工資實戰(zhàn)
年齡轉(zhuǎn)換實戰(zhàn)
1. 注釋的使用
// 注釋內(nèi)容
單行注釋:用于一行簡短的注釋理卑,不需要換行的情況撤嫩。
/* 注釋內(nèi)容 */
多行注釋:注釋內(nèi)容過多,需要換行的情況。
/** 注釋內(nèi)容 */
文檔注釋(用于生成開發(fā)者文檔):java語言特有的注釋撒强,其中的注釋內(nèi)容可以被JDK提供的工具 javadoc 所解析,生成一套能夠以網(wǎng)頁形式體現(xiàn)程序的說明文檔
2. #include的作用
include---宏 用來導(dǎo)入頭文件。如果系統(tǒng)已經(jīng)提供某些功能的實現(xiàn)漱办,只需要使用include將這些功能所在的頭文件導(dǎo)入進來就可以了。
< >
用來導(dǎo)入系統(tǒng)提供的類庫婉烟,如:stdio.h stdlib.h math.h string.h
,
" "
用來導(dǎo)入自己定義的頭文件娩井,如:calculate.h
。
#include <stdio.h>
編譯器首先從系統(tǒng)的類庫里面去查找這個頭文件似袁,如果沒有洞辣,再到自己的文件中查找咐刨,否則報錯。
#include "stdio.h"
編譯器首先從自己的文件中去查找這個頭文件扬霜,如果沒有所宰,再到系統(tǒng)的類庫里面查找,否則報錯畜挥。
3. main函數(shù)的使用
main函數(shù) = 代碼塊 = 完成特定功能仔粥,所有的程序的入口點都是main函數(shù)。
int返回值蟹但,用來記錄當前程序的運行狀態(tài)躯泰,0:正常結(jié)束 資源自由分配,非0:1 異常結(jié)束 沒收資源华糖。
int argc
:參數(shù)個數(shù) argument count麦向,char* argv[]
:每個參數(shù)組成的字符串數(shù)組。int main(int argc, char *argv[]) { printf("%d\n",argc); printf("%s\n",argv[0]); return 0; } 輸出: 1 G:\ThridStudy\C_Project\Project1.exe(.c文件編譯生成的exe文件所在的位置)
4. printf函數(shù)格式化輸出
printf輸出語句客叉,用來讓終端輸出數(shù)據(jù)诵竭。
打印常量字符串:
printf("hello world");
轉(zhuǎn)義字符:\n 的意思是回車換行,將當前位置移到下一行的開頭兼搏。\r 的意思是回車卵慰,將當前位置移到本行的開頭。\t 的意思是水平制表符佛呻,將當前位置移到下一個tab位置裳朋。
int main(int argc, char *argv[]) { printf("helloworld\t"); printf("%d\n",argc); printf("%s\r",argv[0]); getchar(); return 0; }
運行結(jié)果
5. C語言基本數(shù)據(jù)類型
① 首先明確,C標準并沒有具體給出規(guī)定哪個基本類型應(yīng)該是多少個字節(jié)數(shù)吓著,而且這個也與OS鲤嫡、編譯器有關(guān)
② 雖然16位、32位或者64位的機子各種類型并不一樣绑莺,但有幾條規(guī)則(ANSI/ ISO制定):
short 至少占用2個字節(jié)
int 建議為一個機器字長暖眼,32位環(huán)境下為4字節(jié),64位環(huán)境下為8字節(jié)
short 的長度不能大于int纺裁, long 的長度不能小于int
③ 基本數(shù)據(jù)類型參照表格:
類型 描述 16位 32 位 64位 打印方式 char 字符诫肠,如:'a','d' 1 1 1 %c short 短整型 2 2 2 %hd int 整型对扶,如1区赵,2341 2 4 4 %d long 長整型 4 4 8 %ld float 單精度浮點數(shù)惭缰,如1.5浪南,82.0 4 4 4 %f double 雙精度浮點數(shù) 8 8 8 %f 在自己的平臺上可以使用
printf("%d\n",sizeof(int));
測試具體的數(shù)據(jù)。注意:
1. C語言中printf輸出float和double都可以用%f漱受,而double型數(shù)據(jù)還可以用%lf络凿。
2. scanf當中若是對雙精度的變量賦值是必須是%后跟lf,而printf當中可以用%f也可以用%lf沒有限制骡送。
3. printf() 只會看到雙精度數(shù),printf 的 %f 格式總是得到 double絮记,所以在 printf() 中使用 %f 跟 %lf 的輸出顯示效果是一樣的摔踱。
4. 對于變量來說,double 類型比 float 類型的精度要高怨愤。double 精度更高派敷,是指它存儲的小數(shù)位數(shù)更多,但是輸出默認都是 6 位小數(shù)撰洗。如果你想輸出更多小數(shù)篮愉,可以自己控制,比如 %.10lf 就輸出 10 位小數(shù)差导。
④ 控制輸出格式:
%md:要求輸出字段寬度為m试躏,右對齊,不夠左端補空格设褐,大于m按實際輸出颠蕴,如%3d。
%0md:要求輸出字段寬度為m助析,右對齊犀被,不夠左端補0,大于m按實際輸出外冀,如%02d弱判。
%m.nd:要求輸出字段寬度為m,右對齊锥惋,后面n個位置當做小數(shù)昌腰,沒有的補0,最前面m-n個沒有的補空格膀跌,如%3.2d遭商。
6. scanf函數(shù)格式化輸入
- scanf輸入語句,用來向終端輸入數(shù)據(jù)捅伤。
int a = 0; scanf("%d",&a); printf("%d",a);
當用戶在終端輸入數(shù)據(jù)時劫流,數(shù)據(jù)會被存放到緩沖流,scanf用于在緩沖流中找到數(shù)據(jù)將其放入到給定的位置丛忆。
放入到給定的位置就是保存輸入的數(shù)據(jù)祠汇,保存數(shù)據(jù)需要用到變量,我們只需要把數(shù)據(jù)送到對應(yīng)變量的地址熄诡,就存儲好了該數(shù)據(jù)可很,就可以通過該變量使用該數(shù)據(jù)。所以使用
&
獲得變量a
的地址凰浮。int a = 0; scanf("jack%d",&a); printf("%d",a);
- 此時輸入數(shù)據(jù)必須按照
jack+數(shù)據(jù)
的格式我抠,才可以將數(shù)據(jù)送入到變量中苇本。所以,scanf函數(shù)中" "
里面的內(nèi)容用來控制輸出格式菜拓。int a = 0; int b = 0; scanf("%d %d",&a,&b); printf("%d %d",a,b);
- 利用上面的輸出格式一次性輸入兩條數(shù)據(jù)瓣窄。
7. 變量
變量是程序可操作的存儲區(qū)的名稱;變量的類型決定了變量存儲的大心啥Α俺夕;變量的名稱可以由下劃線,字母贱鄙,數(shù)字組成啥么,它必須以字母或者下劃線開頭。簡單的說變量就是用來記錄數(shù)據(jù)的贰逾。
變量的聲明:沒有分配內(nèi)存空間悬荣,使用的時候才會分配,如
int a;
變量的定義:立刻為我們分配內(nèi)存空間 賦初值疙剑,如
int a = 0;
變量的使用:
int num1,num2; scanf("%d %d",&num1,&num2); printf("%d %d\n",num1,num2);
- bool類型的變量(需要導(dǎo)入stdbool.h)氯迂,其值非零即真(1),零為假(0)言缤。
bool status = -3; printf("%d\n",status);//結(jié)果是1
8. 運算符
- 算術(shù)運算符:
運算符 描述 + 把兩個操作數(shù)相加 - 第一個操作數(shù)減去第二個操作數(shù) * 把兩個操作數(shù)相乘 / 兩個數(shù)相除嚼蚀,取商 % 兩個數(shù)相除,取余 ++ 自增運算符管挟,整數(shù)值加1 -- 自減運算符轿曙,整數(shù)值減1 注意:a++是先賦值后運算,++a是先運算后賦值
- 邏輯運算符
運算符 描述 && 邏輯與運算符僻孝,如果兩個操作數(shù)都非零导帝,則條件為真 || 邏輯或運算符,如果兩個操作數(shù)有任意一個非零穿铆,則條件為真 * 邏輯非運算符您单,逆轉(zhuǎn)操作數(shù)的邏輯狀態(tài)
- 關(guān)系運算符
運算符 描述 == 檢查兩個操作數(shù)的值是否相等,如果相等則條件為真 != 檢查兩個操作數(shù)的值是否相等荞雏,如果不相等則條件為真 > 判斷左操作數(shù)的值是否大于右操作數(shù)的值虐秦,如果是則條件為真 < 判斷左操作數(shù)的值是否小于右操作數(shù)的值,如果是則條件為真 >= 判斷左操作數(shù)的值是否大于或等于右操作數(shù)的值凤优,如果是則條件為真 <= 判斷左操作數(shù)的值是否小于或等于右操作數(shù)的值悦陋,如果是則條件為真
- 賦值運算符
運算符 實例 = C=A+B,將A+B的值賦給C += C += A 相當于 C = A + C -= C -= A 相當于 C = A - C *= C *= A 相當于 C = A * C /= C /= A 相當于 C = A / C %= C %= A 相當于 C = A % C
9. 循環(huán):if
- if語句的形式:C 語言把任何非0和非null的值假定為 true筑辨,把0或 null 假定為 false俺驶。
if (條件) { 條件成立要做的事 } if (條件) { 條件成立要做的事 }else{ 條件不成立要做的事 } if (條件1) { 條件1成立要做的事 }else if (條件2){ 條件2成立,條件1不成立要做的事 }else if (條件3){ 條件3成立挖垛,條件1,2不成立要做的事 } ... }else{ 以上條件都不成立要做的事 }
- 問號表達式:(也稱之為三目運算符)
(表達式1)痒钝?(表達式2):(表達式3),如果表達式1成立則執(zhí)行表達式2痢毒,否則執(zhí)行表達式3
a>b ? s = a+b : s = a-b
這里的例子送矩,如果 a > b,那么 s 的值是a+b哪替,否則 s 的值是a-b
- 逗號表達式:
將兩個及其以上的式子聯(lián)接起來栋荸,從左往右逐個計算表達式,整個表達式的值為最后一個表達式的值
(3+5,6+8)稱為逗號表達式凭舶,其求解過程先表達式1晌块,后表達式2,整個表達式值是表達式2的值帅霜,最終結(jié)果是14
int temp = 1; if(temp--,temp){ printf("temp是1"); }else{ printf("temp是0"); } 輸出結(jié)果: temp是0
10. 工資實戰(zhàn)
- 優(yōu)化前:
#include <stdio.h> int main(){ int salary = 0;//記錄工資 int pay = 0; //稅后工資 //接收輸入 printf("請輸入工資:"); scanf("%d",&salary); //開始計算 if(salary < 5000){ pay = salary; }else if(salary > 5000 && salary < 8000){ int tax = (salary - 5000)*0.1; pay = salary - tax; }else if(salary > 8000 && salary < 10000){ int tax = (salary-8000)*0.15 + 3000*0.1; pay = salary - tax; }else{ int tax = (salary - 10000)*0.2 + 2000*0.15 + 3000*0.1; pay = salary - tax; } printf("到手工資: %d",pay); return 0; }
- 優(yōu)化后:
#include <stdio.h> int main(){ int salary = 0;//記錄工資 int tax = 0; //稅 //接收輸入 printf("請輸入工資:"); scanf("%d",&salary); //開始計算 if(salary < 5000){ tax = 0; }else if(salary > 5000 && salary < 8000){ tax = (salary - 5000)*0.1; }else if(salary > 8000 && salary < 10000){ tax = (salary-8000)*0.15 + 3000*0.1; }else{ tax = (salary - 10000)*0.2 + 2000*0.15 + 3000*0.1; } printf("到手工資: %d",salary - tax;); return 0; }
11. 年齡轉(zhuǎn)換實戰(zhàn)
#include <stdio.h> //輸入年齡 20 //your age is twenty; int main(){ int age = 0; //保存?zhèn)€位數(shù) 21%10 = 1 char* gewei[] = {"","one","two","three","four","five","six","seven","eight","nine"}; //保存10-19 char* temp[] = {"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"}; //保存十位 char* shiwei[] = {"twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"}; printf("請輸入年齡:"); scanf("%d", &age); char *name;//保存每次取出的字符串 if(age < 10){ //直接訪問各位數(shù)數(shù)組 name = gewei[age]; }else if(age >= 10 && age <= 19){ //獲取個位數(shù) int index = age % 10; name = temp[index]; } else{ //獲取個位數(shù) int g = age % 10; //獲取十位數(shù) int s = age / 10; //取出對應(yīng)的單詞 int sString = shiwei[s-2]; int gString = gewei[g]; printf("your age is %s-%s\n" ,sString,gString); //程序還未運行完畢就提前結(jié)束 return 0; } printf("your age is %s\n",name); return 0; }