C語言,為什麼結果出來兩個n不同

時間 2021-07-01 01:37:34

1樓:真心的小愛

標準c與經典c的比較

本附錄列出了標準c與經典c之間 (即kernighan和ritchie合著的the c programming language一書第

1版所描述的語言)的大多數顯著差異。標題指明瞭本書的哪章在討論每個標準c的特性。本附錄沒有介

紹c庫,因為它已經變化很多年了。

如果使用者的編譯器沒有宣告是「標準的」,那麼最好的辦法是檢視編譯器手冊來了解此編譯器可以提

供的標準c的特性數量。事實上,所有c語言編譯器至少都可以處理一些較新的特性。

對於標準c和經典c之間的其他(不十分重要的)差異,請參考the c programming language一書第2

版的附錄a和附錄c。

第2章 c語言基本概念

識別符號 在經典c中,只有識別符號的前8個字元是有意義的。

關鍵字 經典c缺少關鍵字const、enum、signed、void和volatile。在經典c中,單詞

entry是關鍵字。

第4章 表示式

一元+ 經典c不提供一元+運算子。

第5章 選擇語句

switch 在經典c中,switch語句中的控制表示式(和情況標號)在提升後必須具有int類

型。而在標準c中,表示式和標號可以是任何一種整數型別,包括unsigned int

型別和long int型別。

第7章 基本型別

無符號型別 經典c只提供一種無符號型別(unsigned int)。

singed 經典c不支援signed型別說明符。

數的字尾 說明整型常量是無符號的情況時,經典c不提供u(或u)字尾,而且說明浮點常量作

為float型而不是double型儲存時,經典c也不提供f(或f)字尾。在經典c中,l

(或l)字尾不能用於浮點常量。

long float 經典c把long float用作是double的同義詞,而這種用法在標準c中是不合法的。

long double 經典c不提供long double型別。

轉義序列 在經典c中不存在轉義序列\a、\v和\。而且經典c不提供十六進位制的轉義序列。

size_t 在經典c中,sizeof運算子返回int型別值。而在標準c中,它則返回size_t型別

值。 通用的算術轉換 經典c要求把float型運算數轉換成double型的,而且,經典c說明較短的無符號整數與

較長的有符號整數結合始終會產生無符號的結果。

第9章 函式

函式定義 在標準c的函式定義中,引數列表中含有引數的型別:

附錄 c

597416 附錄 c 標準 c 與經典 c 的比較

double square(double x)

經典c則要求在單獨列表中說明引數的型別:

double square(x)

double x

函式宣告 標準c的函式宣告 (原型) 指明瞭函式引數的型別 (如果需要, 也可以有引數的名字) :

double square(double x);

double square(double); /* alternate form */

int rand(void); /* no parameters */

經典c的函式宣告忽略了關於形式引數的全部資訊:

double square();

int rand();

函式呼叫 當使用經典c的定義或宣告時,編譯器不檢查帶引數的被呼叫函式是否有正確的引數

數量和型別。此外,實參也不會自動轉換成相應形式引數的型別。相反,執行整數

的提升,並把float型引數轉換成為double型。

void 經典c不支援void型別。

第12章 指標和陣列

指標減法 兩個指標相減, 在經典c中產生int型的值, 而在標準c中則產生ptrdiff_t型的值。

第13章 字串

字串字面量 在經典c中,鄰近的字串字面量是無法連線的。而且,經典c不禁止字串字面量的

修改。字串初始化 在經典c中,長度為n的字元陣列的初始化式限制在n-1個字元之內(為結尾的空字元

預留空間)。而標準c允許初始化式長度為n。

第14章 前處理器

#elif、#error、

#pragma

經典c不提供#elif、#error和#pragma指令。

#、##、defined 經典c不提供#、##和defined運算子。

第16章 結構、聯合和列舉

結構和聯合的

成員與標記

在標準c中,每個結構和聯合都有針對成員的自己的名字空間,且結構和聯合的標記

會被儲存在單獨的名字空間中。而經典c為成員和標記採用單一的名字空間,所以成

員無法具有相同的名字(某些例外),而且成員和標記無法重疊。

完全結構的操作 經典c不允許對結構進行賦值、引數傳遞或函式返回操作。

列舉 經典c不支援列舉。

第17章 指標的高階應用

void * 標準c把void *用作「普通的」指標型別。例如,malloc函式返回void *型別的

值。而經典c則採用char *來達到此目的。

指標混合 經典c允許在賦值和比較中混合不同型別的指標。而在標準c中,可以把void *型別

的指標與其他型別指標混合,但是其他不帶強制型別轉換的混合是不允許的。類似的,

經典c允許在賦值和比較中混合整數和指標,而經典c則要求進行強制型別轉換。

598599 附錄 c 標準 c 與經典 c 的比較 417

指向函式的指標 如果pf是指向函式的指標, 則標準c允許使用(*pf)(...)或pf (...) 來呼叫函式,

而經典c只允許使用(*pf)(...) 來呼叫函式。

第18章 宣告

const和

volatile

經典c不提供const和volatile型別限定符。

陣列、結構和聯

合的初始化

經典c不允許自動初始化陣列和結構,而且不允許初始化聯合(不管儲存期限)。

第25章 國際化特性

寬字元 經典c不支援寬字元常量和寬字串字面量。

關鍵字 經典c不支援三字元序列。

第26章 其他庫函式

可變實際引數 經典c不提供可移植的方法來寫帶可變數量實際引數的函式,而且缺少…(省略號)符號。

c語言,為什麼有兩個\n,求解

2樓:溫如星河

「\n」是換行符,一個換行符相當於一個回車,即另起一行的意思。

兩個「\n」說明有兩個換行符,相當於兩個回車,表示游標跳到了下面第二行。

3樓:奧爾

換兩行唄,你想換幾行就換幾行

4樓:**

c語言細節、演算法講解

5樓:科技大記事

\n是回車的意思,兩個\n就兩個回車

6樓:資料**

就是輸出兩個換行 沒有實際作用!

7樓:匿名使用者

兩個\n就是連著換兩行,沒什麼特殊的意思。

在輸出b 66之後再換兩行

c語言,,,為什麼結果是這個,不是相同為0,不同為1嗎

8樓:匿名使用者

①&、|、^、>>、《都是c語言中的位運算子,對數字進行bit(位)層面的運算。

&:只有對應的兩個二進位均為1時,結果位才為1 ,否則為0。

|:只要對應的兩個二進位有一個為1時,結果位就為1。

^:當兩對應的二進位不相同時,結果位為1。

>>:把「<< 」左邊的運算數的各二進位全部左移若干位,由「<<」右邊的數指定移動的位數,高位丟棄,低位補0。例如:

00000011(十進位制3)<<4 表示把3的各二進位向左移動4位得到00110000(十進位制48)。

<<:把「>> 」左邊的運算數的各二進位全部右移若干位,由「>>」右邊的數指定移動的位數。例如:

000001111(十進位制15)>>2表示把15的各二進位向右移動2位得到00000011(十進位制3)。

以下是提問中的程式執行結果與過程對照:

②以%f輸出的x為單精度浮點數,即小數,%.3f意為小數點後保留三位。

"\n"為換行符。

c語言裡%d,為什麼有的是%d/n,區別是什麼?

9樓:匿名使用者

%d %f是列印變數的型別。

%d是整數型別。用來輸出十進位制整數,按整型資料的實際長度輸出。

%f是浮點型別(就是含小數點的,預設為6位)

\n是表示回車,即,轉到下一行。

它的意義多表現在有多個printf的時候,為了不混淆,一般每個printf的內容佔一行。

c語言中對於不同型別的資料用不同的格式字元,%d %f是printf函式格式字元。

拓展資料:

在c語言中:printf()函式是格式化輸出函式, 一般用於向標準輸出裝置按規定格式輸出資訊。

printf()函式的呼叫格式為: printf("《格式化字串》", 《參量表》)。

格式輸出,它是c語言中產生格式化輸出的函式(在 stdio.h 中定義)。用於向終端(顯示器、控制檯等)輸出字元。格式控制由要輸出的文字和資料格式說明組成。

要輸出的文字除了可以使用字母、數字、空格和一些數字符號以外,還可以使用一些轉義字元表示特殊的含義。

c語言中printf函式的介紹以及使用

10樓:654鄉

%d為整型輸出,%d比%d/n多了一個「/n」換行符,這樣前者在下一次的輸出會緊接在本次輸出內容後,而後者下一次輸出會在下一行首開始。

如:int a,=10;b=5;

printf("%d\n,%d",a,b);

輸出:10

5c語言中%s,%x,%f,%.100f,%的意思:

格式說明由「%」和格式字元組成,如%d%f等。它的作用是將輸出的資料轉換為指定的格式輸出。格式說明總是由「%」字元開始的。

格式字元有d,o,x,u,c,s,f,e,g等。

%o以八進位制數形式輸出整數,

%x以十六進位制數形式輸出整數,或輸出字串的地址。

%u以十進位制數輸出unsigned型資料(無符號數)。注意:%d與%u有無符號的數值範圍,也就是極限的值,不然數值列印出來會有誤。

%c用來輸出一個字元,

%s用來輸出一個字串,

%f用來輸出實數,以小數形式輸出,預設情況下保留小數點6位。

%.100f用來輸出實數,保留小數點100位。

%e以指數形式輸出實數,

%g根據大小自動選f格式或e格式,且不輸出無意義的零。

11樓:匿名使用者

區別在於兩者定義的輸出不同,%d控制的輸出不換行,而%d/n控制的輸出要換行。/n是轉義字元,控制換行。

例如:int a,=2;b=5;

printf("%d,%d",a,b);

輸出結果為:

2  5

而int a,=2;b=5;

printf("%d,%d",a,b);

輸出結果為:25

擴充套件資料:

/n是轉義字元中的一種,而轉義有2種情況:

(1)將普通字元轉為特殊用途,一般是程式語言中,用於表示不能直接顯示的字元,比如後退鍵,回車鍵,等。

(2)用來將特殊意義的字元轉換回它原來的意義。

轉義字串(escape string),即字元實體(character entity)分成三部分:第一部分是一個&符號,英文叫ampersand;第二部分是實體(entity)名字或者是#加上實體(entity)編號;第三部分是一個分號。

比如,要顯示小於號(<),就可以寫 < 或者 < 。

用實體(entity)名字的好處是比較好理解,一看lt,大概就猜出是less than的意思,但是其劣勢在於並不是所有的瀏覽器都支援最新的entity名字。而實體(entity)編號,各種瀏覽器都能處理。

備註:同一個符號,可以用「實體名稱」和「實體編號」兩種方式引用,「實體名稱」的優勢在於便於記憶,但不能保證所有的瀏覽器都能順利識別它,而「實體編號」則沒有這種擔憂,但它實在不方便記憶。

常用轉義字元及含義如下圖:

c語言請問下這兩個程式出來的結果為啥不一樣

二個程式都有點問題。第一個程式。你的那個i有二個地方有增加的。一個的i 一個的i i 168,這樣就不能遍歷1 10000裡面的全部情況了。應該在設個變數。比如ii i 168.第二個程式的問題是思路上的漏洞。沒有考慮這個數是負數的情況。c語言程式設計問題。為什麼這兩個程式執行的結果不一樣? 萢萢 ...

為什麼這兩個C語言程式輸出結果不一樣呢,能仔細講解一下嗎

第一個是嚴格按照輸出語句從頭到尾輸出的 第二個在呼叫printf函式時,其引數是從右至左進行處理的,即先處理 i 一直到 i,再從左至右輸出。 啟航落地 你給的輸出結果是不是寫反了!主要是因為printf 函式是自右往左輸出引數的!printf d n d n d n d n d n d n i,i...

c語言程式設計時碰到一下兩個問題,有兩個c語言程式設計問題問一下

由於要捨棄小數部分並且double表示的資料比int大得多,編譯器會有這樣的警告,讓你確認不會有溢位問題。可以考慮不用pow計算整數2的k次方 m 1 for i 0 i pow函式返回的是double型別 而你的m是int型 所以提示會有精度損失 有兩個c語言程式設計問題問一下 題目翻譯1.編寫一...