《計算機與信息技術(shù)II-C語言》課件-(1-2周)_第1頁
《計算機與信息技術(shù)II-C語言》課件-(1-2周)_第2頁
《計算機與信息技術(shù)II-C語言》課件-(1-2周)_第3頁
《計算機與信息技術(shù)II-C語言》課件-(1-2周)_第4頁
《計算機與信息技術(shù)II-C語言》課件-(1-2周)_第5頁
已閱讀5頁,還剩127頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

寧波工程學院電信學院公共計算機教學部C程序設計計算機與信息技術(shù)II課程性質(zhì):非計算機專業(yè)公共必修課

學時:64節(jié)(每周4節(jié)*16周)

學分:4學分總評成績=平時成績*30%+期末成績*70%

平時成績:

作業(yè)*30%+考勤*40%+上機成績*30%期末成績:即期末考試成績計算機與信息技術(shù)II

推薦參考書:[1]譚浩強.《C程序設計》(第四版).清華大學出版社,2012.[2](美)BrianW.Kernighan,Dennis

M.Ritchie.《C程序設計語言(第2版·新版)》.機械工業(yè)出版社,2004.[3]

(美)K.N.King.《C語言程序設計:現(xiàn)代方法(第2版)》.人民郵電出版社,2010.計算機與信息技術(shù)II第一章C程序開發(fā)基本知識

1.1

C語言的發(fā)展與特點

1.2程序設計的基本方法1.3算法的概念及其表示1.4C語言的基本結(jié)構(gòu)1.5應用程序的開發(fā)步驟和運行過程

下一章目錄習題

C語言是一門優(yōu)秀的程序設計語言C語言是在1973年由美國貝爾實驗室開發(fā)的。1983年,ANSI為C語言制定了新的標準,稱為ANSIC,并于1989年最終完成。目前使用較多的版本有ANSIC,BorlandC,TurboC,MicrosoftC/C++,VisualC++等。C語言的發(fā)展C語言是結(jié)構(gòu)化程序設計語言功能強大,具有豐富的數(shù)據(jù)類型及運算符。簡潔緊湊,使用方便靈活。C語言具有自我擴充能力C語言具有匯編語言的功能可移植性好C語言的特點程序的概念程序是計算機解決問題所需的一系列指令的集合。著名計算機科學家NikiklausWirth提出了“算法+數(shù)據(jù)結(jié)構(gòu)=程序”的公式

程序就是在數(shù)據(jù)的某些特定的表示方式和結(jié)構(gòu)的基礎上,對抽象算法的具體描述。1.2程序設計的基本方法程序=數(shù)據(jù)結(jié)構(gòu)+算法+程序設計方法+語言工具數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)的類型和數(shù)據(jù)的組織形式。算法是為解決一個問題而采用的方法和有限的步驟。程序設計方法確定語言和編程環(huán)境面向過程的程序設計所謂面向過程的程序設計,是指利用面向過程的語言工具(如Pascal、Fortran和C語言等)進行程序開發(fā)的各項活動?;舅枷耄喊岩粋€需要求解的復雜問題分為若干個模塊來處理,每個模塊處理一個子問題;設計時遵循自頂向下、逐步細化、模塊化設計和結(jié)構(gòu)化編碼的原則。優(yōu)點:編程簡單、結(jié)構(gòu)性強、可讀性好;遵循這種結(jié)構(gòu)的程序只有一個入口和一個出口。缺點:存在數(shù)據(jù)與程序模塊的分離和程序的可重用性差等問題。面向?qū)ο蟮某绦蛟O計ProgramDesigninCLanguage面向?qū)ο蟮某绦蛟O計將一些新的理念和結(jié)構(gòu)化程序設計中好的思想相融合,提供了一種全新的程序設計方法?;舅枷雽⒁粋€需要解決的問題分解為一系列實體(對象),然后圍繞這些對象建立數(shù)據(jù)和函數(shù);函數(shù)的功能決定了該對象的行為。規(guī)定一個對象的函數(shù)可以訪問另一對象的函數(shù),但一個對象的數(shù)據(jù)不能應用于另一對象的函數(shù)中。幾個基本概念:三類機制:類、對象、屬性、事件、方法封裝、繼承、多態(tài)1.3算法及其表示

算法的特性有窮性一個算法的操作步驟應當是有限的;確定性

算法中的每一個步驟應當有確定的意義,不能

有二義性;有效性算法中的每一個步驟應當正確、可行,并且能

有效地執(zhí)行;有零個或多個輸入

執(zhí)行算法時需要從外界獲取的信息;有一個或多個輸出

執(zhí)行算法后應當?shù)玫秸_的結(jié)果。算法舉例【例1.1】輸入三個數(shù),然后輸出其中最大的數(shù)。

(1)

輸入變量x,y,z的值

(2)

比較x和y,如果x>y,則x送max;

否則y送max。

(3)

比較max與z,如果z>max,則將z送max。

(4)

輸出max,max

即為最大數(shù)。算法對同一個問題,算法是不唯一的,例如:求和

1+2+3+……+100

(1)=(…(((1+2)+3)+4)+…+100

)(2)=(1+100)×50

一個好的算法應該是:正確、易讀、效率高。

算法的表示方法常用的算法描述方法有:

自然語言描述、偽代碼、流程圖、N-S圖、PAD圖等。

1.

自然語言就是用人們?nèi)粘J褂玫恼Z言來描述或表示算法的方法。英語和程序設計語言混合使用稱為偽代碼。

Begin

{算法開始}inputx,y,zifx>ythenmax=xelsemax=yifz>maxthenmax=zprintmaxend{算法結(jié)束}2.

用偽代碼表示算法用一些圖框和方向線表示算法的圖形表示法。特點:直觀形象,易于理解,便于檢查和交流。常用流程圖符號及含義如下:

起止框處理框判斷框輸入或輸出框流程線連接點3.

用流程圖表示算法流程圖:

【例1.1】對任意給定的三個整數(shù)x,y,z,求出其最大值。開始讀入x,y,zmaxxmaxzmaxyz>max?輸出max結(jié)束TFx>y?TF讀入x,y,zx>yFTmaxxmaxyTFz>maxmaxz打印max單元的值

例:對任意給定的三個整數(shù)x,y,z,求出其最大值。

4.

用N-S流程圖表示算法結(jié)構(gòu)化程序設計C語言是結(jié)構(gòu)化程序設計語言,有三種基本結(jié)構(gòu)。

順序結(jié)構(gòu)

選擇結(jié)構(gòu)

循環(huán)結(jié)構(gòu)

實踐證明,任何復雜的算法都可以用這三種基本結(jié)構(gòu)來描述。程序設計的目標在正確的前提下,其重要性排列次序依次為:可讀、可維護、可移植和高效。順序結(jié)構(gòu)

矩形框—

用于表示順序結(jié)構(gòu)。執(zhí)行時按語句的先后順序執(zhí)行。先執(zhí)行語句A,再執(zhí)行語句B。ABAB順序結(jié)構(gòu)的流程圖順序結(jié)構(gòu)的N-S圖選擇結(jié)構(gòu)(分支結(jié)構(gòu))根據(jù)條件的真或假選擇執(zhí)行不同的操作內(nèi)容。當條件成立執(zhí)行語句A,否則執(zhí)行語句B。條件ABTF條件T

FA

B選擇結(jié)構(gòu)的流程圖選擇結(jié)構(gòu)的N-S圖循環(huán)結(jié)構(gòu)(1)當型(while型循環(huán))當條件成立,執(zhí)行循環(huán)體,否則跳出循環(huán)體。

條件

語句塊條件語句塊TFL形框——用于表示循環(huán)結(jié)構(gòu)(2)直到型循環(huán)(do-while型循環(huán))首先執(zhí)行循環(huán)體,若條件不成立繼續(xù)執(zhí)行循環(huán)體,

直到條件成立為止。

語句塊

條件語句塊條件FT【例1.2】在屏幕上顯示一行文字“WelcometoC!”。#include<stdio.h>void

main()/*定義主函數(shù)*/

{

printf(“WelcometoC!\n”);}

程序運行結(jié)果:

WelcometoC!

函數(shù)(Function)C程序包含一個或多個函數(shù),其中必須有一個

main()圓括號指示一個函數(shù){}包含函數(shù)體,

}

表示

main函數(shù)結(jié)束printf(“Welcome

”);printf(“to

C!\n”);printf(“Welcome\nto\nC!\n”);程序運行結(jié)果:

WelcometoC!程序運行結(jié)果:WelcometoC!

注釋/*

文本

*/

或//

不被執(zhí)行以提高程序的可讀性

語句(Statement)必須以;結(jié)尾格式輸出函數(shù)printf()。調(diào)用標準函數(shù),顯示引號中的內(nèi)容。

#include<stdio.h>void

main(){inta,b,sum;//聲明部分,定義變量類型

a=123;b=456;//執(zhí)行部分,賦值語句

sum=a+b;//執(zhí)行部分,賦值語句

printf(“sum=%d\n”,sum);//執(zhí)行部分,輸出語句

}

程序運行結(jié)果:sum=579 賦初值計算輸出①②③④定義變量【例1.3】求兩個整數(shù)的和

函數(shù)體包括變量說明部分語句執(zhí)行部分//文件包含預處理命令

//將標準輸入輸出頭文件包含到源程序中預編譯命令void

main()主函數(shù){函數(shù)體開始聲明部分執(zhí)行部分}函數(shù)體結(jié)束

#include<stdio.h>

voidmain(){inta,b,c;

//定義變量類型

printf(“inputtwonumbers:\n”);//提示

scanf(“%d,%d”,

&a,

&b);

//輸入變量

c=max(a,b);

//調(diào)用求最大值的函數(shù)

printf(“max=%d\n”,c);

}

int

max(x,y)intx,y;

{intz;if(x>y)z=x;elsez=y;

return(z);}【例1.4】求兩個數(shù)中的較大值

程序由兩個函數(shù)組成:

main函數(shù)和max函數(shù)。

運行程序屏幕顯示提示信息;鍵盤輸入a、b的值;屏幕顯示c的值。inputtwonumbers:123,456↙max=456一個C程序由一個或多個函數(shù)組成,

其中必須有一個主函數(shù)main()。程序執(zhí)行時總是從主函數(shù)開始,main()可以置于程序的任何位置。程序中需有預處理命令(如#include<stdio.h>

),預處理命令通常放在程序的最前面。分號是C語句結(jié)束的標志,每個語句和數(shù)據(jù)定義后必須有一個分號。預處理命令、函數(shù)頭和花括號“}”之后不能加分號。

1.4.2

C語言程序基本結(jié)構(gòu)C程序書寫靈活,一行可以寫幾個語句,一個語句可以寫在多個程序行上。#include<stdio.h>voidmain(){inta,b,sum;

a=123;b=456;sum=a+b;

printf(“sum=%d\n”,sum);}C語言本身沒有輸入輸出語句,輸入輸出的操作是由庫函數(shù)scanf()和printf()等函數(shù)完成的。

1.4.2C語言程序基本結(jié)構(gòu)

C程序嚴格區(qū)分大小寫。一般變量、語句等用小寫字母書寫;符號常量等用大寫字母書寫。標識符、保留字之間必須至少加一個空格以示分隔。函數(shù)C語言的函數(shù)有兩種:

標準庫函數(shù)和用戶定義的函數(shù)。用戶自定義函數(shù),可有可無,數(shù)目不限。如例1.4中的int

max(intx,

inty)C語言提供的庫函數(shù),

如輸出函數(shù)printf()和輸入函數(shù)scanf()。

函數(shù)定義:

函數(shù)頭+函數(shù)體函數(shù)頭:

說明函數(shù)的類型、名字、參數(shù)及參數(shù)的類型。

intmax(intx,inty)#include<stdio.h>

voidmain(){inta,b,sum;

a=123;b=456;sum=a+b;

printf(“sum=%d\n”,sum);}函數(shù)體函數(shù)頭

函數(shù)體:

由“{}”括起,包括變量聲明和執(zhí)行部分。函數(shù)定義1.4.3C語言的字符集、關(guān)鍵字和標識符字符集:C語言允許使用字符的集合字符集的組成:26個小寫字母

abcdefghi......z26個大寫字母

ABCDEFG......Z

10個數(shù)字

0~9

其他符號

+-*/=,

._:

;?\”

’~|&^

!

%#()

[]{}<>空格(SPACE)

制表符(Tab)C語言的關(guān)鍵字關(guān)鍵字:C語言中預定的具有特定含義的詞,也稱

保留字。共有32個。分四類:類型說明:

int

,long,float,…。語句定義:

if…else,while,for…。存儲類:

auto,static,…。長度運算符:

sizeof標識符標識符:用來標識變量、符號常量、數(shù)組、函數(shù)的名字。組成:只能由英文字母、數(shù)字和下劃線組成。第一個字符不能是數(shù)字,只能是字母或下劃線。VC6.0中有效長度為1~255個字符。例如:

x,m1,average,k123,_1,…

5AN,WA-11,alot

,$11,π,β,α,…

×√注意:標識符嚴格區(qū)分大小寫例如:

ABC

,abc

是不同的標識符不能和C語言的關(guān)鍵字、用戶定義的函數(shù)名以及系統(tǒng)庫函數(shù)同名。C的“.h”頭文件中經(jīng)常使用以下劃線開頭的內(nèi)部變量名,因此用戶最好避免使用這類標識符。

取名應盡可能見名知意。如:alfa,aver,

pi,bata

等。例:

以下各標識符組中,合法的用戶標識符分別為:(1)A)

PAd

B)

scanf

C)voidD)4aP#Da10maxtemp(2)A)

b-b

B)

CCP

C)

hiy

D)

_isw

abc

float

<fr>

INT(3)A)

_0123

B)

del_word

C)

list

D)

keep%

ssiped

signed*jerwind√√√分隔符分隔符分隔符主要有逗號和空格兩種。逗號用于分隔變量或參數(shù),空格用于分隔單詞(在關(guān)鍵字和標識符之間必須用空格分隔)。例如:int

a,

b,

c;

max(x,y,z)1.5應用程序的開發(fā)過程

應用程序開發(fā)階段:分析解決問題的性質(zhì)、特點、目標以及數(shù)據(jù)來源及其特征等。需求分析確定解決問題的方法和步驟,建立數(shù)學模型和確定相應的求解方法。確定算法確定應用程序結(jié)構(gòu),設計出每個模塊的數(shù)據(jù)結(jié)構(gòu)和算法,畫出流程圖等。程序設計根據(jù)確定的算法,用計算機語言(如C語言)編寫源程序。編寫程序在一定的開發(fā)環(huán)境下調(diào)試和運行程序,得出程序運行結(jié)果。調(diào)試程序1.5應用程序的開發(fā)過程編輯編譯連接運行編輯器file.cfile.cpp編譯器file.obj連接器file.exeLibrariesCPU裝載程序RAM建立、修改、保存源文件生成目標文件生成可執(zhí)行文件運行可執(zhí)行文件1.5應用程序的開發(fā)過程在VisualC++6.0環(huán)境下,開發(fā)和運行C程序的步驟如下:1.

啟動VC“開始”→“程序”→“Microsoft

VisualC++6.0”

即可啟動VC6.0。

2.

編輯、建立源文件。

3.

編譯、連接和運行源程序。習題1.

一個C語言程序是由___組成

a)

主程序b)

子程序c)

函數(shù)d)

過程2.一個完整的C語言的程序

a)

至少包含一個主函數(shù)

b)

至少包含一個主函數(shù)與一個子函數(shù)

c)

必須由一個主函數(shù)與一個以上的子函數(shù)組成

d)

必須由一個主函數(shù)與一個子函數(shù)組成√√習題3.

C語言程序的執(zhí)行總是從___。

a)

main函數(shù)的入口開始

b)

編譯預處理命令開始

c)

源程序的第一個函數(shù)開始

d)

源程序的第一行語句開始√習題4.在C語言的源程序中,主函數(shù)的位置__。

a)

必須在源程序的最后

b)

任意

c)

必須在源程序的開頭5.一個函數(shù)一般由兩部分組成,它們分別是__和__。6.函數(shù)體使用_____符號開始,使用_____符號結(jié)束?!毯瘮?shù)頭函數(shù)體{

}習題7.C程序的每條語句的結(jié)束標志是_____符號。8.在C程序中,注釋以____符號開始,使用____符號結(jié)束。9.算法是__________________________。10.表示算法的常用方法有_____、_____、_____等。11.結(jié)構(gòu)化程序的三種基本結(jié)構(gòu)是_____、______、______。

;

/**/解決某一問題所采取的方法和步驟自然語言流程圖偽代碼順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)12.判斷下述說法是否正確。如不正確,說明理由。a)printf

函數(shù)總是從新行的起始位置開始打印。b)計算機會把/*和*/之間的注釋文本打印到屏幕上。c)

所有的變量在使用前都必須予以聲明。d)C語言認為變量number

和NuMbEr

是相同的。e)

聲明語句可放在函數(shù)體中的任何位置。f)

打印三行輸出的C語言程序必須用三條printf

語句。g)

printf

函數(shù)的格式控制串中使用轉(zhuǎn)義字符\n會把光標定位到屏幕上下一行的開始位置?!獭痢痢痢痢痢獭?.1數(shù)據(jù)與數(shù)據(jù)類型§2.2常量、變量和標準函數(shù)§2.3基本運算符及其表達式第二章數(shù)據(jù)類型、運算符和表達式下一章上一章目錄習題

整型:包括有、無符號的基本整型、短整型、長整型實型:包括單精度實型、雙精度實型

float,double字符型:用于表示和存儲ASCII字符。char

2.1數(shù)據(jù)類型基本類型構(gòu)造類型指針類型空類型自定義是C語言數(shù)據(jù)類型的基本型,其值不可再分解為其他類型。一種特殊的數(shù)據(jù)類型,其值為某個量的內(nèi)存地址。一種無返回值函數(shù)的數(shù)據(jù)類型。void用新的類型名替代已有類型名使用。用typedef定義一種由單種或多種數(shù)據(jù)類型構(gòu)造而成的數(shù)據(jù)類型。數(shù)組結(jié)構(gòu)共用體枚舉類型C語言的基本數(shù)據(jù)類型

2.2常量、變量和標準函數(shù)2.2.1

常量

2.2.2變量

2.2.3標準函數(shù)

下一節(jié)第二章目錄習題

2.2.1常量常量在程序執(zhí)行期間其值保持不變的量C語言有以下幾種類型的常量:整型常量實型(浮點型)常量字符常量字符串常量

1.整型常量有三種形式:十進制整數(shù):八進制整數(shù):由數(shù)字0

開頭十六進制整數(shù):由前綴0x

0X

開頭如:

014-0110177777如:0x110XAFBDE

√0X00FFH

如:

11,-13,0,

65535,

√1,000

21/3

104

54.10*3

0199××整數(shù)又可分為:長整型整數(shù):用后綴L/l表示。

012L,65536L,0XCL無符號整數(shù):用后綴U/u表示。

017u,

0xfdbU無符號長整數(shù):

用后綴UL/ul

表示。

15uL

2.

實型常量——浮點數(shù)實型常量又稱實數(shù),指帶有小數(shù)部分的數(shù)。C語言中的實數(shù)是以十進制表示的,有兩種表示形式:十進制小數(shù)形式:

由數(shù)字、數(shù)符和小數(shù)點組成。例:

0.123,

.123,123.

,0.0,-2.5,…

指數(shù)形式:

又稱科學記數(shù)法。用E(或e)表示以10為底的指數(shù)。

如:100000000→1×108→1E+80.0000125→1.25×10-5→1.25E-05

0.91×10-3

0.91E-03尾數(shù)部分指數(shù)部分字母E/e前必須有數(shù)字,而E后面的階碼必須為整數(shù)。

例:

下列不合法的指數(shù)形式:①單獨的小數(shù)點和單獨的指數(shù)部分

如:.E-5E10

②階碼只能是整數(shù),不能帶小數(shù)點。

如:1234E1.5

2.E

6.5e

(2*3)E-3

5*E4③1012不能寫成E12,必須寫成:1E121.0E123.字符常量字符常量:是用單引號括起來的一個字符

如:‘a(chǎn)’,‘A’,‘9’,‘+’,‘?’,‘’

合法

“a”,‘99999’,‘’

非法在內(nèi)存中,

字符常量以ASCII碼存儲,一個字符占一個字節(jié)。由于字符常量是按整數(shù)存儲的,可以像整數(shù)一樣在程序中參與相關(guān)的運算。如:

‘a(chǎn)’-32;

//

執(zhí)行結(jié)果97-32=65

‘9’-9;

//執(zhí)行結(jié)果57-9=48以“\”開頭的字符序列,有特定的含義。如:‘\\’

表示輸出一個反斜杠符

‘\”’

表示輸出一個雙引號

\ddd

(ddd表示八進制的ASCII碼)

\xhh

(hh表示十六進制的ASCII碼)例:

‘\n’(回車換行)→‘\12’→

‘\xa’

‘A’→‘\101’

‘\x41’注:

‘\0’或‘\000’是代表ASCII碼為0的字符,即空字符(NULL),

表示整數(shù)0。轉(zhuǎn)義字符【例2.1】轉(zhuǎn)義字符的應用

#include

<stdio.h>

void

main()

{

printf(“a\tb\nc\bd\100\x40\n”);

}

abd@@輸出到顯示屏4.

字符串常量字符串常量:用一對雙引號括起的字符序列。例:

“CHINA”,“a”,“$12.5”,“”,

“w\x53\\\np\103q”

字符串長度:字符串中所有字符的個數(shù)系統(tǒng)自動在每個字符串的末尾加上一個空字符NULL,即’\0’

作為字符串的結(jié)束?!痋0’是一個ASCII碼為0的字符。例:“CHINA”在內(nèi)存中所占的字節(jié)為:字符串常量和字符常量的主要區(qū)別:字符常量由單引號括起來,字符串常量由雙引號括起來。

字符常量只能是單個字符,字符串常量可以含有多個字符。字符常量占一個字節(jié),字符串常量占的字節(jié)數(shù)等于字符個數(shù)加1。比較:’A’與”A”的區(qū)別若輸出的字符串中含雙引號(”),則要使用轉(zhuǎn)義字符(\”)。例:printf(“hesaid

\“

Iamastudent.\”\n”);輸出:

hesaid“Iamastudent.”‘A’A占一個字節(jié)“A”A占兩個字節(jié)\05.符號常量

符號常量:用標識符表示的常量格式:

#define

標識符常量功能:用該標識符代表后面的常量值例:

#define

PI3.1415926

#define

STAR

‘*’預處理命令#define也稱為宏定義,一個#define命令只能定義一個符號常量,

用一行書寫,

不用分號結(jié)尾。

#include

<stdio.h>

#define

PI

3.1415926

//用預處理命令定義符號常量

voidmain(){floatr,

area,

l

;//定義變量類型為實型

scanf(“%f”,

&r);//輸入r的值

area=PI*r*r;

l=2*PI*r;

printf(“area=%f\nl=%f\n”,

area,

l

);}【例2.2】求半徑為r的圓面積和圓周長5.符號常量

說明:符號常量名習慣用大寫字母表示該命令通常放在文件頭在程序中,符號常量不允許重新賦值。例:#define

PI

3.1415926

PI=5.6;

×

或scanf(“%f

”,

&PI);×2.2.2變量變量概述整型變量實型變量

字符型變量

變量的初始化

int

x=23;23FF022BytesRAM變量概述變量:在程序執(zhí)行期間其值可以改變的量變量在使用之前必須被聲明每一個變量有名字,類型,長度和值。對變量賦值過程是“覆蓋”過程,用新值去替換舊值。從內(nèi)存中讀出變量的值,該變量保持不變。90x=90;printf(“%d”,x);變量概述定義變量的形式:

類型說明符變量名表;

例:

inta,b;/*定義兩個整型變量a和b*/charc;/*定義字符型變量c*/floatf1,f2;

//定義單精度實型變量f1和f2變量類型(type)變量名(name)是一個標識符1.整型變量─用來存放整型數(shù)據(jù)的變量整型變量的分類表類型名稱類型說明符字節(jié)數(shù)數(shù)值范圍基本整型int2-32768~32767短整型short[int]2-32768~32767長整型long[int]4-2147483648~2147483647無符號基本整型unsigned[int]20~65535無符號短整型unsignedshort

[int]20~65535無符號長整型unsignedlong[int]40~4294967295與操作系統(tǒng)、編譯系統(tǒng)、機器字長有關(guān)。有符號的整數(shù)─最高位是符號位正整數(shù)在內(nèi)存中以二進制原碼形式存放。負整數(shù)在內(nèi)存中以二進制補碼的形式存放。有符號正整數(shù)10

0000000000001010符號位0000000000001010RAM有符號負整數(shù)-101111111111110110符號位1111111111110110RAM-10的原碼100000000000101011111111111101011111111111110110按位取反加1后得到-10的補碼無符號整數(shù)無符號整數(shù)的所有二進制位全部用來存放數(shù)值,不能存放負數(shù)。

無符號整數(shù)65535u11111111111111111111111111111111RAM

例:求50的三次方#include

<stdio.h>voidmain(){shortint

x;

x=50*50*50;

printf(“%d\n”,

x

);}程序運行結(jié)果為:

-6072(錯)將以上程序改為:#include<stdio.h>voidmain(){

intx

;

x=50*50*50

;

printf(“%d\n”,

x);}運行結(jié)果:125000因此,在定義整型變量時,要注意數(shù)據(jù)類型允許的數(shù)值范圍。

2.實型變量用來存放實型數(shù)據(jù)的變量分單精度型、雙精度型和長雙精度型三類【例2.3】實型變量的使用#include<stdio.h>voidmain(){floatf;//f為單精度實型變量

doubled;//d為雙精度實型變量

f=33333.33333;

d=33333333333333.333333;

printf(“f=%f\nd=%f\n”,f,d);

}輸出結(jié)果:

f=33333.332031

d=33333333333333.332000無效數(shù)字f;3.字符變量用來存放字符常量的變量例:

char

c1,

c2,

c3

;

c1=‘A’;

c2=‘\n’;

c3=97;

每個字符變量分配一個字節(jié)用于存放一個字符。

(存放的是字符的ASCII碼值)字符數(shù)據(jù)與整型數(shù)據(jù)可相互賦值,直接運算??梢园炎址兞堪凑土枯敵?也允許把整型量按字符量輸出?!瓵’的ASCII碼(值)為65‘\n’的ASCII碼(值)為100100000100001010c1c2【例2.4】字符型變量的使用

#include

<stdio.h>

voidmain(){int

a=‘b’;

//給一個整型變量賦一個字符值

char

c1=97;

//給一個字符變量賦一個整數(shù)值

c1=c1-32;//將小寫字母轉(zhuǎn)換為大寫字母

printf(“%d

%d\n”,

a,

c1);

printf(“%c%c\n”,

a,

c1);}輸出結(jié)果:

9865bA注意:只能將一個字符常數(shù)賦給一個字符變量,不能把一個字符串常量賦予字符變量。

例:

char

c=“abc”;

在C語言中沒有字符串變量

(但可以用一個字符數(shù)組來存放一個字符串常量)×4.變量的初始化在說明變量的同時給變量賦初值格式:

類型說明符變量=常數(shù);例:

int

a=5;

//定義并初始化

char

c1=‘a(chǎn)’,

c2=‘B’;

doublearea,r=23.e-2

;

int

x=10,

y=10,z=10

;

//不能寫成intx=y=z=10;inta;a=5;

//賦初值2.2.3標準函數(shù)

C編譯系統(tǒng)提供的庫函數(shù)包括:輸入輸出函數(shù)、數(shù)學函數(shù)、字符和字符串函數(shù)等。數(shù)學函數(shù)x為弧度,doublex,doublesin(x)cos(x)sin(x)

cos(x)exp(x)log(x)log10(x)fabs(x)pow(x,y)sqrt(x)area=√s(s-a)(s-b)(s-c),s=(a+b+c)/2#include<stdio.h>

#include<math.h>

【例2.5】求三角形面積//預編譯命令,將系統(tǒng)提供的數(shù)學函數(shù)//作為頭文件包含到用戶源文件中voidmain(){doublea,b,c,s,area;

scanf(“%lf,%lf,%lf”,

&a,&b,&c);s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));

printf(“theareais%6.2f\n”,area);}運行本節(jié)介紹算術(shù)運算符賦值運算符逗號運算符邏輯運算符條件運算符求字節(jié)運算符位邏輯運算符位移動運算符位自反運算符強制類型轉(zhuǎn)換運算符指針運算符下標運算符分量運算符基本運算符位運算符特殊運算符C運算符2.3運算符和表達式2.3基本運算符及其表達式2.3.1

算術(shù)運算符與算術(shù)表達式2.3.2

不同數(shù)據(jù)類型的轉(zhuǎn)換與運算

2.3.3

關(guān)系運算符與關(guān)系表達式2.3.4

邏輯運算符與邏輯表達式2.3.5

條件運算符與條件表達式2.3.6

賦值運算符與賦值表達式

2.3.7

逗號運算符與逗號表達式1.基本算術(shù)運算符算術(shù)運算符用于各類數(shù)值運算。包括基本算術(shù)運算符、自增運算符、自減運算符。下表為基本算術(shù)運算符。

1在C語言中,規(guī)定了運算符的優(yōu)先級和結(jié)合性。優(yōu)先級:

C語言中,運算符的優(yōu)先級共分為15級。1級最高,15級最低。表達式求值時,先做優(yōu)先級高的操作。如:

d=a+b*c;

當運算符的優(yōu)先級別相同時,運算次序由結(jié)合性決定。結(jié)合性:

左結(jié)合性(先左后右)例:

d=3*5/4;

右結(jié)合性(先右后左)例:

d=a=3;

/運算符①整數(shù)相除截去余數(shù),此運算為整除。

5/2=2(≠2.5)1/3+1/3+1/3=0②

對于浮點數(shù)則為通常意義的除法

5.0/2.0=2.51./3+1./3+1./3=1%模運算符用于計算兩個數(shù)相除后得到的余數(shù)。如:

a%b

求a除以b以后得到的余數(shù)。運算對象只能是整型量,其結(jié)果也是整型量。

如:

5%2=13%3=03%5=3

‘A’%2=13.0+10.0%5

所得結(jié)果的符號與運算符左側(cè)操作數(shù)的符號相同×-5%2=-15%-2=12.自增、自減運算符含義運算符優(yōu)先級結(jié)合性功能自增++2右結(jié)合使變量的值增1自減--2右結(jié)合使變量的值減1使用形式++i或--i

變量i先自增或自減1,再引用i。i++或i--

先使用變量i,再自增或自減1。

例:

x=10;y=++x

;

此時,y=11若:x=10;y=x++

;

則y=10

在這兩種情況下,x都被置為11。例:K=3;j=5;i=3;m=(++k)*j;n=(i++)*j;m=k=204n=i=154【例2.7】自增、自減運算符的使用。#include<stdio.h>voidmain(){inti=6,a,b;

printf(“%d\n”,

++i

);

printf(“%d\n”,

i++

);a=--i;

printf(“%d\n”,a);b=i--;

printf(“%d\n”,b);

printf(“%d\n”,

-i++);

printf(“i=%d\n”,i);}i=?7777-67注意:自增、自減運算只能用于變量,不能用于常量和表達式。例:

i++

為合法的運算

++6,++(a+b)

為非法的運算自增、自減運算符是兩個+或兩個-的一個整體,中間不能有空格。如果有多于兩個+或兩個-連寫的情況,則編譯首先識別前兩個+或-為增量或減量運算符。表達式x+++y

等價于(x++)+y自增、自減運算符的運算順序是右結(jié)合,因此對-i++應理解為:-(i++),而(-i)++是非法的。

例:

i=3;

printf(“%d”,-i++);

輸出:-3【例2.8】自增、自減運算符的使用#include

<stdio.h>

voidmain(){inti,j,

k

;

i=1;

j=1;

k=i+++j

;

printf(“i=%d,j=%d,k=%d\n”,i,j,k);}程序運行結(jié)果:i=2,j=1,k=2k=(i++)+j;由算術(shù)運算符和括號將運算對象(如常量、變量、函數(shù)等)連接起來的一個有值的式子。例:

‘A’*2-sqrt(4.)/-d

(d=2)表達式求值的優(yōu)先次序:

()函數(shù)

+、-*、/、%+、-

高低

3.算術(shù)表達式①“/”號,如:→(a+b)/(c+d)②“*”不能省略,如:2(a+b)

→2*(a+b)

③括號只能使用圓括號,且成對出現(xiàn),不能使用[]

和{}。如:

a[x+b(y+c)]→

a*(x+b*(y+c))

書寫問題:⑴LN(-X)→例:

將下列數(shù)學式子寫成C算術(shù)表達式log(sqrt(a+x*x

)-x

)⑵

│a│e-st

→abs(a)*exp(-s*t)⑶

→sqrt(fabs(sin(x*3.14/180)))⑷

xy

→pow(x,

y)A>3*x^n/(2*x-1)B>3*x**n/(2*x-1)C>3*pow(x,n

)*(1/(2*x-1))D>3*pow(n,x)/(2*x-1)例:與數(shù)學式子3乘以x的n次方除以(2x-1)對應的C語言表達式是____?!?.3.2不同數(shù)據(jù)類型間的轉(zhuǎn)換與運算在C程序中,當不同類型的量進行運算時,要轉(zhuǎn)換成同一種類型然后再進行運算。例:

10+‘a(chǎn)’+1.5-8765.1234*‘b’轉(zhuǎn)換方式:

自動轉(zhuǎn)換:數(shù)據(jù)類型自動由低級向高級轉(zhuǎn)換。強制轉(zhuǎn)換:將表達式的運算結(jié)果強制轉(zhuǎn)換成指定的數(shù)據(jù)類型。自動類型轉(zhuǎn)換這種類型轉(zhuǎn)換由編譯系統(tǒng)自動完成轉(zhuǎn)換規(guī)則:floatdoublelongunsignedintcharshort低高說明:1.橫向的箭頭表示必定的轉(zhuǎn)換。2.縱向的箭頭表示當運算對象類型不同時轉(zhuǎn)換的方向。

例:floatf=3.5;

intn=6;longk=21;doubless=f*n+k/2;強制類型轉(zhuǎn)換

格式:

(數(shù)據(jù)類型說明符)(表達式)注意:強制轉(zhuǎn)換屬單目運算,運算優(yōu)先級為2。強制轉(zhuǎn)換得到的是中間結(jié)果類型,原變量類型不變。數(shù)據(jù)類型說明符和表達式都必須加括號(單個變量除外)例:intx,y;floatz;

(float)(x+y)

;

(int)z+x

;

(float)(5%3);

(將5%3的值轉(zhuǎn)換為float型)【例2.12】強制類型轉(zhuǎn)換的應用#include<stdio.h>voidmain(){int

x=8;

float

f=6.85;

printf(“(float)x=%f,x=%d\n”,(float)x,x

);

printf(“(int)f=%d,f=%f\n”,(int)f

,f

);}(float)x=8.000000,x=8(int)f=6,f=6.850000X,f的類型并未改變2,%4,f

);2.3.3關(guān)系運算(比較運算)即比較兩個量的大小,比較的結(jié)果為“真”或“假”。例:a>3

如果a=8,則結(jié)果為“真”;如果a=1,則結(jié)果為“假”。1.關(guān)系運算符含義運算符優(yōu)先級結(jié)合性小于<6左結(jié)合小于等于<=大于>大于等于>=等于==7不等于!=2.

關(guān)系表達式用關(guān)系運算符將兩個表達式連接起來的式子。格式:

<表達式1><關(guān)系運算符><表達式2>

其中:表達式1和表達式2可以是任意表達式。

例:

m+n<=20,測試此關(guān)系是否成立,成立為真,不成立為假。成立——關(guān)系表達式的值為1;不成立——關(guān)系表達式的值為0。例:

5>(4<5)

‘a(chǎn)’>‘b’+3

(a=4)>=(b=6)5>2>7>8000值為:

1例2.13讀程#include<stdio.h>voidmain(){int

a,b,c;

a=b=c=10;

a=b==c;

printf

(“%d,%d,%d\n”,

a

,b,c);

a==(b=c++*2

);

printf

(

“%d,%d,%d\n”,

a

,b,c);

a=b>c>=100

;

printf

(

“%d,%d,%d\n”,

a,b,c);

}輸出結(jié)果:1,10,101,20,110,20,11關(guān)系運算的不足關(guān)系表達式只能表達簡單的關(guān)系,如:

sum>=1500y!=z

即只能對一個條件進行測試。

而以下關(guān)系:

0<x<5

則不能用關(guān)系表達式表示。

x>0&&x<52.3.4邏輯運算符與邏輯表達式含義運算符優(yōu)先級結(jié)合性邏輯非!2右結(jié)合邏輯與&&11左結(jié)合邏輯或||12左結(jié)合1.邏輯運算符

C邏輯運算符邏輯運算真值表a!a1001aba&&b111100010000aba||b111101011000特點:

全真為真,

其余為假。

特點:全假為假,

其余為真。邏輯非!邏輯與&&邏輯或‖2.邏輯表達式用邏輯運算符將表達式連接起來的式子。形式:[<表達式1>]<邏輯運算符><表達式2>

表達式1和表達式2可以是任何表達式如:

5>3&&2||4-!’a’邏輯表達式的值整數(shù)1:true

0:false判斷時,0代表“假”,非0即表示“真”。將下面的條件用C語言的邏輯表達式表示例1:1≤x≤10且x≠7

x>=1&&x<=10&&x!=7例2:y能被4整除,但不能被100整除或y能被400整除。

y%4==0&&y%100!=0||y%400==0運算順序:

()→!→算術(shù)運算→關(guān)系運算→&&→||→賦值運算例:若

a=2,b=‘a(chǎn)’,c=5,f=3.0c>3&&8<4-!0f/3&&a-b

!(b-‘a(chǎn)’

)

(a=7)>6&&(b=-1)>60110邏輯與和邏輯或運算符具有短路能力邏輯與:

(表達式1)

&&

(表達式2)

&&

只有表達式1的值為“真”時才求表達式2的值

如:x=y=-1;

++x&&++y;

/*x=?y=?*/0-1短路表達式邏輯或:

(表達式1)

||

(表達式2)

||…

只有表達式1為假時才判斷表達式2的值

例:

voidmain(){int

num=3;5>4||(num=0);

printf(“num=%d\n”,num);}

輸出:

num=32.3.5條件運算符與條件表達式條件運算符:

?:

三目運算符、右結(jié)合、13級。條件表達式:

<表達式1>?<表達式2>:<表達式3>執(zhí)行過程:

例:

max=(a>b)?a∶b;

max=a>b?a∶b

;說明:在程序中常把條件表達式的值賦給某個變量,

如:

①將ch中字母轉(zhuǎn)換為小寫字母

char

ch=getchar();

ch=(ch>=‘A’&&ch<=‘Z’)?(ch+32):ch

;

②將x

的絕對值賦給y

y=x>=0

?

x

:-x

;說明:在條件表達式中,各表達式的類型可以不同,此時,條件表達式值的類型為表達式2和表達式3中較高的類型。

如:

x>y

?1∶1.5

條件表達式的值為浮點型說明:條件運算符可以嵌套,這種嵌套是右結(jié)合的。

例:

inta=15,b=20,c=25,d=30,e;

e=a>b?c:c>d?b:d;()e=30例2.15讀程,寫出運行結(jié)果。#include<stdio.h>voidmain(){int

a=1,

b=1,

c=1;

a=a+b

;

b=b+c

;

c=c+a

;

printf(“(1)%d\n”,a>b?a

:b

);

printf(“(2)%d\n”,

a>c?a--:c++);

(a>=b>=c)?printf(“a\n”):printf(“b\n”);

printf(“(4)%d,

%d,

%d\n”,a,b,c

);}運行結(jié)果:(1)2(2)3b(4)2,2,4例2.16:任意輸入三個數(shù),輸出最大值。#include<stdio.h>voidmain(){int

a,b,c,max

;

scanf(“%d%d%d”,

&a,

&b,

&c);

max=a>=b?

a>=c?a

:c:

b>=c?b:c;

printf(“最大數(shù)為:%d\n”,max);}程序運行如下:

25-748↙

最大數(shù)為:48

(())2.3.6賦值運算符和賦值表達式賦值運算符分兩種:簡單賦值運算符:

=復合賦值運算符:如+=、-=、*=、/=、%=

等優(yōu)先級14,右結(jié)合性。賦值表達式:由賦值運算符連接起來式子作用:將表達式的值賦給變量

1.簡單賦值運算符和賦值表達式簡單賦值運算符為“=”

;由“=”連接的式子為(簡單)賦值表達式。格式:<變量>

=

<表達式>

作用:把右邊表達式的值,賦給左邊的變量。例:k=i+++--j

(i=2,j=3,k的值為)x=(a=5)+(b=8)

(x的值為)

d=e=2.1執(zhí)行順序是:先計算,再賦值。413例:

指出下列賦值表達式的錯誤

-s=x+y⑵5=n⑶a=a*3=2

⑷w=3.64E2.1/5.87⑸cos(β)=a/sqrt(a*a+b*b)

⑹y=int(i)⑺k=12.3%4⑻a=a+7;

賦值運算的類型轉(zhuǎn)換,規(guī)則為:實型數(shù)據(jù)賦給整型變量時,只取整數(shù)部分。

如:int

i=1.5*2/2;

(x的值為0.000000)

整型數(shù)據(jù)賦給實型變量時,以浮點形式取值。(i值為1

)如:

floatx=1/4+1/4+1/4;字符型數(shù)據(jù)賦給整型變量時,

整型變量的高位補的數(shù)與char的最高位相同,低八位為字符的ASCII碼值。整型數(shù)據(jù)賦給字符型時,只把低8位賦給字符變量。如:

K=‘A’

(k值為65)k:

00000000

01000001例2-13:void

main(){short

intx=300;

chary;y=x;

printf(“y=%dy=%c\n”,y,y);}

輸出結(jié)果:

y=44y=,x:

0000000100101100y2.復合賦值符及表達式復合賦值運算符是在簡單賦值運算符前加雙目運算符構(gòu)成。

共10種:+=,-=

*=、/=、%=

等。例:

溫馨提示

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

評論

0/150

提交評論