快速入門
什么是C語言?
C是一種編程語言,1972年由Dennis Ritchie在美國AT & T的貝爾實驗室開發,C語言變得很流行,因為它很簡單,很容易使用,今天經常聽到的一個觀點是--"C語言已經被C++、Python和Java等語言所取代,所以今天何必再去學習C語言",我很不贊同這種觀點,這有幾個原因,這些原因如下:
(a) C++、Python和Java等語言所取代或Java利用一種叫做面向物件編程(OOP)的原則來組織程式,這有很多好處,在使用這種組織原則時,你需要基本的編程技能,因此,首先學習C語言,然后遷移到C++、C#或Java更有意義,雖然這種兩步走的學習程序可能需要更多的時間,但在結束時,你一定會發現它值得一試,
(b) 流行的作業系統,如Windows、UNIX、Linux和Android的主要部分都是用C語言撰寫的,此外,如果要擴展作業系統以與新設備一起作業,就需要撰寫設備驅動程式,這些程式完全是用C語言撰寫的,
(c) 像微波爐、洗衣機和數碼相機這樣的普通消費設備正變得越來越智能,這種智能來自于這些設備中嵌入的微處理器、作業系統和程式,這些程式必須快速運行并在有限的記憶體中作業,C語言是建立這種作業系統和程式時的首選語言,
(d) 你一定見過一些專業的3D電腦游戲,用戶在游戲中瀏覽一些物體,比如說一艘宇宙飛船,向入侵者發射子彈,所有這類游戲的本質是速度,為了滿足這種對速度的期望,游戲必須對用戶的輸入做出快速反應,用于創建此類游戲的流行游戲框架(如DirectX)是用C語言撰寫的,
學習C語言的步驟
學習英語和學習C語言之間存在著密切的相似性,
常量、變數和關鍵詞
當字母、數字和特殊符號恰當地結合在一起時,就形成了常數、變數和關鍵詞,常量是不改變的物體,而變數是可能改變的物體,關鍵字是具有特殊含義的詞,在編程語言中,常量通常被稱為字面量,而變數則被稱為識別符號,現在讓我們看看C語言中存在哪些不同型別的常量和變數,
C語言常量的型別
C語言中的常量可分為兩大類:
(a) 主要常量
(b) 次要常量
這些常量可進一步分類,
在這個階段,我們將只討論初級常量,即整數、實數和字符常量,以下是構建這些不同型別常量的規則:
- 構造整數常數的規則
(a) 整數常數必須至少有一個數字,
(b) 它不能有小數點,
(c) 它可以是零、正或負的任何一種,如果一個整數常數前面沒有符號,則假定它是正數,
(d) 整數常數內不允許有逗號或空號,
(e) 整數常數的允許范圍是-2147483648到+2147483647,
例如:+325.34 426.0 -32.76 -48.5792
實際上,整數常數的范圍取決于編譯器,對于像Visual Studio, GCC這樣的編譯器,范圍是-2147483648到+2147483647,而對于像Turbo C或Turbo C++這樣的編譯器,范圍是-32768到+32767,
- 構建實數常量的規則
實數常數通常被稱為浮點常數,實數常量可以寫成兩種形式--小數形式和指數形式,在構建小數形式的實數常數時必須遵守以下規則:
(a) 實數常數必須至少有一個數字,
(b) 它必須有一個小數點,
(c) 它可以是正數或負數,默認符號為正,
(d) 實數常數內不允許有逗號或空白,
例如:+325.34 426.0 -32.76 -48.5792
如果常數的值過小或過大,通常會使用指數形式,然而,它并不限制我們對其他實數常數使用指數形式,
在指數形式中,實數常數由兩部分組成,出現在'e'之前的部分被稱為尾數,而'e'之后的部分被稱為指數,因此,0.000342可以用指數形式寫成3.42e-4(在普通算術中意味著3.42 x 10-4),
在構建以指數形式表示的實數常數時必須遵守以下規則:
(a) 尾數部分和指數部分應以字母e或E分開,
(b) 尾數部分可以有正號或負號,默認符號為正,
(c) 指數必須至少有一個數字,可以是正數或負數的整數,默認符號為正,
(d) 用指數形式表示的實數常數的范圍是-3.4e38到3.4e38,
例:+3.2e-5 4.1e8 -0.2E+3 -3.2e-5
- 構建字符常量的規則
(a) 字符常量是字母、數字或特殊符號,包含在單引號內,
例如:'A' 'I' '5' '='
參考資料
- 本文涉及的python測驗開發庫 謝謝點贊! https://github.com/china-testing/python_cn_resouce
- python精品書籍下載 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
- 本書英文原版: Let Us C Authentic Guide to C Programming Language (17th Edition) -2020 A4.5-804 p485.epub
https://url97.ctfile.com/f/18113597-853620132-541682 下載密碼 訂閱號pythontesting 發送 密碼 ,
C語言變數的型別
一個特定型別的變數只能容納同一型別的常數,例如,一個整數變數只能容納一個整數常數,一個實數變數只能容納一個實數常數,一個字符變數只能容納一個字符常數,因此,C語言中變數的型別和常量的型別一樣多,
在任何C語言程式中,都要進行許多計算,這些計算的結果被儲存在計算機記憶體的一些單元(位置)中,為了便于檢索和使用這些數值,記憶體單元被賦予了名稱,由于存盤在每個位置的值可能會發生變化,所以給這些位置的名稱被稱為變數名稱,
構建不同型別常量的規則是不同的,然而,對于構建所有型別的變數名,同樣的規則適用,
- 構建變數名稱的規則
(a) 變數名稱是1到31個字母、數字或下劃線的任何組合,有些編譯器允許變數名的長度可以達到247個字符,不要創建不必要的長的變數名,因為它增加了你的打字作業量,
(b) 變數名的第一個字符必須是字母或下劃線(_),
例如:si_int pop_e_89 avg basic_salary
我們應該始終創建有意義的變數名稱,例如,在計算單利的時候,我們應該建立像prin, roi, noy這樣的變數名來表示原則、利率和年數,而不是像a, b, c這樣的任意變數,
創建變數名稱的規則對于所有型別的主要變數和次要變數都是一樣的,因此,為了幫助區分變數,必須宣告我們希望在程式中使用的任何變數的型別,這種型別的宣告是如下所示,
例如
int si, m_hra;
float bassal;
char code;
C語言的關鍵字
關鍵字是指那些已經向C語言編譯器(或廣義上的計算機)解釋過含義的詞,C語言中只有32個關鍵詞,
這些關鍵字不應作為變數名使用,然而,一些 C 編譯器允許你構建與這些關鍵字完全相似的變數名,
編譯器供應商還提供了更多的關鍵字,盡管ANSI委員會建議這樣的編譯器特定的關鍵字都應該在前面加上兩個下劃線(如___asm),但并不是每個廠商都遵守這個規則,
第一個C語言程式
一旦掌握了變數、常量和關鍵字的知識,下一個合乎邏輯的步驟就是將它們組合成指令,然而,我們現在要做的不是這樣,而是撰寫我們的第一個C語言程式,一旦我們完成了這一作業,我們將詳細了解它所使用的指令,
第一個程式非常簡單,它為一組代表本金、年數和利率的數值計算單利,
void main()
{
int p, n ;
float r, si ;
p = 1000 ;
n = 3 ;
r = 8.5 ;
/* formula for simple interest */
si = p * n * r / 100 ;
printf ( "%f" , si ) ;
}
- C語言程式的形式
(a) C語言程式中的每條指令都被寫成一個單獨的陳述句,
(b) 程式中的陳述句必須按照我們希望它們被執行順序出現,
(c) 兩個字之間可以插入空白,以提高陳述句的可讀性,
(d) 所有陳述句都應使用小寫字母,
(e) 每個C陳述句必須以分號(;)結束,因此,;作為陳述句的結束符,
(f) C陳述句可以寫在指定行的任何地方,這就是為什么它經常被稱為自由形式的語言,
(g) 通常每一行包含一條陳述句,然而,你可以在一行中寫多個陳述句,只要每個陳述句以;結束,
- C語言程式中的注釋
C語言程式中的注釋是用來澄清程式的目的或程式中某些陳述句的目的,一個好的做法是,在程式開始時用注釋說明程式的目的、作者和程式的撰寫日期,
下面是在C語言程式中寫注釋的一些提示:
(a) 注釋可以是小寫的,也可以是大寫的,也可以是混合的,它們應該被括在/* */內,因此,我們程式中的前兩條陳述句就是注釋,
(b) 有時,程式中某一特定陳述句的作用并不十分明顯,在這種情況下,可以用注釋來提及該陳述句的目的,
(c) 任何數量的注釋都可以寫在程式的任何地方,因此,注釋可以寫在陳述句之前、陳述句之后或陳述句之內,
(d) 注釋不能被嵌套,這意味著一個注釋不能寫在另一個注釋里面,所以下面的注釋是無效的,
(e) 注釋可以分割成多行,
(f) ANSI C允許用另一種方式來寫注釋,如下:
// Calculation of simple interest
// Formula
- 什么是main()?
(a) main()是一個函式,它是一組陳述句的容器,一個C語言程式可以有多個函式,如果它只包含一個函式,其名稱必須是main(),所有屬于main()的陳述句都包含在一對大括號{}中,
(b) 像計算器中的函式一樣,C語言中的函式也會回傳一個值, main()函式總是回傳一個整數值,因此在main()前面有一個int,這被稱為該函式的回傳型別,我們要回傳的整數值是0,0表示成功,如果main()中的陳述句未能完成其預期的作業,我們可以從main()中回傳一個非零的數字,這將表示失敗,
(c) 觀察main()回傳值的方式在不同的編譯器中有所不同,如下所示,
Turbo C, Turbo C++ - Alt C | 資訊
Visual Studio - 除錯器觀察視窗中的$ReturnValue
Linux - 在程式執行后的命令提示符中回顯$?
(d) 有些編譯器如Turbo C/C++甚至允許我們從main()中不回傳任何東西,在這種情況下,我們應該在它前面加上關鍵字void,但這是寫main()函式的非標準方式,
- 變數和它們的用法
(a) 程式中使用的任何變數必須在使用前宣告,例如、
(b) C語言中可用的算術運算子是+、-、*和/,
- printf()和它的用途
C語言不包含任何在螢屏上顯示輸出的關鍵字,所有對螢屏的輸出都是通過庫函式如printf()實作的,
(a) 一旦si的值被計算出來,它就需要顯示在螢屏上,我們使用了printf()來實作這一目的,
(b) 為了能夠使用printf()函式,有必要在程式的開頭使用#include <stdio.h>,#include是一個前處理器指令
(c) printf()函式的一般形式是
printf (“<format string>”, <list of variables>);
format string可以包含:
%f用于列印實數值
%d用于列印整數值
%c用于列印字符值
除了像%f、%d和%c這樣的格式指定符外,格式字串還可以包含任何其他字符,這些字符在執行printf()時被列印出來,
(d) 下面是一些使用printf()函式的例子:
printf (“%f”, si);
printf (“%d %d %f %f”, p, n, r, si);
printf (“Simple interest = Rs. %f”, si);
printf (“Principal = %d\nRate = %f”, p, r);
最后一條陳述句的輸出會是這樣的...
Principal = 1000
Rate = 8.500000
由于換行符'\n'的存在,輸出被分成了兩行,它把游標送到了下一行,它是C語言中可用的幾個轉義序列之一,
(e) printf()可以列印變數的值以及運算式的結果,如3、3+2、c和a+b*c-d,如下所示,
printf (“%d %d %d %d”, 3, 3 + 2, c, a + b * c - d);
請注意,3和c也代表有效的運算式,
- 編譯和執行
一旦你寫好了程式,你需要輸入它并指示機器執行它,要做到這一點,還需要兩個程式--編輯器和編譯器,編輯器讓我們輸入程式,而編譯器將我們的程式轉換為機器語言程式,這種轉換是必要的,因為機器只能理解機器語言,
除了這兩個程式外,還有其他程式,你可能需要它們來提高你的編程效率--前處理器、聯結器和除錯器,單獨使用它們中的每一個都是一項乏味的作業,因此,通常所有這些程式都被捆綁在一起,在它們上面有一層圖形用戶界面,GUI使你更容易使用這些程式,這種捆綁通常被稱為集成開發環境(IDE),
有許多IDE可用,每個都是針對不同的作業系統和微處理器的,
[Running] cd "/home/andrew/code/SourceCode/Source Code/Chap01/" && gcc doc1.c -o doc1 && "/home/andrew/code/SourceCode/Source Code/Chap01/"doc1
255.000000
[Done] exited with code=10 in 0.044 seconds
接收輸入
#include <stdio.h>
int main( )
{
int p, n ;
float r, si ;
printf ( "Enter values of p, n, r\n" ) ;
scanf ( "%d %d %f", &p, &n, &r ) ;
si = p * n * r / 100 ;
printf ( "%f" , si ) ;
}
執行
$ ./doc2
Enter values of p, n, r
1000 5 3.5
第一個printf()在螢屏上輸出 "輸入p、n、r的值 "的資訊,這里我們沒有在printf()中使用任何運算式,這意味著在printf()中使用運算式是可選的,
注意在scanf()函式中的變數前使用&是必要的,&是 "地址 "運算子,它給出變數在記憶體中使用的位置號(地址),當我們說&a時,我們在告訴scanf()應該在哪個記憶體位置存盤用戶從鍵盤提供的值,
請注意,在提供給scanf()的數值之間必須有一個空白、一個制表符或一個新行,空白用空格鍵創建,制表符用Tab鍵,換行用Enter鍵,
指令
指令的型別
在C語言中,有三種型別的指令:
(a) 型別宣告指令 - 該指令用于宣告C語言程式中使用的變數的型別,
(b) 算術指令 - 該指令用于對常數和變數進行算術運算,
(c) 控制指令 - 該指令用于控制C語言程式中各種陳述句的執行順序,
型別宣告指令
這條指令用于宣告程式中使用的變數的型別,型別宣告陳述句寫在main()函式的開頭,下面是幾個例子,
int bas;
float rs, grosssal;
char name, code;
下面是型別宣告指令的一些微妙變化......
(a) 在宣告變數型別的同時,我們也可以對其進行初始化,如下所示,
int bas;
float rs, grosssal;
char name, code;
(b) 在使用一量之前必須先定義它,下面的陳述句是非法的,因為我們在定義變數a之前就使用了它,
int i = 10, j = 25;
float a = 1.5, b = 1.99 + 2.4 * 1.44;
(c) 下面的陳述句可以作業
int a, b, c, d;
a = b = c = 10;
然而,下面的陳述句將不作業
int a = b = c = d = 10;
算術指令
C語言中的算術指令由=左邊的變數名和=右邊使用運算子連接的變數名和常陣列成,
int ad;
float kot, deta, alpha, beta, gamma;
ad = 3200;
kot = 0.0056;
deta = alpha * beta / gamma + 3.2 * 2 / 5;
*, /, -, +是算術運算子,
= 是賦值運算子,
2、5和3200是整數常數,
3.2和0.0056是實數常數,
ad是一個整數變數,
kot, deta, alpha, beta, gamma是實數變數,
變數和常數一起被稱為 "運算元",在執行算術陳述句時,右手邊的運算元由 "算術運算子 "操作,結果用賦值運算子分配給左手邊的變數,
C語言中的算術陳述句可以有三種型別,這些型別如下:
(a) 整數模式算術陳述句--在這個陳述句中,所有運算元都是整數變數或整數常數,
int i, king, issac, noteit;
i = i + 1;
king = issac * 234 + noteit - 7689;
(b) 實模式算術陳述句--在該陳述句中,所有運算元都是實數常數或實數變數,
float qbee, antink, si, prin, anoy, roi;
qbee = antink + 23.123 / 4.5 * 0.3442;
si = prin * anoy * roi / 100.0;
(c) 混合模式算術陳述句 - 在這個陳述句中,一些運算元是整數,一些運算元是實數,
float si, prin, anoy, roi, avg;
int a, b, c, num;
si = prin * anoy * roi / 100.0;
avg = (a + b + c + num) / 4;
請仔細注意關于算術指令的以下幾點:
(a) C語言只允許在=的左邊有一個變數,也就是說,z = k * l是合法的,而k * l = z是非法的,
(b) 除了除法運算子之外,C語言還提供了去模運算子,這個運算子回傳一個整數除以另一個整數的余數,因此,運算式10 / 2產生5,而10 % 2則產生0,
請注意,模數運算子(%)不能應用于浮點數,還要注意,在使用%時,余數的符號總是與分子的符號相同,因此,-5 % 2的結果是-1,而5 % -2的結果是1,
(c) 算術運算可以在整數、浮點數和字符上進行,因此,下面的陳述句是有效的,
char x = ’a’, y = ’b’;
int z = x + y;
ASCII代碼用于表示記憶體中的任何字符,a "和 "b "的ASCII代碼是01100001和01100010,它們的十進制等價物是97和98,加法是在這些十進制值上進行的,而不是在字符本身上,
(d) 沒有假定存在運算子,它必須明確地寫出來,在下面的例子中,b后面的乘法運算子必須明確地寫出來,
a = c.d.b(xy) usual arithmetic statement
a = c * d * b * (x * y) C statement
(e) C語言中沒有運算子來進行指數化操作,指數運算必須按以下方式進行:
#include <stdio.h>
#include <math.h>
void main()
{
float a;
a = pow(3.0, 2.0);
printf("%f", a);
}
執行結果
9.000000
這里pow()函式是一個標準庫函式,它被用來將3.0的2.0的冪,pow()函式只對實數作業,因此我們使用了3.0和2.0,
請注意,為了使pow()函式作業,有必要#include <math.h>,
你可以自己探索其他數學函式,如abs()、sqrt()、sin()、cos()、tan()等,這些函式在math.h中宣告,
整數和浮點數的轉換
(a) 整數和整數之間的算術運算總是產生整數的結果,
(b) 實數和實數之間的運算總是產生實數結果,
(c) 整數和實數之間的運算總是產生實數結果,在這個操作中,整數首先被提升為實數,然后再進行操作,因此,其結果是實數,
賦值中的型別轉換
如果兩邊運算式的型別不一樣,那么右邊上的運算式的值就會被提升或降低,這取決于=左邊的變數的型別, 例如,考慮以下賦值陳述句:
int i;
float b;
i = 3.5;
b = 30;
在第一條賦值陳述句中,雖然3.5是一個浮點數,但由于它是一個int,所以不能被存盤在i中,因此,3.5(浮點數)被降級為3(int),然后存盤在i中,在這里,30被提升為30.0,然后存盤在b中,
如果出現復雜的運算式,仍然適用同樣的規則,例如,考慮下面的程式片段,
運算子優先級
如果有一組以上的括號,最里面的括號內的操作將首先被執行,然后是最里面的第二組括號內的操作,以此類推,
一些代數運算式及其等價的C語言運算式的例子見圖
運算子的相關性
當一個運算式包含兩個優先級相同的運算子時,它們之間的平局將通過運算子的相關性來解決,C語言中的所有運算子都有從左到右的相關性或從右到左的相關性,讓我們借助幾個例子來理解這一點,
考慮一下這個運算式:a = 3 / 2 * 5;
這里有一個相同優先級的運算子之間的平局,即在/和之間,這個平局是利用/和的關聯性來解決的,兩者都享有從左到右的關聯性,因此,首先進行的是/操作,然后是*,
再考慮一個運算式:a = b = 3;
這里,兩個賦值運算子都有相同的優先級,所以操作的順序是由=運算子的關聯性決定的,因此,第二個=比第一個=早執行,
再考慮另一個運算式:z = a * b + c / d;
這里和/享有相同的優先級和相同的關聯性(從左到右),編譯器可以根據自己的需要自由地執行或/操作,因為無論哪個操作在前面執行,結果都是一樣的,
控制指令
控制指令控制程式中指令的執行順序,換句話說,控制指令決定了程式中的 "控制流",在C語言中,有四種型別的控制指令,它們是
(a) 順序控制指令
(b) 選擇或決定控制指令
(c) 重復或回圈控制指令
(d) case控制指令
順序控制指令確保指令按照它們在程式中出現的相同順序執行,決定和case控制指令允許計算機決定下一步執行哪個指令,回圈控制指令有助于重復執行一組陳述句,
條件控制
if - else陳述句
C語言使用關鍵字if和else來實作決策控制指令,這個陳述句的一般形式是這樣的:
if (this condition is true)
statement1;
else
statement2;
關鍵字if后面的條件總是包含在一對小括號內,如果該條件為真,則執行陳述句1,如果條件不為真,則執行陳述句2,條件是用C語言中的 "關系 "運算子表示的,這些運算子允許我們比較兩個值,圖3.1顯示了它們在C語言中的外觀和評估方式,
這里是等于運算子,!=是不等運算子,請注意,=用于賦值,而則用于兩個量的比較,
例3.1: 在購買某些物品時,如果購買的數量超過1000件,可以享受10%的折扣,如果通過鍵盤輸入每件物品的數量和價格,寫一個程式來計算總的費用,
#include <stdio.h>
int main()
{
int qty, dis;
float rate, tot;
printf ("Enter quantity and rate:");
scanf ("%d %f", &qty, &rate);
if (qty > 1000)
dis = 10;
else
dis = 0;
tot = (qty * rate) - (qty * rate * dis / 100);
printf ("Total expenses = Rs. %f\n", tot);
return 0;
}
下面是一些與程式互動的例子,
Enter quantity and rate 1200 15.50
Total expenses = Rs. 16740.000000
Enter quantity and rate 200 15.50
Total expenses = Rs. 3100.000000
在if-else中的多條陳述句
在一個程式中,當if后面的運算式得到滿足時,我們可能要執行一個以上的陳述句,如果要執行這樣的多條陳述句,就必須把它們放在一對大括號內,如下面的例子所示:
例3.2:在一家公司里,一個雇員的工資如下:
如果他的基本工資低于1500盧比,那么HRA=基本工資的10%,DA=基本工資的90%,如果他的工資等于或高于1500盧比,那么HRA=500盧比,DA=基本工資的98%,如果員工的工資是通過鍵盤輸入的,那么寫一個程式來找出他的工資總額,
實作這一邏輯的程式如下,
/* Calculation of gross salary */
# include <stdio.h>
int main()
{
float bs, gs, da, hra;
printf ("Enter basic salary");
scanf ("%f", &bs);
if (bs < 1500)
{
hra = bs * 10 / 100;
da = bs * 90 / 100;
}
else
{
hra = 500;
da = bs * 98 / 100;
}
gs = bs + hra + da;
printf ("gross salary = Rs. %f\n", gs);
return 0;
}
關于這個程式,有幾點值得注意...
(a) if之后到else為止的一組陳述句被稱為 "if塊",同樣,else之后的陳述句構成 "else塊",
(b) 注意,else正好寫在if的下面,if塊中的陳述句和else塊中的陳述句都是向右縮進的,
(c) 如果在if塊中只執行一條陳述句,在else塊中只執行一條陳述句,我們可以放棄這對大括號,
(d) if和else的默認范圍是緊隨其后的陳述句,要覆寫這個默認范圍,必須使用一對大括號,
嵌套的if-elses
如果我們在if塊或else塊中再寫一個if-else結構,這是完全可以的,這被稱為 "嵌套",在下面的代碼片段中顯示:
if (i == 1)
printf (“You would go to heaven !\n”);
else
{
if (i == 2)
printf (“Hell was created with you in mind\n”);
else
printf (“How about mother earth !\n”);
}
注意第二個if-else結構是嵌套在第一個else塊中的,如果第一個if中的條件是假的,那么第二個if中的條件將被檢查,如果它也是假的,那么第二個else將被執行,
你可以觀察到,每次if-else結構嵌套在另一個if-else結構中時,它也會縮進,以增加程式的清晰度,培養這種縮進的習慣;否則,你最終寫出的程式將沒有人(包括你)能夠在以后的日子里輕松理解,請注意,無論我們縮進還是不縮行程式,都不會改變程式中指令的執行流程,
在上面的程式中,if-else發生在第一個if陳述句的 "else塊 "中,同樣,在其他一些程式中,if-else也可能出現在 "if塊 "中,對于if和else的嵌套深度沒有限制,
注意事項
盡管通常在if陳述句中使用一個條件,但任何有效的運算式也可以,因此,以下所有的if陳述句都是有效的,
if (3 + 2 % 5)
printf (“This works”);
if (a = 10)
printf (“Even this works”);
if (-5)
printf (“Surprisingly even this works”);
請注意,在C語言中,非零值被認為是真,而0被認為是假,在第一個if中,運算式評估為5,由于5是非零值,所以它被認為是真的,因此printf()被執行,
在第二個if中,10被分配給a,所以現在的if被簡化為if(a)或if(10),由于10是非零,它是真的,因此printf()又開始作業了,
在第三個if中,-5是一個非零數,因此是真的,所以printf()又開始作業了,即使使用3.14這樣的浮點數來代替-5,也會被認為是真的,所以問題不在于這個數字是整數還是浮點數,也不在于它是正數還是負數,問題是它是零還是非零,
在使用if陳述句時,另一個常見的錯誤是在條件后面寫一個分號(;),如下所示,
if (i == 1)
scanf (“%d”, &i);
if (i == 5);
printf (“You entered 5\n”);
這使編譯器將該陳述句解釋為你是以如下方式寫的:
if (i == 5)
;
printf (“You entered 5\n”);
在這里,如果條件評估為真,就會執行;(空陳述句,執行時不做任何事情),接著執行printf(),如果條件失敗,則直接執行printf(),因此,無論條件的評估結果是真還是假,printf()都會被執行,記住,編譯器不會指出這是一個錯誤,因為就語法而言,沒有出錯,但邏輯肯定出錯了,
釘釘或微信號: pythontesting 微信公眾號:pythontesting轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/552080.html
標籤:C
上一篇:高效c語言1快速入門
下一篇:返回列表