C語言程序的基本構成_第1頁
C語言程序的基本構成_第2頁
C語言程序的基本構成_第3頁
C語言程序的基本構成_第4頁
C語言程序的基本構成_第5頁
已閱讀5頁,還剩90頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1

上機實驗中出現的問題一.編寫時候注意符號在英文格式下面輸入二.語句結束后“;”容易遺漏,但是也不能亂加,如while,if后面不能加”;”三.對于函數來說,基本格式:函數頭+一對{}四.scanf和printf函數2

第2章

C程序的基本構成32.1C語言源文件

C語言是結構化的程序設計語言,一個C源程序可以由一個或多個文件組成,C源程序文件的擴展名一般為.c

或.cpp,下面通過實例學習多文件系統中的函數調用。

說明:文件-是指存放在存儲器上以文件名進行管理的一組信息.

函數-指具有獨立功能、按一定格式構成的代碼段。

一個大型,典型的C語言源程序大致如下所示:4C語言源程序

源程序文件1

源程序文件n

源程序文件2…..

預處理命令

全局變量

聲明

函數1…..

函數n

函數首部

函數體

局部變量

聲明

執行語句5

文件包含的概念:一個文件可以將另一個源文件的全部內容包含進來,這叫文件包含處理。

當然文件包含予處理也可在特定的盤,特定的目錄(文件夾)中尋找包含文件.

如:#include“c:\myfolder\myfile.c”

文件包含的一般格式:

#include<文件名>

或者#include“文件名”

6#include“file2.C”file1.cA

在編譯時,將file2.c全部內容復制到#include“file2.c“的位置上,將file1.c作為一個源文件單位進行編譯。file1.c

BA+Bfile2.c包含7例2.1

在VisualC++環境下新建兩個文件,其文件名分別

為2_1_1.c、2_1_2.c,其中2_1_1.c文件定義一個做乘法的函數f(),定義另一個主調函數main().

在主調函數中分別調用函數f()以及存放在2_1_2.c中的函數disp(),在main函數中輸出f()的返回值。82_1_2.c文件disp()函數分析:

在文件2_1_1.c中由兩個函數構成,文件2_1_2.c由一個函數構成.

程序的執行從main()函數開始,main函數調用f()函數,然后再調用disp()函數。2_1_1.c文件f()函數main()函數#include“2_1_2.c調用調用910總結:

1.C程序是由函數組成,必須要包含一個主函數main().

函數之間可以相互調用.

因此,函數是C程序的基本單位。

(1).C用各種各樣的函數來完成某些特定功能。

(2).

C函數庫十分豐富,標準C提供一百多個函數.

被調函數可以是系統提供的庫函數,如:printf(),

scanf();也可以是根據需要自己編寫的函數,如:disp().112.一個C程序總是從main()函數開始執行,不管這

個main()在整個程序中處于什么位置。

main()函數可放在整個程序的最上頭,或最后,或

一些函數的中間.3.C程序書寫格式自由:一行內可以寫幾條語句.

一條語句可寫在多行上,行尾使用續行符:“\”.

*書寫程序時,一律使用英文標點符號.

12*C語言程序中區分大小寫。

*在程序中int、return、include叫保留字,在C語言

中有特定的含義,一般不作它用。*而disp、f、a、b等為用戶自定義標識符,通常為

了定義函數、變量所取的名字,取名要有一定的規

則。134.每條語句及變量定義的最后要有一個分號(;),

分號(;)是語句的必要組成部分。如:intx,y=7;c=a+b;

:變量定義必須放在函數的開頭部分,執行語句之前,

不能插入在語句當中.C++可放程序任何位置.5.C語言本身并沒有輸入,輸出語句.輸入,輸出的操

作是由庫函數,像printf(),scanf()函數來完成。

C語言對輸入、輸出實行“函數化”管理。142.2C函數函數是完成特定任務的獨立模塊,函數的使用最主要涉及到函數的定義與調用。

C程序是由一個或多個文件構成,而文件可由一個或多個函數組成.

如在前述的文件2_1_1.c中,由兩個函數main()、F()構成.

文件2_1_2.c由一個函數disp()構成。15一.函數的調用形式為:

函數名(

[參數]);

注:函數的原型:

函數返回值類型函數名(形式參數表);參數:

執行一個函數所必須提供的數據叫參數.16返回值類型函數名(形式參數聲明){

數據聲明部分語句部分

}二.

C函數定義的結構示意圖17

intadd(intx,inty)

{

intz;/*變量定義,給變量分配內存空間*/z=x+y;/*執行語句*/returnz;

}

18注:在C語言中,變量在使用前,一定要先定義:

指定變量的名字及類型,在編譯時給變量分配存儲空間。

例如:

intz;

指定變量的名字為z,及類型為int.(在編譯時給變量分配存儲空間)。19變量的定義

變量定義的一般形式:

類型名變量名表;注:

變量名按C語言的命名規則命名.

變量名一般用小寫字母,見名知義.例如:intx3,n;定義整型變量floaty2;定義單精度浮點型變量doublearea,length;

定義雙精度浮點型變量

多個變量用逗號(,)分開,最后加一分號(;).20

每一個變量有二個特性:

有一個名字和相應的類型,并在編譯時分配相應的內存單元。

該存儲單元的大小由變量的數據類型決定.

1.5x3變量名變量值存儲單元21C語言中的變量和代數中的變量含義不同.

數學中的變量代表未知數.

如在C語言中的式子:x=x+1在代數中沒有意義.但在C語言中,式子x=x+1表示把變量x中的值加1,然后再保存到x中.

這里的”=“是賦值運算符.

構成了一賦值表達式.x=x+1222.3C語句

C文件由函數構成,函數由語句構成,語句的結束符用“;”表示.

在例2.1中的文件2_1_1.c中的main函數,由5條語句構成,每條語句用“;”表示語句的結束。

intx=3,y=4,z;---變量定義語句.表示定義了x、y、z三個變量,并給x、y分別賦予一個最初的值3與4.intx=3,y=4,z;disp();z=f(x,y);printf("%d*%d=%d\n",x,y,z);disp();disp();---函數調用語句.表示調用函數disp().輸出:******************23

intx=3,y=4,z;

disp();z=f(x,y);printf("%d*%d=%d\n",x,y,z);disp();z=f(x,y);

表示調用函數f(),在調用函數f()時把實參x、y的值分別傳給形參a、b.

返回值最后賦給變量z.

printf(“%d*%d=%d\n”,x,y,z);表示調用系統函數printf輸出,其輸出形式為:3*4=12intf(inta,intb){intc;c=a*b;

returnc;}在被調函數f()中把a、b的乘積賦給變量c,然后函數f()把返回值c賦給main函數中的z。242.4保留字與標識符語句由保留字、標識符、運算符和表達式構成。2.4.1保留字保留字是指C語言中有特殊含義的名字,只能用于C語言中特定的場合。

例如:

int:

用于定義整型類型變量

float:

用于定義實型變量

double:

用于定義雙精度變量

char:

用于定義字符變量或字符串變量

25注意:保留字只能用于規定的場合,不能用作給變量取名或用戶自定義標識符。if:

用于判斷for:

用于循環while:

用于循環在C語言中其它的保留字見附錄C,其含義在以后的章節中陸續學到。262.4.2標識符

標識符簡單的理解就是給在程序中涉及的對象取的名字.

標識符分為系統命名的標識符與用戶自命名標識符,系統標識符通常用于系統函數的命名,如:

printf、strlen、scanf、fabs、malloc等。

用戶自命名標識符是用戶為命名變量或定義函數等而取的名字,通常用戶自定義標識符以字母、數字、下劃線組成,并以字母或下劃線開頭。27注意:

a_12、_12、ab12等都是正確命名的標識符。

12a、a/b等都是不正確的標識符。思考:是否可用:intif=5;

定義一個整型變量?為什么?282.5運算符在C程序中有極為豐富的運算符,例如:

賦值運算符、算術運算符、關系運算符、邏輯運算符、位運算符等。

運算符及其優先級請參閱附錄292.5.1算術運算符算術運算符有:加、減、乘、除、取余數,它們的表達方式及含義如下表所示。運算符含義例備注

+加5+2結果7-減5-2結果3*乘5*2結果10/除5/2結果2%求余5%2結果1只適用于整型數

++

自增

--

自減

30

算術運算符的優先級:運算符

+-*/%

相同相同低高311.關于除法運算符:/

兩個整數相除結果為整數:5/2結果25/3結果1

2.關于求余運算符:

%

%兩邊的操作數都應是整數.

5%2結果1

7%4結果3

除法運算符”“/“的運算結果跟兩個操作數的類型有關:(1).如果兩邊都是整形,結果必定為整形.(2).如果兩邊是其它類形,結果不是整形.323.C語言也規定了算術運算符的優選級和結合性。

在表達式求值時:*先按運算符的優先級別高低次序執行,如a-b*c,

*如果在一個運算對象兩側的運算符級別一樣,則按

“結合方向”處理。

算術運算符的結合方向是“自左至右”,即先左后右.又稱“左結合性”——

即運算對象先與左邊的運算符相結合。33

如:

a-b+c

,因此b先與減號結合,執行a-b的運算,再執行加+c的運算.

以后還將遇到“右結合性”的運算符,其結合方向為自

右至左。即運算對象與右邊運算符的相結合.

結合性是在別的高級語言中沒有的,是C特有的。請參閱附錄:

列出所有運算符的優先級和結合性。343、算術表達式

:算術表達式:

用算術運算符將運算對象連接起來的,符合C語言語法規則的式子.

什么是表達式?由常量,變量,各種運算符,函數和括號連接而成的,合符c語言語法規則的有意義的式子,稱為表達式。如:

a+23,t+sqrt(y),z=x+y,Pi*r*r35從廣義上來講,單個變量,單個常量也可看作表達式。

c具有眾多運算符,可以構成多種表達式:

賦值表達式,算術表達式、字符串表達式、

關系表達式,邏輯表達式.36算術表達式的書寫規則:

在數學表達式中省略的內容要寫上:

如:2x

要寫成2*x2r要寫成2**r

abca<=b&&b<=cs(s-a)(s-b)(s-c)要寫成

s*(s-a)*(s-b)*(s-c)

(5÷9)(F-32)

要寫成

(5/9)*(F-32)

x1+x2要寫成x1+x237

4.自增、自減運算符:

在算術運算符中,C語言又增加了兩個很有用的運

算符:

++

……

加1運算符(自增)

--

……

減1運算符(自減)作用:

使變量的值加1或減1。如;

++x;相當于x=x+1;

--x;相當于x=x-1;

38

增1,減1運算符可放在操作數之前,也可放在其后。如:

++i,--i變量使用之前,先使i

增1,減1.

i++,i--變量使用之后,再使i加1,減1設:i=3;

j=++i;(j的值為4)j=i++;(j的值為3,i的值為4)注意!39例:

main(){inta=100;printf(“%d\n”,++a);printf(“%d\n”,a++);printf(“%d\n”,a);}結果:

10110110240(2).結合方向是“自右至左”,即“右結合”.

如有:-i++

負號和“++”同一優先級,結合方向同為“自右而左”,即相當于-(i++).

注:(1).++,--運算符只能用于變量,不能用于常量與表

達式。

如:5++,(a+b)++都不合法.41思考:表達式y=1+x++

是否等同于x++,y=1+x

還是等同于

y=1+x,x++?42上機練習21:上機調試下列程序,總結余數的符號與什么相關。#include<stdio.h>intmain(){

printf("%d%d\n",5%2,-5%2);return0;}432:上機調試下列程序,分析程序輸出的結果。#include<stdio.h>intmain(){intx,y,z;

scanf("%d",&x);y=x++;z=++x;printf("y=%dz=%dx=%d\n",y,z,x);}&的含義是“取地址”的意思,函數的作用是:

從鍵盤輸入的兩個值,分別送到x所占地址的內存單元中去,也就是輸入x的值.

%d為輸入格式說明,d為十進制整數格式說明符。

現設給x輸入了一個5,問:y,z,x輸出各為多少?輸出:y=5,z=7,x=744

又:#include<stdio.h>intmain(){intx,y,z;

scanf("%d",&x);y=x--;z=--x;printf("y=%dz=%dx=%d\n",y,z,x);}

3:把前程序中的++都改為--,再次調試程序,觀察程序運行的結果。

現設給x輸入了一個5,問:y,z,x輸出各為多少?輸出:y=5,z=3,x=345

5.賦值運算符:=

在C中,把賦值符“=”也列為運算符之列,“=”執行賦值操作。如:y=23.3x=45.3+y*4執行過程如下:

變量=表達式注:

左邊必須是一個變量.

1.

首先計算表達式的值.

同時把其類型轉為左邊變量的類型.

2.把右邊表達式的值賦

給左邊的變量.46說明:1.如果在賦值運算中,賦值符兩側類型不一致,在賦值時要進行類型轉換。規則:

賦值符右邊的值轉變為賦值符左邊變量所屬的類型(系統自動轉換)。

例如:

a.將實型數據賦給整型變量時,小數部分自動丟失。

inti;i=8.56;(i為整型變量,

i的值就為8)47b.將整型數據賦給實型變量時,數值不變,但以浮點形

式存于內存。

如:floatf2;f2=28;

f2將以28.000000存于內存。

(單精度以6位有效數字存入,

雙精度有15位有效數字)48例:

若x是整型變量,表達式(x=10.0/4.0)的值是____

A.2.5B、2.0C、3D、2496、復合賦值運算符:(1).如果在賦值符‘=‘之前加上其它運算符,可構成

復合賦值運算符,如:

+=(相加賦值)

*=

(相乘賦值)

例如:

a+=

3相當于a=a+3x*=y+8相當于x=x*(y+8)x%=3相當于x=x%3

C采用這種形式,一是為了簡化程序,二是為了提高編譯效率。

凡是二目(二元)運算符,都可與賦值符組成復合賦值符.50

為了便于記憶,可以這樣理解:

設有

:a+=b又設a為變量,b為表達式

a+=b(“=”左邊部分,插入“=”右邊)

a=a+b(“=”左邊補上變量名)

如果b表達式是包含若干項的表達式,它相當于有括號:

x%=y+3x%=(y+3)x=x%(y+3)51(2).賦值表達式:

由賦值運算符將一個變量和一個表達式連接起來的式子稱為“賦值表達式”.

如:

“a=5*b”

就是一個賦值表達式,賦值表達式的值就是

被賦值的變量的值.

527、強制類型轉換運算符

如:(double)a2….(將a2變量強制轉換成double型)

(int)(x+y)...(將(x+y)的類型強制轉換int型)

一般形式為:(類型名)(表達式)說明:進行強制類型轉換時,得到一個所需的中間變量,

原來的變量類型不變。例:floatx1;inti;x1=13.6;i=(int)x1

;\*i的值為13*\53

類型轉換有二種方法:

a.系統自動進行.

b.強制進行.

強制類型轉換在函數調用時,當要求形參與實參的類型一致時使用。542.5.2關系運算符一、關系運算符與關系表達式:

關系運算符也就是一種比較大小的運算符。1.關系運算符及優先級:

<

(小于)

<=

(小于等于)

>

(大于)

>=

(大于等于)

==

(等于)低

!=

(不等于)

優先級相同(低)優先級相同(高)55

算術運算符:*,/,%

+,-

高關系運算符:<,<=,>,>=,==,!=

賦值運算符:=

復合賦值運算符:+=,%=,*=

運算符的優先級請見附錄B562.關系表達式:

用關系運算符將兩個表達式連起來的式子——關系表

達式。關系表達式由于是一種比較的操作,其結果是成

立,不成立的關系。

也即產生一個邏輯值

,“真”或“假”。

C語言中沒有設邏輯型數據.

C中用1代表邏輯真,0代表邏輯假。0~157

如:設:a=4,b=3,c=2;

則:(1).a>b的值為“真”,表達式的值為1.

(2).d=b>c/*d的值為1

.*/(3).e=a>b>c/*e的值為0.*/

/*因“>”運算符自左到右結合,先執行a>b,值為1,再執行1>c,值為0*/

(4).f=(a>b)+af的值為558思考:表達式y=6<10==1

它等同于

y=(6<10)==1

還是y=6<(10==1)?

算術運算符:*,/,%

+,-

關系運算符:<,<=,>,>=,

==,!=

賦值運算符:=

592.5.3邏輯運算符1.邏輯運算符及優先級:邏輯運算符是對邏輯量進行操作.共有三種:

!

……邏輯非(NOT)

(對操作數取反,如操作數為真,結果就為假.)

&&……邏輯與(AND)

(只有兩個操作數的值同時為真時,結果為真.)

||……邏輯或(OR)

(只要兩個操作數中的一個值為真時,結果就為真.)高

低60

邏輯運算符的功能

邏輯與:

&&

,

邏輯或:||,邏輯非:!真值表:

aba&&ba||b!a假假假假真假真假真真真假假真假真真真真假

&&,||是雙目(二元)運算符,!是單目(一元)運算符.61

優先級:

邏輯運算符:!

算術運算符:+,*

關系運算符:>,=<

邏輯運算符:&&,||

賦值運算符:=低62例:(a>b)&&(x>y)a>b&&x>y

(!a)||a>b!a||a>b2.邏輯表達式:

用邏輯運算符將關系表達式,或邏輯量連起來的式

子,叫邏輯表達式。邏輯表達式的值應該是一個邏輯量:真(1),假(0).63

但在判斷一個量是否為真或為假時,即以非0為真(包括負值),以0值為假.

這種表示方法法最先在C中使用,因為它使得編程顯示特別方便。說明

:

C語言在編譯時,給出邏輯運算結果時(如關系表

達式、邏輯表達式),如果是真,用數值1表示;

是假用0表示。64例:設a=4,b=5

那么:

!a的值為0(因為a的值為非0,認為是真)

a&&b的值為1.

a||b的值為1.4&&0||2的值為1(自左向右運算).可見:

(1).邏輯運算結果不是0,就是1.(2).參加邏輯運算的操作數可以是1,0(真,假),也可是

整數,也可以是任何類型的數據。系統最終是以:

0判斷為假,非0判斷為真.65例:求表達式的值:5>3&&2||8<4-!0①4-!0即:3得:5>3&&2||8<3②5>3結果為1;8<3結果為

0

得:1&&2||0

③1&&2結果為1

最后結果為1

注:

邏輯表達式求解自左向右,且一旦知道結果的真假

值,求值即停止。例.

若設:a=1,b=1,c=3,d=4,m,n原值為1,那么:(m=a>b)&&(n=c>d)

則m新值為0,n不再賦值。

661.判斷ch是否為小寫英文字母:

(ch>='a')&&(ch<='z')2.判斷ch是否為英文字母:(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')

熟練掌握關系運算符和邏輯運算符,可以巧妙地用一個邏輯表達式來表示一個復雜的條件。

67例:閏年的條件:a.能被4整除,但不能被100整除

b.能被400整除

設year為某一年份,year為閏年的表達式:((year%4==0&&year%100!=0)||year%400==0)

當上述邏輯表達式為1時,year這一年為閏年,當為0時,year這一年為非閏年。68例2.3

#include<stdio.h>intmain(){intx=20,y=3,z=0,a;a=x>y;printf("%d>%d=%d\n",x,y,a);

a=x/y;printf("%d/%d=%d\n",x,y,a);

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

….ch2_2_3.c輸出符號%時,需寫成:69…..

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

a=x!=y;printf("%d!=%d=%d\n",x,y,a);

a=x&&y;printf("%d&&%d=%d\n",x,y,a);

a=x||y;printf("%d||%d=%d\n",x,y,a);

a=!x>y;printf("!%d>%d=%d\n",x,y,a);}70注:由于%通常用于格式控制符中,當在printf中輸出符號%時,需寫成:

printf(“%d%%%d=%d\n”,x,y,a);,而不是:

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

說明:

在編譯新程序前要關閉前一程序的[工作空間]。

注意!71思考:1.寫出判斷x大于0并且小于10的表達式。

(x>0)&&(x<10)2.寫出判斷ch是大寫字母的的表達式。

3.寫出判斷ch是字母的表達式。

4.寫出整型數a、b、c能構成一個三角形的表達式。722.5.4位運算符位運算符的運算對象為二進制數.

運算符含義1.

~

按位取反例:

~1結果0~1010結果0101

2.

&

按位與

例:

1&1為1;1&0為01100&1010結果1000733.

|

按位或

例:

1|1為1;1|0為1;0|0為0.

1100|1010結果11104.

^

按位異或例:

1^1為0;0^0為0;1^0為1.1100&1010結果01107475

5.

<<

按位左移例:

0010<<1

左移1位結果01006.

>>

按位右移例:

0010>>1

右移1位

結果000176例2.4

從鍵盤輸入一個整型數,判斷此數轉化為二進制數后第2位是否為1。分析:假定此整數為12,轉化為二進制后為1100(你可以用windows中的計算器轉換).

判斷第2位是否為1,即此數只要與二進制數0100作“與”運算.

如結果不為0,即可判斷此數的二進制數的第2位不為0.第0位77數制與編碼二進制與八進制、十六進制之間相互轉換準備知識:①二進制與八進制的對應關系

②二進制與十六進制的對應關系不同數制之間的轉換0000010100111001011101110123456700000001001000110100010101100111012345671000100110101011110011011110111189ABCDEF78#include<stdio.h>intmain(){ intx,y; scanf("%d",&x); y=(x&4)!=0; printf("此數的二進制數的第2位為:%d\n",y);}

請讀者自行調試,如程序運行時分別輸入7、8,輸出是什么?為什么?ch2_2_4.c輸入12

(12)

1100

(4)

0100

792.6編輯C程序時應注意的問題1.C程序中區分大小寫字母,書寫格式自由,一行內可寫幾個語句。用“;”作為語句的結束標記。3.函數定義如:main()、#include<stdio.h>、#definePI3.14159不是語句,后面不能用“;”號。注釋用符號“/*”和“*/”來界定,“/”和“*”之間不可以有空格。一個好的程序應該有詳細的注釋。80

第2章

C程序的基本構成

結束81例:

執行下列程序段后,a值為____: inta,b; a=15;b=-1; a=a+b&&a;

A)15B)0C)1D)16例:寫出下列程序段的輸出結果:

floatx1,x2;x1=3/2;x2=x1/2;printf("%d,%.1f",(int)x1,x2);C).11,0.53/2的值為182練習與實踐一、選擇題1.()是構成C語言程序的基本單位。(A)函數 (B)過程(C)子程序 (D)文件832.在下述程序段中,()是錯誤的程序注釋方法(注:本例多個選擇)。(A)

#in/*包含*/clude<stdio.h>voidmain(){printf("Howareyou?\n");}(B)#include<stdio.h>voidmain(){inti=3;/*整型數*/}84(C)#include<stdio.h>voidmain(){intx/*初始化*/=10;/*打印*/printf("%d",x);}(D)#include<stdio.h>voidmain(){intx=10;printf("%d",x);/*打印x/*x=10*/的值*/}853.()是C語言提供的合法的數據類型關鍵字。(A)Float (B)signed(C)integer (D)Char4.以下選項中不合法的用戶標識符是(

溫馨提示

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

評論

0/150

提交評論