《C程序設(shè)計項目教程(第2版)》全套教學(xué)課件_第1頁
《C程序設(shè)計項目教程(第2版)》全套教學(xué)課件_第2頁
《C程序設(shè)計項目教程(第2版)》全套教學(xué)課件_第3頁
《C程序設(shè)計項目教程(第2版)》全套教學(xué)課件_第4頁
《C程序設(shè)計項目教程(第2版)》全套教學(xué)課件_第5頁
已閱讀5頁,還剩634頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C程序設(shè)計項目教程全套可編輯PPT課件目錄項目1項目2項目3項目4項目5項目6C程序概述算法C語法基礎(chǔ)分支語句循環(huán)語句數(shù)組

項目7項目9項目8項目10函數(shù)指針構(gòu)造數(shù)據(jù)類型文件1631C程序概述——歡迎進入C語言世界項目項目1

C程序概述知識目標了解C程序的開發(fā)步驟。熟悉C程序的開發(fā)環(huán)境。熟悉C程序的結(jié)構(gòu)及格式特點。能力目標素質(zhì)目標項目1

C程序概述能在VisualC++2010中創(chuàng)建、運行C程序。能根據(jù)編譯器給出的常見錯誤信息,分析并修改程序。養(yǎng)成腳踏實地、開拓進取的工作作風(fēng)。發(fā)揚服務(wù)集體、團結(jié)協(xié)作的團隊精神。項目導(dǎo)讀2021年5月15日,我國第一顆火星衛(wèi)星“天問一號”實現(xiàn)了首次地外行星著陸;2021年5月29日,我國又成功發(fā)射了“天舟二號”貨運飛船,為天和核心艙進行物資輸送和燃料補給。是什么樣的“大腦”實現(xiàn)了如此精準著陸和對接呢?是計算機編程語言編寫的程序與硬件系統(tǒng)的完美配合。計算機編程語言有很多,而C語言是目前世界上使用最廣泛的高級程序設(shè)計語言之一。它具有很強的數(shù)據(jù)處理能力,運行效率高,故廣泛應(yīng)用于操作系統(tǒng)、嵌入式系統(tǒng)等底層應(yīng)用的開發(fā)。同時,它也是學(xué)習(xí)C#、C++、Java等面向?qū)ο蟪绦蛟O(shè)計語言的基礎(chǔ)。

項目1

C程序概述任務(wù)1熟悉C程序開發(fā)環(huán)境C

程序的開發(fā)步驟一任務(wù)1

熟悉C程序開發(fā)環(huán)境C程序的開發(fā)從確定任務(wù)到得到結(jié)果一般要經(jīng)歷以下幾個步驟。1.需求分析需求分析就是對要解決的問題進行詳細的分析,弄清楚問題的要求,包括需要輸入什么數(shù)據(jù),要得到什么結(jié)果,得到這個結(jié)果需要什么條件等。這個過程好比是考試時候的審題,一定要領(lǐng)會題目的要求,否則解題過程再漂亮也無濟于事。2.算法設(shè)計算法設(shè)計就是設(shè)計出解決問題的方法和具體步驟。例如,要求解一個1到100的累加問題,首先要選擇用什么方法求解(直接累加計算、用速算公式計算還是用等差數(shù)列的求和公式計算),然后把求解的每個步驟清晰地描述出來。C

程序的開發(fā)步驟一任務(wù)1

熟悉C程序開發(fā)環(huán)境C程序的開發(fā)從確定任務(wù)到得到結(jié)果一般要經(jīng)歷以下幾個步驟。3.編寫程序編寫程序就是把算法設(shè)計的結(jié)果變成一行行代碼,輸入到程序編輯器中,然后將此程序(即源程序)以文件形式保存到指定的文件夾中。4.編譯程序編譯程序就是利用編譯器把輸入的源程序翻譯成機器語言,即編譯器對源程序進行語法檢查并將符合語法規(guī)則的源程序翻譯成計算機能識別的語言。如果經(jīng)編譯器檢查,發(fā)現(xiàn)有語法錯誤,則必須修改源程序中的語法錯誤,然后再編譯,直至沒有語法錯誤。此時會在源程序所在目錄中自動生成一個目標文件。C

程序的開發(fā)步驟一任務(wù)1

熟悉C程序開發(fā)環(huán)境C程序的開發(fā)從確定任務(wù)到得到結(jié)果一般要經(jīng)歷以下幾個步驟。5.連接程序經(jīng)過編譯得到的目標文件還不能供計算機直接執(zhí)行,需要經(jīng)過連接階段,即與函數(shù)庫進行連接,才能生成可執(zhí)行文件。

6.運行程序運行可執(zhí)行文件,并查看和分析運行結(jié)果。能得到運行結(jié)果并不能說明程序是正確的,要對運行結(jié)果進行分析,分析其是否合理。分析時需要多設(shè)計幾組數(shù)據(jù),檢查程序?qū)Σ煌瑪?shù)據(jù)的運行情況。只要發(fā)現(xiàn)一組運行結(jié)果與預(yù)期結(jié)果不同,就表明編寫的源程序存在邏輯錯誤,此時就需要重新修改源程序直至沒有邏輯錯誤。

C

程序的開發(fā)步驟一任務(wù)1

熟悉C程序開發(fā)環(huán)境C程序的開發(fā)從確定任務(wù)到得到結(jié)果一般要經(jīng)歷以下幾個步驟。7.編輯程序說明書如同正式的產(chǎn)品都有產(chǎn)品說明書一樣,正式提供給用戶使用的程序,也必須向用戶提供程序說明書。程序說明書也稱用戶文檔,一般應(yīng)包含程序名稱、程序功能、運行環(huán)境、程序的載入和啟動、需要輸入的數(shù)據(jù),以及使用注意事項等內(nèi)容。C

程序的開發(fā)環(huán)境

二任務(wù)1

熟悉C程序開發(fā)環(huán)境C

程序的開發(fā)環(huán)境有很多。例如,Linux操作系統(tǒng)下的GCC,Windows操作系統(tǒng)下的TurboC2.0、TurboC++3.0、Dev-C++、C-Free、VisualC++6.0和VisualC++2010等。自2018年3月以來,全國計算機等級考試(C語言)考試環(huán)境由VisualC++6.0更新為VisualC++2010學(xué)習(xí)版。因此,本書所選用的C程序開發(fā)環(huán)境為VisualC++2010學(xué)習(xí)版。VisualC++2010是集成在VisualStudio2010開發(fā)環(huán)境中的,該開發(fā)環(huán)境包括專業(yè)版、高級版、旗艦版和學(xué)習(xí)版4個不同版本,其中學(xué)習(xí)版是免費的。開發(fā)人員可在MicrosoftDreamSpark上獲得(必須有微軟的DreamSpark),也可以通過郵箱方式驗證學(xué)生身份來獲取該版本。

C

程序的開發(fā)環(huán)境

二任務(wù)1

熟悉C程序開發(fā)環(huán)境下面來看一下VisualC++2010的主界面。選擇“開始”→“MicrosoftVisualStudio2010Express”→“MicrosoftVisualC++2010Express”菜單項,便會打開VisualC++2010,進入默認起始頁,如圖所示。VisualC++2010的主界面

C

程序的開發(fā)環(huán)境

二任務(wù)1

熟悉C程序開發(fā)環(huán)境在起始頁中可以新建或打開項目,也可以學(xué)習(xí)軟件使用方法,或者瀏覽最新新聞。若想以后加載項目時關(guān)閉此頁,可取消勾選“啟動時顯示此頁”復(fù)選框。此后,若要訪問起始頁,可在“視圖”菜單中選擇“起始頁”菜單項,如右圖所示。選擇“起始頁”菜單項

任務(wù)1

熟悉C程序開發(fā)環(huán)境任務(wù)實訓(xùn)一、實訓(xùn)目的(1)了解C程序的開發(fā)步驟。(2)熟悉VisualC++2010開發(fā)環(huán)境。任務(wù)1

熟悉C程序開發(fā)環(huán)境二、實訓(xùn)內(nèi)容(1)運行VisualC++2010,新建項目并在此項目中新建源程序文件。(2)進入程序編輯窗口,在編輯區(qū)輸入以下源程序。#include<stdio.h> /*引用庫文件*/intmain() /*定義主函數(shù)*/{ printf("恰同學(xué)少年,\n"); /*輸出“恰同學(xué)少年,”*/ printf("風(fēng)華正茂;\n"); /*輸出“風(fēng)華正茂;”*/ printf("書生意氣,\n"); /*輸出“書生意氣,”*/ printf("揮斥方遒。\n"); /*輸出“揮斥方遒?!?/ printf("指點江山,\n"); /*輸出“指點江山,”*/ printf("激揚文字,\n"); /*輸出“激揚文字,”*/ printf("糞土當年萬戶侯。\n"); /*輸出“糞土當年萬戶侯?!?/ return0; /*函數(shù)返回值0*/}任務(wù)1

熟悉C程序開發(fā)環(huán)境二、實訓(xùn)內(nèi)容(3)編譯、連接源程序,查看編譯結(jié)果信息。如果出現(xiàn)錯誤信息,則認真檢查,找到原因并進行修改,然后再編譯、連接,直至沒有錯誤。(4)運行程序,分析運行結(jié)果。任務(wù)2編寫第一個C程序C

程序的基本結(jié)構(gòu)

一任務(wù)2編寫第一個C程序任務(wù)一帶領(lǐng)大家在VisualC++2010中輸入了一個簡單的C程序。#include<stdio.h> /*引用庫文件*/intmain() /*定義主函數(shù)*/{ printf(“WelcometoCProgramWorld!\n”);

/*輸出要顯示的字符串*/ return0; /*函數(shù)返回值0*/}

C

程序的基本結(jié)構(gòu)

一任務(wù)2編寫第一個C程序此程序是一個由預(yù)處理命令和主函數(shù)組成的簡單C程序,下面分別解釋各行代碼的意義。第1行:預(yù)處理命令。#include<stdio.h>include稱為文件包含命令,后面尖括號中的內(nèi)容稱為頭文件。stdio.h是C程序的系統(tǒng)文件,stdio是“standardinput&output(標準輸入輸出)”的縮寫,.h是文件的擴展名。由于程序的第4行使用了庫函數(shù)printf(),編譯系統(tǒng)要求程序提供有關(guān)此函數(shù)的信息(如對這些輸入輸出函數(shù)的聲明和宏的定義、全局變量的定義等),所以此處需要這條命令。C

程序的基本結(jié)構(gòu)

一任務(wù)2編寫第一個C程序此程序是一個由預(yù)處理命令和主函數(shù)組成的簡單C程序,下面分別解釋各行代碼的意義。第2行:函數(shù)頭。intmain()

其中,main是函數(shù)的名字,表示“主函數(shù)”,main前面的int表示函數(shù)的返回值是int類型(整型)。每個C程序都必須有一個main()函數(shù)。C

程序的基本結(jié)構(gòu)

一任務(wù)2編寫第一個C程序此程序是一個由預(yù)處理命令和主函數(shù)組成的簡單C程序,下面分別解釋各行代碼的意義。第3行到第6行:函數(shù)體。{ printf("WelcometoCProgramWorld!\n");/*輸出要顯示的字符串*/ return0;

/*函數(shù)返回值0*/}C

程序的基本結(jié)構(gòu)

一任務(wù)2編寫第一個C程序注意:函數(shù)體必須用大括號{

}括起來,函數(shù)體中每條語句后都要加分號,表示語句結(jié)束。在該函數(shù)體中,printf()是C編譯系統(tǒng)提供的函數(shù)庫中的輸出函數(shù),用于在屏幕輸出內(nèi)容,輸出語句中雙引號中間可以是字母、符號及中文字符等(其中,“\n”表示換行)?!皉eturn0;”的作用是當main()函數(shù)執(zhí)行結(jié)束時將整數(shù)0作為函數(shù)值返回到調(diào)用函數(shù)處。在程序各行的右側(cè)可以看到關(guān)于這行代碼的文字描述(用/*和*/括起來),稱為代碼注釋。其作用是對代碼進行解釋說明,以增加程序的可讀性。C

程序的基本結(jié)構(gòu)

一任務(wù)2編寫第一個C程序通過以上分析可以看出,C程序的結(jié)構(gòu)主要有以下特點。(1)一個C程序由一個或多個源程序文件組成。一個規(guī)模較小的程序,往往只包括一個源程序文件(本書中的例子都是基于一個源程序文件的)。(2)C程序是由函數(shù)構(gòu)成的,函數(shù)是C程序的基本單位。任何一個C程序必須包含且僅包含一個main()函數(shù),可以包含零個或多個其他函數(shù)。(3)一個函數(shù)由兩部分組成:函數(shù)頭和函數(shù)體。函數(shù)頭用于定義函數(shù)名和返回值類型,如intmain();函數(shù)體為函數(shù)頭下面大括號{}內(nèi)的部分,用于實現(xiàn)函數(shù)的具體功能。C

程序的基本結(jié)構(gòu)

一任務(wù)2編寫第一個C程序通過以上分析可以看出,C程序的結(jié)構(gòu)主要有以下特點。(4)C程序總是從main()函數(shù)開始執(zhí)行,到main()函數(shù)結(jié)束,與main()函數(shù)所處的位置無關(guān)。(5)C程序中每條語句和數(shù)據(jù)定義的最后必須有一個分號。分號是C語句的必要組成部分,必不可少。(6)一個好的、有使用價值的C程序都應(yīng)當加上必要的注釋,以增加程序的可讀性。C

程序的格式特點

二任務(wù)2編寫第一個C程序通過上面的實例可以看出,C程序有一定的格式特點,具體如下。(1)函數(shù)體中的大括號用來表示程序的結(jié)構(gòu)層次,左右大括號須成對使用。(2)在程序中,可以使用英文的大寫字母,也可以使用小寫字母。但要注意的是,C程序是區(qū)分字母大小寫的,即大寫字母和小寫字母代表不同的字符,如“a”和“A”是兩個完全不同的字符。一般情況下,C程序中使用小寫字母較多,但在定義常量時會使用大寫字母。C

程序的格式特點

二任務(wù)2編寫第一個C程序通過上面的實例可以看出,C程序有一定的格式特點,具體如下。(3)在程序中,空格和空行不會影響程序的執(zhí)行。合理地使用這些空格和空行,可以使編寫的程序更加規(guī)范,有助于日后的閱讀和整理。(4)C程序書寫格式自由,一行內(nèi)可以寫多條語句,一條語句也可以分寫在多行。但為了有良好的編程風(fēng)格,最好將一條語句寫在一行。C

程序的格式特點

二任務(wù)2編寫第一個C程序通過上面的實例可以看出,C程序有一定的格式特點,具體如下。(5)代碼縮進統(tǒng)一為4個字符。建議不使用空格,而使用“Tab”鍵。例如,以下程序雖然是正確的,但是由于書寫格式不規(guī)范,因而不利于閱讀和理解,應(yīng)參照任務(wù)一的格式進行書寫。#include<stdio.h>intmain(){printf("WelcometoProgramWorld!\n");return0;}常見錯誤分析三任務(wù)2編寫第一個C程序1.語句后少分號分號是C程序語句的重要組成部分,每條語句及數(shù)據(jù)定義末尾必須有分號。很多初學(xué)者在編寫程序時很容易漏寫。例如:#include<stdio.h>intmain(){ printf("HelloWorld!\n") /*語句后少了分號*/ return0;}常見錯誤分析三任務(wù)2編寫第一個C程序編譯報錯信息如下圖所示?!惧e誤分析】

提示語法錯誤,第5行“return”前缺少分號。這是因為,程序在編譯時,編譯器在“printf("HelloWorld!/n")”語句后沒有發(fā)現(xiàn)分號,會接著檢查下一行是否有分號,編譯器會認為“return0”也是上一行語句的一部分,直到分號結(jié)束。常見錯誤分析三任務(wù)2編寫第一個C程序2.語句中出現(xiàn)中文字符C

程序的語句只識別英文字符(提示信息和注釋信息除外),中文字符無法編譯。例如:#include<stdio.h>intmain(){ printf(“HelloWorld!\n”);/*使用了中文雙引號*/ return0;}

常見錯誤分析三任務(wù)2編寫第一個C程序編譯報錯信息如下圖所示?!惧e誤分析】

此程序之所以出現(xiàn)錯誤,是因為printf()函數(shù)中使用了中文雙引號,使得程序在編譯時發(fā)現(xiàn)了編譯器無法處理的字符。常見錯誤分析三任務(wù)2編寫第一個C程序3.大括號不成對出現(xiàn)C

程序的函數(shù)體中,左右大括號要成對使用。初學(xué)者在編寫程序時很容易忘掉右邊的大括號。例如:#include<stdio.h>intmain(){ printf("HelloWorld!\n"); return0; /*少了右大括號*/常見錯誤分析三任務(wù)2編寫第一個C程序編譯報錯信息如下圖所示。【錯誤分析】

錯誤提示,在第6行中,與左側(cè)的大括號“{”匹配之前遇到文件結(jié)束。出現(xiàn)這類錯誤時,通常需要核對大括號是否成對出現(xiàn)。常見錯誤分析三任務(wù)2編寫第一個C程序4.程序連接出錯一般情況下,程序編譯完成后如果沒有錯誤,在連接程序時就很少發(fā)生錯誤了,除非是調(diào)用函數(shù)出了問題。例如:#include<stdio.h>intmain(){ print("HelloWorld!\n");/*printf()函數(shù)名寫錯了*/ return0;}常見錯誤分析三任務(wù)2編寫第一個C程序編譯報錯信息如下圖所示?!惧e誤分析】

編譯沒有錯誤,說明語法沒有錯。但在連接時出現(xiàn)“無法解析的外部符號_print,該符號在函數(shù)_main中被引用”的錯誤信息,這表示編譯器遇到無法解析的外部符號print。一般來說,當遇到這類錯誤時通常需要檢查函數(shù)名是否輸錯。實施案例任務(wù)2編寫第一個C程序一.案例分析程序要求輸出3行字符串,故需要在主函數(shù)中調(diào)用3次printf()函數(shù)。要調(diào)用printf()函數(shù),須使用文件包含命令包含系統(tǒng)文件“stdio.h”。實施案例任務(wù)2編寫第一個C程序二.參考程序#include<stdio.h>

/*引用庫文件*/intmain(){ printf("*******************\n"); /*輸出一行“*”*/ printf(“這是我的第一個C程序\n”);

/*輸出“這是我的第一個C程序”*/ printf("*******************\n"); /*輸出一行“*”*/ return0; /*函數(shù)返回值0*/}

實施案例任務(wù)2編寫第一個C程序三.運行結(jié)果運行VisualC++2010,新建項目并在此項目中新建源程序文件。在編輯區(qū)輸入以上程序,生成解決方案并運行程序。最終的運行結(jié)果如圖所示。任務(wù)實訓(xùn)一、實訓(xùn)目的(1)掌握C程序的基本結(jié)構(gòu)。(2)學(xué)會查看編譯器給出的錯誤信息,分析并修改程序。任務(wù)2編寫第一個C程序任務(wù)實訓(xùn)二、實訓(xùn)內(nèi)容(1)以下程序是完全正確的,但是由于書寫格式不規(guī)范,因而不利于閱讀和理解。①

輸入以下程序。#include<stdio.h>intmain(){inta,b;printf("請輸入兩個整數(shù):"); scanf("%d%d",&a,&b);if(a>b) printf("max=%d\n",a); elseprintf("max=%d\n",b);return0;}任務(wù)2編寫第一個C程序任務(wù)實訓(xùn)二、實訓(xùn)內(nèi)容(1)以下程序是完全正確的,但是由于書寫格式不規(guī)范,因而不利于閱讀和理解。②

修改程序使其便于閱讀和理解。③

編譯、連接并運行程序,在運行時從鍵盤輸入“23”,然后按“回車”鍵,觀察并分析運行結(jié)果。任務(wù)2編寫第一個C程序任務(wù)實訓(xùn)二、實訓(xùn)內(nèi)容(2)找出以下程序中的錯誤并修改,然后上機驗證。#include<stdio.h>intmain(){ inta,b,c; a=5; b=8; c=a+b printf("%d+%d=%d\n",a,b,c); return0;}任務(wù)2編寫第一個C程序感謝觀看C程序設(shè)計項目教程目錄項目1項目2項目3項目4項目5項目6C程序概述算法C語法基礎(chǔ)分支語句循環(huán)語句數(shù)組

項目7項目9項目8項目10函數(shù)指針構(gòu)造數(shù)據(jù)類型文件2算法——程序設(shè)計的靈魂項目項目2

算法知識目標了解算法的概念和特點。掌握流程圖和N-S流程圖的表示方法。能力目標素質(zhì)目標學(xué)會繪制流程圖和N-S流程圖。能利用流程圖和N-S流程圖表示算法。學(xué)會多角度看待問題,轉(zhuǎn)換角度解決問題。養(yǎng)成事前規(guī)劃、事后總結(jié)的習(xí)慣。項目2

算法項目導(dǎo)讀廣義上說,算法是完成某件事情的方法和步驟。在計算機領(lǐng)域,算法即為計算機解決問題的處理步驟。著名的計算機科學(xué)家沃思(N.Wirth)曾提出一個經(jīng)典公式:數(shù)據(jù)結(jié)構(gòu)+算法=程序這一公式說明編寫程序的關(guān)鍵就在于合理地組織數(shù)據(jù)和設(shè)計算法,如果說數(shù)據(jù)結(jié)構(gòu)是程序的軀體,那么算法就是程序的靈魂。項目2

算法任務(wù)1解析漢諾塔游戲什么是算法

一任務(wù)1

解析漢諾塔游戲算法是為解決某一問題而提出的準確而完整的方案,是解決問題的方法和步驟。例如,乘坐火車通??煞譃橐韵聨撞剑嘿徺I車票→進站→刷證件→上車→到達目的地→下車。這些步驟是按一定順序進行的,缺一不可。在計算機領(lǐng)域,算法是對計算機中執(zhí)行的運算過程的具體描述,包括數(shù)值運算算法和非數(shù)值運算算法。數(shù)值運算的目的是求數(shù)值解,如求三角形面積、方程求解等。非數(shù)值運算涉及面比較廣,如人事信息管理、成績管理、圖書管理等。什么是算法

一任務(wù)1

解析漢諾塔游戲?qū)τ谕粋€問題,不同的人往往會有不同的解題方法和步驟。例如,計算S=1+2+3+…+

99+100的值。有人會采用逐個數(shù)相加的方法,即先計算1加2,再加3,再加4,如此反復(fù),一直加到100;而有人會利用巧算公式先計算1+99、2+98、3+97……,再計算有多少個這樣的加法;還有人會利用等差數(shù)列的求和公式

來進行計算。顯然,相比第一種算法,后面兩種算法要簡單很多。由此可見,對于同一個問題的解題方法也有優(yōu)劣之分,為了有效地進行解題,不僅需要保證算法的正確性,還需要考慮算法的質(zhì)量。算法的特點

一任務(wù)1

解析漢諾塔游戲一般來講,一個有效的算法應(yīng)具有以下5個特點。(1)有窮性。一個算法必須在執(zhí)行有限個操作步驟后終止,且每一個步驟都須在有限的時間內(nèi)完成。例如,等差數(shù)列求和時,這個數(shù)列必須是有限的,如果沒有這個限制,計算機將一直累加下去而無法停止。(2)確定性。算法中每步操作的含義都必須是明確的,即為要執(zhí)行的每步操作做出清晰而嚴格的規(guī)定。例如,在溫度控制程序中,不能出現(xiàn)諸如“溫差較大時,系統(tǒng)迅速升溫或降溫”等模糊詞語。算法的特點

一任務(wù)1

解析漢諾塔游戲一般來講,一個有效的算法應(yīng)具有以下5個特點。(3)有效性,也稱可行性。即算法中的每步操作都應(yīng)該能有效執(zhí)行,一個不可執(zhí)行的操作是無效的。例如,一個數(shù)除以0就是一個無效操作,應(yīng)當避免這種操作。(4)有零個或多個輸入。這里的輸入是指在算法開始之前所需要的初始數(shù)據(jù)。輸入的多少取決于特定的問題。例如,求等差數(shù)列1+2+3+…+n的累加時,需要輸入n的值;再如,項目一中的任務(wù)只有輸出而沒有輸入。(5)有一個或多個輸出。在一個完整的算法中至少會有一個輸出。編寫程序的目的就是要得到一個結(jié)果,如果程序運行完沒有任何結(jié)果輸出,那編寫程序也就失去了意義。實施案例一.案例分析將漢諾塔游戲抽象為數(shù)學(xué)問題。如圖所示,從左到右有A、B、C三根柱子,其中,A柱有從小疊到大的n個圓盤。現(xiàn)要求將A柱的圓盤移到C柱,期間應(yīng)遵守一個規(guī)則:一次只能移動一個圓盤,且大圓盤只能在小圓盤下面,求移動的步驟和移動的次數(shù)。任務(wù)1

解析漢諾塔游戲漢諾塔游戲框圖

實施案例二.算法分析根據(jù)漢諾塔游戲的規(guī)則,要想將n個圓盤從A柱移到C柱,須先將上面的n?1個圓盤移到B柱,然后就可以將第n個圓盤直接從A柱移到C柱,最后將移走的n?1個圓盤從B柱移到C柱。因此,該問題轉(zhuǎn)換成了移動n?1個圓盤的問題。要將n?1個圓盤從A柱移到B柱,須先將上面的n?2個圓盤移到C柱,然后將第n?1個圓盤從A柱移到B柱,最后將移走的n?2個圓盤從C柱移到B柱。可見,該問題轉(zhuǎn)換成了移動n?2個圓盤的問題。任務(wù)1

解析漢諾塔游戲?qū)嵤┌咐?算法分析依次類推,最終轉(zhuǎn)換成移動最上面1個圓盤的問題。為了便于理解,先來分析將3個圓盤從A柱移到C柱的過程。移動前的情況如圖所示。任務(wù)1

解析漢諾塔游戲移動前

實施案例二.算法分析移動移動步驟如下:(1)將上面的2個圓盤從A柱移到B柱(借助C柱),如圖所示;任務(wù)1

解析漢諾塔游戲第一步

實施案例二.算法分析移動移動步驟如下:(2)將第3個圓盤從A柱移到C柱,如圖所示;任務(wù)1

解析漢諾塔游戲第二步

實施案例二.算法分析移動移動步驟如下:(3)將2個圓盤移到C柱(借助A柱),如圖所示。任務(wù)1

解析漢諾塔游戲第三步

實施案例二.算法分析其中第(2)步可直接實現(xiàn),第(1)步和第(3)步又可分解為3步。第(1)步可分解為:①將第1個圓盤從A柱移到C柱;②將第2個圓盤從A柱移到B柱;③將第1個圓盤從C柱移到B柱。第(3)步可分解為:①將B柱上1個圓盤移到A柱;②將B柱上剩下的圓盤移到C柱;③將A柱上圓盤移到C柱。將以上步驟綜合起來,將3個圓盤從A柱移到C柱共經(jīng)歷7(即23?1)步,即A→C、A→B、C→B、A→C、B→A、B→C、A→C。將4個圓盤從A柱移到C柱共經(jīng)歷15(即24?1)步,即將上面的3個圓盤從A柱移到B柱(7步),然后移動第4個圓盤(1步),再將上面的3個圓盤從B柱移到C柱(7步)。任務(wù)1

解析漢諾塔游戲?qū)嵤┌咐?算法分析由上面的分析可以推斷,將n個圓盤從A柱移到C柱需經(jīng)歷2n?1步。這些步驟又可以概括為以下3步。(1)將上面的n?1個圓盤從A柱移到B柱(借助C柱);(2)將第n個圓盤從A柱移到C柱;(3)將B柱上n?1個圓盤移到C柱(借助A柱)。任務(wù)1

解析漢諾塔游戲?qū)嵤┌咐?算法描述從算法分析可以看出,第(1)步和第(3)步都是把n?1個圓盤從一個柱移到另一個柱,采取的方法是一樣的,只是柱子的名稱不同而已。將3個柱子分別用變量a、b和c表示,設(shè)n個圓盤借助b柱從a柱移到c柱的函數(shù)為Hanoi(n,a,b,c),則算法可用以下文字描述。S1:如果n=1,輸出“a→c”,結(jié)束;否則,執(zhí)行S2。S2:將n?1個圓盤從a移動到b(借助c),即Hanoi(n?1,a,c,b)。S3:將第n個圓盤從a移到c,即“a→c”。S4:將n?1個圓盤從b移動到c(借助a),即Hanoi(n?1,b,a,c)。這種使用S1、S2等序號代表執(zhí)行順序?qū)λ惴ㄟM行描述的方法稱為自然語言表示。用自然語言表示算法的優(yōu)點是通俗易懂,缺點是文字冗長,不嚴謹,表示復(fù)雜算法時不方便。任務(wù)1

解析漢諾塔游戲任務(wù)2判定是否是閏年算法的表示流程圖

一任務(wù)2

判定是否是閏年算法流程圖用一些圖框來表示各種操作,用流程線來表示算法的執(zhí)行方向。用圖形表示算法,直觀形象,易于理解。1.流程圖符號美國國家標準協(xié)會(Americannationalstandardsinstitute,ANSI)規(guī)定了一些常用的流程圖符號,其名稱及含義如表所示。流程圖

一任務(wù)2

判定是否是閏年算法1.流程圖符號圖形符號名稱含義起止框算法的起點和終點,是任何流程圖必不可少的輸入、輸出框數(shù)據(jù)的輸入和輸出操作處理框各種形式數(shù)據(jù)的處理判斷框判斷條件是否成立,成立時在出口處標注“是”或“Y”,

不成立時標注“否”或“N”預(yù)定義過程一個特定過程,如函數(shù)流程線連接各個圖框,表示執(zhí)行的順序連接點將畫在不同地方的流程線連接起來流程圖

一任務(wù)2

判定是否是閏年算法2.基本結(jié)構(gòu)為了提高算法的質(zhì)量,Bohra和Jacopini在1966年提出了3種基本結(jié)構(gòu),即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。這3種結(jié)構(gòu)之間可以并列,也可以相互包含,但不能交叉。(1)順序結(jié)構(gòu)是簡單的線性結(jié)構(gòu),各操作按照它們出現(xiàn)的先后順序執(zhí)行。如圖所示,在執(zhí)行完A框中指定的操作后執(zhí)行B框中指定的操作。順序結(jié)構(gòu)

流程圖

一任務(wù)2

判定是否是閏年算法2.基本結(jié)構(gòu)【例2-2-1】請用流程圖表示算法,根據(jù)長方形的長和寬,計算其面積?!締栴}分析】

要計算長方形的面積,首先需要輸入長方形的長a和寬b的值,然后利用公式S=a×b求出S的值,最后輸出S的值,其流程圖表示如圖所示。計算長方形的面積

流程圖

一任務(wù)2

判定是否是閏年算法2.基本結(jié)構(gòu)(2)選擇結(jié)構(gòu),也稱分支結(jié)構(gòu)。在選擇結(jié)構(gòu)中必包含一個判斷框,根據(jù)判斷條件P是否成立而選擇執(zhí)行A框或B框,如圖所示。選擇結(jié)構(gòu)

流程圖

一任務(wù)2

判定是否是閏年算法2.基本結(jié)構(gòu)【例2-2-2】請用流程圖表示算法,輸入某同學(xué)某門課程成績,判斷該同學(xué)是否通過考試,輸出判斷結(jié)果?!締栴}分析】

判斷某同學(xué)是否通過考試,首先須輸入該同學(xué)的成績score,然后判斷score是否大于或等于60,若成立,則表示通過,否則表示未通過,其流程圖表示如圖所示。判斷某同學(xué)是否通過考試

流程圖

一任務(wù)2

判定是否是閏年算法2.基本結(jié)構(gòu)(3)循環(huán)結(jié)構(gòu)又稱重復(fù)結(jié)構(gòu),即反復(fù)執(zhí)行某一部分的操作,直到條件不成立時終止循環(huán)。按照判定條件出現(xiàn)的位置不同,可將循環(huán)結(jié)構(gòu)分為當型循環(huán)結(jié)構(gòu)和直到型循環(huán)結(jié)構(gòu)。當型循環(huán)結(jié)構(gòu),先判斷循環(huán)條件P是否成立,如果成立就執(zhí)行A框中指定的操作,執(zhí)行完A框后再判斷循環(huán)條件P是否成立,如果成立,再次執(zhí)行A框。如此反復(fù),直到循環(huán)條件P不成立,結(jié)束循環(huán)。當型循環(huán)結(jié)構(gòu)

流程圖

一任務(wù)2

判定是否是閏年算法2.基本結(jié)構(gòu)直到型循環(huán)結(jié)構(gòu),先執(zhí)行A框中指定的操作,然后判斷循環(huán)條件P是否成立,如果成立執(zhí)行A框,然后再判斷循環(huán)條件P是否成立,如果成立,再次執(zhí)行A框。如此反復(fù),直到循環(huán)條件P不成立,結(jié)束循環(huán)。直到型循環(huán)結(jié)構(gòu)

流程圖

一任務(wù)2

判定是否是閏年算法2.基本結(jié)構(gòu)【例2-2-3】

用流程圖表示S=1+2+3+…+n的算法。【問題分析】從式中可以看出,這是前n項自然數(shù)求和(等差數(shù)列求和),每一項和前一項的差為1,其流程圖可以用當型循環(huán)結(jié)構(gòu)來表示,如圖所示。先判斷i的值是否小于等于n,如果成立,才執(zhí)行循環(huán)體(S=S+i和i自加1)。接下來再判斷i的值,如此循環(huán)下去,直到i的值小于等于n不成立。此例也可以用直到型循環(huán)結(jié)構(gòu)來表示(見圖),先執(zhí)行循環(huán)體,再進行判斷,這種情況下無論判斷條件是否成立,循環(huán)體中的語句至少會被執(zhí)行一次。當型循環(huán)結(jié)構(gòu)求和

流程圖

一任務(wù)2

判定是否是閏年算法2.基本結(jié)構(gòu)【例2-2-3】

用流程圖表示S=1+2+3+…+n的算法?!締栴}分析】從式中可以看出,這是前n項自然數(shù)求和(等差數(shù)列求和),每一項和前一項的差為1,其流程圖可以用當型循環(huán)結(jié)構(gòu)來表示,如圖所示。先判斷i的值是否小于等于n,如果成立,才執(zhí)行循環(huán)體(S=S+i和i自加1)。接下來再判斷i的值,如此循環(huán)下去,直到i的值小于等于n不成立。此例也可以用直到型循環(huán)結(jié)構(gòu)來表示(見圖),先執(zhí)行循環(huán)體,再進行判斷,這種情況下無論判斷條件是否成立,循環(huán)體中的語句至少會被執(zhí)行一次。直到型循環(huán)結(jié)構(gòu)求和

N-S流程圖

二任務(wù)2

判定是否是閏年算法N-S流程圖又稱盒圖,是由美國學(xué)者I.Nassi和B.Shneiderman提出的,故以他們姓氏的首字母命名。他們認為既然任何算法都是由前面介紹的3種基本結(jié)構(gòu)組成的,那么各基本結(jié)構(gòu)之間的流程線就是多余的。因此,在N-S流程圖中完全去掉了流程線,全部算法都寫在一個大矩形框內(nèi),這個大矩形框又由若干個小的基本框圖構(gòu)成。同樣,N-S流程圖也包括順序、選擇和循環(huán)3種基本結(jié)構(gòu)。N-S流程圖

二任務(wù)2

判定是否是閏年算法1.順序結(jié)構(gòu)順序結(jié)構(gòu)的N-S流程圖如圖1所示,它表示順序執(zhí)行A框和B框?!纠?-2-4】

將例2-2-1的算法用N-S流程圖表示?!締栴}分析】本例可采用順序結(jié)構(gòu)的N-S流程圖形式實現(xiàn),如圖2所示。圖1順序結(jié)構(gòu)

圖2計算長方形的面積

N-S流程圖

二任務(wù)2

判定是否是閏年算法2.選擇結(jié)構(gòu)選擇結(jié)構(gòu)的N-S流程圖如圖1所示,它表示先判斷條件P,當條件成立時執(zhí)行A框,不成立時執(zhí)行B框。【例2-2-5】

將例2-2-2的算法用N-S流程圖表示。【問題分析】本例的N-S流程圖可以采用選擇結(jié)構(gòu)來實現(xiàn),如圖2所示。圖1選擇結(jié)構(gòu)

圖2判斷是否通過考試N-S流程圖

二任務(wù)2

判定是否是閏年算法3.循環(huán)結(jié)構(gòu)當型循環(huán)結(jié)構(gòu)的N-S流程圖如圖1所示,當P成立時,循環(huán)執(zhí)行A框;直到型循環(huán)結(jié)構(gòu)的N-S流程圖如圖2所示,循環(huán)執(zhí)行A框,直到P成立。圖1當型循環(huán)

圖2直到型循環(huán)N-S流程圖

二任務(wù)2

判定是否是閏年算法3.循環(huán)結(jié)構(gòu)【例2-2-6】

將例2-2-3的算法用N-S流程圖表示。【問題分析】本例的N-S流程圖用當型循環(huán)結(jié)構(gòu)表示如圖1所示,用直到型循環(huán)結(jié)構(gòu)表示如圖2所示。圖1當型循環(huán)求和

圖2直到型循環(huán)求和實施案例一.案例分析通過查找資料可知,若公元年號滿足下面兩個條件中的任意一個,則該年為閏年。若兩個條件都不滿足,則該年不是閏年。(1)能被4整除,但不能被100整除;(2)能被400整除。由以上條件可知,判定是否是閏年算法中包含選擇結(jié)構(gòu),而此處又須逐年判定1900年—2500年是否是閏年,所以也包含循環(huán)結(jié)構(gòu)。任務(wù)2

判定是否是閏年算法實施案例二.算法描述設(shè)year為公元年號,用leap作為閏年的標志。當型循環(huán)結(jié)構(gòu)算法可表示如下。(1)賦初值year=1900;(2)判斷year是否小于等于2500,如果成立,執(zhí)行(3),否則結(jié)束;(3)判斷year能否被4整除,如果成立,執(zhí)行(4),否則,leap=0;(4)判斷year能否被100整除,如果成立,執(zhí)行(5),否則,leap=1;(5)判斷year能否被400整除,如果成立,leap=1,否則,leap=0;(6)判斷l(xiāng)eap的值,leap為1輸出“year是閏年”;(7)year=year+1,返回(2)。任務(wù)2

判定是否是閏年算法實施案例二.算法描述該算法流程圖如圖所示。

任務(wù)2

判定是否是閏年算法判定是否是閏年的流程圖

實施案例二.算法描述N-S流程圖如圖所示。

任務(wù)2

判定是否是閏年算法判定是否是閏年的N-S流程圖

感謝觀看C程序設(shè)計項目教程目錄項目1項目2項目3項目4項目5項目6C程序概述算法C語法基礎(chǔ)分支語句循環(huán)語句數(shù)組

項目7項目9項目8項目10函數(shù)指針構(gòu)造數(shù)據(jù)類型文件3C語法基礎(chǔ)——學(xué)好C程序的基石項目項目3

C語法基礎(chǔ)知識目標掌握標識符和關(guān)鍵字的概念。掌握常量和變量的使用方法。熟悉各種數(shù)據(jù)類型的特點。掌握使用常用運算符進行運算的方法。了解C語句的概念與類型。掌握格式輸入輸出函數(shù)和字符輸入輸出函數(shù)的使用方法。能力目標素質(zhì)目標能查找并改正標識符、數(shù)據(jù)類型和常見表達式的語法錯誤。能利用輸入輸出函數(shù)進行簡單的程序設(shè)計。增強遵守規(guī)則的意識,養(yǎng)成按規(guī)矩行事的習(xí)慣。提升自己的職業(yè)素養(yǎng)和職業(yè)技能。項目3

C語法基礎(chǔ)項目導(dǎo)讀通過前兩個項目的學(xué)習(xí),讀者熟悉了C程序的開發(fā)環(huán)境,掌握了算法的表示方法。從本項目開始,將正式進入C程序設(shè)計的學(xué)習(xí)。C程序主要是由標識符、常量、變量、運算符和表達式等按照一定的語法規(guī)則組成的,因此學(xué)好C語法基礎(chǔ)是學(xué)好C程序的基石。項目3

C語法基礎(chǔ)任務(wù)1計算三角形的面積標識符和關(guān)鍵字一任務(wù)1

計算三角形的面積1.標識符標識符是指軟件開發(fā)人員在編寫程序時自己規(guī)定的具有特定含義的詞,用來標明設(shè)定的變量名、數(shù)組名、函數(shù)名等。在C程序中,標識符應(yīng)遵循以下命名規(guī)則。(1)標識符只能由字母、下劃線、數(shù)字組成,且第一個字符必須是字母或下劃線。例如,str、_str1、str_2都是合法的標識符,而2str、2_str、&123、%lsso、M.Jack、-L2都是非法的。(2)標識符區(qū)分字母大小寫。例如,score和Score是兩個不同的標識符。(3)標識符不能是C程序中的關(guān)鍵字,如printf、int等。

標識符和關(guān)鍵字一任務(wù)1

計算三角形的面積1.標識符C程序中規(guī)定具有特別意義的字符串稱為關(guān)鍵字,也稱保留字。C程序中的關(guān)鍵字共有37個,如表所示。chardoubleenumfloatintlongshortsignedstructunionunsignedvoidfordowhilebreakcontinueifelsegotoswitchcasedefaultreturnautoexternregisterstaticconstsizeoftypedefvolatileinlinerestrict_Bool_Complex_Imaginary

常量和變量

二任務(wù)1

計算三角形的面積C程序中的數(shù)據(jù),按其取值是否可改變分為常量和變量。在程序執(zhí)行過程中,其值不發(fā)生改變的量稱為常量,其值可變的量稱為變量。1.常量常量可分為直接常量和符號常量兩種。常見的直接常量又包括整型常量、實型常量和字符常量。符號常量是用標識符來表示一個常量。符號常量在使用之前必須先定義,其一般形式為#define標識符常量其中“#define”是一條預(yù)處理命令,稱為宏定義命令,其功能是把該標識符定義為其后的常量值。一經(jīng)定義,以后在程序中所有出現(xiàn)該標識符的地方均代表該常量值。常量和變量

二任務(wù)1

計算三角形的面積例如:#definePI3.1415926其含義是以標識符PI來代表數(shù)據(jù)3.1415926。宏定義命令之后,程序中用到3.1415926的地方都可以用標識符PI來替代。宏定義的作用是給常量起“別名”,利用它可以增強程序的可維護性。例如,當需要修改某一常量值時,只需要修改宏定義中的常量值,而不必在程序各處逐一修改。另外,意義明確的“別名”還可以增強程序的可讀性。

常量和變量

二任務(wù)1

計算三角形的面積2.變量每個變量都有一個名字,這個名字稱為變量名。變量名必須是合法的標識符,它代表了某個存儲空間及其所存儲的數(shù)據(jù),這個空間所存儲的數(shù)據(jù)稱為該變量的值。變量在使用之前必須先定義,定義變量的一般格式為類型說明符變量名;例如,以下語句定義了一個整型變量a:inta;常量和變量

二任務(wù)1

計算三角形的面積2.變量定義變量時,應(yīng)注意以下4點。(1)允許在一個類型說明符后定義多個相同類型的變量,各變量名之間用逗號隔開,具體格式為類型說明符變量名1,變量名2,……;

(2)類型說明符與變量名之間至少有一個空格。(3)最后一個變量名之后必須以“;”結(jié)尾。(4)變量定義必須放在變量使用之前,一般放在函數(shù)體的開始部分。常量和變量

二任務(wù)1

計算三角形的面積2.變量在定義變量時,也可以同時給變量賦值。例如,定義一個整型變量a,并為其賦值0的方法如下:inta; /*定義一個整型變量a*/a=0; /*為a賦值0*/用戶也可在定義變量的同時為變量賦初值,這種形式稱為變量的初始化。例如:inta=0; /*定義一個整型變量a并初始化為0*/基本數(shù)據(jù)類型

三任務(wù)1

計算三角形的面積1.整型整型數(shù)據(jù)包括整型常量和整型變量兩類。1)整型常量整型常量的表示形式如下。(1)十進制整數(shù)。如18、?175。(2)八進制整數(shù)。以數(shù)字0開頭,用0~7這8個數(shù)字組合表達。例如,0154對應(yīng)的十進制數(shù)為1×82+5×81+4×80=108。(3)十六進制整數(shù)。以0x或0X開頭,用0~9這10個數(shù)字及字母A~F(或a~f)組合表達。其中,A代表數(shù)值10,B代表數(shù)值11,依此類推。例如,0x15F對應(yīng)的十進制數(shù)為1×162+5×161+15×160=351?;緮?shù)據(jù)類型

三任務(wù)1

計算三角形的面積1.整型整型數(shù)據(jù)包括整型常量和整型變量兩類。2)整型變量整型變量是用來存儲整數(shù)的變量,可分為有符號整型和無符號整型兩大類。有符號整型指的是數(shù)值可以帶正負號,所以需要一個符號位;無符號整型指的是數(shù)值只有正數(shù),所以可以去掉符號位。默認情況下,C程序中的整型變量都是有符號的,若要使用無符號整型,需要用關(guān)鍵字unsigned聲明。為了適應(yīng)不同的應(yīng)用場合,C程序中可以定義多種整數(shù)類型,其長度各不相同。其中,最常用的是有符號整型(用關(guān)鍵字int表示)長度為32位(4個字節(jié))。此外,還有長整型(用關(guān)鍵字long表示)和短整型(用關(guān)鍵字short表示)?;緮?shù)據(jù)類型

三任務(wù)1

計算三角形的面積編寫程序時,除可以指明變量是長整型或短整型,有符號整型或無符號整型,還可以把說明符組合起來。因此,整型變量可以分為有符號基本整型、無符號基本整型、有符號短整型、無符號短整型、有符號長整型和無符號長整型這6種。各類型的關(guān)鍵字和取值范圍如表所示。類型名稱關(guān)鍵字表示字節(jié)數(shù)最小值最大值有符號基本整型[signed]int4?2147483648(?231)2147483647(231?1)無符號基本整型unsigned[int]404294967295(232?1)有符號短整型[signed]short[int]2?32768(?215)32767(215?1)無符號短整型unsignedshort[int]2065535(216?1)有符號長整型[signed]long[int]4?2147483648(?231)2147483647(231?1)無符號長整型unsignedlong[int]404294967295(232?1)基本數(shù)據(jù)類型

三任務(wù)1

計算三角形的面積在C程序中,各種整型變量都有其特定的表示范圍,當一個數(shù)據(jù)超出了其類型所能表示的范圍時,稱為數(shù)據(jù)溢出。【例3-1-1】

有符號短整型數(shù)據(jù)的溢出。#include<stdio.h>intmain(){ shorta,b; /*定義兩個短整型變量a和b*/ a=32767; /*將值32767賦給變量a*/ b=a+1; /*將a的值加1后賦給變量b*/ printf("a=%d,b=%d\n",a,b); /*輸出a和b的值*/ return0; /*函數(shù)返回值*/}基本數(shù)據(jù)類型

三任務(wù)1

計算三角形的面積【運行結(jié)果】

程序運行結(jié)果如圖所示?!境绦蛘f明】

這里定義的變量a和b是有符號短整型,其取值范圍為?32768~32767,所以當a的值加1變成了32768后就會發(fā)生“溢出”。但程序運行時并不報錯,它好像汽車里程表一樣,達到最大值以后,又從最小值開始計數(shù)。所以32767加1后得到的結(jié)果不是32768,而是?32768?;緮?shù)據(jù)類型

三任務(wù)1

計算三角形的面積2.浮點型浮點型數(shù)據(jù)也稱為實型數(shù)據(jù),是帶有小數(shù)點或指數(shù)符號的數(shù)值數(shù)據(jù),包括浮點型常量和浮點型變量兩類。1)浮點型常量浮點型常量的表示只采用十進制形式,包括直接十進制形式和指數(shù)形式兩類。(1)直接十進制形式,如0.0013、?1482.5。(2)指數(shù)形式,通常用來表示一些比較大或者比較小的數(shù)值,格式為實數(shù)部分+字母E或e+正負號+整數(shù)部分其中字母E或e表示十次方,正負號表示指數(shù)部分的符號,整數(shù)部分為冪的大小。字母E或e之前必須有數(shù)字(實數(shù)部分),之后的數(shù)字必須為整數(shù)。例如,0.0013可表示為1.3e?3,?1482.5可表示為?1.4825e3。基本數(shù)據(jù)類型

三任務(wù)1

計算三角形的面積2)浮點型變量根據(jù)其精度不同,浮點型變量可以分為單精度類型、雙精度類型和長雙精度類型。(1)單精度類型使用關(guān)鍵字float來定義變量,它在內(nèi)存中占4個字節(jié),提供6位有效數(shù)字,取值范圍為?3.4×1038~?1.2×10?38、0和1.2×10?38~3.4×1038?;緮?shù)據(jù)類型

三任務(wù)1

計算三角形的面積2)浮點型變量【例3-1-2】

單精度型數(shù)據(jù)的有效位。#include<stdio.h>intmain(){ floatf; /*定義單精度型變量f*/ f=1234567.95789; /*將值1234567.95789賦給變量f*/ printf(“f=%f\n”,f);

/*輸出變量f的值*/ return0; /*函數(shù)返回值0*/}

基本數(shù)據(jù)類型

三任務(wù)1

計算三角形的面積2)浮點型變量【例3-1-2】

單精度型數(shù)據(jù)的有效位。#include<stdio.h>intmain(){ floatf; /*定義單精度型變量f*/ f=1234567.95789; /*將值1234567.95789賦給變量f*/ printf(“f=%f\n”,f);

/*輸出變量f的值*/ return0; /*函數(shù)返回值0*/}

【運行結(jié)果】

程序運行結(jié)果如圖所示。基本數(shù)據(jù)類型

三任務(wù)1

計算三角形的面積2)浮點型變量(2)雙精度類型使用關(guān)鍵字double來定義變量,它在內(nèi)存中占8個字節(jié),提供15位有效數(shù)字,取值范圍為?1.7×10308~?2.3×10?308、0和2.3×10?308~1.7×10308?!纠?-1-3】

將例3-1-2中的變量定義為double類型。#include<stdio.h>intmain(){ doublef; /*定義雙精度型變量f*/ f=1234567.95789; /*將值1234567.95789賦給變量f*/ printf("f=%f\n",f); /*輸出變量f的值*/ return0; /*函數(shù)返回值0*/}基本數(shù)據(jù)類型

三任務(wù)1

計算三角形的面積2)浮點型變量【例3-1-3】

將例3-1-2中的變量定義為double類型。#include<stdio.h>intmain(){ doublef; /*定義雙精度型變量f*/ f=1234567.95789; /*將值1234567.95789賦給變量f*/ printf("f=%f\n",f); /*輸出變量f的值*/ return0; /*函數(shù)返回值0*/}【運行結(jié)果】

程序運行結(jié)果如圖所示?;緮?shù)據(jù)類型

三任務(wù)1

計算三角形的面積2)浮點型變量(3)長雙精度類型使用的關(guān)鍵字是longdouble。不同的編譯系統(tǒng)對longdouble型的處理方法不同。例如,TurboC2.0對longdouble型分配16個字節(jié),而VisualC++則對longdouble型和double型一樣處理,其有效數(shù)字位數(shù)和取值范圍也與double型一致?;緮?shù)據(jù)類型

三任務(wù)1

計算三角形的面積3.字符型字符型數(shù)據(jù)包括字符型常量和字符型變量。1)字符型常量字符型常量包括字符常量、字符串常量和轉(zhuǎn)義字符。(1)C程序中的字符常量必須用單撇號(單引號)括起來,且單撇號中只能是單個字符,如'A'、'a'、'8'、'&'。由于字符型數(shù)據(jù)在C程序中是以ASCII碼形式存儲的,因此字符常量的值就是其對應(yīng)的ASCII碼值。例如,字符'A'的ASCII碼值為65,'a'的ASCII碼值為97?;緮?shù)據(jù)類型

三任務(wù)1

計算三角形的面積3.字符型字符型數(shù)據(jù)包括字符型常量和字符型變量。1)字符型常量字符型常量包括字符常量、字符串常量和轉(zhuǎn)義字符。由于ASCII碼值為整型,所以C程序中字符型數(shù)據(jù)與整型數(shù)據(jù)是可以互用的。例如,

'a'?32相當于97?32,等于65,對應(yīng)的字符為'A';同理,'A'+32為字符'a',這是實現(xiàn)大小寫字母轉(zhuǎn)換的一種方法?;緮?shù)據(jù)類型

三任務(wù)1

計算三角形的面積3.字符型字符型數(shù)據(jù)包括字符型常量和字符型變量。1)字符型常量(2)字符串常量是一對雙撇號(雙引號)括起來的一個或多個字符。例如,"A"、"China"、"Welcometobeijing"等。C程序中存儲字符串常量時,系統(tǒng)會在字符串的末尾自動加一個'\0'作為字符串的結(jié)束標志。例如,字符串常量"China"在內(nèi)存中的存儲形式如圖所示。基本數(shù)據(jù)類型

三任務(wù)1

計算三角形的面積1)字符型常量(3)轉(zhuǎn)義字符是C程序中表示字符的一種特殊形式,它以反斜杠“\”作為標志符號,后面跟一個字符(也可以是一個八進制或十六進制數(shù))。轉(zhuǎn)義字符具有特定的含義,不同于字符原有的意義,如轉(zhuǎn)義字符'\0'表示字符串結(jié)束。常用轉(zhuǎn)義字符如表所示。轉(zhuǎn)義字符說

明轉(zhuǎn)義字符說

明\n回車換行\(zhòng)'單引號符'\b退格\"雙引號符"\r回車\a鳴鈴\t水平制表\f走紙換頁\v垂直制表\ddd1~3位八進制數(shù)所代表的字符\\反斜線符\\xhh1~2位十六進制數(shù)所代表的字符基本數(shù)據(jù)類型

三任務(wù)1

計算三角形的面積2)字符型變量字符型變量用來存儲單個字符,類型說明符是char。字符型變量定義的格式和書寫規(guī)則都與整型變量相同。例如:charc1,c2; /*定義字符型變量c1和c2*/c1='a'; /*將’a’賦值給c1*/c2='b'; /*將’b’賦值給c2*/基本數(shù)據(jù)類型

三任務(wù)1

計算三角形的面積4.數(shù)據(jù)類型轉(zhuǎn)換在C程序中,不同類型的數(shù)據(jù)可以混合運算,但在運算之前應(yīng)先轉(zhuǎn)換成同一類型。數(shù)據(jù)類型的轉(zhuǎn)換有自動類型轉(zhuǎn)換和強制類型轉(zhuǎn)換兩種方式。1)自動類型轉(zhuǎn)換自動類型轉(zhuǎn)換是由編譯系統(tǒng)自動進行的,不需要人為干預(yù)。自動類型轉(zhuǎn)換要遵循以下3個基本規(guī)則。(1)若參與運算的變量類型不同,須先轉(zhuǎn)換成同一類型(自動轉(zhuǎn)換),然后進行運算。(2)“低級向高級轉(zhuǎn)換”原則。如果運算中有幾種不同類型的操作數(shù),則統(tǒng)一轉(zhuǎn)換為最高級的數(shù)據(jù)類型后再進行運算。數(shù)據(jù)類型的轉(zhuǎn)換方向如圖所示?;緮?shù)據(jù)類型

三任務(wù)1

計算三角形的面積4.數(shù)據(jù)類型轉(zhuǎn)換在C程序中,不同類型的數(shù)據(jù)可以混合運算,但在運算之前應(yīng)先轉(zhuǎn)換成同一類型。數(shù)據(jù)類型的轉(zhuǎn)換有自動類型轉(zhuǎn)換和強制類型轉(zhuǎn)換兩種方式。1)自動類型轉(zhuǎn)換自動類型轉(zhuǎn)換是由編譯系統(tǒng)自動進行的,不需要人為干預(yù)。自動類型轉(zhuǎn)換要遵循以下3個基本規(guī)則。(3)賦值運算兩邊的數(shù)據(jù)類型不同時,賦值號右邊數(shù)據(jù)的類型將會轉(zhuǎn)換為左邊數(shù)據(jù)的類型?;緮?shù)據(jù)類型

三任務(wù)1

計算三角形的面積4.數(shù)據(jù)類型轉(zhuǎn)換【例3-1-4】

數(shù)據(jù)類型轉(zhuǎn)換的應(yīng)用。#include<stdio.h>intmain(){ inta,x; /*定義整型變量a和x*/ floatb; /*定義單精度型變量b*/ doublec,y; /*定義雙精度型變量c和y*/ a=1; /*將1賦值給a*/ b=2.1; /*將2.1賦值給b*/ c=3.2; /*將3.2賦值給c*/ x=a+b+c; /*將a、b、c的和賦值給x*/y=a+b+c; /*將a、b、c的和賦值給y*/ printf("x=%d,y=%f",x,y); /*輸出整型變量x和單精度型變量y*/ return0;}基本數(shù)據(jù)類型

三任務(wù)1

計算三角形的面積4.數(shù)據(jù)類型轉(zhuǎn)換【例3-1-4】

數(shù)據(jù)類型轉(zhuǎn)換的應(yīng)用?!具\行結(jié)果】

程序運行結(jié)果如圖所示?!境绦蛘f明】

計算a+b+c時,先將變量a和變量b都轉(zhuǎn)換成double型,然后計算,所以結(jié)果為double型。但賦值時,x為int型,故會將計算結(jié)果轉(zhuǎn)換成int型賦值給x,x的值為6?;緮?shù)據(jù)類型

三任務(wù)1

計算三角形的面積2)強制類型轉(zhuǎn)換強制類型轉(zhuǎn)換也稱顯示類型轉(zhuǎn)換,作用是將表達式的結(jié)果強制轉(zhuǎn)換成類型標識符所指定的數(shù)據(jù)類型,運算格式為(類型標識符)(表達式)類型標識符和表達式都應(yīng)用圓括號括起來(單個操作數(shù)時,表達式的圓括號可以省略)。例如:(double)a /*將a轉(zhuǎn)換成double類型*/(int)(a+b) /*將a+b的值轉(zhuǎn)換成整型*/(int)a+b /*將a轉(zhuǎn)換成整型,然后與b相加*/運算符和表達式

四任務(wù)1

計算三角形的面積1.算術(shù)運算符和算術(shù)表達式算術(shù)運算符用于各類數(shù)值運算。在C程序中,基本算術(shù)運算符有5種,即+、?、*、/、%(模運算);正負號運算符有2種,即+(正號)和?(負號);自增、自減運算符有2種,即++(自加)和??(自減)。帶有算術(shù)運算符的表達式稱為算術(shù)表達式?;舅阈g(shù)運算符是雙目運算符,即要求有兩個運算量,如x+y、x?y、x*y、x/y、x%y等,其優(yōu)先級和數(shù)學(xué)中一樣。運算符和表達式

四任務(wù)1

計算三角形的面積1.算術(shù)運算符和算術(shù)表達式自增和自減運算符是在程序設(shè)計中使用頻率較高的兩個運算符,它們的作用是將操作數(shù)的值增1(或減1)后,重新寫回該操作數(shù)所在的存儲單元。自增和自減運算符有前置和后置兩種使用形式。當某一運算只包含自增或自減操作時,自增或自減運算符的前置和后置形式的作用相同。例如,如果變量i的值為3,則執(zhí)行i++與++i的結(jié)果相同,運算后i的值均為4。運算符和表達式

四任務(wù)1

計算三角形的面積1.算術(shù)運算符和算術(shù)表達式但是,當自增、自減運算的結(jié)果被作為操作數(shù)參與其他操作時,前置與后置的情況就有所區(qū)別了。例如,設(shè)運算前i=3,則以下4個表達式的運算結(jié)果如表所示。表達式j(luò)的運算結(jié)果i的運算結(jié)果說明j=++i44先加1,后賦值j=i++34先賦值,后加1j=??i22先減1,后賦值j=i??32先賦值,后減1運算符和表達式

四任務(wù)1

計算三角形的面積2.賦值運算符和賦值表達式C程序中,賦值也是一種運算,運算符為“=”,它的作用是將一個表達式的值賦給一個變量,如x=4。需要注意的是,賦值運算符的左邊必須是一個變量。賦值運算符的優(yōu)先級低于算術(shù)運算符,結(jié)合方向是從右向左。例如,表達式x=3*4等價于x=(3*4),表達式x=y=z等價于x=(y=z)。運算符和表達式

四任務(wù)1

計算三角形的面積2.賦值運算符和賦值表達式大多數(shù)雙目運算符都可以和賦值運算符“=”結(jié)合起來,構(gòu)成一個復(fù)合的賦值運算符,如+=、?=、*=、/=、%=等。例如:x+=10; /*等價于x=x+10;*/y?=10; /*等價于y=y?10;*/z*=10; /*等價于z=z*10;*/m/=10; /*等價于m=m/10;*/n%=10; /*等價于n=n%10;*/運算符和表達式

四任務(wù)1

計算三角形的面積2.賦值運算符和賦值表達式【例3-1-5】

賦值運算符的應(yīng)用。#include<stdio.h>intmain(){ inta=1,b=2,c=3,d=4;

/*變量初始化*/ a+=a; /*a=a+a*/ b-=c;

/*b=b-c*/ c*=d; /*c=c*d*/ d/=a; /*d=d/a*/ printf(“%d,%d,%d,%d\n”,a,b,c,d);

/*輸出變量的值*/ return0;}運算符和表達式

四任務(wù)1

計算三角形的面積2.賦值運算符和賦值表達式【例3-1-5】

賦值運算符的應(yīng)用?!具\行結(jié)果】

程序運行結(jié)果如圖所示。運算符和表達式

四任務(wù)1

計算三角形的面積3.位運算符和位表達式位運算是指進行二進制位的運算,如將一個存儲單元中的各二進制位左移或右移一位。位運算符包括按位與(&)、按位或(|)、按位異或(^)、取反(~)、左移(<<)和右移(>>)6個,其中取反運算是單目運算,其余是雙目運算,參與位運算的數(shù)據(jù)類型只能是整型或字符型。位運算符的功能如表所示。運算符功能描述&按位與運算符,對操作數(shù)中相應(yīng)的位進行與運算。如果相應(yīng)的位都是1,結(jié)果位就是1,否則就是0|按位或運算符,對操作數(shù)中相應(yīng)的位進行或運算。如果兩個對應(yīng)的位中有一個是1,結(jié)果位就是1;如果兩個位都是0,結(jié)果就是0^按位異或運算符,對操作數(shù)中相應(yīng)的位進行異或運算。如果相應(yīng)的位不相同,結(jié)果位就是1;如果相應(yīng)的位相同,結(jié)果位就是0~按位取反運算符,用來對操作數(shù)中的位取反,即1變成0,0變成1,是一個單目運算符>>和<<移位運算符,用來將一個數(shù)的各二進制位全部右移或左移若干位運算符和表達式

四任務(wù)1

計算三角形的面積3.位運算符和位表達式左移運算符(<<)。左移運算用來將一個數(shù)的二進制位全部左移若干位,高位左移溢出后舍棄,右端低位補0。例如,a=a<<2,表示將a的二進制數(shù)左移2位,右端補0。若a=3,即二進制數(shù)00000011,左移2位得000001100,結(jié)果為十進制數(shù)12。右移運算符(>>)。右移運算用來將一個數(shù)的二進制位全部右移若干位,低位右移舍棄,對無符號數(shù),高位補0。例如,若a為無符號數(shù),執(zhí)行a=a>>2,表示將a的二進制數(shù)右移2位,左端補0。若a=3,即二進制數(shù)00000011,右移2位得00000000,結(jié)果為十進制數(shù)0。對于有符號數(shù),在右移時,符號位將一同移動,當為正數(shù)時,最高位補0;而為負數(shù)時,符號位為1,最高位是補0或是補1取決于編譯系統(tǒng),VisualC++規(guī)定為補1。運算符和表達式

四任務(wù)1

計算三角形的面積【例3-1-6】

位運算符的應(yīng)用。#include<stdio.h>intmain(){ inta=10,b=5; /*變量初始化*/ intc,d,e,f,g,h; c=a&b; /*按位與的值賦給c*/ d=a|b; /*按位或的值賦給d*/ e=a^b; /*按位異或的值賦給e*/ f=~a; /*a按位取反后的值賦給f*/ g=a<<1; /*a左移1位后的值賦給g*/ h=a>>1; /*a右移1位后的值賦給h*/ printf("%d,%d,%d,%d,%d,%d,%d,%d\n",a,b,c,d,e,f,g,h); return0;}運算符和表達式

四任務(wù)1

計算三角形的面積【例3-1-6】

位運算

溫馨提示

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

評論

0/150

提交評論