版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1程序設(shè)計:求解問題的方法和步驟—算法語言:是用于表達(dá)和描述的工具。程序設(shè)計語言:表達(dá)和描述求解問題方法和步驟的工具(對加工數(shù)據(jù)的描述、對加工步驟的描述)。2提綱標(biāo)識符 數(shù)據(jù)類型 變量常量輸入和輸出表達(dá)式語句函數(shù)本章向大家介紹結(jié)構(gòu)化程序設(shè)計語言的基本概念3數(shù)據(jù)總線
控制路線
輸入設(shè)備輸出設(shè)備存儲器中央處理器(CPU)運(yùn)算部件控制部件地址總線
實例:編一個程序,從鍵盤讀入兩個整數(shù),要求在屏幕上輸出相乘運(yùn)算結(jié)果。處理步驟:1.控制部件發(fā)命令從鍵盤讀取數(shù)據(jù)并存儲到內(nèi)存儲器中(輸入)。2.控制部件發(fā)命令從內(nèi)存儲器中取出這兩個數(shù)置入運(yùn)算部件的寄存器中,讓運(yùn)算器執(zhí)行加法運(yùn)算,運(yùn)算結(jié)果寫回存儲器中(處理)。3.控制部件發(fā)命令將存儲在內(nèi)存儲器中的結(jié)果輸出到顯示器上(輸出)。需要考慮的問題:1.輸入:如何從鍵盤讀取這兩個數(shù)并將其存放到內(nèi)存中?程序如何約束輸入的必須是整數(shù)?2.處理:計算時如何讀取內(nèi)存中的這兩個數(shù)?如何實現(xiàn)計算?計算結(jié)果如何寫回內(nèi)存?3.輸出:如何將內(nèi)存中的計算結(jié)果輸出到顯示器?4數(shù)據(jù)總線
控制路線
輸入設(shè)備輸出設(shè)備存儲器中央處理器(CPU)運(yùn)算部件控制部件內(nèi)存中數(shù)據(jù)的存取:變量數(shù)據(jù)類型輸入:輸入語句輸出:輸出語句地址總線
計算的實現(xiàn):運(yùn)算符表達(dá)式語句函數(shù)程序控制流程5標(biāo)識符是由程序員定義的單詞,用來給程序中的數(shù)據(jù)、函數(shù)和其他用戶自定義對象命名。程序設(shè)計語言本身會定義一些專用名稱,稱之為保留字或關(guān)鍵字,他們具有特定含義,程序員不能另做他用。如:C語言規(guī)定了32個關(guān)鍵字。3.1標(biāo)識符6#include<stdio.h>main(){
int
number1;/*變量聲明*/
intnumber2;
intresult;
printf(“pleaseinputthetwonumbers:\n”);/*顯示提示信息*/scanf(“%d%d”,&number1,&number2);/*從鍵盤讀取2個整數(shù)*/result=number1*number2;/*賦值運(yùn)算*/
printf(“theresultis:%d\n”,result);/*輸出結(jié)果*/
return0;}用戶自定義標(biāo)識符C語言關(guān)鍵字3.1標(biāo)識符7不同的程序設(shè)計語言標(biāo)識符格式可能不同。C語言規(guī)定:標(biāo)識符由大寫字母A到Z、小寫字母a到z、數(shù)字0到9和下劃線組成,且第一個字符必須是字母或下劃線,隨后的字符必須是字母、數(shù)字或下劃線。且大小寫敏感,如age和Age是兩個不同的標(biāo)識符。PASCAL語言規(guī)定:和C語言類似,只是要求第一個字符只能是字母(比C語言約束更強(qiáng))。3.1標(biāo)識符思考:以下哪些是合法標(biāo)識符age,_class_no,
name1,name1%,2name,#age8數(shù)據(jù)是程序處理的對象。數(shù)據(jù)依據(jù)其本身的特點(diǎn)可以歸為不同的類:整數(shù)、小數(shù)、字符、字符串等。(高級程序語言特點(diǎn):按照人對于數(shù)據(jù)的表達(dá)方式)
數(shù)據(jù)類型:定義了一系列的值(數(shù)據(jù)特點(diǎn)、范圍)以及能應(yīng)用于這些值上的一系列操作(數(shù)據(jù)操作)。3.2數(shù)據(jù)類型程序設(shè)計語言一般包含四種標(biāo)準(zhǔn)數(shù)據(jù)類型:整型、字符型、浮點(diǎn)型和布爾型。9整數(shù)是由符號和一個或多個數(shù)字組成的正數(shù)或負(fù)數(shù),又稱為帶符號的自然數(shù)
,如+12,-38。在數(shù)學(xué)中,整數(shù)是一個無限集合,但對于計算機(jī)來說,只能表示它的一個有限子集(決定于存儲空間的大?。?。整型3.2數(shù)據(jù)類型103.2數(shù)據(jù)類型-整型整型數(shù)據(jù)占用的內(nèi)存單元數(shù):C語言中整型數(shù)據(jù)細(xì)分為三類:shortint、int和longint。C語言標(biāo)準(zhǔn)沒有規(guī)定每一種整數(shù)類型占用的內(nèi)存空間大小,只是約束到:shortint和int至少要占據(jù)16位(2字節(jié)),而long數(shù)據(jù)至少要有32位(4字節(jié));且數(shù)據(jù)長度上,shortint<=int<=long
int。每一種整數(shù)類型占用的字節(jié)數(shù)取決于所用的機(jī)器以及C編譯器。11整型所允許的運(yùn)算包括:
二目算術(shù)運(yùn)算:+、-、*、/、%(取余); 兩個整數(shù)進(jìn)行二目運(yùn)算后的結(jié)果還是整數(shù), 如:125/10=12(余數(shù)5被舍棄), 125%10=5
單目算術(shù)運(yùn)算:取負(fù)值等;
關(guān)系運(yùn)算:<,<=,>,>=,==(相等), !=(不相等)
3.2數(shù)據(jù)類型-整型12字符型字符數(shù)據(jù)包括26*2個字母(大小寫)+10個數(shù)字+其它顯示符號,總共95種;還有33種控制符號,總共128種符號;字符型數(shù)據(jù)在內(nèi)存中的存儲:實際存放的是一個整數(shù)值。多數(shù)計算機(jī)系統(tǒng)采用ASCII(AmericanStandardCodeforInformationInterchange)標(biāo)準(zhǔn)編碼模式來對字符進(jìn)行編碼。每個字符占用8位內(nèi)存(1個字節(jié));3.2數(shù)據(jù)類型13ASCII表LH000000010010001101000101011001110000NULDLESP0@P‘p
0001SOHDC1!1AQaq
0010STXDC2“2BRbr
0011ETXDC3#3CScs
0100EOTDC4$4DTdt
0101ENQNAK%5EUeu
0110ACKSYN&6FVfv
0111BELETB,7GWgw
1000BSCAN)8HXhx
1001HTEM(9IYiy
1010LFSUB*:JZjz
1011VTESC+;K[k{
1100FFFS’<L\l|
1101CRGS-=M]m}
1110SORS.>N^n~
1111SIUS/?O_oDEL2000H2002H2004H2003H2001H01000001存儲空間該存儲區(qū)存放字符‘A’思考:若從鍵盤上輸入字符存儲到內(nèi)存,字符到二進(jìn)制數(shù)的轉(zhuǎn)換是誰來實現(xiàn)的?14ASCII(‘A’)=65 ASCII(‘a(chǎn)’)=97大寫字母的ASCII編碼+32=小寫字母的ASCII編碼
字符型所允許的運(yùn)算包括(將字符型數(shù)據(jù)當(dāng)作整數(shù)對待):
算術(shù)運(yùn)算:ch2=ch1-32(ch1值為‘b’,則ch2=‘B’)
ch2=ch1-1(ch1值為‘b’,則ch2=‘a(chǎn)’)
ch2=ch1+1(ch1值為‘b’,則ch2=‘c’)
3.2數(shù)據(jù)類型-字符型153.2數(shù)據(jù)類型-字符型關(guān)系運(yùn)算(按照ASCII大?。?<,<=,>,>=,==,!= 例如:‘A’<‘a(chǎn)’
結(jié)果為真(非零),因為‘A’的ASCII是65,‘a(chǎn)’的ASCII是97,65<9716浮點(diǎn)型浮點(diǎn)型是帶小數(shù)部分的數(shù)字類型,如3.14,1.575E5(科學(xué)計數(shù)法,即1.575*)。C語言支持三種不同長度的浮點(diǎn)數(shù)據(jù)類型:float、double和longdouble。其中float一般占32位(4字節(jié));double一般占64位(8字節(jié)),longdouble占96位(12字節(jié))。三者區(qū)別:越后面的類型運(yùn)算精度越高,但占用的內(nèi)存單元越多。3.2數(shù)據(jù)類型17浮點(diǎn)型所允許的運(yùn)算包括:
二目算術(shù)運(yùn)算:+、-、*、/; 浮點(diǎn)型數(shù)據(jù)進(jìn)行二目運(yùn)算結(jié)果還是浮點(diǎn)型。如:12.0/5.0=2.4
單目算術(shù)運(yùn)算:取負(fù)值
關(guān)系運(yùn)算:<,<=,>,>=,==,!=
3.2數(shù)據(jù)類型-浮點(diǎn)型183.2數(shù)據(jù)類型-布爾型程序中往往需要測試某個條件是否成立。這個條件往往用一個表達(dá)式來定義,這個表達(dá)式的值要么為真,要么為假。布爾類型數(shù)據(jù):取值只有兩種,真(True)或者假(False)。允許的運(yùn)算包括:與、或、非。絕大多數(shù)程序設(shè)計語言中有布爾類型這種數(shù)據(jù)類型。如Pascal語言。但是C語言沒有定義這種數(shù)據(jù)類型。19標(biāo)準(zhǔn)類型是原子的、不可再分的。程序員可以以標(biāo)準(zhǔn)類型為基本構(gòu)件,構(gòu)造出復(fù)雜的數(shù)據(jù)類型。如C語言有:結(jié)構(gòu)、數(shù)組、聯(lián)合、文件等這些我們將來會學(xué)到的復(fù)雜類型,PASCAL語言有:結(jié)構(gòu)、數(shù)組、集合、文件等復(fù)雜數(shù)據(jù)類型。3.2數(shù)據(jù)類型-復(fù)雜數(shù)據(jù)類型203.3變量數(shù)據(jù)總線
控制路線
輸入設(shè)備輸出設(shè)備存儲器中央處理器(CPU)運(yùn)算部件控制部件輸入數(shù)據(jù)、中間運(yùn)算結(jié)果、最終結(jié)果程序需要將輸入數(shù)據(jù)、中間運(yùn)算結(jié)果以及最終結(jié)果暫時保存在內(nèi)存單元中。地址總線
程序如何實現(xiàn)從內(nèi)存單元存取數(shù)據(jù)?213.3變量當(dāng)程序要讀寫內(nèi)存中的數(shù)據(jù)時,可以直接使用內(nèi)存地址來讀取,但這樣太麻煩!如果用名字來代替地址,在程序中出現(xiàn)的是代表內(nèi)存空間的名字,讓編譯器來跟蹤數(shù)據(jù)實際存放的物理內(nèi)存地址,就可以簡化編程--變量22變量是內(nèi)存中存儲空間的名字,該存儲空間用來存放被加工的數(shù)據(jù)或處理的結(jié)果。變量用來代表內(nèi)存存儲空間。程序中對變量的操作(讀和賦值)實際上是對存儲空間的讀寫操作。2000H2002H2004H2005H2007H2006H2003H2001Hsexagescore內(nèi)存用sex代表地址為2000H的內(nèi)存單元,score代表地址為2004H~2007H的一片內(nèi)存空間。用變量來實現(xiàn)對這些內(nèi)存空間數(shù)據(jù)的存取。3.3變量23一、變量定義
使用變量來對內(nèi)存數(shù)據(jù)進(jìn)行存取前,必須先定義變量,目的是建立變量和存儲空間的對應(yīng)關(guān)系。變量定義指明變量的名稱和數(shù)據(jù)類型(變量代表的存儲空間存放的數(shù)據(jù)的類型)。要求變量的名稱遵循標(biāo)識符命名原則。不同語言中變量定義的寫法不一樣,C語言格式: 數(shù)據(jù)類型變量名1[,變量名2,…];3.3變量思考:變量定義時要指明哪些內(nèi)容?charsex;intage1,age2;floatscore;數(shù)據(jù)類型變量名分號必須多個變量用逗號分割24注意,變量定義僅引起內(nèi)存存儲空間分配,但此時變量中存儲的值是無意義的!變量定義引起存儲分配。定義后,變量就用來代表內(nèi)存中的一片存儲單元。3.3變量2000H2002H2004H2005H2007H2006H2003H2001Hsexagescore存儲空間charsex;intage;floatscore;25二、變量賦值3.3變量C語言示例:charsex;intage;floatscore;變量賦值:把一個值寫入變量代表存儲空間。C語言變量賦值格式:變量名=表達(dá)式sex=‘F’;age=18;score=89.5;2000H2002H2004H2005H2007H2006H2003H2001Hsexagescore存儲空間ASCII(‘F’)=77)771889.5變量的值263.3變量變量使用特點(diǎn)先定義,后使用。
intage; 定義一個變量為整數(shù)類型。如未定義,則在編譯時被查出,認(rèn)為非法。變量未被賦值前,值是無意義的。對變量賦值過程是“覆蓋”過程,用新值去替換舊值。讀取變量代表的存儲空間數(shù)據(jù)(又稱讀取變量的值):age=age+1;讀出變量的值,該變量保持不變。
273.3變量試解釋下列操作的含義讀取變量內(nèi)容寫入變量給變量賦值修改變量內(nèi)容28C語言允許變量在定義時進(jìn)行初始化。初始化語句用來給變量賦初始值。例如:charsex;intage=16;floatscore;
3.3變量2000H2002H2004H2005H2007H2006H2003H2001H16存儲空間sexagescore29#include<stdio.h>main(){
intnumber1;/*變量聲明*/
intnumber2;
intresult;
printf(“pleaseinputthetwonumbers:\n”);/*顯示提示信息*/scanf(“%d%d”,&number1,&number2);/*從鍵盤讀取2個整數(shù)*/result=number1*number2;/*賦值運(yùn)算*/
printf(“theresultis:%d\n”,result);/*輸出結(jié)果*/
return0;}3.3變量303.3變量找出下述變量定義的錯誤:
floatfchar‘A’,‘B’;31charsex;intage;floatscore變量類型變量名總結(jié):變量三要素:變量名(存儲空間)、數(shù)據(jù)類型(存儲空間存放的數(shù)據(jù)的類型)、變量值(存儲內(nèi)容)3.3變量2000H2002H2004H2005H2007H2006H2003H2001H701889.5存儲空間變量的值sexagescore32一、文字常量文字常量是指在程序中未被命名的值。例:circumference=2*length*width;其中2就是一個文字常量,length和width是變量三類常量:文字常量、命名常量、符號常量3.4常量33二、命名常量 和變量類似,命名常量也是內(nèi)存存儲空間的名字,代表一片內(nèi)存存儲空間,但一般不允許程序去改變該存儲空間中的數(shù)據(jù)。C語言中定義一個命名常量:
main() {
constfloatpi=3.14;
……}3.4常量2000H2002H2004H2005H2007H2006H2003H2001H3.14存儲空間pi34#include<stdio.h>main(){
constfloatpi=3.14;/*常量定義*/
floatradius;/*變量定義*/
floatarea;
printf(“pleaseinputtheradius:\n”);/*顯示提示信息*/scanf(“%f”,&radius);/*從鍵盤讀取半徑*/
area=pi*radius*radius;/*賦值運(yùn)算*/
printf(“theareais:%f\n”,area);/*輸出結(jié)果*/system(“pause”);
return0;}35符號常量是僅含有符號名稱的值,不存儲在內(nèi)存。 C語言中符號常量定義:#defineAVESCORE85
if(score<AVESCORE)……編譯時,預(yù)處理程序能夠?qū)⑺谐霈F(xiàn)該符號名稱的地方用值替換:if(score<85)……使用符號常量的好處:使程序易讀性好、容易維護(hù)。三、符號常量3.4常量363.4常量#include<stdio.h>#definePI3.14//常量定義,注意結(jié)束處無分號main(){floatradius;/*變量定義*/
floatarea;
printf(“pleaseinputtheradius:\n”);/*顯示提示信息*/scanf(“%f”,&radius);/*從鍵盤讀取半徑*/area=PI*radius*radius;/*賦值運(yùn)算*/
printf(“theareais:%f\n”,area);/*輸出結(jié)果*/system(“pause”);
return0;}
37四、常量的類型 和變量一樣,常量也有類型。大多數(shù)程序設(shè)計語言使用整型、浮點(diǎn)型、字符型和字符串型常量。 C語言中四種常量: 15 整型常量 15.4 浮點(diǎn)型常量 ‘A’ 字符型常量 “Hello”字符串型常量文字常量和符號常量的值體現(xiàn)了常量的類型3.4常量38如果整型常量以0開頭,C編譯器會認(rèn)為該常量是八進(jìn)制數(shù)。如040即十進(jìn)制的32。如果整型常量以0x開頭,C編譯器會認(rèn)為該常量是十六進(jìn)制數(shù)。如0xFF即十進(jìn)制的255。#include<stdio.h>#defineX040#defineY0XFFmain(){printf(“X=%d,Y=%d”,X,Y);
system("pause");return0;}3.4常量X=32,Y=255請按任意鍵繼續(xù)...39常量小測試下述常量定義哪些是錯誤的?為什么?#defineratio=1/3 #defineratio1/3;#define1st_character'$'#defineif7不能有=號;不能有語句結(jié)束符;號標(biāo)識符只能以字符或者下劃線開頭If是C語言規(guī)定的關(guān)鍵字,有特定含義,用戶不能隨便使用40數(shù)據(jù)總線
控制路線
輸入設(shè)備輸出設(shè)備存儲器中央處理器(CPU)運(yùn)算部件控制部件地址總線
3.5輸入和輸出(I/O)一個真正有用的程序一般會從輸入設(shè)備接收數(shù)據(jù)、并將運(yùn)算結(jié)果輸出到輸出設(shè)備中。為了實現(xiàn)和輸入輸出設(shè)備的通信,程序必須要有輸入和輸出語句。一個既無輸入又無輸出的程序是沒有用的。41輸入和輸出語句最基本的功能在于從外界環(huán)境將值讀入一個變量,或者將一個值寫出到外界環(huán)境中。
3.5輸入和輸出(I/O)42一、輸入通過語句或者預(yù)先定義的函數(shù)可以從外界接收值。C語言輸入函數(shù)舉例:
scanf(格式控制,輸入項地址表);如:scanf(“%d”,&number1);用于從鍵盤讀取一個整數(shù)并存儲在變量number1中。
3.5輸入和輸出(I/O)43scanf(“%d”,&number1);當(dāng)程序遇到該指令時,程序等待用戶從鍵盤輸入一個整數(shù),然后將值存儲到變量number1中。%d:格式指示符(formatcode),用于告訴程序 鍵入的將是一個整數(shù);&:取變量地址運(yùn)算符,&number1表示變量 number1的首地址。注意:書寫程序時不要遺漏&.3.5輸入和輸出(I/O)44用scanf語句從鍵盤同時讀入年齡和性別:scanf(“%d%c”,&age,&sex);scanf(“%d,%c”,&age,&sex);3.5輸入和輸出(I/O)10S10,S從鍵盤輸入的內(nèi)容要和格式控制串匹配。如果在“格式控制”字符串中除了格式指示以外還有其它字符,則在輸入數(shù)據(jù)時應(yīng)輸入與這些字符相同的字符。如:空格scanf(“age=%d,sex=%c”,&age,&sex);age=10,sex=S45二、輸出通過語句或者預(yù)先定義的函數(shù)可以將值輸出到外界。C輸出函數(shù)舉例:printf(格式控制,輸出項表);功能:將字符串顯示在顯示器上。程序員可以將一個或多個變量作為待輸出字符串的一部分。輸出項表:可以是常量、變量、表達(dá)式、函數(shù)調(diào)用。3.5輸入和輸出(I/O)46如: printf(”Yourageis:%d”,age);注意,在輸出時%d不輸出,而是被變量age的值代替。假設(shè)變量age的值是18,則顯示器上將輸出字符串“Yourageis:18”
注意:此處變量age前面沒有&!3.5輸入和輸出(I/O)上機(jī)練習(xí):如果上述語句改寫成printf(”Yourageis:”,age);輸出將是怎樣?473.5輸入和輸出(I/O)可以用printf語句輸出常量、變量、表達(dá)式、函數(shù)調(diào)用的值:printf(“theageragescoreis%d”,SCORE);//輸出常量printf(“yourageis%d”,age);//輸出變量printf(“thevalueof(2+3)<10is:%d\n”,(2+3)<10);//輸出表達(dá)式的值printf(“thesizeofintis:%d”,sizeof(int));//輸出函數(shù)返回值48若想同時輸出年齡和性別,則語句可寫為:printf(
“Yourageis:%d,yoursexis:%c”,age,sex);顯示器上將輸出字符串“Yourageis:18,yoursexis:F”
3.5輸入和輸出(I/O)常用的輸入輸出語句格式控制中的格式指示符:%d:整型;%c:字符型;%f:浮點(diǎn)型輸入輸出后面會再詳細(xì)講解,有興趣的同學(xué)可參見《C程序設(shè)計教程》的9.3和9.11。49找出以下程序的錯誤main(){ printf(“inputiandj\n”);scanf(“i=%d”,i);scanf(“%d”,j);printf(“i=%d,j=%d”,i);system(“pause”);}變量i和j未定義就使用;scanf(“%d”,&i);或者scanf((“i=%d”,&i)scanf(“%d”,&j);3.printf(“i=%d,j=%d”,i,j);50#include<stdio.h>main(){
intnumber1;/*存放整數(shù)1*/
intnumber2;/*存放整數(shù)2*/
intresult;/*存放結(jié)果*/
printf(“pleaseinputthetwonumbers:\n”);/*顯示提示信息*/
scanf(“%d%d”,&number1,&number2);/*讀取整數(shù)*/result=number1*number2;/*賦值運(yùn)算*/
printf(“theresultis:%d\n”,result);/*輸出結(jié)果*/
return0;}2000H2004Hresult2002H2005H2007H2006H2003H2001H存儲空間number1number21020pleaseinputthetwonumbers:theresultis:2001020200任務(wù)描述:輸入兩個整數(shù),求兩數(shù)之積并輸出。/**/:注釋main()函數(shù)變量定義部分操作部分編譯后,源程序中出現(xiàn)number1、number2和result的地方將會用內(nèi)存相對地址(非真正物理地址)替換,真正的物理地址由操作系統(tǒng)分配。指令執(zhí)行時用相應(yīng)的尋址方式去取變量中存儲的操作數(shù)。編譯程序怎么處理變量?操作系統(tǒng)怎么分配內(nèi)存?指令中有哪幾種尋址方式?深入學(xué)習(xí):《編譯原理》+《操作系統(tǒng)》+《計算機(jī)組成原理》假設(shè)操作系統(tǒng)已經(jīng)分配如下內(nèi)存空間用于存放操作數(shù)和結(jié)果程序運(yùn)行過程演示51輸入輸出練習(xí):定義三個變量,分別是整型、浮點(diǎn)型、字符型。要求從鍵盤輸入三個值存放到這三個變量里,并且輸出這三個變量。main(){inti;floatf;charc;scanf(“%d,%f,%c”,&i,&f,&c);printf(“theresultis:\n”);printf(“i=%d,f=%f,c=%c”,i,f,c);system(“pause”);return0;}52main(){inti;floatf;charc;printf("inputi,f\n");scanf("%d,%f",&i,&f);printf("inputc\n");scanf("%c",&c);printf("theresultis:結(jié)果是\n");printf("i=%d,f=%f,c=%c",i,f,c);system("pause");return0;}請同學(xué)們看看本程序的輸出是什么?inputi,f10,3.14inputctheresultis:i=10,f=3.140000,c=請按任意鍵繼續(xù)...程序并沒有給用戶輸入字符數(shù)據(jù)的機(jī)會。為什么?53解決方法:用getchar函數(shù)來“消耗掉”回車符main(){inti;floatf;charc;printf("inputi,f\n");scanf("%d,%f",&i,&f);printf("inputc\n");getchar();scanf("%c",&c);printf("theresultis:結(jié)果是\n");printf("i=%d,f=%f,c=%c",i,f,c);system("pause");}inputi,f10,3.14inputcytheresultis:i=10,f=3.140000,c=r請按任意鍵繼續(xù)...結(jié)果正確!54表達(dá)式是由運(yùn)算符、操作數(shù)和括號組成的、計算求值的基本單位。 如:3+5就是一個值為8的表達(dá)式。典型的幾類運(yùn)算符和表達(dá)式: 算術(shù)運(yùn)算符和算術(shù)表達(dá)式; 關(guān)系運(yùn)算符和關(guān)系表達(dá)式; 邏輯運(yùn)算符和邏輯表達(dá)式; 賦值運(yùn)算符和賦值表達(dá)式;3.6表達(dá)式操作數(shù):可以為常量、變量、函數(shù)或表達(dá)式553.6表達(dá)式一、算術(shù)運(yùn)算符和算術(shù)表達(dá)式算術(shù)運(yùn)算符:+、-、×、/、%(取余)等;算術(shù)表達(dá)式:由算術(shù)運(yùn)算符、操作數(shù)和括號構(gòu)成的表達(dá)式。如:(2+8.2/3)*4,10%4(余數(shù)為2)+(加)-(減)*(乘)/(除,取商)%(取模)++(自加,加1)--(自減,減1)563.6表達(dá)式-算術(shù)表達(dá)式(b*b-4*a*c)/(2*a)要注意編程序式,對算術(shù)表達(dá)式的書寫和平時的書寫方式可能是不一樣的:57在C語言中,算術(shù)運(yùn)算的操作數(shù)可以是整數(shù)、字符或者浮點(diǎn)數(shù)。如果表達(dá)式中的操作數(shù)全是整數(shù),則表達(dá)式的值為整數(shù);如果操作數(shù)至少有一個是浮點(diǎn)數(shù),則表達(dá)式的值為浮點(diǎn)數(shù)。3.6表達(dá)式-算術(shù)表達(dá)式求以下表達(dá)式的值:1)102/202)102%203)1/24)1.0/25)x=‘A’+32(x是整型變量)求以下表達(dá)式的值:1)102/20=52)102%20=23)1/2=04)1.0/2=0.55)x=‘A’+32x=97思考:如果表達(dá)式的操作數(shù)有整數(shù)和字符,運(yùn)算結(jié)果是什么類型?583.6表達(dá)式-算術(shù)表達(dá)式C語言中,整型、字符型、浮點(diǎn)型數(shù)據(jù)可以進(jìn)行混合運(yùn)算.如:5+1.0+'A'=71.000000 混合運(yùn)算涉及到數(shù)據(jù)類型的轉(zhuǎn)換,具體將在以后介紹。自加運(yùn)算符++和自加運(yùn)算符—是C語言特有的運(yùn)算符,將在以后介紹。593.6表達(dá)式二、關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算符:用于比較兩個數(shù)據(jù)的大小關(guān)系。關(guān)系表達(dá)式:用關(guān)系運(yùn)算符將兩個表達(dá)式連接起來構(gòu)成的表達(dá)式,如(2+3)<10;運(yùn)算結(jié)果是邏輯值真或者假。在C語言中,若運(yùn)算結(jié)果是邏輯“真”,則關(guān)系表達(dá)式的值為1;若為邏輯“假”,則值為0。
<(小于)<=(小于等于)>(大于)>=(大于等于)==(等于)?。剑ú坏扔冢?03.6表達(dá)式-關(guān)系表達(dá)式思考:以下語句的輸出結(jié)果是什么?printf("thevalueof(2+3)<10is:%d\n",(2+3)<10);printf("thevalueof(2+3)==10is:%d\n",(2+3)==10);thevalueof(2+3)<10is:1thevalueof(2+3)==10is:0613.6表達(dá)式三、邏輯運(yùn)算符和邏輯表達(dá)式邏輯運(yùn)算符:與、或、非
&&(與)a&&b:當(dāng)且僅當(dāng)兩個運(yùn)算量a和b的值都為“真”時,運(yùn)算結(jié)果為“真”,否則為“假”(如何判斷運(yùn)算量值是否為真?)||(或)a||b:當(dāng)且僅當(dāng)兩個運(yùn)算量a和b的值都為“假”時,運(yùn)算結(jié)果為“假”,否則為“真”。?。ǚ牵?a:當(dāng)運(yùn)算量a的值為“真”時,運(yùn)算結(jié)果為“假”;當(dāng)運(yùn)算量a的值為“假”時,運(yùn)算結(jié)果為“真”C語言中,只要運(yùn)算量值為非零,即為真。值為0,即為假623.6表達(dá)式-邏輯表達(dá)式運(yùn)算量a和b可以是常量、變量、表達(dá)式、函數(shù)。邏輯表達(dá)式:用邏輯運(yùn)算符將簡單的關(guān)系表達(dá)式 連接起來構(gòu)成的表達(dá)式;運(yùn)算結(jié)果 是邏輯值真或者假;
633.6表達(dá)式-邏輯表達(dá)式intmain(){inta=1,b=2,c=4,f;printf(“a=%d,b=%d,c=%d\n",a,b,c);f=(a<b)&&(b<c);
printf("f=(a<b)&&(b<c),f=%d\n",f);f=(a>b)||(b>c);
printf("f=(a>b)||(b>c),f=%d\n",f);printf("!(a>b)is:%d\n",!(a>b));
printf("!ais:%d\n",!a));system("pause");}輸出結(jié)果?a=1,b=2,c=4f=(a<b)&&(b<c),f=1f=(a>b)||(b>c),f=0!(a>b)is:1!ais:0思考:printf("thevalueofa<b<cis:%d\n",a<b<c);64四、賦值運(yùn)算符和賦值表達(dá)式
賦值運(yùn)算符:用于將值存儲到變量中;賦值表達(dá)式:帶有賦值運(yùn)算符的表達(dá)式;3.6表達(dá)式653.6表達(dá)式運(yùn)算符優(yōu)先級問題: 表達(dá)式a>20&&a%5==0的值?優(yōu)先級:算術(shù)運(yùn)算符>關(guān)系運(yùn)算符>邏輯運(yùn)算符>賦值運(yùn)算符
如:i=a>20&&a%5==0相當(dāng)于: i=((a>20)&&((a%5)==0)) 如何理解:對算術(shù)運(yùn)算結(jié)果進(jìn)行關(guān)系運(yùn)算,關(guān)系運(yùn)算結(jié)果進(jìn)行邏輯運(yùn)算,以上運(yùn)算結(jié)果賦值給變量(賦值運(yùn)算)。后續(xù)會詳細(xì)介紹。
66表達(dá)式小測試寫出下列表達(dá)式:1)i被j整除;2)m是偶數(shù);3)y[-100,-10],且y[10,100];4)判斷x年是否是閏年的條件: a)能被4整除但不能被100整除;或b)能被100整除且能被400整除;5)將整型變量i和j相除后的結(jié)果賦值給整型變量t;i%j==0m%2==0y<-100||(y>-10&&y<10)||y>100(x%4==0&&x%100!=0)||(x%100==0&&x%400=0)(x%4==0&&x%100!=0)||(x%400=0)5.t=i/j67字符型數(shù)據(jù)操作測試#include<stdio.h>main(){charch1=’A’,ch2=’S’;/*‘A’的ASCII是 65,'a'的ASCII是97,'S'的ASCII是83*/printf("\n%c,%d",ch1,ch1);printf("\n%c,%d",ch2,ch2);printf("\n%c,%d",ch1+32,ch1+32);printf("\n%d",ch1<ch2);printf("\n%d%c",ch1-ch2,ch1-ch2); system(“pause”);} 請寫出程序運(yùn)行結(jié)果A65S83a971-18由于ch1-ch2得到的結(jié)果是負(fù)數(shù),所以以字符形式輸出時無對應(yīng)字符!68請寫出判斷一個字符c是否是字母的邏輯表達(dá)式(c>‘a(chǎn)’&&c<‘z’)||(c>‘A’&&c<‘Z’)字符型數(shù)據(jù)操作測試69語句用于向計算機(jī)發(fā)出操作指令。一條語句經(jīng)編譯后產(chǎn)生一條或多條機(jī)器指令。一個實際的程序可能包括若干條語句。C語言規(guī)定了6類語句:
表達(dá)式語句、復(fù)合語句、選擇語句、 循環(huán)語句、標(biāo)記語句、跳轉(zhuǎn)語句3.7語句70一、表達(dá)式語句
表達(dá)式:算術(shù)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式、 賦值表達(dá)式。
表達(dá)式語句:在一個表達(dá)式末尾加上分號“;”(分號是C語言中語句的結(jié)束符)。i<j;(無意義)i=i+10*j;(賦值表達(dá)式語句)3.7語句71如果表達(dá)式涉及到賦值(存在賦值運(yùn)算符或運(yùn)算符++或--,如i=i+10*j;),則將計算得到的值保存到變量中。如果不涉及賦值(如語句i<j;)
,則值將被丟棄3.7語句72二、復(fù)合語句
復(fù)合語句是包含零個或多個語句的代碼單元,使得一組語句成為一個整體,也被稱為塊。在C語言中,復(fù)合語句由一個左大括號、可選語句段、一個右大括號組成。如:
{
i=1; j=2*i; }3.7語句73三、選擇語句
3.7語句在寫程序時,有時往往需要測試某一個條件是否成立,然后根據(jù)檢測結(jié)果來控制程序后續(xù)執(zhí)行路徑。此時要用到選擇語句。C語言中選擇語句有:
1)if-else語句2)switch語句(以后再講)741)if-else
實現(xiàn)雙路選擇if(表達(dá)式){語句組1}else{語句組2}b)C語句a)流程圖表達(dá)式語句組1語句組2真(非0)假(為0)表達(dá)式可以是任一種表達(dá)式;表達(dá)式的值為非零時,表示表達(dá)式為真;否則為假。3.7語句753.7語句(1)if語句中的“表達(dá)式”必須用“(”和“)”括起來。(2)else子句(可選)是if語句的一部分,必須與if配對使用,不能單獨(dú)使用。(3)當(dāng)if和else下面的語句組,僅由一條語句構(gòu)成時,也可不使用復(fù)合語句形式(即去掉花括號)。76if(表達(dá)式){
語句1;語句2;
…}else{語句n;語句n+1;
…}表達(dá)式:一般是關(guān)系表達(dá)式和邏輯表達(dá)式語句:輸入輸出語句;賦值語句;if語句;77例3.3輸入一個整數(shù),判別它是否能被3整除。若能被3整除,輸出YES;若不能被3整除,輸出NO。
#include<stdio.h>main(){intn;/*定義變量n*/printf(“inputn:”);/*輸入提示*/scanf(“%d”,&n);/*輸入整數(shù)到變量n中*/
if(n%3==0)printf(“n=%dYES\n”,n);/*若n能被3整除,則輸出“YES”*/elseprintf(“n=%dNO\n”,n);/*若n不能被3整除,則輸出“NO”*/system(“pause”);return0;}inputn:20n=20NO78main(){intn;/*定義變量n*/printf("inputn:");/*輸入提示*/scanf("%d",&n);/*輸入整數(shù)到變量n中*/if(n<=0)printf("\nerrorinput!thenumbershouldbepositive");else{if(n%3==0)printf("\nn=%d,YES",n);/*若n能被3整除,則輸出“YES”*/elseprintf("\nn=%d,NO",n);/*若n不能被3整除,則輸出“NO”*/}system("pause");}改動:輸入一個正整數(shù),判別它是否能被3整除。若輸入的不是正整數(shù),則提示出錯信息;否則,若能被3整除,輸出YES;若不能被3整除,輸出NO。
{}內(nèi)可以有多條語句;如果只有一條語句,則{}可以省略通過縮進(jìn)來更好地展示代碼結(jié)構(gòu)79main(){intn;/*定義變量n*/printf("inputn:");/*輸入提示*/scanf("%d",&n);/*輸入整數(shù)到變量n中*/if(n<=0)printf("\nerrorinput!thenumbershouldbepositive");elseif(n%3==0)printf("\nn=%d,YES",n);/*若n能被3整除,則輸出“YES”*/elseprintf("\nn=%d,NO",n);/*若n不能被3整除,則輸出“NO”*/system("pause");}else和離它最近的if匹配80main(){intn;/*定義變量n*/printf("inputn:");/*輸入提示*/scanf("%d",&n);/*輸入整數(shù)到變量n中*/if(n<=0)printf("\nerrorinput!thenumbershouldbepositive");elseif(n%3==0)printf("\nn=%d,YES",n);/*若n能被3整除,則輸出“YES”*/elseprintf("\nn=%d,NO",n);/*若n不能被3整除,則輸出“NO”*/system("pause");}嵌套的if-else語句的另外一種寫法81練習(xí)1:輸入一個字符,如果是小寫字母,則輸出為:thisisalower-caseletter;如果是大寫字母,則輸出為:thisisaupper-caseletter;如果是數(shù)字,則輸出為:thisisadigit;若是其他,則輸出為:thisisneitheraletternoradigit.822)switch
實現(xiàn)多路選擇常量表達(dá)式的值必須是C語言中的整型、字符型或者枚舉類型。switch(表達(dá)式){case常量表達(dá)式1:語句組1;[break;]case常量表達(dá)式3:語句組2;[break;]······case常量表達(dá)式n:語句組n;[break;]default:語句組n+1;}方括號表示其內(nèi)的語句可選圖3.5switch語句3.7語句83switch(sex){case0:printf(“hello,boy!");break;case1:printf("hello,girl");break;default:printf(“invalidsex”);}switch語句實例:3.7語句84四、循環(huán)結(jié)構(gòu)語句
3.7語句有時程序中需要多次運(yùn)行同一段代碼。這種控制結(jié)構(gòu)稱為循環(huán)結(jié)構(gòu)。C語言提供了三類用于實現(xiàn)循環(huán)結(jié)構(gòu)的語句:1)while2)do-while3)for(以后再講)851)while
語句組表達(dá)式真(非0)假(為0)圖3.6while語句while(表達(dá)式){語句1;語句2·····}a)流程圖b)C語句3.7語句此處的表達(dá)式可以為任意一種表達(dá)式;如果表達(dá)式值為真(非0),則執(zhí)行語句組;執(zhí)行完后再測試表達(dá)式,如果仍為真(非0),則再次執(zhí)行語句組;直到表達(dá)式為假(為0)。86#include<stdio.h>#defineN10main(){ inti=0;
while(i<=N){ printf("%d",i);i=i+1;}system(“pause”);return0;}while語句實例:輸出0~N之間的整數(shù)(N>0)程序運(yùn)行結(jié)果是什么?2000H2002H2004H2003H2001H存儲空間i注意此處沒有分號012…87練習(xí):輸入一個正整數(shù),判別它是否能被3整除。若輸入的不是正整數(shù),則提示出錯信息,并請用戶重新輸入,直到輸入一個正整數(shù)。若該正整數(shù)能被3整除,輸出YES;若不能被3整除,輸出NO。程序主體:
scanf(“%d”,&n); while(n<=0){ printf(“……”); scanf(“%d”,&n); }88#include<stdio.h>main(){intn;/*定義變量n*/printf("inputn(n>0):");/*輸入提示*/scanf("%d",&n);/*輸入整數(shù)到變量n中*/while(n<=0){printf("\nerrorinput!thenumbershouldbepositive");printf("\ninputn(n>0):");scanf("%d",&n);}if(n%3==0)printf("\nn=%d,YES",n);/*若n能被3整除,則輸出“YES”*/elseprintf("\nn=%d,NO",n);/*若n不能被3整除,則輸出“NO”*/system("pause");return0;}練習(xí):輸入一個正整數(shù),判別它是否能被3整除。若輸入的不是正整數(shù),則提示出錯信息,并請用戶重新輸入;否則,若能被3整除,輸出YES;若不能被3整除,輸出NO。89練習(xí)2:輸入起止年份,輸出這兩年之間的閏年。用while結(jié)構(gòu)實現(xiàn)。閏年的條件是: a)能被4整除但不能被100
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廂貨車轉(zhuǎn)讓合同范例
- 倉庫存放貨物合同范例
- 代建合同范例 政府
- 培訓(xùn)約定服務(wù)合同模板
- 多人包車服務(wù)合同模板
- 園林花木售賣合同范例
- 個人旅館轉(zhuǎn)讓合同范例
- 代理銷售果蔬汁合同范例
- 單位聘用律師合同模板
- 儲值卡會員合同范例
- 第一章第三節(jié)《氧化還原反應(yīng)》第一課時高一上學(xué)期化學(xué)人教版(2019)必修第一冊
- 高三政治月考試卷講評
- 期中模擬測試卷1(試題)-2024-2025學(xué)年五年級上冊數(shù)學(xué)(福建)
- 2024-2030年少兒藝術(shù)培訓(xùn)行業(yè)市場發(fā)展分析及發(fā)展前景與投資機(jī)會研究報告
- 期中模擬試卷(1-4單元)(試題)-2024-2025學(xué)年四年級上冊數(shù)學(xué)蘇教版
- 藍(lán)色簡約風(fēng)中國空軍成立75周年紀(jì)念日
- 2024年全國企業(yè)員工全面質(zhì)量管理知識競賽題庫(含答案)(共132題)
- 知識創(chuàng)業(yè)思維與方法智慧樹知到答案2024年湖南師范大學(xué)
- 無人機(jī)全行業(yè)保險
- 2023年廣東省建筑設(shè)計研究院校園招聘筆試參考題庫附帶答案詳解
- 員工人事檔案目錄
評論
0/150
提交評論