C語(yǔ)言程序設(shè)計(jì)資料課件_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)資料課件_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)資料課件_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)資料課件_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)資料課件_第5頁(yè)
已閱讀5頁(yè),還剩712頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Chap1引言1.1一個(gè)C語(yǔ)言程序1.2程序與程序設(shè)計(jì)語(yǔ)言1.3C語(yǔ)言的發(fā)展歷史與特點(diǎn)1.4實(shí)現(xiàn)問(wèn)題求解的過(guò)程1.1一個(gè)C語(yǔ)言程序例1-1求階乘問(wèn)題。輸入一個(gè)正整數(shù)n,輸出n!。#include<stdio.h>/*編譯預(yù)處理命令*/intmain(void)/*主函數(shù)*/{

intn; /*變量定義*/

intfactorial(intn);/*函數(shù)聲明*/

scanf("%d",&n);/*輸入一個(gè)整數(shù)*/

printf(“%d\n”,factorial(n));/*調(diào)用函數(shù)計(jì)算階乘*/

return0;}

輸入4輸出24C程序由函數(shù)組成有且只有一個(gè)主函數(shù)main

1.1一個(gè)C語(yǔ)言程序

intfactorial(intn) /*定義計(jì)算n!的函數(shù)*/{

inti,fact=1;

for(i=1;i<=n;i++)/*循環(huán)*/

fact=fact*i;returnfact;}輸入4輸出24C程序由函數(shù)組成有且只有一個(gè)主函數(shù)main

1.2程序與程序設(shè)計(jì)語(yǔ)言程序人們?yōu)榻鉀Q某種問(wèn)題用計(jì)算機(jī)可以識(shí)別的代碼編排的一系列加工步驟。程序的執(zhí)行過(guò)程實(shí)際上是對(duì)程序所表達(dá)的數(shù)據(jù)進(jìn)行處理的過(guò)程。程序設(shè)計(jì)語(yǔ)言提供了一種表達(dá)數(shù)據(jù)與處理數(shù)據(jù)的功能要求程序員按照語(yǔ)言的規(guī)范編程1.2程序與程序設(shè)計(jì)語(yǔ)言程序與指令程序設(shè)計(jì)語(yǔ)言的功能程序設(shè)計(jì)語(yǔ)言的語(yǔ)法程序的編譯與編程環(huán)境程序與指令指令:計(jì)算機(jī)的一個(gè)最基本的功能如實(shí)現(xiàn)一次加法運(yùn)算或?qū)崿F(xiàn)一次大小的判別計(jì)算機(jī)的指令系統(tǒng):計(jì)算機(jī)所能實(shí)現(xiàn)的指令的集合程序:一系列計(jì)算機(jī)指令的有序組合程序與指令例1-2編寫(xiě)程序,分別求和與乘積虛擬的計(jì)算機(jī)指令系統(tǒng)(7條指令)指令1:InputX將當(dāng)前輸入數(shù)據(jù)存儲(chǔ)到內(nèi)存的X單元指令2:OutputX將內(nèi)存X單元的數(shù)據(jù)輸出。指令3:AddXYZ將內(nèi)存X單元的數(shù)據(jù)與Y單元的數(shù)據(jù)相加并將結(jié)果存儲(chǔ)到Z單元。程序與指令指令4:SubXYZ將內(nèi)存X單元的數(shù)據(jù)與Y單元的數(shù)據(jù)相減并將結(jié)果存儲(chǔ)到Z單元。指令5:BranchEqXYP比較X與Y,若相等則程序跳轉(zhuǎn)到P處執(zhí)行,否則繼續(xù)執(zhí)行下一條指令。指令6:JumpP程序跳轉(zhuǎn)到P處執(zhí)行。指令7:SetXY將內(nèi)存Y單元的值設(shè)為X。程序與指令輸入輸入3個(gè)數(shù)A,B和C,求A+B+C的結(jié)果InputA;輸入第1個(gè)數(shù)據(jù)到存儲(chǔ)單元A中InputB;輸入第2個(gè)數(shù)據(jù)到存儲(chǔ)單元B中InputC;輸入第3個(gè)數(shù)據(jù)到存儲(chǔ)單元C中AddABD;將A、B相加并將結(jié)果存在D中AddCDD;將C、D相加并將結(jié)果存在D中OutputD;輸出D的內(nèi)容程序與指令輸入2個(gè)數(shù)A和B,求A*B的結(jié)果1.InputA;輸入第1個(gè)數(shù)據(jù)到存儲(chǔ)單元A中2.InputB;輸入第2個(gè)數(shù)據(jù)到存儲(chǔ)單元B中3.Set0X;將X設(shè)為0,此處X用以統(tǒng)計(jì)A累加的次數(shù)4.Set0Z;將Z設(shè)為0,此處Z用以存放A*B的結(jié)果5.BranchEqXB9;判別X與B是否相等;若相等說(shuō)明A已累加了B次,程序跳轉(zhuǎn)到第9條指令,輸出結(jié)果6.AddZAZ;Z=Z+A7.Add1XX;X=X+18.Jump5;程序跳轉(zhuǎn)到第5條指令,繼續(xù)循環(huán)執(zhí)行第6條、7條指令9.OutputZ;

輸出Z的值,該值等于A*B程序設(shè)計(jì)語(yǔ)言的功能數(shù)據(jù)表達(dá):表達(dá)所要處理的數(shù)據(jù)流程控制:表達(dá)數(shù)據(jù)處理的流程數(shù)據(jù)表達(dá)數(shù)據(jù)表達(dá):一般將數(shù)據(jù)抽象為若干類型數(shù)據(jù)類型:對(duì)某些具有共同特點(diǎn)的數(shù)據(jù)集合的總稱代表的數(shù)據(jù)(數(shù)據(jù)類型的定義域)在這些數(shù)據(jù)上做些什么(即操作或稱運(yùn)算)例如:整數(shù)類型包含的數(shù)據(jù):{…,-2,-1,0,1,2,…}作用在整數(shù)上的運(yùn)算:+、-、*、/等數(shù)據(jù)表達(dá)C語(yǔ)言提供的數(shù)據(jù)類型基本數(shù)據(jù)類型:程序設(shè)計(jì)語(yǔ)言事先定義好,供程序員直接使用,如整型、實(shí)型(浮點(diǎn)型)、字符型等。構(gòu)造類型:由程序員構(gòu)造,如數(shù)組、結(jié)構(gòu)、文件、指針等。各種數(shù)據(jù)類型的常量與變量形式常量(常數(shù))與變量

流程控制結(jié)構(gòu)化程序設(shè)計(jì)方法將復(fù)雜程序劃分為若干個(gè)相互獨(dú)立的模塊模塊:一條語(yǔ)句(Statement)、一段程序或一個(gè)函數(shù)(子程序)等單入口、單出口流程控制任何程序都可以將模塊通過(guò)3種基本的控制結(jié)構(gòu)進(jìn)行組合來(lái)實(shí)現(xiàn)語(yǔ)句級(jí)控制:3種基本的控制結(jié)構(gòu)順序控制結(jié)構(gòu):自然順序執(zhí)行分支控制結(jié)構(gòu)(選擇結(jié)構(gòu)):根據(jù)不同的條件來(lái)選擇所要執(zhí)行的模塊循環(huán)控制結(jié)構(gòu):重復(fù)執(zhí)行某個(gè)模塊

單位級(jí)控制:函數(shù)的定義與調(diào)用處理復(fù)雜問(wèn)題時(shí),將程序分為若干個(gè)相對(duì)獨(dú)立的子程序(函數(shù))三種基本控制結(jié)構(gòu)AB順序結(jié)構(gòu)程序塊A程序塊B示例:已知三角形的底和高,求其面積。輸入底和高計(jì)算面積輸出結(jié)果三種基本控制結(jié)構(gòu)(續(xù))選擇結(jié)構(gòu)PBAP成立不成立程序塊A程序塊B成立不成立示例:求ax2+bx+c=0的兩個(gè)根示例:求AX2+BX+C=0的兩個(gè)根解題步驟:1:輸入A,B,C的值;2:計(jì)算B2-4*A*CD3:判斷D的值,如果D≥0,則X1=(-B+sqrt(D))/(2*A);X2=(-B-sqrt(D))/(2*A)

否則,X1=-B/(2*A)+sqrt(-D)/(2*A)i;X2=-B/(2*A)-sqrt(-D)/(2*A)i4:輸出結(jié)果。三種基本控制結(jié)構(gòu)(續(xù))多分支選擇結(jié)構(gòu)IAnA2A1…………三種基本控制結(jié)構(gòu)(續(xù))循環(huán)結(jié)構(gòu)PA當(dāng)P成立時(shí)執(zhí)行程序塊A不成立成立示例:求6!定義變量i=2,s=1當(dāng)i<=6時(shí)s=s*ii=i+1輸出s的值三種基本控制結(jié)構(gòu)(續(xù))循環(huán)結(jié)構(gòu)(另一種形式)PA當(dāng)P成立時(shí)執(zhí)行程序塊A不成立成立程序設(shè)計(jì)語(yǔ)言的語(yǔ)法用程序設(shè)計(jì)語(yǔ)言所寫(xiě)的程序必須符合相應(yīng)語(yǔ)言的語(yǔ)法源程序(源代碼)是一個(gè)字符序列,這些字符序列按順序組成了一系列“單詞”,“單詞”的組合就形成了語(yǔ)言有意義的語(yǔ)法單位,一些簡(jiǎn)單語(yǔ)法單位的組合又形成了更復(fù)雜的語(yǔ)法單位,最后一系列語(yǔ)法單位組合成程序。語(yǔ)法C語(yǔ)言的主要“單詞”(1)標(biāo)識(shí)符:C語(yǔ)言的標(biāo)識(shí)符規(guī)定由字母、數(shù)字以及下劃線組成,且第一個(gè)字符必須是字母或下劃線。(2)保留字(關(guān)鍵字):它們是C語(yǔ)言規(guī)定的、賦予它們以特定含義、有專門(mén)用途的標(biāo)識(shí)符。#include<stdio.h>

intmain()

{inta,b,max;

scanf("%d,%d",&a,&b);

if

(a>b)max=a;elsemax=b;printf("max=%d",max);

return0;

}程序設(shè)計(jì)語(yǔ)言的語(yǔ)法(3)自定義標(biāo)識(shí)符:包括在程序中定義的變量名、數(shù)據(jù)類型名、函數(shù)名以及符號(hào)常量名。有意義的英文單詞(4)常量:常量是有數(shù)據(jù)類型的,如,123、12.34(5)運(yùn)算符。代表對(duì)各種數(shù)據(jù)類型實(shí)際數(shù)據(jù)對(duì)象的運(yùn)算。如,+(加)、-(減)、*(乘)、/(除)、%(求余)、>(大于)程序設(shè)計(jì)語(yǔ)言的語(yǔ)法C語(yǔ)言的主要語(yǔ)法單位(1)表達(dá)式:運(yùn)算符與運(yùn)算對(duì)象組合就形成了表達(dá)試。如,2+3*4(2)變量定義:變量也有數(shù)據(jù)類型,所以在定義變量時(shí)要說(shuō)明相應(yīng)變量的類型。如:inti;(3)語(yǔ)句:語(yǔ)句是程序最基本的執(zhí)行單位,程序的功能就是通過(guò)對(duì)一系列語(yǔ)句的執(zhí)行來(lái)實(shí)現(xiàn)的。(4)函數(shù)定義與調(diào)用

程序設(shè)計(jì)語(yǔ)言的語(yǔ)法其中,(3)語(yǔ)句:表達(dá)式語(yǔ)句:表達(dá)式加分號(hào)“;”分支語(yǔ)句:實(shí)現(xiàn)分支控制過(guò)程if(a>b)x=a;elsex=b;循環(huán)語(yǔ)句:實(shí)現(xiàn)循環(huán)控制的過(guò)程sum=0; /*初始化sum和i*/i=1;while(i<=100){/*while循環(huán)語(yǔ)句*/sum=sum+i;i=i+1;}復(fù)合語(yǔ)句:用一對(duì)“{}”,將若干語(yǔ)句順序組合在一起就形成了一個(gè)程序段。程序設(shè)計(jì)語(yǔ)言的語(yǔ)法其中,(4)函數(shù)定義與調(diào)用函數(shù)是完成特定任務(wù)的獨(dú)立模塊,函數(shù)的使用最主要涉及到函數(shù)的定義與調(diào)用。輸入輸出:C語(yǔ)言沒(méi)有輸入輸出語(yǔ)句,用庫(kù)函數(shù)printf、scanf等實(shí)現(xiàn)。程序的編譯與編程環(huán)境程序的編譯

編譯器程序

計(jì)算機(jī)直接能理解的指令序列編譯器:對(duì)源程序進(jìn)行詞法分析、語(yǔ)法與語(yǔ)義分析,生成可執(zhí)行的代碼。直接指出程序中的語(yǔ)法錯(cuò)誤程序的編譯與編程環(huán)境編程環(huán)境:包括編輯程序(Edit)、編譯(Compile)、調(diào)試(Debug)等過(guò)程。

掌握程序設(shè)計(jì)語(yǔ)言:根據(jù)語(yǔ)言的語(yǔ)法,用語(yǔ)言表達(dá)數(shù)據(jù)、實(shí)現(xiàn)程序的控制,并會(huì)使用編程環(huán)境。C語(yǔ)言上機(jī)過(guò)程源程序

test.cpptest.obj

可執(zhí)行代碼

test.exe編譯連接運(yùn)行1.3C語(yǔ)言的發(fā)展歷史與特點(diǎn)歷史1972年:貝爾實(shí)驗(yàn)室的DennisRitchie在B語(yǔ)言的基礎(chǔ)上設(shè)計(jì)并實(shí)現(xiàn)了C語(yǔ)言。1978年:B.W.Kernighan和D.Ritchie(簡(jiǎn)稱K&R)合著的《TheCProgrammingLanguage》是各種C語(yǔ)言版本的基礎(chǔ),稱之為舊標(biāo)準(zhǔn)C語(yǔ)言。1983年:美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)(ANSI)制定了新的C語(yǔ)言標(biāo)準(zhǔn),稱ANSIC。C語(yǔ)言的特點(diǎn)1.C語(yǔ)言是一種結(jié)構(gòu)化語(yǔ)言2.C語(yǔ)言語(yǔ)句簡(jiǎn)潔、緊湊,使用方便、靈活32個(gè)關(guān)鍵字,9種控制語(yǔ)句,程序書(shū)寫(xiě)形式自由。3.C語(yǔ)言程序易于移植C語(yǔ)言將與硬件有關(guān)的因素從語(yǔ)言主體中分離出來(lái),通過(guò)庫(kù)函數(shù)或其他實(shí)用程序?qū)崿F(xiàn)它們。4.C語(yǔ)言有強(qiáng)大的處理能力C語(yǔ)言的特點(diǎn)5.?dāng)?shù)據(jù)類型檢查不嚴(yán)格,表達(dá)式出現(xiàn)二義性,不具備數(shù)據(jù)越界自動(dòng)檢查功能,運(yùn)算符的優(yōu)先級(jí)與結(jié)合性對(duì)初學(xué)者難于掌握。6.生成的目標(biāo)代碼質(zhì)量高,運(yùn)行效率高C語(yǔ)言中大小寫(xiě)字母代表不同含義1.4實(shí)現(xiàn)問(wèn)題求解的過(guò)程問(wèn)題:求1~100間所有偶數(shù)的和。1.問(wèn)題分析與算法設(shè)計(jì)求在一定范圍內(nèi)(1~100)、滿足一定條件(偶數(shù))的若干整數(shù)的和,求累加和。1.4實(shí)現(xiàn)問(wèn)題求解的過(guò)程思路:設(shè)置一個(gè)變量(sum),其初值為0,然后在1~100的數(shù)中(i)尋找偶數(shù),將它們一個(gè)一個(gè)累加到sum中。一步累加:sum=sum+i;重復(fù)累加,用循環(huán)語(yǔ)句實(shí)現(xiàn),在循環(huán)過(guò)程中:(1)判別i是不是偶數(shù):用分支控制語(yǔ)句來(lái)實(shí)現(xiàn)。(2)對(duì)循環(huán)次數(shù)進(jìn)行控制:通過(guò)i值的變化問(wèn)題分析與算法設(shè)計(jì)思路

確定算法算法:一組明確的解決問(wèn)題的步驟,它產(chǎn)生結(jié)果并可在有限的時(shí)間內(nèi)終止。算法的描述:自然語(yǔ)言偽代碼流程圖:算法的圖形表示法sum=0i=1i<=100i是偶數(shù)?sum=sum+ii=i+1輸出sum真真假假實(shí)現(xiàn)問(wèn)題求解的過(guò)程2.編輯程序生成程序的源文件,C語(yǔ)言源文件的后綴為.c/.cpp#include<stdio.h>intmain(void){ inti,sum=0;

for(i=1;i<=100;i++)if(i%2==0)sum=sum+i;printf("%d",sum);return0;}

實(shí)現(xiàn)問(wèn)題求解的過(guò)程3.程序編譯連接編輯程序后,用該語(yǔ)言的編譯程序?qū)ζ溥M(jìn)行編譯,以生成二進(jìn)制代碼表示的目標(biāo)程序(.obj),與編程環(huán)境提供的庫(kù)函數(shù)進(jìn)行連接(Link)形成可執(zhí)行的程序(.exe)。編譯程序指出語(yǔ)法錯(cuò)誤

語(yǔ)法錯(cuò)誤VS邏輯錯(cuò)誤實(shí)現(xiàn)問(wèn)題求解的過(guò)程4.運(yùn)行與調(diào)試經(jīng)過(guò)編輯、編譯、連接,生成執(zhí)行文件后,就可以在編程環(huán)境或操作系統(tǒng)環(huán)境中運(yùn)行該程序。如果程序運(yùn)行所產(chǎn)生的結(jié)果不是你想要的結(jié)果,這是程序的語(yǔ)義錯(cuò)誤(邏輯錯(cuò)誤)。

調(diào)試:在程序中查找錯(cuò)誤并修改錯(cuò)誤的過(guò)程。調(diào)試的方法設(shè)置斷點(diǎn)單步跟蹤調(diào)試是一個(gè)需要耐心和經(jīng)驗(yàn)的工作,也是程序設(shè)計(jì)最基本的技能之一。開(kāi)始結(jié)果語(yǔ)法錯(cuò)誤源程序.c/.cpp目標(biāo)程序.obj可執(zhí)行程序.exe編輯編譯連接運(yùn)行連接錯(cuò)誤運(yùn)行錯(cuò)誤C語(yǔ)言程序的調(diào)試、運(yùn)行步驟算法練習(xí)補(bǔ)充算法:解決問(wèn)題的方法和步驟。示例1:已知三角形的底邊和高的值,求其面積。建立數(shù)學(xué)模型S=A*H/2后,使用如下算法:鍵盤(pán)輸入三角形的底和高的值(即:A和H的值);計(jì)算A*H/2S;輸出面積S的值。

用適當(dāng)工具描述算法變量定義輸入底和高計(jì)算面積輸出結(jié)果用自然語(yǔ)言描述算法用N-S圖描述算法用計(jì)算機(jī)語(yǔ)言描述的算法——程序課程的重點(diǎn):如何用C語(yǔ)言描述算法?示例2:用公式y(tǒng)=x2-2x+3計(jì)算x=0,1,2,3,……100所對(duì)應(yīng)的y值,使用如下算法:1)置x為0;2)置x的上界n=100;3)當(dāng)x≤n時(shí),重復(fù)執(zhí)行3.1,3.2,3.3步,否則,算法停止。

(3.1)用公式計(jì)算y值;

(3.2)打印一組x和y的值;

(3.3)x值增加1。適當(dāng)工具描述算法(續(xù))定義變量X,n,YX=0,n=100當(dāng)X<=n時(shí)Y=X*X-2*X+3打印X,Y的值X=X+1#include<stdio.h>/*頭文件*/voidmain()/*主函數(shù)*/{intx,y,n;/*定義x,y,n為整型*/x=0;/*置x初值為0/n=100;/*x終值為100*/while(x<=n)/*當(dāng)x值小于100時(shí)執(zhí)行循環(huán)*/{y=x*x–2*x+3;/*計(jì)算y值*/printf("x=%d,y=%d\n",x,y);/*打印一組x,y值*/x++;/*x值增加1*/}}用C語(yǔ)言描述(編程,測(cè)試及調(diào)試)算法舉例【例1-1】某同學(xué)進(jìn)行一次物理實(shí)驗(yàn),測(cè)量得到30個(gè)數(shù)據(jù),求這30個(gè)數(shù)據(jù)的平均值。定義變量X,J,SUM,AVSUM=0,J=1輸入X值SUM=SUM+XJ=J+1當(dāng)J<=30時(shí)AV=SUM/30輸出平均值A(chǔ)V算法練習(xí):說(shuō)明:X:接受數(shù)據(jù)J:計(jì)數(shù),初值為1SUM:累加和,初值為0AV:平均值【例1-2】有30名同學(xué)選修了程序設(shè)計(jì)這門(mén)課程,請(qǐng)描述算法統(tǒng)計(jì)參加考試學(xué)生中及格和不及格的人數(shù)。說(shuō)明:J:對(duì)學(xué)生計(jì)數(shù),初值為1X:接受成績(jī)N1:統(tǒng)計(jì)及格的人數(shù),初值0N2:統(tǒng)計(jì)不及格人數(shù),初值0定義變量J,X,N1,N2J=1,N1=0,N2=0輸入成績(jī)X值X>=60是否N1=N1+1N2=N2+1J=J+1輸出N1,N2當(dāng)J<=30時(shí)算法練習(xí):算法舉例思考:1:已知n是小于等于8的正整數(shù),求n!。2:已知x是整數(shù),求3:對(duì)任意一個(gè)不小于3的整數(shù),判斷其是否是素?cái)?shù)。參考答案:

1:已知n是小于等于8的正整數(shù),求n!。定義變量n,p,ii=1,p=1輸入n值當(dāng)i<=n時(shí)P=p*II=i+1輸出p值2:已知x是整數(shù),求

定義變量s,x,ii=1,s=0輸入x值當(dāng)i<=100時(shí)s=s+xi=i+1輸出s值3:對(duì)任意一個(gè)不小于3的整數(shù),判斷其是否是素?cái)?shù)。

定義變量x,i,f輸入x值

i=2,f=1當(dāng)i<=x-1且f==1時(shí)

x%i==0

x是素?cái)?shù)是否

f=0

i=i+1

f==1是否

x不是素?cái)?shù)

實(shí)際問(wèn)題(1)求任意兩個(gè)正整數(shù)中的最大公因數(shù)示例:32,12步驟1:任意輸入兩個(gè)數(shù)放入p和q中步驟2:如果p<q,交換p和q

步驟3:求出p/q的余數(shù)放入r中步驟4:如果r=0,則執(zhí)行步驟8,否則執(zhí)行下一步步驟5:令p=q,q=r

步驟6:計(jì)算p和q的余數(shù)r

步驟7:執(zhí)行步驟4

步驟8:q就是所求的結(jié)果,輸出結(jié)果q自然語(yǔ)言算法如下:

古希臘數(shù)學(xué)家歐幾里德給出了一個(gè)著名的算法如下:步驟1:任意輸入兩個(gè)數(shù)放入p和q中步驟2:如果p<q,交換p和q步驟3:求出p/q的余數(shù)放入r中步驟4:如果r=0,則執(zhí)行步驟8,否則,執(zhí)行下一步步驟5:令p=q,q=r步驟6:計(jì)算p和q的余數(shù)r步驟7:執(zhí)行步驟4步驟8:q就是所求的結(jié)果,輸出結(jié)果q開(kāi)始鍵盤(pán)輸入p和qp>qr=p;p=q;q=r成立顯示輸出q結(jié)束r=p除以q的余數(shù)r=0p=q;q=rr=p除以q的余數(shù)成立不成立不成立不成立偽代碼描述的算法如下InputP,QIf(P<Q)thenR=PP=QQ=REndifR=PmodQWhile(R<>0){P=QQ=RR=PmodQ}OutputQ定義變量p,q,r輸入p,q值

p>q當(dāng)r≠0時(shí)

F

p/q余數(shù)=>rq=>p

Tp除以q的余數(shù)=>rr=>qp與q互換打印最大公約數(shù)q用N-S圖描述的算法如下求最大公因數(shù)的C程序代碼#include<stdio.h>Voidmain(){intp,q,r;scanf(“%d,%d”,&p,&q);if(p<q){r=p;p=q;q=r;}r=p%q;while(r!=0){p=q;q=r;r=p%q;}prinntf(“(“%d,%d\n”,p,q);}求最大公因數(shù)的BASIC程序代碼

INPUT“輸入第一個(gè)正整數(shù):”P(pán)INPUT“輸入第二個(gè)正整數(shù):”QIFP<QTHENLETR=PLETP=QLETQ=RENDIFR=MOD(P,Q)DOWHILER<>0LETP=QLETQ=RRMOD(P,Q)LOOPPRINTQEND

實(shí)際問(wèn)題(2)張丘建《算經(jīng)》中提出“百雞問(wèn)題”:雞翁一值錢(qián)五,雞母一值錢(qián)三,雞雛三值錢(qián)一,百錢(qián)買(mǎi)百雞,問(wèn):雞翁、母、雛各幾何?(體會(huì)編程步驟)最終算法描述

cocks=0

當(dāng)cocks≤19時(shí)

{hens=0

當(dāng)hens≤33時(shí)

{chicks=100-cocks-hens

如果(5*cocks+3*hens+chicks/3==100)則輸出cocks、hens、chicks的值

hens加1

cocks加1

}調(diào)試運(yùn)行(測(cè)試程序)調(diào)試運(yùn)行又稱測(cè)試程序就是將編寫(xiě)的程序在計(jì)算機(jī)上運(yùn)行,以便檢驗(yàn)程序正確與否。任何程序員所編寫(xiě)的程序都有可能出現(xiàn)兩類錯(cuò)誤:語(yǔ)法錯(cuò)誤和邏輯錯(cuò)誤。語(yǔ)法錯(cuò)誤:一般指程序中不符合語(yǔ)言的語(yǔ)法,如缺少標(biāo)點(diǎn)符號(hào),名稱不符等等。邏輯錯(cuò)誤:一般指運(yùn)行程序所得到的結(jié)果與預(yù)期的結(jié)果不同。2.1在屏幕上顯示HelloWorld!例2-1在屏幕上顯示一個(gè)短句:HelloWorld!2.1在屏幕上顯示HelloWorld/*顯示“HelloWorld!”*/注釋文本

#include<stdio.h>編譯預(yù)處理命令,不加分號(hào)intmain(void)主函數(shù){

printf(“HelloWorld!\n”);語(yǔ)句結(jié)束

return0;}

輸出函數(shù)

換行符1.任何程序都有主函數(shù)2.程序由若干語(yǔ)句組成3.語(yǔ)句由;結(jié)束2.1在屏幕上顯示一些信息例2-2在屏幕上顯示:Programmingisfun!AndProgramminginCisevenmorefun!#include<stdio.h>編譯預(yù)處理命令intmain(void){printf("Programmingisfun!\n");printf("AndProgramminginCisevenmorefun!\n");return0;}2.2求華氏溫度100°F對(duì)應(yīng)的攝氏溫度攝氏溫度C=(5/9)(F-32)2.2.1程序解析2.2.2常量、變量和數(shù)據(jù)類型2.2.3算術(shù)運(yùn)算和賦值運(yùn)算2.2.4格式化輸出函數(shù)printf2.2.1程序解析例2-3求華氏溫度100°F對(duì)應(yīng)的攝氏溫度。攝氏溫度C=(5/9)(F-32)#include<stdio.h>intmain(void){intcelsius,fahr;變量定義

fahr=100;變量使用

celsius=5*(fahr-32)/9;printf("fahr=%d,celsius=%d\n",fahr,celsius);輸出結(jié)果

return0;}輸出:fahr=100,celsius=372.2.2常量、變量和數(shù)據(jù)類型intcelsius,fahr;celsius=5*(fahr-32)/9;數(shù)據(jù)常量:在程序運(yùn)行過(guò)程中,其值不能被改變變量:在程序運(yùn)行過(guò)程中,其值可以被改變數(shù)據(jù)類型常量:5和9是整型常量(整數(shù))變量:在定義時(shí)指定變量的定義變量定義的一般形式:類型名變量名表;例如:intcelsius,fahr;定義整型變量floatx;定義單精度浮點(diǎn)型變量doublearea,length;定義雙精度浮點(diǎn)型變量double型數(shù)據(jù)比f(wàn)loat精度高,取值范圍大變量名:小寫(xiě)字母;見(jiàn)名知義變量的定義定義變量時(shí)要指定變量名和數(shù)據(jù)類型類型名變量名表;intcelsius,fahr;floatx;doublearea,length;變量名代表內(nèi)存中的一個(gè)存儲(chǔ)單元存放該變量的值該存儲(chǔ)單元的大小由變量的數(shù)據(jù)類型決定C語(yǔ)言中的變量代表保存數(shù)據(jù)的存儲(chǔ)單元數(shù)學(xué)中的變量代表未知數(shù)x=x+1變量的定義與使用變量必須先定義,后使用。#include<stdio.h>intmain(void){intcelsius,fahr;

fahr=100;

celsius=5*(fahr-32)/9;printf("fahr=%d,celsius=%d\n",fahr,celsius);

return0;}一個(gè)變量名只能定義一次變量一般都定義在程序的頭上不能定義在程序的中間或后面應(yīng)該先賦值,后引用2.2.3算術(shù)運(yùn)算和賦值運(yùn)算fahr=100;celsius=5*(fahr-32)/9;1、算術(shù)運(yùn)算雙目算術(shù)運(yùn)算符:+-*/%算術(shù)表達(dá)式:用算術(shù)運(yùn)算符將運(yùn)算對(duì)象連接起來(lái)的符合C語(yǔ)言語(yǔ)法規(guī)則的式子數(shù)學(xué)式:(5/9)(F-32)C表達(dá)式:5*(fahr-32)/9或者:數(shù)學(xué)式:s(s-a)(s-b)(s-c)C表達(dá)式:?算術(shù)運(yùn)算雙目算術(shù)運(yùn)算符:+-*/%算術(shù)表達(dá)式:用算術(shù)運(yùn)算符將運(yùn)算對(duì)象連接起來(lái)的符合C語(yǔ)言語(yǔ)法規(guī)則的式子注意/整數(shù)除整數(shù),得整數(shù)如:1/2=0,9/4=2?5*(fahr-32)/9和5/9*(fahr-32)等價(jià)嗎%針對(duì)整型數(shù)據(jù)如:5%6=5,9%4=1,100%4=0雙目運(yùn)算符兩側(cè)操作數(shù)的類型要相同賦值運(yùn)算賦值運(yùn)算符=賦值表達(dá)式:用=

將一個(gè)變量和一個(gè)表達(dá)式連接起來(lái)的式子變量=表達(dá)式例如:fahr=100;celsius=5*(fahr-32)/9;計(jì)算賦值運(yùn)算符右側(cè)表達(dá)式的值將賦值運(yùn)算符右側(cè)表達(dá)式的值賦給左側(cè)的變量=的左邊必須是一個(gè)變量2.2.4格式化輸出函數(shù)printf數(shù)據(jù)輸出:格式化輸出函數(shù)printf

#include<stdio.h>printf("HelloWorld!\n");printf("fahr=%d,celsius=%d\n",fahr,celsius);printf(格式控制字符串,輸出參數(shù)1,…,輸出參數(shù)n);用雙引號(hào)括起來(lái),表示輸出的格式要輸出的數(shù)據(jù)printf-格式控制字符串printf("HelloWorld!\n");

printf("fahr=%d,celsius=%d\n",

fahr,celsius);printf("Hi\n",

fahr);格式控制字符串:普通字符:原樣輸出格式控制說(shuō)明:按指定的格式輸出數(shù)據(jù),%…與數(shù)據(jù)類型有關(guān)int型:%dfloatdouble型:%fprintf("fahr=%d,celsius=%d\n",fahr,celsius);輸出:fahr=100,celsius=372.3計(jì)算分段函數(shù)2.3.1程序解析2.3.2關(guān)系運(yùn)算2.3.3if-else語(yǔ)句2.3.4格式化輸入函數(shù)scanf2.3.5常用數(shù)學(xué)庫(kù)函數(shù)2.3.1程序解析例2-4分段計(jì)算水費(fèi)要解決的問(wèn)題:輸入計(jì)算分段函數(shù)輸出,并保留2位小數(shù)

求分段函數(shù)

#include<stdio.h>intmain(void){doublex,y;printf("Enterx(x>=0):\n");/*輸入提示*/

scanf("%lf",&x);/*調(diào)用scanf函數(shù)輸入數(shù)據(jù)*/

if(x<=15) /*if–else語(yǔ)句*/y=4*x/3;

else

y=2.5*x-10.5;printf("y=f(%f)=%.2f\n",x,y);return0;}Enterx(x>=0):9.5f(9.500000)=12.67Enterx(x>=0):15f(15.000000)=20.00數(shù)據(jù)必須輸入嗎?Enterx(x>=0):21.3f(21.300000)=42.752.3.2關(guān)系運(yùn)算x<=15比較x和15的大小比較的結(jié)果:真假當(dāng)x取值9.5時(shí),x<=15的結(jié)果是:?當(dāng)x取值21.3時(shí),x<=15的結(jié)果是:?

關(guān)系運(yùn)算—比較運(yùn)算,比較兩個(gè)操作數(shù)關(guān)系運(yùn)算符x<yx<=yx==yx>yx>=yx!=y關(guān)系表達(dá)式:用關(guān)系運(yùn)算符將2個(gè)表達(dá)式連接起來(lái)的式子。如:x<=1區(qū)分=

和==運(yùn)用關(guān)系表達(dá)式表示比較的數(shù)學(xué)式C關(guān)系表達(dá)式x≤10x≥10x≠10x=10x<=10x>=10x!=10x==10用關(guān)系表達(dá)式描述條件判斷x是否為負(fù)數(shù)x<0判斷x是否不為零x!=02.3.3if-else語(yǔ)句if(表達(dá)式)

語(yǔ)句1else

語(yǔ)句2if(x<=15)y=4*x/3;else

y=2.5*x-10.5;語(yǔ)句1表達(dá)式語(yǔ)句2真假計(jì)算二分段函數(shù)if(表達(dá)式)

語(yǔ)句1else

語(yǔ)句2if(x!=0)

y=1/x;elsey=0;源程序#include<stdio.h>intmain(void){doublex,y;printf("Enterx:\n");scanf("%lf",&x);

if(x!=0)

y=1/x;elsey=0;printf("f(%.2f)=%.1f\n",x,y);

return0;}#include<stdio.h>/*例2-4*/intmain(void){doublex,y;printf("Enterx(x>=0):\n");scanf("%lf",&x);

if(x<=15)y=4*x/3;elsey=2.5*x-10.5;printf("f(%f)=%.2f\n",x,y);

return0;}運(yùn)行結(jié)果#include<stdio.h>intmain(void){doublex,y;printf("Enterx:\n");scanf("%lf",&x);

if(x!=0)

y=1/x;elsey=0;printf("f(%.2f)=%.1f\n",x,y);

return0;}inputx:2.5f(2.50)=0.4inputx:0f(0.00)=0.0軟件測(cè)試的基本思想軟件測(cè)試精心設(shè)計(jì)一批測(cè)試用例[輸入數(shù)據(jù),預(yù)期輸出結(jié)果],然后分別用這些測(cè)試用例運(yùn)行程序,看程序的實(shí)際運(yùn)行結(jié)果與預(yù)期輸出結(jié)果是否一致。inputx:2.5f(2.50)=0.4inputx:0f(0.00)=0.0if(x!=0)

y=1/x;elsey=0;if(x<=15)y=4*x/3;elsey=2.5*x-10.5;Enterx(x>=0):9.5f(9.500000)=12.67Enterx(x>=0):15f(15.000000)=20.00Enterx(x>=0):21.3f(21.300000)=42.752.3.4格式化輸入函數(shù)scanf數(shù)據(jù)輸入:格式化輸入函數(shù)scanf

#include<stdio.h>scanf("%lf",&x);scanf(格式控制字符串,輸入?yún)?shù)1,…,輸入?yún)?shù)n);用雙引號(hào)括起來(lái),表示輸入的格式變量地址scanf-格式控制字符串格式控制字符串:格式控制說(shuō)明:按指定的格式輸入數(shù)據(jù),%…與數(shù)據(jù)類型有關(guān)int型:%dfloat型:%fdouble型:%lf普通字符:原樣輸入例如:scanf("%lf",&x);輸入:9.5scanf("x=%lf",&x);輸入:x=9.5盡量不要出現(xiàn)普通字符改進(jìn)例2-3的程序例2-3求華氏溫度100°F對(duì)應(yīng)的攝氏溫度。攝氏溫度C=(5/9)(F-32)#include<stdio.h>intmain(void){intcelsius,fahr;

fahr=100;

celsius=5*(fahr-32)/9;printf("fahr=%d,celsius=%d\n",fahr,celsius);

return0;}scanf("%d",&fahr);printf(“Enterfahr:\n");Enterfahr:100fahr=100,celsius=372.3.5常用數(shù)學(xué)庫(kù)函數(shù)庫(kù)函數(shù)C語(yǔ)言處理系統(tǒng)提供事先編好的函數(shù),供用戶在編程時(shí)調(diào)用。scanf(),printf(),exp()在相應(yīng)的系統(tǒng)文件(頭文件)中定義一些必需的信息。#include命令用戶調(diào)用庫(kù)函數(shù)時(shí),將相應(yīng)的頭文件包含到源程序中。例如調(diào)用scanf,printf,需要#include<stdio.h>調(diào)用sqrt,需要#include<math.h>常用數(shù)學(xué)庫(kù)函數(shù)平方根函數(shù)sqrt(x)

絕對(duì)值函數(shù)fabs(x)fabs(-3.56)的值為3.56冪函數(shù)pow(x,n):xnpow(1.1,2)的值為1.21(即1.12)指數(shù)函數(shù)exp(x):exexp(2.3)的值為e2.3以e為底的對(duì)數(shù)函數(shù)log(x):lnxlog(123.45)的值為4.815836以10為底的對(duì)數(shù)函數(shù)log10(x):log10xlog10(123.45)的值為2.091491。例2-5計(jì)算存款的本息輸入存款金額money、存期year和年利率rate,根據(jù)公式計(jì)算存款到期時(shí)的本息合計(jì)sum(稅前),輸出時(shí)保留2位小數(shù)。sum=money(1+rate)yearsum=money*pow((1+rate),year)例2-5程序#include<stdio.h>#include<math.h>intmain(void){intmoney,year;doublerate,sum;

printf(“Entermoney:");

scanf("%d",&money);

printf(“Enteryear:");scanf("%d",&year);

printf(“Enterrate:");scanf("%lf",&rate);sum=money*pow((1+rate),year);printf("sum=%.2f",sum);return0;}Entermoney:1000Enteryear:

3Enterrate:

0.025sum=1076.89scanf("%d%d%lf",&money,&year,&rate);調(diào)用scanf函數(shù)輸入多個(gè)數(shù)據(jù)scanf("%d%d%lf",&money,&year,&rate);輸入:100030.025scanf需要多個(gè)輸入?yún)?shù)和多個(gè)格式控制說(shuō)明輸入?yún)?shù)的類型、個(gè)數(shù)和位置要與格式控制說(shuō)明一一對(duì)應(yīng)?scanf("%d%lf%d",&money,&year,&rate);程序運(yùn)行時(shí),輸入的多個(gè)數(shù)據(jù)之間必須有間隔。scanf("%d%lf%d

",&money,&rate,&year);如何輸入?輸入?yún)?shù)、格式控制說(shuō)明、輸入數(shù)據(jù)2.4輸出華氏-攝氏溫度轉(zhuǎn)換表2.4.1程序解析2.4.2for語(yǔ)句2.4.3指定次數(shù)的循環(huán)程序設(shè)計(jì)2.4.1程序解析例2-6輸入2個(gè)整數(shù)lower和upper,輸出一張華氏-攝氏溫度轉(zhuǎn)換表,華氏溫度的取值范圍是[lower,upper],每次增加1°F。fahrcelsius30-1.131-0.6320.0330.6341.1351.72.4.1程序解析-溫度轉(zhuǎn)換表#include<stdio.h>intmain(void){intfahr,lower,upper;doublecelsius;printf("Enterlower:");scanf("%d",&lower);printf("Enterupper:");scanf("%d",&upper);printf("fahrcelsius\n");Enterlower:30Enterupper:

35fahrcelsius30-1.131-0.6320.0330.6341.1351.72.4.1程序解析-溫度轉(zhuǎn)換表for(fahr=lower;fahr<=upper;fahr++){celsius=(5.0/9.0)*(fahr-32);printf("%d%6.1f\n",fahr,celsius);}return0;}fahr=fahr+1Enterlower:30Enterupper:

35fahrcelsius30-1.131-0.6320.0330.6341.1351.7例2-8中for語(yǔ)句的流程for(fahr=lower;fahr<=upper;fahr++){celsius=(5.0/9.0)*(fahr-32);printf("%d%6.1f\n",fahr,celsius);}fahr=fahr+2輸出?Enterlower:30Enterupper:

35fahrcelsius30-1.131-0.6320.0330.6341.1351.7for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

循環(huán)體語(yǔ)句實(shí)現(xiàn)C語(yǔ)句的重復(fù)執(zhí)行2.4.2for語(yǔ)句-循環(huán)語(yǔ)句3個(gè)表達(dá)式、循環(huán)體語(yǔ)句!書(shū)寫(xiě)順序和執(zhí)行順序不同!表達(dá)式1只執(zhí)行一次循環(huán)(控制)變量:for語(yǔ)句中,通過(guò)改變或判斷某個(gè)變量的值來(lái)控制循環(huán)的執(zhí)行for

(fahr

=lower;

fahr

<=upper;

fahr

++){celsius=(5.0/9.0)*(fahr-32.0);printf("%d%6.1f\n",fahr,celsius);}for語(yǔ)句中的循環(huán)變量賦初值判斷其值改變其值for(fahr

=lower;

fahr

<=upper;

fahr

++){celsius=(5.0/9.0)*(fahr-32.0);printf("%d%6.1f\n",fahr,celsius);}表達(dá)式1:給循環(huán)變量賦初值,指定循環(huán)的起點(diǎn)。fahr=lower表達(dá)式2:給出循環(huán)的條件,決定循環(huán)的繼續(xù)或結(jié)束。fahr<=upper表達(dá)式3:設(shè)置循環(huán)的步長(zhǎng),改變循環(huán)變量的值,從而可改變表達(dá)式2的真假性。fahr++語(yǔ)句:被反復(fù)執(zhí)行的語(yǔ)句,一條語(yǔ)句。for語(yǔ)句的說(shuō)明for(fahr=lower;fahr<=upper;fahr++)

{celsius=(5.0/9.0)*(fahr-32.0);printf("%d%6.1f\n",fahr,celsius);}for(fahr=lower;fahr<=upper;fahr=fahr+1)celsius=(5.0/9.0)*(fahr-32.0); printf("%d%6.1f\n",fahr,celsius);復(fù)合語(yǔ)句{}和空語(yǔ)句;for(fahr=lower;fahr<=upper;fahr=fahr+1);

celsius=(5.0/9.0)*(fahr-32.0); printf("%d%6.1f\n",fahr,celsius);!不要在for語(yǔ)句中隨意加分號(hào)求1+2+……+100抽取具有共性的算式:sum=sum+isum初值為0,該算式重復(fù)100次,i從1變到100設(shè)i為循環(huán)變量,則:指定循環(huán)起點(diǎn)的表達(dá)式1:i=1給出循環(huán)條件的表達(dá)式2:i<=100設(shè)置循環(huán)步長(zhǎng)的表達(dá)式3:i++循環(huán)體語(yǔ)句:sum=sum+i;for(i=1;i<=100;i++)sum=sum+i;2.4.3指定次數(shù)的循環(huán)程序設(shè)計(jì)/*計(jì)算1+2+3+……+100*/#include<stdio.h>intmain(void){inti,sum;sum=0; /*置累加和sum的初值為0*/for(i=1;i<=100;i++)/*循環(huán)重復(fù)100次*/sum=sum+i; /*反復(fù)累加*/printf(“sum=%d\n”,sum); /*輸出累加和*/return0;}源程序-求1+2+……+100for(i=1;i<=100;i++){sum=0;sum=sum+i;}sum=5050#include<stdio.h>intmain(void){inti,sum;sum=0; for(i=1;i<=100;i++)sum=sum+i;printf(“sum=%d\n”,sum);return0;}例2-7:求1+1/2+1/3+……+1/100for(i=1;i<=100;i++)sum=sum+1.0/i;inti;doublesum;printf(“sum=%f\n”,sum);一般包含四個(gè)部分:初始化:指定循環(huán)起點(diǎn)給循環(huán)變量賦初值,如i=1;進(jìn)入循環(huán)之前,設(shè)置相關(guān)變量的初值,如sum=0。條件控制:只要i<=100,循環(huán)就繼續(xù)工作:指重復(fù)執(zhí)行的語(yǔ)句(循環(huán)體)。一條語(yǔ)句,可以是復(fù)合語(yǔ)句或空語(yǔ)句。如sum=sum+i。改變循環(huán)變量:在每次循環(huán)中改變循環(huán)變量的值如i++,以改變循環(huán)條件的真假。一旦i>100,循環(huán)結(jié)束。指定次數(shù)的循環(huán)程序設(shè)計(jì)輸入一個(gè)正整數(shù)n,求前n項(xiàng)和,即循環(huán)n次#include<stdio.h>intmain(void){inti,sum;sum=0;for(i=1;i<=100;i++)sum=sum+i;printf(“sum=%d\n”,sum);return0;}例2-7求1+2+3+……+nfor(i=1;i<=n;i++)sum=sum+i;printf(“Entern:");scanf("%d",&n);Entern:100Sum=5050求前n項(xiàng)和,即循環(huán)n次,每次累加1項(xiàng)。for(i=1;i<=n;i++)sum=sum+item

(第i項(xiàng))

item=1.0/(2*i-1)示例:求1+1/3+1/5+…的前n項(xiàng)和#include<stdio.h>intmain(void){inti,n; doubleitem,sum;printf(“Entern:"); scanf("%d",&n); sum=0; for(i=1;i<=n;i++)

{item=1.0/(2*i-1); /*計(jì)算第i項(xiàng)的值*/ sum=sum+item; /*累加第i項(xiàng)的值*/ } printf("sum=%f\n",sum);return0;}示例:求1+1/3+1/5+…源程序求前n項(xiàng)和,即循環(huán)n次,每次累加1項(xiàng)。for(i=1;i<=n;i++)sum=sum+item

(第i項(xiàng))item=flag*1.0/denominatordenominator=denominator+2flag=-flag例2-8:求1-1/3+1/5-…的前n項(xiàng)和item=flag*1.0/(2*i-1)#include<stdio.h>intmain(void){intdenominator,flag,i,n;doubleitem,sum;printf(“Entern:");scanf("%d",&n); flag=1;denominator=1; sum=0;for(i=1;i<=n;i++){item=flag*1.0/denominator;/*計(jì)算第i項(xiàng)的值*/ sum=sum+item;/*累加第i項(xiàng)的值*/flag=-flag;/*準(zhǔn)備下一次循環(huán)*/denominator=denominator+2; } printf("sum=%f\n",sum);return0;}源程序n!=1*2*…*nfor(i=1;i<=n;i++)product=product*item

(第i項(xiàng))item=i例2-9:求n!product=?#include<stdio.h>intmain(void){inti,n;doubleproduct;printf("inputn:\n");scanf("%d",&n);product=1; /*置階乘product的初值為1*/for(i=1;i<=n;i++) /*循環(huán)重復(fù)n次,計(jì)算n!*/

product=product*i;printf("product=%.0f\n",product);return0;}源程序輸入實(shí)數(shù)x和正整數(shù)n,計(jì)算xn=x*x*…*xfor(i=1;i<=n;i++)power=power*item

(第i項(xiàng))item=?示例:求xn

#include<stdio.h>intmain(void){inti,n;doublex,power;printf(“Enterx,n:\n");scanf("%lf%d",&x,&n);power=1; /*置power的初值為1*/for(i=1;i<=n;i++) /*循環(huán)重復(fù)n次,計(jì)算x的n次冪*/

power=power*x;printf("%0.f\n",power);}求xn-源程序2.5生成乘方表與結(jié)成表

例2-10(1):程序解析輸入一個(gè)正整數(shù)n,生成一張2的乘方表,輸出20到2n的值,可以調(diào)用冪函數(shù)計(jì)算2的乘方。for(i=0;i<=n;i++){power=pow(2,i);/*調(diào)用冪函數(shù)pow(2,i) 計(jì)算2的i次方*/

輸出power的值;}生成乘方表-源程序#include<stdio.h>#include<math.h>intmain(void){inti,n;doublepower;printf("Entern:");scanf("%d",&n);for(i=0;i<=n;i++)

{power=pow(2,i);/*調(diào)用冪函數(shù)pow(2,i)計(jì)算2的i次方*/printf("pow(2,%d)=%.0f\n",i,power);}return0;}Entern:4pow(2,0)=1pow(2,1)=2pow(2,2)=4pow(2,3)=8pow(2,4)=16

例2-10(1)生成階乘表輸入一個(gè)正整數(shù)n,生成一張階乘表,輸出0!到n!的值。要求定義和調(diào)用函數(shù)fact(n)計(jì)算n!,函數(shù)類型是double。for(i=0;i<=n;i++){power=pow(2,i);/*調(diào)用冪函數(shù)pow(2,i)計(jì)算2的i次方*/

輸出power的值;}for(i=0;i<=n;i++){product=fact(i);

/*調(diào)用自定義函數(shù)fact(i)計(jì)算i!*/

輸出product的值;}#include<stdio.h>doublefact(intn);/*自定義函數(shù)的聲明*/intmain(void){inti,n;doubleresult;printf("Entern:");scanf("%d",&n);for(i=0;i<=n;i++)

{result=fact(i);/*調(diào)用自定義函數(shù)fact(i)計(jì)算i!*/printf("%d!=%.0f\n",i,result);}return0;}生成階乘表-源程序Entern:30!=11!=12!=23!=6doublefact(intn)/*函數(shù)首部*/{inti;doubleproduct;product=1;for(i=1;i<=n;i++)product=product*i;

returnproduct;/*將結(jié)果回送主函數(shù)

*/}2.5.2結(jié)構(gòu)化程序設(shè)計(jì)思想結(jié)構(gòu)化程序設(shè)計(jì)(StructuredProgramming)程序設(shè)計(jì)技術(shù)C語(yǔ)言是結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言強(qiáng)調(diào)程序設(shè)計(jì)的風(fēng)格和程序結(jié)構(gòu)的規(guī)范化,提倡清晰的結(jié)構(gòu),其基本思路是將一個(gè)復(fù)雜問(wèn)題的求解過(guò)程劃分為若干階段,每個(gè)階段要處理的問(wèn)題都容易被理解和處理。按自頂向下的方法對(duì)問(wèn)題進(jìn)行分析、模塊化設(shè)計(jì)和結(jié)構(gòu)化編碼等3個(gè)步驟。自頂向下的分析方法把大的復(fù)雜的問(wèn)題分解成小問(wèn)題后再解決面對(duì)一個(gè)復(fù)雜的問(wèn)題,首先進(jìn)行上層(整體)的分析,按組織或功能將問(wèn)題分解成子問(wèn)題,如果子問(wèn)題仍然十分復(fù)雜,再做進(jìn)一步分解,直到處理對(duì)象相對(duì)簡(jiǎn)單,容易處理為止。當(dāng)所有的子問(wèn)題都得到了解決,整個(gè)問(wèn)題也就解決了。每一次分解都是對(duì)上一層的問(wèn)題進(jìn)行細(xì)化和逐步求精,最終形成一種類似樹(shù)形的層次結(jié)構(gòu),來(lái)描述分析的結(jié)果。學(xué)生成績(jī)統(tǒng)計(jì)程序成績(jī)輸入數(shù)據(jù)計(jì)算數(shù)據(jù)查找輸出成績(jī)計(jì)算學(xué)生平均分計(jì)算課程平均分學(xué)生成績(jī)統(tǒng)計(jì)程序的層次結(jié)構(gòu)圖模塊化設(shè)計(jì)將模塊組織成良好的層次系統(tǒng),頂層模塊調(diào)用其下層模塊以實(shí)現(xiàn)程序的完整功能,每個(gè)下層模塊再調(diào)用更下層的模塊,從而完成程序的一個(gè)子功能,最下層的模塊完成最具體的功能。遵循模塊獨(dú)立性的原則,即模塊之間的聯(lián)系應(yīng)盡量簡(jiǎn)單。一個(gè)模塊只完成一個(gè)指定的功能。模塊之間只通過(guò)參數(shù)進(jìn)行調(diào)用。一個(gè)模塊只有一個(gè)入口和一個(gè)出口。模塊內(nèi)慎用全局變量。結(jié)構(gòu)化編碼選用順序、選擇和循環(huán)三種控制結(jié)構(gòu),使程序具有良好的風(fēng)格。對(duì)變量、函數(shù)、常量等命名時(shí),要見(jiàn)名知意,有助于對(duì)變量含義或函數(shù)功能的理解。在程序中增加必要的注釋,增加程序的可讀性。程序要清晰易懂,語(yǔ)句構(gòu)造要簡(jiǎn)單直接,一行寫(xiě)一條語(yǔ)句,采用縮進(jìn)格式。程序有良好的交互性,輸入有提示,輸出有說(shuō)明,并盡量采用統(tǒng)一整齊的格式。補(bǔ)充編程題#include<stdio.h>#include<math.h>intmain(void){ doublex,y; printf("Enterx:"); scanf("%lf",&x); if(x<0){ y=pow((1+x),2)+(1/x)+2*x; } else{ y=sqrt(x); } printf("f(%.2f)=%.2f\n",x,y); return0;}實(shí)驗(yàn)指導(dǎo)#include<stdio.h>intmain(void){inti,sum,m;printf("Enterm:");scanf("%d",&m);for(sum=0,i=m;i<=100;i++){sum=sum+i;}printf("sum=%d\n",sum);return0;}實(shí)驗(yàn)指導(dǎo)#include<stdio.h>intmain(void){inti,n;doubleitem,sum;printf("Entern:");scanf("%d",&n);for(sum=0,i=1;i<=n;i++){ item=1.0/(2*i-1); sum=sum+item;}printf("sum=%f\n",sum);return0;}實(shí)驗(yàn)指導(dǎo)

#include<stdio.h>#include<math.h>intmain(void){inti,n;doublepower;printf("Entern:");scanf("%d",&n);for(i=0;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論