前言:想要寫出一篇令人眼前一亮的文章嗎?我們特意為您整理了5篇c語言范文,相信會為您的寫作帶來幫助,發(fā)現(xiàn)更多的寫作思路和靈感。
關(guān)鍵詞:C語言 函數(shù)調(diào)用 間接訪問
中圖分類號:TP312 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-9416(2015)12-0000-00
C語言程序設(shè)計是結(jié)構(gòu)化程序設(shè)計,函數(shù)是C語言的基本模塊,函數(shù)調(diào)用是C語言運行的重要機(jī)制,在C語言中除了提供大量的庫函數(shù)外,要實現(xiàn)具體的功能必須自己定義函數(shù),定義出函數(shù)要實現(xiàn)的功能,使用函數(shù)的過程就是調(diào)用函數(shù)的過程,即函數(shù)間的接口,接口的實現(xiàn)是通過參數(shù)傳遞方式實現(xiàn),函數(shù)調(diào)用的關(guān)鍵是正確傳遞實參值,用正確的形參變量來接收。
1 函數(shù)的定義
所謂函數(shù)定義,即定義函數(shù)功能,如求和,求最值,排序功能,用C語言提供的選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)寫出具體的代碼實現(xiàn)。如果函數(shù)只是完成某項特定的處理任務(wù)可以定義無返回值的函數(shù),如果函數(shù)最后要返回結(jié)果,可以定義的返回值的函數(shù),如下兩段代碼左邊有返回值,右邊沒有返回值。
int sum1(int m)//函數(shù)頭部
{ int i,sum=0;
for(i=1;i
sum=sum+i;
return sum; }
void sum2(int m)//函數(shù)頭部
{ int i,sum=0;
for(i=1;i
sum=sum+i;
}
s=sum;
}
2 函數(shù)的調(diào)用
函數(shù)調(diào)用的一般形式為:
函數(shù)名(實參列表);
實參可以是常數(shù)、變量、表達(dá)式等,多個實參用逗號,分隔。
在C語言中,函數(shù)調(diào)用的方式有多種,例如:
01.// 函數(shù)作為表達(dá)式中的一項出現(xiàn)在表達(dá)式中
02.z = max(x, y);
03.m = n + max(x, y);
04.// 函數(shù)作為一個單獨的語句
05.printf("%d", a);
06.scanf("%d", &b);
07.// 函數(shù)作為調(diào)用另一個函數(shù)時的實參
08.printf( "%d", max(x, y) );
09.total( max(x, y), min(m, n) );
在函數(shù)調(diào)用中還應(yīng)該注意的一個問題是求值順序的問題。所謂求值順序是指對實參列表中各個參數(shù)是自左向右使用呢,還是自右向左使用。對此,各系統(tǒng)的規(guī)定不一定相同。
3 實際參數(shù)和形式參數(shù)
在函數(shù)定義時出現(xiàn)函數(shù)名后邊括號里的變量就是形參,形參必須是變量,因為在函數(shù)調(diào)用時形參是被賦值對象,形參只在定義它的函數(shù)內(nèi)部被訪問,是局部變量。
在函數(shù)調(diào)用時出現(xiàn)在函數(shù)名后邊括號里的常量、變量、表達(dá)式、函數(shù)等是實參,實參當(dāng)前值是確定的,因為它在賦號右側(cè)。
實參出現(xiàn)在主調(diào)函數(shù)中,形參出現(xiàn)在被調(diào)函數(shù)中。
4 傳值調(diào)用和傳址調(diào)用
4.1兩個數(shù)對調(diào)的函數(shù)實現(xiàn)
#include
int a=3,b=4;
void swap1(int a,int b){//值傳遞,也稱為單向傳遞
int t;
t=a;a=b;b=t;
}
void swap2(int *a,int *b){//地址傳遞,也稱為“雙向傳遞”,實質(zhì)還是單向傳遞
int t;
t=*a;*a=*b;*b=t;
}
main(){
swap1(a,b);
printf("a=%d,b=%d\n",a,b);
swap2(&a,&b);
printf("a=%d,b=%d\n",a,b);
}
第一個輸出結(jié)果為3,4,第二個輸出結(jié)果為4,3,在這里傳值調(diào)用和傳址調(diào)用正確,多數(shù)教材和資料中談到傳址調(diào)用時介紹是雙向傳遞,應(yīng)該是不正確的,以下面例子為例:
4.2有下列程序
# include
void fun1(int x,int y)
{ int z;
z=x; x=y; y=z;
}
void fun2(int *x,int *y)
{ int z;
z=*x; *x=*y; *y=z;
(*x)++; (*y)++;
}
void fun3(int *x,int *y)
{ int z;
z=*x; *x=*y; *y=z;
(*x)++; (*y)++;
}
void main()
{ int a=5,b=9;
fun1(a,b);
printf("a=%d,b=%d\n",a,b);
fun2(&a,&b);
printf("a=%d,b=%d\n",a,b);
fun3(&a,&b);
printf("a=%d,b=%d\n",a,b);
}
在這個程序中有三次函數(shù)調(diào)用,第一次調(diào)用結(jié)果還第三次調(diào)用都沒有改變主調(diào)函數(shù)中變量的值第二次改變了,第一次是傳值調(diào)用,第二、三次是傳址調(diào)用,第二次改變的實質(zhì)不是因為是傳址調(diào)用,而是因為使用了間接訪問。
5 C語言程序設(shè)計函數(shù)使用方法
5.1函數(shù)是C模塊語言的模塊
C語言的基本框架是函數(shù),函數(shù)是C語言的基本模塊,在理解中列舉生活中的例子,例如一個部門一開始很小,只有一個人,相當(dāng)只有一個主函數(shù),慢慢的部門壯大起來,需要的人數(shù)增多,這時候部門就可以再進(jìn)一個人,那必然有一個領(lǐng)導(dǎo)另一個,領(lǐng)導(dǎo)者就是先來的人,也就是主函數(shù),被領(lǐng)導(dǎo)者是后來的人,即被調(diào)用函數(shù),主函數(shù)安排任務(wù)給被調(diào)函數(shù),要把任務(wù)內(nèi)容告訴被調(diào)用函數(shù),這變是參數(shù)傳遞。
5.2函數(shù)代碼定義過程
定義時先定義被調(diào)用函數(shù),然后再定義主函數(shù),這樣在主函數(shù)中就不用做函數(shù)聲明了。
定義被調(diào)用函數(shù)時,先把函數(shù)名字及圓括號和大括號寫,里面的代碼先不寫。然后寫主函數(shù)定義,主函數(shù)在這里沒有返回值也無參,主函數(shù)的頭部定義沒有問題,然后先寫主函數(shù)體代碼,通常主函數(shù)分三部分, 輸入、調(diào)用和輸出,這三部分相對比較難的是調(diào)用,調(diào)用時要分析有沒有返回值,有沒有參數(shù),如果有參數(shù),有幾個并且參數(shù)的類型要確定,調(diào)用時的參數(shù)是實際參數(shù),根據(jù)實參和形參的一一對應(yīng)關(guān)系,實參確定好了,形參的類型和個數(shù)自然也就確定了,這樣被調(diào)用函數(shù)的頭部就定義好了。
主函數(shù)定義后,被調(diào)用函數(shù)的頭部也定義好了,這時候開始寫被調(diào)用函數(shù)的函數(shù)體,也是編寫程序最難的一部分,涉及具體的算法。
把主函數(shù)和被調(diào)用函數(shù)定義好后,在具體開發(fā)環(huán)境下編譯、鏈接、執(zhí)行,找出程序有沒有語法錯誤和邏輯錯誤,最后程序得出正確的結(jié)果。
6 結(jié)語
C語言程序設(shè)計函數(shù)部分是學(xué)習(xí)難點,它把以前學(xué)的一個函數(shù)能實現(xiàn)的功能分在兩個或多個函數(shù)中實現(xiàn),并且多個函數(shù)這間有接口,接口就是函數(shù)調(diào)用時的參數(shù)傳遞,參數(shù)傳遞時又涉及到變量的作用域和生存期,函數(shù)部分把C語言的各個知識點都聯(lián)接起來了,是C語言的集成和綜合,所以學(xué)好函數(shù)是學(xué)好C語言的關(guān)鍵。
參考文獻(xiàn)
[1] 譚浩強(qiáng).C程序設(shè)計(第三版)[M].清華大學(xué)出版社,2005年.
關(guān)鍵詞:C語言;程序;學(xué)習(xí)
中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2008)25-1497-03
Discussion about C Language Learning
YING Shi-yong
(Yancheng Textile Vocational and Technical College, Yancheng 224005, China)
Abstract: In regard to fragmentary knowledge of C language, the beginner have difficulty in learning it. The author puts forward some methods of studying C language from the teaching practice. It helps the beginner to solve some problems in the process of studying and seek for study methods that suit themselves.
Key words: C language; procedures; learning
1 問題的提出
隨著計算機(jī)技術(shù)的普及,學(xué)習(xí)語言程序設(shè)計的人也越來越多,尤其是學(xué)習(xí)C語言的人更是多。但是不少人對計算機(jī)語言的學(xué)習(xí)比較頭疼,感到力不從心。平心而論,對于初學(xué)者而言,這屬于正常現(xiàn)象。請看下面用C語言編寫的一道程序:
#include "stdio.h"
#definePI 3.1415
main()
{ float r,area;
printf("%please input the value of r:");
scanf("%f",&r);
if(r>0) s=PI*r*r;
else { if(area==0) return(0);
ease return(-1); }
printf("area=%f",area); }
這個程序的功能是通過鍵盤輸入一個實型數(shù),經(jīng)過程序的運行后,在屏幕上顯示以這個數(shù)作為半徑的圓的面積。這雖然是一個比較簡單的程序,卻包含了C語言的很多重要的知識點。因此,對知識點的學(xué)習(xí)就顯得很重要了。
2 C語言的特點
每一種語言都有自己的特點,C也不例外。它的特點如下:
2.1 語言簡單,使用方便
它采用類似自然語言的語法來書寫程序代碼。所謂自然語言就是接近于人思維習(xí)慣的語言。用C語言編寫程序的過程往往就是反映了編程者思考問題的過程。
2.2 運算符豐富
C語言總共有34種運算符號。從而使得C的運算類型很豐富,表達(dá)式類型多樣化,靈活使用各種運算可以實現(xiàn)其他高級語言中很難實現(xiàn)的運算。
2.3 數(shù)據(jù)結(jié)構(gòu)豐富
C本身數(shù)據(jù)類型多,如整型、單精度型、雙精度型、字符型、數(shù)組型、指針型、結(jié)構(gòu)體型、共同體型等,并且能實現(xiàn)各種復(fù)雜的鏈表、樹、棧的運算。
2.4 具有結(jié)構(gòu)化的控制語句
常用的有if……else語句、while語句、do……while語句、switch語句、for語句等。用函數(shù)作為程序模塊以實現(xiàn)程序的模塊化。
2.5 移植性好
“基本上不作修改就能用語各種型號的計算機(jī)和各種操作系統(tǒng)?!盵1]
3 C語言入門要點
3.1 注意C語言的書寫
比起經(jīng)典的教學(xué)語言PASCAL來講,C語言的書寫是相對比較隨便,而且具有很靈活性。但是,從易讀性的角度出發(fā)還是要遵循一些規(guī)則。往往有條有理的程序在視覺上有一種美的享受。如果書寫的程序沒有一定的規(guī)律可尋,語句沒有層次感,讀者就會沒有耐心去讀了。書寫結(jié)構(gòu)就如同框架、基本輪廓。養(yǎng)成良好的書寫習(xí)慣,對于培養(yǎng)嚴(yán)謹(jǐn)?shù)乃季S很有幫助。在書寫時要尤其要注意以下幾點:
(1)一行中最好是以一個語句為佳。雖然一行中可以書寫很多的語句,但在讀的時候很煩瑣,而且在調(diào)試程序時也不容易發(fā)現(xiàn)錯誤;
(2){}的配對。在書寫時尤其要注意配對,對于要配對的{}盡量書寫在同一列中。
3.2 掌握C語言的結(jié)構(gòu)
C語言的程序從程序結(jié)構(gòu)上看主要有順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。程序的結(jié)構(gòu)也就是程序的骨架和輪廓,對程序的執(zhí)行過程有著很大的影響。
3.2.1 順序結(jié)構(gòu)
顧名思義,就是程序順序地從第一個操作開始,一直執(zhí)行到最后一個操作[2]。流程圖如圖a。
3.2.2 條件選擇結(jié)構(gòu)
例如:“如果明天下雨,我就不去看電影;如果不下雨,我就在家看電視?!蔽摇叭ゲ蝗タ措娪啊笔怯伞疤煜虏幌掠辍边@個條件決定的,同時,“天下不下雨”這個條件決定了我有兩中選擇:“看電影”還是“在家看電視”。這就是條件選擇的一個模型。
對于程序設(shè)計語言來講,選擇結(jié)構(gòu)是一種很重要的結(jié)構(gòu)。就文章開頭的這個例程序,里面就是用了條件選擇結(jié)構(gòu)。首先判斷r是否大于0,因為半徑是負(fù)數(shù)就沒有意義,所以它不可能是個負(fù)數(shù)。當(dāng)半徑為0是就表示是一個點圓,面積自然就是0了。
下面來看看程序中這種結(jié)構(gòu)的程序執(zhí)行過程:
首先判定條件是否成立,如果成立就說這個條件是真,程序就執(zhí)行條件問真的子句,如果條件不成立就是說這個條件是假,程序就跳轉(zhuǎn)執(zhí)行它下面的條件為假的子句。
用流程圖來表示,如圖b。
對于這個流程圖用語言可以這樣描述:
if (P成立) A
else B
如果語句A或者是語句B中也是一個條件選擇結(jié)構(gòu)結(jié)果又會怎么樣?用語言就可以這樣描述了:
if(條件P1){ if(條件P2)語句A;
else語句B;}
else{ if(條件P3)語句C;
else語句D;}
這就是條件結(jié)構(gòu)的嵌套。注意嵌套在C中是很重要的一種結(jié)構(gòu),不僅是可以在條件選擇之間有嵌套,還可以和下面的要提到的重復(fù)(循環(huán))之間構(gòu)成嵌套。
3.2.3 循環(huán)結(jié)構(gòu)
所謂循環(huán)結(jié)構(gòu)就是:有一條或者是幾條語句在重復(fù)執(zhí)行,直到它不滿足某種條件為止。典型循環(huán)結(jié)構(gòu)有:當(dāng)型循環(huán)和直到型循環(huán)。它們的代表語句分別是:while語句和do…while語句。當(dāng)型結(jié)構(gòu)的流程圖如圖c。
語句的執(zhí)行過程就是:首先判定條件是否為真,當(dāng)條件是真時,就重復(fù)執(zhí)行語句,直到條件為假為止。特殊情況,條件永遠(yuǎn)為真時,就會變成死循環(huán)。
3.3 注重C語言的零碎知識點
零碎的知識點就是血肉,C語言本身的特點就是知識點很零碎,不太容易做到面面俱到,但是我們應(yīng)力求不要放過每一個知識點。要在細(xì)節(jié)上多花工夫。
例如:
(1)printf函數(shù)和scanf函數(shù)。這兩個函數(shù)的格式比較復(fù)雜,不同的格式要求就會有不同的輸出形式。它們都是C的庫函數(shù)。在需要使用標(biāo)準(zhǔn)I/O庫中的函數(shù)時,就要包含#include "stdio.h"這個宏定義。
(2)編譯預(yù)處理。C的編譯系統(tǒng)對程序進(jìn)行通常的編譯之前,先對程序中的特殊命令進(jìn)行預(yù)處理。特殊命令有:宏定義、文件包含、條件編譯。編譯預(yù)處理也是C語言中常用的寫程序的方法。
(3)數(shù)據(jù)構(gòu)造方式可以分為基本類型的數(shù)據(jù)和派生類型的數(shù)據(jù)。
(4)算術(shù)表達(dá)式、關(guān)系表達(dá)式和邏輯表達(dá)式。例如:x+y、x>y和x&&y 分別是是算術(shù)表達(dá)式、關(guān)系表達(dá)式和邏輯表達(dá)式。算術(shù)表達(dá)式的結(jié)果是根據(jù)x,y的取值不同而不同,而關(guān)系表達(dá)式和邏輯表達(dá)式的結(jié)果只有兩個:1、0。另外,還要注意表達(dá)式的優(yōu)先級。
3.4 要注重上機(jī)操作練習(xí)
C也是一個操作性很強(qiáng)的語言。編寫好的程序必須要通過調(diào)試。在調(diào)試程序的過程中可以學(xué)習(xí)到很多東西。因為機(jī)器是很“無私的”,會無情地指出操作中的錯誤。只要有錯就不能通過編譯,程序就無法運行下去。上機(jī)操作的主要目的就是要通過調(diào)試程序來驗證你編寫的程序。程序調(diào)試是一項很細(xì)致的工作,是需要下工夫、積累經(jīng)驗的過程。上機(jī)調(diào)試程序不僅僅是 “驗證程序的正確性”,而更重要的是“掌握調(diào)試方法和技巧”。因此上機(jī)過程中要注意經(jīng)驗的積累。
4 C語言提高關(guān)鍵
學(xué)好、用好C語言光靠入門知識還好似不夠的,必須學(xué)習(xí)好它的提高部分,也是C的精華部分:數(shù)組、函數(shù)和指針。
4.1 數(shù)組
數(shù)組是一組類型相同的數(shù)據(jù)的有序集合。它是一種簡單實用的數(shù)據(jù)結(jié)構(gòu)。數(shù)組是用一個具有特定意義的名字代表順序排列的一組數(shù),順序號就是下標(biāo)變量的值。[3]在學(xué)習(xí)數(shù)組時,應(yīng)該重點掌握:一維數(shù)組、二維數(shù)組和字符數(shù)組的定義、初始化和引用。尤其是基本的概念。如:int a[10]和a[8]的區(qū)別,二維數(shù)組的存放形式等。
4.2 函數(shù)
函數(shù)是實現(xiàn)語言模塊化結(jié)構(gòu)的重要體現(xiàn)。在設(shè)計程序的過程中,經(jīng)常會在不同的程序段中出現(xiàn)有相同或相似功能的小塊程序。如果在每個不同的程序段中都反復(fù)出現(xiàn)這樣的小塊程序,那么對整個大程序來講它的可讀性會降低,同時也會給設(shè)計者和讀者帶來不必要的麻煩。這就好比建造一座大樓,我們主要要做的工作是結(jié)構(gòu)的設(shè)計,對于門窗、水泥和鋼材等施工材料,直接可以從廠家購買使用即可,而沒有必要再專門的成立門窗生產(chǎn)廠、水泥生產(chǎn)廠和鋼材生產(chǎn)廠來生產(chǎn)這些施工材料。因此,我們就可以將反復(fù)出現(xiàn)的小塊程序組成在一起形成一個模塊,然后其他的函數(shù)就可以通過語句直接調(diào)用這些模塊即可,這是函數(shù)的主要思想。
想要學(xué)好函數(shù)還得在這些方面下工夫:函數(shù)的定義、函數(shù)的參數(shù)、函數(shù)的值、局部變量和全局變量的一些基本概念;同時對于函數(shù)的調(diào)用(嵌套調(diào)用、遞歸調(diào)用等)過程要特別注意,一定要理清調(diào)用的關(guān)系及參數(shù)的正確傳遞。
要學(xué)好函數(shù)。善于利用函數(shù)減少重復(fù)編寫程序代碼的工作量。
4.3 指針
指針部分是C語言精華中的精華,主要是因為指針的應(yīng)用可以使程序更加簡潔、緊湊和高效。指針使用的好處是顯而易見的,但是要學(xué)好用好它卻不是很容易的,學(xué)好指針的關(guān)鍵是要深入理解基本的概念,如指針、變量的指針、指針變量等;另外還要注意與前面的知識相聯(lián)系,如指針和數(shù)
5 結(jié)束語
C語言的應(yīng)用很廣,著名的UNIX操作系統(tǒng)就是用C語言來寫的?,F(xiàn)在的C++也是在C語言的基礎(chǔ)上發(fā)展起來的。本文粗淺地談了C語言的學(xué)習(xí),由于篇幅所限,只是提供了學(xué)習(xí)的方法和途徑。所以有興趣的初學(xué)者應(yīng)在入門之后反復(fù)練習(xí),悉心揣摩,由淺入深,循序漸進(jìn),就一定能熟練地掌握和運用好C語言。
參考文獻(xiàn):
[1] 譚浩強(qiáng). C程序設(shè)計[M]. 北京:清華大學(xué)出版社,1997.
區(qū)別:
1、C語言適用范圍大,可移植性好,嵌入式的C語言是跑在嵌入式的開發(fā)板上的,CPU和我們電腦不一樣,所以編譯器也是不一樣的,生成的可執(zhí)行程序也是不一樣的;
2、C語言允許直接訪問物理地址,可以直接對硬件進(jìn)行操作,嵌入式有很多時候會受到硬件的限制,同時,在編寫嵌入式的程序時,對于實時性要求可能會很高;
3、C語言程序生成代碼質(zhì)量高,程序執(zhí)行效率高,由于嵌入式系統(tǒng)一般內(nèi)存,cpu等資源有限,編程時需要特別考慮系統(tǒng)的高效性。
(來源:文章屋網(wǎng) )
考研有四門課:數(shù)學(xué)、英語、政治、專業(yè)課,如果不是計算機(jī)專業(yè)的,不需要考C語言。
C語言:是一門通用計算機(jī)編程語言,應(yīng)用廣泛,C語言的設(shè)計目標(biāo)是提供一種能以簡易的方式編譯、處理低級存儲器、產(chǎn)生少量的機(jī)器碼以及不需要任何運行環(huán)境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平臺的特性,以一個標(biāo)準(zhǔn)規(guī)格寫出的C語言程序可在許多電腦平臺上進(jìn)行編譯,甚至包含一些嵌入式處理器以及超級電腦等作業(yè)平臺。
(來源:文章屋網(wǎng) )
1、編譯系統(tǒng)最底部出現(xiàn)241表示代碼中含有程序不認(rèn)識的字符。
2、C語言是一門通用計算機(jī)編程語言,應(yīng)用廣泛。C語言的設(shè)計目標(biāo)是提供一種能以簡易的方式編譯、處理低級存儲器、產(chǎn)生少量的機(jī)器碼以及不需要任何運行環(huán)境支持便能運行的編程語言。盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平臺的特性,以一個標(biāo)準(zhǔn)規(guī)格寫出的C語言程序可在許多電腦平臺上進(jìn)行編譯,甚至包含一些嵌入式處理器(單片機(jī)或稱MCU)以及超級電腦等作業(yè)平臺。
(來源:文章屋網(wǎng) )