久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

西北大學計算機基礎與c語言程序設計精品課程網(wǎng)

 夢中家園 2013-01-27

著名的計算機科學家wirth(沃思)提出了一個著名的公式表達了程序設計的實質:

算法+數(shù)據(jù)結構=程序

即“程序是在數(shù)據(jù)的特定的表示方式的基礎上,,對抽象算法的具體描述”,。

程序結構=控制結構+數(shù)據(jù)結構

結構化程序設計:是為使程序具有合理的結構,以保證程序正確性而規(guī)定的一套程序設計的方法,,是人們多年來研究與實踐的結晶,。

①結構化程序設計目的:通過設計結構良好的程序,,以程序的靜態(tài)良好結構保證程序動態(tài)執(zhí)行的正確性,使程序易理解,、易調試,、易維護,以提高軟件開發(fā)的效率,,減少出錯率,。

②結構化程序設計的構成單元

任何程序都可由順序、選擇,、重復三種基本控制結構來組成,。如圖1.5所示 。

處理1

處理2

條件

處理1

處理2

條件

  處理

 

 

 

 

 

 

 

 

 

 

 

 

 


 

a  順序結構                    b 選擇結構                             c 重復結構

表示“處理1”先             表示當條件滿足時執(zhí)行“處理1” 首先判斷條件是否滿足,,若滿足

于“處理2”執(zhí)行    否則執(zhí)行“處理2”                      執(zhí)行“處理”,,返回“判斷”條件,直至條件不

滿足為止

三種基本的結構程序設計圖

 

三種控制結構可表示其它結構,,采用基本結構組合的方法,,產(chǎn)生所需要的程序。

三種基本的控制結構共有的特點是單入口單出口,。(如虛線部分)

程序語言中也可引入其它控制結構設施,,為靈活、方便的處理問題,。

限制GOTO 句的意義:

goto 語句為無條件轉向語句,,其一般格式為:goto 語句標號

含義是無條件跳轉到語句標號所處位置開始繼續(xù)執(zhí)行后面的語句。顯然goto語句改變了程序的執(zhí)行順序,。如果程序中不限制goto 語句的使用,,則使得程序的靜態(tài)結構與程序的動態(tài)執(zhí)行差異很大,程序難閱讀,、難理解,,破壞了單入口/單出口的原則,使程序的正確性難以證明,,錯誤難以局部化,。

③結構化程序設計方法

結構化程序設計的概念是E.W.Dijkstra于1969年首先提出的,他強調了從程序結構和風格上來研究程序設計問題,。也將此方法稱為“自頂向下”或“逐步求精”法,。其一是“自頂向下,逐步求精”的設計思想,,即整個設計應分為若干層次,,逐步加以解決;而每一步實在前一步的基礎上,對前一步設計的細化,。其二是“獨立功能,,一個入口,一個出口“的模塊化結構,,即把大而復雜的問題層層細化分解成若干個相對獨立、功能單一的問題處理模塊,,而每個模塊與外界聯(lián)系只有一個單入口與單出口,。其三是“僅用三種基本控制結構”的設計原則,即每個模塊都只用三個基本結構來描述,。

 

C程序實現(xiàn)的結構及特點

一個完整的,、可執(zhí)行的C程序文件一般結構如下:

[包含文件語句]

[預編譯語句]

[宏定義語句]

[子函數(shù)1]

[子函數(shù)2]

[子函數(shù)3]

.

.

.

[子函數(shù)n]

主函數(shù)

以上每行表示一段語句或程序,[ ]中的內容表示可選,。所謂可選,,并不是說可有可無,而是要根據(jù)實際情況看是否需要它們,,但對一個完整的,、可執(zhí)行的C程序而言,主函數(shù)是必不可少的,,它是一個程序的入口,。換句話說,計算機執(zhí)行一個程序的時候,,是從主函數(shù)的位置開始執(zhí)行的,。還有一點需要說明的是,主函數(shù)的函數(shù)名必須使用main(),。

不管是子函數(shù)還是主函數(shù),,它都是一個函數(shù),對一個函數(shù)而言,,一般是這樣一個結構:

[返回類型] 函數(shù)名([參數(shù)列表]){

[說明性語句]

[操作性語句]

}

與上面所講的內容相似,[ ] 中的內容表示可選,,對于主函數(shù)而言,,返回類型和參數(shù)列表一般情況下可以不明確的寫出來,系統(tǒng)會執(zhí)行一些默認的操作,,但對于子函數(shù)而言,,返回類型是必不可少的,其他的內容比如參數(shù)列表則要根據(jù)實際情況而定(需要就用,,不需要就不用,。但是什么時候需要,什么時候不需要,就屬于程序的功能設計范疇,,這在以后還要做進一步的討論),。

C語言程序結構有如下特點:

1.C程序由函數(shù)構成。一個C程序至少要包括一個函數(shù),,即main函數(shù),也可以包含一個main函數(shù)和若干個其它函數(shù),。因此,,函數(shù)是C程序的基本單位,。被調用的函數(shù)可以是系統(tǒng)提供的庫函數(shù),,如printf和scanf函數(shù),,也可以是用戶自定義的函數(shù),。C的函數(shù)相當于其它語言中的子程序。用函數(shù)來實現(xiàn)特定的功能,。C語言的函數(shù)庫十分豐富,,Turbo C提供三百多個庫函數(shù)。C語言的這種特點易于實現(xiàn)程序的模塊化,。

2.            每個函數(shù)由兩部分組成:函數(shù)的說明部分和函數(shù)體,。函數(shù)的一般形式為:

函數(shù)類型 函數(shù)名(參數(shù)表)

參數(shù)說明,;

{

  函數(shù)體,;

}

其中說明部分包括函數(shù)名、函數(shù)類型,、函數(shù)屬性,、形參名、形參類型,。一個函數(shù)名后面必須跟一對圓括弧,,可以沒有參數(shù),如main(),;函數(shù)體即函數(shù)說明部分下面的大括弧{}內的部分,,如果一個函數(shù)中有多對大括弧,則最外層的一對{}為函數(shù)體的范圍,。函數(shù)體一般包括變量的定義和執(zhí)行部分,。

3.            main函數(shù)是整個C程序的入口。一個C程序總是從main函數(shù)開始執(zhí)行的。main函數(shù)可以在程序最前面,,也可以在程序最后,,或在一些函數(shù)之前、另一些函數(shù)之后,。

4.            C程序書寫格式自由,,一行內可以寫幾個語句,一個語句也可以分開寫在多行上,。各語句之間用分號分隔,。分號是C語句的必要組成部分。語句結束標志分號不可缺省,,即使是程序的最后一個語句也必須要有分號。

5.            C語言本身沒有輸入輸出語句,。其輸入和輸出功能是由庫函數(shù)scanf和printf等函數(shù)來實現(xiàn)的,,即C對輸入輸出實行“函數(shù)化”。

6.            可以用/*……*/對C程序中的任何部分作注釋,,以提高程序的可讀性,。

與參數(shù)傳遞的相關技術

 

變量的作用域

程序的編譯單位是源程序文件,一個源程序文件可以包含一個或若干個子函數(shù),,在函數(shù)內定義的變量是內部變量,,在函數(shù)外定義的變量是外部變量,又叫全局變量或全程變量,。

全局變量可以為本文件中其它函數(shù)所共用,,其作用域從定義該變量的位置開始一直到文件結束。全局變量可以實現(xiàn)參數(shù)傳遞的某些功能,,在其作用域范圍內,,全局變量可以將子函數(shù)中的值帶出到其它函數(shù),但如果在一個子函數(shù)中作了改變,,將會影響全局變量的值,。局部變量只在本函數(shù)范圍內有效,也就是說只有在本函數(shù)內才能使用它們,,本函數(shù)以外不能使用,。需要注意的是,不同函數(shù)中可以使用相同名字的變量,,由于其作用域的范圍不同,,盡管有相同的名字,但它們代表不同的對象,,作用域不同,,互不干擾。在一個函數(shù)內部,可以在復合語句中定義變量,,但這種變量只在本復合語句中有效,。簡單來說,變量作用域就是指包含該變量定義的最小范圍,。比如說,,在子函數(shù)定義的變量其作用域就在該子函數(shù)體內,在復合語句中定義的變量其作用域就在該復合語句中,,在文件開始定義的變量在整個文件內有效,。

 

參數(shù)傳遞方式

參數(shù)傳遞是函數(shù)之間進行信息通訊的重要渠道。其參數(shù)傳遞的主要方式有傳值和傳地址兩類方式,。C語言中調用函數(shù)時,,實參代替形參的過程是一個單向的傳值過程,在編譯技術中稱為值傳遞方式,。C語言中指針類型的參數(shù)傳遞可以看作是傳地址方式,。下面是一個關于參數(shù)傳遞以及變量作用域的源程序:

#include <stdio.h>

int b=10;                                  /*定義全局變量*/

int fun1(int a1){

       b=a1+1;                               /*改變全局變量*/

       printf("in fun1:the addr of a is %X,the value of a is %d.\n",&a1,a1);

       return(a1=a1+1);

}

int fun2(int *a2){

       printf("in fun1:the addr of a is %X,the value of a is %d.\n",a2,*a2);

       return(*a2=*a2+1);                    /*地址方式改變變量的值*/

}

main(){

int a,c,d;

a=0;                                   /*定義局部變量*/

c=3;                                   /*定義局部變量*/

printf("in main:the addr of a,b,c,d is %X,%X,%X.\n",&a,&b,&c,&d);

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

d=fun1(a);

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

c=fun2(&a);

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

}

下面是該程序的運行結果:

in main:the addr of a,b,c,d is 12FF7C,422D8C,12FF78.

a=0,b=10,c=3

in fun1:the addr of a is 12FF24,the value of a is 0.

a=0,b=1,d=1

in fun1:the addr of a is 12FF7C,the value of a is 0.

a=1,b=1,c=1

在該程序中,a1,、a2,、a、c,、d是局部變量,,而b是全局變量??梢钥闯?,由于fun1()函數(shù)的調用改變了全局變量b,fun2()函數(shù)的調用改變了局部變量c,。

 

函數(shù)結果的帶出方式

值傳遞方式最大的缺點是被調用函數(shù)不能通過參數(shù)向調用函數(shù)返值,,原因是出了函數(shù)體,值參數(shù)的作用域相當是該函數(shù)的局部變量,,無法帶出結果值,,如果返回一個結果值,可以使用return方式返回函數(shù)結果值,。

如果函數(shù)結果需要帶出多個值,,該怎樣實現(xiàn)?可以有以下兩類方式:①全局變量方式帶出,②通過地址傳遞帶出(數(shù)組方式,、結構體方式,、指針方式)。

①全局變量方式:上面源程序中的fun1()函數(shù)對b的改變就是一個全局變量方式帶出的例子,。

②數(shù)組方式:如果要返回的是多個相同類型的值,,則可以將這些值放到一個數(shù)組當中,,然后返回數(shù)組的指針或首地址。

③結構體方式:如果要返回的是多個不同類型的值,,則可以將這些值放到一個結構體當中,,然后返回結構體的指針或全局變量,但必須注意的是該結構體必須是在全局范圍內定義的結構體,。

④指針方式:像改變上源程序中的fun2()函數(shù)對a一樣改變相關需要改變的變量,。

注:通過參數(shù)表的參數(shù)傳遞是一種參數(shù)顯式傳遞方式,而通過全局變量可一種隱式參數(shù)傳遞,,一個函數(shù)中對全局變量的改變會影響其它程序的調用,,使用全局變量必須注意這個問題。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多