版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第一章C語言程序設(shè)計(jì)基礎(chǔ)知識
以封魔錄游戲中的具體功能描述流程圖以封魔錄游戲中的具體代碼描述C語言程序設(shè)計(jì)的基本知識第一章C語言程序設(shè)計(jì)基礎(chǔ)知識以封魔錄游戲中的具體功能描述11.1引言1.1.1計(jì)算機(jī)與信息社會(huì)計(jì)算機(jī)定義:一種在事先存入程序的控制下,能夠接收數(shù)據(jù)、存儲(chǔ)數(shù)據(jù)、處理數(shù)據(jù)并提供處理結(jié)果的數(shù)字化電子設(shè)備。1.1引言1.1.1計(jì)算機(jī)與信息社會(huì)2計(jì)算機(jī)工作流程圖輸入運(yùn)算與控制存儲(chǔ)輸出數(shù)據(jù)計(jì)算機(jī)結(jié)果計(jì)算機(jī)工作流程圖輸入運(yùn)算與控制存儲(chǔ)輸出數(shù)據(jù)計(jì)算機(jī)結(jié)果31.1.2計(jì)算機(jī)中信息的表示
1.計(jì)算機(jī)內(nèi)所有信息采用二進(jìn)制表示
2.采用二進(jìn)制的原因:
1)二進(jìn)制只包含0和1,可以使用具有兩種不同穩(wěn)定狀態(tài)的元件來表示。
2)二進(jìn)制數(shù)的運(yùn)算規(guī)則簡單,使得計(jì)算機(jī)中的運(yùn)算部件的結(jié)構(gòu)也比較簡單。1.1.2計(jì)算機(jī)中信息的表示1.計(jì)算機(jī)內(nèi)所有信息采用43.計(jì)算機(jī)中信息的表示數(shù)值直接轉(zhuǎn)換為二進(jìn)制字符采用ASCII編碼(7位、美國標(biāo)準(zhǔn)信息交換碼)其它信息(漢字、圖形、圖象、聲音、表格)也有相應(yīng)的編碼標(biāo)準(zhǔn)和規(guī)則。3.計(jì)算機(jī)中信息的表示5計(jì)算機(jī)系統(tǒng)軟件系統(tǒng)硬件系統(tǒng)系統(tǒng)軟件(操作系統(tǒng)、編譯程序、診斷程序系統(tǒng)服務(wù)軟件等)應(yīng)用軟件(信息管理軟件、游戲等)CPU控制器運(yùn)算器輸入設(shè)備(鍵盤、鼠標(biāo)、手寫筆、MIC等)輸出設(shè)備(顯示器、繪圖儀、打印機(jī)等)存儲(chǔ)器內(nèi)存儲(chǔ)器(RAM)外存儲(chǔ)器(硬盤、U盤、光盤)1.1.3計(jì)算機(jī)系統(tǒng)的組成計(jì)算機(jī)系統(tǒng)軟件系統(tǒng)硬件系統(tǒng)系統(tǒng)軟件(操作系統(tǒng)、編譯程序、診6HIT-CProgramming
C程序的程序設(shè)計(jì)步驟Whattodo?可執(zhí)行文件擴(kuò)展名為.exe的文件
需求分析(Analysis)設(shè)計(jì)(Design)編碼(Write)編輯(Edit)編譯(Compile)連接(Link)運(yùn)行(Run)調(diào)試(Debug)Howtodo?擴(kuò)展名為.c的文件擴(kuò)展名為.obj的文件C程序的程序設(shè)計(jì)步驟Whattodo?可執(zhí)行文件需求分析7開發(fā)C程序的步驟1.設(shè)計(jì)算法2.編寫程序源代碼把自己的意圖寫入源代碼3.編輯源程序4.編譯和連接5.調(diào)試程序
直到改正了所有的編譯錯(cuò)誤和運(yùn)行錯(cuò)誤6.運(yùn)行程序開發(fā)C程序的步驟1.設(shè)計(jì)算法8例子1輸入一個(gè)整數(shù),輸出其絕對值算法:1輸入一個(gè)整數(shù);2若該數(shù)為正數(shù),則其絕對值取該數(shù)的值
否則,其絕對值取該數(shù)的相反數(shù)值;3輸出其絕對值。例子1輸入一個(gè)整數(shù),輸出其絕對值算法:9程序#include<stdio.h>
void
main(){
intnumb;/*代表一個(gè)整數(shù)*/intabs;/*代表運(yùn)算結(jié)果:絕對值*/
scanf(“%d”,&numb);/*輸入整數(shù)的值*/
if(numb>0)abs=numb;
elseabs=-numb;
printf(“numb的絕對值是:%d\n”,abs);}程序#include<stdio.h>10例子2封魔錄游戲主界面功能選擇例子2封魔錄游戲主界面功能選擇11算法:1初始化(令hang=0;ch=1等);
2如果處于第5個(gè)功能項(xiàng)且字符ch等于回車符,跳到第6步;
3顯示5個(gè)功能項(xiàng);
4輸入一個(gè)字符ch;5如果字符ch等于’s’(向下),則選擇下一功能項(xiàng)(hang增加2),其中如果已經(jīng)處于第5個(gè)功能項(xiàng),不再往下選。否則如果字符ch等于’w’(向上),則選擇上一功能項(xiàng)(hang減少2),其中如果已經(jīng)處于第1個(gè)功能項(xiàng),不再往上選。跳到第2步;
6結(jié)束算法:12程序intmain(void){ charch=1;//輸入的字符,初始設(shè)為1。 inthang=0;//用來控制光標(biāo)的行位置。共有0,2,4,6,8//四個(gè)有效值,初始設(shè)為0,即處于第1個(gè)功能項(xiàng)
//調(diào)用DOS命令;title為命令提示符窗口創(chuàng)建標(biāo)題。 system("title封魔錄"); system("colorf1");//color設(shè)置顏色程序intmain(void)13 while(!(hang==8&&ch==13))//循環(huán)選擇。 { //顯示5個(gè)功能項(xiàng) if(hang==0)gotoxy(20,8); printf("%c%c",16,16); gamedifficult_show(); gotoxy(22,8); printf("開始游戲"); gotoxy(22,10); printf("按鍵設(shè)置"); gotoxy(22,12); printf("難度設(shè)置"); gotoxy(22,14); printf("游戲制作"); gotoxy(22,16); printf("退出"); while(!(hang==8&&ch==13))//循環(huán)14 ch=getch();//無回顯獲取一個(gè)字符;
if(ch==key_down)//’s’
{
hang=hang+2;
if(hang>8)hang=hang-2;
gotoxy(20,6+hang);printf("");
gotoxy(20,8+hang);printf("%c",16);
}
elseif(ch==key_up)//’w’
{
hang=hang-2;
if(hang<0)hang=hang+2;
gotoxy(20,10+hang);printf("");
gotoxy(20,8+hang);printf("%c",16);
}
}
} ch=getch();//無回顯獲取一個(gè)字符;
i15程序的靈魂—算法一個(gè)程序應(yīng)包括:對數(shù)據(jù)的描述:在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式即數(shù)據(jù)結(jié)構(gòu)(datastructure)對操作的描述:數(shù)據(jù)進(jìn)行操作的具體步驟,即算法(algorithm)程序的靈魂—算法一個(gè)程序應(yīng)包括:16程序構(gòu)成公式NikiklausWirth提出的公式:
程序=數(shù)據(jù)結(jié)構(gòu)+算法目前已經(jīng)修改為程序=算法+數(shù)據(jù)結(jié)構(gòu)
+程序設(shè)計(jì)方法+語言工具和環(huán)境
程序構(gòu)成公式NikiklausWirth提出的公式:17算法及其表示算法:解決問題所采取的一系列步驟例,要求計(jì)算圓的面積,算法為:
設(shè)置(輸入或指定)半徑值r;使用公式s=лr2;顯示(輸出)S的值。算法及其表示算法:解決問題所采取的一系列步驟18算法的特點(diǎn)(1)有輸入算法可以有零個(gè)或多個(gè)輸入。在一個(gè)算法的執(zhí)行過程中,提供需處理的數(shù)據(jù)或控制算法執(zhí)行過程的信息。(2)有輸出算法必須具有一個(gè)或多個(gè)執(zhí)行結(jié)果的輸出。沒有輸出的算法是一個(gè)無效的算法。算法的特點(diǎn)(1)有輸入19算法的特點(diǎn)(3)有窮性任何算法都應(yīng)該在執(zhí)行有窮步驟之后結(jié)束。(4)確定性算法不能具有二義性。算法中每一步的語義都應(yīng)該清晰明了,明確指出應(yīng)該執(zhí)行什么操作,如何執(zhí)行操作。算法的特點(diǎn)(3)有窮性20算法的特點(diǎn)(5)高效性根據(jù)算法編寫出來的程序應(yīng)具有較高的時(shí)空效率:執(zhí)行時(shí)間短不占用過多內(nèi)存。算法的特點(diǎn)(5)高效性21算法的表示(描述)自然語言表示易理解和交流,但易產(chǎn)生二義性。偽代碼表示偽代碼使用介于自然語言和計(jì)算機(jī)語言之間的文字和符號來描述算法
算法的表示(描述)自然語言表示22算法的表示(描述)程序流程圖用圖形符號和文字說明來表示數(shù)據(jù)處理的過程和步驟。N-S流程圖也稱方框圖;適于結(jié)構(gòu)化程序設(shè)計(jì)的算法描述工具。算法的表示(描述)程序流程圖23程序流程圖描述算法的良好工具。邏輯框和流向線組成。邏輯框是表示功能的圖形符號流向線指示邏輯處理順序程序流程圖描述算法的良好工具。24邏輯框和流向線NY邏輯框和流向線NY25流程圖的邏輯框起止框表示程序的開始和結(jié)束。處理框表示一種處理功能或程序段,框內(nèi)用文字簡述其功能。流程圖的邏輯框起止框26邏輯框判斷框表示在此進(jìn)行判斷以決定程序的流向,框內(nèi)注明判斷條件。連接框框內(nèi)注有字母,當(dāng)流程圖跨頁時(shí),或者可能出現(xiàn)流向線交叉時(shí),用它來表示彼此之間的關(guān)系,相同符號的連接框表示它們是相互連接的。邏輯框判斷框27流向線流向線以單向箭頭表示。流向線流向線28N-S流程圖1973年美國學(xué)者Nassi和Schneiderman提出N-S流程圖(也稱為方框圖),它是一種適于結(jié)構(gòu)化程序設(shè)計(jì)的算法描述工具。由于流程圖各步驟之間,一般總是按照從上到下順序執(zhí)行(N-S流程圖中取消了流向線)N-S流程圖1973年美國學(xué)者Nassi和Schn29二選一結(jié)構(gòu)的表示ABYN滿足不滿足AB二選一結(jié)構(gòu)的表示ABYN滿足不滿足AB30編寫程序
算法用C語言進(jìn)行實(shí)現(xiàn),該過程也稱對算法進(jìn)行編碼;按照算法的流程順序編寫程序;編寫程序還必須進(jìn)行語句執(zhí)行過程的控制。編寫程序算法用C語言進(jìn)行實(shí)現(xiàn),該過程也稱對算法進(jìn)行編碼;31語言提供的控制結(jié)構(gòu)1.順序:定義了語句按順序執(zhí)行的次序。2.選擇:根據(jù)某個(gè)條件的結(jié)果,對多條語句,選擇執(zhí)行其中的一條語句。3.循環(huán)(重復(fù)):根據(jù)某個(gè)條件的結(jié)果,重復(fù)執(zhí)行某些語句。4.調(diào)用:即在需要時(shí)運(yùn)行指定的代碼段。語言提供的控制結(jié)構(gòu)1.順序:定義了語句按順序執(zhí)行的次序。32C語言程序的基本結(jié)構(gòu)#include<stdio.h>
void
main(){
數(shù)據(jù)定義;(變量說明語句);
數(shù)據(jù)處理;(執(zhí)行語句);}數(shù)據(jù)結(jié)構(gòu)算法C語言程序的基本結(jié)構(gòu)#include<stdio.h>數(shù)33程序說明每個(gè)C程序必須有一個(gè)主函數(shù)main{
}是函數(shù)開始和結(jié)束的標(biāo)志若需要輸入和/或輸出功能,程序開頭應(yīng)該為
#include<stdio.h>程序說明每個(gè)C程序必須有一個(gè)主函數(shù)main34
#include<stdio.h>
void
main(){
printf(“我可以設(shè)計(jì)程序了.\n”);}
程序簡例程序的作用是輸出一行信息:我可以設(shè)計(jì)程序了.#include<stdio.h>35自然語言描述:
1輸入一個(gè)整數(shù);2若該數(shù)為正數(shù),則其絕對值取該數(shù)的值
否則,其絕對值取該數(shù)的相反數(shù)值;3輸出其絕對值。例子1輸入一個(gè)整數(shù),輸出其絕對值算法自然語言描述:例子1輸入一個(gè)整數(shù),輸出其絕對值算法36偽碼表示BEGINREADnumbIFnumb>0abs=numbELSEabs=-numbPRINTabsENDBEGINREADnumbIFnumb<0numb=-numbPRINTnumbEND對比偽碼表示BEGINBEGIN對比37程序流程圖
---學(xué)生當(dāng)場畫BEGINREADnumbnumb>0abs=numbabs=-numbPRINTabsENDYN程序流程圖
---學(xué)生當(dāng)場畫BEGINREADnumbnu38程序#include<stdio.h>
void
main(){
intnumb;/*代表一個(gè)整數(shù)*/intabs;/*代表運(yùn)算結(jié)果:絕對值*/scanf(“%d”,&numb);/*輸入整數(shù)的值*/
if(numb>0)abs=numb;
elseabs=-numb;
printf(“numb的絕對值是:%d\n”,abs);}程序#include<stdio.h>39例子2封魔錄游戲主界面功能選擇算法例子2封魔錄游戲主界面功能選擇算法40自然語言描述:1初始化(令hang=0;ch=1等);
2如果處于第5個(gè)功能項(xiàng)且字符ch等于回車符,跳到第6步;
3顯示5個(gè)功能項(xiàng);
4輸入一個(gè)字符ch;5如果字符ch等于’s’(向下),則選擇下一功能項(xiàng)(hang增加2),其中如果已經(jīng)處于第5個(gè)功能項(xiàng),不再往下選。否則如果字符ch等于’w’(向上),則選擇上一功能項(xiàng)(hang減少2),其中如果已經(jīng)處于第1個(gè)功能項(xiàng),不再往上選。跳到第2步;
6結(jié)束自然語言描述:41偽代碼偽代碼42BEGINSET0→hangSET1→chWHILEch==13andhang==8arenotsatisfiedBEGINDISPLAY5functionitems
READachardatatochfromkeyboard
IFch==‘s’then
hang+2→hang IFhang>8thenhang-2→hang SELECTthecorrespondingfunctionitem ELSEIFch==‘w’thenhang-2→hang IFhang<0thenhang+2→hang SELECTthecorrespondingfunctionitem END_IFEND_WHILEENDBEGIN43程序流程圖描述算法BEGINch==‘s’YNENDYNhang==8&&ch==13YNSET:0→hang,1→chDISPLAY5functionsREADchhang>8hang+2→hanghang-2→hangSELECTtheitemNNYNYNch==‘w’YNhang-2→hanghang+2→hangSELECTtheitemNNYNhang<0程序流程圖描述算法BEGINch==‘s’YNENDYNha44程序intmain(void){ charch=1;//輸入的字符,初始設(shè)為1。 inthang=0;//用來控制光標(biāo)的行位置。共有0,2,4,6,8//四個(gè)有效值,初始設(shè)為0,即處于第1個(gè)功能項(xiàng)
//調(diào)用DOS命令;title為命令提示符窗口創(chuàng)建標(biāo)題。 system("title封魔錄"); system("colorf1");//color設(shè)置顏色程序intmain(void)45 while(!(hang==8&&ch==13))//循環(huán)選擇。 { //顯示5個(gè)功能項(xiàng) if(hang==0)gotoxy(20,8); printf("%c%c",16,16); gamedifficult_show(); gotoxy(22,8); printf("開始游戲"); gotoxy(22,10); printf("按鍵設(shè)置"); gotoxy(22,12); printf("難度設(shè)置"); gotoxy(22,14); printf("游戲制作"); gotoxy(22,16); printf("退出"); while(!(hang==8&&ch==13))//循環(huán)46 ch=getch();//無回顯獲取一個(gè)字符;
if(ch==key_down)//’s’
{
hang=hang+2;
if(hang>8)hang=hang-2;
gotoxy(20,6+hang);printf("");
gotoxy(20,8+hang);printf("%c",16);
}
elseif(ch==key_up)//’w’
{
hang=hang-2;
if(hang<0)hang=hang+2;
gotoxy(20,10+hang);printf("");
gotoxy(20,8+hang);printf("%c",16);
}
}
} ch=getch();//無回顯獲取一個(gè)字符;
i47注釋“/*……*/”、“//”表示注釋。注釋是對源程序進(jìn)行的注解,增加程序的可讀性;對編譯和運(yùn)行不起作用。注釋“/*……*/”、“//”表示注釋。48庫函數(shù)C語言(編譯器)提供了許多基本的、常用的功能;分別保存在不同的文件中;以函數(shù)形式提供給程序員使用;庫函數(shù)C語言(編譯器)提供了許多基本的、常用的功能;49庫函數(shù)分類(1)I/O功能,需要的包含文件:stdio.h如:printf,scanf等。(2)字符(串)處理功能,string.h如:islower,strcat,strcmp,strlen等。(3)數(shù)學(xué)功能,math.h如:sin,cos,exp,log,sqrt等。庫函數(shù)分類(1)I/O功能,需要的包含文件:stdio.h50庫函數(shù)分類(4)時(shí)間、日期功能,time.h
如:time()(5)動(dòng)態(tài)存儲(chǔ)分配,alloc.h…庫函數(shù)分類(4)時(shí)間、日期功能,time.h51C程序的結(jié)構(gòu)特點(diǎn)
C程序由函數(shù)(模塊)構(gòu)成;C程序可由一個(gè)或多個(gè)函數(shù)組成,其中必須有且僅有一個(gè)main函數(shù);C程序在執(zhí)行中可調(diào)用由C語言提供的各種標(biāo)準(zhǔn)庫函數(shù)和用戶自定義的函數(shù)。C程序的結(jié)構(gòu)特點(diǎn)C程序由函數(shù)(模塊)構(gòu)成;52編程風(fēng)格1、通常使用小寫英文字母;2、充分利用注釋功能,增加可讀性;3、程序中的各語句組按功能和嵌套關(guān)系縮進(jìn)編排,使程序的模塊和復(fù)合關(guān)系明顯;4、注意花括號對齊和配對;5、適當(dāng)空格和空行可使程序更加清晰編程風(fēng)格1、通常使用小寫英文字母;53
字母是程序中的最小單位,是構(gòu)成其他語法單位的基礎(chǔ)。C規(guī)定的合法字符集是ASCII碼字符集。C語言字母表(字符集)字母是程序中的最小單位,是構(gòu)成其他語54C語言單詞符號標(biāo)識符關(guān)鍵字運(yùn)算符常量(分)界符C語言單詞符號標(biāo)識符55標(biāo)識符——例子2中的hang、gotoxy等程序員對于使用的常量、變量、函數(shù)、語句標(biāo)號、類型定義等進(jìn)行命名的字符串。只能由字母、下劃線和數(shù)字組成,并以字母和下劃線開始。非法:5class、m*n、studentname、int
見名知意:如sum、volume、result大小寫字母有別:name不同于Name標(biāo)識符——例子2中的hang、gotoxy等56關(guān)鍵字(保留字、基本字)——例子2中的int、char、include、if、else等對某些標(biāo)識符,語言規(guī)定其具有特定的含義;不能另作他用。關(guān)鍵字(保留字、基本字)——例子2中的int、char、in57關(guān)鍵字分類標(biāo)識類型的關(guān)鍵字intcharfloatdoublelongshort等標(biāo)識控制流的關(guān)鍵字returnifelsewhile等標(biāo)識預(yù)處理的關(guān)鍵字includedefineundef等其他關(guān)鍵字sizeofasm關(guān)鍵字分類58運(yùn)算符表示某種運(yùn)算的符號(由一個(gè)或多個(gè)字符組成)。算數(shù)運(yùn)算符:+-*/%
關(guān)系運(yùn)算符:><>=<===!=
邏輯運(yùn)算符:!&&||
位運(yùn)算符:&|^…運(yùn)算符表示某種運(yùn)算的符號(由一個(gè)或多個(gè)字符組成)。59運(yùn)算符的重載(超載)C語言的某些運(yùn)算符有雙重含義,稱為運(yùn)算符的重載;使用時(shí)要根據(jù)上下文確定具體含義。運(yùn)算符的重載(超載)C語言的某些運(yùn)算符有雙重含義,60常量數(shù)值常量:586,-15,3.1415字符(串)常量:‘a(chǎn)’,‘B’,“china”變量是指在程序執(zhí)行中其值可改變的數(shù)據(jù),使用標(biāo)識符代表。程序中的數(shù)據(jù)只能表示為常量或變量。常量數(shù)值常量:586,-15,3.141561(分)界符界符是用來分隔數(shù)據(jù)、表達(dá)式、語句的符號;C語言的分隔符主要指空格、制表和換行符、括號、分號和逗號等。(分)界符界符是用來分隔數(shù)據(jù)、表達(dá)式、語句的符號;62第一章小結(jié)計(jì)算機(jī)系統(tǒng)由硬件和軟件兩部分組成的。硬件:構(gòu)成計(jì)算機(jī)的五大部件;包括存儲(chǔ)器、運(yùn)算器、控制器、輸入設(shè)備和輸出設(shè)備軟件:指程序及文檔計(jì)算機(jī)中的信息是以二進(jìn)制形式存放的。第一章小結(jié)計(jì)算機(jī)系統(tǒng)由硬件和軟件兩部分組成的。63
C語言是系統(tǒng)軟件和應(yīng)用軟件開發(fā)中重要的工具語言。C語言程序是由一系列函數(shù)組成的。C語言是編譯型的高級程序設(shè)計(jì)語言。
C語言程序設(shè)計(jì)過程包括:算法設(shè)計(jì)、編碼、編譯、連接、運(yùn)行等?!八惴ㄔO(shè)計(jì)”是先導(dǎo),對于比較復(fù)雜的程序,不要急于寫代碼,要先把算法設(shè)計(jì)出來。C語言是系統(tǒng)軟件和應(yīng)用軟件開發(fā)中重要的工具語言。64課后作業(yè)習(xí)題1.3、1.4、1.6、1.7學(xué)畫例2的流程圖課后作業(yè)習(xí)題1.3、1.4、1.6、1.765第一章C語言程序設(shè)計(jì)基礎(chǔ)知識
以封魔錄游戲中的具體功能描述流程圖以封魔錄游戲中的具體代碼描述C語言程序設(shè)計(jì)的基本知識第一章C語言程序設(shè)計(jì)基礎(chǔ)知識以封魔錄游戲中的具體功能描述661.1引言1.1.1計(jì)算機(jī)與信息社會(huì)計(jì)算機(jī)定義:一種在事先存入程序的控制下,能夠接收數(shù)據(jù)、存儲(chǔ)數(shù)據(jù)、處理數(shù)據(jù)并提供處理結(jié)果的數(shù)字化電子設(shè)備。1.1引言1.1.1計(jì)算機(jī)與信息社會(huì)67計(jì)算機(jī)工作流程圖輸入運(yùn)算與控制存儲(chǔ)輸出數(shù)據(jù)計(jì)算機(jī)結(jié)果計(jì)算機(jī)工作流程圖輸入運(yùn)算與控制存儲(chǔ)輸出數(shù)據(jù)計(jì)算機(jī)結(jié)果681.1.2計(jì)算機(jī)中信息的表示
1.計(jì)算機(jī)內(nèi)所有信息采用二進(jìn)制表示
2.采用二進(jìn)制的原因:
1)二進(jìn)制只包含0和1,可以使用具有兩種不同穩(wěn)定狀態(tài)的元件來表示。
2)二進(jìn)制數(shù)的運(yùn)算規(guī)則簡單,使得計(jì)算機(jī)中的運(yùn)算部件的結(jié)構(gòu)也比較簡單。1.1.2計(jì)算機(jī)中信息的表示1.計(jì)算機(jī)內(nèi)所有信息采用693.計(jì)算機(jī)中信息的表示數(shù)值直接轉(zhuǎn)換為二進(jìn)制字符采用ASCII編碼(7位、美國標(biāo)準(zhǔn)信息交換碼)其它信息(漢字、圖形、圖象、聲音、表格)也有相應(yīng)的編碼標(biāo)準(zhǔn)和規(guī)則。3.計(jì)算機(jī)中信息的表示70計(jì)算機(jī)系統(tǒng)軟件系統(tǒng)硬件系統(tǒng)系統(tǒng)軟件(操作系統(tǒng)、編譯程序、診斷程序系統(tǒng)服務(wù)軟件等)應(yīng)用軟件(信息管理軟件、游戲等)CPU控制器運(yùn)算器輸入設(shè)備(鍵盤、鼠標(biāo)、手寫筆、MIC等)輸出設(shè)備(顯示器、繪圖儀、打印機(jī)等)存儲(chǔ)器內(nèi)存儲(chǔ)器(RAM)外存儲(chǔ)器(硬盤、U盤、光盤)1.1.3計(jì)算機(jī)系統(tǒng)的組成計(jì)算機(jī)系統(tǒng)軟件系統(tǒng)硬件系統(tǒng)系統(tǒng)軟件(操作系統(tǒng)、編譯程序、診71HIT-CProgramming
C程序的程序設(shè)計(jì)步驟Whattodo?可執(zhí)行文件擴(kuò)展名為.exe的文件
需求分析(Analysis)設(shè)計(jì)(Design)編碼(Write)編輯(Edit)編譯(Compile)連接(Link)運(yùn)行(Run)調(diào)試(Debug)Howtodo?擴(kuò)展名為.c的文件擴(kuò)展名為.obj的文件C程序的程序設(shè)計(jì)步驟Whattodo?可執(zhí)行文件需求分析72開發(fā)C程序的步驟1.設(shè)計(jì)算法2.編寫程序源代碼把自己的意圖寫入源代碼3.編輯源程序4.編譯和連接5.調(diào)試程序
直到改正了所有的編譯錯(cuò)誤和運(yùn)行錯(cuò)誤6.運(yùn)行程序開發(fā)C程序的步驟1.設(shè)計(jì)算法73例子1輸入一個(gè)整數(shù),輸出其絕對值算法:1輸入一個(gè)整數(shù);2若該數(shù)為正數(shù),則其絕對值取該數(shù)的值
否則,其絕對值取該數(shù)的相反數(shù)值;3輸出其絕對值。例子1輸入一個(gè)整數(shù),輸出其絕對值算法:74程序#include<stdio.h>
void
main(){
intnumb;/*代表一個(gè)整數(shù)*/intabs;/*代表運(yùn)算結(jié)果:絕對值*/
scanf(“%d”,&numb);/*輸入整數(shù)的值*/
if(numb>0)abs=numb;
elseabs=-numb;
printf(“numb的絕對值是:%d\n”,abs);}程序#include<stdio.h>75例子2封魔錄游戲主界面功能選擇例子2封魔錄游戲主界面功能選擇76算法:1初始化(令hang=0;ch=1等);
2如果處于第5個(gè)功能項(xiàng)且字符ch等于回車符,跳到第6步;
3顯示5個(gè)功能項(xiàng);
4輸入一個(gè)字符ch;5如果字符ch等于’s’(向下),則選擇下一功能項(xiàng)(hang增加2),其中如果已經(jīng)處于第5個(gè)功能項(xiàng),不再往下選。否則如果字符ch等于’w’(向上),則選擇上一功能項(xiàng)(hang減少2),其中如果已經(jīng)處于第1個(gè)功能項(xiàng),不再往上選。跳到第2步;
6結(jié)束算法:77程序intmain(void){ charch=1;//輸入的字符,初始設(shè)為1。 inthang=0;//用來控制光標(biāo)的行位置。共有0,2,4,6,8//四個(gè)有效值,初始設(shè)為0,即處于第1個(gè)功能項(xiàng)
//調(diào)用DOS命令;title為命令提示符窗口創(chuàng)建標(biāo)題。 system("title封魔錄"); system("colorf1");//color設(shè)置顏色程序intmain(void)78 while(!(hang==8&&ch==13))//循環(huán)選擇。 { //顯示5個(gè)功能項(xiàng) if(hang==0)gotoxy(20,8); printf("%c%c",16,16); gamedifficult_show(); gotoxy(22,8); printf("開始游戲"); gotoxy(22,10); printf("按鍵設(shè)置"); gotoxy(22,12); printf("難度設(shè)置"); gotoxy(22,14); printf("游戲制作"); gotoxy(22,16); printf("退出"); while(!(hang==8&&ch==13))//循環(huán)79 ch=getch();//無回顯獲取一個(gè)字符;
if(ch==key_down)//’s’
{
hang=hang+2;
if(hang>8)hang=hang-2;
gotoxy(20,6+hang);printf("");
gotoxy(20,8+hang);printf("%c",16);
}
elseif(ch==key_up)//’w’
{
hang=hang-2;
if(hang<0)hang=hang+2;
gotoxy(20,10+hang);printf("");
gotoxy(20,8+hang);printf("%c",16);
}
}
} ch=getch();//無回顯獲取一個(gè)字符;
i80程序的靈魂—算法一個(gè)程序應(yīng)包括:對數(shù)據(jù)的描述:在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式即數(shù)據(jù)結(jié)構(gòu)(datastructure)對操作的描述:數(shù)據(jù)進(jìn)行操作的具體步驟,即算法(algorithm)程序的靈魂—算法一個(gè)程序應(yīng)包括:81程序構(gòu)成公式NikiklausWirth提出的公式:
程序=數(shù)據(jù)結(jié)構(gòu)+算法目前已經(jīng)修改為程序=算法+數(shù)據(jù)結(jié)構(gòu)
+程序設(shè)計(jì)方法+語言工具和環(huán)境
程序構(gòu)成公式NikiklausWirth提出的公式:82算法及其表示算法:解決問題所采取的一系列步驟例,要求計(jì)算圓的面積,算法為:
設(shè)置(輸入或指定)半徑值r;使用公式s=лr2;顯示(輸出)S的值。算法及其表示算法:解決問題所采取的一系列步驟83算法的特點(diǎn)(1)有輸入算法可以有零個(gè)或多個(gè)輸入。在一個(gè)算法的執(zhí)行過程中,提供需處理的數(shù)據(jù)或控制算法執(zhí)行過程的信息。(2)有輸出算法必須具有一個(gè)或多個(gè)執(zhí)行結(jié)果的輸出。沒有輸出的算法是一個(gè)無效的算法。算法的特點(diǎn)(1)有輸入84算法的特點(diǎn)(3)有窮性任何算法都應(yīng)該在執(zhí)行有窮步驟之后結(jié)束。(4)確定性算法不能具有二義性。算法中每一步的語義都應(yīng)該清晰明了,明確指出應(yīng)該執(zhí)行什么操作,如何執(zhí)行操作。算法的特點(diǎn)(3)有窮性85算法的特點(diǎn)(5)高效性根據(jù)算法編寫出來的程序應(yīng)具有較高的時(shí)空效率:執(zhí)行時(shí)間短不占用過多內(nèi)存。算法的特點(diǎn)(5)高效性86算法的表示(描述)自然語言表示易理解和交流,但易產(chǎn)生二義性。偽代碼表示偽代碼使用介于自然語言和計(jì)算機(jī)語言之間的文字和符號來描述算法
算法的表示(描述)自然語言表示87算法的表示(描述)程序流程圖用圖形符號和文字說明來表示數(shù)據(jù)處理的過程和步驟。N-S流程圖也稱方框圖;適于結(jié)構(gòu)化程序設(shè)計(jì)的算法描述工具。算法的表示(描述)程序流程圖88程序流程圖描述算法的良好工具。邏輯框和流向線組成。邏輯框是表示功能的圖形符號流向線指示邏輯處理順序程序流程圖描述算法的良好工具。89邏輯框和流向線NY邏輯框和流向線NY90流程圖的邏輯框起止框表示程序的開始和結(jié)束。處理框表示一種處理功能或程序段,框內(nèi)用文字簡述其功能。流程圖的邏輯框起止框91邏輯框判斷框表示在此進(jìn)行判斷以決定程序的流向,框內(nèi)注明判斷條件。連接框框內(nèi)注有字母,當(dāng)流程圖跨頁時(shí),或者可能出現(xiàn)流向線交叉時(shí),用它來表示彼此之間的關(guān)系,相同符號的連接框表示它們是相互連接的。邏輯框判斷框92流向線流向線以單向箭頭表示。流向線流向線93N-S流程圖1973年美國學(xué)者Nassi和Schneiderman提出N-S流程圖(也稱為方框圖),它是一種適于結(jié)構(gòu)化程序設(shè)計(jì)的算法描述工具。由于流程圖各步驟之間,一般總是按照從上到下順序執(zhí)行(N-S流程圖中取消了流向線)N-S流程圖1973年美國學(xué)者Nassi和Schn94二選一結(jié)構(gòu)的表示ABYN滿足不滿足AB二選一結(jié)構(gòu)的表示ABYN滿足不滿足AB95編寫程序
算法用C語言進(jìn)行實(shí)現(xiàn),該過程也稱對算法進(jìn)行編碼;按照算法的流程順序編寫程序;編寫程序還必須進(jìn)行語句執(zhí)行過程的控制。編寫程序算法用C語言進(jìn)行實(shí)現(xiàn),該過程也稱對算法進(jìn)行編碼;96語言提供的控制結(jié)構(gòu)1.順序:定義了語句按順序執(zhí)行的次序。2.選擇:根據(jù)某個(gè)條件的結(jié)果,對多條語句,選擇執(zhí)行其中的一條語句。3.循環(huán)(重復(fù)):根據(jù)某個(gè)條件的結(jié)果,重復(fù)執(zhí)行某些語句。4.調(diào)用:即在需要時(shí)運(yùn)行指定的代碼段。語言提供的控制結(jié)構(gòu)1.順序:定義了語句按順序執(zhí)行的次序。97C語言程序的基本結(jié)構(gòu)#include<stdio.h>
void
main(){
數(shù)據(jù)定義;(變量說明語句);
數(shù)據(jù)處理;(執(zhí)行語句);}數(shù)據(jù)結(jié)構(gòu)算法C語言程序的基本結(jié)構(gòu)#include<stdio.h>數(shù)98程序說明每個(gè)C程序必須有一個(gè)主函數(shù)main{
}是函數(shù)開始和結(jié)束的標(biāo)志若需要輸入和/或輸出功能,程序開頭應(yīng)該為
#include<stdio.h>程序說明每個(gè)C程序必須有一個(gè)主函數(shù)main99
#include<stdio.h>
void
main(){
printf(“我可以設(shè)計(jì)程序了.\n”);}
程序簡例程序的作用是輸出一行信息:我可以設(shè)計(jì)程序了.#include<stdio.h>100自然語言描述:
1輸入一個(gè)整數(shù);2若該數(shù)為正數(shù),則其絕對值取該數(shù)的值
否則,其絕對值取該數(shù)的相反數(shù)值;3輸出其絕對值。例子1輸入一個(gè)整數(shù),輸出其絕對值算法自然語言描述:例子1輸入一個(gè)整數(shù),輸出其絕對值算法101偽碼表示BEGINREADnumbIFnumb>0abs=numbELSEabs=-numbPRINTabsENDBEGINREADnumbIFnumb<0numb=-numbPRINTnumbEND對比偽碼表示BEGINBEGIN對比102程序流程圖
---學(xué)生當(dāng)場畫BEGINREADnumbnumb>0abs=numbabs=-numbPRINTabsENDYN程序流程圖
---學(xué)生當(dāng)場畫BEGINREADnumbnu103程序#include<stdio.h>
void
main(){
intnumb;/*代表一個(gè)整數(shù)*/intabs;/*代表運(yùn)算結(jié)果:絕對值*/scanf(“%d”,&numb);/*輸入整數(shù)的值*/
if(numb>0)abs=numb;
elseabs=-numb;
printf(“numb的絕對值是:%d\n”,abs);}程序#include<stdio.h>104例子2封魔錄游戲主界面功能選擇算法例子2封魔錄游戲主界面功能選擇算法105自然語言描述:1初始化(令hang=0;ch=1等);
2如果處于第5個(gè)功能項(xiàng)且字符ch等于回車符,跳到第6步;
3顯示5個(gè)功能項(xiàng);
4輸入一個(gè)字符ch;5如果字符ch等于’s’(向下),則選擇下一功能項(xiàng)(hang增加2),其中如果已經(jīng)處于第5個(gè)功能項(xiàng),不再往下選。否則如果字符ch等于’w’(向上),則選擇上一功能項(xiàng)(hang減少2),其中如果已經(jīng)處于第1個(gè)功能項(xiàng),不再往上選。跳到第2步;
6結(jié)束自然語言描述:106偽代碼偽代碼107BEGINSET0→hangSET1→chWHILEch==13andhang==8arenotsatisfiedBEGINDISPLAY5functionitems
READachardatatochfromkeyboard
IFch==‘s’then
hang+2→hang IFhang>8thenhang-2→hang SELECTthecorrespondingfunctionitem ELSEIFch==‘w’thenhang-2→hang IFhang<0thenhang+2→hang SELECTthecorrespondingfunctionitem END_IFEND_WHILEENDBEGIN108程序流程圖描述算法BEGINch==‘s’YNENDYNhang==8&&ch==13YNSET:0→hang,1→chDISPLAY5functionsREADchhang>8hang+2→hanghang-2→hangSELECTtheitemNNYNYNch==‘w’YNhang-2→hanghang+2→hangSELECTtheitemNNYNhang<0程序流程圖描述算法BEGINch==‘s’YNENDYNha109程序intmain(void){ charch=1;//輸入的字符,初始設(shè)為1。 inthang=0;//用來控制光標(biāo)的行位置。共有0,2,4,6,8//四個(gè)有效值,初始設(shè)為0,即處于第1個(gè)功能項(xiàng)
//調(diào)用DOS命令;title為命令提示符窗口創(chuàng)建標(biāo)題。 system("title封魔錄"); system("colorf1");//color設(shè)置顏色程序intmain(void)110 while(!(hang==8&&ch==13))//循環(huán)選擇。 { //顯示5個(gè)功能項(xiàng) if(hang==0)gotoxy(20,8); printf("%c%c",16,16); gamedifficult_show(); gotoxy(22,8); printf("開始游戲"); gotoxy(22,10); printf("按鍵設(shè)置"); gotoxy(22,12); printf("難度設(shè)置"); gotoxy(22,14); printf("游戲制作"); gotoxy(22,16); printf("退出"); while(!(hang==8&&ch==13))//循環(huán)111 ch=getch();//無回顯獲取一個(gè)字符;
if(ch==key_down)//’s’
{
hang=hang+2;
if(hang>8)hang=hang-2;
gotoxy(20,6+hang);printf("");
gotoxy(20,8+hang);printf("%c",16);
}
elseif(ch==key_up)//’w’
{
hang=hang-2;
if(hang<0)hang=hang+2;
gotoxy(20,10+hang);printf("");
gotoxy(20,8+hang);printf("%c",16);
}
}
} ch=getch();//無回顯獲取一個(gè)字符;
i112注釋“/*……*/”、“//”表示注釋。注釋是對源程序進(jìn)行的注解,增加程序的可讀性;對編譯和運(yùn)行不起作用。注釋“/*……*/”、“//”表示注釋。113庫函數(shù)C語言(編譯器)提供了許多基本的、常用的功能;分別保存在不同的文件中;以函數(shù)形式提供給程序員使用;庫函數(shù)C語言(編譯器)提供了許多基本的、常用的功能;114庫函數(shù)分類(1)I/O功能,需要的包含文件:stdio.h如:printf,scanf等。(2)字符(串)處理功能,string.h如:islower,strcat,strcmp,strlen等。(3)數(shù)學(xué)功能,math.h如:sin,c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 承德應(yīng)用技術(shù)職業(yè)學(xué)院《中藥鑒定學(xué)(一)》2023-2024學(xué)年第一學(xué)期期末試卷
- 承德醫(yī)學(xué)院《分布式數(shù)據(jù)庫原理》2023-2024學(xué)年第一學(xué)期期末試卷
- 成都中醫(yī)藥大學(xué)《工程巖土學(xué)及實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025版精密機(jī)械加工外包項(xiàng)目合同模板2篇
- 二零二五年度二手車收購與售后服務(wù)連鎖合同2篇
- 二零二五年度體育賽事合作協(xié)議書2篇
- 場內(nèi)管網(wǎng)施工方案
- 2024消防設(shè)施智能化改造與日常維護(hù)服務(wù)協(xié)議3篇
- 二零二五年度個(gè)人股權(quán)贈(zèng)與與財(cái)產(chǎn)分割協(xié)議書3篇
- 2024學(xué)校教師學(xué)術(shù)交流與合作研究合同3篇
- 八年級體育教案(全冊)
- (完整版)非計(jì)劃性拔管魚骨圖
- DB32∕T 3377-2018 城市公共建筑人防工程規(guī)劃設(shè)計(jì)規(guī)范
- 中建三局住宅工程精益建造實(shí)施指南
- 分布式光伏發(fā)電項(xiàng)目并網(wǎng)驗(yàn)收意見單
- 網(wǎng)站隱私政策模板
- YY∕T 1831-2021 梅毒螺旋體抗體檢測試劑盒(免疫層析法)
- 消弧產(chǎn)品規(guī)格實(shí)用標(biāo)準(zhǔn)化規(guī)定
- 裝飾裝修工程施工合理化建議和降低成本措施提要:完整
- 第十四章35kV變電站保護(hù)整定值計(jì)算實(shí)例
- 液態(tài)模鍛工藝介紹
評論
0/150
提交評論