C語言的用法及特點(diǎn)_第1頁
C語言的用法及特點(diǎn)_第2頁
C語言的用法及特點(diǎn)_第3頁
C語言的用法及特點(diǎn)_第4頁
C語言的用法及特點(diǎn)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

WORD(可編輯版本)———C語言的用法及特點(diǎn)C語言不但執(zhí)行效率高而且可移植性好,可以用來開發(fā)應(yīng)用軟件、驅(qū)動(dòng)、操作系統(tǒng)等。C語言也是其它眾多高級(jí)語言的鼻祖語言,所以說學(xué)習(xí)C語言是進(jìn)入編程世界的必修課。下面是我為大家整理的C語言的用法及特點(diǎn),希望對你們有援助。

C語言的特點(diǎn)

Microsoft.NET(以下簡稱.NET)框架是微軟提出的新一代Web軟件開發(fā)模型,C#語言是.NET框架中新一代的開發(fā)工具。C#語言是一種現(xiàn)代、面向?qū)ο蟮恼Z言,它簡化了C++語言在類、命名空間、方法重載和異常處理等方面的操作,它摒棄了C++的復(fù)雜性,更易使用,更少出錯(cuò)。它使用組件編程,和VB一樣容易使用。C#語法和C++和JAVA語法特別相似,如果讀者用過C++和JAVA,學(xué)習(xí)C#語言應(yīng)是比較輕松的。

用C語言編寫的源程序,務(wù)必用C#語言編譯器將C#源程序編譯為中間語言(MicroSoftIntermediateLanguage,MSIL)代碼,形成擴(kuò)展名為exe或dll文件。中間語言代碼不是CPU可執(zhí)行的機(jī)器碼,在程序運(yùn)行時(shí),務(wù)必由通用語言運(yùn)行環(huán)境(monLanguageRuntime,CLR)中的既時(shí)編譯器(JUSTINTime,JIT)將中間語言代碼翻譯為CPU可執(zhí)行的機(jī)器碼,由CPU執(zhí)行。CLR為C#語言中間語言代碼運(yùn)行提供了一種運(yùn)行時(shí)環(huán)境,C語言的CLR和JAVA語言的虛擬機(jī)類似。這種執(zhí)行方法使運(yùn)行速度變慢,但帶來其它一些好處,主要有:

通用語言規(guī)范(monLanguageSpecification,CLS):.NET系統(tǒng)包括如下語言:C#、C++、VB、J#,他們都遵守通用語言規(guī)范。任何遵守通用語言規(guī)范的語言源程序,都可編譯為相同的中間語言代碼,由CLR負(fù)責(zé)執(zhí)行。只要為其它操作系統(tǒng)編制相應(yīng)的CLR,中間語言代碼也可在其它系統(tǒng)中運(yùn)行。

自動(dòng)內(nèi)存管理:CLR內(nèi)建垃圾收集器,當(dāng)變量實(shí)例的生命周期結(jié)束時(shí),垃圾收集器負(fù)責(zé)收回不被使用的實(shí)例占用的內(nèi)存空間。不必象C和C++語言,用語句在堆中建立的實(shí)例,務(wù)必用語句釋放實(shí)例占用的內(nèi)存空間。也就是說,CLR具有自動(dòng)內(nèi)存管理功能。

交叉語言處理:由于任何遵守通用語言規(guī)范的語言源程序,都可編譯為相同的中間語言代碼,不同語言設(shè)計(jì)的組件,可以相互通用,可以從其它語言定義的類派生出本語言的新類。由于中間語言代碼由CLR負(fù)責(zé)執(zhí)行,因此異常處理方法是一致的,這在調(diào)試一種語言調(diào)用另一種語言的子程序時(shí),顯得特別便利。

增加安全:C#語言不支持指針,一切對內(nèi)存的訪問都務(wù)必通過對象的引用變量來實(shí)現(xiàn),只允許訪問內(nèi)存中允許訪問的部分,這就防止病毒程序使用非法指針訪問私有成員。也避免指針的誤操作產(chǎn)生的錯(cuò)誤。CLR執(zhí)行中間語言代碼前,要對中間語言代碼的安全性,完整性進(jìn)行驗(yàn)證,防止病毒對中間語言代碼的修改。

版本支持:系統(tǒng)中的組件或動(dòng)態(tài)聯(lián)接庫可能要升級(jí),由于這些組件或動(dòng)態(tài)聯(lián)接庫都要在注冊表中注冊,由此可能帶來一系列問題,例如,安裝新程序時(shí)自動(dòng)安裝新組件替換舊組件,有可能使某些務(wù)必使用舊組件才可以運(yùn)行的程序,使用新組件運(yùn)行不了。在.NET中這些組件或動(dòng)態(tài)聯(lián)接庫不必在注冊表中注冊,每個(gè)程序都可以使用自帶的組件或動(dòng)態(tài)聯(lián)接庫,只要把這些組件或動(dòng)態(tài)聯(lián)接庫放到運(yùn)行程序所在文件夾的子文件夾bin中,運(yùn)行程序就自動(dòng)使用在bin文件夾中的組件或動(dòng)態(tài)聯(lián)接庫。由于不需要在注冊表中注冊,軟件的安裝也變得容易了,一般將運(yùn)行程序及庫文件拷貝到指定文件夾中就可以了。

完全面向?qū)ο螅翰幌驝++語言,即支持面向過程程序設(shè)計(jì),又支持面向?qū)ο蟪绦蛟O(shè)計(jì),C語言是完全面向?qū)ο蟮?,在C中不再存在全局函數(shù)、全區(qū)變量,所有的函數(shù)、變量和常量都務(wù)必定義在類中,避免了命名沖突。C語言不支持多重繼承。

C語言assert的用法

原型定義:

#include

voidassert(intexpression);

assert的作用是現(xiàn)計(jì)算表達(dá)式expression,如果其值為假(即為0),那么它先向stderr打印一條出錯(cuò)信息,

然后通過調(diào)用abort來終止程序運(yùn)行。

請看下面的程序清單badptr.c:

復(fù)制代碼代碼如下:

#include

#include

#include

intmain(void)

{

FILE*fp;

fp=fopen(test.txt,w);//以可寫的方式打開一個(gè)文件,如果不存在就創(chuàng)建一個(gè)同名文件

assert(fp);//所以這里不會(huì)出錯(cuò)

fclose(fp);

fp=fopen(noexitfile.txt,r);//以只讀的方式打開一個(gè)文件,如果不存在就打開文件失敗

assert(fp);//所以這里出錯(cuò)

fclose(fp);//程序永遠(yuǎn)都執(zhí)行不到這里來

return0;

}

宏名:assert

功能:測試一個(gè)條件并可能使程序終止

用法:voidassert(inttest);

程序例:

復(fù)制代碼代碼如下:

#include

#include

#include

structITEM{

intkey;

intvalue;

};

/*additemtolist,makesurelistisnotnull*/

voidadditem(structITEM*itemptr){

assert(itemptr!=NULL);

/*additemtolist*/

}

intmain(void)

{

additem(NULL);

return0;

}

assert()宏用法

注意:assert是宏,而不是函數(shù)。在C的assert.h頭文件中。

assert宏的原型定義在中,其作用是如果它的`條件返回錯(cuò)誤,則終止程序執(zhí)行,原型定義:

復(fù)制代碼代碼如下:

#include

voidassert(intexpression);

assert的作用是先計(jì)算表達(dá)式expression,如果其值為假(即為0),那么它先向標(biāo)準(zhǔn)錯(cuò)誤流stderr打印一條出錯(cuò)信息,然后通過調(diào)用abort來終止程序運(yùn)行;否則,assert()無任何作用。宏assert()一般用于確認(rèn)程序的正常操作,其中表達(dá)式構(gòu)造無錯(cuò)時(shí)才為真值。完成調(diào)試后,不必從源代碼中刪除assert()語句,因?yàn)楹闚DEBUG有定義時(shí),宏assert()的定義為空。

C語言怎樣輸出菱形

適有同學(xué)問起一些C語言題目,本想上網(wǎng)查找了事,但網(wǎng)上的方法都是分為上下部分用兩個(gè)嵌套for循環(huán)輸出。我想有沒有合起來輸出的呢,這樣符合簡潔又美觀的要求呢?答案是有的。

題目:輸出行列都相等的菱形,如5行5列:

行列xxxxxxxxx

1*

2***

3*****

4***

5*

分析:

當(dāng)行數(shù)等于總行數(shù)的一半時(shí),*是遞增的,遞增為2。

當(dāng)行數(shù)大于總行數(shù)的一半時(shí),*是遞減的,遞增為2。

設(shè)有一個(gè)行列為n的菱形,

我們用變量i作為行數(shù),以0開始,i

k作為n菱第i行要輸出的*個(gè)數(shù)。

則i=n的中值(用m表示,m=(n-1)/2)時(shí),k遞增,im時(shí),k遞減。

因?yàn)閗相對于m行對稱,所以:

當(dāng)im時(shí),i每增加i-m時(shí)的k值就和第m-i行的.k值相等,即第i-m行和第m-(i-m)相對稱。

所以得出結(jié)果:

當(dāng)i=m時(shí),k=2i+1

當(dāng)im時(shí),k=2(m-(i-m))+1,(m=(n-1)/2)。即k=2n-2i-1

由于我們只需要輸出*左邊的空格即可,所以每行*左邊的空格的個(gè)數(shù)為:(n-每行的k)/2。

每行循環(huán)輸出空格,再循環(huán)輸出每行的*,再輸出回車,結(jié)束一行。

這樣我們就可以開始編程了。

#include

intmain()

{

inti,j,k,n;//定義四個(gè)變量:i是行,j每行*號(hào)前的空格數(shù),k每行的*號(hào)數(shù)

printf(pleaseinputoddn:);

scanf(%d,n);//輸入奇數(shù)n

for(i=0;i

{

if(n=2*i+1)//判斷k值

k=2*i+1;

else

k=2*n-2*i-1;

for(j=(n-k)/2;j0;j--)//循環(huán)輸出空格

printf();

for(;k0;k--)//循環(huán)輸出*號(hào)

printf(*);

printf(n);//輸出回車結(jié)束一行

}

本來呢題目就到止結(jié)束了,但上面的程序還不夠完美

比如說,別人輸入n值為偶數(shù)怎么辦?輸入非數(shù)值呢?

我們加一點(diǎn)東西進(jìn)去:

#include

intmain()

{

inti,j,k,n=0;//這里給n賦初值,即使輸入非數(shù)值,n也可有確切的值。

do{//增加一個(gè)大循環(huán),可以令n可以輸入多次以觀察不同的結(jié)果。

printf(pleaseinputoddn,0toexit:);//當(dāng)輸入0的時(shí)候,退出大循環(huán),結(jié)束程序。

scanf(%d,n);

if(!(n%2))//增加對輸入偶數(shù)的判斷。

{

printf(youinputaeven,pleaseinputagain.n);

continue;

}

for(i=0;i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論