-
簡介:ORACLE11GDATABASESQL語言基礎(chǔ),20118BYKEVINLIN林少杰KEVINLINORAGMAILCOM,SQL語言簡介,SQL語言STRUCTUREDQUERYLANGUAGE是訪問關(guān)系型數(shù)據(jù)庫的標(biāo)準(zhǔn)語言。SQL語言可以分為五種類型查詢QUERYSELECT數(shù)據(jù)處理DMLINSERT,UPDATE,DELETE數(shù)據(jù)定義DDLCREATE,ALTER,DROP,RENAME,TRUNCATE事務(wù)控制TCCOMMIT,ROLLBACK,SAVEPOINT數(shù)據(jù)控制DCL–GRANT,REVOKE,SQL語句可以被嵌入其他語句編寫的程序里進(jìn)行運(yùn)行,比如C程序,也可以使用JDBC將SQL語句寫到JAVA程序里。SQL語句也可以使用一些工具運(yùn)行,與數(shù)據(jù)庫交互,比如ORACLESQLPLUS,ORACLESQLDEVELOPER以及其他第三方工具。,查詢數(shù)據(jù),使用SELECT查詢數(shù)據(jù),,,,,,,,,,,,,,,,,,,,,,,,,,,,,,表1,表2,查詢表中的若干行數(shù)據(jù),查詢表中的若干列,聯(lián)合不同表中的數(shù)據(jù),,,,,,,,,,,,,,,,,,,,,,,,,,,,基本SELECT語句,SELECT子句指定要查詢的數(shù)據(jù)列。FROM子句指定對象表。,SELECT|{DISTINCTCOLUMN|EXPRESSIONALIAS,}FROMTABLE,查詢所有列,SELECTFROMDEPARTMENTS,查詢指定列,SELECTDEPARTMENT_ID,LOCATION_IDFROMDEPARTMENTS,SELECT語句編寫,大小寫不敏感??梢詫懗梢恍谢蚨嘈?。關(guān)鍵字不能縮寫或跨行。語句中的子句CLAUSE通常分行輸入??s進(jìn)增加可讀性。在一般的工具中,SQL語句一般以分號“”結(jié)尾。,SELECT語句中的四則運(yùn)算,SELECTLAST_NAME,SALARY,12SALARY100FROMEMPLOYEES,,NULL值,NULL值表示相應(yīng)的值未知、不可用、未被分配。NULL值不同于數(shù)字0或空格。所有與NULL值相關(guān)的四則運(yùn)行,結(jié)果為NULL。,定義列別名COLUMNALIAS,重命名列名在有四則運(yùn)算的情況下,可以使列名更具有意義列別名在定義時,緊跟列名,以空格或“AS”分隔當(dāng)列別名的大小寫敏感,或者含有空格、特殊字符,需要使用雙引號。,,,SELECTLAST_NAME“NAME“,SALARY12“ANNUALSALARY“FROMEMPLOYEES,,,,,連接符操作,將列、字符串連接在一起,作為一個新列。連接符為兩個豎線“||”最終形成的列為字符表達(dá)式。,SELECTLAST_NAME||JOB_IDAS“EMPLOYEES“FROMEMPLOYEES,原義字符串LITERALCHARACTERSTRINGS,原義字符指字符、數(shù)字,或者日期。日期和字符需要使用單引號封裝。每行數(shù)據(jù)顯示一次。,,SELECTLAST_NAME||ISA||JOB_IDAS“EMPLOYEEDETAILS“FROMEMPLOYEES,,QUOTEQ操作,可以選擇分隔符??蛇x擇任意方便的分隔符,單字節(jié)或多字節(jié),或者下列符號,{},,。增加可讀性與實(shí)用性。,SELECTDEPARTMENT_NAME||DEPARTMENT||QSMANAGERID||MANAGER_IDAS“DEPARTMENTANDMANAGER“FROMDEPARTMENTS,,消除重復(fù)行,,,SELECTDISTINCTDEPARTMENT_IDFROMEMPLOYEES,,,SELECTDISTINCTDEPARTMENT_ID,JOB_IDFROMEMPLOYEES,,可以在多個列之前使用DISTINCT修飾詞,影響指定的所有列,其結(jié)果是這些列組合后的不同值。,DESCRIBE命令,,DESCRIBEEMPLOYEES,限制返回結(jié)果,,使用WHERE子句限制返回結(jié)果WHERE子句在FROM子句之后。,SELECT|{DISTINCTCOLUMN|EXPRESSIONALIAS,}FROMTABLEWHERECONDITIONS,,SELECTEMPLOYEE_ID,LAST_NAME,JOB_ID,DEPARTMENT_IDFROMEMPLOYEESWHEREDEPARTMENT_ID90,,比較運(yùn)算符COMPARISONOPERATORS,,,不等于,,兩個值之間包括限值,BETWEENAND,符合列表內(nèi)的值,INSET,符合字符樣式,LIKE,是NULL值,ISNULL,小于,,大于,,等于,,意義,運(yùn)算符,,,,,,,,,,,,,,,,,,使用比較運(yùn)算符,,,SELECTLAST_NAME,SALARYFROMEMPLOYEESWHERESALARY10000ANDJOB_IDLIKEMAN,AND需要前后兩個條件為TRUE,,使用邏輯運(yùn)算符,OR需要前后兩個條件有一個為TRUE,SELECTEMPLOYEE_ID,LAST_NAME,JOB_ID,SALARYFROMEMPLOYEESWHERESALARY10000ORJOB_IDLIKEMAN,,使用邏輯運(yùn)算符,NOT操作符可以與IN,BETWEEN,LIKE,ANDNULL配合使用,WHEREJOB_IDNOTINAC_ACCOUNT,AD_VPWHERESALARYNOTBETWEEN10000AND15000WHERELAST_NAMENOTLIKEA‘WHERECOMMISSION_PCTISNOTNULL,運(yùn)算符的優(yōu)先級規(guī)則,可以使用括號改變默認(rèn)的優(yōu)先級別,NOTEQUALTO,6,NOT,7,AND,8,OR,9,ISNOTNULL,LIKE,NOTIN,4,NOTBETWEEN,5,比較運(yùn)算符,3,連接運(yùn)算符,2,四則運(yùn)算,1,運(yùn)算符,優(yōu)先級,,,,,,,,,,,,,,,,,排序ORDERBY,排序使用ORDERBY子句ASC升序默認(rèn)行為DESC倒序如果不使用ORDERBY,相同的兩次查詢返回的結(jié)果順序可以不一樣。使用NULLFIRST和NULLLAST指定NULL值在排序中的位置。ORDERBY子句中的每個列都可以單獨(dú)指定排序順序。,排序ORDERBY,默認(rèn)的排序?yàn)樯驍?shù)字是最小的值在前1TO999日期的值最早的在前01JAN11在01JAN12之前字符按字母表順序“A”最前,“Z”最后NULL值在升序時顯示在最后面,在降序時顯示在最前面可以使用一個不在SELECT列表中的列來排序,替換變量SUBSTITUTIONVARIABLES,替換變量臨時保存數(shù)據(jù),使用“,SQL函數(shù)SQLFUNCTIONS,函數(shù),輸入,,,,參數(shù)1,參數(shù)2,參數(shù)N,函數(shù)進(jìn)行運(yùn)算,,輸出,結(jié)果,SQL函數(shù)的兩種類型,,,單行函數(shù),多行函數(shù),,,,每行返回一個結(jié)果,多行返回一個結(jié)果,函數(shù),單行函數(shù)SINGLEROWFUNCTIONS,用于處理數(shù)據(jù)對象接收參數(shù),然后輸出一個結(jié)果每返回一行數(shù)據(jù)就要進(jìn)行運(yùn)算每行返回一個結(jié)果可以修改數(shù)據(jù)類型可以被嵌套參數(shù)可以是一個列或一個表達(dá)式,FUNCTION_NAMEARG1,ARG2,,轉(zhuǎn)換函數(shù),字符函數(shù),數(shù)字函數(shù),日期函數(shù),一般函數(shù),字符函數(shù)CHARACTERFUNCTIONS,字符函數(shù),LOWERUPPERINITCAP,CONCATSUBSTRLENGTHINSTRLPAD|RPADTRIMREPLACE,,,大小寫轉(zhuǎn)換函數(shù),字符處理函數(shù),大小寫轉(zhuǎn)換函數(shù)CASECONVERSION,SQLCOURSE,LOWERSQLCOURSE,SQLCOURSE,INITCAPSQLCOURSE,SQLCOURSE,UPPERSQLCOURSE,結(jié)果,函數(shù),,,,,,,,,字符處理函數(shù),BLACKANDBLUE,REPLACEJACKANDJUE,J,BL,10,LENGTHHELLOWORLD,6,INSTRHELLOWORLD,W,24000,LPADSALARY,10,,24000,RPADSALARY,10,,HELLOWORLD,CONCATHELLO,WORLD,ELLOWORLD,TRIMHFROMHELLOWORLD,HELLO,SUBSTRHELLOWORLD,1,5,結(jié)果,函數(shù),,,,,,,,,,,,,,,,數(shù)字函數(shù),100,MOD1600,300,4593,ROUND45926,2,4592,TRUNC45926,2,結(jié)果,函數(shù),,,,,,,,,,,日期函數(shù),08SEP95,NEXT_DAY01SEP95,FRIDAY,28FEB95,LAST_DAY01FEB95,196774194,MONTHS_BETWEEN01SEP95,11JAN94,‘29FEB96,ADD_MONTHS‘31JAN96,1,RESULT,FUNCTION,,,,,,,,,,,01JUL03,TRUNCSYSDATE,MONTH,01JAN03,TRUNCSYSDATE,YEAR,01AUG03,ROUNDSYSDATE,MONTH,01JAN04,ROUNDSYSDATE,YEAR,,,,,,,,,,轉(zhuǎn)換函數(shù),,,隱式轉(zhuǎn)換,顯式轉(zhuǎn)換,數(shù)據(jù)類型轉(zhuǎn)換,數(shù)據(jù)類型的隱式轉(zhuǎn)換,,NUMBER,VARCHAR2ORCHAR,DATE,VARCHAR2ORCHAR,TO,FROM,,,,,,,,,,VARCHAR2ORCHAR,NUMBER,VARCHAR2ORCHAR,DATE,TO,FROM,,,,,,,,,,WHEREHIRE_DATE01JAN90,WHERENAME_VARCHAR2345,不建議使用隱式轉(zhuǎn)換,可能導(dǎo)致SQL的性能下降,數(shù)據(jù)類型的顯式轉(zhuǎn)換,,數(shù)字類型,字符類型,,,TO_CHAR,TO_NUMBER,日期類型,TO_CHAR,TO_DATE,日期轉(zhuǎn)換為字符,SELECTLAST_NAME,TO_CHARHIRE_DATE,FMDDMONTHYYYYASHIREDATEFROMEMPLOYEES,,,,數(shù)字轉(zhuǎn)換為字符,SELECTTO_CHARSALARY,99,99900SALARYFROMEMPLOYEESWHERELAST_NAMEERNST,字符轉(zhuǎn)換為日期、數(shù)字,SQLSELECTTO_NUMBER6,00000,99,99900FROMDUALTO_NUMBER6,00000,99,999006000,SQLSELECTTO_DATE20110818,YYYYMMDDFROMDUALTO_DATE20118AUG11,函數(shù)嵌套,,單行函數(shù)可以嵌套到任意層。函數(shù)的運(yùn)算順序是從內(nèi)到外。,,F3F2F1COL,ARG1,ARG2,ARG3,STEP1RESULT1,STEP2RESULT2,STEP3RESULT3,,,一般函數(shù),下面的函數(shù)與NULL值的使用有關(guān),條件表達(dá)式CONDITIONALEXPRESSIONS,IFTHENELSE的邏輯判斷有兩種方法CASEDECODE,CASEEXPRWHENCOMPARISON_EXPR1THENRETURN_EXPR1WHENCOMPARISON_EXPR2THENRETURN_EXPR2WHENCOMPARISON_EXPRNTHENRETURN_EXPRNELSEELSE_EXPREND,DECODECOL|EXPRESSION,SEARCH1,RESULT1,SEARCH2,RESULT2,,,DEFAULT,組函數(shù),,,對各組的數(shù)據(jù)行進(jìn)行運(yùn)算,每組返回一個值,EMPLOYEES,,MAXIMUMSALARYINEMPLOYEESTABLE,,,,組函數(shù)類型,,對各組的數(shù)據(jù)行進(jìn)行運(yùn)算,每組返回一個值,AVGCOUNTMAXMINSTDDEV平均差SUMVARIANCE方差,組函數(shù),,,,,數(shù)據(jù)分組GROUPBY,,,表EMPLOYEES,,,,,,,在EMPLOYEES表中,計算每個部門的平均工資,SELECTCOLUMN,GROUP_FUNCTIONCOLUMNFROMTABLEWHERECONDITIONGROUPBYGROUP_BY_EXPRESSIONORDERBYCOLUMN,多個列的GROUPBY,SELECTDEPARTMENT_IDDEPT_ID,JOB_ID,SUMSALARYFROMEMPLOYEESGROUPBYDEPARTMENT_ID,JOB_IDORDERBYDEPARTMENT_ID,組函數(shù)的使用,在SELECT子句中沒有使用組函數(shù)的數(shù)據(jù)列,必須在GROUPBY子句中列出,SELECTDEPARTMENT_ID,COUNTLAST_NAMEFROMEMPLOYEES,SELECTDEPARTMENT_ID,JOB_ID,COUNTLAST_NAMEFROMEMPLOYEESGROUPBYDEPARTMENT_ID,組函數(shù)的使用,,不能在WHERE子句中限制組,需要使用HAVING。不能在WHERE子句中使用組函數(shù)。,錯誤SELECTDEPARTMENT_ID,AVGSALARYFROMEMPLOYEESWHEREAVGSALARY8000GROUPBYDEPARTMENT_ID,正確SELECTDEPARTMENT_ID,AVGSALARYFROMEMPLOYEESGROUPBYDEPARTMENT_IDHAVINGAVGSALARY8000,組函數(shù)的嵌套,SELECTMAXAVGSALARYFROMEMPLOYEESGROUPBYDEPARTMENT_ID,多個表的數(shù)據(jù)查詢,SQL1999標(biāo)準(zhǔn)中的JOIN語法,使用JOIN從多個表中查詢數(shù)據(jù)TABLE1COLUMN表示表TABLE1中的列名NATURALJOIN用于對兩個表中相同的列進(jìn)行JOINJOINTABLE2USINGCOLUMN_NAME基于指定的列進(jìn)行對等JOINJOINTABLE2ONTABLE1COLUMN_NAMETABLE2COLUMN_NAME基于ON條件指定的列進(jìn)行對等JOINLEFT/RIGHT/FULLOUTER用于外連接CROSSJOIN進(jìn)行笛卡爾乘積,SELECTTABLE1COLUMN,TABLE2COLUMNFROMTABLE1NATURALJOINTABLE2|JOINTABLE2USINGCOLUMN_NAME|JOINTABLE2ONTABLE1COLUMN_NAMETABLE2COLUMN_NAME|LEFT|RIGHT|FULLOUTERJOINTABLE2ONTABLE1COLUMN_NAMETABLE2COLUMN_NAME|CROSSJOINTABLE2,NATURALJOIN,NATURALJOIN基于兩個表中所有相同的列返回兩個表中相同的列的值相同的數(shù)據(jù)行如果兩個表中,名字相同的列的數(shù)據(jù)類型定義不同,那么會返回錯誤,使用USING進(jìn)行JOIN,如果兩個表中的列名相同,但數(shù)據(jù)類型不同,那么可以使用USING進(jìn)行對等JOIN使用USING只能指定的一個名字相同的列,使用ON進(jìn)行JOIN,使用ON可以指定任意的條件或相關(guān)的列進(jìn)行JOIN使用ON可以增加語句的易讀性。,SELECTEEMPLOYEE_ID,ELAST_NAME,EDEPARTMENT_ID,DDEPARTMENT_ID,DLOCATION_IDFROMEMPLOYEESEJOINDEPARTMENTSDONEDEPARTMENT_IDDDEPARTMENT_ID,,,,使用ON進(jìn)行JOIN,,SELECTEMPLOYEE_ID,CITY,DEPARTMENT_NAMEFROMEMPLOYEESEJOINDEPARTMENTSDONDDEPARTMENT_IDEDEPARTMENT_IDJOINLOCATIONSLONDLOCATION_IDLLOCATION_ID,,,額外條件,,SELECTEEMPLOYEE_ID,ELAST_NAME,EDEPARTMENT_ID,DDEPARTMENT_ID,DLOCATION_IDFROMEMPLOYEESEJOINDEPARTMENTSDONEDEPARTMENT_IDDDEPARTMENT_IDANDEMANAGER_ID149,如要使用額外條件,可以使用AND或WHERE子句,,SELECTEEMPLOYEE_ID,ELAST_NAME,EDEPARTMENT_ID,DDEPARTMENT_ID,DLOCATION_IDFROMEMPLOYEESEJOINDEPARTMENTSDONEDEPARTMENT_IDDDEPARTMENT_IDWHEREEMANAGER_ID149,或,,自連接SELFJOIN,,自連接是指一個表與自己進(jìn)行JOIN,SELECTWORKERLAST_NAMEEMP,MANAGERLAST_NAMEMGRFROMEMPLOYEESWORKERJOINEMPLOYEESMANAGERONWORKERMANAGER_IDMANAGEREMPLOYEE_ID,,表EMPLOYEES,查詢結(jié)果,非對等連接NONEQUIJOINS,,,SELECTELAST_NAME,ESALARY,JGRADE_LEVELFROMEMPLOYEESEJOINJOB_GRADESJONESALARYBETWEENJLOWEST_SALANDJHIGHEST_SAL,,,,外連接OUTERJOINS,,,EMPLOYEES,DEPARTMENTS,THEREARENOEMPLOYEESINDEPARTMENT190,,,,內(nèi)連接和外連接,,在SQL1999標(biāo)準(zhǔn)中,只返回匹配記錄的JOIN稱為內(nèi)連接INNERJOIN除返回匹配記錄的結(jié)果外,還要從左邊右邊的表中返回不相匹配的數(shù)據(jù)記錄的JOIN稱為左外右外連接LEFT/RIGHTOUTERJOIN既返回內(nèi)連接的結(jié)果,又返回左外連接與右外連接的JOIN稱為全外連接FULLOUTERJOIN外連接種類LEFTOUTERRIGHTOUTERFULLOUTER,左外連接LEFTOUTERJOIN,,,SELECTELAST_NAME,EDEPARTMENT_ID,DDEPARTMENT_NAMEFROMEMPLOYEESELEFTOUTERJOINDEPARTMENTSDONEDEPARTMENT_IDDDEPARTMENT_ID,,,,全外連接LEFTOUTERJOIN,,,SELECTELAST_NAME,DDEPARTMENT_ID,DDEPARTMENT_NAMEFROMEMPLOYEESEFULLOUTERJOINDEPARTMENTSDONEDEPARTMENT_IDDDEPARTMENT_ID,,,,笛卡爾乘積CARTESIANPRODUCTS,,,以下情況會進(jìn)行笛卡爾乘積沒有JOIN條件JOIN條件無效所有數(shù)據(jù)都符合JOIN條件盡量避免笛卡爾乘積,子查詢SUBQUERY,,問題誰的工資比員工A高,,哪個員工的工資比員工A高,,主查詢,,員工A的工資是多少,,子查詢,,子查詢語法,,子查詢首先運(yùn)行子查詢的結(jié)果被主查詢使用子查詢放于小括號中單行操作符必須與單行子查詢匹配多行操作符必須與多行子查詢匹配,SELECTSELECT_LISTFROMTABLEWHEREEXPROPERATORSELECTSELECT_LISTFROMTABLE,,EXISTS,,EXISTS測試子查詢是否具有相關(guān)的數(shù)據(jù)行如果找到相關(guān)數(shù)據(jù)行子查詢停止運(yùn)行返回結(jié)果為TRUE如果沒有找到相關(guān)數(shù)據(jù)行返回結(jié)果為FALSE繼續(xù)子查詢,直到子查詢結(jié)束,NOTEXISTS和NOTIN,,如果子查詢返回NULL值,則NOTIN返回假當(dāng)沒有NULL值時NOTIN與NOTEXISTS效果相同,SELECTDEPARTMENT_ID,DEPARTMENT_NAMEFROMDEPARTMENTSDWHERENOTEXISTSSELECTXFROMEMPLOYEESWHEREDEPARTMENT_IDDDEPARTMENT_ID,查找哪個部門沒有員工表EMPLOYEES中有一行數(shù)據(jù)的DEPARTMENT_ID為NULL,SELECTDEPARTMENT_ID,DEPARTMENT_NAMEFROMDEPARTMENTSDWHEREDEPARTMENT_IDNOTINSELECTDEPARTMENT_IDFROMEMPLOYEES,NOROWSSELECTED,IN、ANY、ALL,,ANY意謂著大于子查詢結(jié)果的最小值A(chǔ)NY和IN的效果相同ANY中的子查詢?nèi)绻祷?行,則ANY,ANY,ANY,SELECTDEPT_AVGFROMAVG_COSTORDERBYDEPARTMENT_NAME,處理數(shù)據(jù),DMLDATAMANIPULATIONLANGUAGE,,,DML的作用添加新的數(shù)據(jù)到表中修改表中已有的數(shù)據(jù)刪除表中已有的數(shù)據(jù)事務(wù)由一系列的DML語句組成,成為一個邏輯工作單元。事務(wù)中的語句必須全部成功,否則必須全部回退。,
下載積分: 4 賞幣
上傳時間:2024-01-06
頁數(shù): 172
大?。?2.03(MB)
子文件數(shù):
-
簡介:歡迎學(xué)習(xí)MATLAB,MATLAB語言基礎(chǔ),主講教師陳梅蓮電子信息與控制工程學(xué)院,,,MATLAB課程介紹,定位公共基礎(chǔ)選修課目標(biāo)了解MATLAB,能夠熟練掌握數(shù)學(xué)(矩陣)運(yùn)算,簡單編程,簡單的數(shù)據(jù)處理及基本圖形繪制,教材自編教材特點(diǎn)完全不必具備其它語言的基礎(chǔ),各年級各專業(yè)的同學(xué)都可選修。,MATLAB課程安排,學(xué)時32學(xué)時(基于MATLAB42版本,介紹MATLAB6安排講課16學(xué)時,上機(jī)14學(xué)時,考試2學(xué)時考核要求不得缺勤,實(shí)驗(yàn)報告必須齊備??己朔绞娇荚?學(xué)習(xí)內(nèi)容一、MATLAB概述二、MATLAB的數(shù)值運(yùn)算、符號運(yùn)算三、MATLAB的二維、三維繪圖四、圖形化仿真程序設(shè)計五、MATLAB工具箱與跨平臺接口六、MATLAB6簡介七、MATLAB程序設(shè)計,第一節(jié)MATLAB語言概述,一、MATLAB語言的發(fā)展MATLAB語言是由美國的CLEVERMOLER博士于1980年開發(fā)的設(shè)計者的初衷是為解決“線性代數(shù)”課程的矩陣運(yùn)算問題取名MATLAB即MATRIXLABORATORY矩陣實(shí)驗(yàn)室的意思,它將一個優(yōu)秀軟件的易用性與可靠性、通用性與專業(yè)性、一般目的的應(yīng)用與高深的科學(xué)技術(shù)應(yīng)用有機(jī)的相結(jié)合MATLAB是一種直譯式的高級語言,比其它程序設(shè)計語言容易,MATLAB語言與其它語言的關(guān)系仿佛和C語言與匯編語言的關(guān)系一樣,,計算機(jī)語言的發(fā)展,標(biāo)志著計算機(jī)語言向“智能化”方向發(fā)展,被稱為第四代編程語言。,MATLAB已經(jīng)不僅僅是一個“矩陣實(shí)驗(yàn)室”了,它集科學(xué)計算、圖象處理;聲音處理于一身,并提供了豐富的WINDOWS圖形界面設(shè)計方法MATLAB語言是功能強(qiáng)大的計算機(jī)高級語言,它以超群的風(fēng)格與性能風(fēng)靡全世界,成功地應(yīng)用于各工程學(xué)科的研究領(lǐng)域,MATLAB在美國已經(jīng)作為大學(xué)工科學(xué)生必修的計算機(jī)語言之一C,FORTRAN,ASSEMBLER,MATLAB近年來,MATLAB語言已在我國推廣使用,現(xiàn)在已應(yīng)用于各學(xué)科研究部門和許多高等院校MATLAB語言不受計算機(jī)硬件的影響,286以上的計算機(jī)都可以使用,二、MATLAB能在各領(lǐng)域做什麼工業(yè)研究與開發(fā)數(shù)學(xué)教學(xué),特別是線性代數(shù)數(shù)值分析和科學(xué)計算方面的教學(xué)與研究電子學(xué)、控制理論和物理學(xué)等工程和科學(xué)學(xué)科方面的教學(xué)與研究經(jīng)濟(jì)學(xué)、化學(xué)和生物學(xué)等計算問題的所有其他領(lǐng)域中的教學(xué)與研究,例、用一個簡單命令求解線性系統(tǒng)3X1X2X336X12X24X321X14X25X314A311124145B362114XA\BX148180460603848,,對于線性系統(tǒng)有AXB,例、用簡短命令計算并繪制在0?X?6范圍內(nèi)的SIN2X、SINX2、SIN2X。XLINSPACE0,6Y1SIN2X,Y2SINX2,Y3SINX2PLOTX,Y1,X,Y2,X,Y3,階梯圖,用四種方法描述COSXSINY圖形,,,二、MATLAB語言的特點(diǎn)語言簡潔緊湊,語法限制不嚴(yán),程序設(shè)計自由度大,可移植性好運(yùn)算符、庫函數(shù)豐富圖形功能強(qiáng)大界面友好、編程效率高擴(kuò)展性強(qiáng),三、MATLAB語言的功能強(qiáng)大的數(shù)值(矩陣)運(yùn)算功能廣泛的符號運(yùn)算功能高級與低級兼?zhèn)涞膱D形功能(計算結(jié)果的可視化功能)可靠的容錯功能應(yīng)用靈活的兼容與接口功能信息量豐富的聯(lián)機(jī)檢索功能,1矩陣運(yùn)算功能,MATLAB提供了豐富的矩陣運(yùn)算處理功能,是基于矩陣運(yùn)算的處理工具。變量??矩陣,運(yùn)算??矩陣的運(yùn)算例如CAB,A,B,C都是矩陣,是矩陣的加運(yùn)算即使一個常數(shù),Y5,MATLAB也看做是一個1?1的矩陣,2符號運(yùn)算功能符號運(yùn)算即用字符串進(jìn)行數(shù)學(xué)分析允許變量不賦值而參與運(yùn)算用于解代數(shù)方程、微積分、復(fù)合導(dǎo)數(shù)、積分、二重積分、有理函數(shù)、微分方程、泰樂級數(shù)展開、尋優(yōu)等等,可求得解析符號解,3豐富的繪圖功能與計算結(jié)果的可視化,具有高層繪圖功能兩維、三維繪圖具有底層繪圖功能句柄繪圖使用PLOT函數(shù)可隨時將計算結(jié)果可視化,4圖形化程序編制功能,動態(tài)系統(tǒng)進(jìn)行建模、仿真和分析的軟件包用結(jié)構(gòu)圖編程,而不用程序編程只需拖幾個方塊、連幾條線,即可實(shí)現(xiàn)編程功能,5豐富的MATLAB工具箱,MATLAB主工具箱符號數(shù)學(xué)工具箱SIMULINK仿真工具箱控制系統(tǒng)工具箱信號處理工具箱圖象處理工具箱通訊工具箱系統(tǒng)辨識工具箱神經(jīng)元網(wǎng)絡(luò)工具箱金融工具箱,許多學(xué)科,在MATLAB中都有專用工具箱,現(xiàn)已有30多個工具箱,但MATLAB語言的擴(kuò)展開發(fā)還遠(yuǎn)遠(yuǎn)沒有結(jié)束,各學(xué)科的相互促進(jìn),將使得MATLAB更加強(qiáng)大,6MATLAB的兼容功能可與C語言、FORTURE語言跨平臺兼容用函數(shù)CMEX、FMEX實(shí)現(xiàn)此功能不推薦使用,7MATLAB的容錯功能非法操作時,給出提示,并不影響其操作1/0WARNINGDIVIDEBYZEROANSINF,8MATLAB的開放式可擴(kuò)充結(jié)構(gòu),MATLAB所有函數(shù)都是開放的用戶可按自己意愿隨意更改正因?yàn)榇斯δ?,使得MATLAB的應(yīng)用越來越廣泛9強(qiáng)大的聯(lián)機(jī)檢索幫助系統(tǒng)可隨時檢索MATLAB函數(shù)可隨時查詢MATLAB函數(shù)的使用方法,三、啟動MATLAB,開機(jī)執(zhí)行程序C\MATLAB\BIN\MATLABEXE用鼠標(biāo)雙擊MATLAB圖標(biāo))即可打開MATLAB命令平臺,,待機(jī)狀態(tài),工作窗出現(xiàn)以后,即可進(jìn)行各種操作,四、MATLAB界面,與WINDOWS的窗口界面類似,有菜單項(xiàng)FILE、EDIT、OPTION、WINDOWS、HELP等項(xiàng)可以選擇。,菜單項(xiàng)FILE,其功能如下NEW建立新文件OPENMFILE打開M文件OPENSELECTED打開選定文件SAVEWORKSPACEAS將工作區(qū)存為RUNMFILE運(yùn)行M文件LOOKFORSELECTED尋找選定文件PRINT打印PRINTSETUP打印設(shè)置EXITMATLAB退出MATLAB,,如果選擇OPTIONS\NUMERICFORMAT數(shù)字顯示格式)可以得出下一級子菜單,允許用戶設(shè)置MATLAB下結(jié)果數(shù)據(jù)的顯示格式。可從中選擇SHORT(默認(rèn)的簡潔格式)和LONG(高精度格式)等,由于各菜單項(xiàng)的選擇、執(zhí)行方法與WINDOWS風(fēng)格完全相同,就不一一說明了。,,五、MATLAB與DOS兼容命令1DIR可列出指定目錄下的文件和子目錄清單例如DIR可顯示當(dāng)前目錄下的所有文件DIRC\MATLABDIRC\MATLAB\M,2CD可改變當(dāng)前工作目錄CD__顯示當(dāng)前子目錄CDC\MATLAB\TOOLBOXCD_退出當(dāng)前子目錄到上一級目錄CD_\回到根目錄,TYPEMYFILEM與DOS下的用法完全一樣,3TYPE可顯示指定文件的全部內(nèi)容,4DELETE刪除指定文件,DELABC刪除當(dāng)前目錄下的ABC文件DELC\MATLAB\AAAM注意只可刪除用戶文件,其它文件不要輕易刪除,否則系統(tǒng)會癱瘓,六、MATLAB的數(shù)據(jù)與變量,變量查詢函數(shù)WHO與WHOS作用都是列出在MATLAB工作空間中已經(jīng)駐留的變量名清單不同的是WHOS在給出駐留變量的同時,還給出他們的維數(shù)及性質(zhì),,2永久變量,在MATLAB工作內(nèi)存中,駐留了幾個由系統(tǒng)本身在啟動時定義的變量,我們稱為永久變量永久變量用WHO指令是查看不到的,只可隨時調(diào)用,,EPS容差變量,定義為10到最近浮點(diǎn)數(shù)的距離,在PC機(jī)上252PI圓周率?的近似值31415926INF或INF表示正無大,定義為1/0NAN非數(shù),它產(chǎn)生于0?,0/0,?/?等運(yùn)算I,J虛數(shù)單位ANS對于未賦值運(yùn)算結(jié)果,自動賦給ANS,3WHAT程序查詢指令,WHAT按擴(kuò)展名分類列出當(dāng)前目錄上的文件WHATM列出當(dāng)前目錄中所有M文件,七、文件系統(tǒng)與路徑函數(shù),WHICH列出指定文件所在的目錄WHICHTESTM顯示TESTM所在的路徑PATH路徑函數(shù)PATH顯示MATLAB啟動時設(shè)定的搜索路徑,,PATHPATH,’C\MYDIR’將根目錄下的MYDIR臨時納入搜索路徑可將你需要的目錄永久納入MATLAB搜索路徑打開C\MATLAB\MATLABRCM文件在所有搜索路徑后加上‘C\MYDIR\’,,,八、MATLAB聯(lián)機(jī)幫助命令,HELP功能提供MATLAB大部分主題的在線幫助信息HELP顯示HELP主題一覽表HELPPLOTXYZ顯示有關(guān)三維做圖指令幫助信息HELP顯示特殊字符與符號幫助信息HELPHELP顯示HELP的幫助信息,雖然HELP可以隨時提供幫助,但必須知道準(zhǔn)確的函數(shù)名稱。當(dāng)不能確定函數(shù)名稱時,HELP就無能為力了。,LOOKFOR函數(shù)它可提供通過一般的關(guān)鍵詞,搜索出一組與之相關(guān)的命令LOOKFORFOURIER尋找含有傅立葉變換的相關(guān)指令,HELP、LOOKFOR兩個指令構(gòu)成了MATLAB語言相當(dāng)完善的在線幫助查詢系統(tǒng),LOOKFORFOURI尋找所有包含F(xiàn)OURI的指令和注釋如FFTDISCRETEFOURIERTRANSFORM,九、MATLAB的演示功能,INTRO入門演示DEMO在線演示,小結(jié)一、初步了解MATLAB二、熟悉MATLAB界面,進(jìn)行簡單操作。,
下載積分: 4 賞幣
上傳時間:2024-01-06
頁數(shù): 55
大小: 0.65(MB)
子文件數(shù):
-
簡介:MATLAB程序設(shè)計語言,任課教師劉毅,YLIUXIDIANEDUCN西安電子科技大學(xué)ISN國家重點(diǎn)實(shí)驗(yàn)室,MATLAB簡介,MATLAB名字是由MATRIX和LABORATORY兩個詞的前三個字母組合而成的,是一門計算語言。它是MATHWORKS公司于1982年推出的一套高性能的數(shù)值計算和可視化軟件,它集數(shù)值分析、矩陣運(yùn)算、信號處理和圖形顯示于一體,構(gòu)成了一個方便的、界面友好的用戶環(huán)境,被譽(yù)為“巨人肩上的工具”。由于使用MATLAB編程運(yùn)算與人進(jìn)行科學(xué)計算的思路和表達(dá)方式完全一致,所以不象學(xué)習(xí)其它高級語言如BASIC、FORTRAN和C等那樣難于掌握,用MATLAB編寫程序猶如在演算紙上排列出公式與求解問題,所以又被稱為演算紙式科學(xué)算法語言。在這個環(huán)境下,對所要求解的問題,用戶只需簡單地列出數(shù)學(xué)表達(dá)式,其結(jié)果便以數(shù)值或圖形方式顯示出來。,MATLAB自問世以來,就是以數(shù)值計算稱雄。MATLAB進(jìn)行數(shù)值計算的基本單位是復(fù)數(shù)數(shù)組(或稱陣列),這使得MATLAB高度“向量化”。經(jīng)過十幾年的完善和擴(kuò)充,現(xiàn)已發(fā)展成為線性代數(shù)課程的標(biāo)準(zhǔn)工具。由于它不需定義數(shù)組的維數(shù),并給出矩陣函數(shù)、特殊矩陣專門的庫函數(shù),使之在求解諸如信號處理、建模、系統(tǒng)識別、控制、優(yōu)化等領(lǐng)域的問題時,顯得大為簡捷、高效、方便,這是其它高級語言所不能比擬的。美國許多大學(xué)的實(shí)驗(yàn)室都安裝有MATLAB供學(xué)習(xí)和研究之用。在那里,MATLAB是攻讀學(xué)位的大學(xué)生、碩士生、博士生必須掌握的基本工具。,MATLAB簡介,MATLAB發(fā)展,MATLAB的首創(chuàng)者是在數(shù)值線性代數(shù)領(lǐng)域頗有影響的CLEVEMOLER博士MOLER博士等一批數(shù)學(xué)家和軟件家組成了MATHWORKS軟件公司,專門從事MATLAB的擴(kuò)展與改進(jìn)1980年推出了第一個版本1997年推出了MATLABV50現(xiàn)在已經(jīng)推出了MATLABR2007AWWWMATHWORKSCOM,MATLAB特點(diǎn),以復(fù)數(shù)矩陣(陣列)作為基本編程單元,使矩陣操作變得輕而易舉MATLAB語句書寫簡單MATLAB語句功能強(qiáng)大MATLAB系統(tǒng)具有豐富的圖形功能MATLAB提供許多面向應(yīng)用問題求解的工具箱函數(shù)MATLAB易于擴(kuò)展,課程安排,CHAPTER1MATLAB系統(tǒng)概述CHAPTER2MATLAB基本操作CHAPTER3MATLAB圖形系統(tǒng)CHAPTER4MATLAB程序設(shè)計CHAPTER5MATLAB基本應(yīng)用領(lǐng)域CHAPTER6數(shù)據(jù)陣列類型與結(jié)構(gòu)CHAPTER7字符串處理,CHAPTER1MATLAB系統(tǒng)概述,MATLAB系統(tǒng)組成MATLAB搜索路徑MATLAB工作空間MATLAB集成環(huán)境MATLAB通用命令,MATLAB系統(tǒng)組成,MATLAB系統(tǒng)主要成分包括MATLAB開發(fā)環(huán)境MATLAB數(shù)學(xué)函數(shù)庫編程與數(shù)據(jù)類型文件I/O圖形處理三維可視化創(chuàng)建圖形用戶界面外部接口,SIMULINK,SIMULINK是一種強(qiáng)有力的仿真工具,它能讓使用者在圖形方式下以最小的代價來模擬真實(shí)動態(tài)系統(tǒng)的運(yùn)行。SIMULINK準(zhǔn)備有數(shù)百種預(yù)定義系統(tǒng)環(huán)節(jié)模型,最先進(jìn)有效的積分算法和直觀的圖示化工具。依托SIMULINK強(qiáng)健的仿真能力,用戶可在原型機(jī)制造之前就可建立系統(tǒng)的模型,評估設(shè)計并修補(bǔ)瑕疵。SIMULINK作為一種圖形化的仿真工具,可用于對動態(tài)系統(tǒng)建模和控制規(guī)律的研究制定。由于支持線性、非線性、連續(xù)、離散、多變量和混合式系統(tǒng)結(jié)構(gòu),SIMULINK幾乎可分析任何一種類型的真實(shí)動態(tài)系統(tǒng)。,工具箱(TOOLBOXES),工具箱是針對各個應(yīng)用領(lǐng)域中的問題,擴(kuò)展MATLAB環(huán)境的MATLAB函數(shù)的集合。在工具箱種,MATLAB提供了許多實(shí)用的函數(shù),它給各個領(lǐng)域應(yīng)用人員帶來了方便。CONTROLSYSTEMCOMMUNICATIONSFINANCIALIMAGEPROCESSINGNEURALNETWORKSIGNALPROCESSINGWAVELET,MATLAB搜索路徑,MATLAB是通過搜索路徑來查找M文件的,其提供了很強(qiáng)的有關(guān)搜索路徑的管理功能。當(dāng)你輸入標(biāo)識符“VALUE”時,MATLAB會按照下列步驟處理1察看是否是變量2察看是否是內(nèi)部函數(shù)3察看當(dāng)前目錄下是否有文件VALUEM4察看查找目錄下是否有文件VALUEM。,MATLAB搜索路徑,MATLAB還專門提供了管理搜索路徑的路徑瀏覽器。,MATLAB搜索路徑,通過WHAT命令可以顯示出搜索路徑上的文件名如WHATWHATMATLAB/ELFUN要顯示指定文件的內(nèi)容,可采用TYPE命令如TYPERANK要對文件進(jìn)行編輯,可采用EDIT命令如EDITRANK,MATLAB集成環(huán)境,MATLAB的集成環(huán)境就是MATLAB的編程環(huán)境,在這一環(huán)境中提供了許多編寫、調(diào)試和執(zhí)行MATLAB程序的便利工具。,MATLAB集成環(huán)境,MATLAB命令窗口,命令歷史記錄窗口,工作空間窗口,MATLAB命令窗口,運(yùn)行MATLAB的可執(zhí)行文件,自動創(chuàng)建MATLAB指令窗口(COMMANDWINDOW)。這種指令窗如圖所示(演示)命令窗口的工作空間是輸入命令和輸出結(jié)果的窗口,在這里輸入的命令會立即得到執(zhí)行,并輸出。初學(xué)者,可以在指令窗鍵入DEMO,這可是學(xué)習(xí)的好幫手。一旦發(fā)現(xiàn)指令不知如何使用時,HELP命令將告訴你使用。,MATLAB集成環(huán)境,在MATLAB下進(jìn)行基本數(shù)學(xué)運(yùn)算,只需將運(yùn)算式直接打入提示號()之后,并按入ENTER鍵即可。MATLAB可以將計算結(jié)果以不同的精確度的數(shù)字格式顯示,我們可以在指令視窗上的功能選單上的FLIE下選PREFERENCES,更改NUMERICALFORMAT的屬性,或者直接在指令視窗中通過FORMAT命令加以控制。MATLAB利用了↑↓二個游標(biāo)鍵可以將所用過的指令叫回來重覆使用。按下↑則前一次指令重新出現(xiàn),之后再按ENTER鍵,即再執(zhí)行前一次的指令。而↓鍵的功用則是往后執(zhí)行指令。CTRLC(即同時按CTRL及C二個鍵)可以用來中止執(zhí)行中的MATLAB的工作。,MATLAB工作空間,MATLAB工作空間包含著本次MATLAB任務(wù)過程中所建立的變量,MATLAB給出了一組命令來管理、處理這些變量,同時還提供了專門的工作空間瀏覽器。,編輯M文件,將MATLAB語句按一定的順序結(jié)合在一起,就得到了MATLAB程序,其文件名的后綴為M,故稱為M文件MATLAB提供了M文件的專門編輯/調(diào)試器編輯器中,會以不同的顏色表示不同的內(nèi)容,這分成五種命令、關(guān)鍵字、不完整字符串、完整字符串及其它文本。這樣容易發(fā)現(xiàn)輸入錯誤,縮短調(diào)試時間啟動編輯器方式(2種)編輯器中可以直接計算表達(dá)式的值,結(jié)果顯示在命令窗口中TEXTEVALUTIONSELECTION可設(shè)置自動縮排的格式,以增加M文件的可讀性TEXTSMARTINDENT,MATLAB工作環(huán)境,MATLAB工作環(huán)境,MATLAB通用命令,管理命令和函數(shù)管理變量和工作空間控制命令窗口使用文件和工作環(huán)境啟動和退出MATLAB,管理命令和函數(shù),HELPMATLAB函數(shù)和M文件在線幫助VERSION版本號PATH控制MATLAB的目錄搜索路徑ADDPATH將目錄添加到MATLAB的搜索路徑上RMPATH從MATLAB的搜索路徑上刪除目錄WHATSNEW顯示出MATLAB&工具箱的README文件WHATM文件、MAT文件和MEX文件的目錄列表WHICH函數(shù)和文件定位TYPE列出文件DOC列出超文本說明LOOKFOR從所有幫助目錄中查找關(guān)鍵字LASTERR顯示上一個出錯信息ERROR顯示出錯信息PROFILE測量并顯示出M文件執(zhí)行的效率,管理變量和工作區(qū)間,WHO,WHOS列出內(nèi)存中的變量目錄DISP顯示文本或陣列CLEAR從內(nèi)存中刪除項(xiàng)目MLCOK防止M文件被刪除MUNLOCK允許刪除M文件LENGTH求向量長度SIZE求陣列尺寸SAVE將工作空間變量保存到磁盤LOAD從磁盤中恢復(fù)變量PACK釋放工作空間內(nèi)存,控制命令窗口,ECHO執(zhí)行過程中顯示M文件FORMAT控制輸出顯示格式MORE控制命令窗口的分頁顯示,使用文件和工作環(huán)境,DIARY在磁盤文件中保存任務(wù)DIR目錄列表CD改變工作目錄MKDIR建立目錄COPYFILE復(fù)制文件DELETE刪除文件和圖形對象EDIT編輯M文件INMEM獲得內(nèi)存中的函數(shù)MATLABROOT獲得MATLAB安裝目錄FULLFILE從部分中構(gòu)造文件全名FILEPARTS文件名部分TEMPDIR返回系統(tǒng)臨時工作目錄名TEMPNAME產(chǎn)生臨時文件的唯一文件名,啟動和退出MATLAB命令,QUIT終止(結(jié)束)MATLAB注不保留工作空間的內(nèi)容,
下載積分: 4 賞幣
上傳時間:2024-01-06
頁數(shù): 26
大?。?0.62(MB)
子文件數(shù):
-
簡介:第二章80X86計算機(jī),2180X86微處理器22基于微處理器的計算機(jī)系統(tǒng)構(gòu)成238086CPU和寄存器組24存儲器物理地址的形成25外部設(shè)備,開始,2180X86計算機(jī)組織,計算機(jī)主要由運(yùn)算器、控制器、存儲器、輸入和輸出設(shè)備構(gòu)成。20世紀(jì)70年代初期,由于大規(guī)模集成電路技術(shù)的發(fā)展,已經(jīng)開始把運(yùn)算器和控制器集成在一個芯片上,構(gòu)成中央處理機(jī)(CPU),80X86就是這樣一組微處理系列。CPU配上一定容量的存儲器,再配上輸入輸出設(shè)備和系統(tǒng)軟件等就構(gòu)成微型計算機(jī)系統(tǒng),如80386微處理器芯片構(gòu)成構(gòu)成的微機(jī)稱為386微機(jī),80486微處理器芯片構(gòu)成構(gòu)成的微機(jī)稱為486微機(jī)等。,返回本章首頁,22基于微處理器的計算機(jī)系統(tǒng)構(gòu)成,221硬件222軟件,返回本章首頁,221硬件,典型的計算機(jī)結(jié)構(gòu)包括由微處理芯片構(gòu)成的中央處理機(jī)(CPU)、存儲器(MEMORY)、和輸入輸出(I/O)、子系統(tǒng)三個主要組成部分,用系統(tǒng)總線把它們連接在一起。系統(tǒng)總線包括數(shù)據(jù)總線地址總線控制總線,222軟件,計算機(jī)軟件是計算機(jī)系統(tǒng)的重要組成部分,它可以分成系統(tǒng)軟件和應(yīng)用軟件兩部分。系統(tǒng)軟件是由計算機(jī)生產(chǎn)廠家提供給用戶的一組程序,是執(zhí)行用戶程序所必須的。系統(tǒng)軟件的核心為操作系統(tǒng),操作系統(tǒng)是系統(tǒng)程序的集合,其主要部分是常駐監(jiān)督程序,包括I/O驅(qū)動程序,文件管理程序,文件編輯程序,翻譯程序,連接程序,裝入程序,調(diào)試程序,系統(tǒng)程序庫。應(yīng)用軟件是用戶自行編制的各種程序,238086CPU和寄存器組,231INTEL8086CPU內(nèi)部結(jié)構(gòu)2328086寄存器組233標(biāo)志寄存器,返回本章首頁,231INTEL8086CPU內(nèi)部結(jié)構(gòu),,圖128086CPU內(nèi)部結(jié)構(gòu),圖128086CPU內(nèi)部結(jié)構(gòu),返回本節(jié),2328086寄存器組,,圖138086CPU寄存器分組,1.通用寄存器,(1)數(shù)據(jù)寄存器數(shù)據(jù)寄存器共有4個寄存器AX、BX、CX、DX,用來保存操作數(shù)或運(yùn)算結(jié)果等信息。AX寄存器稱為累加器。使用頻度最高,用于算術(shù)、邏輯運(yùn)算以及與外設(shè)傳送信息等。BX寄存器稱為基址寄存器。常用于存放存儲器地址。CX寄存器稱為計數(shù)器。一般作為循環(huán)或串操作等指令中的隱含計數(shù)器。DX寄存器稱為數(shù)據(jù)寄存器。常用來存放雙字?jǐn)?shù)據(jù)的高16位,或存放外設(shè)端口地址。,變址和指針寄存器包括SI、DI、SP、BP4個16位寄存器,主要用于存放某個存儲單元的偏移地址。SI是源變址寄存器,DI是目的變址寄存器,在字符串操作中,SI和DI都具有自動增量或減量的功能。SP為堆棧指針寄存器,用于存放當(dāng)前堆棧段中棧頂?shù)钠频刂罚籅P為基址指針寄存器,用于存放堆棧段中某一存儲單元的偏移地址。,(2)變址和指針寄存器,2.段寄存器,8086CPU的4個16位的段寄存器分別稱為代碼段寄存器CS,數(shù)據(jù)段寄存器DS,堆棧段寄存器SS,附加數(shù)據(jù)段寄存器ES。段寄存器用來確定該段在內(nèi)存中的起始地址。代碼段用來存放程序的指令序列。CS存放代碼段的段首址,指令指針寄存器IP指示代碼段中指令的偏移地址。,3.指令指針,8086CPU中的指令指針I(yè)P,它總是保存下一次將要從主存中取出指令的偏移地址,偏移地址的值為該指令到所在段段首址的字節(jié)距離。在目標(biāo)程序運(yùn)行時,IP的內(nèi)容由微處理器硬件自動設(shè)置,程序不能直接訪問IP,但一些指令卻可改變IP的值,如轉(zhuǎn)移指令、子程序調(diào)用指令等。,返回本節(jié),233標(biāo)志寄存器,8086CPU中有一個很重要的16位標(biāo)志寄存器,它包含9個標(biāo)志位,主要用于保存一條指令執(zhí)行后,CPU所處狀態(tài)信息及運(yùn)算結(jié)果的特征。1.條件標(biāo)志2.狀態(tài)控制標(biāo)志,1514131211109876543210,OFDFIFTFSFZFAFPFCF,1.條件標(biāo)志,(1)進(jìn)位標(biāo)志CF(2)零標(biāo)志ZF(3)符號標(biāo)志SF(4)溢出標(biāo)志OF(5)奇偶標(biāo)志PF(6)輔助進(jìn)位標(biāo)志AF,2.狀態(tài)控制標(biāo)志,(1)方向標(biāo)志DF(2)中斷允許標(biāo)志IF(3)追蹤標(biāo)志TF,返回本節(jié),24存儲器物理地址的形成,241存儲器242存儲器單元的地址和內(nèi)容243物理地址的形成,返回本章首頁,241存儲器,存儲器是計算機(jī)的記憶部件,用來存放程序和數(shù)據(jù)。按所在的位置,存儲器可以分成主存儲器和輔助存儲器。主存儲器存放當(dāng)前正在執(zhí)行的程序和使用的數(shù)據(jù),CPU可以直接存取,它由半導(dǎo)體存儲器芯片構(gòu)成,其成本高,容量小,但速度快。輔助存儲器可用來長期保存大量程序和數(shù)據(jù),CPU需要通過I/O接口訪問,它由磁盤或光盤構(gòu)成,其成本低,容量大,但速度較慢。,返回本節(jié),242存儲器單元的地址和內(nèi)容,存儲單元地址8086系統(tǒng)中,為了標(biāo)識和存取每一個存儲單元,給每個存儲單元規(guī)定一個編號,這就是存儲單元地址,地址從0開始編號,順序地每次加1,用二進(jìn)制表示,書寫格式為16進(jìn)制。16位二進(jìn)制數(shù)可以表示多少個字節(jié)單元的地址呢存儲單元的內(nèi)容一個存儲單元中存放的信息稱為該存儲單元的內(nèi)容,以字節(jié)為單位存儲信息。字節(jié)和字,圖14表明了存儲器中部分存儲單元存放信息情況。從圖14可看到,地址為34560H的字節(jié)的存儲單元中的內(nèi)容是34H,而地址為34561H的字節(jié)存儲單元中的內(nèi)容是12H。,,返回本節(jié),存儲單元的地址和內(nèi)容,?存儲器以字節(jié)(8BIT)為編程單位?每個字節(jié)單元都有唯一的地址編碼?地址用無符號整數(shù)來表示(編程用十六進(jìn)制表示)?一個字要占用相繼的兩個字節(jié)?低位字節(jié)存入低地址,高位字節(jié)存入高地址?字單元地址用它的低地址來表示?機(jī)器以偶地址訪問(讀/寫)存儲器,243物理地址的形成,8086CPU的地址線是20位的,這樣最大可尋址空間應(yīng)為2201MB,其物理地址范圍從00000H~FFFFFH。而8086CPU寄存器都是16位的。那么,這1MB空間如何用16位寄存器表達(dá)呢根據(jù)要求可把1M字節(jié)地址空間劃成若干邏輯段。每個邏輯段必須滿足兩個條件一是邏輯段的起始地址(簡稱段首址)必須是16的倍數(shù);二是邏輯段的最大長度為64K。按照這兩個條件,1M字節(jié)地址空間最多可劃分成64K個邏輯段,最少也能劃分成16個邏輯段。邏輯段與邏輯段可以相連,也可以不連,還可以重疊。,存儲器的邏輯地址與物理地址,邏輯地址,段地址偏移地址,10000000H,10000001H,10000002H,10000003H,10000004H,10000005H,10011111,00100110,01001000,10011111,10011111,10100011,10000H,10001H,10002H,10003H,10004H,10005H,物理地址,字節(jié)內(nèi)容(10000H)=9FH(10001H)=26H字內(nèi)容(10000H)=269FH;(10001H)=4826H,,,,,存儲器的分段,20根地址線地址范圍00000HFFFFFH(1MB)機(jī)器字長16位僅能表示地址范圍0000HFFFFH(64KB小段每16個字節(jié)為一小段,共有64K個小段小段的首地址00000H0000FH00010H0001FH00020H0002FHFFFF0HFFFFFH段起始地址小段首地址段的大小64K范圍內(nèi)的任意字節(jié),【例21】各獨(dú)立段的分配情況示例。,設(shè)CSB000H、DS1CDEH、SS4200H、ES0150H,它們分別為代碼段、數(shù)據(jù)段、堆棧段和附加段的段首址。自每個段首址開始,各段均占64KB的范圍,各段之間互不重疊。如圖15所示。,,【例22】各段相互重疊情況示例。,設(shè)CS0200H、DS0400H、SS0480H,這樣代碼段、數(shù)據(jù)段和堆棧段的物理首地址分別為02000H、04000H和04800H。其中代碼段占8KB地址空間,數(shù)據(jù)段占2KB,堆棧段占256B,SP0100H。如圖16所示。,,圖16各段重疊存儲單元分配圖,返回本節(jié),物理地址的計算方法,物理地址16?段地址偏移地址16位段地址0000,16位偏移地址,20位物理地址,,,例DS2100H,BX0500HPA21000H0500H21500H,寄存器與存儲器的比較,在CPU內(nèi)部在CPU外部訪問速度快訪問速度慢容量小,成本高容量大,成本低用名字表示用地址表示沒有地址地址可用各種方式形成,寄存器,存儲器,25外部設(shè)備,外部設(shè)備與主機(jī)(CPU和存儲器)的通信是通過外設(shè)接口(INTERFACE)進(jìn)行的,每個接口包括一組寄存器。數(shù)據(jù)寄存器存放外設(shè)和主機(jī)間傳送的數(shù)據(jù)狀態(tài)寄存器保存外設(shè)或接口的狀態(tài)信息命令寄存器保存CPU發(fā)給外設(shè)或接口的控制命令外設(shè)中每個寄存器有一個端口(PORT)地址,構(gòu)成一個獨(dú)立于內(nèi)存的I/O地址空間0000HFFFFH,第2章作業(yè),PAGE332225,THANKYOUVERYMUCH,本章到此結(jié)束,謝謝您的光臨,返回本章首頁,結(jié)束,
下載積分: 4 賞幣
上傳時間:2024-01-06
頁數(shù): 32
大?。?0.35(MB)
子文件數(shù):
-
簡介:第五章循環(huán)與分支程序設(shè)計,51循環(huán)程序設(shè)計52分支程序設(shè)計53如何在實(shí)模式下發(fā)揮80386及其后繼機(jī)型的優(yōu)勢,1編寫匯編語言程序步驟L分析實(shí)際問題,確定解決問題的算法L按算法畫出程序流程圖L按流程圖編寫程序L上機(jī)調(diào)試,運(yùn)行程序,注本教材所討論的編程環(huán)境只限于在DOS操作系統(tǒng)下的實(shí)模式,2判斷程序質(zhì)量的標(biāo)準(zhǔn)程序的正確性程序的可讀性程序的執(zhí)行時間程序所占內(nèi)存大小,3.幾種程序結(jié)構(gòu)順序結(jié)構(gòu)循環(huán)結(jié)構(gòu)分支結(jié)構(gòu)子程序結(jié)構(gòu),順序結(jié)構(gòu)形式,循環(huán)結(jié)構(gòu)形式,當(dāng)型循環(huán)當(dāng)條件成立進(jìn)入循環(huán),直到型循環(huán)直到條件成立退出循環(huán),,分支結(jié)構(gòu)形式,Y,Y,N,N,分支結(jié)構(gòu)形式,1.多處調(diào)用完成同一功能的子程CODESEGMENTSTART、、CALLSUBP、、CALLSUBP、、CALLSUBP、、MOVAH,4CHINT21HSUBPPROC、、、、RETSUBPENDPCODEENDSENDSTART,2.模塊化程序設(shè)計CODESEGMENTBEGINCALLSUB1CALLSUB2CALLSUB3MOVAH,4CHINT21HSUB1PROC、、RETSUB1ENDPSUB2PROC、、RETSUB2ENDPSUB3PROC、、RETSUB3ENDPCODEENDSENDBEGIN,,子程結(jié)構(gòu)形式,注意返回DOS語句位置,,511循環(huán)程序的結(jié)構(gòu)形式,51循環(huán)程序設(shè)計,(1)DOWHILE結(jié)構(gòu)(2)DOUNTIL結(jié)構(gòu),有關(guān)字符、數(shù)碼轉(zhuǎn)換的處理1計算機(jī)處理字符時,常用的字符編碼是ASCII碼。2數(shù)字和字母的ASCII碼是一個有序序列數(shù)字0930H39H大寫字母AZ41H5AH小寫字母AZ61H7AH,512循環(huán)程序設(shè)計方法,例51將寄存器BX中的內(nèi)容以十六進(jìn)制形式顯示出來。,BX是一個16位寄存器二進(jìn)制1010100100111110,用十六進(jìn)顯示時,每4位用一個字符顯示,共4個其中0000→’0’30H,1010→’A’41H0001→’1’31H,1011→’B’42H、、、、1001→’9’39H,1111→’F’46H,十六進(jìn)制A93E,屏幕上的顯示‘A’‘9’‘3’‘E’,對應(yīng)的ASCII41H39H33H45H,算法取出要顯示的某4位,轉(zhuǎn)換為對應(yīng)的ASCII碼,再調(diào)用DOS系統(tǒng)功能進(jìn)行顯示。,1對于00001001(09),先擴(kuò)展成一個字節(jié),高4位清0,加上30H后,即可得字符’0’’9’對應(yīng)的ASCII碼。00000001B30H31H00001001B30H39H0001B‘1’1001B‘9’,2對于10101111(AF),先擴(kuò)展成一個字節(jié),高4位清0,加上30H后,還要再加上07H,才能得到’A’’F’對應(yīng)的ASCII碼00001010B30H07H41H00001111B30H07H46H1010B‘A’1111B‘F’,CODESEGMENTASSUMECSCODESTARTMOVCH,4字符個數(shù)ROTATEMOVCL,4循環(huán)移位次數(shù)ROLBX,CL取顯示位的值MOVAL,BL保存在AL中ANDAL,0FH清除高4位ADDAL,30H轉(zhuǎn)變?yōu)閿?shù)字的ASCIICMPAL,3AH大于3AH,則應(yīng)轉(zhuǎn)變JLPRINT為數(shù)字09的ASCIIADDAL,07H為字母AF的ASCIIPRINTMOVDL,AL送ASCII字符到DLMOVAH,2顯示DL中的字符INT21HDECCH顯示結(jié)束JNZNEXTMOVAH,4CH返回DOSINT21HCODEENDSENDSTART,例52在ADDR單元中存放著數(shù)Y,度編制一程序把Y中1的個數(shù)存入COUNT單元中。,DATAREASEGMENTADDREDW1234HCOUNTDWDATAREAENDS,MOVCX,0MOVBX,ADDREMOVAX,BXAGAINTESTAX,0FFFFHJZEXITJNSSHIFTINCCXSHIFTSHLAX,1JMPAGAINEXITMOVCOUNT,CXRET,,例54將正數(shù)N插入一個已整序的字?jǐn)?shù)組的正確位置。XDWARRAY_HEADDW3,5,15,23,37,49,52,65,78,99ARRAY_ENDDW105NDW32MOVAX,NMOVARRAY_HEAD2,0FFFFHMOVSI,0COMPARECMPARRAY_ENDSI,AXJLEINSERTMOVBX,ARRAY_ENDSIMOVARRAY_ENDSI2,BXSUBSI,2JMPSHORTCOMPAREINSERTMOVARRAY_ENDSI2,AX,,,,,例55ZIXIYI,LOGIC_RULEDW00DCHMOVBX,0MOVCX,10MOVDX,LOGIC_RULENEXTMOVAX,XBXSHRDX,1JCSUBTRACTADDAX,YBXJMPSHORTRESULTSUBTRACTSUBAX,YBXRESULTMOVZBX,AXADDBX,2LOOPNEXTRET,例56鍵入一行以空格開頭以空格結(jié)束的字符串,DATAREASEGMENTBUFFERDB80DUPFLAGDBDATAREAENDS,LEABX,BUFFERMOVFLAG,0NEXTMOVAH,01讀鍵盤INT21H所讀內(nèi)容放入ALTESTFLAG,01HFLAG1JNZFOLLOWFLAG0,ZF1不轉(zhuǎn)CMPAL,20HAL是空格,JNZEXIT不是,ZF0退出MOVFLAG,1置標(biāo)志FLAG1JMPNEXTFOLLOWCMPAL,20HAL是空格JZEXIT是,ZF1,退出MOVBX,AL不是,保存INCBX數(shù)組索引加1JMPNEXTEXIT,,,20,A,B,C,D,E,F,20,,FLAG01JZEXIT成立,,,513多重循環(huán)程序設(shè)計,基本方法與單重循環(huán)相同,但要注意1、分別考慮各重循環(huán)的控制條件及其程序?qū)崿F(xiàn),相互之間不能混淆2、每次從外層循環(huán)再次進(jìn)入內(nèi)層循環(huán)時,初始條件要重新設(shè)置,,例57將首地址為A的字?jǐn)?shù)組從大到小排序(氣泡算法,多重循環(huán))ADW100,30,78,99,15,1,66,54,189,256MOVCX,10待排序數(shù)的個數(shù)DECCX外循環(huán)的次數(shù)LOOP1MOVDI,CX暫存外循環(huán)次數(shù)MOVBX,0數(shù)組下標(biāo)LOOP2MOVAX,ABX取第BX個數(shù)CMPAX,ABX2與后一個數(shù)比較JGECONTINUEBXBX2XCHGAX,ABX2,轉(zhuǎn)移,不換XCHGESDI2,AXMOVESDI,AXSUBBX,BX排序標(biāo)志CONTLOOPNEXTCMPBX,0BX1,已排好JEINITSORTEDMOVDI,START_ADDR,練習(xí)511從鍵盤輸入一系列以結(jié)束的字符串,統(tǒng)計數(shù)字字符的個數(shù),DATASEGMENTCOUNTDW0BUFFDB50DUPDATAENDSPROGNAMSEGMENTMAINPROCFARASSUMECSPROGNAMSTARTPUSHDSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXLEABX,BUFF取緩沖地址INPUTMOVAH,01從鍵盤讀串INT21H存入AL中MOVBX,AL保存字符,INCBXBUFF數(shù)組下標(biāo)CMPAL,‘‘是不是JNZINPUT是,結(jié)束讀LEABX,BUFF取串地址MOVAX,0NEXTMOVCL,BX取串中字符INCBX指向下一字符CMPCL,‘’是不是JZDISP是,ZF1,轉(zhuǎn)移CMPCL,30H與’0’比較JBCONT’9’,不計數(shù)INCAX計數(shù)CONTJMPNEXTDISPRETMAINENDPPROGNAMENDSENDSTART,,,,,,練習(xí)511測試一字符串是否存在數(shù)字,若存在,置CL第5位置1,否則置0,DATASEGMENTSTRINGDBABCQDEFGHIJKLMNOPQRSDATAENDSPROGNAMSEGMENTMAINPROCFARASSUMECSPROGNAM,DSDATA,ESDATASTARTPUSHDSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVES,AX,BEGINMOVCX,20字符個數(shù)MOVSI,0數(shù)組下標(biāo)AGAINMOVAL,STRINGSICMPAL,30H與’0’比較JBGOON,轉(zhuǎn)移ORCL,20H有數(shù)字,置5位JMPEXITGOONINCSI數(shù)組下標(biāo)加1LOOPAGAINANDCL,0DFH無數(shù)字,清5位EXITRETMAINENDPPROGNAMENDSENDSTART,,,,,,循環(huán)程序設(shè)計小結(jié)1、循環(huán)控制條件的選擇A循環(huán)次數(shù)已知,采用LOOPB循環(huán)次數(shù)已知,但有可能使用其他特征或條件結(jié)束循環(huán),可采用LOOPZ和LOOPNZC循環(huán)次數(shù)未知,具體問題具體分析2、設(shè)立條件標(biāo)志位的方法,52分支程序設(shè)計,521分支程序的結(jié)構(gòu)形式,雙分支與多分支的共同特點(diǎn)運(yùn)行方向是向前的在某一種特定條件下,只能執(zhí)行其中的一個分支,521分支程序設(shè)計方法,1、使用CMP、TEST等運(yùn)算型指令條件轉(zhuǎn)移指令2、使用邏輯尺的方法3、使用跳躍表法實(shí)現(xiàn)CASE結(jié)構(gòu),例59折半查找附加段有一個有序字?jǐn)?shù)組,首字表示數(shù)組長度,AX是待查字,若找到CF0,否則CF1,DSEGSEGMENTLOW_IDXDWHIGH_IDXDWLISTDW12,11,22,33,44,55,66,77,88,99,111,222,333TARGETDW77DSEGENDSCSEGSEGMENTMAINPROCFARASSUMECSCSEG,DSDSEG,ESDSEGSTARTPUSHDSSUBAX,AXPUSHAXMOVAX,DSEGMOVDS,AXMOVES,AX,例59折半查找附加段有一個有序字?jǐn)?shù)組,首字表示數(shù)組長度,AX是待查字,若找到CF0,否則CF1,MOVAX,TARGETLEADI,LIST取數(shù)組首地址CMPAX,ESDI2取第1個數(shù)JACHK_LAST第1個,檢查最后1個LEASI,ESDI2,’頭’到’末’之后ADDCX,DX以下三條計算SHRCX,1’頭’與’末’的中點(diǎn)MOVSI,CXSHLSI,1對準(zhǔn)中間’字’,15/23326DI偏移6,即106,即第3字,,COMPARECMPAX,ESBXSI比較,BX指向數(shù)組首元素JEEXIT=,找到,退出JAHIGHTER,調(diào)節(jié)搜索’頭’DECCXMOVHIGH_IDX,CX調(diào)節(jié)搜索’末’JMPMIDHIGHTERINCCXMOVLOW_IDX,CX調(diào)節(jié)搜索’頭’JMPMIDNO_MATCHSTCEXITRET,例59折半查找附加段有一個有序字?jǐn)?shù)組,首字表示數(shù)組長度,AX是待查字,若找到CF0,否則CF1,例510根據(jù)AL寄存器中哪一位為1(從低位到高位)把程序轉(zhuǎn)移到8個不同的程序分支去。,BRANCH_TABLEDWROUTINE1DWROUTINE2DWROUTINE3DWROUTINE4DWROUTINE5DWROUTINE6DWROUTINE7DWROUTINE8,注意DW標(biāo)號的使用,寄存器間接尋址,CMPAL,0JECONTINUELEABX,BRANCH_TABLELSHRAL,1邏輯右移,最低位進(jìn)入CF位JNBNOT_YETJNBJNC,CF0,轉(zhuǎn)移JMPWORDPTRBX段內(nèi)間接轉(zhuǎn)移NOT_YETADDBX,TYPEBRANCH_TABLEJMPLCONTINUEROUTINE1ROUTINE2,,調(diào)試源程序,變址尋址方式實(shí)現(xiàn),CMPAL,0JECONTINUEMOVSI,0LSHRAL,1邏輯右移,最低位進(jìn)入CF位JNBNOT_YETJNBJNC,CF0,轉(zhuǎn)移JMPBRANCH_TABLESI段內(nèi)間接轉(zhuǎn)移NOT_YETADDSI,TYPEBRANCH_TABLEJMPLCONTINUEROUTINE1ROUTINE2,,調(diào)試源程序,基址變址尋址,CMPAL,0JECONTINUELEABX,BRANCH_TABLEMOVSI,7TYPEBRANCH_TABLEMOVCX,8LSHLAL,1邏輯左移,最高位進(jìn)入CF位JNBNOT_YETJNBJNC,CF0,轉(zhuǎn)移JMPWORDPTRBXSI段內(nèi)間接轉(zhuǎn)移NOT_YETSUBSI,TYPEBRANCH_TABLELOOPLCONTINUEROUTINE1ROUTINE2,,調(diào)試源程序,習(xí)題521試寫一程序,要求比較數(shù)組ARRAY中的三個16位補(bǔ)碼數(shù),并根據(jù)比較結(jié)果在終端上顯示如下信息1如果三個數(shù)都不相等,則顯示02如果有兩個相等則顯示13如果都相等,則顯示2,DSEGSEGMENTARRAYDW3DUPDSEGENDSCSEGSEGMENTMOVCX,3LEASI,ARRAYBEGINPUSHCXMOVCL,4MOVDI,4MOVDL,’‘MOVAH,02INT21H,INPUTMOVAH,01HINT21HANDAL,0FHSHLDX,CLORDL,ALDECDIJNEINPUTMOVSI,DXADDSI,2POPCXLOOPBEGIN,,,,COMPALEASI,ARRAYMOVDX,0MOVAX,SIMOVBX,SI2CMPAX,BXJNENEXT1INCDXNEXT1CMPSI4,AXJNENEXT2INCDXNEXT2CMPSI4,BXJNENUMINCDX,NUMCMPDX,3JLDISPDECDXDISPMOVAH,2ADDDL,30HINT21HMAINENDPCSEGENDSENDSTART,,,,習(xí)題523已定義整型變量A、B1若只有一個奇數(shù),奇數(shù)存入A,偶數(shù)存入B2若兩個奇數(shù),AA1BB13若兩個偶數(shù),A、B值不變,BEGINMOVAX,AMOVBX,BXORAX,BXTESTAX,1HJZCLASS同奇同偶,轉(zhuǎn)移TEXTBX,1HJZEXIT,XCHGBX,AMOVB,BXJMPEXITCLASSTESTBX,1HJZEXIT若同偶,退出INCBINCAEXITRET,,,,,53如何在實(shí)模式下發(fā)揮80386及其后繼機(jī)型的優(yōu)勢,80386及其后繼機(jī)型不但兼容8086的程序,運(yùn)行速度更快;而且還有其它的一些優(yōu)勢,531充分利用高檔機(jī)的32位字長特征532通用寄存器可作為指針寄存器533與比例因子有關(guān)的尋址方式,調(diào)試源程序例511,通用寄存器作指針寄存器8個32位通用寄存器都可以作為基址或變址寄存器使用,但注意它們的高16位應(yīng)為0。,32位字長特征計算機(jī)一次能夠處理32位的數(shù)據(jù),可以訪問32位的8個通用寄存器,但EIP和EFLAGS在實(shí)模式下只有低16位可以使用。,比例因子方便了表格處理和多位數(shù)組處理,實(shí)模式段的大小限于64K,,實(shí)模式下的程序是一種混合的16位和32位代碼,純16位模塊1所有段長都小于64KB2數(shù)據(jù)項(xiàng)主要是8位或16位的3指向代碼或數(shù)據(jù)的指針只有16位偏移地址4只有16位段之間傳送控制,純32模塊1段長可大于64KB0-4GB2數(shù)據(jù)項(xiàng)主要是8位或32位的3指向代碼或數(shù)據(jù)的指針有32位偏移地址4只有32位段之間傳送控制,8086/80286實(shí)模式,80386保護(hù)模式,386實(shí)模式下的程序在同一模塊中,允許同時使用16位和32位的操作數(shù)和尋址方式段必須實(shí)16位的,但段中的指令可以是混合的16位和32位代碼,奔騰4,第五章作業(yè)PAGE193195510521,,
下載積分: 4 賞幣
上傳時間:2024-01-06
頁數(shù): 42
大?。?0.23(MB)
子文件數(shù):
-
簡介:第9章BIOS和DOS中斷調(diào)用程序設(shè)計,91鍵盤輸入中斷調(diào)用92顯示器輸出中斷調(diào)用,開始,DOS中斷和BIOS中斷,在存儲器系統(tǒng)中,內(nèi)存從0FE000H高端8K的ROM中存放有基本輸入輸出系統(tǒng)(BASICINPUT/OUTPUTSYSTEM,BIOS)例行程序。BIOS給PC系列的不同微處理器提供了兼容的系統(tǒng)加電自檢、引導(dǎo)裝入、主要I/O設(shè)備的處理程序以及接口控制等功能模塊來處理所有的系統(tǒng)中斷。使用BIOS功能調(diào)用,給程序員編程帶來極大方便。程序員不必了解硬件的具體細(xì)節(jié),可直接使用指令設(shè)置參數(shù),并中斷調(diào)用BIOS例行程序,所以利用BIOS功能調(diào)用編寫的程序簡潔,可讀性好,而且易于移植,磁盤操作系統(tǒng)(DISKOPERATINGSYSTEM)是PC機(jī)上最重要的操作系統(tǒng),它是由軟盤或硬盤提供的。它的兩個DOS模塊IBMBIOCOM和IBMDOSCOM使BIOS使用起來更方便。因?yàn)镈OS模塊提供了更多更必要的測試,使用DOS操作比使用相應(yīng)功能的BIOS操作更簡易,而且DOS對硬件的依賴性更少些。DOS模塊和ROMBIOS的關(guān)系如下圖所示。,DOS中斷和BIOS中斷使用方法,DOS功能調(diào)用與BIOS功能都通過軟件中斷調(diào)用。在中斷調(diào)用前需要把功能號裝入AH寄存器,把子功能號裝入AL寄存器,除此之外,還需要在CPU的寄存器中提供專門的調(diào)用參數(shù)。一般來說,調(diào)用DOS或BIOS功能時,有以下幾個步驟(1)將調(diào)用參數(shù)裝入指定的寄存器。(2)如需功能調(diào)用號,把它裝入AH。(3)如需子功能調(diào)用號,把它裝入AL。(4)按中斷號調(diào)用DOS或BIOS。(5)檢查返回參數(shù)是否正確。,表91BIOS中斷類型,地址(HEX)類型碼中斷名稱030除以0471單步8B2非屏蔽CF3斷點(diǎn)10134溢出14175打印屏幕181B6保留1D1F7保留20238定時器24279鍵盤282BA保留的硬中斷2C2FB異步通信(COM2)3033C異步通信(COM1)3437D硬盤383BE軟盤3C3FF并行打印機(jī),地址(HEX)類型碼中斷名稱404310視頻顯示I/O調(diào)用444711設(shè)備檢測調(diào)用484B12存儲器容量檢測4C4F13軟/硬盤I/O調(diào)用505314通信I/O調(diào)用545715盒式磁帶I/O調(diào)用585B16鍵盤I/O調(diào)用5C5F17打印機(jī)I/O調(diào)用606318ROMBASIC646719引導(dǎo)程序入口686B1A時間調(diào)用6C6F1B鍵盤CTRLBREAK控制70731C定時器報時74771D顯示器參數(shù)表787B1E軟盤參數(shù)表,,,,,,,,,,,,,,,,,,,,,,,7C7F1F字符點(diǎn)陣結(jié)構(gòu)參數(shù)表,BIOS中斷向量,表92DOS中斷類型,91鍵盤輸入中斷調(diào)用,911ASCII與掃描碼912BIOS鍵盤中斷913DOS中斷調(diào)用,911ASCII與掃描碼,鍵盤是計算機(jī)最基本的一種輸入設(shè)備,用來輸入信息,以達(dá)到人機(jī)對話的目的。鍵盤主要由3種基本類型的鍵組成(1)字符數(shù)字鍵(2)擴(kuò)展功能鍵如HOME、END、BACKSPACE、DELETE、INSERT、PGUP、PGDOWN以及功能鍵F1~F10(3)和其他鍵組合使用的控制鍵如ALT,CTRL,SHIFT等,鍵盤和主機(jī)通過5芯電纜相連,這5根線分別是電源線、地線、復(fù)位線以及鍵盤數(shù)據(jù)線和鍵盤時鐘線。PC機(jī)系列的鍵盤觸點(diǎn)電路按16行8列的矩陣來排列,用單片機(jī)INTEL8048來控制對鍵盤的掃描。按鍵的識別采用行列掃描法,即根據(jù)對行線和列線的掃描結(jié)果來確定閉合鍵的位置,這個位置值稱為按鍵的掃描碼,通過數(shù)據(jù)線將8位掃描碼送往主機(jī)。當(dāng)在鍵盤上“按下”或“放開”一個鍵時,如果鍵盤中斷是允許的(21H端口的第一位等于0),就會產(chǎn)生一個類型9的中斷,并轉(zhuǎn)入到BIOS的鍵盤中斷處理程序。,該處理程序從8255可編程外圍接口芯片的輸入端口讀取一個字節(jié),這個字節(jié)的低7位是按鍵的掃描碼。最高位為0或者為1,分別表示鍵是“按下”狀態(tài)還是“放開”狀態(tài)。按下時,取得的字節(jié)稱為通碼,放開時取得的字節(jié)稱為斷碼。如ESC鍵按下取得的通碼為01H(00000001B),放開ESC鍵時會產(chǎn)生一個斷碼81H(10000001B)。BIOS鍵盤處理程序?qū)⑷〉玫膾呙璐a轉(zhuǎn)換成相應(yīng)的字符碼,大部分的字符碼是一個標(biāo)準(zhǔn)的ASCII碼;沒有相應(yīng)ASCII的鍵,如ALT和功能鍵(F1~F10),字符碼為0;還有一些非ASCII碼鍵產(chǎn)生一個指定的操作。,鍵盤緩沖區(qū)鍵盤緩沖區(qū)是一個先進(jìn)先出的環(huán)形隊列,其所占內(nèi)存區(qū)域如下,鍵盤緩沖區(qū)是一個環(huán)形隊列,其性質(zhì)與數(shù)據(jù)結(jié)構(gòu)課程中對“環(huán)形隊列”所描述的性質(zhì)完全一致。雖然緩沖區(qū)的本身長度為16個字,但出于判斷“對列滿”的考慮,它最多只能保存15個鍵盤信息。當(dāng)緩沖區(qū)滿時,系統(tǒng)將不再接受按鍵信息,而會發(fā)出“嘟”的聲音,以示要暫緩按鍵。當(dāng)KBHEAD=KBTAIL時,表示無鍵盤輸入。,KBHEADDW其內(nèi)存地址為0000041AH,緩沖區(qū)頭指針KBTAILDW其內(nèi)存地址為0000041CH,緩沖區(qū)尾指針KBBUFFDW16DUP其內(nèi)存地址為0000041EH,該緩沖區(qū)的缺省長度為16個字,912BIOS鍵盤中斷,類型16H的中斷提供了基本的鍵盤操作,它的中斷處理程序包括3個不同的功能,分別根據(jù)AH寄存器中的子功能號來確定。(1)AH0本功能為從鍵盤讀字符到AL寄存器中。AL字符碼,AH掃描碼)(2)AH1本功能為讀鍵盤緩沖區(qū)字符到AL寄存器中,并置ZF標(biāo)志位。若ZF0,則AL字符碼,AH掃描碼,ZF1,緩沖區(qū)空)(3)AH2本功能為讀取特殊功能鍵的狀態(tài)。AL鍵盤狀態(tài)字節(jié)),CODESEGMENTASSUMECSCODEMOVAH,0INT16HMOVAH,4CHINT21HCODEENDSEND,從鍵盤讀字符,在計算機(jī)鍵盤上除了可輸入各種字符字母、數(shù)字和符號等的按鍵之外,還有一些功能鍵如F1、F2、等、控制鍵如CTRL、ALT、SHIFT等、雙態(tài)鍵如NUMLOCK、CAPSLOCK等和特殊請求鍵如PRINTSCREEN、SCROLLLOCK等。鍵盤中的控制鍵和雙態(tài)鍵是非打印按鍵,它們是起控制或轉(zhuǎn)換作用的。當(dāng)使用者按下控制鍵或雙態(tài)鍵時,系統(tǒng)要記住其所按下的按鍵。為此,在計算機(jī)系統(tǒng)中,特意安排的一個字來標(biāo)志這些按鍵的狀態(tài),我們稱該字為鍵盤狀態(tài)字。鍵盤狀態(tài)字的各位含義如圖所示。,鍵盤狀態(tài)字,CODESEGMENTASSUMECSCODEMOVAH,2INT16HMOVAH,4CHINT21HCODEENDSEND,讀取特殊功能鍵的狀態(tài),913DOS鍵盤功能調(diào)用(INT21H),無,GET_KEYMOVAH,1INT21HCMPAL,’Y’JEYESCMPAL,’N’JENOJNEGET_KEY,1)單字符輸入例92接收鍵盤輸入并對其進(jìn)行測試。,WAIT_HEREMOVAH,7INT21HCMPAL,0DHJNEWAIT_HERE,例93檢測鍵盤輸入的字符是否是回車鍵。,CODESEGMENTASSUMECSCODEMOVAH,7INT21HCMPAL,0JEGET_CHARJMPERRORGET_CHAR_MOVAH,7INT21HCMPAL,3BHF1JEOPTION1CMPAL,3CHF2JEOPTION2MOVAH,4CHINT21HCODEENDSEND,如果程序要求能接收功能鍵或數(shù)字組合鍵必須進(jìn)行兩次DOS功能調(diào)用第一次回送00第二次回送掃描碼,例94檢測鍵盤輸入的功能鍵。,DATASEGMENTSMAXDB21SACTDBSTRIDB21DUPDATAENDSCODESEGMENTASSUMECSCODE,DSDATASTARTMOVAX,DATAMOVDS,AXLEADX,STRIMOVAH,0AHINT21HMOVAH,4CHINT21HCODEENDSENDSTART,1SMAXDB21SACTDBSTRIDB21DUP2SMAXDB21DBDB21DUP3SMAXDB21,,21DUP,例95輸入字符串程序,2)輸入字符串,INT21的功能0CH能清除鍵盤緩沖區(qū),然后執(zhí)行在AL中指定的功能。AL中指定的功能可以是1,6,7,8或0AH。,MOVAH,0CHMOVAL,08HINT21HINCALJEEXITEXIT,3)清除鍵盤緩沖區(qū),例編寫按任意鍵結(jié)束程序的程序段,MOVAH,0BHINT21HINCALJEEXITEXIT,4)檢驗(yàn)鍵盤狀態(tài),顯示器可以簡單的分為單色顯示器和彩色顯示器。隨著顯示技術(shù)的發(fā)展,種類也更加豐富,常見的有陰極攝像管(CRT、液晶顯示器、等離子顯示器等。顯示器是通過顯卡與主機(jī)相連。顯示器的顯示屏通常稱之為屏幕,現(xiàn)在常用的顯示器有14“和17“,常用的顯示分辨率為800600或1024768等。常用的顯示卡類型為VGA、SVGA、EVGA和TVGA等,顯示卡上也都帶有大量的顯示存儲器,能快速顯示精美的圖象。1.MDAMDA(MONOCHROMEDISPLAYADAPTER)屬于單色顯示適配器,是IBM最早研制的視頻顯示適配器。2.CGA在MDA推出的同時,IBM也推出了彩色圖形顯示適配器──CGA(COLORGRAPHICSADAPTER)。,92顯示器I/O,3.EGA增強(qiáng)圖形顯示適配器──EGA(ENHANCEDGRAPHICSADAPTER)是IBM公司推出的第二代圖形顯示適配器,它兼容了MDA和CGA的全部功能。4.VGA視頻圖形陣列顯示適配器──VGA(VIDEOGRAPHICSARRAY)是IBM公司推出的第三代圖形顯示適配器,它兼容了MDA、CGA和EGA的全部功能。5XGAXGA(EXTENDEDGRAPHICSARRAY)是IBM公司繼VGA之后推出的擴(kuò)展圖形顯示適配器。,顯示模式計算機(jī)系統(tǒng)中的顯示器都有二種顯示方式文本顯示方式和圖形顯示方式。在DOS操作系統(tǒng)環(huán)境下,其默認(rèn)的顯示方式為文本顯示方式,而在WINDOWS操作系統(tǒng)環(huán)境下,其顯示方式是圖形顯示方式,其絕大多數(shù)操作界面是以圖形界面的窗口形式出現(xiàn)的。,文本顯示方式文本顯示方式是指以字符為最小單位的顯示方式,每個字符都是以矩形塊形式顯示的。在BIOSROM中存有多種不同大小的字符集,主要的顯示字符集大小為88標(biāo)準(zhǔn)、814和816等。在常用的文本顯示模式模式3下,屏幕被劃分成25行,每行可顯示80個字符,所以,每屏最多可顯示20008025個字符。為了便于標(biāo)識屏幕上的每個顯示位置,我們就用其所在行和列來表示之,并規(guī)定屏幕的左上角坐標(biāo)為0,0,右下角坐標(biāo)為24,79。在顯示字符時,用一個字節(jié)存儲該字符的ASCII碼,用另一個字節(jié)存儲的顯示屬性,即顯示顏色。在8025的文本顯示模式下,滿屏可顯示2000個字符,也就需要4000個字節(jié)來存儲一屏的顯示信息。,圖形顯示方式圖形顯示是目前最常用的一種顯示方式,也是WINDOWS操作系統(tǒng)的默認(rèn)顯示方式。在該顯示方式下,我們可以看到優(yōu)美的圖象、VCD、瀏覽豐富多彩的網(wǎng)頁等。圖形顯示的最小單位是象素,對每個象素可用不同的顏色來顯示。所以,在顯示緩沖區(qū)內(nèi)記錄的信息是屏幕各象素的顯示顏色。由于各種圖形顯示模式所能顯示的顏色和象素是不同的,它決定了顯示緩沖區(qū)的存儲方式也是不同的。下面給出三個具體的圖形顯示模式及其存儲方式,通過它們可看出各種顯示模式在顯示緩沖區(qū)存儲方式上的明顯差異。,4色320200圖形顯示模式由于每個象素只能是四種顏色之一,而四種情況用2位二進(jìn)制就可表示,所以,一個字節(jié)可表示4個象素的顯示顏色,存儲一行上的所有象素信息就需要80個字節(jié)。在具體存儲過程中,它又把偶數(shù)行象素和奇數(shù)行分開來存儲。偶數(shù)行和齊數(shù)行的象素總數(shù)各有32000個,也都需要8000個字節(jié)來存儲,并規(guī)定偶數(shù)行象素從0B8000000H開始存儲,奇數(shù)行象素從0B8002000H開始存儲。該顯示模式的存儲形式如圖所示。,16色640480圖形顯示模式640480圖形顯示模式共有307200個象素,每個象素可選用16種顏色,它需要用4位二進(jìn)制來表示。該顯示模式在存儲顯示信息時,把該4位分在四個位平面P1、P2、P3和P4上,所以,位平面PII1,2,3,4共有307200個二進(jìn)制位,即有38400個字節(jié)。其顯示緩沖區(qū)的存儲形式如圖所示。,256色320200圖形顯示模式表達(dá)256種不同顏色需要8位二進(jìn)制,即一個字節(jié)。在該模式下,其顯示緩沖區(qū)的存儲方式是非常簡單的,即第一個字節(jié)存儲第一個象素的顏色,第二個字節(jié)存儲第二個象素的顏色,以此類推,所以,存儲滿屏象素所需要的字節(jié)數(shù)為3202001=64000。其顯示緩沖區(qū)的存儲方式如圖所示。,從上面三種不同圖形顯示模式的介紹,不難看出各種顯示模式在顯示緩沖區(qū)存儲方式上的明顯差異,操作象素方法的難易程度相差也很大,所以,再次建議程序員不要用直接操作顯示緩沖區(qū)的辦法來達(dá)到改變顯示象素的目的,最好是通過BIOS內(nèi)的中斷功能來實(shí)現(xiàn)相應(yīng)的功能,這樣,所編寫的程序能很方便地適應(yīng)不同的圖形顯示模式。,921字符屬性顯示器的屏幕通常劃分為行和列的二維系統(tǒng),顯示適配器就在行列組成的網(wǎng)格位置上顯示字符。對應(yīng)屏幕上的每個字符位置,主存空間都有相應(yīng)的存儲單元與之對應(yīng),因此可說是顯示屏幕式“存儲器的映像”。對應(yīng)顯示屏幕上的每個字符,在存儲器中由連續(xù)的兩個字節(jié)表示,一個字節(jié)表示ASCII碼,另一個字節(jié)保存字符的屬性。,單色顯示的屬性值,76543210,,,背景,前景,,,閃爍,亮度,1、單色字符屬性,2、彩色字符顯示,彩色字符顯示屬性字節(jié),背景顏色組合,前景顏色組合,3顯示存儲器,對于所有的顯示適配器,文本方式下顯示字符的原理是一樣的,所不同的是顯存的起始地址不同,對于MDA,顯存的起始地址為B0000000;對于CGA、EGA、VGA是B8000000每個字符的ASCII碼和屬性碼字節(jié)存放于兩個連續(xù)的字節(jié)中。圖形顯示方式下,其顯示緩沖區(qū)段地址為0A000H。在25X80的文本顯示方式下,屏幕可有2000個字符位置,因每個字符需要用兩個字節(jié),顯存容量需要多少如果顯存有16K,可保存幾屏幕的數(shù)據(jù)對CGA,EGA和VGA的80列顯示方式,0頁的起始地址是B8000000,1頁的起始地址是B8001000,2頁的起始地址為B8002000,3頁的起始地址為B8003000。如何計算一個字符在顯存中的位置,922BIOS顯示中斷調(diào)用,10H中斷調(diào)用為顯示器中斷,共有17種功能。下面列出幾種主要功能的使用情況。(1)設(shè)置顯示方式(0號功能)入口參數(shù)AH0(功能號),AL設(shè)置方式(07)。出口參數(shù)無。(2)設(shè)置光標(biāo)類型(1號功能)入口參數(shù)AH1(功能號),CH光標(biāo)開始行,CL光標(biāo)結(jié)束行。出口參數(shù)無。根據(jù)CX給出光標(biāo)的大小。,(3)設(shè)置光標(biāo)位置(2號功能)入口參數(shù)AH2(功能號),BH頁號,DH行號,DL列號。出口參數(shù)無。根據(jù)DX確定了光標(biāo)位置。(4)讀當(dāng)前光標(biāo)位置(3號功能)入口參數(shù);AH3(功能號),BH頁號。出口參數(shù)DH行號,DL列號,CX光標(biāo)大小。(5)初始窗口或向上滾動(6號功能)入口參數(shù)AH6,AL上滾行數(shù),CX上滾窗口左上角的行、列號。DX上滾窗口右下角的行、列號。BH空白行的屬性。出口參數(shù)無。當(dāng)滾動后,底部為空白輸入行。,(6)初始窗口或向下滾動(7號功能)入口參數(shù)AH7,AL下滾行數(shù),CX下滾窗口左上角的行、列號。DX下滾窗口右下角的行、列號。BH空白行的屬性。出口參數(shù)無。當(dāng)滾動后,頂部為空白輸入行。(7)讀當(dāng)前光標(biāo)位置的字符與屬性(8號功能)入口參數(shù)AH08H,BH頁號。出口參數(shù)AL為讀出的字符,AH為字符屬性。,(8)在當(dāng)前光標(biāo)位置寫字符和屬性(9號功能)入口參數(shù)AH9,BH頁號,AL字符的ASCII碼,BL字符屬性,CX寫入字符重復(fù)次數(shù)。出口參數(shù)無。(9)在當(dāng)前光標(biāo)位置寫字符(10號功能)入口參數(shù)AH0AH,BH頁號,AL字符的ASCII碼,CX寫入字符重復(fù)次數(shù)。出口參數(shù)無。,10)顯示字符串(13號功能)ESBP串地址CX串長度DH,DL起始行列BH頁號AL0,BL屬性串CHAR,CHARCHAR光標(biāo)返回到起始位置AL1,BL屬性串CHAR,CHARCHAR光標(biāo)跟隨串移動AL2串CHAR,CHARCHAR光標(biāo)返回起始位置AL3串CHAR,CHARCHAR光標(biāo)跟隨串移動,CODESEGMENTASSUMECSCODESTARTMOVCH,5MOVCL,7MOVAH,1INT10HMOVDH,5MOVDL,6MOVBH,0MOVAH,2INT10HMOVAH,4CHINT21HCODEENDSENDSTART,例置光標(biāo)開始行為5,結(jié)束行為7,并把它設(shè)置到第五行第六列,設(shè)置光標(biāo)位置(2號功能)入口參數(shù)AH2(功能號),BH頁號,DH行號,DL列號。出口參數(shù)無。根據(jù)DX確定了光標(biāo)位置。,設(shè)置光標(biāo)類型(1號功能)入口參數(shù)AH1(功能號),CH光標(biāo)開始行,CL光標(biāo)結(jié)束行。出口參數(shù)無。根據(jù)CX給出光標(biāo)的大小。,例編寫清除全屏幕的程序,CLEARSEGMENTASSUMECSCLEARMOVAH,6MOVAL,0MOVBH,7MOVCH,0MOVCL,0MOVDH,24MOVDL,79INT10HMOVDX,2MOVAH,2INT10HMOVAH,4CHINT21HCLEARENDSEND,初始窗口或向上滾動(6號功能)入口參數(shù)AH6,AL上滾行數(shù),CX上滾窗口左上角的行、列號。DX上滾窗口右下角的行、列號。BH空白行的屬性。出口參數(shù)無。當(dāng)滾動后,底部為空白輸入行。,設(shè)置光標(biāo)位置(2號功能)入口參數(shù)AH2(功能號),BH頁號,DH行號,DL列號。出口參數(shù)無。根據(jù)DX確定了光標(biāo)位置。,,,例清除左上角為(00)右下角為(24,39)的窗口,初始化為反相顯示。該窗口相當(dāng)于屏幕的左上角,CLEARSEGMENTASSUMECSCLEARMOVAH,7MOVAL,0MOVBH,70HMOVCH,0MOVCL,0MOVDH,24MOVDL,39INT10HMOVDX,2MOVAH,2INT10HMOVAH,4CHINT21HCLEARENDSEND,設(shè)置光標(biāo)位置(2號功能)入口參數(shù)AH2(功能號),BH頁號,DH行號,DL列號。出口參數(shù)無。根據(jù)DX確定了光標(biāo)位置。,初始窗口或向下滾動(7號功能)入口參數(shù)AH7,AL下滾行數(shù),CX下滾窗口左上角的行、列號。DX下滾窗口右下角的行、列號。BH空白行的屬性。出口參數(shù)無。當(dāng)滾動后,頂部為空白輸入行。,,,例在屏幕中心顯示小窗口,DATASEGMENTESC_KEYEQU1BHWIN_ULCEQU30WIN_ULREQU8WIN_LRCEQU50WIN_LRREQU16WIN_WIDTHEQU20DATAENDSCODESEGMENTASSUMECSCODE,DSDATASTARTMOVAH,2MOVDH,WIN_LRRMOVDL,WIN_ULCMOVBH,0INT10HMOVCX,WIN_WIDTHGET_CHARMOVAH,1INT21H,CMPAL,ESC_KEYJZEXITLOOPGET_CHARMOVAH,6MOVAL,1MOVCH,WIN_ULRMOVCL,WIN_ULCMOVDH,WIN_LRRMOVDL,WIN_LRCMOVBH,7INT10HJMPSTARTEXITMOVAH,4CHINT21HCODEENDSEND,,設(shè)置光標(biāo)位置(2號功能)入口參數(shù)AH2(功能號),BH頁號,DH行號,DL列號。出口參數(shù)無。根據(jù)DX確定了光標(biāo)位置。,初始窗口或向上滾動(6號功能)入口參數(shù)AH6,AL上滾行數(shù),CX上滾窗口左上角的行、列號。DX上滾窗口右下角的行、列號。BH空白行的屬性。出口參數(shù)無。當(dāng)滾動后,底部為空白輸入行。,,例在品紅背景下,顯示5個淺綠色閃爍的星號,CODESEGMENTASSUMECSCODESTARTMOVAH,9MOVAL,MOVBH,0MOVBL,0DAHMOVCX,5INT10HMOVAH,4CHINT21HCODEENDSENDSTART,在當(dāng)前光標(biāo)位置寫字符和屬性(9號功能)入口參數(shù)AH9,BH頁號,AL字符的ASCII碼,BL字符屬性,CX寫入字符數(shù)。出口參數(shù)無。,,在屏幕上以紅底藍(lán)字顯示字符串“WORLDSCENERY”,DATASEGMENTSTRINGDBWORLDSCENEARLENEQUSTRINGDATAENDSCODESEGMENTASSUMECSCODESTARTMOVAH,0MOVAL,3INT10HMOVBP,SEGSTRINGMOVES,BPMOVBP,OFFSETSTRING,MOVCX,LENMOVDX,0MOVBL,41HMOVAL,0MOVAH,13HINT10HMOVAH,4CHINT21HCODEENDSENDSTART,設(shè)置顯示方式(0號功能)入口參數(shù)AH0(功能號),AL設(shè)置方式(07)。出口參數(shù)無。,10)顯示字符串(13號功能)ESBP串地址CX串長度DH,DL起始行列BH頁號AL0,BL屬性串CHAR,CHARCHAR光標(biāo)返回到起始位置AL1,BL屬性串CHAR,CHARCHAR光標(biāo)跟隨移動AL2串CHAR,CHARCHAR光標(biāo)返回起始位置AL3串CHAR,CHARCHAR光標(biāo)跟隨移動,例用直接寫屏方式在屏幕第5行、第10列以黃色0EH顯示字符串“HELLO“。解在文本顯示方式下,每行顯示80個字符,每個字符占2個字節(jié),所以,顯示一行需要160個字節(jié)。若在第M行、第N列位置顯示字符,則該位置所對應(yīng)存儲單元的偏移量為M160N2。,MODELSMALLDATAYELLOWEQU0EHMSG1DB“WELCOME“COUNTEQUMSG1CODESTARTUPMOVAX,0B800HMOVES,AX彩色顯示器的顯示緩沖區(qū)段地址MOVDI,5IMULDI,1605行所跳過的顯示存儲單元,MOVCX,10SHLCX,110列所跳過的顯示存儲單元ADDDI,CX第5行、第10列之前所跳過的所有顯示單元MOVCX,COUNTLEASI,MSG1CX字符個數(shù),SI顯示字符首地址MOVAH,YELLOW設(shè)置顯示屬性,即顯示顏色REPEATLODSB取顯示字符STOSW向顯示緩沖區(qū)設(shè)置顯示字符和屬性UNTILCXZEXIT0END,923DOS顯示功能,計算機(jī)與外設(shè)交換信息的過程中并行通信多位數(shù)據(jù)通過多條數(shù)據(jù)線同時傳送。串行通信多位數(shù)據(jù)通過同一條數(shù)據(jù)線按位傳送。并行通信就是把一個字符的各數(shù)位用幾條線同時進(jìn)行傳輸。與串行通信(一位一位傳輸)相比,在相同傳輸率下,并行通信的信息實(shí)際傳輸速度快、信息率高。但并行通信比串行通信所用電纜多,隨著距離的增加,電纜的開銷會成為突出的問題。所以,并行通信總是用在數(shù)據(jù)傳輸率要求較高,而傳輸距離較短的場合。,93串行通信口I/O,串行通信可以分為兩種類型同步通信、異步通信。,異步通信,一個字符一個字符地傳輸,每個字符一位一位地傳輸,傳輸一個字符時,以起始位開始,然后傳輸字符本身的各位,接著傳輸校驗(yàn)位,最后以停止位結(jié)束該字符的傳輸。一次傳輸?shù)钠鹗嘉?、字符各位、校?yàn)位、停止位構(gòu)成一組完整的信息,稱為幀(FRAME)。幀與幀之間可有任意個空閑位。起始位之后時數(shù)據(jù)的最低位。,在異步通信中,每個字符都要用起始位作為字符的開始和結(jié)束的標(biāo)志,占用了傳輸?shù)臅r間,所以在數(shù)據(jù)塊傳送時,為了提高效率,就要去掉這些標(biāo)志,采用同步通信。同步通信方式不給每個字符都加起始位和停止位,而把字符順序的連接起來,組成一個數(shù)據(jù)塊(首尾相連的數(shù)據(jù)串),把這樣一個數(shù)據(jù)塊稱為一個信息楨。在數(shù)據(jù)的開始加上一個同步字符,而在信息的末尾加有一定的差錯檢驗(yàn)字符,其格式如下,同步通信,,,,,,,同步字符字符1字符2字符N校驗(yàn)字符,,數(shù)據(jù)塊,實(shí)現(xiàn)串行通信有專用的接口芯片,常用的有USART通用同步/異步接收/發(fā)送器如INTEL8251和UART通用異步接收/發(fā)送器如INS8250。無論是UART,還是USART,均能實(shí)現(xiàn)數(shù)據(jù)發(fā)送時所需要的并串轉(zhuǎn)換以及數(shù)據(jù)被CPU接收時所需要的串并轉(zhuǎn)換。,串行通信接口,串行通信基礎(chǔ),起始位,最低位,最高位,奇偶位,停止位,,,,,數(shù)據(jù)位,起始位邏輯01位數(shù)據(jù)位邏輯0或15位、6位、7位、8位校驗(yàn)位邏輯0或11位或無停止位
下載積分: 4 賞幣
上傳時間:2024-01-06
頁數(shù): 89
大?。?0.33(MB)
子文件數(shù):
-
簡介:語言學(xué)論文選題與思路南京大學(xué)陳新仁CXR3354182163COM,常見困惑選題是否有新意或價值選題是否可行選題如何打開思路,選題一個原則,選題要新穎選題路徑學(xué)科方向領(lǐng)域課題話題問題課題一般是理論前沿關(guān)注對象,話題一般是語言或語用現(xiàn)象。選題新學(xué)科前沿課題(特別是學(xué)科交叉性課題)隱喻、轉(zhuǎn)喻、范疇化、語法化、構(gòu)式語法、認(rèn)知句法語用推理、語用預(yù)設(shè)、機(jī)構(gòu)性話語、社會用語、詞匯/語義語用、句法語用、身份話語、批評語用、社會心理語用詞匯習(xí)得、語法習(xí)得、語音習(xí)得、語用習(xí)得/寫作能力、閱讀能力、聽說能力、口語能力、口譯能力,兩個誤區(qū),人家研究很多的東西,沒有多少好研究的了。要看研究目標(biāo)要看研究問題要看研究框架“問題意識”于無聲處聽驚雷人家從沒有研究過的東西一定有價值?!疤钛a(bǔ)空白”,哪些選題會有可能創(chuàng)新,面向新的語言現(xiàn)象(如“被自殺”、“被自愿”、“被就業(yè)”等語法錯誤的“被”句式)解釋性研究面向舊語言現(xiàn)象的新方面(如語碼轉(zhuǎn)換對二語學(xué)習(xí)者民族認(rèn)同的影響)面向特定語言理論(補(bǔ)充修正完善)面向?qū)W科交叉點(diǎn)(社會心理學(xué)與語用學(xué)語碼轉(zhuǎn)換)理論研究尋求共性語言共性、語用共性、認(rèn)知共性等應(yīng)用研究尋求對策面向規(guī)劃、政策、實(shí)踐(教學(xué)、翻譯等)選題要有理論指向性和實(shí)踐針對性。,哪些選題不會有創(chuàng)新,選題太大、太泛【“語法的認(rèn)知研究”、“漢英語氣系統(tǒng)的對比分析”、“認(rèn)知語法初探”】;太微觀,沒有一般理論性價值【“英語冠詞THE的教學(xué)探索”】;選題面向經(jīng)驗(yàn)總結(jié)(啟示、漫談);【“外語學(xué)習(xí)策略淺談”】完全重復(fù)別人的研究;【“合作原則與幽默解讀”】結(jié)論指向某種常識(如試圖發(fā)現(xiàn)語碼轉(zhuǎn)換的使用者一般都會使用兩種語碼)或空泛的東西;【“學(xué)生水平與作文評改關(guān)系研究”】,選題指向不太可能有解、結(jié)論的結(jié)果;【“英語名詞與動詞習(xí)得難度比較研究”】考察的變量不重要或不相關(guān);【“不同語種對語碼轉(zhuǎn)換頻率的影響研究”】所用理論的目標(biāo)與課題目標(biāo)不一致;【“語碼轉(zhuǎn)換的關(guān)聯(lián)/模因論視角”】語料沒有質(zhì)的變化(如換一個劇本研究語碼轉(zhuǎn)換“解讀海角七號中的語碼轉(zhuǎn)換”、“大雷雨舞臺指示詞作用分析”)。,選題思路三個出發(fā)點(diǎn),從觀察到的語言現(xiàn)象出發(fā)從特定的理論出發(fā)找應(yīng)用、找證據(jù)、找反例(挑刺)、找漏洞(特定理論不能解釋的例子)從現(xiàn)有文獻(xiàn)出發(fā)(文獻(xiàn)中指出的方向、文獻(xiàn)中存在的不一致解釋、文獻(xiàn)中未涉及的方面)從爭議入手,(從文獻(xiàn)出發(fā)的)四個難點(diǎn),找文獻(xiàn)難歸納難(不能堆砌、羅列)評價難(不能不批,不能只批)找突破口難【可以審核、比較定義、分類、方法(各環(huán)節(jié))、結(jié)論,找分歧或矛盾】,跟著興趣走要建立與現(xiàn)有研究、理論的聯(lián)系跟著雜志走緊盯核心刊物發(fā)表文章跟著大師走跟風(fēng)人家做什么,我做什么“炒冷飯”,研究思路五個定位,學(xué)科/領(lǐng)域定位(特定學(xué)科/子學(xué)科/交叉學(xué)科)課題定位(相關(guān)文獻(xiàn)創(chuàng)新)理論定位(使用、完善、建構(gòu)什么理論(假設(shè)、模型、機(jī)制等)應(yīng)用定位(實(shí)用價值)方法定位(相關(guān)文獻(xiàn)),理論新(舊現(xiàn)象)概念化、原型理論、心理空間理論、概念整合理論、雜糅理論合作原則、面子理論、禮貌原則、新格賴斯理論、順應(yīng)論、關(guān)聯(lián)論、模因論()輸入假設(shè)、輸出假設(shè)、互動假設(shè)、頻率假設(shè)、語塊理論【最好只用一種主體理論】視角新認(rèn)知語義學(xué)視角、認(rèn)知語用學(xué)視角、認(rèn)知句法視角、社會心理語用視角、歷時視角,定義新工作定義、操作定義、結(jié)論性定義分類新功能定義、形式定義框架/構(gòu)念CONSTRUCT新從某些方面描述特定語言或語用現(xiàn)象,如“人際化”、評價系統(tǒng)。,觀點(diǎn)新方法新實(shí)證(個案、實(shí)驗(yàn)、調(diào)查、語料庫、跟蹤、歷時等)工具新調(diào)查工具、測試工具證據(jù)新例子或語料新等等,思路示范“一詞多義現(xiàn)象的認(rèn)知語義學(xué)研究”“模因論視角下的社會流行語研究”現(xiàn)象呈現(xiàn)文獻(xiàn)(其他視角及未回答的問題)新的理論新理論指導(dǎo)下的分析(實(shí)質(zhì)、過程、方式、機(jī)制、動因、影響、分類等)結(jié)論“中國大學(xué)生習(xí)得英語稱呼語的實(shí)證研究”“英語專業(yè)學(xué)生使用英語介詞情況的跟蹤研究”習(xí)得對象的提出(重要性、習(xí)得困難等)文獻(xiàn)回顧(相關(guān)、相鄰對象的研究情況)實(shí)驗(yàn)設(shè)計(研究問題變量關(guān)系、調(diào)查對象、數(shù)據(jù)收集與分析)調(diào)查結(jié)果與分析(對結(jié)果做解讀或解釋)結(jié)論,,,,,,,,,謝謝,
下載積分: 4 賞幣
上傳時間:2024-01-06
頁數(shù): 16
大?。?0.5(MB)
子文件數(shù):
-
簡介:從項(xiàng)目申報談外語研究,南京大學(xué)外國語學(xué)院陳新仁CXR3354182163COM語言學(xué)之家WWWCXRLINGUISTICSCOM外國語文研究,2024/3/25,DEPTOFENGLISHNANJINGUNIVERSITY,2,目錄,,引言選題論證設(shè)計結(jié)語,1、引言,外語教師的兩大要務(wù)做研究、拿項(xiàng)目(“理想”狀況基于項(xiàng)目做研究)會研究未必會申報項(xiàng)目會申報項(xiàng)目未必會研究不過,二者之間是相關(guān)的會研究的往往也會報項(xiàng)目;反之,會報項(xiàng)目的也往往會研究。二者都涉及選題、論證、設(shè)計,2024/3/25,DEPTOFENGLISHNANJINGUNIVERSITY,3,2024/3/25,DEPTOFENGLISHNANJINGUNIVERSITY,4,適合寫一般論文的選題往往不適合做項(xiàng)目的選題教育部人文社科項(xiàng)目關(guān)于課題的評審標(biāo)準(zhǔn)“選題具有重要的理論意義或現(xiàn)實(shí)意義,鼓勵理論聯(lián)系實(shí)際、研究新情況、總結(jié)新經(jīng)驗(yàn)、回答新問題?!?二、選題,選題關(guān)鍵,要把握學(xué)科熱點(diǎn),具有前沿性要有一定的理論性要有當(dāng)下性或現(xiàn)實(shí)性要有針對性,2024/3/25,DEPTOFENGLISHNANJINGUNIVERSITY,5,學(xué)科熱點(diǎn),應(yīng)用語言學(xué)語塊或詞塊研究專門能力(隱喻能力、學(xué)術(shù)能力、批評思維能力等)的發(fā)展研究面向過程的研究認(rèn)知語言學(xué)、語用學(xué)等理論指導(dǎo)下的習(xí)得研究語料庫支撐下的習(xí)得研究神經(jīng)語言學(xué)支撐下的習(xí)得研究網(wǎng)絡(luò)支撐下的教學(xué)研究基于課堂觀察的研究,2024/3/25,DEPTOFENGLISHNANJINGUNIVERSITY,6,語用學(xué)相關(guān)界面(詞匯語用、句法語用、語音語用等)研究應(yīng)用領(lǐng)域的語用問題研究非禮貌或沖突性話語的研究社會用語的語用研究歷史語用研究多模態(tài)語用研究CMC語用研究,2024/3/25,DEPTOFENGLISHNANJINGUNIVERSITY,7,2024/3/25,DEPTOFENGLISHNANJINGUNIVERSITY,8,選題方面常見問題,1、(話題、理論)太舊,2、研究對象太具體、個性,2024/3/25,DEPTOFENGLISHNANJINGUNIVERSITY,9,,3、研究對象太寬泛,2024/3/25,DEPTOFENGLISHNANJINGUNIVERSITY,10,,課題確定后,題目措辭很重要。基于(語料庫、網(wǎng)絡(luò)環(huán)境等)(理論、跨學(xué)科等)視角下的模式(策略、對策、機(jī)制等)的實(shí)證(實(shí)驗(yàn)、對比、動態(tài)等)研究,2024/3/25,DEPTOFENGLISHNANJINGUNIVERSITY,11,,教育部人文社科項(xiàng)目關(guān)于課題的評審要求“有一定的研究基礎(chǔ),有相關(guān)研究成果和資料準(zhǔn)備?!逼綍r發(fā)一些相關(guān)小文章也很重要。做必要的前期成果準(zhǔn)備。,3、論證,1、選題背景的說明(必要性的論證)2、選題意義的論證與一般研究論文寫作相似,2024/3/25,DEPTOFENGLISHNANJINGUNIVERSITY,13,論證關(guān)鍵,交代相關(guān)課題是當(dāng)前研究關(guān)注點(diǎn)或熱點(diǎn)(評審專家不一定是真正的“同行”)交代相關(guān)課題研究存在盲點(diǎn)、空白、爭議等指出本研究代表一種趨勢、傾向、方向等一定要有文獻(xiàn)支撐,2024/3/25,DEPTOFENGLISHNANJINGUNIVERSITY,14,,教育部人文社科項(xiàng)目關(guān)于論證的評審要求“具有科學(xué)性和前沿性,內(nèi)容充實(shí),論證充分,擬突破的重點(diǎn)難點(diǎn)明確,預(yù)期能產(chǎn)生具有創(chuàng)新性和社會影響的研究成果。”,2024/3/25,DEPTOFENGLISHNANJINGUNIVERSITY,15,2024/3/25,DEPTOFENGLISHNANJINGUNIVERSITY,16,常見問題,1、“泛泛而談”背景2、“信口開河”談必要性3、“不著邊際”論研究目標(biāo)4、“研究內(nèi)容空泛”5、“研究重點(diǎn)不突出、難點(diǎn)不清楚”,四、設(shè)計,本課題的研究思路和研究方法、計劃進(jìn)度教育部人文社科項(xiàng)目關(guān)于課題的評審要求“研究思路清晰,研究方法科學(xué)、可行?!薄敖?jīng)費(fèi)預(yù)算合理?!?2024/3/25,DEPTOFENGLISHNANJINGUNIVERSITY,17,設(shè)計關(guān)鍵,思路具體(思路涉及理論指導(dǎo)、行動路線、總體進(jìn)程、預(yù)期發(fā)現(xiàn)等,路線圖/構(gòu)思圖/框架圖等)方法具體(涉及操作方式、語料收集與分析方法)步驟具體(涉及時間進(jìn)度與內(nèi)容推進(jìn))成果具體(涉及成果形式與數(shù)量、暫定名稱、預(yù)計去向等),2024/3/25,DEPTOFENGLISHNANJINGUNIVERSITY,18,常見問題,過于簡略過于空泛經(jīng)費(fèi)預(yù)算不合理,2024/3/25,DEPTOFENGLISHNANJINGUNIVERSITY,19,5、結(jié)語,研究始于設(shè)計。項(xiàng)目重在論證。機(jī)遇在于積累。,2024/3/25,DEPTOFENGLISHNANJINGUNIVERSITY,20,敬請大家指正,謝謝,
下載積分: 4 賞幣
上傳時間:2024-01-06
頁數(shù): 21
大小: 0.59(MB)
子文件數(shù):
-
簡介:1,FORTRAN語言簡介,BY陳鯨太,2,OUTLINE,語言簡介、編譯器簡介FORTRAN基本事項(xiàng)輸出、輸入及宣告格式化輸出程式結(jié)構(gòu)流程控制陣列函式,3,FORTRAN簡介,全名-FORMULATRANSLATORIBM19541957第一個被廣泛使用的高階語言演化1978?FORTRAN771992?FORTRAN901997?FORTRAN95,4,FORTRANCOMPILER簡介1,VISUALFORTRANMICROSOFT?DIGITAL?COMPAQ?HPMICROSOFTVISUALSTUDIO完整的WINDOWS程式開發(fā)工具可與VISUALC相互連結(jié)使用,5,FORTRANCOMPILER簡介2,計中工作站提供FORTRAN90及FORTRAN77編譯方式輸出至AOUTF77FILENAMEFORF90FILENAMEF90輸出至指定檔案SAMPLEF77FILENAMEFOR-OSAMPLEF90FILENAMEFOR-OSAMPLE,6,FORTRANCOMPILER簡介3,計中工作站之FORTRAN只提供在CCSUN2635總數(shù)2套登入TELNETCCSUN27CCNCTUEDUTW帳號U9031XXX密碼預(yù)設(shè)值是身份証字號,7,FORTRAN基本事項(xiàng)1,字元集英文字母AZ大小寫不分?jǐn)?shù)字09特殊符號冒號、等號、加、減、乘、除、底線ETC,8,FORTRAN基本事項(xiàng)2,程式碼寫作格式FIXEDFORMATFORTRAN77的舊格式為了使用打孔卡而發(fā)明詳細(xì)規(guī)定每個字元的“用法”FREEFORMATFORTRAN90之後的新格式提供較大彈性,9,FORTRAN基本事項(xiàng)3,FIXEDFORMAT第1個字元如果是字母C,C或星號,表示此行是註解第15個字元如果這邊是數(shù)字,表示這一行的代號,否則應(yīng)為空白第6個字元如果是0以外的字元,表示這一行程式會接續(xù)上一行第772個字元FORTRAN程式碼的寫作區(qū)域第73個字元之後不使用,超過部份會被忽略,有的編譯器會有錯誤訊息,10,FORTRAN基本事項(xiàng)4,FREEFORMAT不規(guī)定每一行第幾字元有什麼作用驚嘆號後面文字是註解每行可寫作132個字元行號在每行程式最前面一行程式碼的最後如果是符號,代表下一行程式會和這一行連接。,11,FORTRAN基本事項(xiàng)5,FREEFORMATPROGRAMMAINWRITE,“HELLO”列印出HELLO這個字WRITE,“HELLO”WRITE,“HELLO”END,12,輸出1,PROGRAMMAINWRITE,“HELLO”STOPEND,13,輸出2,WRITE,第一個參數(shù)輸出的位置第二個參數(shù)輸出格式相等寫法WRITE,“HELLO”WRITE6,“HELLO”WRITEUNIT6,FMT“HELLO”,14,輸出3,關(guān)於WRITE,自動換行印出雙引號?使用連續(xù)2個雙引號WRITE,“MYNAMEIS“”CASTER”””FORTRAN90?雙引號/單引號FORTRAN77?單引號,15,輸出4,PRINT語法PRINT,”輸出字串”專門對螢?zāi)惠敵?16,結(jié)束程式,結(jié)束程式ENDENDPROGRAMENDPROGRAMMAINMAIN是主程式的名字FORTRAN90?1,2,3FORTRAN77?1,17,資料型態(tài)1,整數(shù)INTEGER宣告方式INTEGERA內(nèi)定範(fàn)圍為232-232,18,資料型態(tài)2,浮點(diǎn)數(shù)宣告方式REALA或REAL4A單精確度341038-341038有效位數(shù)67位雙精確度REAL8A17910308有效位數(shù)1516位,19,資料型態(tài)3,複數(shù)宣告COMPLEXA使用AX,YX為實(shí)部,Y為虛部PROGRAMMAINCOMPLEXA,BA10,10B30,43WRITE,“AB”,ABWRITE,“AB”,ABWRITE,“AB”,ABWRITE,“A/B”,A/BSTOPEND,20,資料型態(tài)4,執(zhí)行結(jié)果AB40,53AB20,33000001AB13000002,73A/B02655511,0047289926,21,資料型態(tài)5,字元及字串CHARACTERA宣告字元CHARACTER10A宣告長度為10的字串其它寫法CHARACTER10CHARACTERLEN10CHARACTER10給予初始值A(chǔ)”字串內(nèi)容”,22,輸入指令,輸入指令的基本語法如下INTEGERAREAD,A讀入一個整數(shù),並存到A內(nèi)READ5,A同上READUNIT5,FMTA同上,23,格式化輸出1,關(guān)於IWRITE,”I5”100用5個字元的欄位來輸出一個整數(shù)OUTPUT__100WRITE,”I3”100000OUTPUTWRITE,”I54”3輸出五個字元欄位,至少輸出4位,不足補(bǔ)0OUTPUT_0003,24,格式化輸出2,關(guān)於FWRITE,”F93”12345輸出9個字元欄位,包括小數(shù)部份3個位數(shù)OUTPUT__123450關(guān)於EWRITE,”E157”12345用科學(xué)計號表示法,輸出15個字元欄位,小數(shù)部份佔(zhàn)7位OUTPUT__01234500E03,25,格式化輸出3,關(guān)於AWRITE,”A10”“HELLO”用10個字元寬度輸出字串OUTPUT_____HELLOWRITE,”A3”“HELLO”O(jiān)UTPUTHEL,26,格式化輸出4,關(guān)於BWRITE,”B65”3把3變成二進(jìn)位輸出,字6個字元寬,至少輸出5位OUTPUT_00011,27,格式化輸出5,關(guān)於XWRITE,”3X”20輸出前先填3個空白字元OUTPUT___20,28,變數(shù)名稱取名原則1,長度限制FORTRAN77?至少6FORTRAN90?至少31不需宣告就能使用第一個字母為I,J,K,L,M,N?整數(shù)其它?浮點(diǎn)數(shù),29,變數(shù)名稱取名原則2,PROGRAMMAINI1122WRITE,“1122”,JSTOPEND結(jié)果11220,30,變數(shù)名稱取名原則3,關(guān)閉內(nèi)定型態(tài)的功能IMPLICITNONE每個變數(shù)必需事先宣告位置PROGRAM指令的下一行,31,常數(shù)的宣告,方式一REALPIPARAMETERPI314159方式二REAL,PARAMETERPI314159,32,程式結(jié)構(gòu),33,FLOWCONTROL1,IFTHENELSE語法IF邏輯判斷式THEN執(zhí)行動作1ELSE執(zhí)行動作2ENDIF,34,FLOWCONTROL2,PROGRAMMAINIMPLICITNONEREALHIEGHTREALWEIGHTREAD,HEIGHTREAD,WEIGHTIFWEIGHTHEIGHT100THENWRITE,“TOOFAT”ELSEWRITE,“UNDERCONTROL”ENDIFSTOPEND,35,FLOWCONTROL3,邏輯運(yùn)算式相等/不相等大於大於等於小於小於等於AND如果兩邊式子都成立,整個條件就成立OR兩邊的式子只要有一個成立,整個條件就成立NOT如果後面的式子不成立,整個式子就算成立EQV兩邊式子的邏輯運(yùn)算結(jié)果相同時,整個式子就成立NEQV兩邊式子的邏輯運(yùn)算結(jié)果不同時,整個式子就成立,36,FLOWCONTROL4,FORTRAN77的邏輯運(yùn)算式EQ等於NE不等於GT大於GE大於等於LT小於LE小於等於,37,FLOWCONTROL5,DO迴圈語法DO起始值,終止值,累加值執(zhí)行程式碼ENDDO例DOI10,5,1WRITE,IENDDO,38,FLOWCONTROL6,結(jié)果1098765,39,FLOWCONTROL7,DOWHILE語法DOWHILE邏輯運(yùn)算程式碼ENDDO,40,陣列1,FORTRAN90陣列的宣告INTEGERA10宣告A這個陣列有10個元素INTEGER,DIMENSION10A同上,另一種作法FORTRAN77陣列的宣告INTEGERADIMENSIONA10注意INDEX值從1開始算起,41,陣列2,使用陣列A118INTEGERA3DATAA/36,24,36/在FORTRAN90中,還可以省略DATA這個敘述INTEGERA3/36,26,36/◎括號跟除號之間不能有空格,並且冒號不能省略。,42,函式1,副程式SUBROUTINE的使用可錯位PROGRAMMAIN主程式碼ENDSUBROUTINESUB1程式碼ENDSUBROUTINESUBROUTINESUB2程式碼ENDSUBROUTINE,43,函式2,特性CALLBYREFERENCE無回傳值副程式最後一個指令通常是RETURN在主程式呼叫副程式CALL,44,函式3,PROGRAMMAINIMPLICITNONEINTEGERA1WRITE,“A的初始值是”,ACALLADDAWRITE,“A後來的值是”,ASTOPENDSUBROUTINEADDNUMIMPLICITNONEINTEGERNUMNUMNUM1RETURNENDSUBROUTINE,45,函式4,這個程式的輸出A的初始值是1A後來的值是2因?yàn)楹艚辛薙UBROUTINE,使得A的值被改變,46,函式5,自訂函數(shù)FUNCTION類似SUBROUTINE不同點(diǎn)呼叫前必需宣告有回傳值宣告方式FORTRAN90REAL,EXTERNALADDFORTRAN77REALADDEXTERNALADD,47,函式6,PROGRAMMAINIMPLICITNONEREAL,EXTERNALTRIPPLEREALA138WRITE,“A的初始值是“,AWRITE,“呼叫函數(shù)“,TRIPPLEAWRITE,“A後來的值是“,ASTOPENDREALFUNCTIONTRIPPLENUMIMPLICITNONEREALNUMTRIPPLENUM3RETURNEND,48,執(zhí)行結(jié)果,A的初始值是138呼叫函數(shù)414A後來的值是138,49,作業(yè),圓面積計算公式輸入半徑浮點(diǎn)數(shù),輸出圓面積浮點(diǎn)數(shù)必需使用SUBROUTINE,FUNCTION其中一種方式圓周率使用課堂上教的方法宣告PI31416,50,ANYQUESTION,PLEASEEMAILCASTERCISNCTUEDUTW,
下載積分: 4 賞幣
上傳時間:2024-01-06
頁數(shù): 50
大?。?0.2(MB)
子文件數(shù):
-
簡介:C語言程序設(shè)計第七章數(shù)組,72,主要內(nèi)容,71一維數(shù)組72字符數(shù)組與字符串73多維數(shù)組,73,概述,我們已經(jīng)熟悉了整型、浮點(diǎn)型、字符型數(shù)據(jù)。本章要介紹構(gòu)造類數(shù)據(jù)數(shù)組。構(gòu)造類數(shù)據(jù)是由上述基本類型數(shù)據(jù)按一定規(guī)則排序構(gòu)成的數(shù)據(jù)集合體。是C語言的重要內(nèi)容。構(gòu)造類型數(shù)據(jù)有數(shù)組類型;結(jié)構(gòu)體類型;共用體類型。,74,71一維數(shù)組,一維數(shù)組的定義格式數(shù)據(jù)類型數(shù)組名元素個數(shù)說明數(shù)據(jù)類型指數(shù)組元素的類型。有INT型、FLOAT型、CHAR型。數(shù)組名代表一個數(shù)據(jù)集合的數(shù)組的名字。下標(biāo)用方括號即“”屆定。不能用圓括號和花括號,下標(biāo)值從0開始計數(shù)。元素個數(shù)數(shù)組包含數(shù)據(jù)的個數(shù)。元素個數(shù)必須是大于或等于1的整數(shù)。數(shù)組必須先定義,后使用。,75,71一維數(shù)組,例1例INTDATA4該數(shù)組有4個元素,它們是DATA0DATA1DATA2DATA3我們?nèi)缓罂梢韵笃胀ㄗ兞恳粯邮褂脭?shù)組DATA110DATA212DATA3DATA1DATA22PRINTF“D”DATA3,76,71一維數(shù)組,例2請看下列程序段有什么錯誤INTXINTWEIGHTX//元素個數(shù)不能用變量來定義。應(yīng)該是常量CHARNAME50//下標(biāo)符不能用圓括號INTNUM5//元素個數(shù)不能定義成負(fù)數(shù)。FLOATDEPTNAMEX15//定義數(shù)組不能用變量表達(dá)式。只能用常量表達(dá)式INTARRAY105//元素個數(shù)不能用小數(shù)定義,77,71一維數(shù)組,例3DEFINEBUFSIZE512//宏定義,用指定的標(biāo)識符來代替后面的數(shù)字DEFINESTACKSIZE24//宏定義INTINBUFFERBUFSIZE//等效為INBUFFER512在編譯時進(jìn)行替換CHAROUTBUFFERSTACSIZE//等效為OUTBUFFER24在編譯時進(jìn)行替換FLOATS155,X10,78,71一維數(shù)組,數(shù)組元素的存儲和使用每個數(shù)組元素都占用內(nèi)存中的一個存儲單元,每個元素都是一個變量,可以像以前講過的普通變量一樣使用,只不過數(shù)組元素是通過數(shù)組名和方括號“”里的下標(biāo)來確定的。系統(tǒng)為數(shù)組元素在內(nèi)存中分配連續(xù)的存儲單元。例INTA5數(shù)組名A。數(shù)組元素的數(shù)據(jù)類型為INT整型數(shù)據(jù)。數(shù)組元素的下標(biāo)值從0開始。數(shù)組元素的個數(shù)為15個,它們是A0、A1、A2A13、A14數(shù)組名A是數(shù)組存儲區(qū)的首地址,即存放數(shù)組第一個元素的地址。A?I2A2I11//√下標(biāo)為變量表達(dá)式。A51//√對數(shù)組A的第六個元素A5賦值1PA5//√將數(shù)組A的第六個元素A5的值賦給變量PA10101//√將1賦給數(shù)組A的第一個元素A0。A11//不能對數(shù)組整體進(jìn)行讀寫,即不能對數(shù)組名讀寫PRINTF“AD”,A//同上A10A0A1//下標(biāo)超限,711,71一維數(shù)組,一維數(shù)組的初始化數(shù)組的初始化就是在定義數(shù)組的同時給各數(shù)組元素賦初值。初始化是在程序運(yùn)行前編譯時完成的。一維數(shù)組初始化的格式數(shù)據(jù)類型標(biāo)識符數(shù)組名元素個數(shù){數(shù)值1,數(shù)值2,數(shù)值N}花括號{}中的數(shù)值用于數(shù)組元素賦初值。賦值是按對應(yīng)次序進(jìn)行?;ɡㄌ杮}中的數(shù)值之間用逗號“,”分開。如INTX5{1,2,3,4,5}則數(shù)組中各元素的初始值為X01,X12,X23,X34,X45。數(shù)值的個數(shù)要等于數(shù)組所定義的元素個數(shù)花括號{}中數(shù)值的個數(shù)如果少于數(shù)組元素的個數(shù),則多余的數(shù)組元素初始化的數(shù)值為0。如INTX5{3,4,7}則數(shù)組中各元素的初始值為X03,X14,X27,X30,X40?;ɡㄌ杮}中數(shù)值的個數(shù)多于數(shù)組元素的個數(shù)是語法錯誤。,712,71一維數(shù)組,在數(shù)組初始化中,可缺省方括號中的下標(biāo)值元素個數(shù),數(shù)組元素個數(shù)由花括號中所賦初始值的數(shù)值個數(shù)來決定。如INTY{6,4,1,7,8,10}等價于INTY6{6,4,1,7,8,10}對于存儲類型為STATIC靜態(tài)或EXTERN外部類型的數(shù)組,如果不在定義時進(jìn)行賦值,則多數(shù)編譯系統(tǒng)都將其值初始化為0。如STATICINTX3則數(shù)組各元素的初值為X00,X10,X20。,713,71一維數(shù)組,一維數(shù)組的應(yīng)用舉例,INCLUDE“STDIOH“VOIDMAIN{INTA{1,2,3,4}INTI,J,SFORI3,J1,S0I0I{SSAIJJJ10}PRINTF“SD\N“,S},運(yùn)行程序S1234,分析循環(huán)變量SSAIJJJ10I3S4,J10I2S34,J100I1S234,J1000I0S1234,J10000。,714,71一維數(shù)組,編程計算一維數(shù)組中所有元素的平均值。,INCLUDE“STDIOH”VOIDMAIN{INTISTATICINTX{10,8,7,6,5,4,3,2}FLOATAVERAGE0FORI0I‘A’I}PRINTF“\NS”,STRING},運(yùn)行程序ABCDEFGHIJKLMN←┘ABCDEFGHIJKLMN,730,72字符數(shù)組與字符串,例輸入一個字符串,求其長度。分析1設(shè)字符數(shù)組STR302設(shè)變量I03STRI‘\0’I,INCLUDE“STDIOH”VOIDMAIN{INTI0CHARSTR30PRINTF“\N請輸入一個字符串“GETSSTRWHILESTRI\0IPRINTF“字符串長度為D“,I},運(yùn)行程序請輸入一個字符串CLANGUAGE←┘字符串長度為10,731,72字符數(shù)組與字符串,字符串處理函數(shù)GETS和PUTS字符串輸入/輸出函數(shù)STRCPY字符串考貝函數(shù),包含在STRINGH庫文件中,下同。形式STRCPY目的字符數(shù)組,源字符串;作用將源字符串拷貝到目的字符數(shù)組中,遇到源字符串的終止符’\0’為止。函數(shù)返回值目的字符數(shù)組的地址。,INCLUDEINCLUDE“STRINGH“VOIDMAIN{CHARS10,SP“HELLO“STRCPYS,SPS0HS6PUTSS},運(yùn)行結(jié)果HELLO,732,72字符數(shù)組與字符串,如果只需考貝字符串的一部分,可用函數(shù)STRNCPY目的字符數(shù)組,源字符串,拷貝字符數(shù),INCLUDEINCLUDE“STRINGH“VOIDMAIN{CHARS“THISISASOURCESTRING”CHARB20STRNCPYB,S,16B16\0PRINTF“S\N“,B},運(yùn)行結(jié)果THISISASOURCE,733,72字符數(shù)組與字符串,STRCAT字符串連接函數(shù)形式STRCAT目的字符數(shù)組,源字符串;作用將源字符串連接到目的字符數(shù)組后面。函數(shù)返回值目的字符數(shù)組的地址。,INCLUDEINCLUDE“STRINGH“VOIDMAIN{CHARA“ABCDE“CHARB“12345“STRCATB,APRINTF“S,S\N“,A,B},運(yùn)行結(jié)果DE,12345ABCDE,出錯,因?yàn)閿?shù)組B長度定義不夠,運(yùn)行結(jié)果ABCDE,12345ABCDE,734,72字符數(shù)組與字符串,STRCMP字符串比較函數(shù)形式STRCMP字符串1,字符串2;作用對兩個字符串從各自第一個字符開始進(jìn)行逐一比較,直到對應(yīng)字符不相同或到達(dá)串尾為止。函數(shù)返回值小于0__字符串1小于字符串2;等于0__字符串1等于字符串2;大于0__字符串1大于字符串2。,735,72字符數(shù)組與字符串,例輸入四個字符串,將ASCII值最大的字符串輸出。,INCLUDEINCLUDE“STRINGH“VOIDMAIN{INTICHARSTR10,TEMP10“\0“FORI0I4I{GETSSTRIFSTRCMPTEMP,STR0STRCPYTEMP,STR}PUTSTEMP},運(yùn)行結(jié)果APPLECUTMOBILEMANAGERMOBILE,736,72字符數(shù)組與字符串,STRLEN字符串長度函數(shù)形式STRLEN(字符串)作用求字符串的實(shí)際字符個數(shù)(不包括’\0’)函數(shù)返回值實(shí)際字符個數(shù),INCLUDEINCLUDE“STRINGH“VOIDMAIN{CHARA“\T\R\\\0WILL\N“PRINTF“D,D“,SIZEOFA,STRLENA},運(yùn)行程序10,3,737,73多維數(shù)組,下標(biāo)個數(shù)大于1的數(shù)組叫多維數(shù)組。數(shù)組名后有兩個下標(biāo)的數(shù)組叫二維數(shù)組,例INTX23有三個下標(biāo)的數(shù)組叫三維數(shù)組。多維數(shù)組的定義定義數(shù)據(jù)存儲數(shù)據(jù)類型數(shù)組名下標(biāo)1下標(biāo)2下標(biāo)N;說明數(shù)據(jù)存儲、數(shù)據(jù)類型、數(shù)組名的說明同一維數(shù)組。下標(biāo)和一維數(shù)組不同的是有兩個方括號,注意不能寫成“INTC2,3”。數(shù)組元素個數(shù)為下標(biāo)1?下標(biāo)2??下標(biāo)N。例INTX23X是二維數(shù)組,有6個元素236,它們是X00,X01,X02,X10,X11,X12。其全部元素數(shù)值均為INT型。,738,73多維數(shù)組,多維數(shù)組的初始化方法一INTA23{{1,2,3},{4,5,6}}等價于INTA23A001A012A023A104A115A126方法二將所有數(shù)據(jù)寫在一個花括弧里,按數(shù)組排列順序給各元素賦值。如INTA23{1,2,3,4,5,6}方法三INTX3{1,2,3,4,5,6}即第一下標(biāo)值省略,但第二下標(biāo)值不能省略方法四還可以只對部分元素賦值,如INTA23{{1,2,},{4,5}}結(jié)果為A001A012A104A115,739,73多維數(shù)組,例求矩陣A和B相加。矩陣相加的條件兩矩陣行數(shù)、列數(shù)必須相等。,INCLUDEVOIDMAIN{INTA23{{1,2,3},{4,5,6}}INTB23{{1,2,3},{4,5,6}}INTI,J,C23FORI0I2IFORJ0J3JCIJAIJBIJPRINTF“AB\N“FORI0I2I{FORJ0J3JPRINTF“5D“,CIJPRINTF“\N“}},運(yùn)行結(jié)果AB4681012,已知A123456,已知B123456,740,73多維數(shù)組,多維數(shù)組的存儲與使用多維數(shù)組每維的下標(biāo)值都從0開始,最先變化的是最右邊的下標(biāo)。在內(nèi)存中按下標(biāo)順序,依次存儲在內(nèi)存的連續(xù)空間。例如INTX23為數(shù)組X分配了2字節(jié)612個字節(jié)先存放第一行,即X00,X01,X02,再存放第二行,即X10,X11,X12,741,73多維數(shù)組,多維數(shù)組元素的讀取操作同一維數(shù)組一樣,先定義、后使用;不能對一個多維數(shù)組的整體進(jìn)行使用,只能對具體的數(shù)組元素進(jìn)行使用。二維數(shù)組的引用格式數(shù)組名下標(biāo)1下標(biāo)2說明下標(biāo)可以是常量大于等于0、常量表達(dá)式、變量或表達(dá)式。數(shù)組中要特別注意每一維下標(biāo)都不能越限。因?yàn)橛械某绦蚓幾g系統(tǒng)不檢查數(shù)組下標(biāo)越限問題,應(yīng)特別注意。,
下載積分: 4 賞幣
上傳時間:2024-01-06
頁數(shù): 41
大小: 1.09(MB)
子文件數(shù):
-
簡介:第5章選擇結(jié)構(gòu)程序設(shè)計選擇結(jié)構(gòu)是三種基本結(jié)構(gòu)之一,特點(diǎn)是根據(jù)給定條件成立時執(zhí)行一組操作,不成立時執(zhí)行另一組操作。C中選擇結(jié)構(gòu)利用IF語句實(shí)現(xiàn)。51關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算是比較運(yùn)算,判斷比較的結(jié)果是否符合給定的條件,結(jié)果為邏輯值“真”或“假”。(前已討論算術(shù)、賦值、逗號?,F(xiàn)討論關(guān)系、邏輯為條件和循環(huán)表達(dá)式為條件和循環(huán)語句所用)。511關(guān)系運(yùn)算符及其優(yōu)先級關(guān)系運(yùn)算符有6種、優(yōu)先級為6級、優(yōu)先級為7級結(jié)合性為從左到右算符優(yōu)先級高,運(yùn)算次序優(yōu)先,關(guān)系運(yùn)算符和其它運(yùn)算符優(yōu)先級的比較高算術(shù)運(yùn)算符、/、(3)、(4)關(guān)系運(yùn)算符、(6)、(7)邏輯運(yùn)算符2SCANF“D”,DAPRINTF“AD,BD,CD,DD\N”,A,B,C,D},例T503CMAIN{INTA,B0,C0,D0SCANF“D”,DA||B5||C3PRINTF“AD,BD,CD,DD,\N”,A,B,C,D},在C中,巧妙地使用邏輯表達(dá)式,可以表示一個復(fù)雜的問題如關(guān)于閏年問題符合下列條件之一,均為閏年。(1)能被4整除并且不能被100整除(2)能被4整除并且能被400整除其邏輯表達(dá)式為(YEAR40FLOATY56IFXPRINTF“XD\N”,XIFYPRINTF“YF\N”,YIF‘0’PRINTF“‘0’D\N”,‘0’IFXYPRINTF“XYF\N”,XYIFY100{XYPRINTF“XD,YF\N”,X,Y}},運(yùn)行結(jié)果Y5600000‘0’48XY5600000X1,Y4600000,2第二種形式的條件語句IF表達(dá)式)語句1ELSE語句2例T505CMAIN{INTX,YPRINTF“PLEASEINPUTX,Y\N”SCANF“DD”,IFXYPRINTF“XD\N”,XELSEPRINTF“YD\N”,Y}運(yùn)行結(jié)果PLEASEINPUTX,Y2_5?輸出Y534_28?X34,3第三種形式的條件語句IF表達(dá)式1)語句1ELSEIF表達(dá)式2)語句2ELSEIF表達(dá)式3)語句3┆ELSEIF表達(dá)式M語句MELSE語句N右圖為M4N5,例商店售貨按購物的款數(shù)分別給予不同的優(yōu)惠折扣。設(shè)變量N購物金額,C優(yōu)惠折扣百分比,A優(yōu)惠后的實(shí)際款數(shù)T506CMAIN{FLOATN,C,ASCANF“F”,IFN500C015ELSEIFN300C010ELSEIFN100C0075ELSEIFN50C005ELSEC0AN1CPRINTF“AF\N”,A},輸入輸出80068000000048043200000020018500000080760000003030000000,說明1執(zhí)行IF語句時,先判斷表達(dá)式的值,為真時非0,執(zhí)行其后語句,為假0時不執(zhí)行其后的語句,表達(dá)式可以是常量、變量、各種表達(dá)式。2IF的各內(nèi)嵌語句用“”號結(jié)束。3IF和ELSE后面的內(nèi)嵌語句若有多句,用{}括起構(gòu)成復(fù)合語句。例T51C輸入兩個實(shí)數(shù),按代數(shù)值由小到大輸出。MAIN{FLOATA,B,TSCANF“F,F”,IFAB{TAABBT}PRINTF“52F,52F\N”,A,B},輸入輸出36,32?320,36025,89?250,890,例T52C輸入三個數(shù),按從小到大的順序輸出MAIN{FLOATA,B,C,TSCANF“F,F,F”,IFAB{TAABBT}IFAC{TAACCT}IFBC{TBBCCT}PRINTF“52F,52F,52F\N”,A,B,C},TABC7535733757357,輸入輸出7,5,3300,500,7001,8,6100,600,800,532IF語句的嵌套嵌套在IF語句中,又包含1到多個IF語句一般形式IFIF語句1ELSE語句2ELSEIF語句3ELSE語句4,總體上是哪種形式,,使用內(nèi)嵌的IF語句時,應(yīng)區(qū)分表面形式與實(shí)際對應(yīng)關(guān)系如IFIF語句1ELSEIF語句2ELSE語句3編程者希望把中間的ELSE與第一行的IF匹配,雖然書寫上是對齊的,但編譯系統(tǒng)并非如此執(zhí)行。,在C語言中,IF與ELSE的配對原則是從最內(nèi)層開始,ELSE總是與它上面最近的,未曾配對的IF配對。因此,上述問題在編譯時的真正效果是IF等價于下述表示當(dāng)條件成立時執(zhí)行下面虛框中的內(nèi)容,總體上是哪種形式,為了使程序清晰,不至出錯,采取的方法是(1)使內(nèi)嵌的IF也包含ELSE,如上面的問題可進(jìn)行如下描述IFIFELSEELSEIFELSE,2若IF和ELSE數(shù)目不等,為實(shí)現(xiàn)設(shè)計者的企圖,可用{}實(shí)現(xiàn),如上述問題可進(jìn)行如下描述IF{IF語句1}ELSE{IF語句2ELSE語句3},如此一來,ELSE不是和復(fù)合語句匹配而是與其前面的IF匹配,總體上是哪種形式,有一符號函數(shù)例T53CMAIN{INTX,YSCANF“D”,IFX0IFX0Y1ELSEY0ELSEY1PRINTF“XD,YD\N”,X,Y},輸入12?24?0?輸出X12,Y1X24,Y1X0,Y0,例T532CMAIN{INTX,YSCANFD”,Y1IFX0IFX0Y1ELSEY0/此ELSE和誰匹配/PRINTF“XD,YD\N”,X,Y},輸入輸出5?X5,Y00?X0,Y18?X8,Y1,例T533CMAIN{INTX,YSCANFD”,Y0IFX0IFX0Y1ELSEY1PRINTF“XD,YD\N”,X,Y},輸入輸出5?X5,Y00?X0,Y18?X8,Y1,533條件運(yùn)算符條件表達(dá)式的一般形式表達(dá)式1表達(dá)式2表達(dá)式3其中是條件運(yùn)算符號在IF語句中,給同一變量賦值時,可用語句IFABMAXAELSEMAXB上述問題用條件運(yùn)算符和相應(yīng)表達(dá)式實(shí)現(xiàn)如下MAXABAB,條件表達(dá)式的執(zhí)行過程是說明1條件運(yùn)算符的優(yōu)先級為13級MAXABABMAXABAB(為14級)MAXABAB1MAXABAB1為4級),2條件運(yùn)算符的結(jié)合方向從右向左如有表達(dá)式ABACDCDA,B,C,D的取值如下表達(dá)式值如下ABCD12344586263220303,3若IF語句內(nèi)嵌的是賦值語句,且兩分支給同一變量賦值時,才可用條件表達(dá)式代替條件表達(dá)式的結(jié)果究競是給變量C還是X,是無法確定的,所以這種IF語句不能用條件算符組成的表達(dá)式代替。,例T534CMAIN{INTA,BSCANF“DD”,ABPRINTF“MAXX\N”,APRINTF“MAXD\N”,B}輸入35輸出MAX5,4表達(dá)式1,2,3類型可以相同,也可不同,不同時,低類型向高類型轉(zhuǎn)換例T535CMAIN{INTX1,Y5,Z6PRINTF“C\N”,X‘A’‘B’PRINTF“F\N”,Y‘A’ELSECS/250SWITCHC{CASE0D0BREAKCASE1D2BREAKCASE2CASE3D5BREAKCASE4CASE5CASE6CASE7D8BREAKCASE8CASE9CASE10CASE11D10BREAKCASE12D15BREAK}FPWS1D/1000PRINTF“FREIGHT4F”,F},C公里數(shù)/250,以確定表達(dá)式的值S距離P基本運(yùn)費(fèi)W貨物重量D折扣總運(yùn)費(fèi)FPWS1D,輸入100,20,300輸出FREIGHT___5880000000,,S250KM沒有折扣250S5002折扣500S10005折扣1000S20008折扣2000S300010折扣3000S15折扣,
下載積分: 4 賞幣
上傳時間:2024-01-06
頁數(shù): 46
大?。?0.16(MB)
子文件數(shù):
-
簡介:C語言程序設(shè)計教程(第4版),第2章基本的程序語句,本章主要內(nèi)容1基本數(shù)據(jù)類型及取值范圍2標(biāo)識符、變量和常量3基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級4標(biāo)準(zhǔn)輸入/輸出函數(shù)簡介5程序范例,第2章引言,21預(yù)備知識1定點(diǎn)數(shù)和浮點(diǎn)數(shù)2整數(shù)的二進(jìn)制3浮點(diǎn)數(shù)的二進(jìn)制4其它進(jìn)制及轉(zhuǎn)換,第2章引言,1C語言提供5種基本數(shù)據(jù)類型。(1)字符型用CHAR表示。(2)整數(shù)型用INT表示。(3)單精度實(shí)數(shù)型用FLOAT表示。(4)雙精度實(shí)數(shù)型用DOUBLE表示。(5)空類型用VOID表示。?對整數(shù)型,有四種修飾①SIGNED(有符號)②UNSIGNED(無符號)③LONG(長型)④SHORT(短型)?數(shù)據(jù)類型決定了數(shù)據(jù)的大小、數(shù)據(jù)可執(zhí)行的操作以及數(shù)據(jù)的取值范圍。,22基本數(shù)據(jù)類型及取值范圍,?數(shù)據(jù)類型的長度和取值范圍會隨著機(jī)器的CPU類型和編譯器的不同而不同。,22基本數(shù)據(jù)類型及取值范圍,例1驗(yàn)證數(shù)據(jù)類型的字節(jié)長度。見【例21】所示的程序EXAMPLE2_1C?不同字節(jié)長度的數(shù)據(jù)類型和取值范圍見表25和表26,22基本數(shù)據(jù)類型及取值范圍,231標(biāo)識符標(biāo)識符是對變量名、函數(shù)名、標(biāo)號和其他各種用戶定義的對象命名。建議取有實(shí)際意義的標(biāo)識符來命名。標(biāo)識符的第1個字符必須是字母或下劃線,標(biāo)識符的長度可以是一個或多個字符,最長不允許超過32個字符。例如SCORE、NUMBER12、STUDENT_NAME等均為正確的標(biāo)識符;8TIMES、PRICE/TEA、LOWVALUME等均不為正確的標(biāo)識符。注意1標(biāo)識符區(qū)分大小寫,SCORE、SCORE、SCORE代表三個不同的標(biāo)識符。2標(biāo)識符不能和C語言的關(guān)鍵字相同3標(biāo)識符不能和用戶自定義的函數(shù)或C語言庫函數(shù)同名,23標(biāo)識符、變量和常量,232變量和常量1變量其值可以改變的量稱為變量。變量的兩個要素標(biāo)識符名字和值。?C語言規(guī)定變量必須在使用之前定義。?定義變量的一般形式是?必須是有效的C數(shù)據(jù)類型,如INT、FLOAT等,類型名規(guī)定了變量的存儲空間和取值范圍。?可以由一個或多個由逗號分隔的多個標(biāo)識符名構(gòu)成。,23標(biāo)識符、變量和常量,如INTI,J,NUMBERUNSIGNEDINTMAX,MINFLOATHIGH_VALUE,PRICEDOUBLELENTH,TOTAL_WIEIGHT思考上面各種變量的類型和他們的取值范圍。,23標(biāo)識符、變量和常量,例2運(yùn)行下面的程序,了解變量的取值范圍和C語言的特性。/EXAMPLE2_2C變量的取值范圍測試/INCLUDEMAIN{INTA32766,B32766UNSIGNEDM6553FLOATT34E37PRINTF“AD\N“,APRINTF“MU\N“,MPRINTF“TE\N”,TAA4,23標(biāo)識符、變量和常量,BB6MM1010TT10PRINTF“AFTERCHANGE\N“PRINTF“A4D\N“,APRINTF“B6D\N“,BPRINTF“M1010U\N“,MPRINTF“T10E\N“,T},2常量?常量的值是不可變的。在C語言中,有整型常量、實(shí)型常量、字符常量、字符串常量、和枚舉常量等。(1)整型常量?可采用十進(jìn)制、八進(jìn)制、十六進(jìn)制來表示整型常量。八進(jìn)制數(shù)的前面用數(shù)字0開頭,十六進(jìn)制數(shù)前面用數(shù)字0和字母X開頭(0X或0X)?整型常量的表示見表29。,23標(biāo)識符、變量和常量,例3了解整型常量的不同進(jìn)制表示法。/EXAMPLE2_3C/INCLUDEMAIN{PRINTF“十六進(jìn)制0X80的十進(jìn)制值為D\N“,0X80PRINTF“八進(jìn)制0200的十進(jìn)制值為D\N“,0200PRINTF“十進(jìn)制128的十進(jìn)制值為D\N“,128PRINTF“十進(jìn)制128的十六進(jìn)制值為X\N“,128PRINTF“十進(jìn)制128的八進(jìn)制值為O\N”,128},23標(biāo)識符、變量和常量,(2)實(shí)型常量?實(shí)型常量的兩種表示法浮點(diǎn)計數(shù)法和科學(xué)計數(shù)法。例如23146736E?7458E5?00945?對太大或太小的數(shù),采用科學(xué)計數(shù)法。如上面的736E?7、458E5。,23標(biāo)識符、變量和常量,例4了解實(shí)型常量的兩種表示法。/EXAMPLE2_4C(浮點(diǎn)計數(shù)法,科學(xué)計數(shù)法)/INCLUDEMAIN{PRINTF“1234456的浮點(diǎn)數(shù)表示O\N“,123456PRINTF“123456E2的浮點(diǎn)數(shù)表示O\N“,123456E2PRINTF“123456E2的浮點(diǎn)數(shù)表示O\N“,123456E2PRINTF“123456的科學(xué)計數(shù)法表示E\N“,123456},23標(biāo)識符、變量和常量,(3)字符常量?字符常量是由一對單引號括起來的單個字符。如A、S、9、等均為字符常量。注1單引號只起定界作用,并不代表字符。注2單引號和反斜杠\本身作為字符時要通過轉(zhuǎn)義字符\。如\和\\分別代表單個字符單引號和反斜杠\。,23標(biāo)識符、變量和常量,?在C語言中,字符是按其所對應(yīng)的ASCII的值來存儲的,一個字符占一個字節(jié)。部分字符所對應(yīng)ASCII碼值如下,23標(biāo)識符、變量和常量,?字符和與之對應(yīng)的ASCII詳見附錄B,注意數(shù)字3和字符‘3’的區(qū)別,23標(biāo)識符、變量和常量,?字符也可以參與運(yùn)算如‘A’6;運(yùn)算結(jié)果為71,對應(yīng)的字符為H?!?’?7;運(yùn)算結(jié)果為49,對應(yīng)的字符為1?!甕’?32;運(yùn)算結(jié)果為89,對應(yīng)的字符為Y。,例5了解字符常量與其順序值的關(guān)系。/EXAMPLE2_5C字符常量與其順序值的關(guān)系/INCLUDEMAIN{PRINTF“DC\N“,A,APRINTF“DC\N“,A5,A5PRINTF“DC\N“,A70,A70},23標(biāo)識符、變量和常量,例5了解字符常量與其順序值的關(guān)系。/EXAMPLE2_5C字符常量與其順序值的關(guān)系/INCLUDEMAIN{PRINTF“DC\N“,A,APRINTF“DC\N“,A5,A5PRINTF“DC\N“,A70,A70},23標(biāo)識符、變量和常量,程序運(yùn)行結(jié)果65A70F135,(4)字符串常量?字符串常量是指用一對雙引號括起來的一串字符。如“WORLD“,“TRUEORFLASE“,“87654310037“,“T“均為字符串常量。注雙引號“和反斜杠\本身作為字符串時要通過轉(zhuǎn)義字符\。如“\““和“\\“分別代表字符串“和反斜杠\。,23標(biāo)識符、變量和常量,?注意字符常量與字符串常量的區(qū)別在C語言中,字符串常量在內(nèi)存中存儲時,系統(tǒng)自動在字符串的末尾加一個“串結(jié)束標(biāo)志”\0該結(jié)束標(biāo)志的ASCⅡ碼值為0,字符為空NULL。因此,長度為N個字符的字符串常量,在內(nèi)存中占有N1個字節(jié)的存儲空間。如字符串“WORLD”,共5個字符,需占用6個字節(jié),其存儲形式為,23標(biāo)識符、變量和常量,(5)轉(zhuǎn)義字符?轉(zhuǎn)義字符用反斜杠\后面跟一個字符或一個八進(jìn)制或十六進(jìn)制數(shù)表示。如\A,\0,\N等。?代表ASCII字符中不可打印的控制字符和特定功能的字符。?表示特殊字符,如單引號、雙引號“和反斜杠\等。?常用的轉(zhuǎn)義字符見表212。,23標(biāo)識符、變量和常量,?注意①轉(zhuǎn)義字符中的字母只能是小寫字母,每個轉(zhuǎn)義字符只能看作一個字符。②表212中的\R、\V和\F對屏幕輸出不起作用,但會在控制打印機(jī)輸出執(zhí)行時響應(yīng)其操作。③在程序中,使用不可打印字符時,通常用轉(zhuǎn)義字符表示。,23標(biāo)識符、變量和常量,例6了解轉(zhuǎn)義字符的作用。/EXAMPLE2_6C了解轉(zhuǎn)義字符的作用/INCLUDEMAIN{PRINTF“\A“/發(fā)出鈴聲/PRINTF“THISISATEST\N“PRINTF“READY“PRINTF“\BBACKSPACE\N“/往左退一格/PRINTF“\THORIZONTALTAB\N“/往右進(jìn)八格/PRINTF“\\\N“/輸出\/PRINTF“\\N“/輸出/PRINTF“\\N“/輸出/PRINTF“\“\N“/輸出“/PRINTF“\101\N“/輸出八進(jìn)制值101所對應(yīng)的字符/PRINTF“\X41\N“/輸出十六進(jìn)制值41所對應(yīng)的字符/},?運(yùn)行程序,觀察程序的運(yùn)行結(jié)果。程序運(yùn)行結(jié)果THISISATESTREADYBACKSPACEHORIZONTALTAB\“AA,23標(biāo)識符、變量和常量,(6)符號常量?將程序中的常量定義為一個標(biāo)識符,稱為符號常量。?符號常量在使用前必須先定義,定義的形式是DEFINE如DEFINEPI31415926DEFINETRUE1DEFINEFALSE0其中PI、TRUE、FLASE均為符號常量;其值分別為31415926,1,0。注1DEFINE是C語言的預(yù)處理命令;注2習(xí)慣上符號常量用大寫英文字母表示。,23標(biāo)識符、變量和常量,例7了解符號常量的使用。/EXAMPLE2_7C/INCLUDEDEFINEWHO“IAMASTUDENT“DEFINEHOW“THATISFINE“DEFINEPI31415926MAIN{PRINTF“S\N“,WHOPRINTF“S\N“,HOWPRINTF“F\N“,PI},23標(biāo)識符、變量和常量,程序運(yùn)行結(jié)果IAMASTUDENTTHATISFINE3141593,?C語言的基本表達(dá)式是由操作數(shù)和操作符組成。操作數(shù)通常由變量或常量表示;操作符由各種運(yùn)算符表示。一個基本表達(dá)式也可以作為操作數(shù)來構(gòu)成復(fù)雜表達(dá)式。構(gòu)成基本表達(dá)式的常用運(yùn)算符有(1)算術(shù)運(yùn)算符。(2)關(guān)系運(yùn)算符。(3)邏輯運(yùn)算符。(4)賦值運(yùn)算符。另外,條件運(yùn)算符、自反賦值運(yùn)算符、逗號運(yùn)算符、指針運(yùn)算符、位運(yùn)算符等均可構(gòu)成基本表達(dá)式。,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,241算術(shù)運(yùn)算符及算術(shù)表達(dá)式?算術(shù)運(yùn)算符主要用于完成變量的算術(shù)運(yùn)算。如加、減、乘、除等。各運(yùn)算符及其作用如下,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,注此處規(guī)定優(yōu)先級的數(shù)字越大,優(yōu)先級越高。,例8閱讀下面的程序,了解由算術(shù)運(yùn)算符組成的表達(dá)式。/EXAMPLE2_8C/INCLUDEMAIN{INTA,B,C,D1,D2,D3,D4DOUBLEX,Y,Z1,Z2,Z3A8B3C10,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,D1ABCB/ABCA/復(fù)雜表達(dá)式1/D2ABCB/ABCA/復(fù)雜表達(dá)式2/D3A/BD4CBPRINTF“D1D,D2D,D3D,D4D\N“,D1,D2,D3,D4X32Y24Z1XY/XY/復(fù)雜表達(dá)式3/Z2XY/XY/復(fù)雜表達(dá)式4/Z3Y/BPRINTF“Z1F,Z2F,Z3F\N“,Z1,Z2,Z3},程序運(yùn)行結(jié)果D162,D2134,D32,D41Z11550000,Z27000000,Z30800000,?關(guān)于前置/??和后置/??的作用?前置或前置??表達(dá)式?先將變量的值加1,再使用變量。???先將變量的值減1,再使用變量。?后置或后置??表達(dá)式?先使用變量,再將變量的值加1。???先使用變量,再將變量的值減1。,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,例9閱讀程序EXAMPLE2_10C,了解前置/和后置/??的作用。,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,1/運(yùn)算符適合于什么數(shù)據(jù)類型2表達(dá)式A和A有什么區(qū)別3表達(dá)式BA還可以怎樣表達(dá)4/能否用于常量表達(dá)式,思考,242關(guān)系運(yùn)算符及關(guān)系表達(dá)式?關(guān)系運(yùn)算符的作用用于條件判斷的表達(dá)。?關(guān)系運(yùn)算符及其含義和優(yōu)先級如下,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,?關(guān)系表達(dá)式的結(jié)果只有兩個1真(值為1)2假(值為0)假如有INTA,BA230B239186則變量A的值為1,變量B的值為0。,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,243邏輯運(yùn)算符及邏輯表達(dá)式?邏輯運(yùn)算符的作用用于判斷條件中的邏輯關(guān)系。?邏輯運(yùn)算符及其含義和優(yōu)先級如下,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,?邏輯表達(dá)式的結(jié)果真(值為1)假(值為0)注非零值均為真?邏輯運(yùn)算規(guī)則,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,1由關(guān)系運(yùn)算符和邏輯運(yùn)算符可組成復(fù)雜邏輯表達(dá)式。如ABCABPRINTF“CD,AD\N”,C,A程序運(yùn)行結(jié)果為C0,A4。,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,例11閱讀下面的程序,分析復(fù)雜邏輯表達(dá)式運(yùn)算的語法規(guī)則。/EXAMPLE2_14C/INCLUDEMAIN{INTA4,B8,C5INTD1,D2,D3,D4D1AB/表達(dá)式1/PRINTF“D1D,AD,BD,CD\N“,D1,A,B,CD2AB/表達(dá)式2/PRINTF“D2D,AD,BD,CD\N“,D2,A,B,CD3AB/表達(dá)式3/PRINTF“D3D,AD,BD,CD\N“,D3,A,B,CD4AB/表達(dá)式4/PRINTF“D4D,AD,BD,CD\N“,D4,A,B,C},1分析程序的運(yùn)行結(jié)果。2如果有INTA4,B8,C5INTD1,D2,D3,D4D4AB;則D4,A,B,C的值分別為多少提示要避免含義不明確的表達(dá)式。,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,思考,244位運(yùn)算符及表達(dá)式?位運(yùn)算的作用直接對變量的二進(jìn)制按位進(jìn)行操作。注意位運(yùn)算只適合于整型和字符型變量。?位運(yùn)算符及其含義和優(yōu)先級如下,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,?位運(yùn)算規(guī)則,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,245條件運(yùn)算符?條件運(yùn)算符由“”和“”組成。?條件表達(dá)式的一般形式表達(dá)式1表達(dá)式2表達(dá)式3?條件表達(dá)式的語法規(guī)則當(dāng)表達(dá)式1的值為1(真)時,其結(jié)果為表達(dá)式2的值;當(dāng)表達(dá)式1的值為0(假)時,其結(jié)果為表達(dá)式3的值。注意表達(dá)式1通常是關(guān)系表達(dá)式或邏輯表達(dá)式,也可以是其他表達(dá)式。?條件運(yùn)算符又稱為三目運(yùn)算符,“三目”指的是操作數(shù)的個數(shù)有3個。,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,例12閱讀下面的程序,了解三目運(yùn)算符組成的表達(dá)式計算規(guī)則。/EXAMPLE2_15C了解三目運(yùn)算符的語法規(guī)則/INCLUDEINCLUDEMAIN{INTA3,B5,CCABABABPRINTF“THEMAXVALUEOFAANDBISD\N“,CA6B2CABABABPRINTF“THEMAXVALUEOFAANDBISD\N“,C}?請分析程序的運(yùn)行結(jié)果。,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,246逗號表達(dá)式?由逗號運(yùn)算符“,”將兩個表達(dá)式連接起來表達(dá)式1,表達(dá)式2?逗號表達(dá)式的語法規(guī)則先計算表達(dá)式1,再計算表達(dá)式2;最后結(jié)果為表達(dá)式2的結(jié)果。,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,例13了解逗號表達(dá)式的語法規(guī)則。/EXAMPLE2_16C了解逗號表達(dá)式/INCLUDEMAIN{INTA,BA35,A4B35,A4PRINTF“AD\NBD\N“,A,B}?請分析程序的運(yùn)算結(jié)果。,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,1.逗號表達(dá)式可以擴(kuò)充到具有N個表達(dá)式的情況表達(dá)式1,表達(dá)式2,,表達(dá)式N;?整個逗號表達(dá)式的結(jié)果為表達(dá)式N的值。2.通常是用逗號表達(dá)式來分別求逗號表達(dá)式內(nèi)各表達(dá)式的值,并不是為了求整個逗號表達(dá)式的值。3.變量定義中出現(xiàn)的逗號和在函數(shù)參數(shù)表中出現(xiàn)的逗號不構(gòu)成逗號表達(dá)式。4逗號表達(dá)式有可能降低程序的可讀性,請謹(jǐn)慎使用。,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,幾點(diǎn)說明,?請閱讀程序EXAMPLE2_17C,進(jìn)一步了解逗號表達(dá)式。,247數(shù)據(jù)類型的轉(zhuǎn)換?C語言允許表達(dá)式中混合有不同類型的常量和變量。1系統(tǒng)自動轉(zhuǎn)換?容易出現(xiàn)意外結(jié)果。假設(shè)有SATBAT結(jié)果為S67,B6,原因數(shù)據(jù)類型不一致,有可能產(chǎn)生數(shù)據(jù)丟失。?應(yīng)避免出現(xiàn)數(shù)據(jù)類型不一致的表達(dá)式。,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,2強(qiáng)制轉(zhuǎn)換數(shù)據(jù)類型?強(qiáng)制轉(zhuǎn)換表達(dá)式數(shù)據(jù)類型符表達(dá)式或數(shù)據(jù)類型符變量?強(qiáng)制轉(zhuǎn)換語法規(guī)則將表達(dá)式或變量的值臨時轉(zhuǎn)換成圓括號內(nèi)指定的數(shù)據(jù)類型。并不改變變量原來的數(shù)據(jù)類型。假設(shè)有INTAFLOATTA15TFLOATA/30結(jié)果為T05,若表達(dá)式為TA/30,則結(jié)果為T0。,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,248復(fù)雜表達(dá)式的計算順序?C語言共有各類運(yùn)算符47個,按優(yōu)先級可分為11個類別共15個優(yōu)先級。?運(yùn)算符的優(yōu)先級與運(yùn)算方向表210,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,例13閱讀程序,分析復(fù)雜表達(dá)式的計算順序。/EXAMPLE2_18C復(fù)雜表達(dá)式的計算順序/INCLUDEMAIN{INTA10,B15,C14,TEMPTEMPA6B/①/PRINTF“A6BTEMPABCB/A/②/PRINTF“ABCB/A}?請分析并修改程序。,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,249C語言的基本語句結(jié)構(gòu)?C語言的語句可分為四大類1.表達(dá)式語句2.復(fù)合語句3.控制語句4.轉(zhuǎn)向控制語句,24基本運(yùn)算符、表達(dá)式及運(yùn)算的優(yōu)先級,1.表達(dá)式語句?一個獨(dú)立的語句就是表達(dá)式語句。如A3BC/2IJBA3102.復(fù)合語句?由一對花括號“{}”將多個表達(dá)式語句括起來所組成。如{ABCXYAPRINFT“AD,XD\N“,A,X},3.控制語句?由控制結(jié)構(gòu)組成的語句,有5種控制語句(1)選擇(分支)語句IFELSE。(2)多分支語句SWITCH。(3)FOR循環(huán)語句FOR。(4)WHILE循環(huán)WHILE。(5)DO_WHILE循環(huán)DOWHILE。4.轉(zhuǎn)向控制語句?由系統(tǒng)提供的關(guān)鍵字構(gòu)成,用于改變程序的流程。有4種轉(zhuǎn)向控制語句(1)BREAK;可用于SWITCH語句和循環(huán)的語句。(2)CONTINUE;只適用于循環(huán)語句。(3)RETURN;用在函數(shù)的結(jié)束處。(4)GOTO;可用于程序的任何地方,但不提倡使用。,?C語言的輸入/輸出的操作是通過調(diào)用系統(tǒng)函數(shù)來實(shí)現(xiàn)。?常用的標(biāo)準(zhǔn)輸入/輸出函數(shù)有如下幾種。(1)格式化輸入/輸出函數(shù)SCANF/PRINTF。(2)字符輸入/輸出函數(shù)GETC/PUTC。(3)字符輸入/輸出函數(shù)GETCH/PUTCH。(4)字符輸入/輸出函數(shù)GETCHAR/PUTCHAR。(5)字符串輸入/輸出函數(shù)GETS/PUTS。?不同的函數(shù)在功能上有所不同,使用時應(yīng)根據(jù)具體的要求,選擇合適的輸入/輸出函數(shù)。,25標(biāo)準(zhǔn)輸入/輸出函數(shù)簡介,251格式化輸出函數(shù)PRINTF?函數(shù)PRINTF的一般形式為PRINTF“控制字符串“,輸出項(xiàng)列表?函數(shù)PRINTF的作用按控制字符串指定的格式,向標(biāo)準(zhǔn)輸出設(shè)備顯示器輸出指定的輸出項(xiàng)列表的值。注意可以是常量、變量、表達(dá)式。當(dāng)有多個輸出項(xiàng)時,各項(xiàng)之間用逗號分隔。中的個數(shù)、類型必須與中格式字符的個數(shù)、類型相一致。必須用雙引號將括起,可由格式說明和普通字符兩部分組成。,25標(biāo)準(zhǔn)輸入/輸出函數(shù)簡介,1.格式說明?格式說明的一般格式為?格式字符規(guī)定了對應(yīng)輸出項(xiàng)的輸出格式。注在格式字符前面,還可用字母1和H大小寫均可來說明是用LONG型或SHORT型格式輸出數(shù)據(jù)。?常用格式字符如表221所示。如D,C,F,LF,S等均為正確的輸出格式說明。,25標(biāo)準(zhǔn)輸入/輸出函數(shù)簡介,?修飾符是可選的,用于確定數(shù)據(jù)輸出的寬度、精度、小數(shù)位數(shù)、對齊方式等。若缺省修飾符,按系統(tǒng)默認(rèn)設(shè)定輸出。?修飾符的主要類型(1)字段寬度修飾符?用數(shù)字修飾輸出字符占用的寬度,規(guī)則見表222。如,L,52F,8LF,6S等均為正確的輸出格式說明。(2)對齊方式修飾符?默認(rèn)輸出方式為右對齊方式。在后面加上一個負(fù)號“?”,可使數(shù)據(jù)的輸出方式改為左對齊的方式。如3D,4C,52F,8LF,6S等均為正確的輸出格式說明。,25標(biāo)準(zhǔn)輸入/輸出函數(shù)簡介,2.普通字符?普通字符包括可打印字符和轉(zhuǎn)義字符。?可打印字符按原樣顯示在屏幕上,起說明作用。?轉(zhuǎn)義字符是一些不可顯示的控制字符,用于產(chǎn)生特殊的輸出效果。如“SM\T74F\N\TLU\N”為正確的輸出格式。?閱讀程序【例219】、【例220】、【例221】。了解格式輸出的方法。,25標(biāo)準(zhǔn)輸入/輸出函數(shù)簡介,252格式化輸入函數(shù)SCANF?函數(shù)SCANF的一般形式為SCANF“控制字符串“,輸入項(xiàng)列表?函數(shù)SCANF的作用按控制字符串指定的格式,從鍵盤輸入數(shù)據(jù),并將輸入的值賦給輸入項(xiàng)列表相對應(yīng)的變量。注意規(guī)定了數(shù)據(jù)的類型,其內(nèi)容也可由格式說明和普通字符兩部分組成。(注不提倡加普通字符)則由一個或多個變量地址組成,各變量地址之間用逗號“,”分隔。如有INTA,B則則變量A的寬度只占3個字符,有效值范圍為?99~999。?若超過寬度,系統(tǒng)會截斷,只取前3位。假如有INTA,BSCANF“D“,PRINTF“AD\TBD\N“,A,B若輸入為1234?12345?則系統(tǒng)會將1234賦給變量A,將12345的前3位的值123賦給變量B。輸出結(jié)果為A1234??B123,25標(biāo)準(zhǔn)輸入/輸出函數(shù)簡介,(2)L和H?字母L,L和H,H分別表示輸入數(shù)據(jù)類型的長短。L,L?可表示長整型、雙精度浮點(diǎn)型。H,H?克表示短整型數(shù)。如SCANF“LDHDLF“,則A按寬度為10的長整型數(shù),B為短整型數(shù),X為雙精度浮點(diǎn)型數(shù)。(3)字符“”的作用是跳過相應(yīng)的數(shù)據(jù)。輸入的數(shù)據(jù)不賦給變量。假如有INTX0,Y0,Z0SCANF“DDD“,若輸入為112233?則結(jié)果為X11,Y33,Z0(Z保持原來的值不變,22被跳過,沒有賦給任何變量。),25標(biāo)準(zhǔn)輸入/輸出函數(shù)簡介,2.普通字符?普通字符包括空白字符、轉(zhuǎn)義字符和可見字符。注意如果有普通字符,則輸入時需要原樣輸入。?特別提示在輸入格式的修飾符中,不建議使用普通字符。?普通字符的類型(1)空白字符空格符、制表符或換行符都是空白字符,但它們的ASCII值是不一樣的。?空白字符的作用對輸入的數(shù)據(jù)起分離作用。,25標(biāo)準(zhǔn)輸入/輸出函數(shù)簡介,若輸入的數(shù)據(jù)中含有字符型的數(shù)據(jù)時,需要作一些技術(shù)處理,否則有可能出錯。例如INTACHARCHSCANF“DC“,若輸入為64?Q?則結(jié)果為CH,A64,注結(jié)果并不是CHQ,A64思考怎樣改進(jìn)可使得結(jié)果為CHQ,A64,25標(biāo)準(zhǔn)輸入/輸出函數(shù)簡介,注意,(2)轉(zhuǎn)義字符\N、\T?轉(zhuǎn)義字符屬空白字符,對輸入的數(shù)據(jù)不產(chǎn)生影響。(3)可見字符?可見字符是指ASCII碼中所有通過鍵盤輸入的可見字符。如數(shù)字、字母、其他符號等。注意若輸入格式中含有可見字符,則實(shí)際輸入要“原樣輸入”。假如有INTA,BCHARCHSCANF“D,D,C“,若輸入為12,34,Q?則結(jié)果為A12,B34,CHQ思考若輸入為12,34,Q?則結(jié)果會怎樣,25標(biāo)準(zhǔn)輸入/輸出函數(shù)簡介,1.要注意數(shù)值型數(shù)據(jù)和字符型數(shù)據(jù)的取值特點(diǎn)。若要同時輸入這兩種類型的數(shù)據(jù),可采取先輸入字符型數(shù)據(jù),后輸入數(shù)值型數(shù)據(jù),以減少錯誤的發(fā)生。2.建議在SCANF語句中不要加入可見字符。避免錯誤的發(fā)生。,25標(biāo)準(zhǔn)輸入/輸出函數(shù)簡介,特別提醒,253字符輸出函數(shù)C語言專門為字符提供了專用的字符輸出函數(shù)。注對不同的編譯器,它們所在的頭文件有可能不同。常用的字符輸出函數(shù)表224,25標(biāo)準(zhǔn)輸入/輸出函數(shù)簡介,閱讀【例224】的程序EXAMPLE2_24C,了解字符輸出函數(shù)的功能。,254字符輸入函數(shù)C語言專門為字符提供了專用的字符輸入函數(shù)。注對不同的編譯器,它們所在的頭文件有可能不同。常用的字符輸出函數(shù)表225,25標(biāo)準(zhǔn)輸入/輸出函數(shù)簡介,1.使用GETCH函數(shù)輸入字符后,輸入的字符不會顯示在屏幕上。2.用字符輸入函數(shù)接收字符時,并不是從鍵盤輸入一個字符后立即響應(yīng),而是將輸入的內(nèi)容先讀入緩沖區(qū),待輸入結(jié)束后再一并執(zhí)行。3.與SCANF輸入函數(shù)不一樣,字符輸入函數(shù)將空格符、制表符、換行符也作為字符接收。,25標(biāo)準(zhǔn)輸入/輸出函數(shù)簡介,關(guān)于字符輸入函數(shù)特別提醒,閱讀【例225】的程序EXAMPLE2_25C,了解字符輸入函數(shù)的功能。,【例226】編寫程序,計算兩復(fù)數(shù)的差。程序要求從鍵盤輸入兩個復(fù)數(shù)的實(shí)部和虛部的值,然后求第1個復(fù)數(shù)與第2個復(fù)數(shù)的差。?核心算法分析兩個復(fù)數(shù)的算術(shù)運(yùn)算結(jié)果仍為復(fù)數(shù),計算兩個復(fù)數(shù)的差是實(shí)部與實(shí)部相減,虛部與虛部相減,即A1B1I?A2B2IA1A2B1B2I。程序見EXAMPLE2_26C思考請修改程序,完成計算兩復(fù)數(shù)的和與兩復(fù)數(shù)的差。,26程序范例,程序范例1,【例227】編寫程序,在屏幕上輸出由星號組成的菱形圖案。?核心算法分析利用PRINTF語句,可直接將輸出到屏幕上。程序見EXAMPLE2_27C思考請修改程序,輸出各種其他不同形狀的幾何圖案。,25標(biāo)準(zhǔn)輸入/輸出函數(shù)簡介,程序范例2,【例228】簡單的數(shù)學(xué)計算。編寫程序
下載積分: 4 賞幣
上傳時間:2024-01-06
頁數(shù): 75
大小: 2.16(MB)
子文件數(shù):
-
簡介:CHAP2用C語言編寫程序,21在屏幕上顯示HELLOWORLD22求華氏溫度100°F對應(yīng)的攝氏溫度23計算分段函數(shù)24輸出華氏攝氏溫度轉(zhuǎn)換表25生成乘方表與階乘表,1,21在屏幕上顯示HELLOWORLD,例21在屏幕上顯示一個短句HELLOWORLD,2,21在屏幕上顯示HELLOWORLD,/顯示HELLOWORLD/INCLUDEINTMAINVOID{PRINTF“HELLOWORLD\N”RETURN0},1任何程序都有主函數(shù)2程序由若干語句組成3語句由;結(jié)束,3,21在屏幕上顯示一些信息,例22在屏幕上顯示PROGRAMMINGISFUNANDPROGRAMMINGINCISEVENMOREFUN,4,INCLUDEINTMAINVOID{PRINTF“PROGRAMMINGISFUN\N“PRINTF“ANDPROGRAMMINGINCISEVENMOREFUN\N“RETURN0},注意RETURN語句攜帶執(zhí)行結(jié)果提前結(jié)束任務(wù),22求華氏溫度100°F對應(yīng)的攝氏溫度,攝氏溫度C5/9F32,5,221程序解析C5/9F32,INCLUDEINTMAINVOID{INTCELSIUS,FAHRFAHR100CELSIUS5FAHR32/9PRINTF“FAHRD,CELSIUSD\N“,FAHR,CELSIUSRETURN0},,6,數(shù)據(jù)類型常量5和9是整型常量(整數(shù))變量在定義時指定,數(shù)據(jù)常量在程序運(yùn)行過程中,其值不能改變變量在程序運(yùn)行過程中其值可以改變,變量的定義,變量定義的一般形式類型名變量名表;例如INTCELSIUS,FAHR定義整型變量FLOATX定義單精度浮點(diǎn)型變量DOUBLEAREA,LENGTH定義雙精度浮點(diǎn)型變量DOUBLE型數(shù)據(jù)比FLOAT精度高,取值范圍大,7,變量名字要合適,變量的定義,定義變量時要指定變量名和數(shù)據(jù)類型類型名變量名表;INTCELSIUS,FAHRFLOATXDOUBLEAREA,LENGTH變量名代表內(nèi)存中的一個存儲單元存放該變量的值該存儲單元的大小由變量的數(shù)據(jù)類型決定,8,變量的定義與使用,INCLUDEINTMAINVOID{INTCELSIUS,FAHRFAHR100CELSIUS5FAHR32/9PRINTF“FAHRD,CELSIUSD\N“,FAHR,CELSIUSRETURN0},一個變量名只能定義一次變量一般都定義在函數(shù)的開始,應(yīng)該先賦值,后引用,9,變量必須先定義,后使用。,223算術(shù)運(yùn)算和賦值運(yùn)算,FAHR100CELSIUS5FAHR32/91、算術(shù)運(yùn)算雙目算術(shù)運(yùn)算符/算術(shù)表達(dá)式用算術(shù)運(yùn)算符將運(yùn)算對象連接起來的符合C語言語法規(guī)則的式子數(shù)學(xué)式5/9F32C表達(dá)式5FAHR32/9數(shù)學(xué)式SSASBSCC表達(dá)式SSASBSC,10,算術(shù)運(yùn)算,注意/整數(shù)除整數(shù),得整數(shù)如1/2=0,9/4=25FAHR32/9和5/9FAHR32等價嗎針對整型數(shù)據(jù)如5%6=5,9%4=1,100%4=0雙目運(yùn)算符兩側(cè)操作數(shù)的類型要相同,11,賦值運(yùn)算,賦值運(yùn)算符賦值表達(dá)式用將一個變量和一個表達(dá)式連接起來的式子變量=表達(dá)式例如FAHR100CELSIUS5FAHR32/9計算賦值運(yùn)算符右側(cè)表達(dá)式的值將賦值運(yùn)算符右側(cè)表達(dá)式的值賦給左側(cè)的變量,=的左邊必須是一個變量,12,224格式化輸出函數(shù)PRINTF,數(shù)據(jù)輸出格式化輸出函數(shù)PRINTFINCLUDEPRINTF“HELLOWORLD\N“PRINTF“FAHRD,CELSIUSD\N“,FAHR,CELSIUSPRINTF格式控制字符串,輸出參數(shù)1,,輸出參數(shù)N,用雙引號括起來,表示輸出的格式,,要輸出的數(shù)據(jù),,13,PRINTF-格式控制字符串,PRINTF“HELLOWORLD\N“PRINTF“FAHRD,CELSIUSD\N“,FAHR,CELSIUSPRINTF“HI\N“,FAHR格式控制字符串普通字符原樣輸出格式控制說明按指定的格式輸出數(shù)據(jù),與數(shù)據(jù)類型有關(guān)INT型DFLOATDOUBLE型FPRINTF“FAHRD,CELSIUSD\N“,FAHR,CELSIUS,輸出FAHR100,CELSIUS37,14,23計算分段函數(shù),231程序解析232關(guān)系運(yùn)算233IFELSE語句234格式化輸入函數(shù)SCANF235常用數(shù)學(xué)庫函數(shù),15,231程序解析,例24分段計算水費(fèi)要解決的問題輸入計算分段函數(shù)輸出,并保留2位小數(shù)求EX,,16,231程序解析-求分段函數(shù),INCLUDEINTMAINVOID{DOUBLEX,YPRINTF“ENTERXX0\N“/輸入提示/SCANF“LF“,/調(diào)用SCANF函數(shù)輸入數(shù)據(jù)/IFX095F95000001267,ENTERXX015F150000002000,ENTERXX0213F213000004275,17,232關(guān)系運(yùn)算,XYXYXY關(guān)系表達(dá)式用關(guān)系運(yùn)算符將2個表達(dá)式連接起來的式子。如X095F95000001267,ENTERXX015F150000002000,ENTERXX0213F213000004275,23,234格式化輸入函數(shù)SCANF,數(shù)據(jù)輸入格式化輸入函數(shù)SCANFINCLUDESCANF“LF“,SCANF格式控制字符串,輸入?yún)?shù)1,,輸入?yún)?shù)N,用雙引號括起來,表示輸入的格式,,變量地址,,24,SCANF-格式控制字符串,格式控制字符串格式控制說明按指定的格式輸入數(shù)據(jù),與數(shù)據(jù)類型有關(guān)INT型DFLOAT型FDOUBLE型LF普通字符原樣輸入例如SCANF“LF“,,輸入95,SCANF“XLF“,,輸入X95,盡量不要出現(xiàn)普通字符,25,235常用數(shù)學(xué)庫函數(shù),庫函數(shù)C語言處理系統(tǒng)提供事先編好的函數(shù),供用戶在編程時調(diào)用。SCANF,PRINTF,EXP在相應(yīng)的系統(tǒng)文件(頭文件)中定義一些必需的信息。INCLUDE命令用戶調(diào)用庫函數(shù)時,將相應(yīng)的頭文件包含到源程序中。例如調(diào)用SCANF,PRINTF,需要INCLUDE調(diào)用SQRT,需要INCLUDE,26,常用數(shù)學(xué)庫函數(shù),平方根函數(shù)SQRTX絕對值函數(shù)FABSXFABS356的值為356冪函數(shù)POWX,NXNPOW11,2的值為121(即112)指數(shù)函數(shù)EXPXEXEXP23的值為E23以E為底的對數(shù)函數(shù)LOGXLNXLOG12345的值為4815836以10為底的對數(shù)函數(shù)LOG10XLOG10XLOG1012345的值為2091491。,27,例25計算存款的本息,輸入存款金額MONEY、存期YEAR和年利率RATE,根據(jù)公式計算存款到期時的本息合計SUM(稅前),輸出時保留2位小數(shù)。SUMMONEY1RATEYEAR,SUMMONEYPOW1RATE,YEAR,28,例25程序,INCLUDEINCLUDEINTMAINVOID{INTMONEY,YEARDOUBLERATE,SUMPRINTF“ENTERMONEY“SCANF“D“,PRINTF“ENTERYEAR“SCANF“D“,PRINTF“ENTERRATE“SCANF“LF“,SUMMONEYPOW1RATE,YEARPRINTF“SUM2F“,SUMRETURN0},ENTERMONEY1000ENTERYEAR3ENTERRATE0025SUM107689,29,調(diào)用SCANF函數(shù)輸入多個數(shù)據(jù),SCANF“DDLF“,輸入100030025SCANF需要多個輸入?yún)?shù)和多個格式控制說明輸入?yún)?shù)的類型、個數(shù)和位置要與格式控制說明一一對應(yīng)SCANF“DLFD“,程序運(yùn)行時,輸入的多個數(shù)據(jù)之間必須有間隔。,輸入?yún)?shù)、格式控制說明、輸入數(shù)據(jù),30,24輸出華氏-攝氏溫度轉(zhuǎn)換表,241程序解析242FOR語句243指定次數(shù)的循環(huán)程序設(shè)計,31,241程序解析,例26輸入2個整數(shù)LOWER和UPPER,輸出一張華氏-攝氏溫度轉(zhuǎn)換表,華氏溫度的取值范圍是LOWER,UPPER,每次增加1°F。FAHRCELSIUS301131063200330634113517,32,241程序解析溫度轉(zhuǎn)換表,教材第28頁源程序FORFAHRLOWERFAHRUPPERFAHR{CELSIUS50/90FAHR32PRINTF“D61F\N“,FAHR,CELSIUS},ENTERLOWER30ENTERUPPER35FAHRCELSIUS301131063200330634113517,33,FORFAHRLOWERFAHRUPPERFAHR{CELSIUS50/90FAHR32PRINTF“D61F\N“,FAHR,CELSIUS},34,FOR表達(dá)式1;表達(dá)式2;表達(dá)式3循環(huán)體語句實(shí)現(xiàn)C語句的重復(fù)執(zhí)行,242FOR語句-循環(huán)語句,3個表達(dá)式、循環(huán)體語句書寫順序和執(zhí)行順序不同表達(dá)式1只執(zhí)行一次,35,FORFAHRLOWERFAHRUPPERFAHR{CELSIUS50/90FAHR320PRINTF“D61F\N“,FAHR,CELSIUS},表達(dá)式1給循環(huán)變量賦初值,指定循環(huán)的起點(diǎn)。FAHRLOWER初始化表達(dá)式2給出循環(huán)的條件,決定循環(huán)的繼續(xù)或結(jié)束。FAHRUPPER條件判斷表達(dá)式3設(shè)置循環(huán)的步長,改變循環(huán)變量的值,從而可改變表達(dá)式2的真假性。FAHR控制改變語句被反復(fù)執(zhí)行的語句,一條語句。主要任務(wù),FOR語句的說明,36,求12100抽取具有共性的算式SUMSUMISUM初值為0,該算式重復(fù)100次,I從1變到100設(shè)I為循環(huán)變量,則指定循環(huán)起點(diǎn)的表達(dá)式1I1給出循環(huán)條件的表達(dá)式2I100設(shè)置循環(huán)步長的表達(dá)式3I循環(huán)體語句SUMSUMIFORI1I100ISUMSUMI,243指定次數(shù)的循環(huán)程序設(shè)計,37,/計算123100/INCLUDEINTMAINVOID{INTI,SUMSUM0/置累加和SUM的初值為0/FORI1I100I/循環(huán)重復(fù)100次/SUMSUMI/反復(fù)累加/PRINTF“SUMD\N”,SUM/輸出累加和/RETURN0},源程序-求12100,38,,一般包含四個部分初始化指定循環(huán)起點(diǎn)給循環(huán)變量賦初值,如I1進(jìn)入循環(huán)之前,設(shè)置相關(guān)變量的初值,如SUM0。條件控制只要I100,循環(huán)結(jié)束。,指定次數(shù)的循環(huán)程序設(shè)計,39,INCLUDEINTMAINVOID{INTI,SUMPRINTF“ENTERN“SCANF“D“,SUM0FORI1INISUMSUMIPRINTF“SUMD\N”,SUMRETURN0},例27求123N,40,,SUM0FORI1INI{ITEM10/2I1/計算第I項(xiàng)的值/SUMSUMITEM/累加第I項(xiàng)的值/},求前N項(xiàng)之和11/31/5,41,,DOUBLEITEM,SUM,例28求11/31/5的前N項(xiàng)和,42,SUM0FLAG1FORI1INI{ITEM10/2I1/計算第I項(xiàng)的值/SUMSUMFLAGITEM/累加第I項(xiàng)的值/FLAGFLAG/改變符號/},,INTI,PRODUCTPRODUCT1FORI1INIPRODUCTPRODUCTI,例29求N12N,43,INCLUDEINTMAINVOID{INTI,NDOUBLEPRODUCTPRINTF“INPUTN\N“SCANF“D“,PRODUCT1/置階乘PRODUCT的初值為1/FORI1INI/循環(huán)重復(fù)N次,計算N/PRODUCTPRODUCTIPRINTF“PRODUCT0F\N“,PRODUCTRETURN0},例29源程序,44,INCLUDEINTMAINVOID{INTI,NDOUBLEX,POWERPRINTF“ENTERX,N\N“SCANF“LFD“,POWER1/置POWER的初值為1/FORI1INI/循環(huán)重復(fù)N次,計算X的N次冪/POWERPOWERXPRINTF“0F\N“,POWER},求XN,45,25生成乘方表和階乘表,251程序解析252結(jié)構(gòu)化程序設(shè)計思想,46,251程序解析,例210(1)輸入一個正整數(shù)N,生成一張2的乘方表,輸出20到2N的值,可以調(diào)用冪函數(shù)計算2的乘方。,FORI0INI{POWERPOW2,I/調(diào)用冪函數(shù)POW2,I計算2的I次方/輸出POWER的值},47,源程序-生成乘方表,INCLUDEINCLUDEINTMAINVOID{INTI,NDOUBLEPOWERPRINTF“ENTERN“SCANF“D“,FORI0INI{POWERPOW2,I/調(diào)用冪函數(shù)POW2,I計算2的I次方/PRINTF“POW2,D0F\N“,I,POWER}RETURN0},ENTERN4POW2,01POW2,12POW2,24POW2,38POW2,416,48,例210(2)生成階乘表,輸入一個正整數(shù)N,生成一張階乘表,輸出0到N的值。要求定義和調(diào)用函數(shù)FACTN計算N,函數(shù)類型是DOUBLE。,FORI0INI{PRODUCTFACTI/調(diào)用自定義函數(shù)FACTI計算I/輸出PRODUCT的值},49,DOUBLEFACTINTN/函數(shù)首部/{INTIDOUBLEPRODUCTPRODUCT1FORI1INIPRODUCTPRODUCTIRETURNPRODUCT/將結(jié)果回送主函數(shù)/},252結(jié)構(gòu)化程序設(shè)計思想,結(jié)構(gòu)化程序設(shè)計STRUCTUREDPROGRAMMING程序設(shè)計技術(shù)C語言是結(jié)構(gòu)化程序設(shè)計語言強(qiáng)調(diào)程序設(shè)計的風(fēng)格和程序結(jié)構(gòu)的規(guī)范化,提倡清晰的結(jié)構(gòu),其基本思路是將一個復(fù)雜問題的求解過程劃分為若干階段,每個階段要處理的問題都容易被理解和處理。按自頂向下的方法對問題進(jìn)行分析、模塊化設(shè)計和結(jié)構(gòu)化編碼等3個步驟。,50,自頂向下的分析方法,把大的復(fù)雜的問題分解成小問題后再解決面對一個復(fù)雜的問題,首先進(jìn)行上層(整體)的分析,按組織或功能將問題分解成子問題,如果子問題仍然十分復(fù)雜,再做進(jìn)一步分解,直到處理對象相對簡單,容易處理為止。當(dāng)所有的子問題都得到了解決,整個問題也就解決了。每一次分解都是對上一層的問題進(jìn)行細(xì)化和逐步求精,最終形成一種類似樹形的層次結(jié)構(gòu),來描述分析的結(jié)果。,51,,學(xué)生成績統(tǒng)計程序,學(xué)生成績統(tǒng)計程序的層次結(jié)構(gòu)圖,52,模塊化設(shè)計,將模塊組織成良好的層次系統(tǒng),頂層模塊調(diào)用其下層模塊以實(shí)現(xiàn)程序的完整功能,每個下層模塊再調(diào)用更下層的模塊,從而完成程序的一個子功能,最下層的模塊完成最具體的功能。遵循模塊獨(dú)立性的原則,即模塊之間的聯(lián)系應(yīng)盡量簡單。一個模塊只完成一個指定的功能。模塊之間只通過參數(shù)進(jìn)行調(diào)用。一個模塊只有一個入口和一個出口。模塊內(nèi)慎用全局變量。,53,結(jié)構(gòu)化編碼,選用順序、選擇和循環(huán)三種控制結(jié)構(gòu),使程序具有良好的風(fēng)格。對變量、函數(shù)、常量等命名時,要見名知意,有助于對變量含義或函數(shù)功能的理解。在程序中增加必要的注釋,增加程序的可讀性。程序要清晰易懂,語句構(gòu)造要簡單直接,一行寫一條語句,采用縮進(jìn)格式。程序有良好的交互性,輸入有提示,輸出有說明,并盡量采用統(tǒng)一整齊的格式。,54,本章要點(diǎn),輸入輸出函數(shù)PRINTF,SCANF變量定義、使用、賦值算術(shù)運(yùn)算怎樣使用IF語句怎樣使用FOR語句了解結(jié)構(gòu)化程序設(shè)計思想,55,
下載積分: 4 賞幣
上傳時間:2024-01-06
頁數(shù): 55
大小: 0.52(MB)
子文件數(shù):
-
簡介:CHAP5函數(shù),51計算圓柱體積52使用函數(shù)編寫程序53變量與函數(shù),本章要點(diǎn),怎樣定義函數(shù)如何調(diào)用函數(shù)如何聲明函數(shù)什么是函數(shù)的參數(shù)在函數(shù)調(diào)用時,參數(shù)是如何傳遞的在使用函數(shù)的過程中,要注意哪些問題怎樣確定函數(shù)的參數(shù)如何使用局部變量和全局變量什么是靜態(tài)變量,51計算圓柱體積,511程序解析512函數(shù)的定義513函數(shù)的調(diào)用,511程序解析-計算圓柱體積,例51輸入圓柱體的高和半徑,求圓柱體積,VOLUMEΠR2H。要求定義和調(diào)用函數(shù)CYLINDERR,H計算圓柱體的體積。,例51源程序,/計算圓柱體積/INCLUDEINTMAINVOID{DOUBLEHEIGHT,RADIUS,VOLUMEDOUBLECYLINDERDOUBLER,DOUBLEH/函數(shù)聲明/PRINTF“ENTERRADIUSANDHEIGHT“SCANF“LFLF“,/調(diào)用函數(shù),返回值賦給VOLUME/VOLUMECYLINDERRADIUS,HEIGHTPRINTF“VOLUME3F\N“,VOLUMERETURN0},例51源程序,/定義求圓柱體積的函數(shù)/DOUBLECYLINDERDOUBLER,DOUBLEH{DOUBLERESULTRESULT31415926RRH/計算體積/RETURNRESULT/返回結(jié)果/},ENTERRADIUSANDHEIGHT3010VOLUME282743,512函數(shù)的定義,函數(shù)是指完成一個特定工作的獨(dú)立程序模塊。庫函數(shù)由C語言系統(tǒng)提供定義如SCANF()、PRINTF()等函數(shù)自定義函數(shù)需要用戶自己定義如計算圓柱體體積函數(shù)CYLINDER()MAIN也是一個函數(shù),C程序由一個MAIN或多個函數(shù)構(gòu)成。程序中一旦調(diào)用了某個函數(shù),該函數(shù)就會完成一些特定的工作,然后返回到調(diào)用它的地方。函數(shù)經(jīng)過運(yùn)算,得到一個明確的運(yùn)算結(jié)果,并需要回送該結(jié)果。例如,函數(shù)CYLINDER返回圓柱的體積。函數(shù)完成一系列操作步驟,不需要回送任何運(yùn)算結(jié)果。,1.返回運(yùn)算結(jié)果的函數(shù)定義,函數(shù)類型函數(shù)名(形參表)/函數(shù)首部/{/函數(shù)體/函數(shù)實(shí)現(xiàn)過程RETURN表達(dá)式;},,,把函數(shù)運(yùn)算的結(jié)果回送給主函數(shù),只能返回一個值,,函數(shù)返回值的類型,沒有分號,DOUBLECYLINDERDOUBLER,DOUBLEH{DOUBLERESULTRESULT31415926RRHRETURNRESULT},,形參,類型1參數(shù)1,類型2參數(shù)2,,類型N參數(shù)N參數(shù)之間用逗號分隔,每個參數(shù)前面的類型都必須分別寫明,函數(shù)類型函數(shù)名(形參表){函數(shù)實(shí)現(xiàn)過程RETURN表達(dá)式;},不能寫成DOUBLER,H,DOUBLECYLINDERDOUBLER,DOUBLEH{DOUBLERESULTRESULT31415926RRHRETURNRESULT},,,DOUBLECYLINDERDOUBLER,DOUBLEH/函數(shù)首部/{/函數(shù)體,寫在一對大括號內(nèi)/DOUBLERESULTRESULT31415926RRH/計算圓柱體積/RETURNRESULT/返回運(yùn)算結(jié)果/},分析函數(shù)的定義,,函數(shù)類型,,,函數(shù)名,形參表,與函數(shù)類型一致,,2.不返回運(yùn)算結(jié)果的函數(shù)定義,VOID函數(shù)名(參數(shù)表)/函數(shù)首部/{/函數(shù)體/函數(shù)實(shí)現(xiàn)過程RETURN;/可以省略RETURN/},這類函數(shù)通常用于屏幕輸出等,,表示不返回結(jié)果,不能省略否則函數(shù)類型被默認(rèn)定義為INT,,例52輸出5之內(nèi)的數(shù)字金字塔。,/輸出數(shù)字金字塔/INCLUDEINTMAINVOID{VOIDPYRAMIDINTN/函數(shù)聲明/PYRAMID5/調(diào)用函數(shù),輸出數(shù)字金字塔/RETURN0}VOIDPYRAMIDINTN/函數(shù)定義/{INTI,JFORI1IE{ITEMFLAG10/DENOMINATORSUMSUMITEMFLAGFLAGDENOMINATORDENOMINATOR2}RETURNSUM4},ENTERE00001PI31418,例55判斷素數(shù)的函數(shù),例55求100以內(nèi)的全部素數(shù),每行輸出10個。素數(shù)就是只能被1和自身整除的正整數(shù),1不是素數(shù),2是素數(shù)。要求定義和調(diào)用函數(shù)PRIMEM判斷M是否為素數(shù),當(dāng)M為素數(shù)時返回1,否則返回0。算法描述對2~100之間的每個數(shù)進(jìn)行判斷,若是素數(shù),則輸出該數(shù)。FORM2M100MIFM是素數(shù)PRINTF“D“,M,PRIMEM0,例55源程序,INCLUDEINCLUDEINTMAINVOID{INTCOUNT,MINTPRIMEINTMCOUNT0FORM2M100M{IFPRIMEM0{PRINTF“M“,MCOUNTIFCOUNT0PRINTF“\N“}}PRINTF“\N“},INTPRIMEINTM{INTI,NIFM1RETURN0NSQRTMFORI2INIIFMI0{RETURN0}RETURN1},53變量與函數(shù),531局部變量和全局變量532變量生命周期和靜態(tài)局部變量,531局部變量和全局變量,局部變量在函數(shù)內(nèi)定義的變量(包括形參)作用范圍本函數(shù)內(nèi)部定義在復(fù)合語句內(nèi)的變量作用范圍復(fù)合語句內(nèi)部全局變量在函數(shù)以外定義的變量,不從屬于任一函數(shù)。作用范圍從定義處到源文件結(jié)束(包括各函數(shù)),例56在復(fù)合語句中定義局部變量。,INCLUDEINTMAINVOID{INTAA1{/復(fù)合語句開始/INTB2BABAAB}/復(fù)合語句結(jié)束/PRINTF“D“,ARETURN0},B小范圍內(nèi)的臨時變量,,,4,例57全局變量定義,INCLUDE“STDIOH“INTX/定義全局變量X/INTF{INTX4/X為局部變量/RETURNX}INTMAINVOID{INTA1XA/對全局變量X賦值/AF/A的值為4/{INTB2BAB/B的值為4/XXB/全局變量運(yùn)算/}PRINTF“DD“,A,XRETURN0},4,7,若局部變量與全局變量同名,局部變量優(yōu)先,,,,,變量作用范圍示例,INTX1VOIDMAIN{INTA2{INTB3}F}INTT4VOIDF{INTX5,B6}INTA7,XAB,B,X5B6T4A沒定義,,,,,,,XBTA,自動變量(AUTO)普通的局部變量INTX,Y??AUTOINTX,YCHARC1??AUTOCHARC1函數(shù)調(diào)用時,定義變量,分配存儲單元。函數(shù)調(diào)用結(jié)束,收回存儲單元。全局變量從程序執(zhí)行開始,到程序的結(jié)束,存儲單元始終保持。變量生命周期變量從定義開始分配存儲單元,到運(yùn)行結(jié)束存儲單元被回收的整個過程。,532變量生命周期和靜態(tài)局部變量,存儲類型動態(tài)存儲自動變量靜態(tài)存儲全局變量、靜態(tài)局部變量用戶存儲空間,存儲區(qū),STATIC類型名變量表作用范圍局部變量生命周期全局變量,靜態(tài)局部變量,例59靜態(tài)局部變量示例,INCLUDEVOIDFUNINTK;INTMAINVOID{INTKFORK1K3KFUNKRETURN0}VOIDFUNINTK{STATICINTAPRINTF“D,“,AAK},0,1,3,,靜態(tài)變量會記住前一次調(diào)用時留下來的值,靜態(tài)變量的初值為0,本章要點(diǎn),怎樣定義函數(shù)如何調(diào)用函數(shù)如何聲明函數(shù)什么是函數(shù)的參數(shù)在函數(shù)調(diào)用時,參數(shù)是如何傳遞的在使用函數(shù)的過程中,要注意哪些問題怎樣確定函數(shù)的參數(shù)如何使用局部變量和全局變量什么是靜態(tài)變量,
下載積分: 4 賞幣
上傳時間:2024-01-06
頁數(shù): 34
大?。?0.36(MB)
子文件數(shù):
-
簡介:第二章C簡單程序設(shè)計,清華大學(xué)鄭莉,C語言程序設(shè)計,2,本章主要內(nèi)容,C語言概述基本數(shù)據(jù)類型和表達(dá)式數(shù)據(jù)的輸入與輸出算法的基本控制結(jié)構(gòu)自定義數(shù)據(jù)類型,3,C語言的產(chǎn)生,C是從C語言發(fā)展演變而來的,首先是一個更好的C引入了類的機(jī)制,最初的C被稱為“帶類的C”1983年正式取名為C從1989年開始C語言的標(biāo)準(zhǔn)化工作于1994年制定了ANSIC標(biāo)準(zhǔn)草案于1998年11月被國際標(biāo)準(zhǔn)化組織(ISO)批準(zhǔn)為國際標(biāo)準(zhǔn),成為目前的C,C語言概述,4,C的特點(diǎn),全面兼容C它保持了C的簡潔、高效和接近匯編語言等特點(diǎn)對C的類型系統(tǒng)進(jìn)行了改革和擴(kuò)充C也支持面向過程的程序設(shè)計,不是一個純正的面向?qū)ο蟮恼Z言支持面向?qū)ο蟮姆椒?C語言概述,5,C程序?qū)嵗?1,//2_1CPPINCLUDEUSINGNAMESPACESTDINTMAIN{COUT,,基本數(shù)據(jù)類型和表達(dá)式,28,條件運(yùn)算符與條件表達(dá)式,注意條件運(yùn)算符優(yōu)先級高于賦值運(yùn)算符,低于邏輯運(yùn)算符表達(dá)式2、3的類型可以不同,條件表達(dá)式的最終類型為2和3中較高的類型。例XABAB,基本數(shù)據(jù)類型和表達(dá)式,,①,,②,29,SIZEOF運(yùn)算符,語法形式SIZEOF類型名或SIZEOF表達(dá)式結(jié)果值“類型名”所指定的類型或“表達(dá)式”的結(jié)果類型所占的字節(jié)數(shù)。例SIZEOFSHORTSIZEOFX,基本數(shù)據(jù)類型和表達(dá)式,30,,位運(yùn)算按位與(取指定位。例如有CHARCINTA取出A的低字節(jié),置于C中CA,基本數(shù)據(jù)類型和表達(dá)式,31,位運(yùn)算按位或(|),運(yùn)算規(guī)則將兩個運(yùn)算量的每一個位進(jìn)行邏輯或操作舉例計算3|53000000115|000001013|500000111用途將某些位置1,其他位不變。例如將INT型變量A的低字節(jié)置1AA|0XFF,基本數(shù)據(jù)類型和表達(dá)式,32,位運(yùn)算按位異或(),運(yùn)算規(guī)則兩個操作數(shù)進(jìn)行異或若對應(yīng)位相同,則結(jié)果該位為0,若對應(yīng)位不同,則結(jié)果該位為1,舉例計算071052071001110010520010101007105200010011,基本數(shù)據(jù)類型和表達(dá)式,33,位運(yùn)算按位異或(),用途使特定位翻轉(zhuǎn)(與0異或保持原值,與1異或取反)例如要使01111010低四位翻轉(zhuǎn)011110100000111101110101,基本數(shù)據(jù)類型和表達(dá)式,34,位運(yùn)算取反,單目運(yùn)算符,對一個二進(jìn)制數(shù)按位取反。例02500000000000101010251111111111101010,基本數(shù)據(jù)類型和表達(dá)式,35,位運(yùn)算移位,左移運(yùn)算()右移后,低位舍棄高位無符號數(shù)補(bǔ)0有符號數(shù)補(bǔ)“符號位”,基本數(shù)據(jù)類型和表達(dá)式,36,運(yùn)算符優(yōu)先級,,,SIZEOF,/,,,位運(yùn)算不可寫為IFAB0TA,語句,42,復(fù)合語句,將多個語句用一對大括號包圍,便構(gòu)成一個復(fù)合語句例如{SUMSUMII},語句,43,簡單的輸入、輸出,向標(biāo)準(zhǔn)輸出設(shè)備(顯示器)輸出例INTXCOUTX,44,順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu),算法的基本控制結(jié)構(gòu),45,如何解決分支問題,例22輸入一個年份,判斷是否閏年。,算法的基本控制結(jié)構(gòu),INCLUDEUSINGNAMESPACESTDINTMAIN{INTYEARBOOLISLEAPYEARCOUTYEARISLEAPYEARYEAR40IFISLEAPYEARCOUTYCOUTYCOUTXYIFXYIFXYCOUTY“DAYSWITCHDAY{CASE0COUTNCOUTIWHILEIIDO{SUMII}WHILEINCOUTNWHILEN0{IFN0IIFNN}COUT“正整數(shù)個數(shù)“I“負(fù)整數(shù)個數(shù)“JENDL},74,75,BREAK和CONTINUE語句,BREAK語句使程序從循環(huán)體和SWITCH語句內(nèi)跳出,繼續(xù)執(zhí)行邏輯上的下一條語句。不宜用在別處。CONTINUE語句結(jié)束本次循環(huán),接著判斷是否執(zhí)行下一次循環(huán)。,算法的基本控制結(jié)構(gòu),76,TYPEDEF語句,為一個已有的數(shù)據(jù)類型另外命名語法形式TYPEDEF已有類型名新類型名表例如TYPEDEFDOUBLEAREA,VOLUMETYPEDEFINTNATURALNATURALI1,I2AREAAVOLUMEV,自定義數(shù)據(jù)類型,77,枚舉類型ENUM,只要將需要的變量值一一列舉出來,便構(gòu)成了一個枚舉類型。枚舉類型的聲明形式如下ENUM枚舉類型名{變量值列表}例如ENUMWEEKDAY{SUN,MON,TUE,WED,THU,FRI,SAT},自定義數(shù)據(jù)類型,78,枚舉類型ENUM,枚舉類型應(yīng)用說明對枚舉元素按常量處理,不能對它們賦值。例如,不能寫SUN0枚舉元素具有默認(rèn)值,它們依次為0,1,2,。也可以在聲明時另行指定枚舉元素的值,如ENUMWEEKDAY{SUN7,MON1,TUE,WED,THU,FRI,SAT}枚舉值可以進(jìn)行關(guān)系運(yùn)算。整數(shù)值不能直接賦給枚舉變量,如需要將整數(shù)賦值給枚舉變量,應(yīng)進(jìn)行強(qiáng)制類型轉(zhuǎn)換。,自定義數(shù)據(jù)類型,79,例211,設(shè)某次體育比賽的結(jié)果有四種可能勝(WIN)、負(fù)(LOSE)、平局(TIE)、比賽取消(CANCEL),編寫程序順序輸出這四種情況。分析由于比賽結(jié)果只有四種可能,所以可以聲明一個枚舉類型,聲明一個枚舉類型的變量來存放比賽結(jié)果。,自定義數(shù)據(jù)類型,INCLUDEUSINGNAMESPACESTDENUMGAME_RESULT{WIN,LOSE,TIE,CANCEL}INTMAIN{GAME_RESULTRESULTENUMGAME_RESULTOMITCANCELINTCOUNTFORCOUNTWINCOUNTCANCELCOUNT{RESULTGAME_RESULTCOUNTIFRESULTOMIT{COUT“THEGAMEWASCANCELLED\N“}ELSE{COUT“THEGAMEWASPLAYED“IFRESULTWINCOUT“ANDWEWON“IFRESULTLOSECOUT“ANDWELOST“COUT“\N“}}RETURN0},80,運(yùn)行結(jié)果THEGAMEWASPLAYEDANDWEWONTHEGAMEWASPLAYEDANDWELOSTTHEGAMEWASPLAYEDTHEGAMEWASCANCELLED,81,82,結(jié)構(gòu)體結(jié)構(gòu)的聲明,結(jié)構(gòu)的概念結(jié)構(gòu)是由不同數(shù)據(jù)類型的數(shù)據(jù)組成的集合體。聲明結(jié)構(gòu)類型STRUCT結(jié)構(gòu)名{數(shù)據(jù)類型成員名1;數(shù)據(jù)類型成員名2;數(shù)據(jù)類型成員名N;},自定義數(shù)據(jù)類型,83,結(jié)構(gòu)體結(jié)構(gòu)的聲明,舉例STRUCTSTUDENT//學(xué)生信息結(jié)構(gòu)體{INTNUM//學(xué)號CHARNAME20//姓名CHARGENDER//性別INTAGE//年齡FLOATSCORE//成績CHARADDR30//住址},自定義數(shù)據(jù)類型,84,結(jié)構(gòu)體結(jié)構(gòu)變量說明,變量說明形式結(jié)構(gòu)名結(jié)構(gòu)變量名;注意結(jié)構(gòu)變量的存儲類型概念、它的壽命、可見性及使用范圍與普通變量完全一致。結(jié)構(gòu)變量說明在結(jié)構(gòu)類型聲明之后,二者也可同時進(jìn)行。結(jié)構(gòu)變量占內(nèi)存大小可用SIZEOF運(yùn)算求出SIZEOF運(yùn)算量,自定義數(shù)據(jù)類型,85,結(jié)構(gòu)體結(jié)構(gòu)變量的初始化和使用,初始化說明結(jié)構(gòu)變量的同時可以直接設(shè)置初值。使用結(jié)構(gòu)體成員的引用形式結(jié)構(gòu)變量名成員名,自定義數(shù)據(jù)類型,86,例212,結(jié)構(gòu)體變量的初始化和使用INCLUDEINCLUDEUSINGNAMESPACESTDSTRUCTSTUDENT//學(xué)生信息結(jié)構(gòu)體{INTNUM//學(xué)號CHARNAME20//姓名CHARGENDER//性別INTAGE//年齡}STU{97001,“LINLIN“,F,19}INTMAIN{COUTSETW7STUNUMSETW20STUNAMESETW3STUSEXSETW3STUAGE},自定義數(shù)據(jù)類型,運(yùn)行結(jié)果97001LINLINF19,87,聯(lián)合體,聲明形式UNION聯(lián)合名{數(shù)據(jù)類型成員名1;數(shù)據(jù)類型成員名2;數(shù)據(jù)類型成員名N;}聯(lián)合體類型變量說明的語法形式聯(lián)合名聯(lián)合變量名;引用形式聯(lián)合名成員名,自定義數(shù)據(jù)類型,88,例UNIONUAREA{CHARC_DATASHORTS_DATALONGL_DATA},聯(lián)合體,自定義數(shù)據(jù)類型,89,無名聯(lián)合,無名聯(lián)合沒有標(biāo)記名,只是聲明一個成員項(xiàng)的集合,這些成員項(xiàng)具有相同的內(nèi)存地址,可以由成員項(xiàng)的名字直接訪問。例UNION{INTIFLOATF}在程序中可以這樣使用I10F22,自定義數(shù)據(jù)類型,90,小結(jié)與復(fù)習(xí)建議,主要內(nèi)容C語言概述、基本數(shù)據(jù)類型和表達(dá)式、數(shù)據(jù)的輸入與輸出、算法的基本控制結(jié)構(gòu)、自定義數(shù)據(jù)類型達(dá)到的目標(biāo)掌握C語言的基本概念和基本語句,能夠編寫簡單的程序段。實(shí)驗(yàn)任務(wù)實(shí)驗(yàn)二,
下載積分: 4 賞幣
上傳時間:2024-01-06
頁數(shù): 90
大?。?0.77(MB)
子文件數(shù):