




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
..程序設計和C語言1.1.什么是計算機程序程序:一組計算機能識別和執(zhí)行的指令。只要讓計算機執(zhí)行這個程序,計算機就會自動地、有條不紊地進行工作計算機的一切操作都是由程序控制的,離開程序,計算機將一事無成。1.2什么是計算機語言計算機語言:人和計算機交流信息的、計算機和人都能識別的語言。計算機語言發(fā)展階段:機器語言〔由0和1組成的指令符號語言〔用英文字母和數(shù)字表示指令高級語言〔接近于人的自然語言和數(shù)學語言面向過程的語言〔非結構化的語言、結構化語言;面向?qū)ο蟮恼Z言1.3C語言的發(fā)展及其特點C語言是一種用途廣泛、功能強大、使用靈活的過程性編程語言,既可用于編寫應用軟件,又能用于編寫系統(tǒng)軟件。因此C語言問世以后得到迅速推廣。C語言主要特點:語言簡潔、緊湊,使用方便、靈活?!仓挥?7個關鍵字、9種控制語句;程序書寫形式自由,源程序短運算符豐富?!?4種運算符;把括號、賦值、強制類型轉換等都作為運算符處理;表達式類型多樣化數(shù)據(jù)類型豐富。〔包括:整型、浮點型、字符型、數(shù)組類型、指針類型、結構體類型、共用體類型;C99又擴充了復數(shù)浮點類型、超長整型、布爾類型;指針類型數(shù)據(jù),能用來實現(xiàn)各種復雜的數(shù)據(jù)結構的運算。具有結構化的控制語句。〔如if…else語句、while語句、do…while語句、switch語句、for語句用函數(shù)作為程序的模塊單位,便于實現(xiàn)程序的模塊化;C語言是完全模塊化和結構化的語言語法限制不太嚴格,程序設計自由度大。〔對數(shù)組下標越界不做檢查;對變量的類型使用比較靈活,例如,整型量與字符型數(shù)據(jù)可以通用;C語言允許程序編寫者有較大的自由度,因此放寬了語法檢查允許直接訪問物理地址,能進行位操作,可以直接對硬件進行操作?!睠語言具有高級語言的功能和低級語言的許多功能,可用來編寫系統(tǒng)軟件;這種雙重性,使它既是成功的系統(tǒng)描述語言,又是通用的程序設計語言用C語言編寫的程序可移植性好?!睠的編譯系統(tǒng)簡潔,很容易移植到新系統(tǒng);在新系統(tǒng)上運行時,可直接編譯"標準鏈接庫"中的大部分功能,不需要修改源代碼;幾乎所有計算機系統(tǒng)都可以使用C語言生成目標代碼質(zhì)量高,程序執(zhí)行效率高。1.4.1最簡單的C語言程序舉例C語言允許用兩種注釋方式://:單行注釋,可單獨占一行,可出現(xiàn)在一行中其他內(nèi)容的右側。/*……*/:塊式注釋,可包含多行。1.4.2C語言程序的結構C語言程序的結構特點:1、一個程序由一個或多個源程序文件組成〔小程序往往只包括一個源程序文件,一個源程序文件中可以包括三個部分:預處理指令、全局聲明、函數(shù)定義。2、函數(shù)是C程序的主要組成部分〔一個C程序是由一個或多個函數(shù)組成的;必須包含一個main函數(shù)〔只能有一個;每個函數(shù)都用來實現(xiàn)一個或幾個特定功能;被調(diào)用的函數(shù)可以是庫函數(shù),也可以是自己編制設計的函數(shù)。3、一個函數(shù)包括兩個部分〔函數(shù)首部、函數(shù)體〔聲明部分、執(zhí)行部分4、程序總是從main函數(shù)開始執(zhí)行5、C程序?qū)τ嬎銠C的操作由C語句完成〔C程序書寫格式是比較自由的:一行內(nèi)可以寫幾個語句;一個語句可以分寫在多行上。6、數(shù)據(jù)聲明和語句最后必須有分號7、C語言本身不提供輸入輸出語句8、程序應當包含注釋,增加可讀性1.6程序設計的任務問題分析2.設計算法3.編寫程序4.對源程序進行編輯、編譯和連接5.運行程序,分析結6.編寫程序文檔算法——程序的靈魂一個程序主要包括以下兩方面的信息:<1>對數(shù)據(jù)的描述。在程序中要指定用到哪些數(shù)據(jù)以及這些數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,這就是數(shù)據(jù)結構。<2>對操作的描述。即要求計算機進行操作的步驟,也就是算法。數(shù)據(jù)是操作的對象,操作的目的是對數(shù)據(jù)進行加工處理,以得到期望的結果。著名計算機科學家沃思<NikiklausWirth>提出一個公式:算法+數(shù)據(jù)結構=程序一個程序除了算法和數(shù)據(jù)結構這主要要素外,還應當采用結構化程序設計方法進行程序設計,并且用某一種計算機語言表示。算法、數(shù)據(jù)結構、程序設計方法和語言工具是一個程序設計人員應具備的知識。2.1什么是算法廣義地說,為解決一個問題而采取的方法和步驟,就稱為"算法"。計算機算法可分為兩大類別:數(shù)值運算算法〔目的是求數(shù)值解;非數(shù)值運算算法〔包括面十分廣泛,常見的是用于事務管理領域2.3算法的特性一個有效算法應該具有以下特點:<1>有窮性。一個算法應包含有限的操作步驟,而不能是無限的。<2>確定性。算法中的每一個步驟都應當是確定的,而不應當是含糊的、模棱兩可的。<3>有零個或多個輸入。所謂輸入是指在執(zhí)行算法時需要從外界取得必要的信息。<4>有一個或多個輸出。算法的目的是為了求解,"解"就是輸出。沒有輸出的算法是沒有意義的。<5>有效性。算法中的每一個步驟都應當能有效地執(zhí)行,并得到確定的結果。流程圖是表示算法的較好的工具。2.4.3三種基本結構和改進的流程圖三種基本結構:〔1順序結構〔2選擇結構〔3循環(huán)結構①當型循環(huán)結構②直到型循環(huán)結構2.4.5用偽代碼表示算法偽代碼是用介于自然語言和計算機語言之間的文字和符號來描述算法。用偽代碼寫算法并無固定的、嚴格的語法規(guī)則,可以用英文,也可以中英文混用。2.4.6用計算機語言表示算法要完成一項工作,包括設計算法和實現(xiàn)算法兩個部分。設計算法的目的是為了實現(xiàn)算法。例2.19將例2.17表示的算法〔求多項式的值用C語言表示。#include<stdio.h>intmain<>{intsign=1;doubledeno=2.0,sum=1.0,term;while<deno<=100>{sign=-sign;term=sign/deno;sum=sum+term;deno=deno+1;}printf<"%f\n",sum>;return0;}2.5結構化程序設計方法采取以下方法保證得到結構化的程序:〔1自頂向下;〔2逐步細化;〔3模塊化設計;〔4結構化編碼。最簡單的C程序設計3.1順序程序設計舉例例3.1有人用溫度計測量出用華氏法表示的溫度<如F,今要求把它轉換為以攝氏法表示的溫度<如C>。解題思路:找到二者間的轉換公式f代表華氏溫度,c代表攝氏溫度算法:〔N-S圖#include<stdio.h>intmain<>{floatf,c;定義f和c為單精度浮點型變量f=64.0;指定f的值c=<5.0/9>*<f-32>;計算c的值printf<"f=%f\nc=%f\n",f,c>;輸出f和c的值return0;}例3.2計算存款利息。有1000元,想存一年。有三種方法可選:<1>活期,年利率為r1<2>一年期定期,年利率為r2<3>存兩次半年定期,年利率為r3,請分別計算出一年后按三種方法所得到的本息和。解題思路:確定計算本息和的公式。從數(shù)學知識可知:若存款額為p0,則:活期存款一年后本息和為:p1=p0<1+r1>;一年期定期存款,一年后本息和為:p2=p0<1+r2>;兩次半年定期存款,一年后本息和為:p3=p0〔1+r3/2〔1+r3/2算法:#include<stdio.h>intmain<>{floatp0=1000,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3;p1=p0*<1+r1>;p2=p0*<1+r2>;p3=p0*<1+r3/2>*<1+r3/2>;printf<"%f\n%f\n%f\n",p1,p2,p3>;return0;}3.2.1常量與變量常量:在程序運行過程中,其值不能被改變的量。整型常量:如1000,12345,0,-345;實型常量:十進制小數(shù)形式:如0.34-56.790.0,指數(shù)形式:如12.34e3<代表12.34103>;字符常量:如’?’,轉義字符:如’\n’;字符串常量:如"boy";符號常量:#definePI3.14162.變量:在程序運行期間,變量的值是可以改變的。變量必須先定義,后使用,定義變量時指定該變量的名字和類型。變量名和變量值是兩個不同的概念,變量名實際上是以一個名字代表的一個存儲地址。從變量中取值,實際上是通過變量名找到相應的內(nèi)存地址,從該存儲單元中讀取數(shù)據(jù)。3.常變量:constinta=3;4.標識符:一個對象的名字。C語言規(guī)定標識符只能由字母、數(shù)字和下劃線3種字符組成,且第一個字符必須為字母或下劃線合法的標識符:如sum,average,_total,Class,day,BASIC,li_ling不合法的標識符:M.D.John,¥123,#33,3D64,a>b3.2.2數(shù)據(jù)類型所謂類型,就是對數(shù)據(jù)分配存儲單元的安排,包括存儲單元的長度<占多少字節(jié)>以及數(shù)據(jù)的存儲形式。不同的類型分配不同的長度和存儲形式。C語言允許使用的數(shù)據(jù)類型:整型類型:基本整型<int型>:占2個或4個字節(jié)短整型<shortint>:VC++6.0中占2個字節(jié)長整型<longint>:VC++6.0中占4個字節(jié)基本類型雙長整型<longlongint>:C99新增的字符型布爾型浮點類型〔單精度浮點型、雙精度浮點型、復數(shù)浮點型枚舉類型空類型派生類型〔指針類型、數(shù)組類型、結構體類型、共用體類型、函數(shù)類型3.2.3整型數(shù)據(jù)整型變量的符號屬性:整型變量的值的范圍包括負數(shù)到正數(shù);可以將變量定義為"無符號"類型;擴充的整形類型:有符號基本整型[signed]int;無符號基本整型unsignedint;有符號短整型[signed]short[int];無符號短整型unsignedshort[int];有符號長整型[signed]long[int];無符號長整型unsignedlong[int]有符號雙長整型[signed]longlong[int];無符號雙長整型unsignedlonglong[int]3.2.3字符數(shù)據(jù)類型字符是按其代碼<整數(shù)>形式存儲的,C99把字符型數(shù)據(jù)作為整數(shù)類型的一種。1.字符與字符代碼:大多數(shù)系統(tǒng)采用ASCII字符集字母:A~Z,a~z數(shù)字:0~9專門符號:29個:!"#&‘<>*等空格符:空格、水平制表符、換行等不能顯示的字符:空<null>字符<以‘\0’表示>、警告<以‘\a’表示>、退格<以‘\b’表示>、回車<以‘\r’表示>等字符’1’和整數(shù)1是不同的概念:字符’1’只是代表一個形狀為’1’的符號,在需要時按原樣輸出,在內(nèi)存中以ASCII碼形式存儲,占1個字節(jié)[00110001];整數(shù)1是以整數(shù)存儲方式<二進制補碼方式>存儲的,占2個或4個字節(jié)[00000000|00000001]字符變量:用類型符char定義字符變量3.2.5浮點型數(shù)據(jù)浮點型數(shù)據(jù)是用來表示具有小數(shù)點的實數(shù)。float型<單精度浮點型>:編譯系統(tǒng)為float型變量分配4個字節(jié);數(shù)值以規(guī)范化的二進制數(shù)指數(shù)形式存放。double型<雙精度浮點型>:編譯系統(tǒng)為double型變量分配8個字節(jié);15位有效數(shù)字longdouble<長雙精度>型3.2.6怎樣確定常量的類型字符常量:由單撇號括起來的單個字符或轉義字符。整型常量:不帶小數(shù)點的數(shù)值。系統(tǒng)根據(jù)數(shù)值的大小確定int型還是long型等。浮點型常量:凡以小數(shù)形式或指數(shù)形式出現(xiàn)的實數(shù)。C編譯系統(tǒng)把浮點型常量都按雙精度處理;分配8個字節(jié)3.2.7運算符和表達式3、算術表達式和運算符的優(yōu)先級與結合性:用算術運算符和括號將運算對象〔也稱操作數(shù)連接起來的、符合C語法規(guī)則的式子,稱為C算術表達式運算對象包括常量、變量、函數(shù)等C語言規(guī)定了運算符的優(yōu)先級和結合性4、不同類型數(shù)據(jù)間的混合運算:〔1+、-、*、/運算的兩個數(shù)中有一個數(shù)為float或double型,結果是double型。系統(tǒng)將float型數(shù)據(jù)都先轉換為double型,然后進行運算〔2如果int型與float或double型數(shù)據(jù)進行運算,先把int型和float型數(shù)據(jù)轉換為double型,然后進行運算,結果是double型〔3字符型數(shù)據(jù)與整型數(shù)據(jù)進行運算,就是把字符的ASCII代碼與整型數(shù)據(jù)進行運算例3.3給定一個大寫字母,要求用小寫字母輸出。#include<stdio.h>intmain<>{charc1,c2;c1=’A’;c2=c1+32;printf<"%c\n",c2>;printf<"%d\n",c2>;return0;}5、強制類型轉換運算符強制類型轉換運算符的一般形式為:〔類型名〔表達式<double>a〔將a轉換成double類型<int><x+y>〔將x+y的值轉換成int型<float><5%3>〔將5%3的值轉換成float型有兩種類型轉換:系統(tǒng)自動進行的類型轉換;強制類型轉換3.3.1C語句的作用與分類C語句分為以下5類:<1>控制語句:if、switch、for、while、do…while、continue、break、return、goto等<2>函數(shù)調(diào)用語句<3>表達式語句<4>空語句<5>復合語句在C程序中,最常用的語句是:賦值語句;輸入輸出語句。其中最基本的是賦值語句。例3.4給出三角形的三邊長,求三角形面積。#include<stdio.h>#include<math.h>intmain<>{doublea,b,c,s,area;a=3.67;b=5.43;c=6.21;s=<a+b+c>/2; area=sqrt<s*<s-a>*<s-b>*<s-c>>;printf<"a=%f\tb=%f\t%f\n",a,b,c>;printf<"area=%f\n",area>;return0;}3.4.1數(shù)據(jù)的輸入輸出舉例例3.5求ax2+bx+c=0方程的根。a、b、c由鍵盤輸入,設b2-4ac>0#include<stdio.h>#include<math.h>intmain<>{doublea,b,c,disc,x1,x2,p,q;scanf<"%lf%lf%lf",&a,&b,&c>;disc=b*b-4*a*c;p=-b/<2.0*a>;q=sqrt<disc>/<2.0*a>;x1=p+q;x2=p-q;printf<"x1=%7.2f\nx2=%7.2f\n",x1,x2>;return0;}3.4.2有關數(shù)據(jù)輸入輸出的概念幾乎每一個C程序都包含輸入輸出,輸入輸出是程序中最基本的操作之一。<1>所謂輸入輸出是以計算機主機為主體而言的:從計算機向輸出設備<如顯示器、打印機等>輸出數(shù)據(jù)稱為輸出從輸入設備〔如鍵盤、磁盤、光盤、掃描儀等向計算機輸入數(shù)據(jù)稱為輸入C語言本身不提供輸入輸出語句,輸入和輸出操作是由C標準函數(shù)庫中的函數(shù)來實現(xiàn)的。printf和scanf不是C語言的關鍵字,而只是庫函數(shù)的名字在使用輸入輸出函數(shù)時,要在程序文件的開頭用預編譯指令#include<stdio.h>或#include″stdio.h″3.4.3用printf函數(shù)輸出數(shù)據(jù)在C程序中用來實現(xiàn)輸出和輸入的,主要是printf函數(shù)和scanf函數(shù)。這兩個函數(shù)是格式輸入輸出函數(shù),用這兩個函數(shù)時,必須指定格式。printf函數(shù)的一般格式,printf〔格式控制,輸出表列例如:printf<"i=%d,c=%c\n",i,c>;常用格式字符:d格式符:用來輸出一個有符號的十進制整數(shù)??梢栽诟袷铰暶髦兄付ㄝ敵鰯?shù)據(jù)的域?qū)抪rintf<"%5d%5d\n",12,-345>;%d輸出int型數(shù)據(jù);%ld輸出long型數(shù)據(jù)。c格式符。用來輸出一個字符,charch=’a’;printf<"%c",ch>;或printf<"%5c",ch>s格式符。用來輸出一個字符串,printf〔"%s","CHINA";f格式符。用來輸出實數(shù),以小數(shù)形式輸出。①不指定數(shù)據(jù)寬度和小數(shù)位數(shù),用%f;②指定數(shù)據(jù)寬度和小數(shù)位數(shù)。用%m.nf;③輸出的數(shù)據(jù)向左對齊,用%-m.nfe格式符。指定以指數(shù)形式輸出實數(shù)。%e,VC++給出小數(shù)位數(shù)為6位,指數(shù)部分占5列,小數(shù)點前必須有而且只有1位非零數(shù)字。printf<"%e",123.456>;輸出:1.234560e+002。%m.ne,printf<"%13.2e",123.456>;輸出:1.23e+002<前面有4個空格>3.4.4用scanf函數(shù)輸入數(shù)據(jù)scanf函數(shù)的一般形式:scanf〔格式控制,地址表列scanf函數(shù)中的格式聲明:與printf函數(shù)中的格式聲明相似;以%開始,以一個格式字符結束,中間可以插入附加的字符,scanf<"a=%f,b=%f,c=%f",&a,&b,&c>;使用scanf函數(shù)時應注意的問題3.4.5字符數(shù)據(jù)的輸入輸出用putchar函數(shù)輸出一個字符,從計算機向顯示器輸出一個字符,putchar函數(shù)的一般形式為:putchar<c>例3.8先后輸出BOY三個字符。#include<stdio.h>intmain<>{chara='B',b='O',c='Y';putchar<a>;putchar<b>;putchar<c>;putchar<'\n'>;return0;}用getchar函數(shù)輸入一個字符,向計算機輸入一個字符,getchar函數(shù)的一般形式為:getchar<>例3.9從鍵盤輸入BOY三個字符,然后把它們輸出到屏幕。#include<stdio.h>intmain<>{chara,b,c;a=getchar<>;b=getchar<>;c=getchar<>;putchar<a>;putchar<b>;putchar<c>;putchar<'\n'>;return0;}選擇結構程序設計4.1選擇結構和條件判斷C語言有兩種選擇語句:<1>if語句,實現(xiàn)兩個分支的選擇結構;<2>switch語句,實現(xiàn)多分支的選擇結構例4.1在例3.5的基礎上對程序進行改進。題目要求是求ax2+bx+c=0方程的根。由鍵盤輸入a,b,c。假設a,b,c的值任意,并不保證b2-4ac≥0。需要在程序中進行判別,如果b2-4ac≥0,就計算并輸出方程的兩個實根,否則就輸出"方程無實根"的信息。#include<stdio.h>#include<math.h>intmain<>{doublea,b,c,disc,x1,x2,p,q;scanf<"%lf%lf%lf",&a,&b,&c>;disc=b*b-4*a*c;if<disc<0>printf<"hasnotrealroots\n">;else{p=-b/<2.0*a>;q=sqrt<disc>/<2.0*a>;x1=p+q;x2=p-q;printf<"realroots:\nx1=%7.2f\nx2=%7.2f\n",x1,x2>;}return0;}4.2.1用if語句處理選擇結構舉例例4.2輸入兩個實數(shù),按代數(shù)值由小到大的順序輸出這兩個數(shù)。#include<stdio.h>intmain<>{floata,b,t;scanf<"%f,%f",&a,&b>;if<a>b>{t=a;a=b;b=t;}printf<"%5.2f,%5.2f\n",a,b>;return0;}例4.3輸入3個數(shù)a,b,c,要求按由小到大的順序輸出。#include<stdio.h>intmain<>{floata,b,c,t;scanf<"%f,%f,%f",&a,&b,&c>;if<a>b>{t=a;a=b;b=t;}if<a>c>{t=a;a=c;c=t;}if<b>c>{t=b;b=c;c=t;}printf<"%5.2f,%5.2f,%5.2f\n",a,b,c>;return0;}4.2.2if語句的一般形式if<表達式>語句1[else語句2]最常用的3種if語句形式:1.if<表達式>語句1<沒有else子句>2.if<表達式>語句1else語句2<有else子句>3.if〔表達式1語句1elseif〔表達式2語句2elseif〔表達式3語句3┆elseif〔表達式m語句melse語句m+1<在else部分又嵌套了多層的if語句>說明:<1>整個if語句可寫在多行上,也可寫在一行上,但都是一個整體,屬于同一個語句;<2>"語句1"…"語句m"是if中的內(nèi)嵌語句,內(nèi)嵌語句也可以是一個if語句;<3>"語句1"…"語句m"可以是簡單的語句,也可以是復合語句。4.3.1關系運算符及其優(yōu)先次序關系運算符:用來對兩個數(shù)值進行比較的比較運算符C語言提供6種關系運算符:①<<小于>②<=<小于或等于>③>大于>④>=大于或等于>[優(yōu)先級相同〔高]⑤==<等于>⑥!=<不等于>[優(yōu)先級相同〔低]關系、算術、賦值運算符的優(yōu)先級:算數(shù)運算符>關系運算符>賦值運算符4.3.2關系表達式關系表達式:用關系運算符將兩個數(shù)值或數(shù)值表達式連接起來的式子;關系表達式的值是一個邏輯值,即"真"或"假";在C的邏輯運算中,以"1"代表"真",以"0"代表"假"4.4.1邏輯運算符及其優(yōu)先次序3種邏輯運算符:&&〔邏輯與||〔邏輯或!〔邏輯非&&和||是雙目<元>運算符!是一目<元>運算符邏輯表達式〔用邏輯運算符將關系表達式或其他邏輯量連接起來的式子邏輯運算的真值表邏輯運算符的優(yōu)先次序:!→&&→||〔!為三者中最高與其他運算符的優(yōu)先次序:賦值運算符<&&和||<關系運算符<算數(shù)運算符<!4.4.2邏輯表達式邏輯表達式的值應該是邏輯量"真"或"假"編譯系統(tǒng)在表示邏輯運算結果時,以數(shù)值1代表"真",以0代表"假"但在判斷一個量是否為"真"時,以0代表"假",以非0代表"真"注意:將一個非零的數(shù)值認作為"真"修改后的邏輯運算真值表4.4.3邏輯型變量這是C99所增加的一種數(shù)據(jù)類型,可以將關系運算和邏輯運算的結果存到一個邏輯型變量中,以便于分析和運算4.5條件運算符和條件表達式有一種if語句,當被判別的表達式的值為"真"或"假"時,都執(zhí)行一個賦值語句且向同一個變量賦值如:if<a>b>max=a;elsemax=b;條件運算符的執(zhí)行順序:①求解表達式1;②若為非0〔真則求解表達式2,此時表達式2的值就作為整個條件表達式的值;③若表達式1的值為0〔假,則求解表達式3,表達式3的值就是整個條件表達式的值條件運算符優(yōu)先于賦值運算符;條件運算符的結合方向為"自右至左"。例4.4輸入一個字符,判別它是否大寫字母,如果是,將它轉換成小寫字母;如果不是,不轉換。然后輸出最后得到的字符。#include<stdio.h>intmain<>{charch;scanf<"%c",&ch>;ch=<ch>='A'&&ch<='Z‘>?<ch+32>:ch;printf<"%c\n",ch>;return0;}4.6選擇結構的嵌套在if語句中又包含一個或多個if語句稱為if語句的嵌套。一般形式:if<>else總是與它上面最if〔if<>語句1近的未配對的if配對{else語句2if〔語句1內(nèi)嵌ifelse內(nèi)嵌if}if<>語句3else語句2{}限定了內(nèi)嵌if范圍else語句4-1〔x<0例4.5有一函數(shù):y=0〔x=0編一程序,輸入一個x值,要求輸出相應的y值。1〔x>0解題思路:方法1<1>先后用3個獨立的if語句處理:輸入xscanf<"%d",&x>;若x<0,則y=-1if<x<0>y=-1;若x=0,則y=0if<x==0>y=0;若x>0,則y=1if<x>0>y=1;輸出x和yprintf<"x=%d,y=%d\n",x,y>;方法2<2>用一個嵌套的if語句處理:輸入xscanf<"%d",&x>;若x<0,則y=-1if<x<0>y=-1;否則else若x=0,則y=0if<x==0>y=0;否則y=1elsey=1;輸出x和yprintf<"x=%d,y=%d\n",x,y>;4.7用switch語句實現(xiàn)多分支選擇結構例4.6、例4.7switch語句的作用是根據(jù)表達式的值,使流程跳轉到不同的語句.switch語句的一般形式4.8選擇結構程序綜合舉例例4.8寫一程序,判斷某一年是否閏年。#include<stdio.h>intmain<> {intyear,leap;printf<"enteryear:">;scanf<"%d",&year>;if<year%4==0>if<year%100==0> if<year%400==0>leap=1;elseleap=0; elseleap=1;elseleap=0;if<leap>printf<"%dis",year>;elseprintf<"%disnot",year>;printf<"aleapyear.\n">;return0;}例4.9求ax2+bx+c=0方程的解。#include<stdio.h>#include<math.h>intmain<>{doublea,b,c,disc,x1,x2,realpart,imagpart;scanf<"%lf,%lf,%lf",&a,&b,&c>;printf<"Theequation">;if<fabs<a><=1e-6>printf<"isnotaquadratic\n">;else{disc=b*b-4*a*c;if<fabs<disc><=1e-6>printf<"hastwoequalroots:%8.4f\n",-b/<2*a>>;elseif<disc>1e-6> {x1=<-b+sqrt<disc>>/<2*a>;x2=<-b-sqrt<disc>>/<2*a>;printf<"hasdistinctrealroots:%8.4fand%8.4f\n",x1,x2>; }else{realpart=-b/<2*a>;imagpart=sqrt<-disc>/<2*a>;printf<"hascomplexroots:\n">;printf<"%8.4f+%8.4fi\n",realpart,imagpart>;printf<"%8.4f-%8.4fi\n",realpart,imagpart>; }}return0;}例4.10運輸公司對用戶計算運輸費用。路程<skm越遠,每噸·千米運費越低。標準如下:#include<stdio.h>s<250沒有折扣intmain<>250≤s<5002%折扣{500≤s<10005%折扣intc,s;1000≤s<20008%折扣floatp,w,d,f;2000≤s<300010%折扣printf<"pleaseenterprice,weight,discount:">;3000≤s15%折扣scanf<"%f,%f,%d",&p,&w,&s>;if<s>=3000>c=12;elsec=s/250;f=p*w*s*<1-d/100>;printf<"freight=%10.2f\n",f>;return0;}第五章循環(huán)結構程序設計大多數(shù)的應用程序都會包含循環(huán)結構。循環(huán)結構和順序結構、選擇結構是結構化程序設計的三種基本結構,它們是各種復雜程序的基本構造單元。5.2用while語句實現(xiàn)循環(huán)while語句的一般形式如下:while<表達式>語句循環(huán)體"真"時執(zhí)行循環(huán)體語句"假"時不執(zhí)行while循環(huán)的特點是:先判斷條件表達式,后執(zhí)行循環(huán)體語句。例5.1求1+2+3+…+100,即#include<stdio.h>intmain<>{inti=1,sum=0;while<i<=100>{sum=sum+i;i++;}printf<"sum=%d\n",sum>;return0;}5.3用do——while語句實現(xiàn)循環(huán)do---while語句的特點:先無條件地執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。一般形式為:do語句while<表達式>;例5.2用do…while語句求:1+2+3+…+100#include<stdio.h>intmain<>{inti=1,sum=0;do{sum=sum+i;i++;}while<i<=100>;printf<"sum=%d\n",sum>;return0;}例5.3while和do---while循環(huán)的比較。inti,sum=0;當while后面inti,sum=0;printf<"i=?">;的表達式的printf<"i=?">;scanf<"%d",&i>;第一次的值scanf<"%d",&i>;while<i<=10>為"真"時,do{兩種循環(huán)得到{sum=sum+i;的結果相同;sum=sum+i;i++;否則不相同。i++;}}while<i<=10>;printf<"sum=%d\n",sum>;printf<"sum=%d\n",sum>;5.4用for語句實現(xiàn)循環(huán)for語句不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,還可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結束條件的情況。for語句完全可以代替while語句。for語句的一般形式為:for<表達式1;表達式2;表達式3>語句設置初始條件,只執(zhí)循環(huán)條件表達式,用來判定是否作為循環(huán)的調(diào)整器,例如行一次??梢詾榱銈€、繼續(xù)循環(huán)。在每次執(zhí)行循環(huán)體前使循環(huán)變量增值,它是在一個或多個變量設置先執(zhí)行此表達式,決定是否繼續(xù)執(zhí)行完循環(huán)體后才進行的。初值執(zhí)行。執(zhí)行循環(huán)。for語句的執(zhí)行過程:<1>先求解表達式1<2>求解表達式2,若其值為真,執(zhí)行循環(huán)體,然后執(zhí)行下面第<3>步。若為假,則結束循環(huán),轉到第<5>步<3>求解表達式3<4>轉回上面步驟<2>繼續(xù)執(zhí)行<5>循環(huán)結束,執(zhí)行for語句下面的一個語句5.5循環(huán)的嵌套一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結構,稱為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)。3種循環(huán)<while循環(huán)、do…while循環(huán)和for循環(huán)>可以互相嵌套。5.7用break語句提前終止循環(huán)break語句可以用來從循環(huán)體內(nèi)跳出循環(huán)體,即提前結束循環(huán),接著執(zhí)行循環(huán)下面的語句例5.4在全系1000學生中,征集慈善募捐,當總數(shù)達到10萬元時就結束,統(tǒng)計此時捐款的人數(shù),以及平均每人捐款的數(shù)目。#include<stdio.h>#defineSUM100000intmain<>{floatamount,aver,total;inti;for<i=1,total=0;i<=1000;i++>{printf<"pleaseenteramount:">;scanf<"%f",&amount>;total=total+amount;if<total>=SUM>break;}aver=total/i;printf<"num=%d\naver=%10.2f\n",i,aver>;return0;}5.7.2用continue語句提前結束本次循環(huán)有時不希望終止整個循環(huán)的操作,而只希望提前結束本次循環(huán),而接著執(zhí)行下次循環(huán)。這時可以用continue語句。例5.5要求輸出100~200之間的不能被3整除的數(shù)。for<n=100;n<=200;n++>{if<n%3==0>continue;printf<"%d",n>;}5.7.3break語句和continue語句的區(qū)別continue語句只結束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行break語句結束整個循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立例5.6輸出以下4*5的矩陣。12345246810369121548121620#include<stdio.h>intmain<>{inti,j,n=0;for<i=1;i<=4;i++>控制輸出4行for<j=1;j<=5;j++,n++>控制每行中輸出5個數(shù)據(jù){if<n%5==0>printf<"\n">; printf<"%d\t",i*j>;}printf<"\n">; return0;}5.8循環(huán)程序舉例例5.7用/4≈1-1/3+1/5-1/7+``````公式求的近似值,直到發(fā)現(xiàn)某一項的絕對值小于10-6為止<該項不累計加>。#include<stdio.h>#include<math.h>intmain<>{intsign=1;doublepi=0,n=1,term=1;while<fabs<term>>=1e-6>{pi=pi+term;n=n+2;sign=-sign;term=sign/n;}pi=pi*4;printf<"pi=%10.8f\n",pi>;return0;}例5.8求費波那西<Fibonacci>數(shù)列的前40個數(shù)。這個數(shù)列有如下特點:第1、2兩個數(shù)為1、1。從第3個數(shù)開始,該數(shù)是其前面兩個數(shù)之和。即:F1=1〔n=1F2=1〔n=2Fn=Fn-1+Fn-2〔n≥3這是一個有趣的古典數(shù)學問題:有一對兔子,從出生后第3個月起每個月都生一對兔子。小兔子長到第3個月后每個月又生一對兔子。假設所有兔子都不死,問每個月的兔子總數(shù)為多少?#include<stdio.h>#include<stdio.h>intmain<>intmain<>{intf1=1,f2=1,f3;inti;{intf1=1,f2=1;inti;printf<"%12d\n%12d\n",f1,f2>;for<i=1;i<=20;i++>for<i=1;i<=38;i++>{printf<"%12d%12d",f1,f2>;{f3=f1+f2;if<i%2==0>printf<"\n">; printf<"%12d\n",f3>;f1=f1+f2; f1=f2;f2=f2+f1; f2=f3;}}return0;return0;}}例5.9輸入一個大于3的整數(shù)n,判定它是否素數(shù)<prime,又稱質(zhì)數(shù)>。#include<stdio.h>intmain<>{intn,i;printf<"n=?">;scanf<"%d",&n>;for<i=2;i<=n-1;i++>if<n%i==0>break;if<i<n>printf<"%disnot\n",n>;elseprintf<"%dis\n",n>;return0;}例5.10求100~200間的全部素數(shù)?!璮or<n=101;n<=200;n=n+2>{k=sqrt<n>;for<i=2;i<=k;i++>if<n%i==0>break;if<i>=k+1> {printf<"%d",n>; m=m+1; } if<m%10==0>printf<"\n">;}……例5.11譯密碼。為使電文保密,往往按一定規(guī)律將其轉換成密碼,收報人再按約定的規(guī)律將其譯回原文。解題思路:問題的關鍵有兩個:<1>決定哪些字符不需要改變,哪些字符需要改變,如果需要改變,應改為哪個字符處理的方法是:輸入一個字符給字符變量c,先判定它是否字母<包括大小寫>,若不是字母,不改變c的值;若是字母,則還要檢查它是否’W’到’Z’的范圍內(nèi)<包括大小寫字母>。如不在此范圍內(nèi),則使變量c的值改變?yōu)槠浜蟮?個字母。如果在’W’到’Z’的范圍內(nèi),則應將它轉換為A~D<或a~d>之一的字母。<2>怎樣使c改變?yōu)樗付ǖ淖帜??辦法是改變它的ASCII值例如字符變量c的原值是大寫字母’A’,想使c的值改變?yōu)椤疎’,只需執(zhí)行"c=c+4"即可,因為’A’的ASCII值為65,而’E’的ASCII值為69,二者相差4charc;c=getchar<>;while<c!=‘\n’>{if<<c>=‘a(chǎn)’&&c<=‘z’>||<c>=‘A’&&c<=‘Z’>>{if<c>='W'&&c<='Z'||c>='w'&&c<='z'>c=c-22;elsec=c+4; }printf<"%c",c>;c=getchar<>;}charc;while<<c=getchar<>>!=‘\n’>{if<<c>=‘A’&&c<=‘Z’>||<c>=‘a(chǎn)’&&c<=‘z’>>{c=c+4; if<c>=‘Z’&&c<=‘Z’+4||c>‘z’> c=c-26; }printf<"%c",c>;}第六章利用數(shù)組處理批量數(shù)據(jù)數(shù)組是一組有序數(shù)據(jù)的集合。數(shù)組中各數(shù)據(jù)的排列是有一定規(guī)律的,下標代表數(shù)據(jù)在數(shù)組中的序號。用一個數(shù)組名和下標惟一確定數(shù)組中的元素。數(shù)組中的每一個元素都屬于同一個數(shù)據(jù)類型6.1.1怎樣定義一維數(shù)組一維數(shù)組是數(shù)組中最簡單的。它的元素只需要用數(shù)組名加一個下標,就能惟一確定。要使用數(shù)組,必須在程序中先定義數(shù)組定義一維數(shù)組的一般形式為:類型符數(shù)組名[常量表達式];數(shù)組名的命名規(guī)則和變量名相同,如inta[10];6.1.2怎樣引用一維數(shù)組元素在定義數(shù)組并對其中各元素賦值后,就可以引用數(shù)組中的元素。注意:只能引用數(shù)組元素而不能一次整體調(diào)用整個數(shù)組全部元素的值。引用數(shù)組元素的表示形式為:數(shù)組名[下標],如a[0]=a[5]+a[7]-a[2*3]合法例6.1:對10個數(shù)組元素依次賦值為0,1,2,3,4,5,6,7,8,9,要求按逆序輸出。解題思路:定義一個長度為10的數(shù)組,數(shù)組定義為整型。要賦的值是從0到9,可以用循環(huán)來賦值。用循環(huán)按下標從大到小輸出這10個元素#include<stdio.h>intmain<>{inti,a[10];for<i=0;i<=9;i++>a[i]=i;for<i=9;i>=0;i-->printf<"%d",a[i]>;printf<"\n">;return0;}6.1.3一維數(shù)組的初始化6.1.4一維數(shù)組程序舉例例6.2:用數(shù)組處理求Fibonacci數(shù)列問題解題思路:例5.8中用簡單變量處理的,缺點不能在內(nèi)存中保存這些數(shù)。假如想直接輸出數(shù)列中第25個數(shù),是很困難的。如果用數(shù)組處理,每一個數(shù)組元素代表數(shù)列中的一個數(shù),依次求出各數(shù)并存放在相應的數(shù)組元素中。#include<stdio.h>intmain<>{inti;intf[20]={1,1};for<i=2;i<20;i++>f[i]=f[i-2]+f[i-1];for<i=0;i<20;i++>{if<i%5==0>printf<"\n">;printf<"%12d",f[i]>;}printf<"\n">;return0;}例6.3:有10個地區(qū)的面積,要求對它們按由小到大的順序排列。解題思路:排序的規(guī)律有兩種:一種是"升序",從小到大;另一種是"降序",從大到小。把題目抽象為:"對n個數(shù)按升序排序"。采用起泡法排序。inta[10];inti,j,t;printf<"input10numbers:\n">;for<i=0;i<10;i++>scanf<"%d",&a[i]>;printf<"\n">;for<j=0;j<9;j++> for<i=0;i<9-j;i++> if<a[i]>a[i+1]> {t=a[i];a[i]=a[i+1];a[i+1]=t;}printf<"thesortednumbers:\n">;for<i=0;i<10;i++>printf<"%d",a[i]>;printf<"\n">;6.2.1怎樣定義二維數(shù)組二維數(shù)組定義的一般形式為:類型符數(shù)組名[常量表達式][常量表達式];如:floata[3][4],b[5][10];;二維數(shù)組可被看作是一種特殊的一維數(shù)組:它的元素又是一個一維數(shù)組。例如,把a看作是一個一維數(shù)組,它有3個元素:a[0]、a[1]、a[2],每個元素又是一個包含4個元素的一維數(shù)組6.2.2怎樣引用二維數(shù)組的元素二維數(shù)組元素的表示形式為:數(shù)組名[下標][下標]6.2.4二維數(shù)組程序舉例例6.4;將一個二維數(shù)組行和列的元素互換,存到另一個二維數(shù)組中。解題思路:可以定義兩個數(shù)組:數(shù)組a為2行3列,存放指定的6個數(shù),數(shù)組b為3行2列,開始時未賦值;將a數(shù)組中的元素a[i][j]存放到b數(shù)組中的b[j][i]元素中,用嵌套的for循環(huán)完成。#include<stdio.h>intmain<>{inta[2][3]={{1,2,3},{4,5,6}};intb[3][2],i,j;printf<"arraya:\n">;for<i=0;i<=1;i++>{for<j=0;j<=2;j++>{printf<"%5d",a[i][j]>;b[j][i]=a[i][j];}printf<"\n">;}printf<"arrayb:\n">;for<i=0;i<=2;i++>{for<j=0;j<=1;j++>printf<"%5d",b[i][j]>;printf<"\n">;}return0;}例6.5:有一個3×4的矩陣,要求編程序求出其中值最大的那個元素的值,以及其所在的行號和列號。解題思路:采用"打擂臺算法";先找出任一人站在臺上,第2人上去與之比武,勝者留在臺上;第3人與臺上的人比武,勝者留臺上,敗者下臺;以后每一個人都是與當時留在臺上的人比武,直到所有人都上臺比為止,最后留在臺上的是冠軍。先把a[0][0]的值賦給變量max;max用來存放當前已知的最大值;a[0][1]與max比較,如果a[0][1]>max,則表示a[0][1]是已經(jīng)比過的數(shù)據(jù)中值最大的,把它的值賦給max,取代了max的原值;以后依此處理,最后max就是最大的值?!璱nti,j,row=0,colum=0,max;inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};max=a[0][0];for<i=0;i<=2;i++>for<j=0;j<=3;j++>if<a[i][j]>max>{max=a[i][j];row=i;colum=j;}printf<"max=%d\nrow=%d\ncolum=%d\n",max,row,colum>;……6.3.1怎樣定義字符數(shù)組用來存放字符數(shù)據(jù)的數(shù)組是字符數(shù)組。字符數(shù)組中的一個元素存放一個字符。定義字符數(shù)組的方法與定義數(shù)值型數(shù)組的方法類似。例6.6輸出一個已知的字符串。解題思路:定義一個字符數(shù)組,并用"初始化列表"對其賦以初值;用循環(huán)逐個輸出此字符數(shù)組中的字符#include<stdio.h>intmain<>{charc[15]={'I','','a','m','','a','','s','t','u','d','e','n','t','.'};inti;for<i=0;i<15;i++>printf<"%c",c[i]>;printf<"\n">;return0;}例6.7:輸出一個菱形圖。解題思路:定義一個字符型的二維數(shù)組,用"初始化列表"進行初始化;用嵌套的for循環(huán)輸出字符數(shù)組中的所有元素。#include<stdio.h>intmain<>{chardiamond[][5]={{'','','*'},{'','*','','*'},{'*','','','','*'},{'','*','','*'},{'','','*'}};inti,j;for<i=0;i<5;i++>{for<j=0;j<5;j++>printf<"%c",diamond[i][j]>;printf<"\n">;}return0;6.3.4字符串和字符串結束標志在C語言中,是將字符串作為字符數(shù)組來處理的;關心的是字符串的有效長度而不是字符數(shù)組的長度;為了測定字符串的實際長度,C語言規(guī)定了字符串結束標志’\0’?!病痋0’代表ASCII碼為0的字符,從ASCII碼表可以查到,ASCII碼為0的字符不是一個可以顯示的字符,而是一個"空操作符",即它什么也不做;用它作為字符串結束標志不會產(chǎn)生附加的操作或增加有效字符,只起一個供辨別的標志。6.3.5字符數(shù)組的輸入輸出字符數(shù)組的輸入輸出可以有兩種方法:逐個字符輸入輸出〔%c;整個字符串一次輸入輸出〔%s。輸出的字符中不包括結束符’\0’;用%s輸出字符串時,printf函數(shù)中的輸出項是字符數(shù)組名,不是數(shù)組元素名。如果一個字符數(shù)組中包含多個’\0’,則遇第一個’\0’時輸出就結束??梢杂胹canf函數(shù)輸入一個字符串。scanf函數(shù)中的輸入項c是已定義的字符數(shù)組名,輸入的字符串應短于已定義的字符數(shù)組的長度。6.3.6善于使用字符串處理函數(shù)在C函數(shù)庫中提供了一些用來專門處理字符串的函數(shù),使用方便1.puts函數(shù)----輸出字符串的函數(shù),其一般形式為:puts<字符數(shù)組>,作用是將一個字符串輸出到終端。2.gets函數(shù)----輸入字符串的函數(shù),其一般形式為:gets<字符數(shù)組>,作用是輸入一個字符串到字符數(shù)組3.strcat函數(shù)----字符串連接函數(shù),其一般形式為:strcat<字符數(shù)組1,字符數(shù)組2>,其作用是把兩個字符串連接起來,把字符串2接到字符串1的后面,結果放在字符數(shù)組1中。使用字符串函數(shù)時,在程序開頭用#include<string.h>4.strcpy和strncpy函數(shù)-字符串復制,strcpy一般形式為:strcpy<字符數(shù)組1,字符串2>,作用是將字符串2復制到字符數(shù)組1中去??梢杂胹trncpy函數(shù)將字符串2中前面n個字符復制到字符數(shù)組1中去;strncpy<str1,str2,2>:作用是將str2中最前面2個字符復制到str1中,取代str1中原有的最前面2個字符;復制的字符個數(shù)n不應多于str1中原有的字符。strcmp函數(shù)----字符串比較函數(shù),其一般形式為:strcmp<字符串1,字符串2>,作用是比較字符串1和字符串2。strlen函數(shù)----測字符串長度的函數(shù),其一般形式為:strlen<字符數(shù)組>,它是測試字符串長度的函數(shù),函數(shù)的值為字符串中的實際長度。strlwr函數(shù)----轉換為小寫的函數(shù),其一般形式為:strlwr<字符串>,函數(shù)的作用是將字符串中大寫字母換成小寫字母。strupr函數(shù)----轉換為大寫的函數(shù),其一般形式為:strupr<字符串>,函數(shù)的作用是將字符串中小寫字母換成大寫字母。6.3.7字符數(shù)組應用舉例例6.8輸入一行字符,統(tǒng)計其中有多少個單詞,單詞之間用空格分隔開。……charstring[81],c;inti,num=0,word=0;gets<string>;for<i=0;<c=string[i]>!=‘\0’;i++>if<c==‘’>word=0;elseif<word==0>{word=1;num++;}printf<"%dwords\n",num>;……例6.9有3個字符串,要求找出其中最大者。#include<stdio.h>#i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權】 ISO 19642-4:2019 EN Road vehicles - Automotive cables - Part 4: Dimensions and requirements for 30 V a.c. and 60 V d.c. single core aluminium conductor cables
- 2025至2030中國物資管理系統(tǒng)行業(yè)市場發(fā)展分析及競爭格局與投資發(fā)展報告
- 腹部腫瘤培訓課件總結
- 多功能工培訓大綱
- 白菜除蟲知識培訓課件
- 規(guī)范書寫教案培訓課件
- 實驗室質(zhì)量監(jiān)督培訓
- 調(diào)料銷售培訓課件
- 智慧城市規(guī)劃下的公共空間設計美學與實踐
- 平臺在提升城市形象中的貢獻
- 民法典金融借款合同
- 委外合作與供應商管理制度
- 康復評定學課件第十一章心肺功能評定
- 2024年新版(外研版新交際)二年級英語上冊單詞帶音標
- 數(shù)據(jù)交換平臺設計方案
- 基于PLC的冷卻系統(tǒng)自整定模糊控制研究
- 高溫作業(yè)引發(fā)的電氣事故
- 肝癌疑難病例護理討論
- 旅游規(guī)劃與國土空間開發(fā)
- 檔案整理及數(shù)字化服務方案
評論
0/150
提交評論