程序設(shè)計(jì)導(dǎo)引及實(shí)踐_第1頁
程序設(shè)計(jì)導(dǎo)引及實(shí)踐_第2頁
程序設(shè)計(jì)導(dǎo)引及實(shí)踐_第3頁
程序設(shè)計(jì)導(dǎo)引及實(shí)踐_第4頁
程序設(shè)計(jì)導(dǎo)引及實(shí)踐_第5頁
已閱讀5頁,還剩257頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

前 致 第一章C/C++語言概 變 變量的........................................................................................................... 常 注 分支語 if語 循環(huán)語 while語 do-while語 break語 continue語 函 數(shù) 字符 指 空指 結(jié) 用fopen打開文 用fclose關(guān)閉文 用fscanf讀文 用fgetc讀文件,用fputc寫文 用fgets函數(shù)讀文件,fputs函數(shù)寫文 用fread讀文件,用fwrite寫文 用fseek改變文件當(dāng)前位 第二 簡單計(jì)算 練習(xí) 第三章數(shù)制轉(zhuǎn)換問 練習(xí) 第四章字符串處 例題:統(tǒng)計(jì)字符 例題:487- 例題:子 例題:最難的問 第五章日期和時(shí)間處 練習(xí) 第六章模 練習(xí) 第七章高精度計(jì) 練習(xí) 第八章枚 基本思 練習(xí) 第九章遞 例題:那契數(shù) 練習(xí) 第十章動(dòng)態(tài)規(guī) 例題:Help 練習(xí) 第十一章鏈 練 第十二章二叉 練 附錄一:程序評(píng)測系統(tǒng)介 序成的三角形之類的“玩具”程序,而對(duì)計(jì)算機(jī)科學(xué)的基礎(chǔ)與---算法一無所知,不明白大學(xué)程序評(píng)測系統(tǒng)"(PekingUniversityOnlineJudgeSystem,簡稱“POJ”)是一個(gè)免費(fèi)的公益性網(wǎng)上程序設(shè)計(jì)題庫,為http 工作和生活中的實(shí)際問題。這些題目有易有難,比如最簡單的題“A+BProblem”就是給出兩學(xué)。思考題沒有答案,以便教師提問,討論。讓學(xué)生少走彎路。這些錯(cuò)誤都總結(jié)生在POJ上提交的程序,因而極具典型性。理信息系統(tǒng)開發(fā)環(huán)境Geo-Union的主要設(shè)計(jì)者和代碼編寫者之一,曾經(jīng)圖原空間的科學(xué)委員,ACM競賽代表隊(duì)的原任和現(xiàn)任領(lǐng)隊(duì)。余華山多年來p_HPF系統(tǒng)的主要研制者之一,主持開發(fā)了計(jì)算網(wǎng)格協(xié)同平臺(tái)Harmonia系統(tǒng)。 育科研網(wǎng)格Grid公共軟件支撐平臺(tái)CGSP的研制過程中,他是總體設(shè)計(jì)的主要之程序運(yùn)行過程中任意時(shí)刻都清楚語句運(yùn)行到哪里了,當(dāng)前數(shù)據(jù)的內(nèi)存區(qū)的內(nèi)容是什,語句序列,以及常用的C語言標(biāo)準(zhǔn)庫函數(shù)。甫臣和徐鵬程同學(xué)開發(fā)的。之后應(yīng)甫臣同學(xué)用了三年時(shí)間進(jìn)行、改進(jìn)和完善。2006年應(yīng)甫臣畢業(yè)離校后,系統(tǒng)由同學(xué)和改進(jìn)。和同學(xué)在POJ系統(tǒng)上先后組織辛勤付出,就沒有這本書最大的特色-網(wǎng)上同步程序設(shè)計(jì)練習(xí)。另外,在過去幾年的教學(xué)中,有一大批助教、acm代表隊(duì)的隊(duì)員以及上課的學(xué)生.cppC++的語法進(jìn)C語言C++C/C++語言中,……”本書提到的C/C++語言特性,以目前流行的32位計(jì)算機(jī)和操作系統(tǒng)上的情況為準(zhǔn)。voidmain(){printf("o}#include被包含的文件的文件名。C語言中提供了一些可以被直接拿來使用、能夠完成某些特定功能printf就是一個(gè)能往屏幕上輸出一串字符的庫函數(shù)。main(){printf("} o這條語句的作用是在屏幕上輸出一串字符“oWord!”然后換行?!癨n”的作用就是換關(guān)的語句:變量的定義、變量的賦值、和變量的。int;C/C++語言中變量名是滿足如下規(guī)定的一個(gè)符號(hào)序列:1)由字母、數(shù)字或(和)下劃線組成;2)第一個(gè)符號(hào)為字母或下劃線。需要的是,同一個(gè)字母的大寫和小寫是兩個(gè)不同的符號(hào)。所以,team和TEAM是兩個(gè)不同的變量名。intnumberOfStudents= 36intcount;temp=15;count=temp;count=count+1;temp=count;inttotal=0;intp1=5000;intp2=300;intp3=1000;intp4=1000 p1+p2+p3+p4賦給變量‘total’。最后一句執(zhí)行后,‘total’的值變?yōu)?300。int此處的“int”表示了變量nNumbernNumber是一個(gè)“整型變浮點(diǎn)數(shù),還是字符等)。不同數(shù)據(jù)類型的變量,占用的空間大小不同。除了“int”以外,longint4short:短整型。short2個(gè)字節(jié),因而能表示的數(shù)的范圍是-215-215-1。能表示的數(shù)的范圍是:0-232-1unsignedlongunsignedint個(gè)字節(jié),能表示的數(shù)的范圍是:0-216-1charc= float:單精度浮點(diǎn)型。float類型的變量表示一個(gè)浮點(diǎn)數(shù)(實(shí)數(shù)4個(gè)字節(jié)。double:雙精度浮點(diǎn)型。double8個(gè)字節(jié),#includeint{intn1=shortcharc=doubled1=doublen2 printf("c=%c,n2=%d\n",c,c //cprintf("c=%c,n1=%d\n",c,n1 d2 return18.該程序中printf語句的用法比較復(fù)雜,請(qǐng)參看2.10.1節(jié)關(guān)有printf語句的詳細(xì)說明。11charint類型的變量。語句執(zhí)行時(shí),先n113785620x62。本條語句執(zhí)行完畢后,c的0x6298。98是字母’b”Ascii碼,因此,本語句執(zhí)行后,c中就存放著字母’b’。需要的是,本語句的自動(dòng)轉(zhuǎn)換過程不會(huì)改變n1的值。浮點(diǎn)數(shù)自動(dòng)轉(zhuǎn)換成整數(shù)的規(guī)則是去掉小數(shù)部分,因此n1的值變?yōu)?。d1的值不改變。值語句,使得c變?yōu)槠浜蟮牡?個(gè)字母(比如,將c從’a’變成e。解答見后。形式:直接寫出值,或用#define語句為數(shù)據(jù)定義一個(gè)由符號(hào)組成的標(biāo)識(shí)符,標(biāo)識(shí)符名-1是整數(shù)類型的常量;1.5,23.60.0-0.6789100.456是浮點(diǎn)類型的常量;'a','p',#define #defineMAPWIDTHTH voidmain(){intmapSize=MAPLENGTH*MAPWIDTHprintf(“Themapsizeis%d\n”,}MAPLENGTH100。在定義語句之后,MAPLENGTH100。同樣地,MAPWIDTH也是一個(gè)整數(shù)類型的常量,它的值是80。這段程序的運(yùn)行結(jié)果是輸出一個(gè)整數(shù)8000。八進(jìn)制常量以數(shù)字“0”開頭的,比如0123就是八進(jìn)制的 因?yàn)橐?開頭代表是八進(jìn)制數(shù),而八進(jìn)制數(shù)中是不能出現(xiàn)數(shù)字8和9的。十六進(jìn)制常量以“0x”開頭。比如,0x12161218。c12、d13、e14、f1516進(jìn)制中的每一位正好對(duì)應(yīng)于二進(jìn)制的4位,因此,十六進(jìn)制常量用起來十分方便,也非常有用。思考題1.4:什么樣的常量在程序運(yùn)行期間會(huì)象變量一樣,需要用一片內(nèi)存空間來存C/C++語言中的“-”“*”“/”等符號(hào),表示加、減、乘、除等運(yùn)算,這些表“”運(yùn)算符需要兩個(gè)操作數(shù),因此它是雙目運(yùn)算符。式“4-3+12f是一個(gè)浮點(diǎn)型變量,那么表達(dá)式“f”的值就是變量f的值,其類型是浮點(diǎn)型。aba除以bC/C++a、b是兩個(gè)整數(shù)類型的變量或者常量,int{inta=intb=doubled=printf("%f\n",d=printf("%f\n",d=printf("%f\n",d=printf("%f\n",return14.5a、ba/b3d的值就變成3.0。自增運(yùn)算符“++1。只有一個(gè)操作數(shù),是單目運(yùn)算變量名用法++變量名#include{intn1 n2=n2 ++n1=n2n1=++ 8n21n2n18執(zhí)行賦值運(yùn)算符用于對(duì)變量進(jìn)行賦值,分為簡單賦值(=)、復(fù)合算術(shù)賦值(+=,-=,*=,和復(fù)合位運(yùn)算賦值(&=,|=,^=,表達(dá)式“ab”的值就是aainta, a=b=a+=b等效于a=a+b,但是前者執(zhí)行速度比后者快。-=、*=、/=、%=+=00值到底是多少,C/C++語{intn1= n2= n3n1 n3n3=n1<n2; //n3的值變?yōu)槟撤?值n3=n1==4; //n3的值變?yōu)槟撤?值n3=n1!=4; //n3的值變?yōu)?n3n1 n3}exp1&&exp2n4,那么“n4&&n5”n>=2&&n<5”的值就是真。假,其他情況,“exp1||exp2n4,那么“n4||n5”的值就是真,“n<=2||n>5”的值就是假。的值就是真。比如,表達(dá)式“!(4<5)”的值就是假。 intn80,而其余位不變,則可以執(zhí)行:n=n&0xffffff00;n&=n&=表達(dá)式“n&0x80”的值是否等于0x80即可。行或操作。只有對(duì)應(yīng)的兩個(gè)二進(jìn)位都為0時(shí),結(jié)果的對(duì)應(yīng)二進(jìn)制位才是0,否則為1。例如:表達(dá)式“21|1823(10111n81,而其余位不變,則可以執(zhí)行:n|=0xff;1,0。例如,表達(dá)式“~21”的值是無符號(hào)整型數(shù)0xffffffea,下面的語句:printf("%d,%u,%x",~21,~21,- 00000000000000000000000000000000000000000000000000001001#include{intn1=shortn2=unsignedshortn3=unsignedcharc=n1<<=n2<<=n3<<=c<<=printf("n1=%x,n2=%d,n3=%d,c=%x,c<<4=%d",n1,n2,n3,c,c<<13.上面程序的輸出結(jié)果是000000000000111115)31,左移后n312n332768。 ,因此左移6位后,就變?yōu)?0000000000000c00,3072將一起移動(dòng),并且大多數(shù)C/C++編譯器規(guī)定,如果原符號(hào)位為1,則右移時(shí)右邊就補(bǔ)充1,原符號(hào)位為0,則右移時(shí)就補(bǔ)充0。、#include{intn1=shortn2=-unsignedshortn3=unsignedcharc=n1=n2>>=n3>>=c>>=printf("n1=%x,n2=%d,n3=%x,c=%x",n1,n2,n3,13.1111111111111110,162。語句10中,n3是無符號(hào)的16位整數(shù),原來其值為0xffe0。盡管最是1,但由于11,c0xf,31。:intan(0n31),要求寫一個(gè)表達(dá)式,使該表達(dá)式的值和a的第n位相同。sizeof量,那么sizeof(n)的值就是2。doublef=intn=(int)ff=n/2f=(double)n/24使用強(qiáng)制轉(zhuǎn)換運(yùn)算符(double)n2,那么得到的值就是一個(gè)浮點(diǎn)數(shù)。因此本語句執(zhí)行后,f4.5。小節(jié)的例子程序的語句11,也說明了強(qiáng)制轉(zhuǎn)換運(yùn)算符的這種用法。再算4&7,結(jié)果是4。4&2554&21.[](2-~!++--強(qiáng)制類型轉(zhuǎn)3 4+5 6 7 8&9^|=/*mp3程author:GuoWeiintnBitrate; /*比特率,以kb為單位*/intnSize; /*以字節(jié)為單位*/}main()int //kbint //}ifif(i>0)y=x/else}

x=i;y=-0,則xi,yx。當(dāng)ifif(i>0) /**/if(j>i)x=x=if(i>0 /*if(j>ix=}x=switchcase語句用來控制比較復(fù)雜的條件分支操作。switchswitch…}switchcasecase后面的常量表達(dá)switch語句結(jié)束,或者遇到一個(gè)則從default后面的語句開始執(zhí)行到switch語句結(jié)束。句中,如果遇到break語句,則整個(gè)switch語句結(jié)束。例如:…}defaultcase出現(xiàn)的地方。switch語句的例子:switch(c){casecase'a': default:}total的值加1。下面是一個(gè)加入了break語句的例子:switch(i)case-case0case1}

break語句,使得每種情況處理完之后,就結(jié)switchi1,n1i0,z1;i1,p1break不是必須的,因?yàn)槌绦蛞呀?jīng)執(zhí)行了最后,保留它只case'a'case'b'case'c'case'd'case'e'case'f'在這個(gè)例子中,無論表達(dá)式取值在'a''fx1語句有:for;while;dowhile;break;continue;等。for可以控制一個(gè)語句或語句組重復(fù)執(zhí)行限定的次數(shù)。for的語句體可以執(zhí)行零或多for語句開始時(shí)設(shè)定初始條件,并在語句的每次循環(huán)中改變一些變量的值。for語句的語法如下:面就是下一次循環(huán)開始,循環(huán)操作表達(dá)式被執(zhí)行。breakgotoreturnfor語句。continue語句可以把控制直接for(;;for(i=n2=n3=0;i<=100;i++{if(i%2==0n2++;elseif(i%3==0n3}3in2n30。然后把i100for的值大于100。while下面是一個(gè)while語句的例子:inti=100;intsum=while(i>0)sum=sum+i*i}i0i0while語句結(jié)束。do-whiledo-while語句結(jié)束,程序繼續(xù)執(zhí)行do-whilebreakgotoreturninti=100;intsum=0;do{sum=sum+i*i;}while(i>0isumdo-while語句后,isum否則do-while語句結(jié)束。breakbreakdo、for、switchwhilebreakfor(i=0;i<10;i++){/*Executionreturnsherewhenstatementisexecuted*/

j++)

if((i+j)%5==0)printf(“i=%dj=%d\n”,i,j);}}}122154321continue的頂部,開始下一輪的循環(huán)。continue語句的語法表示如下:do、forwhiledowhile下面是一個(gè)continue語句的例子:intx=0;inty=0;while(i>0{i--x=i%if(x==1y=y+x;}循環(huán)在x等于0時(shí)結(jié)束。}}1//語句可能與參數(shù)有關(guān)2//return//void}intadd(intx,y){return}的程序。兩個(gè)參數(shù)x和y的值是調(diào)用它的函數(shù)給定的。intmultiple(intx,int //voidinta=0,scanf(“%d%d”,&a,printf(“%d\n”,multiple(a,b));//}intmultiple(intx,int //returnx*intadd(intx,y){return}voidintn1=5,n2=6,n3;n3=add(n1,n2);}n3add(n1,n2)7AA的代碼段,轉(zhuǎn)去執(zhí)行另外一段BBA中函數(shù)調(diào)用的位置,繼續(xù)執(zhí)行后面的語句。在函數(shù)調(diào)用的過程中,程序組件ABB結(jié)束后,可以通過返回值將其執(zhí)行結(jié)果傳回程序組件A。intmax(inta,b){if(a>=b)returna;elsereturnb;}voidmain(intx=0,y=0,z=0;x=20;y=intz=max(x,x,y,z。第一條賦值語句結(jié)束后,max的代碼。maxa,b4520main暫時(shí)停止執(zhí)行,maxb45通過returnmain。main接這里需要注意的是:在max函數(shù)中對(duì)a,b的任何操作不影響x,y的值。intmin(intx,inty); doublecalculate(inta,doubleb);//返回值類型為double,有一個(gè)整型參數(shù),一個(gè)double型參數(shù),函數(shù)名為calculatecharjudge(void); //返回值類型為char,沒有參數(shù),函數(shù)名為judgevoidt(intC/C++語言標(biāo)準(zhǔn)中,規(guī)定了完成某些特定功能的一些函數(shù),這些函數(shù)是不同廠商的稱為C/C++標(biāo)準(zhǔn)庫函數(shù)。比如,前面看到的printf函數(shù)就是一例。函數(shù),就需要用#include語句將包含該庫函數(shù)原型的頭文件,包含到程序中,否則編譯器就會(huì)認(rèn)為該函數(shù)沒有定義。比如,printf函數(shù)就是在stdio.h這個(gè)頭文件中的,因此#includeC/C++語言中,有一類庫函數(shù),稱之為標(biāo)準(zhǔn)輸入輸出函數(shù),可以用來從鍵盤鍵入的printf(“x=%d”,x=50 printf(“Nameis%s,Age=%d,weight=%fkg,:%c,code=%x”“Tom”,32,71.5,‘M’,32NameisTom,Age=32,weight=71.500000kg,:M,code=這就導(dǎo)致十進(jìn)制數(shù)“3220printf(“What’sup?\nGreat!\nLet’sWhat’sLet’sscanf{intn;scanf("%c%d",&c,printf("%c,%d",c,}{intnHeight,printf("Pleaseentertheheight:\n");scanf("%d",&nHeight);printf("Pleaseenterthewidth:\n");scanf("%d",&nWidth);printf("Theareais:%d",nHeight*}只能在定義它的函數(shù)。請(qǐng)看下面的程序:intn1=5,n2=void{intn3n2= void{intn1=n3 12.int{intintif(n1==5)intn6= n1=n4 n6 n2=return26.沒定義”的編譯錯(cuò)誤;語句22也是一樣。24n2n2。100int型變量,n1,n2,n3……n100100個(gè)整數(shù)??蛇@樣的想法真讓人受不[元素個(gè)數(shù)intan100 數(shù)組占用了一片連續(xù)的、大小總共為N×sizeof(T)字節(jié)的空間。Tarray[NNarray[0],array[1],array[2]……array[N-1]。array[i](iTarray[0]存放在地址narray[i]就被存放在地址n+i*sizeof(T)。2.12.1.cpp:#include#defineMAX_NUMint{inti,intfor(i=0;i<MAX_NUM;i++scanf("%d",&for(i0;iMAX_NUM1;iiiintnTmpMin for(j=i;j<MAX_NUM;j++)if(an[j]<an[nTmpMin]nTmpMin= intnTmp=an[i]=an[nTmpMin]= for(i=0;i<MAX_NUM;i++return27.思考題維數(shù)組。實(shí)際上,C/C++還支持二維數(shù)組乃至數(shù)組。二維數(shù)組中的每個(gè)元素,需要用兩//此處array。arrayN×M放的。array數(shù)組占用了一片連續(xù)的、大小總共為N×M×sizeof(T)字節(jié)的空間。jarray[0][j]、array[1][j]……array[N-1][j]。array[0][0]是數(shù)組中地址最小的元素。如果array[0][0]存放在地址narray[i][j](i,jni*M*sizeof(T)j*sizeof(Tinta[2][3]a[0][0]存放的地址是100,那么a[0][1]的地址就是104,以此類推。1-12-2從上圖可以看出,二維數(shù)組的每一行,實(shí)際上都是一個(gè)一維數(shù)組。對(duì)上面的數(shù)組intNMNM列#defineROW#defineCOL for(inti=0;i<ROW-1;i{for(intj=0;j<COL-1;++}元素、第2行的元素……類型名數(shù)組名[常量表達(dá)式]={值,值……值};inta[10]={0,1,2,3,4,5,6,7,8,9后面的元素,其空間里的每個(gè)字節(jié)都被寫入二進(jìn)制數(shù)0。intintinta[5][3],可用如下方式初始化:inta[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,90},{76,77,85}};始化,結(jié)果使得a[0][0]=80,a[0][1]=75,a[0][2]=92。intan[-2]=an[200]=an[10]=intm=ana[-2]n2)*size(int)int型變量。n-8處的一個(gè)int2的作用就是往地n85(4個(gè)字節(jié)n8處,有可能存放的是其他變量,也有可指令。程序繼續(xù)運(yùn)行就可能會(huì)出錯(cuò)。有時(shí),n-8處的地址可能是操作系統(tǒng)不允許程序進(jìn)行寫操作的,碰到這種情況,程序執(zhí)行到語句2就會(huì)立即出錯(cuò)。因此,語句2是不安全的。3、4、5都會(huì)導(dǎo)致數(shù)組越界。要特別注意,an10致m被賦了一個(gè)不可預(yù)料的值。在有的操作系統(tǒng)中,程序的某些內(nèi)存區(qū)域是不能的,如果an[30]正好位于這樣的區(qū)域,執(zhí)行到語句5就會(huì)立即錯(cuò)誤。an[-25這樣明顯越界的語句。但是我們經(jīng)if語第一種形式就是字符串常量,如"",“Cprogram”為參數(shù)。請(qǐng)參見2.17.3小節(jié)“字符串和內(nèi)存操作函數(shù)”。字符串常量是由一對(duì)雙引號(hào)括起的字符序列。例如:"",“Cprogram”"$12.5"a”"Cprogram"CprogrAm1-13-1-須連寫兩次,變成“”。例如:printf("Hesaid:\"IamaHesaid:"Iamachar一個(gè)‘\0’字符,代表字符串的結(jié)尾。因而字符數(shù)組的元素個(gè)數(shù),應(yīng)該不少于被字符例程2.13.2.cpp:#include#includeintmain()charszTitle[]="PrisoncharszHero[100]="Michaelcharcharprintf("What'sthenameoftheprisonin%s?\n",scanf("%s",if(strcmp(szPrisonName,"Fox-River")==0 printf("Yeah!Doyoulove%s?\n", elsestrcpy(szResponse,"Itseemsyouhaven'twatchedprintf( szTitle[0]=szTitle3] //等效于szTitle[3]return21.PrisonBreak1-13-1-語句5:定義了一個(gè)有100個(gè)元素的字符數(shù)組szHero,并初始化其前17個(gè)元素’\0’語句8:輸出:What'sthenameoftheprisoninPrison語句9:等待用戶輸入的名字,并將用戶的輸入存放到szPrisonName數(shù)組中,在不是“FoxRiver”。szPrisonName9gets(此時(shí)如果用戶輸入“FoxRiver”szPrisonNameRiverchar*gets(char果該函數(shù)返回值為0,則說明比較結(jié)果一致。Yeah!DoyouloveMichael14:strcpy"Itseemsyouhaven'twatchedit!"拷貝Itseemsyouhaven'twatchedtrionBreak1-13-1-charszFriends[6][30]={"Joey","Phoebe","Monica","Chandler","Ross","Rachel"};思考題1.13.3:intMyItoa(char*s)其功能是將s中以字符串形式存放的非負(fù)整數(shù),轉(zhuǎn)換成相應(yīng)整數(shù)返回。例如,如果s中存放字符串“12341234。假設(shè)s中的字符全是數(shù)字,且不考慮s是空串或s太長的情況。類型名*指針變量名例如:int* //p是一個(gè)指針,變量p的類型是int例如:char* //pc是一個(gè)指針,變量pc的類型是char例如:float*pf;pfpffloatint*p=(int*)讀寫,就可以通過表達(dá)式“*p”來進(jìn)行。因?yàn)楸磉_(dá)式“*p”就代表地址p開始的若干nint*p4,sizeof(int)4。T*pTintdouble,charT,sizeof(T*4。也就是說,所有指針64C/C+8在實(shí)際編程中,我們極少需要象前面的“int*p=(int*)10000”那樣,直接給指能或修改變量x的值。請(qǐng)看下面的程序片段:charch1=’A’;//char*pc&ch1;//(2)pc指向變量pc=’B’;//(3)執(zhí)行效果是使得ch1=’B’charch2*pc;//(4)執(zhí)行效果是使得ch2=ch1pc=&ch2;//(5)使得pc指向變量ch2。pc’D’;6ch2上面的語句(2),ch1pc請(qǐng)記?。篢x,表達(dá)式“&xx&x”的類型是T*?!?同樣,在語句(4)*pcch14ch1ch2語言都有“指針”的概念,Basic,JavaC/C++中是十分重要的概假設(shè)需要編寫一個(gè)函數(shù)swap,執(zhí)行swap(a,b)的效果是將a,b兩個(gè)變量的值互換。如為什么呢?我們來看,假定a,bint型,那么有了下面的swap函數(shù):voidswap(intn1,int{n1=n2;n2=}n2分別是a、b的一個(gè)拷貝,n1,n2的值改變了,不會(huì)影響到a、b。voidswap(int* int*{intnTmp* //pn1pn1* //pn2pn1pn2 //nTmppn2}int型變量a、bswap(&a,&由于“&a”即是a的地址(其類型是int*),因此,swap函數(shù)執(zhí)行期間,pn1的值即就等價(jià)于b。因此上面的函數(shù)能夠?qū)崿F(xiàn)交換a、b的值。int*pn,char*pc,charc=pn=pn=&pn=(int*)&intn=**pn=;int*char*。語句(3)則沒有問題,雖然表達(dá)式“&cchar*pn是可以的。語句(3)執(zhí)行的效果是使得pn指向c的地址。比較大小的意思是:p1、p2p1<p2,則表達(dá)式“p1<p2”的值就為真,反之亦然。p1>p2,p1==p2的意義也同樣很好理解。T*p1p2,那么表達(dá)式“p1–p2”的intp1p2T類型的變量。寫成就是:p1p2=(p1–p2sizeof(pT*n是一個(gè)整型變量或常量,那么表達(dá)式“p+n”就是一個(gè)類型為T*的指針,該指針指向的地址是:pnpT*n是一個(gè)整型變量或常量,那么表達(dá)式“p-n”就是一個(gè)類型為T*的指針,該指針指向的地址是:pn當(dāng)然,按照上面的定義,*(p+n),*(p–n)都是有意義的了。請(qǐng)自己思考其思考題:如果p是一個(gè)T*類型的指針,那么p++、++p、p--、--p分例程2.14.2.cpp#includeint{int*pn1,*intn=char*pc1,*pn1int*) //地址pn1pn2int*) //地址pn2printf("%d\n",pn2 //25,因?yàn)?200-100)/sizeof(int)100/25pc1char* //地址pc1pc2char* //地址pc2printf("%d\npc1pc2 //-100,因?yàn)?100-200)/sizeof(char)printf("%d\n",(pn2n) int*pn3pn2 pn2npn3printf("%d\n",pn3 //printf("%d",(pc2-10)-return18.13中,表達(dá)式“pn2nint*類型的指針,其值為:pn2+n×sizeof(int)=200+4×4=216(pn2n)pn1int*(216-100)/sizeof(int)=116/4=C/C++中,可以用“NULLNULL的指如:int*pnNULL;char*pcT*這里的T可以是任何類型的名字。實(shí)際上,“char*”,“int*”也都是類型的名字。int**ppint***p”則表示int*的指針變量。在這種情況下,我們說,pp指向int*pint*的指針變量。T** //T型是T**p”表示一個(gè)類型為T*的指針。 變量,不論它是什么類型的,其占用的空間都是4個(gè)字節(jié)。int*T是,array實(shí)際上是編譯時(shí)其值就確定了的常量,對(duì)array進(jìn)行賦值。例如,如果定義: arrayint*。int*arrayint**。#includeint{intint*pp p指向數(shù)組anp*p //an[0]*(p1 //an[1]p[0] p[i]*(p+i)an[0]p[4] //a[4]for(inti0;i10;i *(p+i)= pprintf("%d\n", //a[1]1。p[0]*pan pprintf("%d\n",* //輸出return18.169的注釋提到:p[i]和*(p+i)是等效的。這是C/C++語法的規(guī)定,任何情況下都p#includevoidBubbleSort(int*pa,int{for(inti=nNum-1;i>0;i--for(intj=0;j<i;jif(pa[j]>pa[j+1])intnTmp=pa[j]=pa[j+1]= 11.#defineNUMint{intan[NUM]={5,4,8,2,1BubbleSort(an, for(inti=0;i<NUM;i++return20.交換pa[1]和pa[2]……一直做到 pa[nNum-2]和pa[nNum-1]比較,如果BubbleSort函數(shù)定義,寫成:voidBubbleSort(intpa[intnNum)而其他地方都T那么,array[i](i是整數(shù))array[i]T*。array[i]指向的intBubbleSort(array[1],array1BubbleSort(array[0],3)01.14.5:intchar*char*。因此可以用一個(gè)字符串,或一個(gè)字符數(shù)組名,給一個(gè)char*類型的指針賦值。例如:#include#includeintmain()char*p="Tomcharchar*pName=scanf("%s",printf(printf("Nameis%s",return11.Nameis,個(gè)類型為char*的表達(dá)式。7pNameszName數(shù)組。如果用戶輸入的字符超過19個(gè),則會(huì)發(fā)生szName數(shù)組越界。char*scanf(“%s”,void*p,void*void指針??梢杂萌魏晤愋偷闹羔槍?duì)void指針進(jìn)行賦值。例如:doubled=1.54;void*p=&sizeof(void)void*p,表達(dá)式“*p”也沒有定義,而且所有前面所述的指針運(yùn)算對(duì)p也不能進(jìn)行。塊的地址就都可以用void指針表示。C/C++中有以下標(biāo)準(zhǔn)庫函數(shù):void*memcpy(void*dest,constvoid*src,unsignedint它在頭文件string.h和mem.h中,作用就是將地址src開始的n字節(jié)內(nèi)容,拷貝到地址dest。返回值就是dest。=a1[1]……a2[9]=a1[9]intintmemcpy(a2,a1,void*MyMemcpy(void*dest,constvoid*src,intn){char*pDest=(char*)dest;char*pSrc=(char*)src;for(inti0;in;i *(pDest+i)=*(pSrc+i}return}1.14.7:MyMemcpy類型名(*1int(*pf)(int,數(shù),第一個(gè)是int類型,第二個(gè)是char類型。#includevoidPrintMin(inta,int{if(a<bprintf("%d",printf("%d", intvoid(*pf)(int intx= y=pf pf(x, //調(diào)用pfreturn15.4voidqsort(void*base,intnelem,unsignedintint( pare)(constvoid*,constvoid使用該函數(shù),可以對(duì)任何類型的一維數(shù)組排序。該函數(shù)參數(shù)中,base是待排序數(shù)組的起始地址,nelemwidth(以字節(jié)為單位,最后一個(gè)參數(shù)pare是一個(gè)函數(shù)指針,它指向一個(gè)“比較函數(shù)”。排序就比較兩個(gè)元素并判斷哪個(gè)應(yīng)該呢?答案是,qsort函數(shù)在執(zhí)行期間,會(huì)通過pare字作為實(shí)參傳遞給pare。程序員當(dāng)然清楚該按什么規(guī)則決定哪個(gè)元素應(yīng)該,哪個(gè)intconstvoid*elem1,constvoid*該函數(shù)的兩個(gè)參數(shù),elem1elem2,指向待比較的兩個(gè)元素。也就是說,*elem1#include#include pare(constvoid*elem1,constvoid*elem2{unsignedint*p1,*p1=(unsignedint*)p2=(unsignedint*) (*p1% -(*p2%10 #defineNUMint{unsignedintan[NUM]={8,123,11,10,4qsort(an,NUM,sizeof(unsigned for(inti=0;i<NUM;i++printf("%d",return18.10111234數(shù),調(diào)用pare函數(shù)。如果返回值小于0,則qsort就得知第一個(gè)元素應(yīng)該,如果返回值大于0,則第一個(gè)元素應(yīng)該在后。如果返回值等于0,則哪個(gè)都行。一個(gè)元素了。語句7同理。思考題:如果要將an數(shù)組從大到小排序,那 qsort,MySort,結(jié)果也一樣(MySortintinta[n];中,通過“new”運(yùn)算符來實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存分配。new運(yùn)算符的第一種用法如下:P=newT是任意類型名,PT*int*pn=newint;*pn==new的表達(dá)式,表達(dá)式里可以包含變量、函數(shù)調(diào)用。這樣的語句動(dòng)態(tài)分配出Nsizeof(T)個(gè)字節(jié)的內(nèi)存空間,這片空間的起始地址被賦值給P。int*pn;intipn=newint[i*20];pn[0]=20;pn[100]=30;有100個(gè)元素,pn[100]已經(jīng)不在動(dòng)態(tài)分配的這片內(nèi)存區(qū)域之內(nèi)了。int*pn=newint[200000];if(pn==NULL)

printf“內(nèi)存分配成功作系統(tǒng)將這片內(nèi)存空間分配給其他程序使用。C“deletedeleteint*p=new*p=5;deletedelete 上面的第一條delete語句,正確地釋放了動(dòng)態(tài)分配的4個(gè)字節(jié)內(nèi)存空間。第二條int*p=newint;int*p2=p;deletep2;delete組的時(shí)候,應(yīng)以如下形式使用delete運(yùn)算符:deleteint*p=newint[20];p[0]=1;delete[]newdelete新的程序。當(dāng)然,不用太擔(dān)心,只要重新啟動(dòng)計(jì)算機(jī),癥狀就會(huì)了。NULL的時(shí)候,還依然通過char*scanf(%s”, pscanfp指向的地方讀入字符串,和績點(diǎn)。一個(gè)工人的、、、工資、。如果編程時(shí)要用多個(gè)不同類型的變量struct結(jié)構(gòu)名成員類型名成員變量名;成員類型名成員變量名;成員類型名struct{unsignedID;floatfGPA;結(jié)構(gòu)名變量名;structStudent{unsignedID;floatfGPA;Studentstu1,structStudent{unsignedID;floatfGPA;}stu1,兩個(gè)同類型的結(jié)構(gòu)變量,可以互相賦值。如:stu1=stu2;所以sizeof(Student)=28。結(jié)構(gòu)變量中的各個(gè)成員變量在內(nèi)存中一般是連續(xù)存放的,定structDateintnYear;intnDay;structStudentEx{unsignedID;floatfGPA;DateStudentExstu;scanf(“%f”,&stu.fGPA);stu.ID=12345;strcpy(stu.szName,”Tom”);printf(“%f”,stu.fGPA);stu.Birthday.nYear=1984;unsigned*p&stu.ID;//pstuIDStudentExstu={1234,”Tom”,3.78,{1984,12,281228StudentEx元素都是一個(gè)StudentEx類型的變量。標(biāo)識(shí)符“MyClass”的類型就是StudentEx*。StudentExMyClass[50]={1234,”Tom”,3.78,{1984,12,28{1235,”Jack”,3.25,{1985,12,23{1236,”Mary”,4.00,{1984,12,21{1237,”Jone”,2.78,{1985,2,28寫入二進(jìn)制數(shù)0。MyClass[1].ID=MyClass[2].Birthday.nYear=1986;intn=MyClass[2].Birthday.nMonth;scanf(“%s”,MyClass[0].szName);結(jié)構(gòu)名*指針變量名;StudentEx*pStudent;StudentExStu1;pStudent=&Stu1;StudentExStu2=*(*StudentExStudentEx*pStu=&Stu;pStu->ID=12345;pStu->fGPA=printf(“%d”,Stu.ID); printf(“%f”,Stu.fGPA); //輸出3.48素,ps+i則指向i號(hào)元素。這與普通數(shù)組的情況是一致的。voidPrintStudentInfo(StudentExStu);StudentExStu1;PrintStudentInfo(PrintStudentInfoStuStu1voidPrintStudentInfo(StudentEx*pStu);StudentExStu1;PrintStudentInfo(&到Stu1的所有信息。#include#include#include#defineNUMstructStudentunsignedcharfloat }StudentMyClass[NUM]={1234,"Tom",{{{15.intCompareID(constvoid*elem1,constvoid*{Student*ps1=(Student*)Student*ps2=(Student*)returnps1->ID-CompareName(constvoid*elem1,constvoid*{Student*ps1=(Student*)Student*ps2=(Student*)returnstrcmp(ps1->szName,{intqsort(MyClass,NUM,sizeof(Student),for(i=0;i<NUM;iprintf("%s",qsort(MyClass,NUM,sizeof(Student),for(i=0;i<NUM;iprintf("%s",return39.MaryTomJoneJackJackJoneMaryTomStudentEx*pStu=newStudentEx;pStu->ID=1234;deletepStu[0].ID=1235;delete[]寫文件結(jié)束后,要關(guān)閉文件。C/C++提供了一系列庫函數(shù),于stdio.h中,用于進(jìn)行文件用fopenFILE*fopen(constchar*filename,constchar“FILEstdio.h中定義的一個(gè)結(jié)構(gòu),用于存放和文件有關(guān)的信息,具體內(nèi)容我“r”:以文本方式打開文件,只進(jìn)行讀操作。“w”:以文本方式打開文件,只進(jìn)行寫操作?!皉b”:以二進(jìn)制方式打開文件,只進(jìn)行讀操作。“wb”:以二進(jìn)制方式打開文件,只進(jìn)行寫操作?!皉+”:以文本方式打開文件,既其數(shù)據(jù),也要往文件中寫入數(shù)據(jù)。fopenFILE*FILEfopen返回NULL指針。如果以讀寫或只寫的方式打開一個(gè)不存在的文件,F(xiàn)ILE*fp=fopen(“c:\\data\\report.txt”,“c:\\data\\report.txt”。給定文件名的時(shí)候也可以不給路徑,那么fopen函數(shù)執(zhí)行時(shí)就在當(dāng)前下尋找該文件:FILE*fp=fopen(“report.txt”, fcloseintfclose(FILEfscanfintfscanf(FILE*stream,constchar*format[,address,...]); 假設(shè)有以下文本文件students.txt存放在C盤tmp文件夾下: male19851123.47JackMale19851028Maryfemal1984228績點(diǎn)。下面的程序打開此文件,其全部內(nèi)容并輸出。#includeint{FILE*fp=fopen("c:\\tmp\\students.txt",if(fp==NULL)printf("Failedtoopenthereturn charszName[30],intnId, nBirthMonth,floatwhile(fscanf(fp,"%s%d%s%d%d%d%f",szName,&nId,szGender,&&nBirthMonth,&nBirthDay,&fGPA)!=EOF)printf("%s%d%s%d%d%d%f\r\n",szName,nId,szGender, fprintf(FILE*stream,constchar*format[,argument,intfgetc(FILE符號(hào)的8位(二進(jìn)制位)數(shù),因此每個(gè)被字節(jié)的取值范圍都是0-255。反復(fù)調(diào)用fgetc函數(shù)可以整個(gè)文件。如果已經(jīng)讀到文件末尾,無法再讀,那么fgetc函數(shù)返回EOF(實(shí)際上intfputc(intc,FILE那么在控制臺(tái)窗口(也稱DOS窗口)“MyCopy12”再敲回車,則能進(jìn)MyCopyc:\tmp\file1.dat #includeintmain(intargc,char*{FILE*fpSrc,*fpSrc=fopen(argv[1],if(fpSrc==NULL)printf("Sourcefileopenreturn fpDest=fopen(argv[2],if(fpDest==NULL)fclose(printf("Destinationfileopenreturn intwhile((c=fgetc(fpSrc))!=fputc(c,return22.argv參數(shù),argcargv2.18節(jié)“命令行參數(shù)”。語句17從源文件一個(gè)字符。表達(dá)式c=fgetc(fpSrc)的值實(shí)際上就是c的值,也就是fgetc函數(shù)的返回值。fgetc的返回值是EOF,則說明文件已經(jīng)讀完了。char*fgets(char*s,intn,FILE它一次從文件中一行,包括換行符,放入字符串s中,并且加上字符串結(jié)尾標(biāo)志intfputs(constchar*s,FILE下面的程序?qū)tudents.txt內(nèi)容拷貝到student2.txt#include#defineNUMint{FILE*fpSrc,*fpSrc=fopen("students.txt",if(fpSrc==NULL)printf("Sourcefileopenreturn0 fpDest=fopen("students2.txt",if(fpDest==NULL)fclose(printf("Destinationfileopenreturn charwhile(fgets(szLine,NUM-1,fpSrc))fputs(szLine, return24.unsignedfread(void*ptr,unsignedsize,unsignedn,FILE該函數(shù)從文件中n個(gè)大小為size字節(jié)的數(shù)據(jù)塊,總計(jì)n*size字節(jié),存放到從地ptr開始的內(nèi)存中。返回值是的字節(jié)數(shù)。如果一個(gè)字節(jié)也沒有,返回值就是0unsignedfwrite(constvoid*ptr,unsignedsize,unsignedn,FILEptrn*size 整個(gè)文件,每次100個(gè)字節(jié),而文件有1250字節(jié),那么顯然最后一次,只能個(gè)“”對(duì)應(yīng)于以下結(jié)構(gòu):Student{charunsignednId;shortnGender;shortnBirthYear,nBirthMonth,nBirthDay;floatfGPA;下面的程序先前例提到的students.txt中的學(xué)生信息,然后將這些信息寫入來,寫到另一個(gè)文件students2.dat中去。#include#includestructcharunsignedshort float int{FILE*fpSrc,*structStudentfpSrc=fopen("c:\\tmp\\students.txt",if(fpSrc==NULL)printf("Failedtoopenthe fpDest=fopen("students.dat",if(fpDest==NULL)fclose(printf("Destinationfileopenreturn charszName[30],intnId, nBirthMonth,floatwhile(fscanf(fpSrc,"%s%d%s%d%d%d%f",szName,&Stu.nId=if(szGender[0]=='f'Stu.nGender=Stu.nGender=Stu.nBirthMonth=Stu.nBirthDay=fwrite(&Stu,sizeof(Stu),1, fpSrc=fopen("students.dat",if(fpSrc==NULL)printf("Sourcefileopenreturn fpDest=fopen("students2.dat",if(fpDest==NULL)fclose(printf("Destinationfileopenreturn while(fread(&Stu,sizeof(Stu),1,fpSrc))if(Stu.nBirthYear>=1985fwrite(&Stu,sizeof(Stu),1, fclose(fclose(return62.那么平均要整個(gè)文件的一半,才能找到。 思考題1.16.6:一般來說,能在“記事本”程序中打開,并且看起來不包含不fseekFILEintfseek(FILE*stream,longoffset,intSEEK_SET:SEEK_END:fseek(fp,200,SEEK_SET);fseek(fp,0,fseek(fp,-100,fseek(fp,100,fseek(fp,-100,#include#include#defineNUM#defineNAME_LENstructcharunsignedshort {FILE*StudentfpSrc=fopen("c:\\tmp\\students4.dat",if(fpSrc==NULL)printf("Failedtoopenthereturn fseek(fpSrc,sizeof(Student)*4,fread(aStu,sizeof(Student),7,fseek(fpSrc,sizeof(Student)* fwrite(aStu,sizeof(Student),7,fclose(return28. x 求浮點(diǎn)數(shù)x的絕對(duì)值 求不小于x的最小整 pow(x, xy intisdigit(int intisalpha(int cintisalnum(intc) intislower(intc) 判斷c是否是一個(gè)小寫字母intislower(intc) 判斷c是否是一個(gè)小寫字母intisupper(intc) 判斷c是否是一個(gè)大寫字母inttoupper(int cinttolower(int cchar*strchr(char*s,intchar*strstr(char*s1,char*返回NULLchar*strlwr(char*char*strupr(char*char*strcpy(char*s1,char*s2s1char*strncpy(char*s1,char*s2,intchar*strcat(char*s1,char*s2s2intstrcmp(char*s1,char*0,0,s1s2后面。intstricmp(char*s1,char*intstrlen(constcharchar*strncat(char*strDestination,constchar*strSource,size_tintstrncmp(constchar*string1,constchar*string2,size_tchar*strrev(charvoid*memcpy(void*s1,void*s2,intvoid*memset(void*s,intc,intn)定義在stdlib.h中:intatoi(char那么函數(shù)返回值就是1234doubleatof(charchar*itoa(intvalue,char*string,intcharitoa(32,szValue,10szValueitoa(32,szValue,16szValue如果我們編寫了一個(gè)在屏幕上輸出文本文件內(nèi)容的程序,編譯生成的可執(zhí)行文件是listfile.exe,Windows(也叫DOS命令窗口)中輸入:listfile如敲“l(fā)istfilefile1.txt”,就能將file1.txt這個(gè)文件的內(nèi)容輸出。要做到這一點(diǎn),顯然,listfile程序必須知道用戶輸入的那個(gè)文件名。用戶在多個(gè),以空格分隔。比如“l(fā)istfilefile1.txtfile2.txt”。intmain(intargc,char*{}char*#includeintmain(intargc,char*{for(inti=0;i<argc;i++printf("%s\n",return 2.18para1para2s.txt545)對(duì)于返回值為真或函數(shù),加“Is”前綴如 intisalpha();C void{intt,x,y;while(t>0)t[0].x2=x;t[0].h=y;for(int{if(t[i].h>y){i--;N--;}qsort((void*)(&t[1]),N,sizeof(t[0]),compare);}}能設(shè)置一個(gè)Tab鍵相當(dāng)于多少個(gè)空格,此時(shí)就都用Tab鍵if(Condition1()&&Condition2()&&Condition3()){}if(condition1()){}if(condition1(){}intnAge=5;nAge=4;if(nAge>=4printf(“%d”,for(i=0;i<100;i++**文件名**Copyrightc)1998-1999***********創(chuàng)建人** 期**修改人** 期** 述** 本**函數(shù)名** 入: ** 出:x-- x1,表示 x0,表示**功能描述**用到的全局變量**調(diào)用模塊** 者** 期** 改** 期**#define structSStudentaStudents比structSStudentaStudents#define i=0;i<TOTAL_ELEMENTS;i }intfor(j=0;j<100;j++fwrite(fpFile,&nAge,1,for(j=0;j<100;j++fwrite(fpFile,&nAge,1,n=k nk++)+ n=(k++)+j;應(yīng)該寫成:n=k+j;k++;ifelseif(Condition1())if(

if(Condition1())if(}

第二章子里面腳的總數(shù)a,問籠子里面至少有多少只動(dòng)物,至多有多少只動(dòng)物數(shù)a(a<32768)。最多的動(dòng)物數(shù),兩個(gè)正整數(shù)用空格分開。如果沒有滿足要求的情況出現(xiàn),則輸出20。2305N4N2N4N/4+1N/2。這是一個(gè)一般的計(jì)算題,#includevoidmain({intnCases,i,nFeet/nCases表示輸入測試數(shù)據(jù)的組數(shù),nFeetfor(i=0;i<nCases;if(nFeet20)////printf("0printf("%d%d\n",nFeet/4+1,nFeet/elseprintf("%d%d\n",nFeet/4,nFeet/ 16.2-1國際象棋棋盤2a1c3f521211–x,y中較小的一個(gè)加上xy之差的絕對(duì)值。根據(jù)后行走的規(guī)則,她可以橫、直、斜走,1(xyx0y0)2(x不等于y)。根據(jù)車行走的規(guī)則,它可以橫、豎走,不能斜走,格數(shù)不限,需要步數(shù)為11(xy的絕對(duì)值)或者2(x的絕對(duì)值不等于y的絕對(duì)值。#include#includevoidmain({intnCases,scanf("%d",for(i=0;i<Casesn;charbegin[5],end[5];//用begin和end分別棋子的起止位置scanf("%s%s",begin,intx,y;//用x和y分別起止位置之間x方向和y方向上的距離x=abs(begin[0]-y=abs(begin[1]-if(x0&&y0)printf("0000\n0if(xy)printf("%d // printf("%d",if(xy||x0||y0)printf1");// printf("if(x0||y printf1");// printf("if(abs(xy)2 printfInf\n");//elseif(x== printf(" printf(" 26.將”Inf”錯(cuò)寫成個(gè)整數(shù)點(diǎn),即0,1,2,……,L,都種有一棵樹。L(1L10000)M(1M100),L代表馬路的長度,M代表區(qū)域的數(shù)目,L和MM行每行包含兩個(gè)不500150100470true來表示。每當(dāng)輸入一個(gè)小區(qū)間,就將這個(gè)區(qū)間對(duì)應(yīng)的樹全部移走,即將這個(gè)區(qū)間對(duì)應(yīng)的數(shù)組元素下標(biāo)指示的元素的值置成false。如果有多個(gè)區(qū)間對(duì)應(yīng)同一個(gè)數(shù)組元素,會(huì)導(dǎo)致多次將某個(gè)數(shù)組元素置成false。不過這并不影響結(jié)果的正true的元素的個(gè)數(shù),就可以#includevoid{intL,ij,n;L為區(qū)間的長度,n為區(qū)間的個(gè)數(shù),i和jbooltrees[10001];//for(i0;i10001;i++)//trees[i]=for(i=0;i<n;intbegin,end;//用begin,e

溫馨提示

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