C教材(第三版)全套課件_第1頁
C教材(第三版)全套課件_第2頁
C教材(第三版)全套課件_第3頁
C教材(第三版)全套課件_第4頁
C教材(第三版)全套課件_第5頁
已閱讀5頁,還剩230頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1高級語言程序設(shè)計第1章C語言基礎(chǔ)知識.ppt第2章C語言的基本控制結(jié)構(gòu).ppt第3章計算機算法初步.ppt第4章數(shù)據(jù)的組織結(jié)構(gòu)(一).ppt第5章程序的組織結(jié)構(gòu).ppt第6章基于指針的程序設(shè)計.ppt第7章數(shù)據(jù)的組織結(jié)構(gòu)(二).ppt第1章C語言基礎(chǔ)知識1.3數(shù)據(jù)類型、常量、變量、輸入輸出與基本運算1.2C程序的基本結(jié)構(gòu)和運行過程

1.1計算機與程序設(shè)計語言1.4標準函數(shù)和EasyX庫函數(shù)1.1計算機與程序設(shè)計語言計算機系統(tǒng)的基本組成包括計算機硬件和計算機軟件。硬件指構(gòu)成計算機系統(tǒng)的元器件、部件和設(shè)備,其中包括運算器、控制器、存儲器、輸入和輸出設(shè)備,運算器和控制器是計算機的核心部分,人們將它們稱為中央處理器(CPU)。軟件是用戶操縱計算機的接口界面,通常,按照應(yīng)用層次可以將軟件劃分成系統(tǒng)軟件、支撐軟件和應(yīng)用軟件三個層次。程序設(shè)計程序設(shè)計是指設(shè)計、編寫和調(diào)試程序的方法與過程,大致經(jīng)歷了以下幾個階段。1)面向計算機的程序設(shè)計2)面向過程的程序設(shè)計3)面向?qū)ο蟮某绦蛟O(shè)計程序設(shè)計語言程序設(shè)計語言是用于編寫計算機程序的語言。按照語言級別可以將它分為兩個類別:低級語言和高級語言。低級語言是一種與特定計算機體系結(jié)構(gòu)密切相關(guān)的程序設(shè)計語言,主要包括機器語言和匯編語言。

高級語言是一類采用接近數(shù)學(xué)語言,并力求與具體機器無關(guān)的程序設(shè)計語言形式,它具有描述能力強,便于閱讀理解,易于修改維護等特點。C語言支持結(jié)構(gòu)化程序設(shè)計,C++語言和Java語言支持面向?qū)ο蟪绦蛟O(shè)計。6CC++Java0100100100110110100000111001101000110001計算機程序員機器語言編譯器程序設(shè)計語言C語言發(fā)展過程及特點C語言是應(yīng)用最廣的一種高級程序設(shè)計語言,由美國貝爾實驗室的D.Ritchie設(shè)計,最早用于書寫UNIX操作系統(tǒng)。C語言本身比較簡單,具有簡明的數(shù)據(jù)定義和流程控制機制。它提供的函數(shù)機制用于描述程序模塊,使得開發(fā)者可以通過模塊的組合來構(gòu)造結(jié)構(gòu)化的復(fù)雜程序,并且允許軟件系統(tǒng)不同程序模塊的分別開發(fā)。同時,C語言支持底層程序設(shè)計。利用C語言提供的指針等功能,可以面向計算機硬件,直接描述內(nèi)存單元的地址運算和二進制運算,從而編制出高性能的計算程序和控制程序。1.2C程序的基本結(jié)構(gòu)和運行過程

C程序是由若干個函數(shù)組成的,每個函數(shù)用于描述一項操作的具體實現(xiàn)過程。任何一個完整的C程序都必須有且僅有一個名為main的主函數(shù)。當程序運行后,系統(tǒng)將率先自動調(diào)用主函數(shù)。例1:文本行的輸出#include<stdio.h>main(){printf(“\nThisisaCprogram.”);}主函數(shù)(程序入口)標準函數(shù)(用于輸出)頭文件字符串換行符例2:計算1~100的整數(shù)和

#include<stdio.h>main(){inti,sum;

sum=0; for(i=1;i<=100;i++){/*循環(huán)*/ sum=sum+i;}printf("\n1+2+3+...+99+100=%d",sum); }說明變量i,sum是整數(shù)類型賦值輸出格式控制注釋例3:通過鍵盤輸入兩個整數(shù),輸出其中較大的整數(shù)

#include<stdio.h>intmaxValue(intx,inty){intmax;

if(x>y)max=x;elsemax=y;returnmax;}

main(){intx,y,z;

printf("Enter2integers:");scanf("%d%d",&x,&y);z=maxValue(x,y);printf("Thelargervalueis%d.",z);}運行C程序的基本過程VisualStudio2010集成環(huán)境1、用戶界面2、創(chuàng)建工程

3、創(chuàng)建文件

4、編譯、連接和運行

5、運行界面Dev-C++集成環(huán)境1、用戶界面2、創(chuàng)建一個新文件或打開一個已經(jīng)存在的C源文件3、編譯、運行

4、運行界面1.3數(shù)據(jù)類型、常量、變量、輸入輸出與基本運算基本數(shù)據(jù)類型與數(shù)據(jù)的表示1、整型:整型指不帶小數(shù)點的數(shù)據(jù)類型。例如,123、-89、0。常用的整型是基本整型int。對于32位系統(tǒng),int類型的數(shù)據(jù)用4字節(jié)(32位二進制位)表示,字節(jié)(32位二進制位)表示,包括1位符號,有效位數(shù)為31位,取值范圍為-2

147

483

648~2

147

483

647。2、實型

實型是指帶小數(shù)點的數(shù)據(jù)類型。例如,78.34、0.0、-765.2、76.0。在C語言中,常用的實型是雙精度型,用double表示。double類型的數(shù)據(jù)用8字節(jié)(64位二進制位)表示,包括1位符號,11位指數(shù)和52位尾數(shù),

取值范圍為-1.797

693

134

862

32E308~1.797

693

134

862

32E308。3、字符型字符型是指其值僅含有一個字符的數(shù)據(jù)類型。在C語言中,字符類型的名稱是char,字符值用一對單引號括起來,并且每個字符對應(yīng)一個ASCII編碼,用1個字節(jié)(8位二進制位)表示。例如,‘0’、‘B’、‘#’對應(yīng)的ASCII編碼分別為48、66和35。

常量

常量是指在程序運行過程中始終不發(fā)生變化的量。1、整型常量

在C語言中,整型常量常用十進制形式。例如,120、3

270、-987、2、實型常量

在C語言中提供了兩種實型常量的書寫形式。一種是十進制小數(shù)形式,一種是指數(shù)形式。十進制小數(shù)形式:123.45、509.0、-0.98、0.0指數(shù)形式:1.87E+10表示1.87

10103、字符常量

字符常量由一對單引號(

)括起來,其內(nèi)部存儲表示是相應(yīng)字符的ASCII編碼。普通字符:例如:

P

、

@

9

轉(zhuǎn)義符是指用一個反斜杠(\)后跟一個特定字符或一個八進制或十六進制數(shù)值表示的字符。例如:

\n,\101

4、字符串常量

字符串常量用一對雙引號(

)括起來。例如:

ThisisaCprogram.

3871

K

都是字符串常量。變量變量是指其值可以改變的量,每個變量代表了不同的存儲單元。C語言規(guī)定:程序中的每一個變量,必須先定義后使用定義變量的語法格式為:<數(shù)據(jù)類型><變量名>[,<變量名>[,<變量名>...]];例如:intcount;C語言規(guī)定:變量名用標識符表示。標識符是由字母、數(shù)字和下劃線(_)組成的字符序列,其中第1個字符必須是字母,字母需要區(qū)分大小寫。變量的賦值變量定義之后并沒有一個確切的初始值,變量賦值就是將變量所屬數(shù)據(jù)類型的某個數(shù)值(介于取值范圍之中)放入系統(tǒng)為這個變量分配的存儲空間中的操作。在定義變量的同時為變量賦予一個初始值。

<數(shù)據(jù)類型><變量名>=<常量表達式>;例如:intdata=100;通過賦值操作為變量賦值。

<變量名>=<表達式>

例如:x=64;例4:根據(jù)圓半徑,計算圓的面積和周長。

#include<stdio.h>main(){doubleradius,area,perimeter;radius=20; area=radius*radius*3.14159;perimeter=2*radius*3.14159;printf("Theradiusofthecircleis%lf\n",radius);printf("Theareaofthecircleis%lf\n",area); printf("Theperimeterofthecircleis%lf\n",perimeter);}基本的輸入輸出1、字符的非格式化輸入getchar()

基本執(zhí)行過程為:等待用戶從標準輸入設(shè)備—鍵盤輸入一個字符。如果輸入成功,函數(shù)返回這個字符的ASCII編碼。例如:charch;ch=getchar();2、字符的非格式化輸出putchar()

putchar(ch),輸出參數(shù)ch代表的字符。例5:通過鍵盤輸入兩個字符,分別在兩行上顯示這兩個字符,每行顯示2次。#include<stdio.h>

main(){charch; /*定義變量ch*/

ch=getchar(); /*從鍵盤讀取一個字符*/putchar(ch); /*在屏幕上顯示2次輸入的字符*/putchar(ch);putchar('\n'); /*在屏幕上顯示換行*/ch=getchar(); /*從鍵盤讀取下一個字符*/putchar(ch); /*繼續(xù)在屏幕上顯示2次輸入的字符*/putchar(ch);putchar('\n'); /*在屏幕上顯示換行*/}3、格式化輸入scanf()scanf(<格式控制字符串>,<變量地址>,<變量地址>...);例如:scanf(“%d%d%f%f”,&x,&y,&f1,&f2);常用的格式控制說明符由“%”后跟一個特定字符或字符序列組成“%d”表示這個位置應(yīng)該輸入一個十進制整型數(shù)值;“%c”表示這個位置應(yīng)該輸入一個字符;“%f”表示這個位置應(yīng)該輸入一個實型數(shù)值,“%ld”表示這個位置應(yīng)該輸入一個長整型數(shù)值<變量地址>是準備用來存放輸入數(shù)據(jù)的變量地址。例如,&a、&value分別表示變量a、value的存儲地址例6:將輸入的角度轉(zhuǎn)換成弧度。#include<stdio.h>main(){intdegree; doubleradian;

printf("Enterdegree<int>:");scanf("%d",°ree);radian=3.14159*degree/180;printf("%ddegreesequalto%lfradians.",degree,radian);}

4、格式化輸出printf()

printf(<格式控制字符串>,<表達式>,<表達式>...);例如:printf(“Thisvalueis%d\n”,x);<格式控制字符串>的含義與scanf()函數(shù)相同。但在這里,還可以包含一些直接顯示的字符串。printf()函數(shù)的基本功能是將每個表達式的結(jié)果按照格式控制說明符的規(guī)則顯示到標準輸出設(shè)備——顯示器上。格式控制說明符需要與將要輸出的表達式一一對應(yīng)。在很多情況下,人們希望能夠更加準確地控制每個數(shù)值輸出時所占據(jù)的列數(shù),為此,C語言提供了相應(yīng)的功能。其格式為:%m和%m.nm表示數(shù)值輸出時在屏幕上占據(jù)的列數(shù),又稱為場寬,n表示輸出實型數(shù)值時小數(shù)點后的位數(shù)例如:

inta=365;charc='Z’;doublee=7865.298;printf("%6d%3c%12.6lf",a,c,e);算術(shù)運算符加(+)、減(-)、乘(*)、除(/)、取余(%)注意:*不能省略%(求余)運算對象只能是整型整型/整型相當于取整,一個為實型即為除法C語言允許char類型的變量或常量參與各種算術(shù)運算,但在運算時,它將被看成一個整型數(shù)值,其值為字符對應(yīng)的ASCII編碼。例如:‘A’+32等于用大寫字符’A’的ASCII編碼65與32相加結(jié)果為9737/兩個整數(shù)相除,結(jié)果仍為整數(shù)

5/2

的結(jié)果為2

5.0/2的結(jié)果為2.5

%求余運算判奇偶時用此運算符

5%3的結(jié)果為23%5的結(jié)果為

3#include<stdio.h>main(){intd1,d2,d3,d4,value;

printf("Enter4characters:");d1=getchar()-'0'; /*輸入數(shù)字字符,并轉(zhuǎn)換為個位數(shù)*/d2=getchar()-'0';d3=getchar()-'0';d4=getchar()-'0';value=d1*1000+d2*100+d3*10+d4; printf("Thevalueis%d\n",value); /*輸出結(jié)果*/}

例7:將連續(xù)輸入的4個數(shù)字字符拼成一個int類型的數(shù)值。自增、自減運算符++--++--可以實現(xiàn)變量的加1、減1操作。這兩個運算符既可以置于變量的前面,也可以置于變量的后面。也就是說,++i、--i、i++、i--、都是正確的書寫形式,它們的區(qū)別只有在表達式中才能夠顯現(xiàn)出來。a=10;b=++a;

表達式的值取修改后的值a為11,b為11a=10;b=a++;

表達式的值取修改前的值a為11,b為10算術(shù)表達式算術(shù)表達式是指僅包含算術(shù)運算符或自加(++)、自減(--)運算符的表達式。算術(shù)表達式的結(jié)果一定是數(shù)值類型的,即整型或?qū)嵭虲語言規(guī)定,在書寫表達式時,應(yīng)該遵循下列規(guī)則:(1)所有內(nèi)容都必須寫在一行上,例如:必須寫成7/8(2)在表達式中只允許使用圓括號。為了確保表達式中的每個運算符能夠按照所期望的順序進行計算,應(yīng)該適當?shù)靥砑永ㄌ枴#?)表達式中的乘號(*)不允許省略,例如:(a+1)(a-1)必須寫成(a+1)*(a-2)C語言提供了大量標準函數(shù),包括前面介紹過的getchar、putchar、printf、scanf等輸入/輸出函數(shù),也包括各種數(shù)學(xué)計算函數(shù)。1.4標準函數(shù)和EasyX庫函數(shù)數(shù)學(xué)標準函數(shù)函數(shù)原型 功能描述intabs(intx);返回int型x的絕對值doublefabs(doublex);返回double型x的絕對值doublesin(doublex);返回x的正弦,x是弧度doublecos(doublex);返回x的余弦,x是弧度doubletan(doublex);返回x的正切,x是弧度doubleexp(doublex);返回exdoublepow(doublex,doubley);返回xydoublesqrt(doublex);返回x的開平方doublefloor(doublex);返回小于x的最大整數(shù)doubleceil(doublex);返回大于x的最小整數(shù)#include<stdio.h> #include<math.h> /* 引入數(shù)學(xué)函數(shù)的聲明*/

main(){ inta,b,c; doubleS,A,B,AB; printf("輸入兩個角度和一個邊長:"); scanf("%d%d%d",&a,&b,&c); /*輸入兩個角和一條邊 */ A=3.14159*a/180; /*轉(zhuǎn)換為弧度*/ B=3.14159*b/180; AB=3.14159*(a+b)/180; S=c*c*sin(A)*sin(B)/sin(AB)/2; /*計算三角形面積*/ printf("\nS=%lf\n",S);}例8:三角形面積的計算。函數(shù)原型功能描述HWNDinitgraph(intwidth,intheight,intflag=0);初始化一個寬width高height的繪圖環(huán)境,返回窗口句柄voidcleardevice();用當前背景色清空屏幕voidclosegraph();關(guān)閉繪圖環(huán)境voidcircle(intx,inty,intradius);繪制以(x,y)為圓心,半徑為radius的圓voidellipse(intleft,inttop,intright,intbottom);以(left,top)為左上角,(right,bottom)為右下角形成的矩形為外接矩形,繪制一個空心橢圓voidrectangle(intleft,inttop,intright,intbottom);以(left,top)為左上角,(right,bottom)為右下角,繪制一個空心矩形voidpolygon(constPOINTpts[],intnum);以數(shù)組pts中的num個點作為頂點,繪制一個空心的橢圓voidmoveto(intx,inty);設(shè)置繪圖當前點為(x,y)voidlineto(intx,inty);在當前點和(x,y)之間繪制直線,并設(shè)置(x,y)為當前點voidline(intx1,inty1,intx2,inty2);從繪圖點(x1,y1)到(x2,y2)繪制一條直線voidputpixel(intx,inty,COLORREFcolor);在指定點(x,y)繪制一個顏色為color的像素點voidouttextxy(intx,inty,LPCTSTRtext);在指定點(x,y)輸出text給定的字符串EasyX函數(shù)第2章C語言的基本控制結(jié)構(gòu)2.3循環(huán)結(jié)構(gòu)2.2選擇結(jié)構(gòu)2.1順序結(jié)構(gòu)2.1順序結(jié)構(gòu)順序結(jié)構(gòu)是指按照語句的書寫順序依次執(zhí)行每條語句的語句結(jié)構(gòu)。2.2選擇結(jié)構(gòu)選擇結(jié)構(gòu)是指根據(jù)某些數(shù)據(jù)的取值或計算結(jié)果選取不同操作的處理方式。選擇結(jié)構(gòu)的描述由兩個基本部分組成,一是對選擇條件的描述;二是對處理分支的描述。

關(guān)系運算與邏輯運算

關(guān)系運算符運算符><>=<===!=功能大于小于大于等于小于等于等于不等于

邏輯運算符邏輯運算符&&||!功能邏輯與邏輯或邏輯非注意:對于數(shù)學(xué)表示形式0<a<10,不能直接地采用這種方式書寫,而需要將它分解成兩個關(guān)系運算,即分解成0小于a并且a小于10,并按照下列格式書寫:0<a&&a<10例如,對于邏輯表達式x>=0&&y++,如果x小于0,將不計算y++。對于邏輯表達式x>=0||y++,如果x大于或等于0,將不計算y++if語句

if(<條件表達式>)<真分支語句>if語句

if(<條件表達式>)<真分支語句>else<假分支語句>if(num<0){ value =-num;}else{ value =num;}value=num;if(num<0){ value =-num;}例1:北京地鐵票價的計算。#include<stdio.h>main(){ doublenum; intprice; printf("請輸入千米數(shù)(實數(shù)):"); scanf("%lf",&num); if(num>=0&&num<=6) price=3; elseif(num>6&&num<=12) price=4; elseif(num>12&&num<=22) price=5; elseif(num>22&&num<=32) price=6; elseif(num>32) price=(num-32)/20+7; if(num<=0) printf("非法輸入!\n"); else printf("票價是%d元\n",price); }多路選擇和switch語句

switch(<表達式>){case<常量>: <語句序列>case<常量>: <語句序列>......case<常量>: <語句序列>default: <語句序列>}執(zhí)行的基本過程:首先計算充當開關(guān)角色的表達式;然后,根據(jù)計算結(jié)果進行控制的轉(zhuǎn)移,即用開關(guān)值與下面每個case語句中的常量進行比較;如果開關(guān)值等于某個常量,則執(zhí)行該case語句中的語句序列;如果不存在等于開關(guān)值的case常量,則執(zhí)行default語句中的語句序列。

在switch語句中,所有的case常量不允許重復(fù)。在實際應(yīng)用中,經(jīng)常將break語句作為每個case分支的語句序列的最后一條語句,以表示該分支的計算結(jié)束,并隨后跳出switch語句,終止switch語句的繼續(xù)執(zhí)行。例2:通過鍵盤讀取兩個復(fù)數(shù)和運算符,完成復(fù)數(shù)運算的操作,并輸出計算的結(jié)果。#include<stdio.h>intmain(){ doublea,b,c,d,x,y,t; charop; /*保存運算符*/ printf(“\nEnterthefirstcomplexnumber:”); scanf(“%lf%lf”,&a,&b); getchar();printf(“\nEnteraoperator:”); scanf(“%c”,&op); /*輸入運算符*/ printf(“\nEnterthesecondcomplexnumber:”); scanf(“%lf%lf”,&c,&d);

switch(op){ /*檢查運算符*/

見下頁

}printf("Theresultis%lf+%lfi\n",x,y);}

case'+': x=a+c; y=b+d; break; case'-': x=a-c; y=b-d; break; case'*': x=a*c-b*d; y=b*c+a*d; break; case'/': t=c*c-d*d; if(t==0){ printf("Thedenominatoris0.\n"); return 0; } x=(a*c+b*d)/t; y=(b*c-a*d)/t; break; default: printf("Invalidationoperator.\n"); return 0; 2.3循環(huán)結(jié)構(gòu)while語句語法格式:while(<條件表達式>)<語句>例3:從鍵盤輸入10個整數(shù),計算它們的平均值

#include<stdio.h>main(){ intsum=0,i=1; intx;/*保存當前輸入的數(shù)據(jù)*/ printf(“\nEnter10integers:”); while(i<=10){ scanf(“%d”,&x); /*讀入整數(shù)x*/ i++; /*累加已輸入的數(shù)據(jù)個數(shù)*/ sum=sum+x; /*累加輸入的數(shù)據(jù)總和*/ } printf(“Theaveragevalueis%lf\n”,sum*1.0/(i-1));}for語句

語法格式:for(<初值表達式>;<條件表達式>;<增量表達式>)<語句>例4:從鍵盤讀入5個字符,找出其中ASCII值最大的字符,并將該字符輸出10次。#include<stdio.h>main(){ inti,x,max=0; for(i=0;i<5;i++){ x=getchar(); if(x>max) max=x; } for(i=0;i<10;i++) putchar(max); }dowhile語句語法格式:do<循環(huán)體語句>while(<條件表達式>);

例 intch,num=0; do{ ch=getchar(); if(ch>='0'&&ch<='9') num++; }while(ch!='\n');

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

intmain(){ doubleA,w,q,k; intx,y;

printf("請輸入正弦曲線的振幅、角速度、初相和偏距:\n"); scanf("%lf%lf%lf%lf",&A,&w,&q,&k);

initgraph(640,480); setorigin(40,240); line(-40,0,600,0); line(0,240,0,-240); setaspectratio(1.0,-1.0); for(x=0;x<640;x+=10){ y=A*sin(w*x+q)+k; if(x==0) moveto(x,y); else lineto(x,y); } _getch(); closegraph(); return0;}第3章計算機算法初步

3.3遞推與迭代法3.2窮舉法3.1算法的概念3.1算法的概念利用計算機求解問題的一般過程(1)問題分析階段(2)數(shù)據(jù)結(jié)構(gòu)設(shè)計階段(3)算法設(shè)計階段(4)編碼與調(diào)試階段

算法描述在計算機科學(xué)的發(fā)展過程中,人們已經(jīng)提出了很多種類的算法描述方法。一種是自然語言的描述方法。鑒于自然語言本身過于靈活且又缺乏嚴謹性,所以容易產(chǎn)生理解上的歧義。還有一種算法的圖形描述方式——流程圖。它采用一些標準的圖形符號描述算法的操作過程,從而避免了人們對非形式化語言的理解差異。

起止框I/O框處理框判斷框調(diào)用框連接框有向邊

常用流程圖符號例1:求解一元二次方程問題分析假設(shè)一元二次方程可以書寫成ax2+bx+c=0。可以看出,任何一個一元二次方程都由三個系數(shù)a、b、c惟一確定,所以,首先需要用戶輸入三個系數(shù),然后再根據(jù)一元二次方程的求解規(guī)則計算最終的結(jié)果,并將結(jié)果顯示輸出。算法描述

#include<stdio.h>#include<math.h>main(){ inta,b,c,t; printf(“Inputa,b,c:”); scanf(“%d%d%d”,&a,&b,&c); t=b*b–4*a*c; if(t<0) printf(“Nosolution\n”); elseif(t==0) printf(“X=%lf\n”,-b/(2.0*a)); else{ doublet0; t0=sqrt((double)t); printf(“X1=%lf,X2=%lf\n”,(-b+t0)/(2*a),(-b-t0)/(2*a));} }程序代碼

3.2窮舉法概述窮舉法,又稱為枚舉法,是人們?nèi)粘I钪谐S玫囊环N求解問題的方法。窮舉法的核心在于明確問題的所有可能性,并針對每種可能情況逐個進行判斷,最終找出正確問題的答案。

窮舉法應(yīng)用實例1:素數(shù)的判斷

所謂素數(shù)是指僅能被1和自身整除,且大于等于2的數(shù)值。判斷一個給定的數(shù)值是否是素數(shù)是窮舉法的典型實例。

例2:判斷給定整數(shù)是否是素數(shù)。問題分析為了檢查一個整數(shù)是不是素數(shù),可以采用窮舉法。假設(shè)給定的整數(shù)用x表示,則判斷過程就是確認x不能整除以2~x-1之間的任何整數(shù)。這就需要一一列舉出2~x-1之間的每個整數(shù)進行排查。

NY開始輸入x2

tt<xt加1x%t==0結(jié)束輸出“不是素數(shù)”輸出“是素數(shù)”YNt==xYN算法描述

#include<stdio.h>main(){ intx,t; printf(“Enteraninteger:”); scanf(“%d”,&x); for(t=2;t<x;t++) /*列舉小于x大于1的所有整數(shù)*/ if(x%t==0) break; if(t==x) /*是否通過循環(huán)條件出口*/ printf(“%disprime\n”,x); else printf(“%disn’tprime\n”,x);}程序代碼

窮舉法應(yīng)用實例2:百錢買百雞

“百錢買百雞”是我國古代數(shù)學(xué)家張丘建提出的一個著名的數(shù)學(xué)問題。假設(shè)某人有錢百枚,希望買一百只雞;不同的雞價格不同,公雞5枚錢一只,母雞3枚錢一只,而小雞3只1枚錢。試問:如果用百枚錢買百只雞,可以包含幾只公雞、幾只母雞和幾只小雞。

例3:百錢買百雞。

問題分析從題目要求可知:公雞、母雞和小雞的數(shù)量是有限的,都不會超過100。通過對不同數(shù)量的公雞、母雞和小雞進行組合,可以計算出購買這些雞所用的花費,但這個題目要求找出那些花費正好100枚且雞的總數(shù)也為100只的情況。因此,可以采用窮舉法,將不同的公雞、母雞和小雞的數(shù)量枚舉一遍,找出那些符合題目要求的解。

算法描述

#include<stdio.h>#include<math.h>

main(){intx,y,z;

for(x=0;x<=100/5;x++)for(y=0;y<=100/3;y++) for(z=0;z<=100;z++){ if(x+y+z==100&&15*x+9*y+z==300) printf(“x=%d,y=%d,z=%d\n”,x,y,z); }}程序代碼

3.3遞推與迭代法概述遞推常用于序列數(shù)據(jù)的計算。其基本策略是用已知結(jié)果和特定關(guān)系(遞推公式)計算中間值。采用遞推法進行問題求解的關(guān)鍵在于找出遞推公式和邊界條件。迭代也是計算機數(shù)值計算的一種基本算法,其基本策略是從初值出發(fā),不斷計算問題的近似解。遞推與迭代法應(yīng)用實例1:等比數(shù)列求和

所謂等比數(shù)列是指在一組數(shù)據(jù)中,后項和前項之前存在著一個固定的比例關(guān)系。例如:整數(shù)序列3、15、75、375的初值是3,后項與前項是5倍的關(guān)系,即前項乘以5得到后項。本題要求給定等比序列的首項和比例,計算這個數(shù)列的前10項之和。例4:等比數(shù)列求和。

問題分析等比數(shù)列的遞推公式為:

itemi =itemi-1*ratio

后項等于前項乘以比例值sumi =sumi-1+itemi

前i項之和等于前i-1項之和加當前項由于在重復(fù)上述遞推計算之前,需要將第1項的值累加到sum中,所以,需要先將item存入sum中。算法描述

#include<stdio.h>main(){ intitem,ratio,sum,i; printf(“\nEnterthefirstitemandratio:”); scanf(“%d%d”,&item,&ratio);

sum=item; for(i=1;i<10;i++){ item*=ratio; sum+=item; } printf(“Sumof10itemsis%d\n”,sum);}程序代碼

遞推與迭代法應(yīng)用實例2:求圓周率π圓周率π的計算公式為:π=4–4/3+4/5–4/7+4/9–4/11+…例5:求圓周率π。問題分析圓周率π的計算公式為:π=4–4/3+4/5–4/7+4/9–4/11+…圓周率是通過將數(shù)列4、-4/3、4/5…求和得到的。在這個數(shù)列中,每個數(shù)據(jù)項的取值與前一項及該項的序號存在著一定的關(guān)系??梢酝ㄟ^迭代,逐個計算出每一個數(shù)據(jù)項,再將它們累加起來。為了滿足要求的精度,可以通過檢查數(shù)據(jù)項的大小來控制循環(huán)的終止。由于數(shù)據(jù)項的絕對值是遞減的,且相鄰項的符號不同,如果第n個數(shù)據(jù)項的絕對值已經(jīng)小于精度值,則前n項之和一定已經(jīng)滿足精度要求了。算法描述

#include<stdio.h>#include<math.h>

main(){ inti=1,sign=1; doublePI=0.0,item; do{ item =sign*4.0/(2*i++-1); sign =-sign; PI +=item; }while(fabs(item)>1e-4); /*數(shù)據(jù)項精度控制循環(huán)*/

printf(“PI=%lf\n”,PI); }程序代碼

第4章數(shù)據(jù)的組織結(jié)構(gòu)(一)

4.3字符串的組織

4.2使用一維數(shù)組組織數(shù)據(jù)的應(yīng)用實例

4.1數(shù)組類型

4.4字符串處理函數(shù)及應(yīng)用實例

4.5二維數(shù)組

4.1數(shù)組類型數(shù)組類型的應(yīng)用背景(1)同時存在若干個用來描述同一性質(zhì)且不同個體的數(shù)據(jù)。(2)只有將這些數(shù)據(jù)組織在一起形成批量數(shù)據(jù),共同參與處理,很多操作才具有實際意義。例如:要將表示每個學(xué)生考試成績的所有整型數(shù)據(jù)組織在一起,以便共同參與諸如統(tǒng)計考試成績的分布情況、按照考試成績由高到低排名等一系列的操作。一維數(shù)組類型的定義

定義格式:<元素類型><數(shù)組變量名>[<元素數(shù)量>];例如:intvote[10];C語言規(guī)定:數(shù)組的下標從0開始,因此,表示這10個數(shù)據(jù)的下標為0~9

在C程序中,系統(tǒng)將會為每個數(shù)組型變量分配一片連續(xù)的存儲空間,所需要分配的存儲空間總數(shù)將取決于包含的元素個數(shù)和每個元素需要的存儲空間。

一維數(shù)組的初始化基本格式為:<元素類型><數(shù)組變量名>[<元素數(shù)量>]={<元素初值1>,<元素初值2>,......,<元素初值n>};例如:doublescore[5]={9.2,9.1,8.7,9.1,8.5};說明:1)為數(shù)組型變量中的每一個元素都提供了一個初始值。此時,可以省略方括號內(nèi)的數(shù)組元素數(shù)量。系統(tǒng)將根據(jù)花括號中包含的初值數(shù)目推測出數(shù)組含有的元素數(shù)量。

floatscore[]={9.2,9.1,8.7,9.1,8.5};2)對數(shù)組型變量的前面若干個元素賦予初值。此時可以使用下面這種書寫形式:

intletter[26]={10,9,8,7};

它的執(zhí)行結(jié)果是:將10、9、8、7分別賦予letter數(shù)組中下標為0、1、2、3的元素,后面的所有元素賦予初值0。

3)將數(shù)組型變量中的每一個元素賦予初值0。此時,可以使用下面這種簡化的書寫形式:

intvote[10]={0};一維數(shù)組元素的引用及基本操作數(shù)組元素的引用<數(shù)組變量名>[<下標表達式>]數(shù)組的賦值利用賦值語句為數(shù)組賦值

for(i=0;i<10;i++){vote[i]=0;}調(diào)用標準輸入函數(shù)為數(shù)組賦值

for(i=0;i<13;i++){scanf(“%f”,&score[i]);}數(shù)組的輸出

for(i=0;i<10;i++){printf(“%5d”,vote[i]);}查找問題

查找是指根據(jù)某個給定的條件,在一組數(shù)據(jù)中搜索是否存在滿足該條件的數(shù)據(jù)的過程。4.2使用一維數(shù)組組織數(shù)據(jù)的應(yīng)用實例例1:已知某個班級35名學(xué)生的某門課程的考試成績。請編寫一個程序,查看在這個班級中是否存在不及格的學(xué)生。

問題分析用一維數(shù)組記錄每位學(xué)生的考試成績,下標表示每個學(xué)生的編號,元素內(nèi)容表示考試成績。查找可以通過從前往后依次查看每個元素內(nèi)容的過程實現(xiàn)。算法描述

#include<stdio.h>#include<stdlib.h>#include<time.h>#defineNUM35/*學(xué)生人數(shù)*/main(){ intscore[NUM]; inti;/*隨機產(chǎn)生35個考試成績*/srand(time(0));for(i=0;i<NUM;i++){ score[i]=rand()%100; } /*顯示35名學(xué)生的考試成績*/ for(i=0;i<NUM;i++){ printf("\nNo.%d:%d",i+1,score[i]); }程序代碼

/*順序查找是否存在不及格的學(xué)生*/ for(i=0;i<NUM;i++){ if(score[i]<60)break; }

/*輸出查找結(jié)果*/ if(i<NUM) printf("\nNotallpass."); else printf("Allpass.");}例2:已知一個按非遞減有序排列的整型數(shù)列(12,23,30,45,48,50,67,82,91,103)。請編寫一個程序,查找其中是否存在與給定key相等的數(shù)值。

算法描述

#include<stdio.h>#defineNUM10main(){intvalue[NUM]={12,23,30,45,48,50,67,82,91,103};/*非遞減整型數(shù)列*/intlow,high,mid,key;printf("\nEnterakey:"); /*輸入查找的數(shù)值*/scanf("%d",&key);low=0; high=NUM-1;while(low<=high){ mid=(low+high)/2; if(value[mid]==key) break; if(value[mid]<key)low=mid+1; elsehigh=mid-1;}if(low<=high) printf("\n%disfoundat%d.",key,mid); /*確認break出口*/else printf("\n%disnotfound.",key); /*確認循環(huán)正常出口*/}程序代碼

排序問題

將一組無序的數(shù)列重新排列成非遞減或非遞增的順序是一種經(jīng)常需要的操作。例如,在管理學(xué)生成績的應(yīng)用程序中,可以用一個數(shù)列表示一個班級的學(xué)生成績,并按照從高到低的順序重新排列,以便確定獲得獎學(xué)金的學(xué)生。

例3:假設(shè)用戶通過鍵盤輸入一個整型數(shù)列。請編寫一個程序,將其按照從小到大的順序重新排列。問題分析(選擇排序)首先從n個數(shù)據(jù)中選擇一個最小的數(shù)據(jù),并將它交換到第1個位置;然后再從后面n-1個數(shù)據(jù)中選擇一個最小的數(shù)據(jù),并將它交換到第2個位置;以此類推,直至最后從兩個數(shù)據(jù)中選擇一個最小的數(shù)據(jù),并將它交換到第n-1個位置為止,整個排序操作結(jié)束。算法描述

#include<stdio.h>#defineNUM10 /*參與排序的數(shù)據(jù)個數(shù)*/main(){intdata[NUM]; /*存放參與排序的所有整數(shù)*/inti,j,min,temp;/*通過鍵盤輸入待排序的整型數(shù)列*/printf("\nEnter%dintegers.",NUM);for(i=0;i<NUM;i++){scanf("%d",&data[i]);}/*顯示原始整型數(shù)列*/printf("\n%dintegersare:",NUM);for(i=0;i<NUM;i++){printf("%5d",data[i]);}程序代碼for(i=0;i<NUM-1;i++){min=i;for(j=i+1;j<NUM;j++){ if(data[j]<data[minValue]) minValue=j;}if(min!=i){ /*交換*/ temp=data[i]; data[i]=data[min]; data[min]=temp;}}/*輸出排序后的結(jié)果*/printf("\nOrderinglistis:\n");for(i=0;i<NUM;i++){printf("%5d",data[i]);}}字符串的組織形式字符串是指一個有限長度的字符序列,字符串常量用一對雙引號(“”)括起來。

字符串中所包含的字符個數(shù)被稱為字符串長度。

4.3字符串的組織字符串的初始化charstr[]=“Cprogram”;charstr[]={‘C’,‘’,‘p’,‘r’,‘o’,‘g’,‘r’,‘a(chǎn)’,‘m’,‘\0’};

對于這種初始化形式,系統(tǒng)將其視為字符操作,而不是字符串操作,因此不會在尾部添加結(jié)束符‘\0’。

“Cprogram”的存儲狀態(tài)

0123456789C

program\0字符串的輸入輸出

1、gets(str);2、scanf(“%s”,str);gets以換行符作為輸入結(jié)束標記,但不保存換行符。scanf以空格、換行符或制表符作為結(jié)尾。字符串的輸出

1、puts(str);

2、printf(%s”,str);puts將字符串的內(nèi)容顯示到標準輸出設(shè)備——屏幕上,并換行。

字符串標準函數(shù)

在C語言的標準函數(shù)庫中,提供了30余種與字符串處理有關(guān)的標準函數(shù),從而大大地提高了字符串處理的能力,降低了字符串處理的復(fù)雜程度。

4.4字符串處理函數(shù)及應(yīng)用實例

計算字符串長度

strlen(str);這個函數(shù)的功能是返回字符串中所包含的字符個數(shù),即字符串長度。字符串結(jié)束標志‘\0’不計算在內(nèi)。字符串比較

strcmp(str1,str2);兩個字符串進行比較時將依據(jù)每個字符對應(yīng)的ASCII編碼決定其大小。

例4:用戶注冊程序。#include<stdio.h>#include<string.h>

main(){ charuserid[32]; charpassword1[16],password2[16]; do{ puts("請輸入用戶名:"); gets(userid); if(userid[0]!='\0') break;

puts("用戶名不能為空"); }while(1); do{ puts("請輸入密碼(六位以上):"); gets(password1); if(strlen(password1)<6){ puts("密碼長度不足"); continue; } puts("請再次輸入同一密碼"); gets(password2); if(0==strcmp(password1,password2)) break; puts("兩次輸入密碼不同,請重新輸入"); }while(1); puts("祝賀您成功注冊我們的網(wǎng)站");}

程序代碼字符串拷貝

strcpy(str1,str2);其中str2是將要被拷貝的字符串,str1是用于存放拷貝結(jié)果的存儲區(qū)域。字符串連接

strcat(str1,str2);其中str1和str2是兩個字符串。這個函數(shù)的功能是:將str2連接在str1之后,并在結(jié)束處添加一個字符串結(jié)束符‘\0’字符串轉(zhuǎn)換成數(shù)值類型

atof(str);atoi(str);atol(str);其中str是一個字符串。atof()的返回類型是double,它可以將字符串str轉(zhuǎn)換成一個雙精度數(shù)值;atoi()的返回類型是int,它可以將字符串str轉(zhuǎn)換成普通整型;atol()的返回類型是long,它可以將字符串str轉(zhuǎn)換成長整型(long)。#include<stdio.h>#include<stdlib.h>main(){charnum1[20],num2[20];doubled1,d2,sum;printf("\nEnterthefirstnumber:");gets(num1); /*輸入第1個用字符串表示的實型數(shù)值*/printf("\Enterthssecondnumber:");gets(num2); /*輸入第2個用字符串表示的實型數(shù)值*/d1=atof(num1);/*將第1個字符串轉(zhuǎn)換成double類型*/d2=atof(num2);/*將第2個字符串轉(zhuǎn)換成double類型*/sum=d1+d2;/*將2個double類型數(shù)值相加*/printf("\n%s+%s=%.3lf",num1,num2,sum);/*顯示結(jié)果*/}程序代碼大小寫轉(zhuǎn)換

strlwr(str);strupr(str);str是一個字符串。標準函數(shù)strlwr()可以將字符串str中出現(xiàn)的所有大寫字母轉(zhuǎn)換成小寫字母;標準函數(shù)strupr()可以將字符串str中出現(xiàn)的所有小寫字母轉(zhuǎn)換成大寫字母。4.5二維數(shù)組

二維數(shù)組的定義

定義格式:<元素類型><數(shù)組變量名>[<元素數(shù)量1>][<元素數(shù)量2>];例如:intvalue[5][4];

value數(shù)組的每個元素類型為int,包含5行4列共20個元素

一旦定義了一個二維數(shù)組型變量,系統(tǒng)就會立即為其分配相應(yīng)的存儲空間用于存放數(shù)組中的每個元素。存儲空間的數(shù)量取決于數(shù)組元素的類型和所定義的行數(shù)、列數(shù),即存儲空間數(shù)量=每個元素所占用的字節(jié)數(shù)量

行數(shù)

列數(shù),并按照行列順序依次排列。

二維數(shù)組的初始化inta[4][3]={{12,11,10},{9,8,7},{6,5,4},{3,2,1}};inta[4][3]={12,11,10,9,8,7,6,5,4,3,2,1};inta[][3]={12,11,10,9,8,7,6,5,4,3,2,1};如果只對二維數(shù)組變量中的部分元素進行初始化,可以使用下面兩種形式。intarray1[4][3]={{},{1},{1,2},{1,2,3}};intarray2[4][3]={10,9,8,7,6,5};二維數(shù)組元素的引用及基本操作數(shù)組元素的引用<數(shù)組變量名>[<下標表達式1>][<下標表達式2>]數(shù)組的賦值

for(i=0;i<ROWS;i++)for(j=0;j<COLS;j++)value[i][j]=i+j;數(shù)組的輸入

for(i=0;i<ROWS;i++)for(j=0;j<COLS;j++)scanf(“%d”,&value[i][j]);數(shù)組的輸出

for(i=0;i<ROWS;i++){for(j=0;j<COLS;j++)printf(“%4d”,value[i][j]);putchar(‘\n’);}二維數(shù)組的應(yīng)用實例例5:判斷給定方陣是否為對稱矩陣。

問題分析對于一個給定的N

N矩陣array,如果矩陣中的每個元素都滿足array[i][j]=array[j][i],則稱這個矩陣為對稱矩陣。在判斷一個給定的矩陣是否為對稱矩陣時,只需要用下三角部分的每個元素與對應(yīng)的上三角元素進行比較。如果每一對元素都相等,這個矩陣就是對稱矩陣,否則,就是非對稱矩陣。算法描述

#include<stdio.h>#defineNUM5矩陣行列數(shù)main(){intm[NUM][NUM];/*定義二維數(shù)組變量*/inti,j;/*輸入矩陣*/

printf("\Enter%drows%dcolsdatasforthemaxtrix:\n",NUM,NUM);for(i=0;i<NUM;i++)for(j=0;j<NUM;j++) scanf("%d",&m[i][j]);/*顯示矩陣*/for(i=0;i<NUM;i++){for(j=0;j<NUM;j++) printf("%4d",m[i][j]);printf("\n");}程序代碼/*判斷矩陣是否對稱并輸出相應(yīng)的結(jié)果*/for(i=0;i<NUM;i++)for(j=0;j<i;j++) if(m[i][j]!=m[j][i]){ printf("\nThematrixisn'tsymmetrical."); return0; }printf("\nThematrixissymmetrical.");}5.3函數(shù)與數(shù)組的應(yīng)用實例5.2自定義函數(shù)5.1函數(shù)概述5.4遞歸算法與遞歸函數(shù)

5.5變量的作用域和生存期第5章程序的組織結(jié)構(gòu)

5.1函數(shù)概述結(jié)構(gòu)化程序設(shè)計方法的核心是功能分解、逐步求精,具體的實現(xiàn)策略是將復(fù)雜的問題逐步分解成相對簡單的子問題,這樣將有利于降低解決問題的難度,提高程序開發(fā)的效率。將一個問題分解成若干個子問題的過程稱為模塊化。在C程序中,模塊用函數(shù)實現(xiàn)。函數(shù)是構(gòu)成C程序的基本單位。它由函數(shù)首部和函數(shù)體兩個部分組成,函數(shù)首部包含函數(shù)的返回類型、函數(shù)名稱和參數(shù)表的聲明,函數(shù)體包含實現(xiàn)特定功能所需要執(zhí)行的語句序列。C語言提供了很多標準函數(shù),它們被放置在一起,形成了一個標準函數(shù)庫。函數(shù)原型函數(shù)原型是指不包含函數(shù)體的函數(shù)聲明。

C語言規(guī)定,所有的函數(shù)必須先定義后調(diào)用。對于標準函數(shù)而言,由于它們的定義已經(jīng)在C語言提供的標準函數(shù)庫中,所以,人們在調(diào)用它們的時候,只需要在程序的前面利用編譯預(yù)處理命令include將相應(yīng)的函數(shù)原型加入到程序中就可以了。5.2自定義函數(shù)函數(shù)的定義基本格式

<函數(shù)返回類型><函數(shù)名>(<參數(shù)表>)

{ <函數(shù)體>;

}

例:

doubledistance(intx,inty){ doubled; d=sqrt(x*x+y*y); returnd;}C語言規(guī)定,一個函數(shù)可以有返回值,也可以沒有返回值。如果有返回值,返回值的類型在函數(shù)名前聲明,并在函數(shù)體中利用return語句將返回值返回;如果沒有返回值,在函數(shù)名前聲明void。

函數(shù)名不但應(yīng)該符合C語言的自定義標識符命名規(guī)范,還應(yīng)該“見名知意”。參數(shù)表是函數(shù)之間交換信息的接口。既可以通過它將外界的數(shù)據(jù)傳遞給函數(shù),也可以通過它將函數(shù)的操作結(jié)果帶出函數(shù)。如果形式參數(shù)屬于一維數(shù)組類型,無須指出一維數(shù)組的元素個數(shù)。函數(shù)體是函數(shù)的具體實現(xiàn)。函數(shù)的調(diào)用

函數(shù)調(diào)用語句的基本格式為:

<函數(shù)名>(<實在參數(shù)表>);實在參數(shù)與形式參數(shù)的數(shù)據(jù)類型和個數(shù)一一對應(yīng)。

函數(shù)的返回值在聲明函數(shù)的時候,函數(shù)名前使用了保留字void,說明這個函數(shù)沒有返回值;否則,這個函數(shù)執(zhí)行完畢后,應(yīng)該返回一個相應(yīng)類型的數(shù)值。

return表達式;參數(shù)的傳遞

定義函數(shù)時所給的參數(shù)被稱為形式參數(shù),這是由于當函數(shù)沒有處于執(zhí)行狀態(tài)時,系統(tǒng)并不為這些參數(shù)分配存儲空間,因此,在調(diào)用函數(shù)時,參數(shù)傳遞需要經(jīng)歷兩個基本步驟:首先,根據(jù)形式參數(shù)的聲明格式,為每一個形式參數(shù)分配存儲空間;然后再將實在參數(shù)的值賦給對應(yīng)的形式參數(shù)。例1:給定的任意整數(shù)N可能存在兩個素數(shù),它們的和等于N。請編寫程序,輸入整數(shù)N,輸出滿足條件的所有素數(shù)。自定義函數(shù)的應(yīng)用實例問題分析對于這個問題,枚舉法顯然是最直接的解決方法,也就是逐個檢查小于N/2的每個整數(shù)n;如果是素數(shù),則檢查N-n是否是素數(shù),從而找出所有結(jié)果。

#include<stdio.h>

intisprime(intx);

main(){ intn,m;

printf("請輸出一個正整數(shù):"); scanf("%d",&m); for(n=2;n<m/2;n++) { if(isprime(n)&&isprime(m-n)) printf("素數(shù)%d+%d等于%d\n",n,m-n,m); }}intisprime(intx){ intt;

for(t=2;t<x;t++) if(x%t==0) return0; return1; }例2:計算

要求精確度達到10-6。

問題分析在這個公式中,第i項的分子是xi;分母是i!。ex是一個常用的數(shù)學(xué)計算,因此有必要設(shè)置了一個函數(shù)expx專門用于該計算。此外,每個數(shù)據(jù)項都需要計算xi和i!。這些計算顯然是相對獨立的,都有各自的算法,因此分別設(shè)置函數(shù)power和factory來完成。算法描述

#include<stdio.h>longpower(intx,inty);longfactorial(intn);doubleexpx(intx);main(){intx;printf("\nEnterx:");scanf("%d",&x);printf("\ne^%d=%f",x,expx(x));}longpower(intx,inty) /*計算xy*/{intresult=1;for(;y>0;y--) /*循環(huán)y次*/ result*=x; /*x個y相乘*/returnresult;}程序代碼intfactorial(intn) /*計算n!*/{ intresult=1;

while(n>1) /*n!=

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論