c語言重點程序
『壹』 學習<c語言程序設計>的重點
整體來說想學完C語言還是很簡單的,但想靈活運用
還是需要時間的,學習的時候要多實踐!
個人覺得指針最難,因為指針的使用太靈活。
當然函數啊,數組啊,結構體也是需要注意學習的。
其實C語言的語法不難。
至於鏈表之類的,建議樓住在學完C語言之後要看下
數據結構和演算法之類的書,畢竟程序=「一個好的數據結構+演算法」。
『貳』 求解C語言知識
C語言程序的結構認識
用一個簡單的c程序例子,介紹c語言的基本構成、格式、以及良好的書寫風格,使小夥伴對c語言有個初步認識。
例1:計算兩個整數之和的c程序:
#include main() { int a,b,sum; /*定義變數a,b,sum為整型變數*/ a=20; /*把整數20賦值給整型變數a*/ b=15; /*把整數15賦值給整型變數b*/ sum=a+b; /*把兩個數之和賦值給整型變數sum*/ printf(「a=%d,b=%d,sum=%d\n」,a,b,sum); /*把計算結果輸出到顯示屏上*/ }
重點說明:
1、任何一個c語言程序都必須包括以下格式:
main() { }
這是c語言的基本結構,任何一個程序都必須包含這個結構。括弧內可以不寫任何內容,那麼該程序將不執行任何結果。
2、main()----在c語言中稱之為「主函數」,一個c程序有且僅有一個main函數,任何一個c程序總是從main函數開始執行,main函數後面的一對圓括弧不能省略。
3、被大括弧{ }括起來的內容稱為main函數的函數體,這部分內容就是計算機要執行的內容。
4、在{ }裡面每一句話後面都有一個分號(;),在c語言中,我們把以一個分號結尾的一句話叫做一個c語言的語句,分號是語句結束的標志。
5、printf(「a=%d,b=%d,sum=%d\n」,a,b,sum); ----通過執行這條c語言系統提供給我們直接使用的屏幕輸出函數,用戶即可看到運行結果,本程序運行後,將在顯示器上顯示如下結果:
a=20,b=15,sum=35
6、#include
注意:(1)以#號開頭 (2)不以分號結尾 這一行沒有分號,所以不是語句,在c語言中稱之為命令行,或者叫做「預編譯處理命令」。
7、程序中以 /*開頭並且以*/結尾的部分表示程序的注釋部分,注釋可以添加在程序的任何位置,為了提高程序的可讀性而添加,但計算機在執行主函數內容時完全忽略注釋部分,換而言之就是計算機當做注釋部分不存在於主函數中。
C程序的生成過程
C程序是先由源文件經編譯生成目標文件,然後經過連接生成可執行文件。
源程序的擴展名為 .c ,目標程序的擴展名為 .obj , 可執行程序的擴展名為 .exe 。
標識符
在編寫程序時,必須為函數、變數等命名,這個名字稱
『叄』 C語言程序
1.void main(void)
{
printf(´´%d´´, goo()); \\輸出1
printf(´´%d´´, boo()); \\輸出1
printf(´´%d´´, boo()); \\輸出2,boo()中定義的x是靜態的,在整個程序運行期間都不會消失,所以調用一次後,它的值就存儲在內存的靜態存儲區中了。
printf(´´%d´´, goo()); \\輸出1,goo中的變數當這個子函數運行完後該變數就消失了,下次調用該函數時重新分配空間給x。
}
2.建議這方面的問題先去了解內存對齊和堆棧,之後學習結構和指針,C語言其實掌握基礎很容易。
a) void f1(void) { char a[100000]; } \\需要sizeof(char)*100000=100000位元組。
void f2(void) { static char a[100000]; } \\同上,只不過存放在內存中的全局變數區(靜態區)。
void main(void) { char *p; f1(); f2(); }
b) void f1(void) { static char a[100000]; }
void f2(void) { char a[100000]; }
void main(void) { char *p; f1(); f2(); }
c) void main(void) { char *p;
p = (char *) malloc(100000); \\申請了100000位元組的動態內存,並把動態空間的首地址給p;
p = (char *) malloc(100000); free(p); \\動態申請malloc的內存需要程序員用free手動釋放。
p = (char *) malloc(100000); free(p); }
3.這個就不說輸出結果了,告訴你原理吧:
\\定義了共用體結構,該結構和struct的不同是節省內存空間,如:當union結構內有3個變數時,它的大小等於3個變數中佔用空間最大一個變數的大小。如下的定義,則它的大小是long型的大小:4位元組(32位系統)
union
{
unsigned long ul;
short s;
char t[3];
} x;
x.ul = 0x49803F; //按照上面的解釋,看匯編系統會把ul放入共用體,並賦值
printf(´´%+10d\n´´, x.s) ; //輸出short s時,union的值是ul剛才的值(把union比作箱子,如同箱子里放了ul後,這時s來取,取走的還應該是ul),因為s是short型的,所以上面的數值會越界(請自己看C的類型轉換和越界)
x.s = 0x6447;//按照上面的解釋,自己研究下。
printf(´´%s\n´´, x.t); //箱子里這時放的是s=0x6447,但是被t[3]取走了。
4.
#define MAC(a, b, c) a * b – a / c \\宏定義
MAC(1, 2, 3) \\替換宏定義後:1*2-1/3=2
MAC(5, 2, 4 & 1) \\替換後:5*2-5/4&1 = 1;宏定義只是原文替換,不會自動給你加括弧的,建議宏定義的時候最好都帶上括弧,能省略的括弧也不要省,如:#define MAC(a, b, c) ((a * b) – (a / c))
MAC (7 / 2, 3, 0) \\7/2*3-7/2/0
MAC (3, 1 ^ 3, 6) \\還是原文替換,自己試試
『肆』 學習C語言應注意哪些方面其重點和難點是哪些
第一個難點 C語言的數據類型 關於C語言數據類型,不難理解但難於運用。這就要求同學們在學習的時候記住常用的一些數據類型的特徵(第一次作業第2題內容)。 第二個難點 C語言的運算符和運算順序 1.C語言的運算功能十分豐富,運算種類遠多於其它程序設計語言。大家在學習的時候不僅要注意某些運算符的運演算法則,還要注意運算規則(注意事項)。 2.當多種不同運算組成一個運算表達式,即一個運算式中出現多種運算符時,運算的優先順序和結合規則顯得十分重要。 第三個難點 C語言的三種簡單程序結構 其實,C語言的前二個程序結構不是難點,三種結構里難點應在於循環的嵌套用法。 (1)關於順序結構 這種結構的程序比較簡單,就是按照語句的排列順序依次執行的機制。順序結構的執行順序是自上而下,依次執行,因此編寫程序也必須遵守這一規定,否則你的程序執行結果就不對。 語句也是多分支選擇語句,又稱為多路開關語句,到底執行哪一塊,取決於開關設置,也就是表達式的值與常量表達式相匹配的那一路,它不同if—else 語句,它的所有分支都是並列的,程序執行時,由第一分支開始查找,如果相匹配,執行其後的塊,接著執行第2分支,第3分支……的塊,直到遇到break語句;如果不匹配,查找下一個分支是否匹配。 (3)關於循環結構: 循環結構可以減少源程序重復書寫的工作量,用來描述重復執行某段演算法的問題,這是程序設計中最能發揮計算機特長的程序結構,C語言中提供四種循環,即goto循環、while循環、do –while循環和for循環。 四種循環可以用來處理同一問題,一般情況下它們可以互相代替換,但一般不提昌用goto循環,所以下面我們重點講解另外的三種循環。 常用的三種循環結構學習的重點在於弄清它們相同與不同之處,以便在不同場合下使用,大家好好看一下書中三種循環的格式和執行順序,如何替換使用,如把while循環的例題,用for語句重新編寫一個程序,這樣能更好地理解它們的作用。 注意:在while和do—while循環體內和for 循環中的第3語句中,應包含趨於結束的語句(如i++,i--),否則就可能成了一個死循環,這也是初學者的一個常見錯誤。 下面我們來討論下這三種循環的異同之處: 用while和do—while循環時,循環變數的初始化的操作應在循環體之前,而for循環是在語句1中進行的;while 循環和for循環都是先判斷表達式,後執行循環體,而do—while循環是先執行循環體後判斷表達式,也就是說do—while的循環體最少被執行一次,而while 循環和for就不一定了。這三種循環都可以用break語句跳出循環,用continue語句結束本次循環,而goto語句與if構成的循環,不能用break和 continue語句進行控制。 這三種結構並不是彼此孤立的,在循環中可能出現分支、順序結構,分支中也可能出現循環、順序結構而把循環、分支看成一個語句,它又是構成順序結構的一個元素,因此這三種結構相互結合,就能實現各種演算法,設計出解題程序,但若是很大的題目,這樣編出的程序往往很長,重復結構多,並且可閱讀性差,因此我們常將C程序設計成模塊化結構。
『伍』 c語言程序設計的重點
重點:
首先是第三章 數據類型、運算符、表達式
這些都是基礎,很簡單,但是不看的話後面寫程序經常會出錯的
第四章 第五章 第六章 主要講程序設計結構,
掌握三種程序設計結構:順序結構、選擇結構、循環結構即可
第七章數組第八章指針很重要!如果你還要學習數據結構等等,那麼最好掌握結構體哪一章
應該說 數組、指針、結構體 是c中最難也最重要的知識點吧!不過也不是很難啦 呵呵~難只是一個傳說
『陸』 c語言2級要用到哪些程序
學習C語言
在初學C語言時,可能會遇到有些問題理解不透,或者表達方式與以往數學學習中不同(如運算符等),這就要求不氣餒,不明白的地方多問多想,鼓足勇氣進行學習,待學完後面的章節知識,前面的問題也就迎刃而解了,這一方面我感覺是我們同學最欠缺,大多學不好的就是因為一開始遇到困難就放棄,曾經和好多同學談他的問題,回答是聽不懂、不想聽、放棄這樣三個過程,我反問,這節課你聽過課嗎?回答又是沒有,根本就沒聽過課,怎麼說自己聽不懂呢?相應的根本就沒學習,又談何學的好?
學習C語言始終要記住「曙光在前頭」和「千金難買回頭看」,「千金難買回頭看」是學習知識的重要方法,就是說,學習後面的知識,不要忘了回頭弄清遺留下的問題和加深理解前面的知識,這是我們學生最不易做到的,然而卻又是最重要的。學習C語言就是要經過幾個反復,才能前後貫穿,積累應該掌握的C知識。
那麼,我們如何學好《C程序設計》呢?
一.學好C語言的運算符和運算順序
這是學好《C程序設計》的基礎,C語言的運算非常靈活,功能十分豐富,運算種類遠多於其它程序設計語言。在表達式方面較其它程序語言更為簡潔,如自加、自減、逗號運算和三目運算使表達式更為簡單,但初學者往往會覺的這種表達式難讀,關鍵原因就是對運算符和運算順序理解不透不全。當多種不同運算組成一個運算表達式,即一個運算式中出現多種運算符時,運算的優先順序和結合規則顯得十分重要。在學習中,只要我們對此合理進行分類,找出它們與我們在數學中所學到運算之間的不同點之後,記住這些運算也就不困難了,有些運算符在理解後更會牢記心中,將來用起來得心應手,而有些可暫時放棄不記,等用到時再記不遲。
先要明確運算符按優先順序不同分類,《C程序設計》運算符可分為15種優先順序,從高到低,優先順序為1 ~ 15,除第2、3級和第14級為從右至左結合外,其它都是從左至右結合,它決定同級運算符的運算順序.
二.學好C語言的四種程序結構
(1)順序結構
順序結構的程序設計是最簡單的,只要按照解決問題的順序寫出相應的語句就行,它的執行順序是自上而下,依次執行。
例如;a = 3,b = 5,現交換a,b的值,這個問題就好像交換兩個杯子水,這當然要用到第三個杯子,假如第三個杯子是c,那麼正確的程序為: c = a; a = b; b = c; 執行結果是a = 5,b = c = 3如果改變其順序,寫成:a = b; c = a; b = c; 則執行結果就變成a = b = c = 5,不能達到預期的目的,初學者最容易犯這種錯誤。 順序結構可以獨立使用構成一個簡單的完整程序,常見的輸入、計算,輸出三步曲的程序就是順序結構,例如計算圓的面積,其程序的語句順序就是輸入圓的半徑r,計算s = 3.14159*r*r,輸出圓的面積s。不過大多數情況下順序結構都是作為程序的一部分,與其它結構一起構成一個復雜的程序,例如分支結構中的復合語句、循環結構中的循環體等。
(2) 分支結構
順序結構的程序雖然能解決計算、輸出等問題,但不能做判斷再選擇。對於要先做判斷再選擇的問題就要使用分支結構。分支結構的執行是依據一定的條件選擇執行路徑,而不是嚴格按照語句出現的物理順序。分支結構的程序設計方法的關鍵在於構造合適的分支條件和分析程序流程,根據不同的程序流程選擇適當的分支語句。分支結構適合於帶有邏輯或關系比較等條件判斷的計算,設計這類程序時往往都要先繪制其程序流程圖,然後根據程序流程寫出源程序,這樣做把程序設計分析與語言分開,使得問題簡單化,易於理解。程序流程圖是根據解題分析所繪制的程序執行流程圖。
學習分支結構不要被分支嵌套所迷惑,只要正確繪制出流程圖,弄清各分支所要執行的功能,嵌套結構也就不難了。嵌套只不過是分支中又包括分支語句而已,不是新知識,只要對雙分支的理解清楚,分支嵌套是不難的。下面我介紹幾種基本的分支結構。
①if(條件)
{
分支體
}
這種分支結構中的分支體可以是一條語句,此時「」可以省略,也可以是多條語句即復合語句。它有兩條分支路徑可選,一是當條件為真,執行分支體,否則跳過分支體,這時分支體就不會執行。如:要計算x的絕對值,根據絕對值定義,我們知道,當x>=0時,其絕對值不變,而x<0時其絕對值是為x的反號,因此程序段為:if(x<0) x=-x;
②if(條件)
else
這是典型的分支結構,如果條件成立,執行分支1,否則執行分支2,分支1和分支2都可以是1條或若干條語句構成。如:求ax^2+bx+c=0的根
分析:因為當b^2-4ac>=0時,方程有兩個實根,否則(b^2-4ac<0)有兩個共軛復根。其程序段如下:
d=b*b-4*a*c;
if(d>=0)
{x1=(-b+sqrt(d))/2a;
x2=(-b-sqrt(d))/2a;
printf(「x1=%8.4f,x2=%8.4f\n」,x1,x2);
}
else
{r=-b/(2*a);
i =sqrt(-d)/(2*a);
printf(「x1=%8.4f+%8.4fi\n」r, i);
printf(「x2=%8.4f-%8.4fi\n」r,i)
}
③嵌套分支語句:其語句格式為:
if(條件1) ;
else if(條件2)
else if(條件3)
……
else if(條件n)
else
嵌套分支語句雖可解決多個入口和出口的問題,但超過3重嵌套後,語句結構變得非常復雜,對於程序的閱讀和理解都極為不便,建議嵌套在3重以內,超過3重可以用下面的語句。
④switch開關語句:該語句也是多分支選擇語句,到底執行哪一塊,取決於開關設置,也就是表達式的值與常量表達式相匹配的那一路,它不同if…else 語句,它的所有分支都是並列的,程序執行時,由第一分支開始查找,如果相匹配,執行其後的塊,接著執行第2分支,第3分支……的塊,直到遇到break語句;如果不匹配,查找下一個分支是否匹配。這個語句在應用時要特別注意開關條件的合理設置以及break語句的合理應用。
(3)循環結構:
循環結構可以減少源程序重復書寫的工作量,用來描述重復執行某段演算法的問題,這是程序設計中最能發揮計算機特長的程序結構,C語言中提供四種循環,即goto循環、while循環、do –while循環和for循環。四種循環可以用來處理同一問題,一般情況下它們可以互相代替換,但一般不提倡用goto循環,因為強制改變程序的順序經常會給程序的運行帶來不可預料的錯誤,在學習中我們主要學習while、do…while、for三種循環。常用的三種循環結構學習的重點在於弄清它們相同與不同之處,以便在不同場合下使用,這就要清楚三種循環的格式和執行順序,將每種循環的流程圖理解透徹後就會明白如何替換使用,如把while循環的例題,用for語句重新編寫一個程序,這樣能更好地理解它們的作用。特別要注意在循環體內應包含趨於結束的語句(即循環變數值的改變),否則就可能成了一個死循環,這是初學者的一個常見錯誤。
在學完這三個循環後,應明確它們的異同點:用while和do…while循環時,循環變數的初始化的操作應在循環體之前,而for循環一般在語句1中進行的;while 循環和for循環都是先判斷表達式,後執行循環體,而do…while循環是先執行循環體後判斷表達式,也就是說do…while的循環體最少被執行一次,而while 循環和for就可能一次都不執行。另外還要注意的是這三種循環都可以用break語句跳出循環,用continue語句結束本次循環,而goto語句與if構成的循環,是不能用break和 continue語句進行控制的。
順序結構、分支結構和循環結構並不彼此孤立的,在循環中可以有分支、順序結構,分支中也可以有循環、順序結構,其實不管哪種結構,我們均可廣義的把它們看成一個語句。在實際編程過程中常將這三種結構相互結合以實現各種演算法,設計出相應程序,但是要編程的問題較大,編寫出的程序就往往很長、結構重復多,造成可讀性差,難以理解,解決這個問題的方法是將C程序設計成模塊化結構。
(4)模塊化程序結構
C語言的模塊化程序結構用函數來實現,即將復雜的C程序分為若干模塊,每個模塊都編寫成一個C函數,然後通過主函數調用函數及函數調用函數來實現一大型問題的C程序編寫,因此常說:C程序=主函數+子函數。 因此,對函數的定義、調用、值的返回等中要尤其注重理解和應用,並通過上機調試加以鞏固。
三.掌握一些簡單的演算法
編程其實一大部分工作就是分析問題,找到解決問題的方法,再以相應的編程語言寫出代碼。這就要求掌握演算法,根據我們的《C程序設計》教學大綱中,只要求我們掌握一些簡單的演算法,在掌握這些基本演算法後,要完成對問題的分析就容易了。如兩個數的交換、三個數的比較、選擇法排序和冒泡法排序,這就要求我們要清楚這些演算法的內在含義
結語:當我們把握好上述幾方面後,只要同學們能克服畏難、厭學、上課能專心聽講,做好練習與上機調試,其實C語言並不難學
C源程序的關鍵字---------------------------------------------------------------------------------------
所謂關鍵字就是已被C語言本身使用, 不能作其它用途使用的字。例如關鍵字不能用作變數名、函數名等
由ANSI標準定義的C語言關鍵字共32個 :
auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if while static
根據關鍵字的作用,可分其為數據類型關鍵字、控制語句關鍵字、存儲類型關鍵字和其它關鍵字四類。
1 數據類型關鍵字(12個):
(1) char :聲明字元型變數或函數
(2) double :聲明雙精度變數或函數
(3) enum :聲明枚舉類型
(4) float:聲明浮點型變數或函數
(5) int: 聲明整型變數或函數
(6) long :聲明長整型變數或函數
(7) short :聲明短整型變數或函數
(8) signed:聲明有符號類型變數或函數
(9) struct:聲明結構體變數或函數
(10) union:聲明聯合數據類型
(11) unsigned:聲明無符號類型變數或函數
(12) void :聲明函數無返回值或無參數,聲明無類型指針(基本上就這三個作用)
(2)控制語句關鍵字(12個):
A循環語句
(1) for:一種循環語句(可意會不可言傳)
(2) do :循環語句的循環體
(3) while :循環語句的循環條件
(4) break:跳出當前循環
(5) continue:結束當前循環,開始下一輪循環
B條件語句
(1)if: 條件語句
(2)else :條件語句否定分支(與 if 連用)
(3)goto:無條件跳轉語句
C開關語句
(1)switch :用於開關語句
(2)case:開關語句分支
(3)default:開關語句中的「其他」分支
D
return :子程序返回語句(可以帶參數,也看不帶參數)
3 存儲類型關鍵字(4個)
(1)auto :聲明自動變數 一般不使用
(2)extern:聲明變數是在其他文件正聲明(也可以看做是引用變數)
(3)register:聲明積存器變數
(4)static :聲明靜態變數
4 其它關鍵字(4個):
(1)const :聲明只讀變數
(2)sizeof:計算數據類型長度
(3)typedef:用以給數據類型取別名(當然還有其他作用
(4)volatile:說明變數在程序執行中可被隱含地改變
『柒』 簡單c語言程序
1、★編寫程序,輸入兩個整數:1500和350,求出它們的商和余數並輸出。
main()
{int
a;
int
b;
scanf("%d%d",a,b)
printf("商:%d\n余數:%d",a/b,a%b);
}
2、★編寫程序,讀入三個整數給a,b,c,然後交換它們中的數,把a中原來的值給b,b中原來的值給c,
c中原來的值給a,且輸出改變後的a,b,c的值
main()
{int
a;
int
b;
int
c;
int
tmp;
scanf("%d%d%d",a,b,c)
printf("a:%d
b:%d
c:%d",a,b,c);
tmp=c;
c=b;
b=a;
a=c;
printf("a:%d
b:%d
c:%d",a,b,c);
}
3、★輸入兩個整型變數a,b的值,輸出a+b,a-b,a*b,a/b,(float)a/b,a%b的結果,要求連同算式一起輸出,每個算式佔一行。
main()
{int
a;
int
b;
scanf("%d%d",a,b)
printf("a+b=%d\na-b=%d\na*b=%d\na/b=%d\n(float)a/b=%f\na%b=%d",a+b,a-b,a*b,a/b,(float)a/b,a%b);
}
4、★輸入一個非負數,計算以這個數為半徑的圓周長和面積。
main()
{float
a;
scanf("%f",a);
printf("周長=%f\n面積=%f",2*a*3.14,3.14*a*a);
}
5、★輸入任意一個三位數,將其各位數字反序輸出(例如輸入123,輸出321).
main()
{int
a;
int
b;
scanf("%d",a);
printf("%d",a%10);
a=a%100
printf("%d",a%10);
a=a%10
printf("%d",a%10);
}
6、★輸入任意大小的三個整數,判斷其中是否有兩個奇數一個偶數。若是,則輸出「YES」,不是則輸出「NOT」
(要求用條件表達式進行判斷,不使用if語句)
main()
{int
a;
int
b;
int
c;
int
n=0;
scanf("%d%d%d",a,b,c);
a%2==1?n++:a;
b%2==1?n++:b;
c%2==1?n++:c;
if
n==2
printf("YES");
else
printf("NOT");
}
7、★求前驅字元和後繼字元。輸入一個字元,找出它的前驅字元和後繼字元,並按ASCII碼值,按從大到小的順序輸出這三個字元及其對應的ASCII碼值。
main()
{char
a;
scanf("%c",a);
printf("%c%c%c"a-1,a,a+1);
}
累啊
『捌』 如果能把C語言的要點給我列的在詳細一點就更好了
C語言知識要點——轉給那些還沒把書看完的同志們
來源: 李志遠的日誌
1.C源程序的框架
盡管各個C源程序的功能千變萬化,但框架是不變的,主要有:編譯預處理、主函數()、函數n()等,主函數的位置不一定在最前面,可以在程序的中部或後面,主函數的名字固定為main。
2.C語言源程序的書寫規則:
(1)C源程序是由一個主函數和若干個其它函數組成的。
(2)函數名後必須有小括弧,函數體放在大括弧內。
(3)C程序必須用小寫字母書寫。
(4)每句的末尾加分號。
(5)可以一行多句。
(6)可以一句多行。
(7)可以在程序的任何位置加註釋。
3.語句種類
語句是程序的基本成分,程序的執行就是通過一條條語句的執行而得以實現的,根據表現形式及功能的不同,C語言的基本語句可以分為五大類。
(1)流程式控制制語句
流程式控制制語句的功能是控製程序的走向,程序的流程有三種基本結構:順序結構、分支結構和循環結構,任何復雜的程序都可以由這三種基本結構復合而成。其中後兩種結構要用特定的流程式控制制語句實現。
(2)表達式語句
表達式語句的形式是:表達式;,即表達式後跟一分號";",分號是語句結束符,是一個語句必不可少的成分。表達式和表達式語句的區別在於表達式代表的是一個數值,而表達式語句則代表一種動作。最常見的表達式語句是賦值語句。
(3)函數調用語句
函數調用語句實際上也是一種表達式語句,形式為:在一次函數調用的小括弧後面加上一個分號。
(4)空語句
空語句的形式就是一個分號,它不代表任何動作,常常作為一個意義轉折點使用。
(5)復合語句
復合語句從形式上看是多個語句的組合,但在語法意義上它只相當於一個語句,在任何單一語句存在的地方都可以是復合語句。注意復合語句中最後一個語句末尾的分號不能少。復合語句右大括弧後面沒有分號。
4.運算符
用來表示數據各種操作的符號稱為運算符。運算符實際上代表了一種類型數據的運算規則。不同的運算符具有不同的運算規則,其操作的數據類型必須符合該運算符的要求,運算結果的數據類型也是固定的。
根據參加操作的數據個數多少,可以將C語言的運算符分為單目運算符,雙目運算符和三目運算符(三目運算符只有條件運算符一個)。
根據運算對象和運算結果的數據類型可分為算術運算符、關系運算符、邏輯運算符等。
5.表達式
表達式是由常量、變數、函數,通過運算符連接起來而形成的一個算式。一個常量,一個變數或一個函數都可以看成是一個表達式。
表達式的種類有:
算術表達式、關系表達式、邏輯表達式、賦值表達式、字位表達式、強制類型轉換表達式、逗號表達式(順序表達式)、條件表達式、指針表達式。
6.數據的輸入/輸出
C語言本身沒有輸人/輸出語句,數據的輸入/輸出是通過調用庫函數來實現的。
第二章 數據類型知識點
劃分數據類型的意義是編譯系統對每個不同類型的數據在內存中分配的位元組數不同,不同類型的數據可以按規定參加不同類型的運算。
1.C語言的數據類型
數據類型有:整型、字元型、實型單精度型、雙精度型、構造類型數組類型、結構體類型、共用體類型、枚舉類型、指針類型、空類型,其中整型、實型、字元型是C語言中的基本類型。
2.各種類型數據的定義方法
定義形式:數據類型 變數名1,變數名2,......變數名n;
3.常量與變數
(1)常量——在程序執行期間其值不變的量。它不能被賦值。
(2)變數——在程序運行期間其值可以改變的量。
4.各種類型數據的混合運算
各類數據運算前會自動轉換成同一類型。規律如右圖示:從右向左的箭頭表示必定的轉換,如float型數據運算前化成double型,以提高運算精度,結果也為double型,short或char型數據運算前化成int型,結果也為int型;從下向上的箭頭表示轉換方向是向級別高的靠攏。
5.強制類型變換
當我們需要對數據進行類型變換,而機器又不能自動完成時,就要用強制類型變換,形式為:(數據類型符)(被轉換對象)。
第三章 選擇知識點
C語言中實現選擇結構的控制語句有兩種:條件分支語句if和開關分支語句switch。
1.if語句的三種形式:
(1) if(表達式)語句;
(2) if(表達式)語句1;
else語句2;
(3) if(表達式1)語句1;
else if(表達式2)語句2;
else if(表達式3)語句3;
...
else if(表達式n)語句n;
2.開關分支語句switch
(1)形式
switch(表達式)
{ case e1:語句1;break;
case e2:語句2;break;
case e3:語句3;break;
......
case en:語句n;break;
default :語句n+1;
}
(2)功能
當表達式的值等於e1時,執行語句1;
當表達式的值等於e2時,執行語句2;
......
當表達式的值等於en時,執行語句n;
當表達式的值與常量e1、e2......en誰都不等時,就執行default後的語句
第四章 循環知識點
循環就是在程序執行過程中,反復多次的執行同一段程序。C語言中有三種循環語句。
1.while循環語句
形式為:while(表達式)
{
循環體
};
執行過程是:先計算表達式的值,當表達式的值非0時就執行循環體,之後再判斷表達式的值,且重復以上過程;當表達式的值為0時就結束循環。
2.do-- while循環語句
形式為:do
{
循環體
} while(表達式);
執行過程是:先執行循環體一次,再判斷表達式的值,當表達式的值非0時就再執行循環體,之後再判斷表達式的值,且重復以上過程;當表達式的值為0時就結束循環。
3.for循環語句
形式為:for(表達式1;表達式2;表達式3)
{ 循環體 }
4.三種循環語句的比較
三種循環語句可以完成同一件事,可任選其一。
使用while和do-- while循環時,要提前給循環變數賦初值。而for循環是在表達式1中賦初值的。
while循環和for循環都是先判斷條件後執行循環體,有可能一次也不執行循環體,do-- while循環是先執行循環體,後判斷條件,即循環體至少也得執行一次。for循環不限於計數循環,其循環條件可以是邏輯表達式和字元表達式等。
5.循環嵌套
三種循環控制語句可以互相嵌套,即在一個循環體內部又可以出現另一循環,這種嵌套在理論上來說可以是無限的。注意必須是一個循環完整的套住另一個循環。
6.break語句
break語句只能出現在三種循環語句和switch多分支語句中,其作用是用來中斷這四種語句的執行。當程序執行到break語句時,會跳出break語句所在的循環或switch分支,而直接執行緊跟在它們後面的語句。
7.continue語句
continue語句只能出現在三種循環語句中,當程序執行到continue語句時,其作用是提前結束本次循環,自動跳過循環體中後半部剩餘的語句的執行,而直接回到循環條件判斷。根據判斷的結果決定是否繼續執行下次循環。
8. goto 語句
goto語句是一種非結構化語句,其作用是使程序的執行無條件的轉移到某一處。使用格式為: goto 標號;利用goto語句與if條件語句配合,也可以實現條件循環。C語句允許在任何語句前添加標號,作為跳轉目標,標號的構成是標識符後面加一個":"。
第五章 數組知識點
數組就是同類型的一批數據的集合,用一個變數名存放,區分各元素的辦法是用下標。
1.一維數組
類型說明符數組名\[數組長度\];
(1)數組命名要符合標識符的命名規則。
(2)數組名後的括弧必須是方括弧,不能是圓括弧。
(3)數組長度必須是正整數,可以是個表達式,但不能有變數,C語言不支持動態數組。
(4)數組長度表示數組中元素的個數
(5)數組元素的下標從0開始數,所以最大下標是數組的長度減1。
2.多維數組(以二維為例)
類型說明符數組名\[第一維長度\]\[第二維長度\];
(1)數組命名要符合標識符的命名規則。
(2)數組名後的括弧必須是兩個方括弧,定義時不能寫成inta\[3,4\];。
(3)數組長度必須是整型常量表達式。
(4)第一維長度表示數組行數,第二維長度表示數組列數。
(5)每個數組元素都有兩個下標,第一維表示該元素所在的行,第二維表示該元素所在的列,每一維的下標都從0開始數。
二維數組的初始化:C語言規定只有靜態數組和外部數組才允許在定義時賦初值,賦初值形式如下:
static類型說明符數組名\[第一維長度\]\[第二維長度\]={初值表};
二維數組的引用:二維數組不能整體引用,要引用數組的單個元素,形式為:數組名\[下標\]\[下標\]和普通變數的使用無任何區別。
3.字元數組
C語言中沒有字元串變數,字元串是靠字元數組實現的,所謂字元數組就是元素的數據類型為字元型的數組。
(1)字元數組的定義形式:char數組名\[數組長度\];
因為C語言中的整型數據和字元型數據是相通的,所以也可以這樣定義:int數組名\[數組長度\];
(2)字元數組的初始化:給字元數組的初始化有兩種方式,一種是用字元常量,另一種是用字元串。形式如下:
staticchar數組名\[數組長度\]={字元常量表};
staticchar數組名\[數組長度\]={字元串常量};
4.數組與函數
數組經常作為函數的參數,數組做函數的參數有兩種形式,一是數組元素做函數的參數,一是數組名做函數的參數,當用數組名做函數的實參時傳送的是首地址。
5.常用的字元串處理函數
C語言提供了一些處理字元串的標准函數,用以完成一些常見的操作。對以下幾個函數要掌握其功能和調用形式。
(1)gets(字元數組名)此函數功能是從鍵盤輸入一串字元,回車後送到字元數組中,注意定義數組時數組長度要足夠大。
(2)puts(字元數組名)此函數功能是將字元數組的內容輸出到屏幕上。
(3)strcat(字元數組名1,字元數組名2)此函數功能是將字元數組1中的'\\0'去掉後將字元數組2的內容連接到字元數組1的末尾。
(4)strcpy(字元數組名1,字元數組名2)函數功能是將字元數組2的內容(包括'\\0')拷貝到字元數組1中,字元數組2處也可以是字元串常量。strcpy函數可以實現拷子串。
(5)strcmp(字元數組名1,字元數組名2)函數功能是兩個字元串(ASCII碼)比大小。
(6)strlen(字元數組名)此函數功能是求字元串的長度,注意不包括'\\0'。
(7)strlwr(字元數組名)此函數功能是將字元串中的所有大寫字母都變成小寫。
(8)strupr(字元數組名)此函數功能是將字元串中的所有小寫字母都變成大寫。
第六章 函數知識點
每個C源程序都是由函數組成的,一個主函數和若干個其它函數,C語言程序設計的基礎工作就是函數的具體編寫,C語言中的函數就相當於其它高級語言中的子程序。
1.函數的概念
函數就是一個數據加工廠,從函數外部接收數據,在函數內部加工處理,然後得到一個結果返回給外部的調用者。所以函數就是對語言功能的擴充,對函數的調用就是對功能的調用。
2.標准函數
各種高級語言都定義了一些標准函數,C語言中的標准函數稱為庫函數,是將一些基本的、常用的功能編成了函數,供大家使用方便。使用庫函數時必須把它的頭文件用#i nclude命令包含進來,每個庫函數的功能及對應的頭文件都會在手冊中給出。
3.自定義函數
C 語言也允許用戶自己編寫函數以實現C庫函數中沒有提供的功能,稱作自定義函數。
4.定義函數
C語言規定每個函數都要獨立定義,函數定義不能嵌套。
函數定義的形式:數據類型函數名(形參表)
形參說明語句序列
{ 說明語句序列
可執行語句序列 }
5.函數調用
函數調用的形式是: 函數名(實參表)。當實參表中有多個參數時,要用逗號隔開,若被調函數無參數,調用時小括弧也不能省。函數調用過程是:將實參的值傳給形參,在函數體內進行加工處理,然後由return語句將函數值返回調用處。
5.全局變數和局部變數
局部變數:在函數內部定義的變數稱為局部變數,只在本函數中有效。
全局變數:在函數外部定義的變數稱為全局變數,它的作用范圍是從定義開始到本文件結束。
6.動態存儲與靜態存儲
內存中的用戶數據區分為動態存儲區和靜態存儲區,動態存儲區是指程序運行期間給變數臨時分配存儲單元,變數用完後立即釋放單元的區域,動態存儲區放的是函數的形參、自動變數、函數調用期間的現場保護數據和返回地址。
靜態存儲區是指程序運行期間給變數分配固定的存儲單元,放的是全局變數和局部靜態變數。
一個變數除了它的數據類型以外還有存儲類型,定義一個變數時應該說明這兩種類型。
第七章 預處理知識點
對高級語言編譯連接就是把源程序轉換成機器語言,C語言在進行編譯之前還要預先處理三件事:宏定義命令、文件包含命令和條件編譯命令,統稱為預處理命令,其特點是:
1.所有的預處理命令都放在程序的頭部,以#開頭,且#號後面不留空格。
2.預處理命令不是C的語句,行尾不加分號。
3.預處理命令是在編譯預處理階段完成的,所以它們沒有任何計算、操作等執行功能。
4.預處理命令有所變動後,必須對程序重新進行編譯和連接。
1.宏定義
宏定義命令的作用是給一些常用的對象重新命名,在程序中可以用宏名來引用這些對象,預處理時宏名會被代表的內容替換,此過程稱為宏展開或宏替換。宏定義有兩種形式:
2.文件包含
使用文件包含命令可以將另—個C源程序的全部內容包含進來,其形式為:
#i nclude <文件名>或#i nclude "文件名"
通常可以把經常用到的,帶公用性的一些函數或符號等集合在...起形成一個源文件,然後用此命令將這個源文件包含進來,這樣可以避免在每個新程序中都要重新鍵入這些內容。
3.條件編譯
顧名思義滿足條件時進行編譯,為了解決程序移植問題,C語言提供了條件編譯命令,它能使源程序在不同的編譯環境下生成不同的目標代碼文件。條件編譯命令有3種形式。
第八章 指針知識點
1.什麼是指針和指針變數?
指針就是內存地址,因為通過"地址"可以找到變數,所以內存"地址"形象的稱為指針。
指針變數就是存地址的變數。在C語言中用一個變數存另一個變數的地址,那麼就稱這個變數為指針變數,指針變數的值就是地址。通常指針變數被簡稱為指針。
指針變數是有類型的,即指針值增1表示指向下一個數據,如整型數據在內存中占兩個位元組,它的指針變數增1是增兩個位元組。如實型數據在內存中佔4個位元組,它的指針變數增1是增4個位元組。
2.怎樣定義指針變數?
定義形式為:數據類型*指針變數名1,*指針變數名2......;
3.指針的有關運算
指針為內存地址是整數,可以進行一些算術運算、關系運算、賦值運算、特殊運算等,但要注意運算代表的實際意義。
4.指向數組的指針變數
(1)指向數組元素的指針變數定義形式為:inta\[10\];
int*p=a;
(2)指向一維數組的指針變數
定義形式為:inta\[3\]\[4\];
int(*p)\[4\];
p=a;
(3)指向字元串的指針變數
定義形式為: char*p="字元序列";
C語言中的字元串是以隱含形式的字元數組存放的,定義了指針變數p並不是將整個字元串都存放在p中了,而p中存放的是字元串的首地址。
5.指向函數的指針變數
一個函數在編譯時被分配一個入口地址,這個地址就是函數的指針,可以用一個指針變數指向它。指向函數的指針變數定義形式為:
數據類型(*指針變數名);
6.指針變數做函數的參數
(1)指針作函數的參數可以傳送地址,如數組的首地址,函數的入口地址等。
(2)指針作函數的參數也可以用地址方式傳送數據。
7.返回值是指針的函數
即函數的返回值是內存的地址,利用這種方法可以將一個以上的數據返回給函數的調用者。定義形式如下:
數據類型*函數名(形參表)
8.指針數組
定義形式為:數據類型*數組名\[數組長度\];
數組中的每個元素都是指針類型的數據,這種數組被稱為指針數組。
9.指向指針的指針
定義形式為:數據類型**指針變數名;
指向指針數據的指針變數稱為指向指針的指針。
10.main函數的形參
main函數可以帶兩個形參,如:
main(argc,argv)
intargc;
char *argv\[\];
{
......
}
11.指向結構體的指針變數
結構體變數的指針就是該變數所佔據的內存段的首地址。指向結構體的指針變數定義形式為:struct結構體類型名*指針變數名;
12.指向共用體的指針變數
共用體變數的指針就是該變數所佔據的內存段的首地址。指向共用體的指針變數定義形式為:union共用體類型名*指針變數名;
替換了的字元時(這里為正中間的字元"4"),原來的字元己不復存在。
第九章 結構體與共用體知識點
結構體類型是C語言的一種構造數據類型,它是多個相關的不同類型數據的集合,相當於其它高級語言中的記錄。
1.結構體類型定義
結構體類型的形式為:
struct結構體類型名
{ 數據類型成員名1;
...
數據類型成員名n;
}
2.結構體變數的定義
結構體變數有三種定義形式:
(1)先定義結構體類型,後定義結構體變數。
(2)定義結構體類型的同時定義結構體變數。
(3)不定義結構體類型名,直接定義結構體變數。
3.結構體變數的引用
(1)結構體變數的初始化:許多C版本規定對外部或靜態存儲類型的結構體變數可以進行初始化,而對局部的結構體變數則不可以,新標准C無此限制,允許在定義時對自動變數初始化。
(2)結構體成員的引用:由於C語言一般不允許對結構體變數的整體引用,所以對結構體的引用只能是對分量的引用,結構體變數中的任一分量可以表示為:結構體變數名·成員名
4.結構體與數組
C語言中數組的成員可以是結構體變數,結構體變數的成員也可以是數組。
結構體數組有三種定義形式:
(1)先定義結構體類型,後定義結構體數組。
(2)定義結構體類型的同時定義結構體數組。
(3)不定義結構體類型名,直接定義結構體變數。
5.結構體與指針
一方面結構體變數中的成員可以是指針變數,另一方面也可以定義指向結構體的指針變數,指向結構體的指針變數的值是某一結構體變數在內存中的首地址。
結構體指針的定義形式:struct結構體類型名*結構體指針變數名。
由結構體指針引用結構體成員的方法
6.用指針處理鏈表
結構體的成員可以是指針類型,並且這個指針類型就是本結構體類型的,這樣可以構造出一種動態數據結構—成為鏈表。所謂動態數據就是指在編譯時不能確定數據量的多少,而是在程序執行時才確定的數據,動態數據可以比較方便的進行數據插人或刪除等操作。
7.結構體與函數
結構體變數的成員可以作函數的參數、指向結構體變數的指針也可以作函數的參數。雖然結構體變數名也可以作為函數的參數,將整個結構體變數進行傳遞,但一般不這樣做,因為如果結構體的成員很多,或者有些成員是數組,則程序運行期間,將全部成員一個一個的傳遞,既浪費時間,又浪費空間,開銷太大。
8.結構體與共用體
結構體變數中的成員可以是共用體,共用體變數中的成員可以是結構體。
共用體
為了節省存儲空間,C語言允許將幾種不同類型的數據存放在同一段內存單元,它們共用一個起始地址,稱做共用體。
1.共用體類型定義
union共用體類型名
{ 數據類型成員名1;
...
數據類型成員名n;
}
2.共用體變數定義
(1)先定義類型,後定義變數。
(2)定義類型的同時定義變數。
(3)不定義類型名,直接定義變數。
3.共用體變數的引用
(1)共用體變數不能整體引用,只能引用其成員,形式為:共用體變數名·成員名
(2)共用體變數的成員不能初始化,因為它只能放一個數據。
(3)共用體變數存放的數據是最後放入的數據。
(4)共用體變數的長度是最大的成員的長度。
(5)可以引用共用體變數的地址、各個成員的地址,它們都是同一個地址。
(6)共用體變數不能當函數的參數或函數的返回值,但可以用指向共用體變數的指針作函數的參數。
(7)共用體變數的成員可以是數組,數組的成員也可以是共用體變數。
第十章 位運算知識點
位運算就是按二進制位進行操作的運算,運算的對象只能是整型或字元型,不能是實型。不同長度的變數進行位運算,系統會自動右對齊,而左端的不齊部分,對於無符號數左端補滿0,對於有符號數則:正數左端補滿0,負數左端補滿1。
第十一章 文件知識點
操作系統是以文件為單位對數據進行管理的,任何一種計算機高級語言都要有和磁碟文件打交道的能力,否則該語言的功能充其量是算一算、顯示顯示而已。在C語言中沒有單獨的文件操作語句,所有對文件的操作都是通過庫函數來完成的,所以本章的重點是學會使用有關文件操作的庫函數。
1.文件的基本概念
2.文件類型指針
3.文件的操作
『玖』 最基本的C語言程序
定義一個double(雙精度)型變數 a並賦值a=1.0
double 和 float 的區別是double精度高,有效數字16位,float精度7位。但double消耗內存是float的兩倍,double的運算速度比float慢得多,C語言中數學函數名稱double 和 float不同,不要寫錯,能用單精度時不要用雙精度(以省內存,加快運算速度)
『拾』 c語言程序解析
c=(a+=a-=5), (a=b, b+3)
+=、-=優先順序相同,自右結合,
1 a-=5 , a=a-5 a=-5
2 a+=-5 , a=a+(-5) a=-10
c=-10
,表達式表示並列,結果取最後一個,故右邊
(a=b, b+3)
a=b ,a=0
b+3=4
得4
即c=-10, a=0,b=0