『壹』 linux c語言的鎖機制
你列印parents並沒嘗試lockf加鎖啊
文件鎖必須大家都用才有效果的
『貳』 C語言中out和ref的區別是什麼
ref:相當於c語言的引用參數 實參和形參一起變。
out:多用於輸出參數 就是在return之前必須給out標示的參數賦值。
『叄』 在c語言文件操作中,fcntl.h好用還是stdio.h好用
哈哈,這簡單!我印象中fcntl.h中有一些是操作系統特有文件打開操作。比如文件鎖什麼的功能,是增強的功能。stdio.h的文件是標准操作,移植性好,性能效率也都可以。我習慣用stdio.h,主要是因為記憶量小,少記些東西。
『肆』 c語言的編程開發
GCC,GNU組織開發的開源免費的編譯器
MinGW,Windows操作系統下的GCC
Clang,開源的BSD協議的基於LLVM的編譯器
Visual C++ :: cl.exe,Microsoft VC++自帶的編譯器 CodeBlocks,開源免費的C/C++ IDE
CodeLite,開源、跨平台的C/C++集成開發環境
Orwell Dev-C++,可移植的C/C++IDE
C-Free
Light Table
Visual Stdio系列 起初,C語言沒有官方標准。1978年由美國電話電報公司(AT&T)貝爾實驗室正式發表了C語言。布萊恩·柯林漢(Brian Kernighan) 和 丹尼斯·里奇(Dennis Ritchie) 出版了一本書,名叫《The C Programming Language》。這本書被 C語言開發者們稱為K&R,很多年來被當作 C語言的非正式的標准說明。人們稱這個版本的 C語言為K&R C。
K&R C主要介紹了以下特色:
結構體(struct)類型
長整數(long int)類型
無符號整數(unsigned int)類型
把運算符=+和=-改為+=和-=。因為=+和=-會使得編譯器不知道使用者要處理i = -10還是i =- 10,使得處理上產生混淆。
即使在後來ANSI C標准被提出的許多年後,K&R C仍然是許多編譯器的最 准要求,許多老舊的編譯器仍然運行K&R C的標准。 1970到80年代,C語言被廣泛應用,從大型主機到小型微機,也衍生了C語言的很多不同版本。
1983年,美國國家標准協會(ANSI)成立了一個委員會X3J11,來制定 C語言標准。
1989年,美國國家標准協會(ANSI)通過了C語言標准,被稱為ANSI X3.159-1989 Programming Language C。因為這個標準是1989年通過的,所以一般簡稱C89標准。有些人也簡稱ANSI C,因為這個標準是美國國家標准協會(ANSI)發布的。
1990年,國際標准化組織(ISO)和國際電工委員會(IEC)把C89標準定為C語言的國際標准,命名為ISO/IEC 9899:1990 - Programming languages -- C 。因為此標準是在1990年發布的,所以有些人把簡稱作C90標准。不過大多數人依然稱之為C89標准,因為此標准與ANSI C89標准完全等同。
1994年,國際標准化組織(ISO)和國際電工委員會(IEC)發布了C89標准修訂版,名叫ISO/IEC 9899:1990/Cor 1:1994 ,有些人簡稱為C94標准。
1995年,國際標准化組織(ISO)和國際電工委員會(IEC)再次發布了C89標准修訂版,名叫ISO/IEC 9899:1990/Amd 1:1995 - C Integrity ,有些人簡稱為C95標准。 1999年1月,國際標准化組織(ISO)和國際電工委員會(IEC)發布了C語言的新標准,名叫ISO/IEC 9899:1999 - Programming languages -- C ,簡稱C99標准。這是C語言的第二個官方標准。
在C99中包括的特性有: 增加了對編譯器的限制,比如源程序每行要求至少支持到 4095 位元組,變數名函數名的要求支持到 63 位元組(extern 要求支持到 31)。 增強了預處理功能。例如: 宏支持取可變參數 #define Macro(...) __VA_ARGS__ 使用宏的時候,允許省略參數,被省略的參數會被擴展成空串。 支持 // 開頭的單行注釋(這個特性實際上在C89的很多編譯器上已經被支持了) 增加了新關鍵字 restrict, inline, _Complex, _Imaginary, _Bool 支持 long long, long double _Complex, float _Complex 等類型 支持不定長的數組,即數組長度可以在運行時決定,比如利用變數作為數組長度。聲明時使用 int a[var] 的形式。不過考慮到效率和實現,不定長數組不能用在全局,或 struct 與 union 里。 變數聲明不必放在語句塊的開頭,for 語句提倡寫成 for(int i=0;i<100;++i) 的形式,即i 只在 for 語句塊內部有效。 允許採用(type_name){xx,xx,xx} 類似於 C++ 的構造函數的形式構造匿名的結構體。 復合字面量:初始化結構的時候允許對特定的元素賦值,形式為:
struct test{int a[3],b;} foo[] = { [0].a = {1}, [1].a = 2 }; struct test{int a, b, c, d;} foo = { .a = 1, .c = 3, 4, .b = 5 }; // 3,4 是對 .c,.d 賦值的 格式化字元串中,利用 u 支持 unicode 的字元。 支持 16 進制的浮點數的描述。 printf scanf 的格式化串增加了對 long long int 類型的支持。 浮點數的內部數據描述支持了新標准,可以使用 #pragma 編譯器指令指定。 除了已有的 __line__ __file__ 以外,增加了 __func__ 得到當前的函數名。 允許編譯器化簡非常數的表達式。 修改了 /% 處理負數時的定義,這樣可以給出明確的結果,例如在C89中-22 / 7 = -3, -22% 7 = -1,也可以-22 / 7= -4, -22% 7 = 6。 而C99中明確為 -22 / 7 = -3, -22% 7 = -1,只有一種結果。 取消了函數返回類型默認為 int 的規定。 允許 struct 定義的最後一個數組不指定其長度,寫做 [](flexible array member)。 const const int i 將被當作 const int i 處理。 增加和修改了一些標准頭文件,比如定義 bool 的 <stdbool.h> ,定義一些標准長度的 int 的 <inttypes.h> ,定義復數的 <complex.h> ,定義寬字元的 <wctype.h> ,類似於泛型的數學函數 <tgmath.h>, 浮點數相關的 <fenv.h>。 在<stdarg.h> 增加了 va_ 用於復制 ... 的參數。里增加了 struct tmx ,對 struct tm 做了擴展。 輸入輸出對寬字元以及長整數等做了相應的支持。 GCC和其它一些商業編譯器支持C99的大部分特性。 2011年12月8日,國際標准化組織(ISO)和國際電工委員會(IEC)再次發布了C語言的新標准,名叫ISO/IEC 9899:2011 - Information technology -- Programming languages -- C ,簡稱C11標准,原名C1X。這是C語言的第三個官方標准,也是C語言的最新標准。
新的標准提高了對C++的兼容性,並增加了一些新的特性。這些新特性包括: 對齊處理(Alignment)的標准化(包括_Alignas標志符,alignof運算符, aligned_alloc函數以及<stdalign.h>頭文件。 _Noreturn 函數標記,類似於 gcc 的 __attribute__((noreturn))。 _Generic 關鍵字。 多線程(Multithreading)支持,包括: _Thread_local存儲類型標識符,<threads.h>頭文件,裡麵包含了線程的創建和管理函數。 _Atomic類型修飾符和<stdatomic.h>頭文件。 增強的Unicode的支持。基於C Unicode技術報告ISO/IEC TR 19769:2004,增強了對Unicode的支持。包括為UTF-16/UTF-32編碼增加了char16_t和char32_t數據類型,提供了包含unicode字元串轉換函數的頭文件<uchar.h>. 刪除了 gets() 函數,使用一個新的更安全的函數gets_s()替代。 增加了邊界檢查函數介面,定義了新的安全的函數,例如 fopen_s(),strcat_s() 等等。 增加了更多浮點處理宏。 匿名結構體/聯合體支持。這個在gcc早已存在,C11將其引入標准。 靜態斷言(static assertions),_Static_assert(),在解釋 #if 和 #error 之後被處理。 新的 fopen() 模式,(「…x」)。類似 POSIX 中的 O_CREAT|O_EXCL,在文件鎖中比較常用。 新增 quick_exit() 函數作為第三種終止程序的方式。當 exit()失敗時可以做最少的清理工作。
『伍』 C語言中如何將結果傳遞給另一個C語言文件
通過函數的傳址參數(引用或指針)或返回值傳遞。
多個人合作時,必須提前約定好介面函數的聲明格式。 (這里的所謂介面函數就是所有可能需要用來互相傳遞結果的函數)
『陸』 高分求助一道C語言設計題 不難!!
C語言是一種計算機程序設計語言。它既具有高級語言的特點,又具有匯編語言的特點。它由美國貝爾研究所的D.M.Ritchie於1972年推出。1978後,C語言已先後被移植到大、中、小及微型機上。它可以作為工作系統設計語言,編寫系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬體的應用程序。它的應用范圍廣泛,具備很強的數據處理能力,不僅僅是在軟體開發上,而且各類科研都需要用到C語言,適於編寫系統軟體,三維,二維圖形和動畫。具體應用比如單片機以及嵌入式系統開發。
目錄
歷史
特點
特色
入門
特點
缺點
c語言 - 語法
運算
結構順序結構
選擇結構
循環結構
模塊化程序結構
關鍵字
經典錯誤
開發環境
新標在C99中包括的特性
相對於c89的變化
圖形編程基於TC中的graphics.h
基於WIN32 API及其他一些圖形庫
實例
經典教材
類C的中文編程語言
ISO發布C語言新版本歷史
特點
特色
入門
特點
缺點
c語言 - 語法
運算
結構
順序結構 選擇結構 循環結構 模塊化程序結構關鍵字經典錯誤開發環境新標
在C99中包括的特性 相對於c89的變化圖形編程
基於TC中的graphics.h 基於WIN32 API及其他一些圖形庫實例經典教材類C的中文編程語言ISO發布C語言新版本展開編輯本段歷史
C語言的祖先是BCPL語言。 1967年,劍橋大學的 Martin Richards 對CPL語言進行了簡化,於是產生了BCPL(Basic Combined Programming Language)語言。 1970年,美國貝爾實驗室的 Ken Thompson。以BCPL語言為基礎,設計出很簡單且很接近硬體的B語言(取BCPL的首字母)。並且他用B語言寫了第一個UNIX操作系統。 在1972年,美國貝爾實驗室的 D.M.Ritchie 在B語言的基礎上最終設計出了一種新的語言,他取了BCPL的第二個字母作為這種語言的名字,這就是C語言。 為了使UNIX操作系統推廣,1977年Dennis M.Ritchie發表了不依賴於具體機器系統的C語言編譯文本《可移植的C語言編譯程序》。 1978年由美國電話電報公司(AT&T)貝爾實驗室正式發表了C語言。同時由B.W.Kernighan和D.M.Ritchie合著了著名的《The C Programming Language》一書。通常簡稱為《K&R》,也有人稱之為《K&R》標准。但是,在《K&R》中並沒有定義一個完整的標准C語言,後來由美國國家標准化協會(American National Standards Institute)在此基礎上制定了一個C語言標准,於一九八三年發表。通常稱之為ANSI C。 K&R第一版在很多語言細節上也不夠精確,對於pcc這個「參照編譯器」來說,它日益顯得不切實際;K&R甚至沒有很好表達它所要描述的語言,把後續擴展扔到了一邊。最後,C在早期項目中的使用受商業和政府合同支配,這意味著一個認可的正式標準是必需的。因此(在M. D. McIlroy的催促下),ANSI於1983年夏天,在CBEMA的領導下建立了X3J11委員會,目的是產生一個C標准。X3J11在1989年末提出了一個他們的報告[ANSI 89],後來這個標准被ISO接受為ISO/IEC 9899-1990。 1990年,國際標准化組織ISO(International Organization for Standards)接受了89 ANSI C 為I SO C 的標准(ISO9899-1990)。1994年,ISO修訂了C語言的標准。 1995年,ISO對C90做了一些修訂,即「1995基準增補1(ISO/IEC/9899/AMD1:1995)」。1999年,ISO又對C語言標准進行修訂,在基本保留原來C語言特徵的基礎上,針對應該的需要,增加了一些功能,命名為ISO/IEC9899:1999。 2001年和2004年先後進行了兩次技術修正。 目前流行的C語言編譯系統大多是以ANSI C為基礎進行開發的,但不同版本的C編譯系統所實現的語言功能和語法規則又略有差別。 2011年12月8日,ISO正式公布C語言新的國際標准草案:ISO/IEC 9899:2011,即C11。 新的標准修改提高了對C++的兼容性,並將新的特性增加到C語言中。新功能包括支持多線程, 基於ISO/IEC TR 19769:2004規范下支持Unicode,提供更多用於查詢浮點數類型特性的宏定義和靜態聲明功能。這些新特性包括: ● 對齊處理(Alignment)的標准化(包括_Alignas標志符,alignof運算符,aligned_alloc函數以及<stdalign.h>頭文件。 ● _Noreturn 函數標記,類似於 gcc 的 __attribute__((noreturn))。 ● _Generic 關鍵字。 ● 多線程(Multithreading)支持,包括:_Thread_local存儲類型標識符,<threads.h>;頭文件,裡麵包含了線程的創建和管理函數。 ● 增強的Unicode的支持。基於C Unicode技術報告ISO/IEC TR 19769:2004,增強了對Unicode的支持。包括為UTF-16/UTF-32編碼增加了char16_t和char32_t數據類型,提供了包含unicode字元串轉換函數的頭文件<uchar.h>. ● 刪除了 gets() 函數,使用一個新的更安全的函數gets_s()替代。 ● 增加了邊界檢查函數介面,定義了新的安全的函數,例如 fopen_s(),strcat_s() 等等。 ● 增加了更多浮點處理宏。 ● 匿名結構體/聯合體支持。這個在gcc早已存在,C11將其引入標准。 ● 靜態斷言(Static assertions),_Static_assert(),在解釋 #if 和 #error 之後被處理。 ● 新的 fopen() 模式,(「…x」)。類似 POSIX 中的 O_CREAT|O_EXCL,在文件鎖中比較常用。 ● 新增 quick_exit() 函數作為第三種終止程序的方式。當 exit()失敗時可以做最少的清理工作。 ● _Atomic類型修飾符和<stdatomic.h>;頭文件。
編輯本段特點
1. C是高級語言。它把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以像匯編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作單元。 2.C是結構式語言。結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便於使用、維護以及調試。C 語言是以函數形式提供給用戶的,這些函數可方便的調用,並具有多種循環、條件語句控製程序流向,從而使程序完全結構化。 3.C語言功能齊全。具有各種各樣的數據類型,並引入了指針概念,可使程序效率更高。而且計算功能、邏輯判斷功能也比較強大,可以實現決策目的的游戲。 4. C語言適用范圍大。適合於多種操作系統,如Windows、DOS、UNIX等等;也適用於多種機型。 C語言對編寫需要硬體進行操作的場合,明顯優於其它高級語言,有一些大型應用軟體也是用C語言編寫的。
編輯本段特色
指針是C語言的一大特色,可以說是C語言優於其它高級語言的一個重要原因。就是因為它有指針,可以直接進行靠近硬體的操作,但是C的指針操作不做保護,也給它帶來了很多不安全的因素。C++在這方面做了改進,在保留了指針操作的同時又增強了安全性,受到了一些用戶的支持,但是,由於這些改進增加語言的復雜度,也為另一部分所詬病。Java則吸取了C++的教訓,取消了指針操作,也取消了C++改進中一些備受爭議的地方,在安全性和適合性方面均取得良好的效果,但其本身解釋在虛擬機中運行,運行效率低於C++/C。一般而言,C,C++,java被視為同一系的語言,它們長期占據著程序使用榜的前二名。
編輯本段入門
1.一個C語言源程序可以由一個或多個源文件組成。 2.每個源文件可由一個或多個函數組成。 3.一個源程序不論由多少個文件組成,都有一個且只能有一個main函數,即主函數。 4.源程序中可以有預處理命令(包括include 命令、if命令、pragma命令),預處理命令通常應放在源文件或源程序的最前面。 5.每一個說明,每一個語句都必須以分號結尾。但預處理命令,函數頭和花括弧「}」之後不能加分號。 6.標識符,關鍵字之間必須至少加一個空格以示間隔。若已有明顯的間隔符,也可不再加空格來間隔。
編輯本段特點
簡潔緊湊、靈活方便 C語言一共只有32個關鍵字,9種控制語句,程序書寫形式自由,區分大小寫。把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以像匯編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作單元。 運算符豐富 C語言的運算符包含的范圍很廣泛,共有34種運算符。C語言把括弧、賦值、強制類型轉換等都作為運算符處理。從而使C語言的運算類型極其豐富,表達式類型多樣化。靈活使用各種運算符可以實現在其它高級語言中難以實現的運算。 數據類型豐富 C語言的數據類型有:整型、實型、字元型、數組類型、指針類型、結構體類型、共用體類型等。能用來實現各種復雜的數據結構的運算。並引入了指針概念,使程序效率更高。另外C語言具有強大的圖形功能,支持多種顯示器和驅動器。且計算功能、邏輯判斷功能強大。 同時對於不同的編譯器也有各種編輯方式。 C是結構式語言 結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便於使用、維護以及調試。C語言是以函數形式提供給用戶的,這些函數可方便的調用,並具有多種循環、條件語句控製程序流向,從而使程序完全結構化。 語法限制不太嚴格,程序設計自由度大 雖然C語言也是強類型語言,但它的語法比較靈活,允許程序編寫者有較大的自由度。 允許直接訪問物理地址,對硬體進行操作 由於C語言允許直接訪問物理地址,可以直接對硬體進行操作,因此它既具有高級語言的功能,又具有低級語言的許多功能,能夠像匯編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作單元,可用來寫系統軟體。 生成目標代碼質量高,程序執行效率高 一般只比匯編程序生成的目標代碼效率低10%~20%。 適用范圍大,可移植性好 C語言有一個突出的優點就是適合於多種操作系統,如MS-DOS、UNIX、Microsoft Windows 以及Linux;也適用於多種機型。C語言效率高,可移植性好,並具備很強的數據處理能力,因此適於編寫系統軟體,三維,二維圖形和動畫,它也是數值計算的高級語言。
編輯本段缺點
1. C語言的缺點主要表現在數據的封裝性上,這一點使得C在數據的安全性上有很大缺陷,這也是C和C++的一大區別。 2. C語言的語法限制不太嚴格,對變數的類型約束不嚴格,影響程序的安全性,對數組下標越界不作檢查等。從應用的角度,C語言比其他高級語言較難掌握。
編輯本段c語言 - 語法
如果一個變數名後面跟著一個有數字的中括弧,這個聲明就是數組聲明。字元串也是一種數組。它們以ASCII的NUL作為數組的退出。要特別注意的是,方括內的索引值是從0算起的。 指針 如果一個變數聲明時在前面使用 * 號,表明這是個指針型變數。換句話說,該變數存儲一個地址,而 *(此處特指單目運算符 * ,下同。C語言中另有 雙目運算符 *) 則是取內容操作符,意思是取這個內存地址里存儲的內容。指針是 C 語言區別於其他同時代高級語言的主要特徵之一。 指針不僅可以是變數的地址,還可以是數組、數組元素、函數的地址。通過指針作為形式參數可以在函數的調用過程得到一個以上的返回值(不同於return(z)這樣的僅能得到一個返回值。 指針是一把雙刃劍,許多操作可以通過指針自然的表達,但是不正確的或者過分的使用指針又會給程序帶來大量潛在的錯誤。 字元串 C語言的字元串其實就是char型數組,所以使用字元串並不需要引用庫。但是C標准庫確實包含了一些用於對字元串進行操作的函數,使得它們看起來就像字元串而不是數組。使用這些函數需要引用頭文件<string.h>;。 文件輸入/輸出 在C語言中,輸入和輸出是經由標准庫中的一組函數來實現的。在ANSI/ISO C中,這些函數被定義在頭文件<stdio.h>;中。 標准輸入/輸出 有三個標准輸入/輸出是標准I/O庫預先定義的: stdin 標准輸入 stdout 標准輸出 stderr 輸入輸出錯誤
編輯本段運算
C語言的運算非常靈活,功能十分豐富,運算種類遠多於其它程序設計語言。在表達式方面較其它程序語言更為簡潔,如自加、自減、逗號運算和三目運算使表達式更為簡單,但初學者往往會覺的這種表達式難讀,關鍵原因就是對運算符和運算順序理解不透不全。當多種不同運算組成一個運算表達式,即一個運算式中出現多種運算符時,運算的優先順序和結合規則顯得十分重要。在學習中,只要我們對此合理進行分類,找出它們與我們在數學中所學到運算之間的不同點之後,記住這些運算也就不困難了,有些運算符在理解後更會牢記心中,將來用起來得心應手,而有些可暫時放棄不記,等用到時再記不遲。 先要明確運算符按優先順序不同分類,《C程序設計》運算符可分為15種優先順序,從高到低,優先順序為1 ~ 15,除第2.13級和第14級為從右至左結合外,其它都是從左至右結合,它決定同級運算符的運算順序。
編輯本段結構
順序結構
順序結構的程序設計是最簡單的,只要按照解決問題的順序寫出相應的語句就行,它的執行順序是自上而下,依次執行。 例如:a = 3,b = 5,現交換a,b的值,這個問題就好像交換兩個杯子水,這當然要用到第三個杯子,假如第三個杯子是c,那麼正確的程序為:c = a; a = b; b = c;執行結果是a = 5,b = c = 3如果改變其順序,寫成:a = b; c = a; b =c;則執行結果就變成a = b = c = 5,不能達到預期的目的,初學者最容易犯這種錯誤。順序結構可以獨立使用構成一個簡單的完整程序,常見的輸入、計算,輸出三步曲的程序就是順序結構,例如計算圓的面積,其程序的語句順序就是輸入圓的半徑r,計算s = 3.14159*r*r,輸出圓的面積s。不過大多數情況下順序結構都是作為程序的一部分,與其它結構一起構成一個復雜的程序,例如分支結構中的復合語句、循環結構中的循環體等。
選擇結構
順序結構的程序雖然能解決計算、輸出等問題,但不能做判斷再選擇。對於要先做判斷再選擇的問題就要使用選擇結構。選擇結構的執行是依據一定的條件選擇執行路徑,而不是嚴格按照語句出現的物理順序。選擇結構的程序設計方法的關鍵在於構造合適的分支條件和分析程序流程,根據不同的程序流程選擇適當的選擇語句。選擇結構適合於帶有邏輯或關系比較等條件判斷的計算,設計這類程序時往往都要先繪制其程序流程圖,然後根據程序流程寫出源程序,這樣做把程序設計分析與語言分開,使得問題簡單化,易於理解。程序流程圖是根據解題分析所繪制的程序執行流程圖。 幾種基本的選擇結構 ①if(條件)
{選擇體}
這種選擇結構中的選擇體可以是一條語句,此時「{}」可以省略,也可以是多條語句即復合語句。它有兩條分支路徑可選,一是當條件為真,執行分支體,否則跳過選擇體,這時選擇體就不會執行。如:要計算x的絕對值,根據絕對值定義,我們知道,當x>=0時,其絕對值不變,而x<0時其絕對值是為x的反號,因此程序段為:if(x<0)x=-x;
②if(條件)
{擇路1}
else
{擇路2}
這是典型的選擇結構,如果條件成立,執行路徑1,否則執行路徑2,路徑1和路徑2都可以是1條或若干條語句構成。如:求ax^2+bx+c=0的根
分析:因為當b^2-4ac>=0時,方程有兩個實根,否則(b^2-4ac<0)有兩個共軛復根。其程序段如下:
int a,b,c,d,x,y;
printf("Please put the number of a,b&c from the quadratic equation of one variable one by one\n");
scanf("%d%d%d",&a,&b,&c);
d=b*b-4*a*c;
if(d<0)
{
printf("NO Root!Wrong!\n");
}
else
{
y=(-b-sqrt(d))/2*a;
x=(-b+sqrt(d))/2*a;
printf("The 1st equation root=%d\nThe 2nd equation root=%d",y,x);
}
③IF嵌套分支語句:其語句格式為:
if(條件1) {擇路1}
else if(條件2){擇路2}
else if(條件3){擇路3}
……
else if(條件n){擇路n}
else {擇路n+1}
FOR嵌套,其語句格式為:
for(初值A;范圍A;步長A)
{
for(初值B;范圍B;步長B)
{
循環體
}
}
FOR嵌套例子:九九乘法表
main()
{
int a,b,c;
for(a=1;a<=9;a++)
{
for(b=1;b<=a;b++)
{
c=b*a;
printf("%dx%d=%d ",b,a,c);
}
printf("\n");
}
}
嵌套分支語句雖可解決多個入口和出口的問題,但超過3重嵌套後,語句結構變得非常復雜,對於程序的閱讀和理解都極為不便,建議嵌套在3重以內,超過3重可以用下面的語句。
④switch開關語句:該語句也是多選擇語句,到底執行哪一塊,取決於開關設置,也就是表達式的值與常量表達式相匹配的那一路,它不同if…else語句,它的所有路徑都是並列的,程序執行時,由第一分支開始查找,如果相匹配,執行其後的塊,接著執行第2路徑,第3路徑……的塊,直到遇到break語句;如果不匹配,查找下一個分支是否匹配。這個語句在應用時要特別注意開關條件的合理設置以及break語句的合理應用。
「?」語句問號語句也是分支的一種,格式類似(a<b)? 語句1:(此處是冒號)語句2;假如括弧內為真則執行語句1否則執行語句2
循環結構
循環結構可以減少源程序重復書寫的工作量,用來描述重復執行某段演算法的問題,這是程序設計中最能發揮計算機特長的程序結構,C語言中提供四種循環,即goto循環、while循環、do while循環和for循環。四種循環可以用來處理同一問題,一般情況下它們可以互相代替換,但一般不提倡用goto循環,因為強制改變程序的順序經常會給程序的運行帶來不可預料的錯誤。 特別要注意在循環體內應包含趨於結束的語句(即循環變數值的改變),否則就可能成了一個死循環,這是初學者的一個常見錯誤。 三個循環的異同點:用while和do…while循環時,循環變數的初始化的操作應在循環體之前,而for循環一般在語句1中進行的;while循環和for循環都是先判斷表達式,後執行循環體,而do…while循環是先執行循環體後判斷表達式,也就是說do…while的循環體最少被執行一次,而while循環和for就可能一次都不執行。另外還要注意的是這三種循環都可以用break語句跳出循環,用continue語句結束本次循環,而goto語句與if構成的循環,是不能用break和 continue語句進行控制的。 順序結構、分支結構和循環結構並不彼此孤立的,在循環中可以有分支、順序結構,分支中也可以有循環、順序結構,其實不管哪種結構,我們均可廣義的把它們看成一個語句。在實際編程過程中常將這三種結構相互結合以實現各種演算法,設計出相應程序,但是要編程的問題較大,編寫出的程序就往往很長、結構重復多,造成可讀性差,難以理解,解決這個問題的方法是將C程序設計成模塊化結構。
模塊化程序結構
C語言的模塊化程序結構用函數來實現,即將復雜的C程序分為若干模塊,每個模塊都編寫成一個C函數,然後通過主函數調用函數及函數調用函數來實現一大型問題的C程序編寫,因此常說:C程序=主函數+子函數。因此,對函數的定義、調用、值的返回等中要尤其注重理解和應用,並通過上機調試加以鞏固。 判斷語句(選擇結構) 循環語句(循環結構) 跳轉語句(循環結構:是否循環)
if 語句:「如果」語句 while 語句:「當…」語句 goto 語句:「轉舵」語句
if—else 語句:「若…(則)…否則…」語句 do—while 語句:「做…當…(時候)」語句 break 語句:「中斷」(循環)語句
switch 語句:「切換」語句 for 語句:條件語句(即「(做)…為了…」語句) continue 語句:「繼續」語句(結束本次循環,繼續下一次循環)
switch—case:「切換—情況」語句 return 語句:「返回饋」語句
編輯本段關鍵字
關鍵字就是已被C語言本身使用,不能作其它用途使用的字。例如關鍵字不能用作變數名、函數名等 由ANSI標準定義的C語言關鍵字共32個: auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if while static 根據關鍵字作用將關鍵字分為數據類型關鍵字和流程式控制制關鍵字兩大類 大類 小類 名稱與作用
1 數據類型關鍵字 A.基本數據類型(5個) void:聲明函數無返回值或無參數,聲明無類型指針,顯式丟棄運算結果
char:字元型類型數據,屬於整型數據的一種
int:整型數據,通常為編譯器指定的機器字長
float:單精度浮點型數據,屬於浮點數據的一種
double:雙精度浮點型數據,屬於浮點數據的一種
B .類型修飾關鍵字(4個) short:修飾int,短整型數據,可省略被修飾的int。
long:修飾int,長整形數據,可省略被修飾的int。
signed:修飾整型數據,有符號數據類型
unsigned:修飾整型數據,無符號數據類型
C .復雜類型關鍵字(5個) struct:結構體聲明
union:共用體聲明
enum:枚舉聲明
typedef:聲明類型別名
sizeof:得到特定類型或特定類型變數的大小
D .存儲級別關鍵字(6個) auto:指定為自動變數,由編譯器自動分配及釋放。通常在棧上分配
static:指定為靜態變數,分配在靜態變數區,修飾函數時,指定函數作用域為文件內部
register:指定為寄存器變數,建議編譯器將變數存儲到寄存器中使用,也可以修飾函數形參,建議編譯器通過寄存器而不是堆棧傳遞參數
extern:指定對應變數為外部變數,即標示變數或者函數的定義在別的文件中,提示編譯器遇到此變數和函數時在其他模塊中尋找其定義。
const:與volatile合稱「cv特性」,指定變數不可被當前線程/進程改變(但有可能被系統或其他線程/進程改變)
volatile:與const合稱「cv特性」,指定變數的值有可能會被系統或其他進程/線程改變,強制編譯器每次從內存中取得該變數的值
函
『柒』 簡述C語言中有哪些常用表達式
這種東西簡述不了,我給你來份大全
C語言語法參考大全(流程式控制制語句)----------------------------------------------------------------------------------------------------------01條件語句的一般形式為:if(表達式) 語句1;else 語句2;上述結構表示: 如果表達式的值為非0(TURE)即真, 則執行語句1, 執行完語 句1從語句2後開始繼續向下執行; 如果表達式的值為0(FALSE)即假, 則跳過語句1而執行語句2。注意: 1. 條件執行語句中"else 語句2;"部分是選擇項, 可以預設, 此時條件語句變成:if(表達式) 語句1;表示若表達式的值為非0則執行語句1 , 否則跳過語句1繼續執行。 2. 如果語句1或語句2有多於一條語句要執行時, 必須使用"{"和"}" 把這些語句包括在其中, 此時條件語句形式為:if(表達式){ 語句體1;}else{ 語句體2;}3. 條件語句可以嵌套, 這種情況經常碰到, 但條件嵌套語句容易出錯, 其原因主要是不知道哪個if對應哪else。例如: if(x>20||x<-10) if(y<=100&&y>x) printf("Good"); else printf("Bad");對於上述情況, Turbo C2.0規定: else語句與最近的一個if語句匹配, 上例中的else與if(y<=100&&y>x)相匹配。為了使else與if(x>20||x<-10)相匹配, 必須用花括弧。如下所示:if(x>20||x<-10){ if(y<=100&&y>x) printf("Good");}else printf("Bad");4. 可用階梯式if-else-if結構。階梯式結構的一般形式為:if(表達式1) 語句1;else if(表達式2) 語句2;else if(表達式3) 語句3; . .else 語句n;這種結構是從上到下逐個對條件進行判斷, 一旦發現條件滿點足就執行與它有關的語句, 並跳過其它剩餘階梯; 若沒有一個條件滿足, 則執行最後一個else語句n。最後這個else常起著"預設條件"的作用。同樣, 如果每一個條件中有多於一條語句要執行時, 必須使用"{"和"}"把這 些語句包括在其中。02switch語句在編寫程序時, 經常會碰到按不同情況分轉的多路問題, 這時可用嵌套if-else-fi語句來實現, 但if-else-if語句使用不方便, 並且容易出錯。對這種情況, Turbo C2.0提供了一個開關語句。開關語句格式為:switch(變數){ case 常量1: 語句1或空; case 常量2: 語句2或空; . . . case 常量n; 語句n或空; default: 語句n+1或空;}執行switch開關語句時, 將變數逐個與case後的常量進行比較, 若與其中一個相等, 則執行該常量下的語句, 若不與任何一個常量相等, 則執行default 後面的語句。注意:1. switch中變數可以是數值, 也可以是字元。2. 可以省略一些case和default。3. 每個case或default後的語句可以是語句體, 但不需要使用"{"和"}"括起來。下例的switch中變數為整數型。main(){int test;for(test=0; test<=10; test++){switch(test) /*變數為整型數的開關語句*/{case 1:printf("%d", test);break; /*退出開關語句*/case 2:printf("%d", test);break;case 3:printf("%d", test);break;default:puts("Error");break;}}}下例的switch中變數為字元型。#include<stdio.h>main(){char c;while(c!=27) /*循環直到按Esc鍵結束*/{c=getch(); /*從鍵盤不回顯接收一個字元*/switch(c){case A: /*接收的字元為A*/putchar(c);break; /*退出開關語句*/case B:putchar(c);break;default: /*接收的字元非A和B*/puts("Error");break;}}}03for循環for循環是開界的。它的一般形式為:for(<初始化>; <條件表過式>; <增量>) 語句;(1)初始化總是一個賦值語句, 它用來給循環控制變數賦初值;(2) 條件表達式是一個關系表達式, 它決定什麼時候退出循環;(3) 增量定義循環控制變數每循環一次後按什麼方式變化。這三個部分之間用";"分開。例如:for(i=1; i<=10; i++) 語句;上例中先給i賦初值1, 判斷i是否小於等於10, 若是則執行語句, 之後值增加1。再重新判斷, 直到條件為假, 即i>10時, 結束循環。注意:1. for循環中語句可以為語句體, 但要用"{"和"}"將參加循環的語句括起來。2. for循環中的"初始化"、"條件表達式"和"增量"都是選擇項, 即可以預設, 但";"不能預設。省略了初始化, 表示不對循環控制變數賦初值。 省略了條件表達式, 則不做其它處理時便成為死循環。省略了增量, 則不對循環控制變數進行操作, 這時可在語句體中加入修改循環控制變數的語句。3. for循環可以有多層嵌套。例16:main(){ int i, j, k; printf("i j k"); for (i=0; i<2; i++) for(j=0; j<2; j++) for(k=0; k<2; k++) printf(%d %d %d", i, j, k);}04while循環與do-while 循環while循環的一般形式為:while(條件) 語句;while循環表示當條件為真時, 便執行語句。直到條件為假才結束循環。並繼續執行循環程序外的後續語句.例17:#include<stdio.h>main(){char c;c=; /*初始化c*/while(c!=X0D) /*回車結束循環*/c=getche(); /*帶回顯的從鍵盤接收字元*/}上例中, while循環是以檢查c是否為回車符開始, 因其事先被初始化為空,所以條件為真, 進入循環等待鍵盤輸入字元; 一旦輸入回車, 則c=X0D, 條件為假, 循環便告結束。與for循環一樣, while循環總是在循環的頭部檢驗條件, 這就意味著循環可能什麼也不執行就退出。注意:1. 在while循環體內也允許空語句。例如:while((c=getche())!=X0D);這個循環直到鍵入回車為止。2. 可以有多層循環嵌套。3. 語句可以是語句體, 此時必須用"{"和"}"括起來。例18:#include<stdio.h>main(){char c, fname[13];FILE *fp; /*定義文件指針*/printf("File name:"); /*提示輸入文件名*/scanf("%s", fname); /*等待輸入文件名*/fp=fopen(fname, "r"); /*打開文件只讀*/while((c=fgetc(fp)!=EOF) /*讀取一個字元並判斷是否到文件結束*/putchar(c); /*文件未結束時顯示該字元*/}05do-while 循環do-while 循環的一般格式為:do語句;while(條件);這個循環與while循環的不同在於: 它先執行循環中的語句, 然後再判斷條件是否為真, 如果為真則繼續循環; 如果為假, 則終止循環。因此, do-while循環至少要執行一次循環語句。同樣當有許多語句參加循環時, 要用"{"和"}"把它們括起來。06continue 語句continue語句的作用是跳過循環本中剩餘的語句而強行執行下一次循環。continue語句只用在for、while、do-while等循環體中, 常與if條件語句一起使用, 用來加速循環。 main(){ char c; while(c!=0X0D) /*不是回車符則循環*/ { c=getch(); if(c==0X1B) continue; /*若按Esc鍵不輸出便進行下次循環*/ printf("%c", c); }}07break語句 break語句通常用在循環語句和開關語句中。當break用於開關語句switch中時, 可使程序跳出switch而執行switch以後的語句; 如果沒有break語句, 則將成為一個死循環而無法退出。當break語句用於do-while、for、while循環語句中時, 可使程序終止循環而執行循環後面的語句, 通常break語句總是與if語句聯在一起。 即滿足條件時便跳出循環。main(){ int i=0; char c; while(1) /*設置循環*/ { c=; /*變數賦初值*/ while(c!=13&&c!=27) /*鍵盤接收字元直到按回車或Esc鍵*/ { c=getch(); printf("%c", c); } if(c==27) break; /*判斷若按Esc鍵則退出循環*/ i++; printf("The No. is %d", i);}printf("The end");}
望採納,謝謝
『捌』 C語言中while的用法
C語言中while的用法解析如下:
一、1表示true,在bool類型取值false和true,0為false,非0為true(例如-1和2都是true)。程序中,這里1就表示永真,直到循環體內遇到break。
二、while用法演示解析:
1、含義:While 循環會在指定條件為真時循環執行代碼塊。
2、語法如下:(如果忘記增加條件中所用變數的值,該循環永遠不會結束。該可能導致程序崩潰。)
(8)c語言文件鎖擴展閱讀:
比較 for 和 while循環:
for循環控制變數的初始化和修改都放在語句頭部分,書寫形式較簡潔,且適用於循環次數已知的情況。在循環語句中定義一個局部變數,循環結束後,局部變數就被釋放了。
而while循環控制變數的初始化一般放在while語句之前,循環控制變數的修改一般放在循環體中,形式上不如for語句簡潔,但它比較適用於循環次數不易預知的情況(用某一條件控制循環)。
兩種形式各有優點,但它們是等價的,可以相互轉換。
『玖』 c語言的語言特點
1、高級語言:它是把高級語言的基本結構和語句與低級語言的實用性結合起來的工作單元。
2、結構式語言:結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便於使用、維護以及調試。C 語言是以函數形式提供給用戶的,這些函數可方便的調用,並具有多種循環、條件語句控製程序流向,從而使程序完全結構化。
4、代碼級別的跨平台:由於標準的存在,使得幾乎同樣的C代碼可用於多種操作系統,如Windows、DOS、UNIX等等;也適用於多種機型。C語言對編寫需要進行硬體操作的場合,優於其它高級語言。
5、使用指針:可以直接進行靠近硬體的操作,但是C的指針操作不做保護,也給它帶來了很多不安全的因素。C++在這方面做了改進,在保留了指針操作的同時又增強了安全性,受到了一些用戶的支持,但是,由於這些改進增加語言的復雜度,也為另一部分所詬病。Java則吸取了C++的教訓,取消了指針操作,也取消了C++改進中一些備受爭議的地方,在安全性和適合性方面均取得良好的效果,但其本身解釋在虛擬機中運行,運行效率低於C++/C。一般而言,C,C++,java被視為同一系的語言,它們長期占據著程序使用榜的前三名。 優點1、簡潔緊湊、靈活方便
C語言一共只有32個關鍵字,9種控制語句,程序書寫形式自由,區分大小寫。把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以像匯編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作單元。
2、運算符豐富
C語言的運算符包含的范圍很廣泛,共有34種運算符。C語言把括弧、賦值、強制類型轉換等都作為運算符處理。從而使C語言的運算類型極其豐富,表達式類型多樣化。靈活使用各種運算符可以實現在其它高級語言中難以實現的運算。
3、數據類型豐富
C語言的數據類型有:整型、實型、字元型、數組類型、指針類型、結構體類型、共用體類型等。能用來實現各種復雜的數據結構的運算。並引入了指針概念,使程序效率更高。
4、表達方式靈活實用
C語言提供多種運算符和表達式值的方法,對問題的表達可通過多種途徑獲得,其程序設計更主動、靈活。它語法限制不太嚴格,程序設計自由度大,如對整型量與字元型數據及邏輯型數據可以通用等。
5、允許直接訪問物理地址,對硬體進行操作
由於C語言允許直接訪問物理地址,可以直接對硬體進行操作,因此它既具有高級語言的功能,又具有低級語言的許多功能,能夠像匯編語言一樣對位(bit)、位元組和地址進行操作,而這三者是計算機最基本的工作單元,可用來寫系統軟體。
6、生成目標代碼質量高,程序執行效率高
C語言描述問題比匯編語言迅速,工作量小、可讀性好,易於調試、修改和移植,而代碼質量與匯編語言相當。C語言一般只比匯編程序生成的目標代碼效率低10%~20%。
7、可移植性好
C語言在不同機器上的C編譯程序,86%的代碼是公共的,所以C語言的編譯程序便於移植。在一個環境上用C語言編寫的程序,不改動或稍加改動,就可移植到另一個完全不同的環境中運行。
8、表達力強
C語言有豐富的數據結構和運算符。包含了各種數據結構,如整型、數組類型、指針類型和聯合類型等,用來實現各種數據結構的運算。C語言的運算符有34種,范圍很寬,靈活使用各種運算符可以實現難度極大的運算。
C語言能直接訪問硬體的物理地址,能進行位(bit)操作。兼有高級語言和低級語言的許多優點。
它既可用來編寫系統軟體,又可用來開發應用軟體,已成為一種通用程序設計語言。
另外C語言具有強大的圖形功能,支持多種顯示器和驅動器。且計算功能、邏輯判斷功能強大。
缺點
1、 C語言的缺點主要表現在數據的封裝性上,這一點使得C在數據的安全性上有很大缺陷,這也是C和C++的一大區別。
2、 C語言的語法限制不太嚴格,對變數的類型約束不嚴格,影響程序的安全性,對數組下標越界不作檢查等。從應用的角度,C語言比其他高級語言較難掌握。也就是說,對用C語言的人,要求對程序設計更熟練一些。 1、對齊處理(Alignment)的標准化(包括_Alignas標志符,alignof運算符,aligned_alloc函數以及<stdalign.h>頭文件)。
2、_Noreturn 函數標記,類似於 gcc 的 __attribute__(noreturn)。
3、_Generic關鍵字。
4、多線程(Multithreading)支持,包括:_Thread_local存儲類型標識符,<threads.h>;頭文件,裡麵包含了線程的創建和管理函數。
5、增強的Unicode的支持,基於C Unicode技術報告ISO/IEC TR 19769:2004,增強了對Unicode的支持。包括為UTF-16/UTF-32編碼增加了char16_t和char32_t數據類型,提供了包含unicode字元串轉換函數的頭文件<uchar.h>.
6、刪除了 gets() 函數,使用一個新的更安全的函數gets_s()替代。
7、增加了邊界檢查函數介面,定義了新的安全的函數,例如 fopen_s(),strcat_s()等等。
8、增加了更多浮點處理宏。
9、匿名結構體/聯合體支持,這個在gcc早已存在,C11將其引入標准。
10、靜態斷言(Static assertions),_Static_assert(),在解釋 #if 和 #error 之後被處理。
11、新的 fopen()模式,(「…x」),類似 POSIX 中的 O_CREAT|O_EXCL,在文件鎖中比較常用。
12、新增 quick_exit()函數作為第三種終止程序的方式。當 exit()失敗時可以做最少的清理工作。
13、_Atomic類型修飾符和<stdatomic.h>頭文件。
『拾』 C語言里%zd是什麼意思
格式符z和整數轉換說明符一起使用,表示對應數字是一個size_t值。屬於C99。
%ld 表示long型。