程序設(shè)計(jì)基礎(chǔ)-基于C語(yǔ)言(第2版)-課后習(xí)題參考答案_第1頁(yè)
程序設(shè)計(jì)基礎(chǔ)-基于C語(yǔ)言(第2版)-課后習(xí)題參考答案_第2頁(yè)
程序設(shè)計(jì)基礎(chǔ)-基于C語(yǔ)言(第2版)-課后習(xí)題參考答案_第3頁(yè)
程序設(shè)計(jì)基礎(chǔ)-基于C語(yǔ)言(第2版)-課后習(xí)題參考答案_第4頁(yè)
程序設(shè)計(jì)基礎(chǔ)-基于C語(yǔ)言(第2版)-課后習(xí)題參考答案_第5頁(yè)
已閱讀5頁(yè),還剩163頁(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)介

welcome.1解釋以下術(shù)語(yǔ) (1)計(jì)算機(jī)軟件:計(jì)算機(jī)軟件是一系列按照特定結(jié)構(gòu)組織的程序、數(shù)據(jù)(Data)和文檔 (Document)的集合。 (2)計(jì)算機(jī)程序:用計(jì)算機(jī)語(yǔ)言所編寫的一系列指令的集合。 (3)數(shù)據(jù):數(shù)據(jù)是程序加工和處理的對(duì)象。 (4)算法:算法是一組有窮的規(guī)則,它們規(guī)定了為解決某一特定問(wèn)題而采取的一系列運(yùn)算 (5)數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)結(jié)構(gòu)是存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合,其外在表現(xiàn)為數(shù)據(jù)的組織形式。 (6)數(shù)據(jù)類型:數(shù)據(jù)類型是一個(gè)值的集合和定義在這個(gè)值集上的操作的總稱。 (7)程序設(shè)計(jì):程序設(shè)計(jì)是給出解決特定問(wèn)題程序的方法和過(guò)程,是軟件構(gòu)造活動(dòng)中的重成部分。1.2簡(jiǎn)答題 (1)簡(jiǎn)述內(nèi)存的組織結(jié)構(gòu)形式?計(jì)算機(jī)系統(tǒng)把內(nèi)存看作是由若干個(gè)連續(xù)的存儲(chǔ)單元(StorageLocation)組成的,每個(gè)存儲(chǔ)單元的大小為一個(gè)字節(jié)(Byte)。為了能唯一標(biāo)志每個(gè)存儲(chǔ)單元,在計(jì)算機(jī)系統(tǒng)中給每個(gè)存儲(chǔ)單元指定一個(gè)唯一的編號(hào),該編號(hào)被稱為存儲(chǔ)單元的地址(Address),計(jì)算機(jī)在讀寫內(nèi)存時(shí)就是按照存儲(chǔ)單元的地址進(jìn)行的。 (2)為什么計(jì)算機(jī)系統(tǒng)是一個(gè)通用的計(jì)算系統(tǒng)?在計(jì)算機(jī)硬件相對(duì)固定不變的前提下,計(jì)算機(jī)的通用性主要表現(xiàn)在通過(guò)運(yùn)行不同的程序計(jì)算任務(wù)。 (3)簡(jiǎn)述結(jié)構(gòu)化程序設(shè)計(jì)的基本思想?個(gè) (StructuredProgramming)。 (4)簡(jiǎn)述計(jì)算機(jī)語(yǔ)言的發(fā)展史?程序設(shè)計(jì)語(yǔ)言經(jīng)歷了從機(jī)器語(yǔ)言、匯編語(yǔ)言、高級(jí)語(yǔ)言到超高級(jí)語(yǔ)言的發(fā)展歷程。 (5)簡(jiǎn)述利用計(jì)算機(jī)進(jìn)行問(wèn)題求解的過(guò)程?1、理解問(wèn)題特征2、設(shè)想解決方案3、優(yōu)化解決方案4、描述解決方案5、執(zhí)行并分析解決方案 (6)簡(jiǎn)述各個(gè)程序質(zhì)量要素的含義?1、正確性(Correctness):正確性是指一個(gè)計(jì)算機(jī)程序的正確程度,即程序在預(yù)定的運(yùn)行環(huán)境下能正確完成預(yù)期功能的程度。2、魯棒性(Robustness):魯棒性也稱為健壯性,是指在硬件發(fā)生故障、輸入數(shù)據(jù)無(wú)效或操作錯(cuò)誤等意外情況下,程序能做出響應(yīng)的程度。3、效率(Efficiency):效率是指為了完成預(yù)定的功能,系統(tǒng)需要的計(jì)算資源(主要包括計(jì)算時(shí)間和存儲(chǔ)空間)的多少。welcome4、易用性(Usability):易用性又稱為可用性,是指在完成預(yù)定功能時(shí)人機(jī)交互的難易程度。易用性高的程序容易被程序用戶理解和掌握,使用戶操作簡(jiǎn)單方便。5、可理解性(Understandability):可理解性是指理解程序的難易程度??衫斫庑愿叩某绦虿湃菀诇y(cè)試和維護(hù)。如果程序難以讀懂,就會(huì)給測(cè)試和維護(hù)帶來(lái)巨大的困難。6、可測(cè)試性(Testability):可測(cè)試性是一個(gè)計(jì)算機(jī)程序能夠被測(cè)試的容易程度。為了的錯(cuò)誤。程序的可測(cè)試性直試的質(zhì)量和效率。7、可維護(hù)性(Maintainability):診斷和改正程序錯(cuò)誤以及功能擴(kuò)充和性能提高的容程序的可維護(hù)性決定了上述工作的質(zhì)量和效率。8、可重用性(Reusability):可重用性是指在其它應(yīng)用中該程序可以被再次使用的容能利用原有的程序,則會(huì)大大提提高程序設(shè)計(jì)質(zhì)量和效率的根本途徑。3計(jì)算題 (1)計(jì)算-1的8位原碼、反碼、補(bǔ)碼和Excess_127碼。 (2)計(jì)算機(jī)內(nèi)存中相鄰四個(gè)字節(jié)的值為10111110000000000000000000000000,試問(wèn)該值表示的實(shí)數(shù)、有符號(hào)數(shù)和無(wú)符號(hào)數(shù)各為多少?分別是:實(shí)數(shù)0.125、有符號(hào)數(shù)-1107296256(負(fù)數(shù)在計(jì)算機(jī)中用補(bǔ)碼表示)無(wú)符號(hào)數(shù)3187671040welcome 大寫轉(zhuǎn)化為小寫:大寫字母的ASCII值+20H=小寫字母的ASCII值 (1)有兩個(gè)調(diào)料盒S1和S2,分別盛有糖和鹽,要求將它們互換(即S1盒原來(lái)盛糖,現(xiàn)在改盛鹽;S2同理)。算法思想:這是一個(gè)兩個(gè)變量交換值的問(wèn)題,可以設(shè)置一個(gè)臨時(shí)變量,首先把S1的值放入臨時(shí)變量中,然后將S2的值放入S1中,最后將臨時(shí)變量的值放入S1中即可。程序流程圖:開始開始設(shè)置臨時(shí)變量T結(jié)束N-S盒圖:welcome定義臨時(shí)變量T輸輸入S1、S2定義臨時(shí)變量T (2)依次輸入6個(gè)整數(shù),要求輸出其中最小的數(shù)。算法思想:定義一個(gè)臨時(shí)變量用來(lái)存放最小的數(shù),首先輸入第一個(gè)數(shù)賦值于臨時(shí)變量,然后循環(huán)輸入其余的整數(shù),比較輸入的整數(shù)和臨時(shí)變量的大小,如果大于臨時(shí)變量則繼續(xù)輸程序流程圖:N-S盒圖:開開始定義變量X和T輸入第一個(gè)整數(shù)并賦值于T輸入下一個(gè)整數(shù)賦值于XX>TNT=XNY輸入完畢Y結(jié)束定義變量X和臨時(shí)變量T輸入第一個(gè)數(shù)并賦值給T輸入下一個(gè)整數(shù)賦值于XYX>TNT=X輸出Twelcomewelcome定定義變量X和臨時(shí)變量T輸入第一個(gè)整數(shù)賦值于T輸入下一個(gè)整數(shù)賦值于XX>TT=X輸出T (3)輸入3個(gè)整數(shù),按從大到小的順序輸出。ab同理可以得出結(jié)果。程序流程圖:welcome輸入三個(gè)整并賦值給Ya>bNNN輸出NNYYYYN-S盒圖:YY輸入三個(gè)數(shù)并賦值給a,b,cc>aNYc>bYc>bNYc>aN輸出輸出輸出輸出NNwelcome輸入三個(gè)數(shù)賦值給輸入三個(gè)數(shù)賦值給a,b,cca輸出a,c,b (4)求1*2*3*……*10。的值,賦初值為1,做十次循環(huán),每次循環(huán)在原來(lái)變量的基礎(chǔ)上乘循環(huán)變量值(即1-10),最后輸出這個(gè)變量即可。程序流程圖:FF開開始i=1Ti++開始N-S盒圖:i++i++ (5)輸入兩個(gè)整數(shù),求其最大公約數(shù)。算法思想:選取兩個(gè)數(shù)中較小的數(shù)作為起始值,讓這兩個(gè)數(shù)分別除以這個(gè)值,如果可以整除,則這個(gè)數(shù)就是最后結(jié)果,如果不能整除則將起始值減一之后再用原來(lái)的兩個(gè)數(shù)對(duì)其做CC除法運(yùn)算,知道整除為止,得到的起始值的最后值就是結(jié)果。程序流程圖:數(shù)A,BA<BTTFFN-S盒圖:數(shù)A,B,公約數(shù)CA<BYNC=AC=BYN輸出CC--welcomewelcomeC=AA<B輸出CA%C==0ANDCC5算法思考題 (1)鈔票換硬幣:把一元鈔票換成一分、二分、五分硬幣(每種至少一枚),有哪些種換在尋找這樣一種組合,使得5*X+2*Y+Z=100,所以每當(dāng)找到1種組合時(shí),將個(gè)數(shù)記錄下來(lái),就可知換法有多少種,算法描述如下:Count=0;//用于記錄個(gè)數(shù),初始為0for(X=1;X<=20;X++)for(Y=1;Y<=50;Y++)for(Z=1;Z<=100;Z++){if(5*X+2*Y+Z==100)//可實(shí)現(xiàn)交換Count++;}welcoment (2)百錢買百雞:一只公雞值5元,一只母雞值3元,3只小雞值1元,現(xiàn)用一百元要買分析:由題意可知,假設(shè)公雞、母雞、小雞分別有X、Y、Z只,那么X、Y、Z滿足:下是算法描述:for(X=0;X<=100;X++)for(Y=0;Y<=100;Y++)for(Z=0;Z<=100;Z++){if(5*X<=100and3*Y<=100andz%3==0){if(X+Y+Z==100and5*X+3*Y+Z/3==100){輸出X、Y、Z;}}} (3)斐波那契兔子的問(wèn)題:某人有一對(duì)兔子飼養(yǎng)在圍墻中,如果它們每個(gè)月生一對(duì)兔子,welcome且新生的兔子在第二個(gè)月后也是每個(gè)月生一對(duì)兔子,問(wèn)一年后圍墻中共有多少對(duì)兔子。最初的一對(duì)兔子生下一對(duì)兔子,共有3對(duì)兔子。到第三個(gè)月除最初的兔子新生一對(duì)兔子外,第一個(gè)月生的兔子也開始生兔子,因此共有5對(duì)兔子。繼續(xù)推下去,第12個(gè)月時(shí)最終共有對(duì)377對(duì)兔子。由分析知,每個(gè)月的兔子都是上個(gè)月的兔子與新增兔子之和,而上個(gè)月新的兔子生的。設(shè)每個(gè)月的兔子數(shù)F(0)=F(1)=1F(n)=F(n-1)+F(n-2)顯然可用遞歸的方法解出此題,算法流程圖如下:開開始i=0TFi1T輸出F(i)開始FFiFiF(i-2)i++Fwelcome (1)請(qǐng)簡(jiǎn)要描述C語(yǔ)言的發(fā)展歷史。家標(biāo)準(zhǔn)化協(xié)會(huì)制定了C語(yǔ)言的標(biāo)準(zhǔn),稱為ANSIC。 (2)略。 C點(diǎn)是什么?①C程序是由函數(shù)組成的。②函數(shù)由函數(shù)頭和函數(shù)體組成。③C程序總是從main函數(shù)開始執(zhí)行。④每個(gè)語(yǔ)句和數(shù)據(jù)聲明的最后必須有一個(gè)“;”。⑤C語(yǔ)言沒(méi)有自己的輸入/輸出語(yǔ)句,它的輸入/輸出由庫(kù)函數(shù)printf和scanf完成。⑥可以添加注釋。⑦C語(yǔ)言程序中的變量必須先聲明后使用。 (4)如何使用VisualC++6.0開發(fā)控制臺(tái)程序?使用VC6開發(fā)控制臺(tái)程序的方法如下:答:①在MiscrosoftVisualC++6.0環(huán)境下,首先建立一個(gè)空的工程。②而后建立一個(gè)C源程序文件,并在該文件中輸入源代碼。③使用Bulid命令或者快捷鍵F7,進(jìn)行編譯連接。④如果沒(méi)有錯(cuò)誤,選擇Execute命令或者快捷鍵Ctrl+F5,進(jìn)行執(zhí)行。考答案:3.1選擇題1.B2.D3.D4.A5.A6.A7.C8.C9.C10.B3.2寫出下列程序的輸出結(jié)果1.200310c8welcome2.a=100,b=2003.97,141,61,a4.5.aabbcabc4,36.6,6,6,73.3編程題#include<stdio.h>voidmain(){inta=500;printf("%d,%o,%x\n",a,a,a);}#include<stdio.h>voidmain(){floatx;scanf("%f",&x);welcomeprintf("a=%.3f,a=%.3e\n",x,x);}a6.000,a=6.60000e+001#include<stdio.h>voidmain(){charch1='a',ch2=ch1;printf("%c,%d,%o,%x\n",ch1,ch1,ch1,ch1);printf("%c,%d,%o,%x\n",ch2,ch2,ch2,ch2);}a,97,141,614.#include<stdio.h>voidmain(){floatx,y,z,s,v;scanf("%f%f%f",&x,&y,&z);s=2*(x*y+x*z+y*z);v=x*y*z;printfArealf,Volume=%.lf\n",s,v);}輸入:345e5.#definePI3.14#include<stdio.h>#include<math.h>voidmain(){floatr,s,l;scanf("%f",&r);s=(float)PI*r*r;l=2*(float)PI*r;fsflfnrsl}rs=28.3,l=18.86.#include<stdio.h>#include<math.h>voidmain(){floatx1,y1,x2,y2,x3,y3,a,b,c,p,s;scanf("%f%f%f%f%f%f",&x1,&y1,&x2,&y2,&x3,&y3);a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));b=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));c=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));printf("Area=%f\n",s);}習(xí)題4參考答案 (1)D(2)A(3)A(4)C(5)C(6)B(7)B(8)B(9)C(10)A (1)261(2)16(3)0(4)2,1 (1)diohidmain{scanfff;cf*5/9;} (2)includestdioh>includestringh>idmain{lens} (3)#include<stdio.h>#include<math.h>idmain{aseentertwodatananflflfxyprintflfraisedtolfislfnxypowxy;}(1)n=4(2)2*i-12.#include<stdio.h>(3)7(4)######voidmain(){longm,n,a,b,s;printf("\nPleaseinputvalueofM:");scanf("%ld",&m);printf("\nPleaseinputvalueofN:");scanf("%ld",&n);a=(m>n)?m:n;b=(m>n)?n:m;while(a%b!=0){s=a%b;b}printf("\nGongyueshu:%ld\n",s);printf("\nGongBeishu:%ld\n",(m*n)/s);}3.#include<stdio.h>voidmain(){inta,b,c,d,e;printf("Pleaseinputaninteger:\n");scanf("%d",&a);if(a/1000==0){printf("inputerror!\n");}b=a/1000;e=a%10;c=a%1000/100;d=a%100/10;if(b==e&&c==d)printfYESn;e}4.#include<stdio.h>voidmain(){intNum1,Num2,Num3,Num4;Num1=Num2=Num3=Num4=0;{c=getchar();if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))melseif(c>='0'&&c<='9')melseif(c=='')meum}while(c!='\n');printf("英文字母有%d個(gè),數(shù)字有%d個(gè),空格有%d個(gè),其它字符有%d個(gè)。\n",Num1,Num2,Num3,Num4);}5.#include<stdio.h>#include<math.h>voidmain(){floata,b,c,disc,x1,x2,realpart,imagepart;printf("Inputa,bandc:");scanf("%f,%f,%f",&a,&b,&c);printf("Theequation");disc=b*b-4*a*c;if(fabs(disc)<=1e-7)printf("hastwoequalroots:%4.2f.\n",-b/(2*a));eif(disc>1e-7){x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf("hasdistincerealroots:%4.2fand%4.2f.\n",x1,x2);}e{realpart=-b/(2*a);imagepart=sqrt(-disc)/(2*a);printf("hascomplextroots:");printf("%4.2f+%4.2fi",realpart,imagepart);printf("and%4.2f-%4.2fi\n",realpart,imagepart);}}6.#include<stdio.h>voidmain(){ijfor(i=1;i<=5;i++){for(j=1;j<=i;j++)printf;}for(i=5;i>=1;i--){for(j=i;j>=1;j--)printf;}}7.#include<stdio.h>#defineEPS1e-7voidmain(){ndoublex,an,sum;printf("inputx:");scanf("%lf",&x);x=x*3.1415926/180;sum=0;an=x;{sum+=an;n=n*(n+1)*(n+2);an*=(-x*x)/n;printf("an=%f\n",an);}while(fabs(an)>=EPS);printf("sin(%.4lf)=%.4lf\n",x,sum);}8.#include<stdio.h>voidmain(){unsignedintn;charc;printf("inputabinaryinteger:");while((c=getchar())!='\n'){switch(c){case'0':nn2+0;break;case'1':nn2+1;break;}}printf("thedecimalis%d.\n",n);}9.#include<stdio.h>voidmain(){ijfor(i=1;i<10;i++)printf("\t%d",i);for(i=1;i<10;i++){printf("%d",i);for(j=1;j<=i;j++)printf("\t%d",i*j);}}10.#include<stdio.h>voidmain(){intn,m,z,x,y;printf("inputn:");scanf("%d",&n);z=x=y=1;while(n>1){z=x+y;x=y;y=z;}printf("Fibonacci(%d)=%d.\n",m,z);}11.#include<stdio.h>#include<math.h>voidmain(){ijntflagfor(i=1;i<=100;i++){flag=1;for(j=2;j<=sqrt(i);j++)if(i%j==0){flag=0;break;}if(flag==1)printf("%d\t",i);}}12.#include<stdio.h>voidmain(){inti,sum;sum=0;for(i=1;i<=1000;i++)if(i%3==0&&i%5==0&&i%7==0)sum+=i;printf("sumis%d.\n",sum);}13.#include<stdio.h>voidmain(){longf;printf("inputx:");scanf("%d",&x);if(x>=1&&x<=3)f=2*x+3;elseif(x>=4&&x<=10)f=3*(x+4);ef=x*x+3*x-6;printf("f(%d)=%d\n",x,f);}6.1&b[i][j]=3001+i*16+j*4;6.2求一維數(shù)組各元素的最大值、最小值及所有元素的乘積#include<stdio.h>welcomewelcome#defineN10voidmain(){ntaNintmax,min,i,product;for(i=0;i<N;i++)scanf("%d",&a[i]);maxa[0];mina];product=a[0];for(i=1;i<N;i++){product=a[i];if(max<a[i])max=a[i];if(min>a[i])min=a[i];}printf("各元素最大值為:%d\n",max);printf("各元素最小值為:%d\n",min);printf("各元素的乘積為:%d\n",product);}6.3已知數(shù)列a0=0,a1=1,an=an-2+an-2an-1,求數(shù)列的前10個(gè)元素#include<stdio.h>#defineN10voidmain(){inta[N]={0,1};tifor(i=2;i<N;i++)a[i]=a[i-2]+a[i-2]*a[i-1];for(i=0;i<N;i++){if(i%5==0)printf("\n");printf("%5d",a[i]);}}6.4用改進(jìn)的冒泡算法對(duì)N個(gè)數(shù)由小到大排序#include<stdio.h>#defineN10voidmain(){ntaNinti,j,temp,flag;for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=0;i<N-1;i++){flag=0;for(j=0;j<N-i;j++)if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;flag=1;}if(flag==0)break;}for(i=0;i<N;i++)printf("%d",a[i]);}6.5用插入法對(duì)N個(gè)數(shù)由小到大排序#include<stdio.h>#defineN10voidmain(){ntaNinti,j,temp;for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=0;i<N;i++){j=i-1;temp=a[i];while(a[j]>temp&&j>=0){a[j+1]=a[j];j--;}a[j+1]=temp;}for(i=0;i<N;i++)printf("%d",a[i]);}6.6用篩選法求1--100內(nèi)的素?cái)?shù)#include<stdio.h>#include<math.h>voidmain(){inta[101];inti,j,count=0;for(i=1;i<=100;i++)aii;a[1]=0;for(i=2;i<sqrt(100);i++)if(a[i]!=0){for(j=i+1;j<=100;j++){if(a[j]!=0&&a[j]%a[i]==0)a[j]=0;}}for(i=1;i<=100;i++){if(a[i]!=0){printf("%5d",a[i]);count++;if(count%5==0)printf("\n");}}}6.7將一維數(shù)組中各個(gè)元素的順序變反#include<stdio.h>#defineN10voidmain(){inta[N],i,temp;for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=0;i<N/2;i++){temp=a[i];a[i]=a[N-1-i];a[N-1-i]=temp;}for(i=0;i<N;i++)printf("%5d",a[i]);}6.8輸出如下上三角矩陣,主對(duì)角線以下的元素不輸出#include<stdio.h>#defineN3voidmain(){inta[N][N]={{1,1,6},{0,5,7},{0,0,2}};ijfor(i=0;i<N;i++){for(j=0;j<i;j++)printf");for(j=i;j<N;j++)printf("%4d",a[i][j]);}|||15||6]6]7}6.9求兩個(gè)矩陣的和,要求不引入新的矩陣#include<stdio.h>#defineM3#defineN4voidmain(){inta[M][N],b[M][N],i,j;printf("請(qǐng)輸入%d*%d矩陣A:\n",M,N);for(i=0;i<M;i++)for(j=0;j<N;j++)scanf("%d",&a[i][j]);printf("請(qǐng)輸入%d*%d矩陣B:\n",M,N);for(i=0;i<M;i++)for(j=0;j<N;j++)scanf("%d",&b[i][j]);for(i=0;i<M;i++)for(j=0;j<N;j++)a[i][j]+=b[i][j];printf("兩矩陣的和為:\n");for(i=0;i<M;i++){for(j=0;j<N;j++)printf("%5d",a[i][j]);}}6.10求矩陣的最大元素和最小元素及其所在行和列#include<stdio.h>#defineM3#defineN4voidmain(){inta[M][N],i,j,max,maxi=0,maxj=0,min,mini=0,minj=0;printf("請(qǐng)輸入%d*%d矩陣A:\n",M,N);for(i=0;i<M;i++)for(j=0;j<N;j++)scanf("%d",&a[i][j]);max=a[0][0];min=a[0][0];for(i=0;i<M;i++)for(j=0;j<N;j++){if(a[i][j]>max)welcome{max=a[i][j];}if(a[i][j]<min){min=a[i][j];}}printf("最大元素為a[%d][%d]=%d\n",maxi,maxj,max);printf("最小元素為a[%d][%d]=%d\n",mini,minj,min);}6.11輸出楊輝三角形的前10行1111111234513614151welcomewelcome.......說(shuō)明:楊輝三角形是(a+b)n展開后各項(xiàng)的系數(shù)。首行(a+b)0的系數(shù)為1,次行為1,1;首末元素為1,其余元素為其左上方元素與正上方元素的和。#include<stdio.h>#defineN10voidmain(){inta[N][N],i,j;for(i=0;i<N;i++){a[i][0]=1;a[i][i]=1;for(j=1;j<i;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];}printf("楊輝三角的前%d行為:\n",N);for(i=0;i<N;i++){for(j=0;j<=i;j++)printf("%5d",a[i][j]);}}N階魔方陣是指一個(gè)N*N的方陣,其元素由1到N2組成,且方陣每行、每列以及對(duì)角線元素的和都相等。如三階魔方陣為||3159||6]6]7魔方陣中各數(shù)的排列規(guī)律如下: (1)1在第一行中間一列; (2)從2到N*N的各個(gè)數(shù)依次按如下規(guī)則存放:每一個(gè)數(shù)存放的行比前一個(gè)數(shù)的行數(shù)減1,列數(shù)加1(如上面的三階魔方陣,5在4的上一行后一列); (3)如果上一個(gè)數(shù)在第一行,則下一個(gè)數(shù)在最后一行,列數(shù)加1; (4)如果上一個(gè)數(shù)在最后一列,則下一個(gè)數(shù)在第一列,行數(shù)減1; (5)如果按上述規(guī)則確定的位置已經(jīng)有數(shù),或上一個(gè)數(shù)在第1行第N列,則下一個(gè)數(shù)放在上一個(gè)數(shù)的正下方。如三階魔方陣中,按前四條規(guī)則,4應(yīng)該放在第一行、第二列的位置,但由于1已經(jīng)在該位置,故4放在3的下面。再如6,因其位于第一行第3列,故7#include<stdio.h>#defineN5voidmain(){inta[N][N]={0},i,j,k;j=N/2;a[i][j]=1;for(k=2;k<=N*N;k++){iij=j+1;if(i<0&&j==N){j=j-1;a[i][j]=k;}elseif(i<0)i=N-1;elseif(j==N)j=0;elseif(a[i][j]!=0){j=j-1;}a[i][j]=k;}for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%5d",a[i][j]);}}6.13求二維數(shù)組的鞍點(diǎn)。即找一個(gè)位置,該位置上的元素同行中最大,同列中最小。#include<stdio.h>#defineM3#defineN4voidmain(){inta[M][N];inti,j,maxj,count=0,flag;printf("請(qǐng)輸入%d*%d階矩陣A:\n",M,N);for(i=0;i<M;i++)for(j=0;j<N;j++)scanf("%d",&a[i][j]);for(i=0;i<M;i++){for(j=1;j<N;j++)if(a[i][maxj]<a[i][j])maxj=j;flag=1;for(j=0;j<M;j++)if(a[j][maxj]<a[i][maxj])flag=0;if(flag==1){count++;printf("第%d個(gè)鞍點(diǎn):a[%d][%d]=%d\n",count,i,maxj,a[i][maxj]);}}if(count==0)printf("沒(méi)有鞍點(diǎn)");}6.14輸出以下圖案**********#include<stdio.h>#defineN4voidmain(){welcomeijfor(i=0;i<N;i++){for(j=0;j<i;j++)printf("");for(j=i;j<N;j++)printf("*");}}6.15通過(guò)鍵盤輸入一行字符串,之后按如下規(guī)律對(duì)其加密:A→Za→zB→Yb→yC→Xc→x......即將字符串中的第i個(gè)大寫或小寫英文字母變成相應(yīng)的第26-i+1個(gè)大寫或小寫字母,#include<stdio.h>#include<string.h>voidmain()welcome{charstr[100];ntilenprintf("請(qǐng)輸入字符串:\n");gets(str);len=strlen(str);for(i=0;i<len;i++){if(str[i]>='A'&&str[i]<='Z')str[i]='A'+25-(str[i]-'A');if(str[i]>='a'&&str[i]<='z')str[i]='a'+25-(str[i]-'a');}tsstr}#include<stdio.h>voidmain(){charstr1[100],str2[100];inti=0,result;printf("請(qǐng)輸入字符串str1:\n");gets(str1);printf("請(qǐng)輸入字符串str2:\n");gets(str2);while(str1[i]==str2[i]&&str1[i]!='\0')if(str1[i]=='0'&&str2[i]==0)eresult=str1[i]-str2[i];printf("結(jié)果為:%d\n",result);}#include<stdio.h>#include<string.h>voidmain(){charstr1[100],str2[100];tiprintf("請(qǐng)輸入字符串str2:\n");gets(str2);while(str2[i]!='\0'){str1[i]=str2[i];}str1[i]='\0';printfstr1=%s\n",str1);printfstr2=%s\n",str2);}7.1答:從用戶使用的角度,可以將函數(shù)分為:庫(kù)函數(shù)庫(kù)函數(shù)也稱為標(biāo)準(zhǔn)函數(shù),指由C系統(tǒng)提供而無(wú)需用戶定義的函數(shù)。這種函數(shù)只需在程序前面包含該函數(shù)原型所在的頭文件即可(即使用#include預(yù)處理命令)。用戶自定義函數(shù)指用戶按照實(shí)際需要自己編寫的實(shí)現(xiàn)一定功能的函數(shù)。這種函數(shù)需要在程序中進(jìn)行聲從函數(shù)返回值的角度,可以將函數(shù)分為:有返回值函數(shù)如果一個(gè)函數(shù)被調(diào)用,并在執(zhí)行完成后要向調(diào)用者返回一個(gè)執(zhí)行結(jié)果,則稱為有返回值返回的執(zhí)行結(jié)果即為返回值。如:getchar函數(shù)便返回一個(gè)字符。如果一個(gè)用戶自定義函數(shù)是有返回值的,那么必須在函數(shù)聲明和定義中明確指出返回?zé)o返回值函數(shù)welcome如果一個(gè)函數(shù)被調(diào)用,但在執(zhí)行完成后不向調(diào)用者返回函數(shù)值,則稱為無(wú)返回值函數(shù)。此類函數(shù)主要用于完成某種特定的處理任務(wù)(類似于Basic、Pascal等語(yǔ)言中的過(guò)程),如:printf函數(shù)實(shí)現(xiàn)輸出功能,就沒(méi)有返回值。用戶在定義一個(gè)無(wú)返回值函數(shù)時(shí),需要指定其返回值類型為空類型,即void類型。從函數(shù)有無(wú)參數(shù)的角度,可以將函數(shù)分為:有參函數(shù),那么它就是一個(gè)有參函數(shù)。如:printf、scanf就是有參函數(shù),在調(diào)用時(shí)需要指明輸出、輸入在函數(shù)定義和聲明中使用的參數(shù),稱為形式參數(shù),簡(jiǎn)稱為形參,用于表明一個(gè)函數(shù)需要接收的數(shù)據(jù);在函數(shù)調(diào)用時(shí)給出的參數(shù)稱為實(shí)際參數(shù),簡(jiǎn)稱為實(shí)參,用于給被調(diào)用的函數(shù)傳無(wú)參函數(shù)們前main。7.2答:C語(yǔ)言中函數(shù)定義的格式有兩種。第一種是傳統(tǒng)格式(或稱為K&R格式),是早期編譯系統(tǒng)使用的格式;第二種是現(xiàn)代格式(或稱為ANSI格式),是現(xiàn)代編譯系統(tǒng)采用傳統(tǒng)格式:[存儲(chǔ)類型][數(shù)據(jù)類型]函數(shù)名([形參名1[,形參名2[,……]]])[數(shù)據(jù)類型1形參名1;[數(shù)據(jù)類型2形參名2;[……]]]{[函數(shù)體]welcome}現(xiàn)代格式:[存儲(chǔ)類型][數(shù)據(jù)類型]函數(shù)名([數(shù)據(jù)類型1形參名1[,數(shù)據(jù)類型2形參名2[,……]]]){[函數(shù)體]}格式:函數(shù)名([實(shí)參1,實(shí)參2,……])功能:調(diào)用函數(shù)名指定的函數(shù)。7.4填空題(1)10(2)15(3)4,3,7(4)12334(5)x<ar[i][j]ar[i][j]br[i]=x(6)intF(int);longSunFun(int);F(x)x*x+17.5函數(shù)1和函數(shù)2之間除變量i和j的存儲(chǔ)類型不同外,其它均相同。當(dāng)函數(shù)只執(zhí)行一次時(shí),兩個(gè)都是正確的;但是當(dāng)函數(shù)在程序中被反復(fù)多次調(diào)用時(shí),函數(shù)2就是錯(cuò)誤的。條件表達(dá)式n<=0||(!(n&1)&&n!=2)用于在輸入的參數(shù)n不是正數(shù)或者為不等于27.6intF(int);voidmain(){printf("inputanumber:");welcomescanf("%d",&a);if(F(a)==0)e}intF(inta){intbc,d;ba;c=a%100/10;d=a%10;return;eurn}7.7#include<stdio.h>#defineDAYS30doublegathering(){AYS}doublepaying(){ndoublepay,s=0;for(n=1,pay=0.01;n<=DAYS;++n,pay+=pay)s+=pay;rns}voidmain(){printf("gathering:%.2f\npaying:%.2f.\n",gathering(),paying());}7.8#include<stdio.h>doubleL(intn,doublex);voidmain(){intmy;scanf("%d%d",&m,&y);printf("%.2f\n",L(m,y));}doubleL(intn,doublex){if(n==0)return;elseif(n==1)ereturn((2.0*n-1)*L(n-1,x)-(n-1)*L(n-2,x))/n;}7.9#include<stdio.h>#defineN5voidTran(int[N][N]);voidAdd(int[N][N],int[N][N],int[N][N]);voidMul(int[N][N],int[N][N],int[N][N]);voidmain(){ijintA[N][N],B[N][N],C[N][N];for(i=0;i<N;i++)for(j=0;j<N;j++)scanf(&A[i][j]);for(i=0;i<N;i++)for(j=0;j<N;j++)scanf(&B[i][j]);for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%d\t",A[i][j]);}Add(A,B,C);for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%d\t",C[i][j]);}Mul(A,B,C);for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%d\t",C[i][j]);}}voidTran(intA[N][N]){intijtfor(i=0;i<N;i++)for(j=i;j<N;j++){t=A[i][j];A[i][j]=A[j][i];A[j][i]=t;}}voidAdd(intA[N][N],intB[N][N],intC[N][N]){ijfor(i=0;i<N;i++)for(j=0;j<N;j++)C[i][j]=A[i][j]+B[i][j];}voidMul(intA[N][N],intB[N][N],intC[N][N]){inti,j,k;for(i=0;i<N;i++)for(j=0;j<N;j++){C[i][j]=0;for(k=0;k<N;k++)C[i][j]+=A[i][k]*B[k][j];}}7.10遞歸程序:#include<stdio.h>inthalf(ints[],inta,intb,intkey){midifa==b)ifkey==s[a])eturnaereturn(-1);e{mid=(a+b)/2;if(key<s[mid])return(half(s,a,mid,key));if(key>s[mid])return(half(s,mid+1,b,key));if(key==s[mid])returnmid}}非遞歸程序:#include<stdio.h>inthalf(ints[],inta,intb,intkey){intleft=0;intright=n-1;intmiddle;while(left<=right){middle=(left+right)/2;if(x==s[middle])returnmiddle;elseif(x>s[middle])left=middle+1;eright=middle-1;}return-1;}7.11#include<stdio.h>intEncrypt(inta){inti,aa[4],t;aa[0]=a%10;aa[1]=a%100/10;aa[2]=a%1000/100;aa[3]=a/1000;for(i=0;i<=3;i++){aa[i]+=5;aa[i]%=10;}for(i=0;i<=3/2;i++){t=aa[i];aa[i]=aa[3-i];aa[3-i]=t;}t=0;for(i=0;i<4;i++)t=t*10+aa[i];}voidmain(){scanf("%d",&a);printf("encryptedcode:%d.\n",Encrypt(a));}7.12#include<stdio.h>intlength(charp[]);voidmain(){tlencharstr[80];printf("pleaseinputastring:\n");scanf("%s",str);len=length(str);printf("thestringhas%dcharacters.",len);}intlength(charp[]){tnwhile(p[n]!='\0')turnn}7.13#include<stdio.h>#defineN10voidmain(){inti,j,min,tem,a[N];printf("pleaseinputtennum:\n");for(i=0;i<N;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}for(i=0;i<N;i++)printf("%5d",a[i]);for(i=0;i<N-1;i++){for(j=i+1;j<N;j++)if(a[min]>a[j])tem=a[i];a[i]=a[min];a[min]=tem;}printf("Aftersorted\n");for(i=0;i<N;i++)printf("%5d",a[i]);}參考課本內(nèi)容自己進(jìn)行解答。本內(nèi)容進(jìn)行總結(jié)。welcome9.5a為一維數(shù)組的數(shù)組名,是指向首元素的指針常量,其值為首元素地址2001;a[0]為一維數(shù)組a的首元素,其值為0;b為二維數(shù)組數(shù)組名,是指向首行的指針常量,其值為首行數(shù)組的起始地址,為3001;b[0]相當(dāng)于首行數(shù)組的數(shù)組名,它指向首行首元素,其值為3001;b[0][0]為二維數(shù)組的首元素,其值為0;p1為指向數(shù)組元素的指針變量,當(dāng)前指向數(shù)組a的首元素,其值為2001;p1+1指向數(shù)組a的標(biāo)號(hào)為1的元素,其值為2003;p2是指向一維數(shù)組的指針變量,當(dāng)前指向二維數(shù)組b的首行所對(duì)應(yīng)數(shù)組,其值為3001;p2+1指向二維數(shù)組b的標(biāo)號(hào)為1的行所對(duì)應(yīng)數(shù)組,其值為3009;p3是指向數(shù)組元素的指針變量,當(dāng)前指向二維數(shù)組b的首元素b[0][0],其值為3001,p3+1指向二維數(shù)組b9.6#include<stdio.h>voidmain(){inta[3][3],*p1,(*p2)[3];ijvoidinputmatrix(int*p);voidtranspose(int(*p)[3]);pa;inputmatrix(p1);transpose(p2);for(i=0;i<3;i++)welcome{for(j=0;j<3;j++)printf(“%d”,a[i][j]);printf(“\n”);}}voidinputmatrix(int*p){for(i=0;i<3;i++)for(j=0;j<3;j++)scanf(“%d”,p+3*i+j);}voidtranspose(int(*p)[3]){inti,j,temp;for(i=0;i<3;i++)for(j=i;j<3;j++){temp=*(*(p+i)+j);*(*(p+i)+j)=*(*(p+j)+i);*(*(p+j)+i)=temp;}}9.7#include<stdio.h>#defineN4voidaverage(float(*p)[N],intm){ijataversumfor(i=0;i<m;i++,p++){sum=0;for(j=0;j<N;j++)sum+=*(*p+j);aver=sum/N;printf("theaveragescoreofcourseNo.%dis%5.2f\n",i+1,aver);}}voidsearch(floats[][N],intm){ijfor(i=0;i<m;i++)for(j=0;j<N;j++)if(s[i][j]<60)printf("courseNo.%d:studentNo.%dfailed\n",i+1,j+1);}voidmain(){floatscore[3][4]={{82,75,62,90},{89,79,50,93},{49,62,52,77}};average(score,3);search(score,3);}9.8#include<stdio.h>#defineROWNUM4/*矩陣行數(shù)*/#defineCOLNUM4/*矩陣列數(shù)*//*輸入矩陣子函數(shù)*/voidinputmatrix(floata[][COLNUM]){ijprintf("inputthematrix:\n");for(i=0;i<ROWNUM;i++)for(j=0;j<COLNUM;j++)scanf("%f",&a[i][j]);}/*輸出矩陣子函數(shù)*/voidoutputmatrix(floata[][COLNUM]){ijprintf("thematrixis:\n");for(i=0;i<ROWNUM;i++){for(j=0;j<COLNUM;j++)printf("%5.2f",a[i][j]);}}/*若a[i][i]為0,則找其正下方非零元素所在行,找不到返回-1,否則返回行號(hào)*/intfindnzero(floata[][COLNUM],inti){intj,result=-1;for(j=i+1;j<ROWNUM;j++)if(a[j][i]!=0){result=j;break;}urnresult}/*兩行互換子函數(shù)*/voidexchange(floata[][COLNUM],inti,intj){intk;floattmp;for(k=0;k<COLNUM;k++){tmp=a[i][k];a[i][k]=a[j][k];a[j][k]=tmp;}}ij行的k倍,結(jié)果放回i行*/voidaddrow(floata[][COLNUM],inti,intj,floatk){inttmp;for(tmp=0;tmp<COLNUM;tmp++)a[i][tmp]=a[i][tmp]+k*a[j][tmp];}/*Gauss消去法化階梯形*/voidgauss(floata[][COLNUM]){intij,flag;for(i=0;i<ROWNUM-1;i++){if(a[i][i]==0){flag=findnzero(a,i);if(flag==-1)continue;/*當(dāng)前列剩余元素均零則重新開始循環(huán),處理下一行*/elseexchange(a,i,flag);}for(j=i+1;j<ROWNUM;j++)addrow(a,j,i,-a[j][i]/a[i][i]);/*逐行進(jìn)行消元*/}welcome}voidmain(){floata[ROWNUM][COLNUM];inputmatrix(a);gauss(a);outputmatrix(a);}01234510.1定義結(jié)構(gòu)體變量(成員包括年、月、日),輸入一個(gè)日期并計(jì)算該日是當(dāng)年中第幾天。#include<stdio.h>voidmain(){ruct{welcomeintyear;intmonth;day}date;inti,days;intday_tab[12]={31,28,31,30,31,30,31,31,30,31,30,31};printf("inputyear,month,day:\n");scanf("%d%d%d",&date.year,&date.month,&date.day);days=date.day;for(i=0;i<date.month-1;i++)days+=day_tab[i];if((date.year%4==0&&date.year%100!=0||date.year%400==0)&&date.modays+=1;printf("thedateisthe%dthday",days);}10.2使用指針變量輸入學(xué)生姓名、學(xué)號(hào)及三門課的成績(jī),計(jì)算各自的平均成績(jī)并輸出#include<stdio.h>#defineN3voidmain(){structstudentwelcome{intnumcharname[20];floatscore[N];structstudentstu,*p=&stu;floataver=0;tiprintfd:\n",N);ore]);for(i=0;i<N;i++)}10.3學(xué)生信息包括學(xué)號(hào)、姓名及入學(xué)成績(jī)。輸入一組學(xué)生的信息,按姓名字典序排序。#include<stdio.h>#include<string.h>#defineN3voidmain(){twelcome{intnumcharname[13];floatscore;}stu[N],temp;inti,j,min;for(i=0;i<N;i++)scanf("%d%s%f",&stu[i].num,stu[i].name,&stu[i].score);for(i=0;i<N-1;i++){for(j=i+1;j<N;j++)if(strcmp(stu[min].name,stu[j].name)>0)ifmin=i){temp=stu[min];stu[min]=stu[i];stu[i]=temp;}}printf("排序后為:\n");for(i=0;i<N;i++)printf("%d%s%6.1f\n",stu[i].num,stu[i].name,stu[i].score);}10.4學(xué)生信息包括學(xué)號(hào)、姓名、入學(xué)成績(jī)。輸入一組學(xué)生信息并將成績(jī)最低的學(xué)生刪#include<stdio.h>#defineN3voidmain(){t{intnumcharname[13];floatscore;}stu[N];ntiminfor(i=0;i<N;i++)scanf("%d%s%f",&stu[i].num,stu[i].name,&stu[i].score);for(i=1;i<N;i++)if(stu[i].score<stu[min].score)for(i=min;i<N-1;i++)stu[i]=stu[i+1];printf("刪除后為:\n");for(i=0;i<N-1;i++)printf("%d%s%6.1f\n",stu[i].num,stu[i].name,stu[i].score);}個(gè)數(shù)。#include<stdio.h>structstudent{intnumfloatscore;structstudent*next;intgetlen(structstudent*head){intlen=0;structstudent*p=head;while(p!=NULL){}returnlen}10.6編寫函數(shù)查找指定學(xué)號(hào)的結(jié)點(diǎn)在鏈表中第一次出現(xiàn)的位置,找不到則返回0#include<stdio.h>structstudent{intnumfloatscore;structstudent*next;intlocate(structstudent*head,intnum){structstudent*p=head;inti;while(p!=NULL){}en}10.7編寫函數(shù)刪除鏈表中指定位置的結(jié)點(diǎn)#include<stdio.h>structstudent{intnumfloatscore;structstudent*nex

溫馨提示

  • 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)論