高級(jí)語言程序設(shè)計(jì)課件_第1頁
高級(jí)語言程序設(shè)計(jì)課件_第2頁
高級(jí)語言程序設(shè)計(jì)課件_第3頁
高級(jí)語言程序設(shè)計(jì)課件_第4頁
高級(jí)語言程序設(shè)計(jì)課件_第5頁
已閱讀5頁,還剩425頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第一章C語言概述

一、C語言及其學(xué)習(xí)特點(diǎn)1.為什麼從C語言開始開發(fā)能力最強(qiáng),應(yīng)用最廣泛操作系統(tǒng)開發(fā)、應(yīng)用程式開發(fā)、單片機(jī)程式開發(fā)、網(wǎng)路程式設(shè)計(jì)……專業(yè)水準(zhǔn)的試金石各種專業(yè)考試首選程式設(shè)計(jì)語言:研究生入學(xué)考試、程式員考試、等級(jí)考試……後續(xù)主幹課程的重要基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)、資料庫程式設(shè)計(jì)、Java程式設(shè)計(jì)、可視化程式設(shè)計(jì)、網(wǎng)路編程……

如何學(xué)習(xí)C語言編程?編程似寫作

先學(xué)“字詞句”和“語法”,目標(biāo)是“寫作”。學(xué)習(xí)數(shù)據(jù)類型、控制結(jié)構(gòu)、語法規(guī)則等——學(xué)語基掌握程式分析、演算法與編程——寫文章僅僅讀書是不夠的

程式是編出來的,程式是調(diào)出來——在編程實(shí)踐中消化知識(shí)。沒有天生的程式員初學(xué)者:有點(diǎn)難。沒有學(xué)不會(huì)的,只有學(xué)不精的——除非自己放棄。出於藍(lán)勝於藍(lán):超過你的老師完全可能。循次漸近很重要閱讀/分析程式→摹仿編程→掌握常見程式模組→簡(jiǎn)單程式→複雜編程僅是起點(diǎn),而非終點(diǎn)

從此編程與你相伴而行——真正的程式員從此起步。聽課要求:切實(shí)掌握各章主要內(nèi)容(預(yù)習(xí)/聽課/消化/歸納)在預(yù)習(xí)基礎(chǔ)上,聽課為主,筆記為輔,課後弄懂課件和教材中的程式(會(huì)分析,會(huì)流利寫出)考核方式:作業(yè)(書面/上機(jī))、期中考、期未考、課程設(shè)計(jì)講義下載:2/課件/C語言課件軟體下載:

2/實(shí)用軟體檔案名turboc20.zip教師聯(lián)繫:陳綿獻(xiàn)mianxian@21QQ:43286144二、C語言編程步驟從商業(yè)化的角度看,C編程步驟如下:

編寫程式(寫在紙上或輸入到電腦上的根源程式)

調(diào)試程式(修正錯(cuò)誤,實(shí)現(xiàn)功能)

出售程式(生成的可執(zhí)行檔)常用開發(fā)工具:

◆面向過程常用—TurboC(PC機(jī)版,簡(jiǎn)稱TC)◆面向?qū)ο蟪S谩狢++/VisualC++(可視化,簡(jiǎn)稱VC)最新:

為Windows和Web應(yīng)用程式提供動(dòng)態(tài)開發(fā)環(huán)境的VisualC++.NET(C#)

C語言程式加工流程C語言是一種通過編譯程序處理的高級(jí)程式設(shè)計(jì)語言。所以其上機(jī)的處理流程可用以下示意圖表示:例一:最簡(jiǎn)單的hello.c程式

用記事本編寫/用TC直接編寫

根源程式(.c)———目標(biāo)程式(.obj)———可執(zhí)行程式(.exe)

(你編寫的)

編譯(中間產(chǎn)品)

連接(你出售的)

compilelink具體上機(jī)步驟如下:?jiǎn)?dòng)機(jī)器,稍候後出現(xiàn):

login

(入網(wǎng)註冊(cè)命令)

Enteryourloginname:jj03101

(輸入用戶名)

password:

*****

(輸入用戶密碼)……(顯示網(wǎng)路有關(guān)資訊)

C>tc

(調(diào)用TurboC軟體)

此時(shí)便出現(xiàn)TurboC初始螢?zāi)唬ǖ?頁圖1.2所示)。

用戶名:計(jì)教031班5號(hào)

jj03105(初始密碼:jj031)

計(jì)應(yīng)032班11號(hào)

jy03211(初始密碼:jy032)

密碼修改:

setpass——輸入原密碼——輸入新密碼——再輸入新密碼在你的機(jī)上如何安裝TC?軟體下載與解壓

0/實(shí)用軟體turboc20.zip95/實(shí)用軟體(校外)目錄(directory)設(shè)置

Includedirectories(頭檔所在目錄)Librarydirectories(庫檔所在目錄)Outputdirectories(輸出檔所在目錄)TurboCdirectories(TC檔所在目錄)還有一個(gè)好東東:C語言學(xué)習(xí)系統(tǒng)/*給定半徑,求圓的面積*/#definePI3.14159/*編譯預(yù)處理——宏替換*/#include<stdio.h>/*編譯預(yù)處理——檔包含*/#include<math.h>/*編譯預(yù)處理——檔包含*/main()/*主函數(shù)*/{floatr,s;/*定義變數(shù)r、s類型為單精確度實(shí)型*/

r=1.0;/*變數(shù)r賦初值*/s=PI*pow(r,2);/*計(jì)算圓面積s*/printf("半徑R=%f時(shí),面積S=%f\n",r,s);/*輸出結(jié)果*/}三、C程式的基本結(jié)構(gòu)例一求圓面積程式

area.c/*給定半徑,求圓的面積*/#definePI3.14159/*編譯預(yù)處理——宏替換*/#include<stdio.h>/*編譯預(yù)處理——檔包含*/#include<math.h>/*編譯預(yù)處理——檔包含*/main()/*主函數(shù)*/{floatr,s;/*定義變數(shù)r、s類型為單精確度實(shí)型*/r=1.0;/*變數(shù)r賦初值*/s=PI*pow(r,2);/*計(jì)算圓面積s*/printf("半徑R=%f時(shí),面積S=%f\n",r,s);/*輸出結(jié)果*/}例一(求圓面積程式area.c)分析注釋部份P5這部分內(nèi)容不會(huì)被編譯,也不被執(zhí)行

編譯預(yù)處理程式編譯、執(zhí)行前系統(tǒng)自動(dòng)進(jìn)行的特殊處理特點(diǎn):以#開頭結(jié)束處無分號(hào)關(guān)於編譯預(yù)處理(宏定義)

P39和P187#definePI3.14159#define—宏定義命令

PI—符號(hào)常量(宏名,最好用大寫,以區(qū)別一般變數(shù))

3.14159—宏體(可以是一個(gè)運(yùn)算式,如3+4)作用:用簡(jiǎn)單符號(hào)代表宏體部份內(nèi)容(編譯時(shí)會(huì)先自動(dòng)替換)意義:直觀/多次使用/便於修改注意:#define可出現(xiàn)在程式的任一位置(作用範(fàn)圍:由此行到程式末尾)宏定義不是C語句,不必在行未加分號(hào),否則會(huì)連分號(hào)一起置換。

關(guān)於編譯預(yù)處理(檔包含)

P194#include<stdio.h>

stdio.h——“頭檔”(標(biāo)準(zhǔn)前導(dǎo)檔)C語言是一種“裝配式”語言,許多常規(guī)的工作如輸入、輸出、數(shù)學(xué)函數(shù)等,往往事先由人做成各種“程式模組”(庫函數(shù)),存放在各種所謂“頭檔”(.h)中。使用時(shí)只需進(jìn)行以下處理——

◆#include“頭檔案名”

#include

<頭檔案名>

◆在程式的執(zhí)行部分調(diào)用該庫函數(shù):函數(shù)名(參數(shù))檔包含的作用,就是根據(jù)需要把相應(yīng)的某個(gè)“頭檔”的內(nèi)容在編譯時(shí)先整體嵌入所編的程式中。用戶也可以將自己設(shè)計(jì)的程式模組等做成“頭檔”,供其他程式“包含”。檔包含示意圖#include<stdio.h>#include<math.h>……根源程式area.c(用戶編寫)頭檔stdio.h(系統(tǒng)提供)頭檔math.h(系統(tǒng)提供)area.exe(可執(zhí)行程式)stdio.hmath.h編譯/連接

例一中,area.c檔本身只有12行,stdio.h有187行,

math.h有107行,實(shí)際上stdio.h本身還包括一個(gè)24行的頭檔stdarg.h。“檔包含”是在編譯後連接時(shí)“包含”進(jìn)可執(zhí)行程式的。比較:area.c1kb;

area.obj1kb;

area.exe26kbstdarg.hstdio.hstdarg.hmath.h使用“檔包含”功能的優(yōu)點(diǎn)提高程式設(shè)計(jì)效率和程式可靠性減少程式員重複勞動(dòng)量

TurboC提供了三百多個(gè)標(biāo)準(zhǔn)庫函數(shù),存放在若干個(gè)頭檔中(常用庫函數(shù)見P381-387)本章中:stdio.h標(biāo)準(zhǔn)輸入/輸出函數(shù)

math.h數(shù)學(xué)函數(shù)

stdlib.h

常用函數(shù)一個(gè)優(yōu)秀的程式員不應(yīng)是事無巨細(xì)都要從頭做起的“工匠”,而應(yīng)是一個(gè)“策劃師”+“組裝師”。所以,逐步熟悉並掌握常用函數(shù)等現(xiàn)有功能模組,是學(xué)習(xí)C程式設(shè)計(jì)的一個(gè)重要內(nèi)容。/*給定半徑,求圓的面積*/#definePI3.14159/*編譯預(yù)處理——宏定義*/#include<stdio.h>/*編譯預(yù)處理——檔包含*/#include<math.h>/*編譯預(yù)處理——檔包含*/main()/*主函數(shù)*/{floatr,s;/*定義變數(shù)r、s類型為單精確度實(shí)型*/

r=1.0;/*變數(shù)r賦初值*/s=PI*pow(r,2);/*計(jì)算圓面積s*/printf("半徑R=%f時(shí),面積S=%f\n",r,s);/*輸出結(jié)果*/}例一(求圓面積程式area.c)分析(續(xù),主函數(shù))

主函數(shù)的基本形式main(){

……

(函數(shù)體)}主函數(shù)

關(guān)於主函數(shù)

main()

{……}C語言是一種函數(shù)式語言,它的一個(gè)函數(shù)實(shí)際上就是一個(gè)功能模組——C程式的基本組成是函數(shù)。一個(gè)C程式是由一個(gè)固定名稱為main的主函數(shù)和若干個(gè)其他函數(shù)(可沒有)組成。一個(gè)C程式必須有一個(gè)、也只能有一個(gè)主函數(shù)。主函數(shù)在程式中的位置可以任意,但程式執(zhí)行時(shí)總是從主函數(shù)開始,在主函數(shù)內(nèi)結(jié)束。主函數(shù)可以調(diào)用其他各種函數(shù)(包括用戶自己編寫的),但其他函數(shù)不能調(diào)用主函數(shù)。主函數(shù)的一般形式:main(){

說明部分程式段(定義數(shù)據(jù)類型)執(zhí)行部分程式段(給出操作指令)}

函數(shù)體說明部分(簡(jiǎn)單程式可能沒有此部分,如P4例1.1):

floatr,s;/*定義變數(shù)r、s類型為單精確度實(shí)型*/inta,b;/*定義變數(shù)a、b類型為整型*/執(zhí)行部份:輸入、賦值、計(jì)算、控制、輸出等:

r=1.0;/*變數(shù)r賦初值*/s=PI*pow(r,2);/*計(jì)算圓面積s*/printf("半徑R=%f時(shí),面積S=%f\n",r,s);/*輸出結(jié)果*/其他函數(shù)標(biāo)準(zhǔn)庫函數(shù)——只能調(diào)用。使用方法:

⒈先“包含”,即將該函數(shù)所在頭檔包含在程式中。⒉後調(diào)用。調(diào)用方式:函數(shù)名(參數(shù))例:#include<stdio.h>#include<math.h>main()

{

……

s=PI*pow(r,2);

……

printf(“半徑R=%f時(shí),面積S=%f\n”,r,s);

}說明:pow(x,y)求xy

(math.h中的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù))P382

printf(……);(stdio.h中的標(biāo)準(zhǔn)輸出函數(shù))P386其他函數(shù)自編(定義)函數(shù):

(詳見教材第8章)

⒈先定義(規(guī)定函數(shù)類型、函數(shù)名和函數(shù)功能)⒉後調(diào)用(使用所定義的函數(shù)實(shí)現(xiàn)其功能)

定義函數(shù):

函數(shù)類型函數(shù)名(形式參數(shù))

{函數(shù)體}

調(diào)用函數(shù):函數(shù)名(參數(shù))【示例】求三個(gè)數(shù)的平均值自定義函數(shù)示例floataverage(floatx,floaty,floatz)/*定義函數(shù)average()*/{floataver;aver=(x+y+z)/3;return(aver);}main()/*主函數(shù)*/{floata,b,c,ave;a=3.5;b=4.6;c=7.9;ave=average(a,b,c);/*調(diào)用自定義函數(shù)average()*/printf("average=%f",ave);}

自定義函數(shù)一般形式

函數(shù)類型函數(shù)名(形式參數(shù)){……(函數(shù)體)}/*給定半徑,求圓的面積*/#definePI3.14159/*編譯預(yù)處理——宏替換*/#include<stdio.h>/*編譯預(yù)處理——檔包含*/#include<math.h>/*編譯預(yù)處理——檔包含*/main()/*主函數(shù)*/{floatr,s;/*定義變數(shù)r、s類型為單精確度實(shí)型*/

r=1.0;/*變數(shù)r賦初值*/s=PI*pow(r,2);/*計(jì)算圓面積s*/

printf("半徑R=%f時(shí),面積S=%f\n",r,s);/*輸出結(jié)果*/}求圓面積程式area.c分析(續(xù),語句)

關(guān)於語句特點(diǎn):

均以分號(hào)結(jié)束;一個(gè)程式行可以有多個(gè)語句。語句組成了函數(shù)體。強(qiáng)烈建議:

按縮進(jìn)格式書寫語句。本示例程式中使用了:

①數(shù)據(jù)類型定義語句②賦值語句③輸出語句關(guān)於語句:

①數(shù)據(jù)類型定義語句語句形式

變數(shù)類型關(guān)鍵字變數(shù)名;

floatr,s;

定義r、s為單精確度實(shí)型變數(shù)

intr,s;

定義r、s為整型變數(shù)【注意】在C語言程式中,所有變數(shù)都要先定義後使用,否則就會(huì)出現(xiàn)編譯錯(cuò)誤提示,如:

Error:

Undefinedsymbol‘a(chǎn)’infunctionmain

Let’stry…變數(shù)類型關(guān)鍵字字元型(描述文字性的數(shù)據(jù))char

數(shù)值型:

■整型(在機(jī)內(nèi)是準(zhǔn)確表示的)

int

■實(shí)型(在機(jī)內(nèi)一般是近似表示的)

float(有效數(shù)字6位)

double(有效數(shù)字16位)變數(shù)名P40C語言識(shí)別字(變數(shù)名、符號(hào)常量名、函數(shù)名等)命名:

■組成:字母、數(shù)字、下劃線

■開頭:字母、下劃線

■長(zhǎng)度:≤32字元(TurboC)

【注意】大小寫為不同字元(變數(shù)名一般小寫,符號(hào)常量名一般大寫),還要注意不得與關(guān)鍵字(P375)同名。關(guān)於語句:

②賦值語句作用:使變數(shù)獲得具體的運(yùn)算值。語句形式

變數(shù)名=運(yùn)算式(常量、變數(shù)、函數(shù)、算式及其混合);

r=1.0;

/*變數(shù)r賦初值*/

s=PI*pow(r,2);

/*計(jì)算圓面積s*/

注意:函數(shù)pow()在頭檔math.h中定義(見P382)。所以程式開頭處必須加上一行所謂“檔包含”:

#include<math.h>變數(shù)賦初值亦可在數(shù)據(jù)類型定義時(shí)進(jìn)行:

floatr=1.0,s;

把變數(shù)聲明語句與賦值結(jié)合在一起的語句,術(shù)語上稱為“初始化語句”。關(guān)於語句:

③輸出語句作用:將運(yùn)算結(jié)果送到顯示器螢?zāi)伙@示出來語句形式(詳見P72-80)

printf(……);

printf("半徑R=%f時(shí),面積S=%f\n",r,s);

printf(“Hello,everyone!”);【注意】C語言本身沒有輸入、輸出語句,其功能要借用有關(guān)函數(shù)來實(shí)現(xiàn)。

%f—格式字串(見後)

\n—控制字元(轉(zhuǎn)義字元)\n表示回車換行按定義輸出動(dòng)作或特殊字元(見P48表3.3)

引號(hào)中的其他部分照原樣輸出關(guān)於格式字串表示該處將用printf語句引號(hào)外對(duì)應(yīng)運(yùn)算式的值替換後輸出

例:若r=1,s=3.14

printf(“半徑R=%f時(shí),面積S=%f\n”,r,s);

輸出結(jié)果:

半徑R=1時(shí),面積S=3.140000常用格式字串:字元型:%c

單字符

%s

字串?dāng)?shù)值型:%d

整數(shù)(十進(jìn)位)

%f

實(shí)數(shù)(小數(shù)形式,默認(rèn)為6位小數(shù))

例一

intx=5;floaty=3;printf("a=%d,b=%f,c=%s",x,y,"abcdefg");輸出結(jié)果:

a=5,b=3.000000,c=abcdefg

例二

intx=5;floaty=3;printf("a=%d,b=%f,c=%s",x+2,y*3,"123defg");輸出結(jié)果:

a=7,b=9.000000,c=123defg

小結(jié)

1、C語言程式的基本結(jié)構(gòu)一個(gè)C程式是由一個(gè)固定名稱為main的主函數(shù)和若干個(gè)其他函數(shù)(可缺?。┙M成。其基本結(jié)構(gòu)一般形式如右圖所示。注:TC環(huán)境下C根源程式的擴(kuò)展名一般為.c(如area.c)編譯預(yù)處理部分(可選)main(){說明部分/*變數(shù)定義等*/執(zhí)行部分/*輸入/輸出/計(jì)算*/

}其他函數(shù)(可選,位置任意)

小結(jié)

2、C語言程式的基本特點(diǎn)C語言是一種函數(shù)式語言,其程式基本組成是函數(shù)每個(gè)C程式必須有一個(gè)、也只能有一個(gè)主函數(shù)main不管主函數(shù)在程式中的位置如何,程式執(zhí)行總是從主函數(shù)開始所有變數(shù)必須先定義(規(guī)定數(shù)據(jù)類型)後使用每個(gè)語句必須用分號(hào)“;”結(jié)束(注意是“每個(gè)語句”而不“每行語句”)編譯預(yù)處理命令不是語句(行末不能用分號(hào)結(jié)束)C語言本身沒有輸入/輸出語句,其輸入/輸出功能須通過調(diào)用標(biāo)準(zhǔn)函數(shù)來實(shí)現(xiàn)使用系統(tǒng)提供的標(biāo)準(zhǔn)庫函數(shù)或其他檔提供的現(xiàn)成函數(shù)時(shí),必須使用“檔包含”(除了printf和scanf語句)。四、示例程式的完善

左鍘的示例程式(求圓面積)有四個(gè)不足:每次運(yùn)行後螢?zāi)粴埩舻娘@示內(nèi)容和運(yùn)行結(jié)果混在一起。如果要求多個(gè)半徑r值時(shí)的面積s,每次都必須修改根源程式並重新編譯處理;如果半徑r為負(fù)值,也會(huì)有正常的s值輸出。輸出結(jié)果的小數(shù)位數(shù)為6位,與習(xí)慣不符。為此,可將程式進(jìn)行如下修改:#definePI3.14159#include<stdio.h>#include<math.h>#include<stdlib.h>main(){floatr,s;clrscr();/*清屏*/printf("請(qǐng)輸入半徑R=");scanf("%f",&r);if(r<0){printf("半徑不能為負(fù)值!");exit(0);/*中止程式運(yùn)行*/}s=PI*pow(r,2);printf("R=%.3f,S=%.3f\n",r,s);}#definePI3.14159#include<stdio.h>#include<math.h>main(){floatr,s;

r=1.0;s=PI*pow(r,2);printf("R=%f,S=%f\n",r,s);}示例程式area.c:/*改進(jìn)後的求圓面積程式AREA.C*/#definePI3.14159#include<stdio.h>#include<math.h>#include<stdlib.h>

#include<conio.h>

main(){floatr,s;

clrscr();

/*清屏,在conio.h中定義*/printf("請(qǐng)輸入半徑R=");

/*人機(jī)對(duì)話提示語*/

scanf("%f",&r);

/*將鍵盤輸入值存放在變數(shù)r對(duì)應(yīng)的存儲(chǔ)單元中*/if(r<0)

/*如果輸入的半徑值為負(fù)值*/{printf("輸入出錯(cuò),半徑不能為負(fù)值!");/*顯示出錯(cuò)提示*/exit(0);/*停止程式執(zhí)行,返回操作系統(tǒng)*/}s=PI*pow(r,2);printf("半徑R=%.3f時(shí),面積S=%.3f\n",r,s);/*限制R,S小數(shù)位數(shù)*/}Let’stry……改進(jìn)程式有關(guān)語句分析鍵盤輸入函數(shù)

scanf(“%f”,&r);

功能:將鍵盤輸入的值存放到變數(shù)r所對(duì)應(yīng)的存儲(chǔ)單元中。

&r變數(shù)r的存儲(chǔ)單元地址

注意:scanf()函數(shù)本身不能帶作為提示語的字串,如

scanf(“請(qǐng)輸入半徑r=%f”,&r);

(結(jié)果將使r等於某個(gè)隨機(jī)值)通常與printf()函數(shù)組合使用,實(shí)現(xiàn)“人機(jī)對(duì)話”功能。Example:……printf(“InputR=”);scanf(“%f”,&r);……改進(jìn)程式有關(guān)語句分析(續(xù))選擇語句

if(條件運(yùn)算式)語句或複合語句(用花括弧括起);

功能:如果條件運(yùn)算式的值為真,就執(zhí)行指定語句或複合語句。

擴(kuò)展形式:

if…else

語句(詳見P91)

if(條件運(yùn)算式)語句或複合語句;

else語句或複合語句;

注意:條件運(yùn)算式必須用()括起,且不能跟分號(hào)。Example:

參見P5例1.3

#include<stdio.h>#include<conio.h>main(){inta,b,c;clrscr();/*清屏*/

printf("Inputa、b=");scanf("%d,%d",&a,&b);c=max(a,b);printf("max=%d",c);}intmax(intx,inty){intz;if(x>y)z=x;elsez=y;returnz;}改進(jìn)程式有關(guān)語句分析(續(xù))停止函數(shù)exit(0)

使程式正常停止,返回操作系統(tǒng)狀態(tài)。括弧中為整型數(shù)值,0—正常結(jié)束其他數(shù)值—出錯(cuò)類型(某些系統(tǒng)上在原程式結(jié)束後可將此值傳給另一程式)輸出格式P72r=%-m.nfm總位數(shù)(數(shù)值總長(zhǎng)度小於m時(shí)左端補(bǔ)空格,

-m則為右端補(bǔ)空格),n小數(shù)位數(shù)上例中——r=%10.3f,s=%10.3f輸出r=1.500,s=7.069r=%-10.3f,s=%-10.3f輸出r=1.500,s=7.069r=%.1f,s=%.2f輸出r=1.5,s=7.07(下一位小數(shù)四捨五入)

更多的改進(jìn)給程式加上軟體“封面”和“封底”封面——程式標(biāo)題和編程者等封底——告別辭第一章作業(yè)一、上機(jī)編程:將求圓面積程式AREA.C修改成能求給定半徑r的圓面積、周長(zhǎng)、圓球面積和體積的新程式(包括軟體“封面”和“封底”)。二、上機(jī)編程:執(zhí)行後在螢?zāi)簧巷@示以下軟體封面(其中XX處請(qǐng)用實(shí)際數(shù)據(jù)表示):

*****************************************歡迎使用**中學(xué)數(shù)學(xué)問題程式彙編V1.00*****************************************

程式設(shè)計(jì):XX系XX專業(yè)XXXXXXX年XX月XX日選擇菜單

a、一元二次方程求根

b、求任意半徑圓、圓柱體和球體的(表)面積、體積

c、求n!

請(qǐng)選擇(a、b或c):_熟記下列TC編譯軟體常用英語辭?。篺unction函數(shù)statement語句missing丟失error出錯(cuò)parameter參數(shù)illegal非法的invalid無效的pointer指針character字元array數(shù)組string字串constant常量syntax語法argument參數(shù)type類型definition定義compile編譯call調(diào)用symbol識(shí)別字(變數(shù)名等)declaration說明、聲明並將以下螢?zāi)惶崾咀g為中文:CompilingE:\tc\abc.cErrorE:\tc\abc.c4:statementmissing;infunctionmainErrorE:\tc\abc.c3:Undefinedsymbol's'infunctionaa要求:作業(yè)第一、二題上機(jī)編程並提交給指導(dǎo)老師檢查。作業(yè)第一題根源程式還須寫在作業(yè)本上上交。注意書寫格式。其他要求一、C語言的數(shù)據(jù)類型C語言的數(shù)據(jù)類型

P38基本類型

字元型(char)1位元組

整型—短整型(short

int

)2位元組基本型(int)2位元組(-32768~32767)長(zhǎng)整型(longint

)4位元組(±21億)

實(shí)型—單精確度(float)4位元組6~7位有效數(shù)字

長(zhǎng)單精確度(longfloat)

8位元組15~16位有效數(shù)字雙精度(double)8位元組15~16位有效數(shù)字

長(zhǎng)雙精度(longdouble)10位元組

20位有效數(shù)字

可知對(duì)不同數(shù)據(jù)類型佔(zhàn)用的存儲(chǔ)空間:char<short<=int<long<=float<doubleLet’stry…結(jié)果顯示:char:1位元組

float:4位元組求某一類型數(shù)據(jù)所占存儲(chǔ)位元組數(shù),可用運(yùn)算符:

sizeof(類型關(guān)鍵字)Example:main(){printf(“char:%d位元組\n”,sizeof(char));printf(“float:%d位元組\n”,sizeof(float));}注意事項(xiàng)整型≠整數(shù)

int的範(fàn)圍:-32768~+32767Example:

#include<stdio.h>#include<conio.h>

main(){inta;

clrscr();

printf(“Input:”);scanf(“%d”,&a);

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

運(yùn)行結(jié)果:

Input:12345

a=12345Input:1234567

a=-10617

Why?!Because:

12345的補(bǔ)數(shù)是

00110000001110011234567的補(bǔ)數(shù)是

100101101011010000111

截去多餘部份(超過2個(gè)位元組的左邊部分)後

其原碼為

1010100101111001(-10617)參見教材P44“整型數(shù)據(jù)的溢出”。有趣的結(jié)果:

輸入(Input:)輸出(a=)327673276732768-3276832769-3276732770-32766-32768-32768-3276932767-3277032766可用下圖表示:

327673276632765

……-32766-32767-32768有趣的結(jié)果注意事項(xiàng)數(shù)據(jù)存儲(chǔ)形式

字元型按ASCII碼存儲(chǔ),其餘以補(bǔ)數(shù)存儲(chǔ)

示意圖

字元型(字元'a')

用一個(gè)位元組存放該字元的ASCII值(ASCII值表見P374)

整型(十進(jìn)位數(shù)25037)

用兩個(gè)位元組存放該數(shù)值的補(bǔ)數(shù)實(shí)型

尾數(shù)(補(bǔ)數(shù))指數(shù)(階碼)

注:第一位均為符號(hào)位01100001011000011100110101100001……1010001010101011100110補(bǔ)充:二進(jìn)位數(shù)的定點(diǎn)和浮點(diǎn)表示定點(diǎn)表示法——小數(shù)點(diǎn)位置是“固定的”定點(diǎn)數(shù)可用於表示整數(shù)。整數(shù)在機(jī)器中用補(bǔ)數(shù)表示。

對(duì)於inta=8,b=-8;0000000000001000符號(hào)位:0—正數(shù)1—負(fù)數(shù)10000000000010001111111111110111正數(shù)的原碼=正數(shù)的補(bǔ)數(shù)負(fù)數(shù)的原碼和補(bǔ)數(shù)按以下規(guī)則相互轉(zhuǎn)換:符號(hào)位不變,數(shù)值位各位取反,未位加1。0000000000001000原碼補(bǔ)數(shù)符號(hào)位數(shù)值位a=810=10002b=-810=-10002真值1111111111111000補(bǔ)充:二進(jìn)位數(shù)的定點(diǎn)和浮點(diǎn)表示浮點(diǎn)表示法——小數(shù)點(diǎn)位置是“浮動(dòng)的”。

在電腦中一個(gè)浮點(diǎn)數(shù)由兩部分組成:階碼和尾數(shù),階碼是指數(shù),尾數(shù)是純小數(shù)。浮點(diǎn)表示法可用於表示帶小數(shù)的數(shù)。

(110.011)B=1.10011×2+10=11001.1×2-10=0.110011×2+11

即:N=數(shù)符×尾數(shù)×2階符×階碼

尾數(shù)的位數(shù)決定數(shù)的精度階碼的位數(shù)決定數(shù)的範(fàn)圍

數(shù)符尾數(shù)階符階碼

0110011011階碼和數(shù)符:0—正數(shù)1—負(fù)數(shù)注意事項(xiàng)整型和字元型均可為unsigned(無符號(hào)型)P43圖3.4

即將符號(hào)位亦作為數(shù)值位(默認(rèn)為signed)

此時(shí)int的範(fàn)圍0~65535char的範(fàn)圍0~255

Let’stry…?

在C程式中,字元型可與整型(≤255)互相通用

P50-51輸出結(jié)果:a,b輸出結(jié)果:97,98不變d,b100,98Example:(參見P50例3.6,ACII值見P374)main()main(){{charc1,c2;charc1,c2;c1=97;c2=98;c1=97;c2=98;printf(“%c,%c\n”,c1,c2);printf(“%d,%d\n”,c1,c2);}}

思考如果將例中char改成int,結(jié)果如何?如果將c1=97改為c1=97+3,結(jié)果如何?

Let’stry…二、常量整型常量P41

十進(jìn)位數(shù)12-12l

或-12L700000ul

八進(jìn)制數(shù)

012-012l

十六進(jìn)制數(shù)0x12-0x12l實(shí)型常量P45

十進(jìn)位形式123.452.0(必有小數(shù)點(diǎn))

指數(shù)形式2.45e-41.13E3(e或E前為數(shù),後為整數(shù))

實(shí)型常量本身無單或雙精度,其機(jī)內(nèi)精度取決於賦給那類變數(shù)(影響有效數(shù)字位數(shù),見P15示例)字元常量/字串常量字元常量P48普通字元(可顯示字元)

‘A’‘?’

(只能單字符單引號(hào))

錯(cuò)誤:‘ABC’“A”‘’’‘”’‘\’轉(zhuǎn)義字元(在單引號(hào)或雙引號(hào)中以\開頭)

如回車符、單引號(hào)、反斜杠等在程式中這些符號(hào)用表3.3所示的“轉(zhuǎn)義字元”表示。字串(用雙引號(hào)括起)“A”“?”(以‘\0’為字串結(jié)束標(biāo)誌)注意:用char定義的字元變數(shù)只能接受字元常量,而不能接受字串常量(C語言中無字串變數(shù))

chara=‘U’;charb=“U”;(b被置為某隨機(jī)值)Example:main(){

charc1=‘a(chǎn)’,c2;

c2=98;printf(“%d,%d\n”,c1,c2);

}結(jié)果:

97,98Example:

main(){

charc1=“a”,c2;

c2=98;printf(“%d,%d\n”,c1,c2);

}結(jié)果:

-108,98若讓c1分別等於“U”、“ABC”、“A”…結(jié)果不變隨機(jī)值轉(zhuǎn)義字元例題分析Example:main(){charch;ch=‘\362’;printf(“%c,%d”,ch,ch);}運(yùn)行結(jié)果:

≥,-14ch=3628=24210=111100102

111100102化為原碼為

10001110=-1410轉(zhuǎn)義字元例題分析Example:#include<string.h>

main(){printf(“a\n\”\x41”);printf(“%d\n”,strlen(“a\n\”\x41”));}運(yùn)行結(jié)果:

a

“A

4

注:strlen為求字串位元組數(shù)函數(shù)(不計(jì)結(jié)束標(biāo)誌‘\0‘)。轉(zhuǎn)義字元例題分析Example:P49例3.5main(){printf(“__ab_c\t_de\rf\tg\n”);printf(“h\tI\b\bj___k”);}運(yùn)行結(jié)果:__ab_c__ab_c___def_ab_c___def_______gdehh_______lh_______h______h______j___k8列8列8列什麼時(shí)候要使用轉(zhuǎn)義字元?

轉(zhuǎn)義字元只在特殊情況下才使用:C程式中需要實(shí)現(xiàn)某些特定列印或顯示動(dòng)作時(shí)

printf(“123\t56\n”);C程式中需要列印或顯示以下三個(gè)字元時(shí)

\

(斜杠)

"(雙引號(hào))'(單引號(hào))

printf(“You’rea\”abadegg!\””);C程式中需要列印或顯示ASCII表中非鍵盤字元時(shí)

printf(“Look

\16and

\x80

!”);注意:使用轉(zhuǎn)義字元時(shí),\後的八進(jìn)制或十六進(jìn)制數(shù)不應(yīng)大於char類型所允許的範(fàn)圍(十進(jìn)位值256)。

字串常量有關(guān)問題‘A’與“A”的區(qū)別問題(判斷正誤):

charc=“China”;charc=‘China’;“China”占幾個(gè)位元組?‘\141’占幾個(gè)位元組?AA\0等於十進(jìn)位數(shù)97即字元’a’三、變數(shù)賦值

P53

例:b=(a=3+5)a=b=c=d=3+5

(結(jié)果均為8)例:inta=b=c=d=3+5

(語法錯(cuò)誤,除非b,c,d定義過)

正確:inta,b=a=3+5;

例:c=3+(a=5)*6

結(jié)果:c=33,a=5(一個(gè)語句可以有幾個(gè)賦值運(yùn)算)變數(shù)必須先定義後使用變數(shù)名必須符合識(shí)別字命名規(guī)則

P40四、數(shù)據(jù)間的轉(zhuǎn)換(混合運(yùn)算)數(shù)據(jù)的類型級(jí)別P54圖3.10基本規(guī)則不同類型運(yùn)算量參加運(yùn)算,遵守“向高看齊”的類型一致化規(guī)則:將長(zhǎng)度較短的運(yùn)算量轉(zhuǎn)換為長(zhǎng)度較長(zhǎng)的運(yùn)算量,以保證不丟失資訊。將實(shí)型常量賦給整型變數(shù),將被自動(dòng)取整

inta=7.999999;等效於inta=7;float型只要參加運(yùn)算,均自動(dòng)轉(zhuǎn)為double。

main(){floati=3,j=4;printf(“%d\n”,sizeof(i+j));}/*結(jié)果為8(雙精度)*/兩個(gè)整型數(shù)相除,其值也一定是整型數(shù)(取商之整數(shù)部分)。3/2的值為1而非1.5強(qiáng)制類型轉(zhuǎn)換P56

例一:(int)3.5的值是多少?例二:

main(){intx=5;floaty=3.5;

clrscr();/*clearscreen(清屏)*/

printf(“%d”,(int)y+x);}

結(jié)果是什麼?8一般形式:

(類型名)(運(yùn)算式)轉(zhuǎn)換後運(yùn)算式的數(shù)據(jù)類型為新的類型,但運(yùn)算式中變數(shù)本身類型不變。3程式執(zhí)行後y的類型是什麼?五、算術(shù)運(yùn)算符和算術(shù)運(yùn)算式C語言運(yùn)算符(13類)

P551、算術(shù)運(yùn)算①算術(shù)運(yùn)算符

+-*

/%++––

例:14%(-4)=2-14%(-4)=-220.4%2(出錯(cuò))

例:若inta=7;floatx=2.5,y=4.7;則運(yùn)算式

x+a%3*(int)(x+y)%2/4

的值是什麼?

2.500000(1/4為0)

例:floatx,y;x%y;

(出錯(cuò))五、算術(shù)運(yùn)算符和算術(shù)運(yùn)算式(續(xù))②自反算術(shù)賦值運(yùn)算符(複合的賦值運(yùn)算符)

P62

+=-=*=/=

等解法:將b*=…看作b=b*(…),其餘類推例:c=b*=a+3

相當(dāng)於(1)a+3(2)b=b*(a+3)(3)c=b

例:若i、j的初值分別為3和4,則執(zhí)行

j+=i-=1

後i、j的值為多少?

解題步驟:

i=i-1=3-1=2j=j+i=4+2=6結(jié)果:i=2,j=6關(guān)於優(yōu)先順序和結(jié)合方向:P56

C語言規(guī)定了運(yùn)算符的優(yōu)先順序和結(jié)合性。在運(yùn)算式求值時(shí),先按運(yùn)算符的優(yōu)先順序別高低次序執(zhí)行。如果在一個(gè)運(yùn)算對(duì)象兩側(cè)的運(yùn)算符的優(yōu)先順序別相同,則按規(guī)定的結(jié)合方向處理。

(各種運(yùn)算符的優(yōu)先順序和結(jié)合性見P375附錄Ⅲ)【例】設(shè)i、j初值分別為3和4,則執(zhí)行j+=i-=1;後i,j的值為多少?【例】若x=7;則x+=x-=x+x的值是多少?

五、算術(shù)運(yùn)算符和算術(shù)運(yùn)算式(續(xù))(i=2,j=6)(-14)解法:從右到左,先做x=x-(x+x)=-7,再做x=x+x=-14五、算術(shù)運(yùn)算符和算術(shù)運(yùn)算式(續(xù))③自加、自減運(yùn)算符

P57

++(自加運(yùn)算符)--(自減運(yùn)算符)用法:+1-1運(yùn)算

a、首碼形式

inti=5;x=++i;y=i;

(x=6,i=6,y=6)

inti=5;++i;y=i;

(i=6,y=6)b、尾碼形式

inti=5;x=i++;y=i;

(x=5,i=6,y=6)

inti=5;i++;y=i;

(i=6,y=6)

若對(duì)某變數(shù)自加/自減而不賦值,結(jié)果都是使該變數(shù)自身±1;

若某變量自加/自減的同時(shí)還要參加其他運(yùn)算,則首碼運(yùn)算是先變化後運(yùn)算,尾碼運(yùn)算是先運(yùn)算後變化。

注意:運(yùn)算對(duì)象只能是整型變數(shù),5++或(x+y)++均為錯(cuò)五、算術(shù)運(yùn)算符和算術(shù)運(yùn)算式(續(xù))例一:main()

{

inta=100;

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

printf(“%d\n”,++a);

printf(“%d\n”,a++);

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

}運(yùn)算結(jié)果:100101101102例二:若intx=3,y;求下列運(yùn)算後y和x的值

y=x++-1;(24)

y=++x-1;(34)

y=x--+1;(42)分析思路:先對(duì)右邊的運(yùn)算式進(jìn)行掃描,如果x++,先取x值完成運(yùn)算式運(yùn)算後再讓x自加1,如果++x,則先將x自加1後再代入運(yùn)算式進(jìn)行其他運(yùn)算例三:若inti=3求下列運(yùn)算後y和z的值

y=(i++)+(i++)+(i++);y=9(3+3+3)

z=(++i)+(++i)+(++i);z=18(6+6+6)

分析思路:先對(duì)右邊的運(yùn)算式進(jìn)行掃描,看是否需要先自加,如需要,就作若干次自加,然後再進(jìn)行運(yùn)算式的其他運(yùn)算。思考:

y=(++i)+(i++)+(++i);y=15(5+5+5)五、算術(shù)運(yùn)算符和算術(shù)運(yùn)算式(續(xù))④逗號(hào)運(yùn)算

P63-64

C語言中逗號(hào)可作分隔符號(hào)使用,將若干變數(shù)隔開

inta,b,c;

又可作運(yùn)算符使用,將若干獨(dú)立的運(yùn)算式隔開,並依次計(jì)算各運(yùn)算式的值。其一般形式

運(yùn)算式1,運(yùn)算式2,…,運(yùn)算式n;逗號(hào)運(yùn)算式的求解過程:先求運(yùn)算式1的值,再求運(yùn)算式2的值…,最後求運(yùn)算式n的值。整個(gè)逗號(hào)運(yùn)算式的值是最後一個(gè)運(yùn)算式n的值。

在C語言所有運(yùn)算符中,逗號(hào)運(yùn)算式的優(yōu)先順序最低。

五、算術(shù)運(yùn)算符和算術(shù)運(yùn)算式(續(xù))【例一】main(){intx,a;x=(a=3*5,a*4,a+5);printf(“x=%d,a=%d\n”,x,a);}【例二】main(){intx,a;

x=(a=3*5,a*4),a+5;

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

運(yùn)算結(jié)果:x=20,a=15運(yùn)算結(jié)果:x=60,a=15【例三】main(){inta,b,x;x=(a=8,b=15,b++,a+b);printf(“a=%d,b=%d,x=%d\n”,a,b,x);}

運(yùn)算結(jié)果:a=8,b=16,x=24五、算術(shù)運(yùn)算符和算術(shù)運(yùn)算式(續(xù))⑤關(guān)係運(yùn)算(比較運(yùn)算)

P87

關(guān)係運(yùn)算符:><>=<===!=

關(guān)係運(yùn)算式:含有關(guān)係運(yùn)算符的運(yùn)算式特別注意a≤X≤b之類算式的正確寫法:a<=x&&x<=b(錯(cuò)誤寫法:a<=X<=b)【例】若x=1000,則printf(“%d”,2<x<3)的結(jié)果是什麼?(不管x為何值,結(jié)果恒為1)Why?【注意】關(guān)係運(yùn)算式的值:真—1假—0;

C語言中還規(guī)定:非0—真0—假優(yōu)先順序:算術(shù)>關(guān)係>賦值>逗號(hào)

討論:if(1<x<2)的條件為什麼恒為真五、算術(shù)運(yùn)算符和算術(shù)運(yùn)算式(續(xù))【例一】main(){intm=5;if(m++>5)printf(“m>5”);else{printf(“m=%d,”,m--);printf(“m=%d”,m--);}}運(yùn)算結(jié)果:

m=6,m=5【例二】main(){intm=5;if(++m>5)printf(“m>5”);else{printf(“m=%d,”,m--);printf(“m=%d”,m--);}}運(yùn)算結(jié)果:

m>5

五、算術(shù)運(yùn)算符和算術(shù)運(yùn)算式(續(xù))⑥邏輯運(yùn)算

P88

邏輯運(yùn)算符:

&&(與運(yùn)算符)運(yùn)算符兩邊均為真時(shí),結(jié)果為真

||(或運(yùn)算符)運(yùn)算符兩邊均為假時(shí),結(jié)果為假

?。ǚ沁\(yùn)算符)將運(yùn)算符右邊真假倒置

邏輯運(yùn)算符的任一端如果為非0數(shù),則視為“真”,為0則視為假。

【例】printf(“%d”,!3+5)結(jié)果為5printf(“%d”,!0+5)結(jié)果為6

注意:!優(yōu)先於關(guān)係運(yùn)算符,與++、--同級(jí)。常用優(yōu)先順序:!、++、-->算術(shù)運(yùn)算符>關(guān)係運(yùn)算符>&&>||>賦值>逗號(hào)五、算術(shù)運(yùn)算符和算術(shù)運(yùn)算式(續(xù))【例一】main(){inta=1,b=2,m=2,n=2;(m=a>b)&&++n;printf("%d\n",n);}【例二】main(){inta=1,b=2,m=2,n=2;(m=b>a)&&++n;printf("%d\n",n);}運(yùn)行結(jié)果:n=2運(yùn)行結(jié)果:n=3原因:

在&&和||的左邊如果能判斷出結(jié)果,則右邊不再作運(yùn)算。結(jié)論:在邏輯運(yùn)算式的求解中,並不是所有的邏輯運(yùn)算符都會(huì)被執(zhí)行。只是在必須執(zhí)行下一個(gè)邏輯運(yùn)算符才能求出運(yùn)算式的解時(shí),才執(zhí)行該運(yùn)算符。(P90)五、算術(shù)運(yùn)算符和算術(shù)運(yùn)算式(續(xù))【例三】

有以下程式段:

inta,b,c;a=b=c=1;++a||++b&&++c;

問執(zhí)行後a、b、c的值各是多少?

a=2,b=1,c=1五、算術(shù)運(yùn)算符和算術(shù)運(yùn)算式(續(xù))【例四】編程判斷任一給定年份是否閏年。符合以下條件的年份為閏年:

P91①能被4整除但不能被100整除;②能被4整除又能被400整除(只需考慮能被400整除的情況)main(){intyear;clrscr();printf("Inputyear=");scanf("%d",&year);if((year%4==0&&year%100!=0)||year%400==0)printf("\n%disaleapyear!",year);elseprintf("\n%disn'taleapyear!",year);}五、算術(shù)運(yùn)算符和算術(shù)運(yùn)算式(續(xù))⑦條件運(yùn)算P96條件運(yùn)算符:

…?…:…

(三元運(yùn)算符,即需連接三個(gè)運(yùn)算量)一般形式:

e1?e2:e3

(e1為條件運(yùn)算式,e2,e3為任意類型運(yùn)算式)功能:如果e1≠0(為真),運(yùn)算結(jié)果為e2的值。如果e1=0(為假),則取e3的值?!纠糠謩e令x=3,x=0,x=-5,求運(yùn)行結(jié)果。本程式功能?main(){intx,y;printf(“Inputx=”);scanf(“%d”,&x);y=x>0?1:x<0?-1:0;/*結(jié)合方向:由右向左*/printf(“x=%d,y=%d\n”,x,y);}結(jié)果:x=3,y=1x=0,y=0x=-5,y=-11(x>0)y=0(x=0)-1(x<0)⑧sizeof運(yùn)算符

sizeof運(yùn)算符是一個(gè)單目運(yùn)算符,用以計(jì)算運(yùn)算元在內(nèi)存中佔(zhàn)用的位元組數(shù)。它的運(yùn)算元可以是以

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論