入門C語言20問20答

2020-12-13 電子工程專輯
  2 編寫第一個簡單的C語言程序

3 C語言是強類型的語言,這是什麼意思?

任何程序都要處理數據,計算機可以處理的數據有多種類型。在C語言程序中,用來保存數據的變量必須事先定義才能在程序中使用。
例如,以下語句定義了x、y、z三個變量名,其值只能取整型值:
在C程序中,每一個變量都必須聲明其取值類型。因此,C語言是一種強類型的程序設計語言。
對於程序中使用到的常量、變量的類型要事先進行定義才能使用,這是保證程序可靠性的手段之一。早期的一些電腦程式設計語言不要求對變量的類型進行定義,因此,一個變量的類型在程序運行期間是不確定的,這將會降低程序的可靠性。

4 如何理解變量與常量?

變量與常量相當於數據的可讀可寫與只讀,常量是數據的一種保護機制。在內存分配給程序的內存塊中有專門的常量(只讀)存儲區。

5 如何正確理解和使用賦值運算符?

賦值運算符「=」連接的是左邊的變量和右邊的表達式,把表達式的值賦值給左邊的變量。賦值運算符的優先級比較低,只在逗號運算符之前。
一個賦值表達式中可以包含多個賦值表達式,賦值表達式的值就等於左邊變量的值,在不加圓括號的情況下,賦值運算符按「 從右至左」的結合順序運算。由於賦值運算符的優先級比較低,如果出現在其他表達式中需要優先運算,則要加圓括號。
賦值運算符「=」連接的是左邊的變量和右邊的表達式,當變量和表達式的數據類型不一致時,會產生什麼樣的結果?C語言賦予了賦值表達式類型轉換的功能,一旦出現變量和表達式的數據類型不一致的情況,會自動進行類型的轉換,將表達式的值向變量類型的方向進行轉換。當然,也不是所有不匹配的類型都可以轉換,類型轉換有一定的前提,必須是相近的、可以轉換的類型才能進行轉換。

6 為什麼表達式1/2的值為0?

變量x雖然被定義為單精度浮點型,但以上代碼執行後,x的取值為0,而不是0.5。這是因為在計算表達式1/2時,由於1和2都是整型常量,計算的結果就只能取整數部分,故為0。
(1)使用1.0表示被除數是一個浮點型數據,即x=1.0/2。
(2)使用強制類型轉換,即(float)1/2。強制類型轉換是使用顯式表達將一種數據類型轉換為另一種數據類型,其格式為:

7 字符型數據與整型數據、浮點型數據為什麼可以直接運算?

字符型數據用於表示ASCII字符。由於ASCII字符在內存中是以ASCII編碼的形式存儲的,因此可以將字符型數據看作一個整數與整型數據、浮點型數據直接進行算術運算,而這在其他的計算機語言中是不允許的。

int x=32;
char y=』A』;
int z=y+x;

8 如何理解逗號運算符和逗號表達式?

逗號表達式是C語言中特有的一種運算符。在C語言的所有運算符中,逗號運算的優先級最低。逗號運算符使用逗號將多個表達式連接起來,按照 從左到右的順序依次計算其中的各個表達式的值,整個逗號表達式的值是最右端即最後計算的表達式的值。逗號表達式常用於在一條語句中連續完成多個計算或操作。例如,t=x;x=y;y=t;將會被作為三條語句處理,而t=x,x=y,y=t;則將被當作是一條語句處理。
由於逗號運算符是C語言中優先級最低的運算符,當表達式中含有逗號運算符時,應特別注意運算符的優先級順序。例如:

9 整型數據的溢出問題

任何一種數據類型的數據在計算機中都有它確定的數值表示範圍,一旦超出這個範圍,就會產生溢出問題。

10 對於浮點型數據執行相等比較為什麼有時會出現問題?

在C語言中,只有整型數據和字符型數據是精確表示的。浮點型數據採用的是指數表示形式,數據的有效位數是有限的,因此浮點型數據是不精確的。對於浮點型數據進行相等比較時,有時兩個相等的數進行比較也有可能出現不相等的情況。
為了解決浮點數相等比較時的誤差問題,可以規定當兩個數相減之後的絕對值小於一個足夠小的數時即認為它們相等。

11 沒有初始化的變量的初始值是什麼?

如果該變量是靜態存儲類型的變量,系統編譯時會自動地賦初值0(對數值型變量)、空字符(對字符變量)、或者空指針(對指針型變量);而如果變量是動態存儲類型,則在沒有賦初值的情況下,將會有一個不確定的值(垃圾值,單元格使用過後遺留下的歷史值)充當其初值,這是非常危險的,尤其是對於一個不確定的指針來說,修改它所指向存儲單元的值可能會造成巨大危害。因此,一般都要求程式設計師為變量賦予合理的初值。

12 C語言中邏輯值1和0是如何判斷的?

C語言中,一般在進行邏輯運算時,將所有非零值都作為1,也就是邏輯真;而只有本身為0的值才當做0,也就是邏輯假參加判斷。

13 求解邏輯表達式時「有解即停」(短路求值)是什麼意思?

當需要判斷多個條件同時成立或至少有一個成立時,需要使用邏輯運算符&&和||。表達式A && B表示當A與B均為真時,條件為真;表達式A || B表示當A與B至少一個為真時,條件為真。
當求解 A && B時,只要A為假則整個表達式一定為假,此時不需要求解表達式B。而對於表達式 A || B,只要表達式A為真,則整個表達式一定為真,此時不需要求解表達式B。

14 switch語句是如何執行的?

C語言中的switch語句用於處理多分支的判斷問題。
在switch語句中的多種分支情況中,只要找到了一個與表達式值匹配的case分支,則從此位置開始順序執行,除非遇到break語句或switch語句結束。
當沒有任何一個case與表達式的值相匹配時,則執行default分支中的語句,但這並不意味default分支必須位於switch語句的所有case分支之後,而是可以位於switch語句中的任何位置。同樣,如果在default分支中沒有break語句,則程序仍將順序執行。
在switch語句中,case只是一個語句標號,它並不進行條件判斷。因此,在switch語句執行時,會根據switch後面表達式的值找到匹配的入口標號,然後從這個標號(也就是向對應的case)處開始執行下去,不會再進行條件判斷。

15 在C程序中使用goto語句是不是有百害而無一利?

goto語句是C語言中的一個控制程序跳轉的語句,很多書上都說要慎用,因為無限制的使用goto語句,可能會造成整個程序的混亂,連程式設計師自己都會無法判斷程序的運行流程。但是,這並不表示使用goto是一個有百害而無一利的事情。事實上,這只是一個程序設計風格的問題,goto本身確實是一個簡潔明了的語句,適當的使用其實並無害處,當然,不能在一個程序中過多的使用它,尤其是出現過多嵌套使用的情況,那樣就真的會出現有百害而無一利的情況。

16 窮舉法的基本思想是什麼?

傳統的數學解題方法通常有列方程、尋找簡便算法等,那是因為人腦不能進行大量、高速的運算。在計算機數據處理中,可以通過循環程序讓計算機對一個問題的所有的可能情況進行判斷,從而得出那些滿足問題的約束條件的各種可能情況,這些可能的情況就是實際問題的解。由於計算機的高速度和機器性,能夠在程序的控制下自動連續地重複執行相同的處理,因此「窮舉法」在程序設計中具有廣泛應用。例如「雞兔同籠」的問題就可以通過窮舉法來解決。

17 數組在定義的同時賦初值,是否可以省略數組的大小?

在定義時給數組賦初值,如果是給全部的數組元素都賦了初值,那麼可以省略一維數組的大小,若是二維數組則只能省略其第一維的大小,而第二維的大小必須明確指定。如果在定義時只是給部分元素賦了初值,那麼數組的大小是不能省略的。例如要定義一個三個元素的一維整型數組,分別賦初值1,2,3,則可如下定義:int a[]={1,2,3};此時省略了數組的大小。但是如果定義的是一個具有四個元素的數組,也賦了三個初值,則應該定義如下:int a[4]={1,2,3},注意,此時的長度不可省略。

18 字符數組與字符串是否等價?

不等價。在C語言中,字符串都是作為字符數組來處理的,但是字符串都必須以『\0』作為結束符號,而普通的字符數組卻沒有這個要求。當採用字符串對字符數組賦值時,其佔用的存儲空間也有差異。假設有如下定義形式:

char a[]={『h』,』e』,』l』,』l』,』o』};
char b[]={「hello」};

雖然字符數組a和b都是包含了hello幾個字符,但是a數組是採用單個字符賦值的方式,而b數組是採用字符串的形式賦值。那麼,a數組只需要有5個字節的大小即可,而b數組則需要6個字節,因為在b數組中,系統會在字符串的末尾自動加上一個結束標誌『\0』。對上面兩種情況的數組,其輸出形式也有不同。如果要輸出a數組裡面的字符,只能採用逐個字符輸出的形式,而對b數組而言,可採用整個字符串一次性輸出的形式,並且輸出的字符不會包含『\0』。

19 什麼是局部變量、全局變量?

在一個函數中定義的變量,其作用域僅限於定義它的函數中,在其它的函數不能使用,這種變量稱為「局部變量」。
定義在函數之外的變量,其作用域範圍為定義該變量的程序位置直到程序的結束,在其它的函數中,既可以使用該變量的值,對變量值的改變也在該變量的全部作用域範圍內有效,這種變量稱為「全局變量」。

20 如何理解「靜態存儲類別static」的變量?

在一般情況下,當程序調用一個函數時,將首先執行函數中的變量定義和初始化賦值,然後執行其他的代碼。例如,對於以下的函數factorial用於計算參數x的階乘值:

long factorial(int x)
{
long p=1;
for(;x>=1;x--) p=p*x;
return p;
}

當程序中每次調用函數factorial時,都會定義變量p,並為其賦予初始值1。而在函數執行結束,通過執行return p;語句將p的值傳遞到系統存儲區後,變量p將被系統釋放。這種類型的變量也稱為「auto存儲類別」或「動態存儲類別」,即每次調用函數時,都需要重新定義變量,重新為其分配存儲空間,因此其存儲地址是「動態」的。
如果希望在函數退出後,其中的某些變量的值仍然被保留,以備以後的函數調用繼續使用,則應將變量定義為「static存儲類別」,即「靜態存儲類別」。通常是不想定義全局變量,但又希望函數內部局部變量的值不被釋放,即可以使用靜態存儲變量。

相關焦點

  • 學員問:C語言入門要掌握哪些基礎知識?
    01C語言程序的結構認識用一個簡單的c程序例子,介紹c語言的基本構成、格式、以及良好的書寫風格,使小夥伴對c語言有個初步認識。例1:計算兩個整數之和的c程序:#include main() { int a,b,sum; a=20; /*定義變量a,b,sum為整型變量*/ b=15; /*把整數20賦值給整型變量a*/ sum=a+b; /*把整數15賦值給整型變量b*/ printf(「a=%d,b=%d,sum=%d\n」,a,b,sum)
  • C語言程序設計試題及答案
    20個小題,每小題1分,共20分)1、C語言程序的基本單位是( )。A) int:a, b, c; B) int a; b; c;C) int a, b, c D) int a, b, c;20、C語言用( )表示邏輯「真」值。
  • C語言的幾個入門階段
    C語言,在大學裡普遍被當作第一門程式語言,用於編程入門,以及數據結構和算法的教學。雖然比C++要容易點,但因為指針的存在,C其實就是個高級的彙編:(並不是很好學,尤其是它的壓軸章節:指針。說明適應了程式語言從0開始數數,已經會使用兩層的for循環,並且會使用printf列印排序結果,適應了計算機不會選擇最大的和逆序最多的數字,而只能使用「笨辦法」的特點。2,會寫快速排序。
  • 零基礎看得懂的C語言入門教程
    當時正在念大學的我想著分享自己自學編程的經驗,搭建了一個社區(社區之後自己維護太懶,維護了一年不到關閉了)第一次編寫了C語言教程,分享自己的學習經驗。社區關閉後,於2017年上傳至了CSDN留存至今。 現在回過頭查看當時自己編寫的教程,由於當時技術的淺薄,編寫的教程還是存在很多的不足,故有了一個重新編寫C語言教程的想法。
  • 學習c語言,知道這三個資源就行了
    c語言作為目前最熱門的程式語言之一,一直是學生、程式設計師必須學習的課程之一,但目前許多學校的課程太過老舊,教材和教程也參差不齊,這裡就給大家推薦幾個比較好的學習c語言的資源。第一個推薦的就是《C Primer Plus》,作為一本廣受大家認可的工具書,書中詳細地講解了C語言的基本概念和編程技巧,並且包含了許多習題和例子,可以有效的幫助初學者建立對於C語言的知識體系,是一本對小白比較友好,且內容全面的入門教材。
  • 【愛找茬】都是C語言,單片機C語言和普通的C語言究竟有什麼差異呢?
    許多小夥伴在學完C語言後想入門單片機,但學著學著發現明明都是C語言,為什麼單片機C語言和我當初學的C語言有差異呢?今天小編就來梳理我們平時所學的C語言與單片機C語言的有什麼樣的不同。
  • 精油入門系列|精油10問10答
    關於精油的選擇購買,也有一篇完整文章供參考:精油入門系列 | 精油之「五買一不買」答:能保溼,但不能補水有些精油會具備一定的保溼性,比如檀香,巖蘭草,廣藿香等,多為感覺比較濃稠些的精油,它們會是很好的保溼劑。但說到補水,精油本身不溶於水,純精油中和基礎油中都不含水,所以沒有補水一說。
  • C語言編程入門教程 博學谷免費資源分享
    C語言編程入門教程 博學谷免費資源分享發布時間:2020-05-12 14:37:51 瀏覽 4 來源:博學谷作者:吾非魚C語言編程入門教程免費資源分享。C語言編程入門需要學習C++程序結構、類的基本概念、C++與C的關係、C++對C擴展特性、C++ class 基本使用、C語言特性及程序設計的基本方法等內容。
  • 新手養兔知識問與答
    問:兔子會啃咬家具或電線?  答:因牙齒、爪子會不斷的長長,必須時時磨牙及磨爪子,兔子對任何物品都喜歡啃齧並咬碎,所以要預防它碰觸家中貴重或危險的東西。  問:幼兔較可愛,買年紀越小越好?  答:幼兔初生六周後才斷奶,這段時間內必須和母兔在一起,且再多二至三周與同胎手足相處,太早離開熟悉的環境,較易死亡。因此最好買初生至少兩各月的幼兔。
  • 《小灰教你零基礎學python》-Python入門語言
    二、什麼是程式語言程序(軟體)是使用程式語言編寫的,比如咱們日常使用的微信、qq、瀏覽器、播放器都是使用程式語言編寫的,程式語言有哪些:javapython解釋型語言)。Python中文名叫:蟒蛇,大家不要被他的名字嚇到,其實是取自英國20世紀70年代首播的電視喜劇《蒙提.派森的飛行馬戲團》(Monty Python's Flying Circus)裡面的動物。
  • C語言程序設計試題與答案B卷
    C語言試卷(B卷) 年 月考試級 專業一、單項選擇題(本題共有20個小題,每小題1分,共20分)1、一個C語言程序是由( )。6、C語言中數組的下標下限為___________________________. 7、在C語言中,整型常量的書寫形式包括:八進位、十進位和_________進位.8、在C語言中,一個雙精度型變量在內存佔用的字節數是___________.
  • ES6的20個問題,你都會嗎?
    一、問:ES6是什麼,為什麼要學習它,不學習ES6會怎麼樣? 答: ES6是新一代的JS語言標準,對分JS語言核心內容做了升級優化,規範了JS使用標準,新增了JS原生方法,使得JS使用更加規範,更加優雅,更適合大型應用的開發。學習ES6是成為專業前端正規軍的必經之路。
  • 教你輕鬆學習C語言系列之——從「Hello World」開始夢想起航
    看到密密麻麻的代碼,對於很多初學者來說,即覺得好玩又新奇,但同時也在不停地問自己:「我能學得會嗎?」其實編程難也不難。說它難,是因為隨著學習的深入,抽象的概念、交叉的學科、複雜的問題交織在一起,對學習者的邏輯思維確實是一項挑戰;說它不難,對於喜歡編程、想要學習編程的愛好者來說,其實也很容易上手。
  • python與c語言的語法有哪些不一樣的
    在眾多程式語言之中,想必很多人都聽說過Python和C語言,在進行編程學習之前,大家都會問:python和c語言的區別有哪些?我該如何選擇?接下來我們來看看吧。python與C的區別如下:1、語言類型:Python是一種基於解釋器的語言,會逐行讀取代碼,將Python編譯為字節碼,由大型C程序解釋;C是一種編譯語言,完整的原始碼將直接編譯為機器代碼,由CPU直接執行。
  • C語言程序設計試題1
    》試卷一、單項選擇題(本大題共20小題,每小題1分,共20分)1.可以用作C程序標識符的一組是(   )A.print B.iam C.Pxq D.Cpp
  • C+相比其他語言到底難在哪裡?
    看過程式語言排行榜的都知道,c/c++自02年以來,不管時代如何發展,其排名一直在前五以內,足見其在程式語言界的地位。編程界流行這麼一句話:c幾乎什麼都能做,c++幾乎什麼都能做好,足見其功能的強大。
  • 日常疑惑:編程學Java還是學C語言?
    這兩門程式語言都是IT行業的寵兒,Java與和C語言各自的技術特點、應用方向上有所不同,沒有伯仲之分,所以這也讓初學者們覺得很難選:應該選擇哪個做為入門語言呢?從學習的難易度上來說,java語言比C語言要簡單。
  • TIOBE 4 月榜單:少兒程式語言 Scratch 進入 TOP 20
    可能有人會對 Scratch 居然比不少專業的程式語言更流行覺得不可思議,畢竟這只是一門教孩子入門編程的程式語言。對此 TIOBE CEO 表示,如果考慮到總共有超過 5000 萬個項目是用 Scratch 「寫」出來的,而且每個月都會有 100 萬個新的 Scratch 項目加入,這就很難再否認 Scratch 的流行。
  • C語言怎麼樣?今天聊聊C語言的發展史!
    C語言發展史的點點滴滴。 任何一種新事物的出現都不是來自於偶然,而是時代所驅使的必然結果。 如果你問我:C語言有多偉大。那麼,我可能會想一下,說:多偉大我不知道,但是我知道很偉大。
  • 你問我答 | 兩人遊戲
    (答:平行線)因為平行線沒有相交(香蕉)2哪種動物最沒有方向感?(答:麋鹿)因為麋鹿=迷路3Who works only one day in a year but never gets fired?(誰一年只上一天班卻不會被開除?)