C語言入門---程序結構
在計算機中,程序是被一句一句執行的。C 語言中安排了三種結構來組織這樣一句一 句的程序,分別為順序結構、分支結構和循環結構。使用這三種結構,可以完成任何複雜 的程序,這三種結構也是寫複雜 C 語言程序的基礎。
一、簡單語句
在 C 語言中,語句就是能夠獨立完成一個簡單功能的基本構成單位。程序是由一條條 的語句組成和執行的,每一條語句完成一個基本的功能。最基礎的不可再分的 C 語言語句 被稱為簡單語句。之前,已經見過好多 C 語言的簡單語句了。例如,「radius = 3;」就是一條簡單語句。 C 語言中常見的簡單語句有 4 種:表達式語句、空語句、控制語句和函數調用語句。先來 介紹兩種簡單的語句:表達式語句和空語句。其他的語句形式和作用將在講解完相應的知 識點之後再作介紹。
1.1、表達式語句
表達式語句就是在表達式後面加分號構成的語句,形式如下:
表達式 ;
像這樣的表示,就構成了一條表達式語句,可以在程序中完成一定的功能。例如,下
面就是曾見過的表達式語句,只是當時並沒有給出具體的名字而已。
radius = 1;
10/5;
~-2;
該程序中,第一個語句就是一個賦值表達式語句,它完成的功能就是把 1 賦值給變數 radius。第二個語句是一個除法運算表達式語句,它完成 10 除以 5 的運算。第三個語句是 按位取反表達式語句,它計算–2 按位取反的結果。
這些我們所熟悉的賦值運算、除法運算、按位取反運算所組成的賦值語句、除法運算
語句、按位取反語句,都屬於表達式語句。
1.2、空語句
空語句在 C 語言中很少用到,它的作用就是什麼都不幹,讓計算機空轉,它的主要目 的就和我們軍訓的時候原地踏步是一樣的,是為了暫時等待其他的東西先完成。
空語句的形式為一個簡單的「;」,其他什麼都沒有: ;一個單獨的分號就是告訴計算機,先等一等,在此暫留一步,然後再往下執行其他的語句。
二、語句塊
語句塊有時也被稱為複合語句。之所以叫它複合語句,是因為它是由其他簡單語句組
成的,看著像一塊語句,所以也叫語句塊。
2.1、語句塊的形式
C 語言中的語句塊是由一對大括弧和其中包含的若干條語句組成的,形式如下所示:若要寫一個包含幾個表達式語句和空語句的語句塊,就可以用下面的形式:這是一個語句塊的例子,其中包含四個已經了解的語句,依次為賦值表達式語句、空語句、除法運算表達式語句和按位取反表達式語句。
{
語句 1;
語句 2;
...
語句 n;
}
若要寫一個包含幾個表達式語句和空語句的語句塊,就可以用下面的形式:
;
這是一個語句塊的例子,其中包含四個已經了解的語句,依次為賦值表達式語句、空
語句、除法運算表達式語句和按位取反表達式語句。
2.2、語句塊的嵌套
C 語言中的語句塊中是可以包含語句塊的,叫做語句塊嵌套。語句塊中的語句塊被當
作一個簡單的語句來處理。例如,下面是一個語句塊嵌套的包含表達式語句和空語句的例子。
;
~-2;
這個程序中的語句塊稍微有點複雜,語句「10/5;」和「~-2;」這兩個語句被大括弧括 起來組成了一個語句塊,這個語句塊又和「radius = 1;」、「;」一起被另一個大括弧括了 起來,組成了一個更複雜的語句塊。
三、變數的作用域
在 C 語言中,變數的作用域就是可以使用這個變數的範圍。每個變數都是有作用域的, 如果變數在作用域之外,我們就不能使用它了,否則就會出錯。這就好比,你的孩子在家 的時候,你可以喊「Baby」,他會馬上跑過來,但是你的孩子去外婆家了,你再喊「Baby」, 就沒人答應了。
在 C 語言中,常見的變數都是在語句塊里聲明定義的,這些變數被稱為局部變數。局 部變數在 C 語言中的使用要遵循下面三個規則。
3.1、 局部變數的聲明定義位置規則
C 語言規定,變數的聲明定義必須位於該語句塊中的所有語句之前。也就是說一個語
句塊的最合理的形式為:最前面全是局部變數的聲明定義,後邊全是語句,就像下面這樣:
{
變數聲明定義 1;
變數聲明定義 2; ... 變數聲明定義 n;
語句(或語句塊)1; 語句(或語句塊)2;
...
語句(或語句塊)n;
}
在上面的格式中,變數的聲明定義的次序可以無論先後。但是,變數的聲明定義絕對
不能位於語句之後,否則開發工具將會告訴你編譯出錯。例如,下面的這個程序就違反了這個規則,導致編譯出錯。
#include
int main
int radius;
radius =1;
int result;
result = 3*radius;
}
return 0;
}
在程序進行編譯的時候出現編譯錯誤信息,如圖 4.1 所示。這是由於在語句塊中,變數 result 的聲明定義位於賦值語句之後導致的。只要將 result 整型變數的聲明定義放到賦值 語句 radius=1 之前,就滿足上面的規則了,也就不會出現這樣的錯誤了,不信,可以試 一試!
3.2、局部變數的作用域規則
正確地在語句塊中聲明定義局部變數以後,來看看關於局部變數的作用域規則:局部 變數的作用域為它所在的語句塊,也就是局部變數只有在它聲明定義的語句塊中是可以使 用的,出了這個語句塊範圍,再使用這個變數將會出錯。從語句塊的構成來看,局部變數的作用域就是它所在的一對大括弧之間,出了這個大括弧再使用這個變數就會出現錯誤。例如,下面的代碼就犯了這個錯誤。
在程序中,在一個語句塊中聲明定義了兩個變數。但是,在語句塊外面的一個賦值運 算語句「resutl=3*radius;」中使用了這兩個變數,結果導致了錯誤,如圖 4.2 所示。「radius」 和「result」是未聲明的標識符。
3.3、嵌套語句塊的同名變數作用域規則
我們知道一個局部變數的作用域為它所在的語句塊之中。對於一個嵌套的語句塊,如 果外面的語句塊和裡面的語句塊都有一個同樣名字的局部變數,那該怎麼辦?就像下面所示:
{
A 變數聲明定義;
A 的操作語句;
嵌套語句塊內外都有 A 的聲明定義,那麼裡面 A 的操作語句到底是對哪個 A 進行操 作的呢?
C 語言使用的規則為:就近原則。也就是說代碼「A 的操作語句」,使用的是裡面的 語句塊的變數 A。這就好像,家裡有兩個孩子,一個在客廳,一個在卧室,你在卧室喊了 聲「Baby」,肯定是卧室的孩子會向你跑來。可以使用下面的程序來驗證一下這個規則:
int i;
i = 1;
{
int i; i = 10;
i--;
printf("%d ",i);
}
i++;
return 0;
}
程序中,有一個嵌套的語句塊。內外的語句塊中都聲明定義了一個整型變數 i,外面 的 i 賦值為 1,並對其進行自增運算,裡面的 i 賦值為 10,並對其進行自減運算,然後分 別使用printf函數輸出結果。程序的結果為 9 和 2,如圖 4.3 所示,符合上面所述的「就 近原則」。
四、最常見的語句執行結構——順序結構
在 C 語言中,語句的組織是可以按照不同的方式進行的,對於每一種方式組織的語句, 執行順序都是不同的。順序結構是其中最簡單的組織方式,它是按照程序中 C 語言語句的 順序一句一句地執行的。
4.1、順序結構的一般形式
順序結構在 C 語言程序中的形式如下所示,一條語句接著一條語句往下寫:
語句 1;
語句2 ;
...
語句 n-1;
語句 n;
假設,程序中有 n 條語句,並且是按照順序結構組織的,那麼,程序就會從第一條語 句開始一直順序地執行到第 n 條語句。
4.2、順序結構的例子
看看實際的順序結構的例子吧,下面的程序有好幾條語句,它們都是按照順序結構組織的。
int i = 0;
i = 5;
程序中寫了兩個賦值語句和兩個 i++自增表達式語句。它們是按照順序結構的方式組 織的,一條在另一條之後,程序的輸出如圖 4.5 所示。從程序輸出中可以看出,順序結構 組織的語句確實是一條一條地執行的。程序先輸出了一個 0,表示初始化賦值語句已經執行。接下來程序輸出為 1,表示 i 自增運算已經完成。再接著程序輸出為 5,表示 i 賦值為 5 語句執行成功。最後程序輸出 為 6,表示 i 再一次自增成功。這正是順序結構程序執行的順序。
關注微信公眾號「 書問 」,免費領取萬本好書
書名:C語言入門很簡單
作者:馬磊 等 著
出 版 社:清華大學出版社
定價:¥49.00


TAG:書問科普 |