快速上手系列-C語言之基礎篇(一)

2020-11-29 濁酒敬風塵

按照之前的計劃,這篇文章本該寫C語言簡介,包括一些歷史背景,發展狀況, 語言特點什麼的,這些東西著實比較囉嗦。

吃飯用的筷子,到現在我都不知道它的由來,不知道它是在什麼歷史背景下誕生的

有些東西還是有必要了解一下,比如,C語言所產生的代碼運行速度比彙編語言編寫的代碼運行速度稍慢一點,但還是有得一拼,同時C語言要比彙編語言編寫的代碼可讀性高,可移植性好。另外,相對於其他高級語言,比如C++、java、C#等來說,C語言編寫的代碼運行效率要高。

在介紹C語言的數據類型和基本語法之前,先說說C程序結構和C文件結構。

1、C程序結構:

①預處理指令;

②變量、函數、語句、表達式、注釋等;

③返回值;

以一段簡單的列印輸出「hello world」代碼為例:

注意:一個完整的C語言程序,是由一個、且只能有一個main()函數(又稱主函數)和若干個其他函數結合而成,或僅由一個main()函數構成;

接下來看看C語言程序運行結構:基本的三種程序結構為順序結構、選擇結構和循環結構。

順序結構:程序按順序執行,不發生跳轉。選擇結構:依據是否滿足條件,執行相應功能。(1)if(表達式) 語句;(2)if(表達式)語句1;else語句2;(3)if(表達式1)語句1;else if(表達式2)語句2;...else語句n;注意:第三種方式,即: if......else if..........else if.....else,只能響應一個條件。循環結構:

while ( ) { } 語句 先判斷表達式後執行.

do{ }-while( ) 語句 先執行語句後判斷表達式.

for( ; ; ){ }

2、C文件結構:

一個基於C的軟體系統一般由以下文件構成:

若干個C文件:每個C文件中包含若干個函數。若干個頭文件:每個頭文件中包含一些數據結構的定義以及C函數、變量的原型聲明。若干個庫文件:庫文件是編譯後的二進位文件,一般由若干C文件編譯後組成,其中包含了若干個函數的可執行代碼;這些庫文件中的函數可執行代碼在連接的時候合併到最終的可執行文件中。若干個make文件:make文件描述了多個文件中的依賴關係以及生成最終可執行文件或庫文件所需要的信息。

由於篇幅較小,再加點內容,順便寫寫C語言的關鍵字和控制語句。

1、關鍵字:

這裡介紹下C語言的32個關鍵字(至於ISO推出的C99標準新增的5個C語言關鍵字和C11標準新增了7個C語言關鍵字目前沒有做過過多了解,這裡就不再介紹)

(1)數據類型關鍵字(12個)

char,short,int,long,float,double,unsigned,signed,void,struct,union,enum;char:字符型類型數據short:短整型數據,修飾int,一般省略被修飾的int;// short int a = 10;一般寫成 int a = 10;int:整型數據,通常為編譯器指定的機器字長;long:長整型數據,修飾int,一般省略被修飾的int;float:單精度浮點型數據;double:雙精度浮點型數據;unsigned, signed是修飾符,分別表示無符號和有符號,我們時常寫的「 int a=123;」其實就是「signed int a = 123;」,表示有符號整型void: 聲明函數無返回值或無參數,修飾指針時表示無類型指針,void不可用來定義變量,但可以用它來修飾各種變量;struct:用來聲明結構體;union:用來聲明共用體或者叫聯合體;enum:用於枚舉類型的聲明;關於結構體,共用體,枚舉的用法以及結構體和共用體的區別以後單獨再寫;(2)控制語句關鍵字(12個)if,else,for,do,while,break,case,continue,default,return,switch,goto(儘量別使用);(3)存儲類關鍵字(4個)auto,extern,register,staticauto:聲明自動變量(很少使用);extern:聲明變量外部可用,可以置於變量或者函數前,以表示變量或者函數的定義在別的文件中,可以外部使用;static:聲明靜態變量,static修飾的變量存儲在靜態變量區,修飾全局變量時,表示該變量為全局靜態變量,作用域為當前文件;修飾函數時表示函數作用域為當前文件內部; 修飾局部變量時,表示該變量為靜態局部變量,只被初始化一次,賦值之後值會保持最新的值,也就是說局部靜態變量的生命周期被擴展到整個程序運行的時間段內。這裡不知道有沒有說清楚,乾脆看個例子簡單明了:

register:聲明寄存器變量,修飾符暗示編譯程序相應的變量將被頻繁地使用,如果可能的話,應將其保存在CPU的寄存器中,以加快其存儲速度。註:register變量必須是能被CPU所接受的類型,這通常意味著register變量必須是一個單個的值,並且長度應該小於或者等於整型的長度。不過,有些機器的寄存器也能存放浮點數。因為register變量可能不存放在內存中,所以不能用「&」來獲取register修飾變量的地址,如:

(4)其他關鍵字(4個)

const,sizeof,typedef,volatileconst:const修飾變量,表示被修飾的變量不可被當前線程或進程改變;例如:const int *p = 100; //const修飾int *,表示*p的值不可變*p = 50; //錯誤,*p的值不可變再比如:int a = 0;int b = 0;int * const p = &a;//const修飾指針p,表示指針變量地址不可變;p = &b; //錯誤,地址不可變,不能指向其他地址;sizeof:計算數據類型長度或者變量佔內存空間大小,sizeof長得像函數,其實它是個關鍵字;typedef:為某種數據類型定義一個新的名字;volatile:確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值,簡單地說就是防止編譯器對代碼進行優化。比如如下程序:num=0x65;num =0x66;num =0x67;num =0x68;對外部硬體而言,上述四條語句分別表示不同的操作,會產生四種不同的動作,但是編譯器就不能像對待純粹的程序那樣對上述四條語句進行優化,只認為 num=0x65(即忽略前三條語句,只產生一條機器代碼)。如果鍵入volatile,則編譯器會逐一的進行編譯並產生相應的機器代碼(四條)

2、語句

C語言利用函數體中的可執行語句,向計算機系統發出操作指令;按照語句功能或構成的不同,可將C語言的語句分為5類:

(1)控制語句(9條,可以細分為三種):

選擇結構控制語句if()~else~, switch()~循環結構控制語句for()~, while()~, do~while(), break, continue其他控制語句return, gotoreturn功能:終止執行函數,賦值(可選); 將控制權返回給調用函數的下一條語句goto:無條件轉移語句,跳轉語句;

如上代碼,在不使用goto的情況下,會分別列印出line 1、line 2、line3,在列印完line 1後使用goto語句,則直接跳轉到goto目標代碼,即代碼中的end部分;

(2)函數調用語句:

函數調用語句由一次函數調用加一個分號構成.例如:printf(「hello world!」);scanf(「%d」,&num);

(3)表達式語句:

表達式語句是由表達式後加一個分號構成,例如:「num = 10」是表達式,「num = 10;」是賦值語;

(4)空語句:

空語句由一個分號構成,空語句什麼操作也不執行.。

(5)複合語句:

複合語句由大括號括起來的一組語句構成。{{ } //複合語句,注意大括號後不需要分號}複合語句一般與其它語句配合使用:如for( ; ; ) { }

這玩意兒想的時候不多,寫起來卻很多,深究起來就多的完全說不完(┬_┬),C語言基礎部分本應該在本篇文章中寫完,由於時間問題,下次再寫吧。

下篇開始說說數據類型,運算符與表達式,想了解的小夥伴們,可以關注收藏,後續內容請見下回分解。

相關焦點

  • 快速上手系列-C語言之數組
    我們需要表示某個班級學生的年齡,比如,張三今年3歲,李四今年80歲,很顯然,我們可以用C語言中的某個數據類型來表示,比如int型:int age_zhangsan = 3; int age_lisi = 80; 那如果這個班級有50個同學,我們是不是需要定義50個變量來存放每個同學的年齡呢,當然可以,但是這麼做真的很不合理。
  • 第一篇:C語言編程基礎語法
    本專欄系列分六篇,總結了C語言基礎知識的核心要點。教學視頻已上線,讀者可根據自身情況有選擇性地學習。01編程基礎C語言——貝爾實驗室、Dennis Ritchie屬於高級語言,更接近人類語言邏輯,需要編譯器編譯,執行依賴運行環境;但容易學習。其特點:模塊化編程程序設計,層次清晰;語句簡潔,提出程序庫概念;功能強大,系統、應用軟體均可開發;移植性好,適合不同的作業系統。除此之外,C語言還有豐富的運算符、數據結構等,程序設計自由度大,可以對硬體進行操作。
  • 快速上手系列-C語言之字符串處理函數(一)
    C語言中常用的字符串操作函數,有比如計算字符串長度、字符串拷貝,字符串比較等這樣的整體操作函數,有字符串查詢函數,也有字符串轉換函數等等,這裡先介紹字符串整體操作函數。
  • C語言基礎知識學習(一)
    C程序基礎1. 標識符在程序中使用的變量名、函數名、數組名、指針名、標號等稱為標識符.原先的C89標準中只有32個關鍵字然後在1999年之後進行了兩次技術修正,新出臺了C99標準新增加了5個關鍵字 分別是:restrict, inline, _Complex, _Imaginary, _Boolb) 預定義標識符包括C語言提供的庫函數
  • 在C語言中,核心是指針,靈魂是算法,本篇用源碼解析十大基礎算法原理!
    算法是一個程序和軟體的靈魂,作為一名優秀的程式設計師,只有對一些基礎的算法有著全面的掌握本文是近百個C語言算法系列的第二篇,包括了經典的Fibonacci數列、簡易計算器、回文檢查、質數檢查等算法。也許他們能在你的畢業設計或者面試中派上用場。
  • 傳熱基礎篇《一》
    熱量傳遞的三種基本方式:導熱(熱傳導)、對流(熱對流)和熱輻射①導熱(熱傳導)定義:依靠微觀粒子的熱運動而產生的熱量傳遞特點:a  必須有溫差;b  物體直接接觸;c    ②對流(熱對流)(Convection)定義:流體中(氣體或液體)溫度不同的各部分之間,由於發生相對的宏觀運動而把熱量由一處傳遞到另一處的現象
  • 「C語言從入門到入土」必備C語言基礎筆記整理
    一、C語言1、什麼是C語言?C語言是人寫機器看的一種語言。C語言是高級語言中的低級語言。C語言貼近硬體。C語言的入門學習比較簡單。彙編語言——>B語言——>C語言2、C語言的特性首先C語言就是你的女朋友。無論你讓它幹什麼,它絕對不會自己找到方法。
  • 掌握4個寫作原則,零基礎寫作小白也能快速上手寫作
    文/蘭果果為什麼自媒體大咖們可以做到日更兩三篇文章,並且閱讀量輕鬆超過10萬+?為什麼自己寫半天都憋不出幾個字,費盡九牛二虎之力寫出一篇,閱讀量卻是個位數呢?或許你會說寫作大咖有寫作天賦,他們會有很多寫作靈感,所以能輕鬆寫出好文章。
  • C語言與C++、C Sharp究竟是什麼關係?(附福利)
    C語言從誕生之初就獲得了廣大程式設計師的青睞,由於其簡潔的語法,高效的執行效率(比較接近彙編的性能),它既具有高級語言的特點,又具有彙編語言的特點。在很多領域獲得了廣泛應用。比如作業系統,圖像處理算法,硬體驅動,嵌入式設備編程等等。
  • 快速上手哈蘇 X1D II-50c:減價還加量,到底香不香?
    高昂的售價和使用成本、難言輕便的個頭讓中畫幅相機在消費級市場很難與一眾 135mm 玩家剛正面。憑藉 120 畫幅的深厚積累,哈蘇一直都是中畫幅專業級市場的佼佼者。術業專攻,也導致哈蘇和佳尼索一直呈錯位競爭的業態。
  • R語言畫展基礎篇-折線圖
    做折線圖,以觀察兩棵樹的高度變化情況 #做一個基礎版本的折線圖plot(height_1 ~ months, type = "b")lines(height_2 ~ months, type = "b")
  • 最全的C語言基礎知識都在這了
    C語言是一門面向過程、抽象化的通用程序設計語言,廣泛應用於底層開發。我們用一個簡單的c程序例子,介紹c語言的基本構成、格式、以及良好的書寫風格,加深小夥伴們對C語言的認識。2、main()----在c語言中稱之為「主函數」,一個c程序有且僅有一個main函數,任何一個c程序總是從main函數開始執行,main函數後面的一對圓括號不能省略。3、被大括號{ }括起來的內容稱為main函數的函數體,這部分內容就是計算機要執行的內容。
  • Go語言基礎之結構體(春日篇)
    回憶map之前我們講過,Go語言的map是鍵值對的方式存儲數據的,就像這樣的。不記得的小夥伴請戳:一篇文章帶你了解Go語言基礎之map、Go語言基礎之map補充。結構體Go語言的結構體,相當Java,Python等語言中的類,已經不再是簡簡單單的結構體那麼簡單了。結構體屬於基本數據類型。內存圖大概如下。
  • C語言怎麼樣?今天聊聊C語言的發展史!
    這裡,我想說一句可能有點片面的話,就是:如今這世界上,凡是帶電的地方,可能都會有她(C語言)或者她的子孫的影子。 一、C語言發展史 1.
  • 自然語言處理系列之人機之間的巴別塔之謎【一】
    本文從「人機互動的本質」入手,重點解析自然語言處理中的難點及潛在機會,竹間智能自然語言系列專欄文章第一篇,雷鋒網(公眾號:雷鋒網)已獲授權。AI能否真正理解人類的語言,甚至感情?根據《聖經·舊約》的記載,在很久以前,人類是使用相同的語言的。而當人類逐漸壯大,在虛榮心的趨使下,他們想建造一座通天的巨塔,聳入雲霄,並欲藉此達到至神的領域。可上帝對人類的行為非常不滿,故令世人的語言互不相通,人類因此陷入無休止的爭端和混亂中,計劃也就此失敗。這就是有名的「巴別塔之謎」。
  • 入門前須知基礎!C語言基礎教學檔案!編號零零肆
    C語言令牌每個C程序都是一組指令,每個指令都是一些單獨的單元的集合。每個最小的單個AC程序單元稱為令牌。AC程序(用來定義電腦程式的形式語言)中的每條指令都是令牌的集合。令牌用於構建c程序,它們被稱為AC程序的基本構建塊。
  • 現代程式語言終極測評:五星篇
    圖片來源:saashub懶人目錄概述篇:程式語言最重要的特徵一星篇:C++,JAVA二星篇:C#,Python,Rust,TypeScript三星篇(上):Go,JavaScript三星篇(下):Haskell,OCaml,Scala四星篇:Elm,F#五星篇:ReasonML
  • 《ANSYS ACT寶典》帶你快速上手仿真嚮導開發全流程
    一、ANSYS ACT概述ANSYS Application Customization Toolkit簡稱ACT,是ANSYS系列產品的統一二次開發平臺,ACT使用易於學習但功能強大的XML標記語言和IronPython程式語言,即使不是專業的編程人員,也能為仿真工作流程創建定製化的應用插件。
  • 無人深空遊戲上手基礎技巧講解
    《無人深空》作為一款沙盒類的科幻生存遊戲,其龐大的遊戲世界和過於開放的遊戲玩法,可能會讓許多剛進入遊戲和對沙盒遊戲接觸較少的玩家感到無從下手,那麼本次,巴士小編就分享一下無人深空遊戲的基礎上手知識技巧,希望能幫助剛進入遊戲還一臉懵逼的萌新更快上手這款遊戲,展開屬於自己的星際之旅。
  • C語言之const和volatile"究極"學習
    關於const的用法,現在大概前前後後應該寫了有兩篇文章,以前學習的時候,用法體會不是那麼深刻,為啥這麼說呢,因為在學習c++的時候,會發現const關鍵字有新的玩法,關於這個新的玩法,大家可以去看最近學習總結寫的c++文章專輯。