国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C語言學習中的四大難點

2019-11-17 05:20:14
字體:
來源:轉載
供稿:網友
  C語言是一種結構化語言,適于按模塊化方式組織程序,層次十分清楚,易于調試和維護。C語言的表現能力和處理能力極強,不僅具有豐富的運算符和數據類型,便于實現各類復雜的數據結構,而且還可以直接訪問內存的物理地址,進行位(bit)一級的操作。由于C語言的功能強大、應用廣泛,它成為了目前軟件開發的最常用的語言之一,同時也是二級考試中很受歡迎的語言之一,能為今后參加三級、四級學習和考試打下良好的基礎。

  下面我們重點來講一講C語言學習過程中所特有的一些知識難點。

  算術表達式

  C語言中的算術運算有單目運算和雙目運算兩種。單目運算指的是該運算符只能連接一個運算量,除了正負號外,主要有++(加1)和--(減1),它有前綴和后綴之分,主要區別在于前綴++n表示先令n=n+1,然后取n的值,后綴n++表示先取n的值,然后令n=n+1。雙目運算是指該運算符的左右兩側都必須有運算量。常見的雙目運算符有:+、-、、/、%等。諸如x+y、x/y、xy等運算均為雙目運算。碰到雙目運算時,要非凡注重數據的類型問題。具體要求有以下幾點:

  1.雙目運算的結果的類型必須與運算量的類型一致;

  2.假如參與雙目運算的兩個運算量類型不一致,系統將自動把其中的一個進行類型轉換,使兩個運算量的類型一致后再進行運算。自動轉換的規則是:按“向高看齊”的原則進行轉換。在幾個基本的數據類型中,由高到低的排列順序為:double、int、char。

  2000年春季考試中有一道選擇題:

  下列程序的輸出結果是( )

A) 3 B) 3.2 C) 0 D) 3.07

main
 double d=3.2 int xy
x=1.2 y=x+3.8/5.0
PRintf″%d /n″ dy

  解析:本題中,程序先執行語句x=1.2,根據賦值運算的類型轉換規則,這里要將double型的常量1.2轉換為int型,即取整為1,然后將1賦值給變量x。接下來執行語句y=x+3.8/5.0;根據運算符的優先級,先計算小括號內,再計算除法,最后執行賦值運算。小括號內的運算過程為:先將整型變量x的值1轉換為double型1.0,然后與3.8進行加法運算,得到中間結果4.8。接著進行除法運算4.8/5.0,其結果小于1.0,這里沒有必要計算出精確值,因為接著進行賦值運算,賦值號左邊的變量y的類型為整型,于是對這個小于1.0的中間結果進行取整,結果為0,于是變量y的值為0。因此該程序的輸出結果應該是0,即正確答案為C。
逗號表達式

  C語言中的逗號表達式的形式如下:

表達式1,表達式2,表達式3,……,表達式n

  學習逗號表達式時一定要把握它的要領:1.逗號表達式的運算過程為:從左往右逐個計算;2.逗號表達式是作為一個整體的,它的最終結果就是最后一個表達式(也即表達式n)的值;3.逗號運算符的優先級別是所有運算符中最低的。只有這樣,才能真正把握這種運算,得出正確的解答。

  2001年秋季考試中有一道選擇題(此題曾在1998年春季考試中出現過):

  若已定義x和y為double類型,則表達式:x=1y=x+3/2的值是:

A) 1 B) 2 C) 2.0 D) 2.5

  解析:該表達式就是一個逗號表達式,所以要按照運算順序先運算x=1,所以變量x的值為1.0,然后運算y=x+3/2,此表達式中需先計算二個整數相除3/2,結果為整數1,然后再與x相加,結果為2.0。由于逗號表達式x=1y=x+3/2的值就是其最后一個表達式即y=x+3/2的值,此值即為2.0,所以正確的答案應該是C。

  復合語句

  復合語句就是用一對“{}”把若干語句括起來構成一個語句組,復合語句是C語言中最重要的一種語句,語句的形式如下:語句l;語句2;…;語句n

  一個復合語句在語法上視為一條語句,在復合語句中,花括號內的語句數量不限,可以有執行語句,也可以有定義部分,定義部分應該出現在可執行語句的前面,復合語句可以嵌套使用,例如:{語句1;{語句2;…;語句n;}}。

  復合語句還可以嵌套C語言中任何結構的控制語句,如if、switch、while、for等。使用好復合語句的要害是理解和把握變量的作用域。

  2002年春季考試中有一道填空題:
  下面程序的輸出結果是__________# include <stdio.h>
main
int a=3b=2c=1
c-=++b
b=a+c
int b=5c=12
c/=b2
a-=c
printf“%d%d%d”abc
a+=--c

printf“%d%d%d”abc  解析:本題程序中函數main的首部定義了3個整形變量a、b、c,按它們的初值,可計算執行復合語句之前c的值為-2,b的值為3。進入復合語句后,變量b、c被重新定義,并賦以初值,用戶可計算出復合語句中a、b、c的值分別是2、5、1,第一個printf語句輸出“251”(沒有引號,下同),最后執行復合語句中的最后一條語句,可以得到a的值為2。變量b、c在main首部及復合語句中均被說明,在復合語句中,說明b、c的作用域只限制在本復合語句中,所以執行復合語句之后的printf語句中的b、c的輸出值與復合語句中b、c的值無關,其值應該取復合語句之前的兩個賦值語句的計算結果,即b值為3,c值為-2,也就是說,第二個printf語句的輸出結果為“23-2”,所以正確答案為“25123-2”。

  指針與一維數組

  指針與一維數組是二級C語言的必考內容,甚至有時一次考試中會出現2到3個相關的題目,因此,把握這一類題型的解答技巧是十分重要的。一般情況下,題目總是先定義一個一維數組和一個指針變量,如“int a=12345p”,然后將數組a的首地址賦值給指針變量p,使指針p指向數組a的首地址,即“p=a”,這樣就完成了數組與指針之間指向關系的建立。這是該類題目在提出問題前必須做的一件事,也是考生解答此類問題需要了解的前提條件。注重:數組a的首地址有兩種表示方法,一是直接用數組名a表示,二是用數組的第一個元素a0的地址&a0表示,這兩種表示法是完全等價的。因此,上述表達式“p=a”也可寫成“p=&a0”。通過語句“p=a”在數組與指針之間建立了指向關系之后,接下來必須弄明白以下兩組等價關系:

  第一組等價關系:以下4種表示法是等價的,它們均表示下標為i的數組元素ai(本例中,i的取值范圍為0到4):

ai pia+ip+i

  第二組等價關系:以下4種表示法也是等價的,它們均表示下標為i的數組元素ai的地址值

&ai &pi a+i p+i

  數組名a和指針p在使用時是可以相互替代的,所以凡使用a的地方均可以p替代,反之亦然。這其中要注重以下事實:a是一個常量,它的值是不可改變的,而p是一個變量,它的值是可以改變的,這是它們之間的惟一區別。

  明白了以上等價關系之后,就可以解答大部分此類題目了。

  2002年春季考試中有一道選擇題:

  若有以下定義

int a10=12345678910p=a

  則值為3的表達式是

  A)p+=2p++ B)p+=2++p

  C)p+=3p++ D)p+=2++p  解析:該題考查的主要內容就是指針與一維數組,當然它還涉及到了指針的移動以及運算符++和之間的優先級問題。首先確定,值為3的數組元素是a2,因此也可用p2、a+2或p+2表示,但題目的4個選擇答案中都沒有出現,所以要再考慮其它途徑。注重到4個表達式均為逗號表達式,它們的值應該分別等于各自最后一個表達式的值。再看表達式p+=2的作用,在進行這一運算之前,指針p指向數組元素a0,表達式p+=2使指針p向后移動了2個存儲單元,也即運算后指針p指向了數組元素a2,同樣,經過p+=3的運算后,指針p將指向數組元素a3。現在看答案A,先經p+=2運算,使p指向a2,然后通過指針運算符引用表達式p++所指向的元素,我們知道,表達式p++的值就是p的值,所以p++的值就等于p的值,即a2的值3,它正符合題目要求,因此,A是正確答案。B表達式的值應該為4(先使p指向a3,然后通過p取值),C表達式的值應該為4(先使p指向a3,再通過p取值),D表達式的值也為4(先使p指向a2,再通過p取值,最后自增1)。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 饶阳县| 米林县| 海宁市| 宝鸡市| 南投市| 湛江市| 广饶县| 崇仁县| 深水埗区| 岢岚县| 民丰县| 肇庆市| 秭归县| 河北区| 富平县| 西吉县| 秦安县| 砚山县| 上思县| 佳木斯市| 洞口县| 嵊州市| 安多县| 黑河市| 洛川县| 玛沁县| 宿迁市| 津市市| 富平县| 贵州省| 深州市| 宝清县| 定陶县| 于都县| 大田县| 临西县| 镇平县| 甘肃省| 平阳县| 克什克腾旗| 哈密市|