一、C語言的歷史
C語言誕生于美國的貝爾實(shí)驗(yàn)室宝与,在B語言的基礎(chǔ)之上發(fā)展而來。C語言的設(shè)計(jì)目標(biāo)是提供一種能以簡易的方式編譯习劫、處理低級存儲(chǔ)器咆瘟、僅產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程語言。C語言描述問題比匯編語言迅速诽里、工作量小袒餐、可讀性好、易于調(diào)試谤狡、修改和移植灸眼,而代碼質(zhì)量與匯編語言相當(dāng)。
C語言誕生于美國的貝爾實(shí)驗(yàn)室墓懂,在B語言的基礎(chǔ)之上發(fā)展而來焰宣。C語言的設(shè)計(jì)目標(biāo)是提供一種能以簡易的方式編譯、處理低級存儲(chǔ)器捕仔、僅產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程語言匕积。C語言描述問題比匯編語言迅速盈罐、工作量小、可讀性好闪唆、易于調(diào)試盅粪、修改和移植,而代碼質(zhì)量與匯編語言相當(dāng)悄蕾。
二票顾、C語言能干什么
C語言兼顧了匯編語言和高級語言的優(yōu)點(diǎn)库物,運(yùn)行效率只比匯編語言代碼生成的目標(biāo)程序效率低10%~20%。因此C語言廣泛使用在編寫系統(tǒng)軟件上民晒。得益于C語言的高效和能夠直接和系統(tǒng)資源進(jìn)行交互,也經(jīng)常用于編寫硬件驅(qū)動(dòng)程序磁滚!我們使用的windows系統(tǒng)和unix系統(tǒng)都是C/C++語言編寫的!(C++是C的一個(gè)擴(kuò)展)
三晒他、數(shù)據(jù)的定義
C語言有以下幾種數(shù)據(jù)類型
類型 | 打印格式符 | 字節(jié)大小 |
---|---|---|
char | %c | 1 |
unsigned char | %c | 1 |
int | %d | 4 |
unsigned int | %d | 4 |
short | %d | 2 |
unsigned short | %d | 2 |
long | %ld | 8 |
unsigned long | %lu | 8 |
long long | %lld | 8 |
float | %f | 4 |
double | %lf | 8 |
long double | %Lf | 16 |
測試結(jié)果如下
#include <stdio.h>
int main(){
char ch = 'a';
printf("char = %c ,size = %lu\n\n",ch,sizeof(char));
unsigned char unCh = 'b';
printf("unsigned char = %c ,size = %lu\n\n",unCh,sizeof(unsigned char));
int numA = 1;
printf("int = %d ,size = %lu\n\n",numA,sizeof(int));
unsigned int numB = 1;
printf("unsigned int = %d ,size = %lu\n\n",numB,sizeof(unsigned int));
short numC = 10;
printf("short = %d ,size = %lu\n\n",numC,sizeof(short));
unsigned short numD = 10;
printf("unsigned short = %d ,size = %lu\n\n",numD,sizeof(signed short));
float numE = 10;
printf("float = %f ,size = %lu\n\n",numE,sizeof(float));
double numF = 100;
printf("double = %lf ,size = %lu\n\n",numF,sizeof(double));
long numG = 1000;
printf("long = %ld ,size = %lu\n\n",numG,sizeof(long));
long long numH = 10;
printf("long long = %lld ,size = %lu\n\n",numH,sizeof(long long));
unsigned long numI= 1000;
printf("unsigned long = %lu ,size = %lu\n\n",numI,sizeof(unsigned long));
long double numJ = 100;
printf("long double = %Lf ,size = %lu\n\n",numJ,sizeof(long double));
return 0;
}
運(yùn)行結(jié)果
變量的聲明
語法定義
數(shù)據(jù)類型 變量名
例如:int sum;
變量在定義之后如果在使用前未賦值咪鲜,其值是不確定的猾警!
變量命名規(guī)則
- 變量名只能由$、_穴墅、英文字母和數(shù)字組成
- 變量開頭只能是$玄货、 _ 或者英文字母
- 變量的名稱不能和C語言的內(nèi)置關(guān)鍵字重名
例如以下變量的命名都是不合法的:123a、int隘世、a12*
其他
sizeof():獲取變量或者類型的所占字節(jié)數(shù)。
四械媒、運(yùn)算符優(yōu)先級
說明
同一優(yōu)先級的運(yùn)算符兰绣,運(yùn)算次序由結(jié)合方向所決定缀辩。
簡單記就是:! > 算術(shù)運(yùn)算符 > 關(guān)系運(yùn)算符 > && > || > 賦值運(yùn)算符
五健无、判斷結(jié)構(gòu)
C語言中的判斷句語法如下:
if (布爾值) {
funcA();
} else if (布爾值){
funcB();
} else {
funcC();
}
語法規(guī)則如下
- C語言中0表示為假叠穆,非0即為真
- if()語句中的布爾值為真時(shí)才會(huì)執(zhí)行if語句塊內(nèi)的代碼,否則向下繼續(xù)判斷
- if代碼塊的內(nèi)的代碼只有一句時(shí)可以省略花括號嚷硫,超過一句時(shí)必須加上花括號
- 整個(gè)if...else...代碼塊中只有一塊代碼會(huì)得到執(zhí)行。例如上述代碼中funcA()起暮、funcB()鞋怀、funcC()中只有一個(gè)函數(shù)會(huì)得到執(zhí)行。
- else代碼塊只有在之前的判斷條件都為假時(shí)才會(huì)得到執(zhí)行残腌。
- 一個(gè)判斷結(jié)構(gòu)中else if代碼塊和else代碼塊不是必須的
示例程序
#include <stdio.h>
int main() {
int score = 90;
if(score < 60)
//單行代碼可以不加花括號
printf("this student grade is D\n");
else if (score < 70){
//多行代碼需要加上花括號
printf("this student grade is ");
printf("C \n");
}else if(score < 80){
printf("this student grade is B\n");
}else{
printf("this student grade is A\n");
}
return 0;
}
除了if...else...之外還有另外一種判斷結(jié)構(gòu): switch語句
switch (expression) //這里表示需要匹配的值
{
case /* constant-expression */: //可匹配的選項(xiàng)
/* code */
break; //匹配成功之后跳出整個(gè)switch語句
default: //當(dāng)所有可匹配項(xiàng)都不匹配時(shí)執(zhí)行的語句塊
break;
}
三目運(yùn)算表達(dá)式
語法結(jié)構(gòu)
布爾表達(dá)式 孩灯? A : B败匹;
語法規(guī)則
- 當(dāng)布爾表達(dá)式為真時(shí)返回A掀亩,為假時(shí)返回B
- A 或者 B 可以是另外一個(gè)三目運(yùn)算表達(dá)式
示例:
#include <stdio.h>
int main(){
//可以使用括號包裹增加可讀性
int num = 1 > 2 ? 1 : (2 > 3 ? 2 : 3);
printf("num = %d\n",num):
return 0;
}
switch語句語法規(guī)則
1、expression中的值必須是整形常量表達(dá)式缆巧,double之類的值是不允許的
2陕悬、default總是在所有條件都不匹配時(shí)執(zhí)行芙委。
3推捐、當(dāng)一個(gè)選項(xiàng)匹配之后沒有break牛柒。則會(huì)之直接順序執(zhí)行后續(xù)的代碼皮壁,不管case是否匹配,直到遇到break語
示例代碼:
#include <stdio.h>
int main(){
int a = 100;
switch (a)
{
case 100:
printf("this char is a\n");
case 'b':
printf("this char is b\n");
default:
printf("this char is default\n");
break;
case 'c':
printf("this char is c\n");
break;
}
return 0;
}
//執(zhí)行結(jié)果:
/*
this char is a
this char is b
this char is default
*/
六滴须、循環(huán)結(jié)構(gòu)
for循環(huán)
語法格式
for(expression A; expression B; expression C){
// write code
}
語法規(guī)則
- A、B朝氓、C三個(gè)部分的代碼都可為空赵哲,但是 ; 是不可缺少的磅网。
- A部分代碼只在循環(huán)開始時(shí)執(zhí)行一次涧偷!隨后執(zhí)行B喻鳄,再執(zhí)行括號內(nèi)代碼除呵,最后執(zhí)行C,再執(zhí)行B泛豪,以此循環(huán)诡曙,直到 B 表達(dá)式的布爾值為真
- for循環(huán)可相互嵌套,當(dāng)花括號內(nèi)代碼只有一句時(shí)渊涝,花括號可省略
示例代碼
#include <stdio.h>
int main(){
for(int i = 1;i < 10;i ++){
for(int j = 1;j <= i;j ++)
printf("%d * %d = %d\t",i,j,i * j);
printf("\n");
}
return 0;
}
void test(){
for(;;){
printf("這是一個(gè)死循環(huán)"):
}
}
執(zhí)行結(jié)果
while循環(huán)
語法格式
while(expression){//表達(dá)式結(jié)果為真時(shí)才會(huì)執(zhí)行內(nèi)部代碼
//write your code
}
語法規(guī)則
- 每次執(zhí)行先判斷expression表達(dá)式的結(jié)果為真時(shí)才會(huì)執(zhí)行花括號內(nèi)部代碼
- 當(dāng)內(nèi)部只有一行代碼時(shí)可省略花括號
示例代碼
#include <stdio.h>
int main(){
int count = 10;
while(count){
// count -- => count = count - 1;
printf("count = %d \n", count --);
}
return 0;
}
do...while循環(huán)
語法格式
do{
// write your code
}while(expression);
語法規(guī)則
- do...while循環(huán)開始時(shí)先執(zhí)行花括號內(nèi)部的代碼盖文,再判斷 expression 的結(jié)果是否為真五续,為真則繼續(xù)執(zhí)行,為假直接結(jié)束循環(huán)
- do...while循環(huán)至少會(huì)執(zhí)行一次
示例代碼
#include <stdio.h>
int main(){
do
{
// -- count => count = count - 1
printf("count = %d \n", --count);
} while (count > 0);
return 0;
}
循環(huán)終止
- 三種循環(huán)都可以使用continue關(guān)鍵字提前結(jié)束本次循環(huán)它碎,相當(dāng)于花括號內(nèi)部代碼提前執(zhí)行完畢
- 三種循環(huán)都可以使用break關(guān)鍵字直接跳出循環(huán)體
count -- 和 count ++ 的區(qū)別
#include <stdio.h>
int main(){
int x = y = 10;
int numA = x --; // numA = 10,x = 9
int numB = -- y; // numB = 9,y = 9
/*
count -- 和 count ++的區(qū)別主要在于:
count-- 是先賦值給numA再執(zhí)行自減操作
--count 是先執(zhí)行自減操作再賦值給numB
*/
return 0;
}
以上就是本次C語言基礎(chǔ)上的全部內(nèi)容傻挂。C語言是我們編程的基礎(chǔ)語言金拒,C語言學(xué)好了再學(xué)習(xí)Java、python幢码、go等語言都很快速宛官!編程是一門重視實(shí)操的課程底洗,在學(xué)習(xí)完理論知識后需要結(jié)合實(shí)操才能說真正掌握珊擂!可以多動(dòng)手做做C語言教材后面的習(xí)題摧扇,學(xué)有余力的同學(xué)可以在leetcode上做一做題目!我們下期見在张!