自学c程序设计之路,谭浩强第五版,(一)程序设计与c语言
由于本人提升技能需求,開始自學c語言程序設計,教材為《c程序設計》第五版譚浩強著。該系列為本人的學習筆記,記錄的是知識點與例題,學到哪里,更到哪里。也希望能對正在學c程序設計的朋友有幫助。
目錄
1,計算機程序
2,計算機語言
3,高級語言的發展
4,C語言的發展
5,C語言的特點
6,最簡單的C語言程序
7,注釋
8,C語言程序的結構
9,運行C程序的步驟與方法
10,程序設計的任務
?11,ASCII碼表
12,C語言編譯器
1,計算機程序
指令:可以被計算機理解并執行的基本操作命令。?
程序:一組計算機能識別和執行的指令。一個特定的指令序列用來完成一定的功能。
軟件:與計算機系統操作有關的計算機程序,規程,規則,以及可能有的文件,文檔及數據。
2,計算機語言
有一個人為計算機語言做出過巨大貢獻:數學家馮?諾依曼提出了重大的改進理論,主要有兩點:其一是電子計算機應該以二進制為運算基礎,其二是電子計算機應采用存儲程序方式工作,并且進一步明確指出了整個計算機的結構應由五個部分組成:運算器、控制器、存儲器、輸入裝置和輸出裝置。馮?諾依曼的這些理論的提出,解決了計算機的運算自動化的問題和速度配合問題,對后來計算機的發展起到了決定性的作用。直至今天,絕大部分的計算機還是采用馮?諾依曼方式工作。
第一代 機器語言 (machine language):
計算機能直接識別和接受的二進制代碼稱為機器指令。機器指令的集合就是該計算機的機器語言 (machine language)。特點:難學,難記,難檢查,難修改,難以推廣使用。依賴具體機器難以移植。
第二代 匯編語言(面向機器的程序設計語言):
機器語言的符號化。用英文字母和數字表示指令的符號語言。特點:相比機器語言簡單好記,但任然難以普及。匯編指令需通過匯編程序轉換為機器指令才能被計算機執行。依賴具體機器難以移植。
第三代 高級語言(High-level programming language ):
高級語言更接近與人們習慣使用的自然語言和數學語言。特點:功能強大,不依賴于具體機器。用高級語言編寫的源程序需要通過編譯程序轉換為機器指令的目標程序。
3,高級語言的發展
非結構化語言→結構化語言→面向對象的語言
規定:程序必須由具有良好特性的基本結構(順序結構,選擇結構,循環結構)構成,程序中的流程不允許隨意跳轉,程序總是由上而下順序執行各個基本結構。
特點:程序結構清晰,易于編寫,閱讀和維護。
4,C語言的發展
C 語言最早的原型是 ALGOL 60 1963 年,劍橋大學將其發展成為 CPL(Combined Programing Language)。1967 年,劍橋大學的 Matin Richards 對 CPL 語言進行了簡化,產生了 BCPL 語言。
1970 年,美國貝爾實驗室(Bell Labs)的 Ken Thompson 將 BCPL 進行了修改,并取名叫做 B 語言,意思是提取 CPL 的精華(Boiling CPL down to its basic good features)。并用 B 語言寫了第一個 UNIX 系統。
1973 年,AT&T 貝爾實驗室的 Dennis Ritchie(D.M.RITCHIE) 在 BCPL 和 B 語言的基礎上設計出了一種新的語言,取 BCPL 中的第二個字母為名,這就是大名鼎鼎的 C 語言。
隨后不久,UNIX 的內核(Kernel) 和應用程序全部用 C 語言改寫,從此,C 語言成為 UNIX 環境下使用最廣泛的主流編程語言。
1978 年,Dennis Ritchie 和 Brian Kernighan 合作推出了《The C Programming Language》的第一版(按照慣例,經典著作一定有簡稱,該著作簡稱為 K&R),書末的參考指南 (Reference Manual) 一節給出了當時 C 語言的完整定義,成為那時 C 語言事實上的標準,人們稱之為 K&R C。從這一年以后,C 語言被移植到了各種機型上,并受到了廣泛的支持,使 C 語言在當時的軟件開發中幾乎一統天下。
隨著 C 語言在多個領域的推廣、應用,一些新的特性不斷被各種編譯器實現并添加進來。于是,建立一個新的“無歧義、于具體平臺無關的 C 語言定義” 成為越來越重要的事情。1983 年,ASC X3(ANSI 屬下專門負責信息技術標準化的機構,現已改名為 INCITS)成立了一個專門的技術委員會 J11(J11 是委員會編號,全稱是 X3J11),負責起草關于 C 語言的標準草案。1989 年,草案被 ANSI 正式通過成為美國國家標準,被稱為 C89 標準。
隨后,《The C Programming Language》第二版開始出版發行,書中內容根據 ANSI C(C89)進行了更新。1990 年,在 ISO/IEC JTC1/SC22/WG14 (ISO/IEC 聯合技術第 I 委員會第 22 分委員會第 14 工作組) 的努力下,ISO 批準了 ANSI C 成為國際標準。于是 ISO C(又稱為 C90) 誕生了。除了標準文檔在印刷編排上的某些細節不同外,ISO C(C90) 和 ANSI C(C89) 在技術上完全一樣。
之后,ISO 在 1994、1996 年 分別出版了 C90 的技術勘誤文檔,更正了一些印刷錯誤,并在1995 年通過了一份 C90 的技術補充,對 C90 進行了微小的擴充,經過擴充后的 ISO C 被稱為 C95。
1999 年,ANSI 和 ISO 又通過了最新版本的 C 語言標準和技術勘誤文檔,該標準被稱為 C99 。這基本上是目前關于 C 語言的最新、最權威的定義了。
現在,各種 C 編譯器都提供了 C89(C90) 的完整支持,對 C99 還只提供了部分支持,還有一部分提供了對某些 K&R C 風格的支持。
5,C語言的特點
1,語言簡潔,緊湊,使用方便,靈活。
2,運算符豐富。
3,數據類型豐富。
4,具有結構化的控制語句;用函數作為程序的模塊單位,便于實現程序的模塊化;C語言是完全模塊化和結構化的語言。
5,語法限制不太嚴格,程序設計自由度大。
6,允許直接訪問物理地址;能進行位(bit)操作;能實現匯編語言的大部分功能;可以直接對硬件進行操作;因此C語言既具有高級語言的功能,又具有低級語言的許多功能,可用來編寫系統軟件。
7,程序可移植性好。
8,生成目標代碼質量高,程序執行效率高。
6,最簡單的C語言程序
【例1.1】要求在屏幕上輸出:Hello world
解題思路:在主函數中用printf函數原樣輸出以上文字。
#include<stido.h> //這是編譯預處理指令 int main() //定義主函數 { //函數開始的標志 printf("Hello world\n"); //輸出所指定的一行信息 return 0; //函數執行完畢時返回函數0 } //函數結束的標志輸出結果:
?程序分析:
main是函數的名字,表示“主函數”;每一個C語言程序都必須有一個main函數。
main前面的int表示此函數的類型是int類型(整型),即在執行主函數后會得到一個值(即函數值),其值為整型。
return 0;的作用是當main函數執行結束前將整數0作為函數值,返回到調用函數處。
函數體由花括號{}括起來。
printf是C編譯系統提供的函數庫中的輸出函數。printf函數中雙引號內的字符串"Hello world"按原樣輸出。\n是換行符,即在輸出“Hello world”后,顯示屏的光標位置移到下一行的開頭。
每一個語句后都有一個分號,表示語句結束。
在使用函數庫中的輸出函數時,編譯系統要求程序提供有關此函數的信息,程序的第一行"#include<stido.h>"的作用就是用來提供這些信息的。stdio.h是系統提供的一個文件名,stdio是standard input & output的縮寫,文件后綴.h的意思是頭文件(header file),因為這些文件都是放在程序各文件模塊的開頭的。輸入輸出函數的相關信息已事先放在stdio.h文件中。
//表示此處到本行結束是"注釋",用來對程序有關部分進行必要的說明。在寫C程序時應當多用注釋,以方便自己和別人理解程序各部分的作用。在程序進行預編譯處理時將每個注釋替換成一個空格,因此在編譯時注釋部分不產生目標代碼,注釋對運行不起作用。注釋是給人看的,而不是讓計算機執行的。
【例1.2】求兩個整數之和
解題思路:設置3個變量,a和b用來存放兩個整數,sum用來存放和數。用賦值運算符"="把相加的結果傳送給sum。
#include<stdio.h> //這是編譯預處理指令 int main() //定義主函數 { //函數開始int a, b,sum; //本行是程序的聲明部分,定義a,b,sum為整型變量a = 123; //對變量a進行賦值b = 456; //對變量b進行賦值sum = a + b; //進行a+b的運算,并把結果存在變量sum中printf("sum is %d\n",sum); //輸出結果return 0; //使函數值返回為0 } //程序結束輸出結果:
?程序分析:
printf("sum is %d\n",sum);輸出時用sum的值取代%d。
?
printf("sum is %d\n",sum);printf函數圓括號內有兩個參數。第一個參數是雙引號的內容sum is %d\n,它是輸出格式字符串,作用是輸出用戶希望輸出的字符和輸出的格式。其中sum is是用戶希望輸出的字符,%d是指定的輸出格式,d表示用"十進制整數"形式輸出。圓括號內第二個參數sum表示要輸出變量sum的值。在執行printf函數時,將sum變量的值(以十進制整數表示)取代雙引號中的%d。
【例1.3】求兩個整數中的較大者
解題思路:用一個函數來實現求兩個整數中的較大者。在主函數中調用此函數并輸出結果。
#include <stdio.h> //主函數 int main() //定義主函數 { //主函數體開始 int max(int x,int y); //對被調用函數max的聲明 int a,b,c; //定義變量a,b,c scanf("%d,%d",&a,&b); //輸入變量a和b的值 c=max(a,b); //調用max函數,將得到的值賦給c printf("max=%d\n",c); //輸出c的值 return 0; //返回函數值為0 } //主函數體結束 //求兩個整數中的較大者的max函數 int max(int x,int y) //定義max函數,函數值為整型, 形式參數x和y為整型 { int z; //max函數中的聲明部分,定義本函數中用到的變量z為整型 if(x>y) z=x; //若x>y成立,將x的值賦給變量z else z=y; //否則(即x>y不成立),將y的值賦給變量z return(z); //將z的值作為max函數值,返回到調用max函數的位置 }程序分析:
本程序包括兩個函數:1,主函數main;2, 被調用的函數max。 max函數的作用是將x和y中較大者的值 賦給變量z,最后通過return語句將z的 值作為max的函數值返回給調用max函 數的主函數。 scanf是輸入函數的名字(scanf和printf 都是C的標準輸入輸出函數)。該scanf函數的作用是輸入變量a和b的值。“ & ” 是地址符,&a 的含義是“變量 a 的地址”,&b 是“變量 b 的地址”。
執行 scanf 函數,從鍵盤讀入兩個整數,放到變量 a 和 b 的地址,然后把這兩個整數分別賦給變量 a 和 b。
max(a,b)調用max函數。在調用時將 a和b作為max函數的實際參數的值分 別傳送給max函數中的形式參數x和y。?
注意: 本例程序中兩個函數都有 return語句,請注意它們的異同。 兩個函數都定義為整型,都有函數值,都需要用return語句為函數指定返回值。 main函數中的return語句指定的返回 值一般為0。 max函數的返回值是max函數中求出的 兩數中的最大值z,只有通過return語 句才能把求出的z值作為函數的值并返 回調用它的main函數中。7,注釋
C語言中,注釋有兩種類型:
單行注釋:
單行注釋通常用于對程序中的某一行代碼進行解釋,用”//”符號表示,后面為注釋的內容。
多行注釋:
多行注釋就是注釋中的代碼,可以為多行,以符號”/“開頭,以符號”/”結尾。
注意:
在C語言中,有的注釋可以嵌套使用,有的不能嵌套。
多行注釋”/……/“中,可以嵌套單行注釋”//”。
多行注釋”/……/”中,不能嵌套多行注釋”/……/”。
8,C語言程序的結構
1,一個程序由一個或多個源程序文件組成,源程序文件包括:預處理指令、全局聲明、函數定義。
2,函數是C程序的主要組成部分。一個C語言程序是由一個或多個函數組成的,其中必須包含唯一 一個main函數 。程序中被調用的函數可以是系統提供的庫函數,也可以是用戶根據需要自己編制設計的函數。
3,一個函數包括兩個部分:函數首部、函數體。
4,程序總是從 main 函數開始執行的。
5,程序中要求計算機完成的操作是由函數中的 C 語句完成。
6,在每個數據聲明和語句的最后必須有一個分號。
7,C語言本身不提供輸入輸出語句,輸入輸出操作由函數完成。
8,程序應當包含注釋。
9,運行C程序的步驟與方法
10,程序設計的任務
?11,ASCII碼表
?
12,C語言編譯器
c語言最常用的編譯器有MicrosoftVisualC++、MyEclipse、TurboC和gcc編譯器等。
本人用的Visual stdio2022,可在微軟商店下載。
如若安裝不成功可參考博客:visual studio 2019/2022 安裝時卡住,一直正在提取文件時的親測有效的解決方案_北游當南歸的博客-CSDN博客_visualstudio安裝卡住
總結
以上是生活随笔為你收集整理的自学c程序设计之路,谭浩强第五版,(一)程序设计与c语言的全部內容,希望文章能夠幫你解決所遇到的問題。