程序設計基礎作業(yè)與實驗參考答案_第1頁
程序設計基礎作業(yè)與實驗參考答案_第2頁
程序設計基礎作業(yè)與實驗參考答案_第3頁
程序設計基礎作業(yè)與實驗參考答案_第4頁
程序設計基礎作業(yè)與實驗參考答案_第5頁
已閱讀5頁,還剩95頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

程序設計基礎

實驗與習題參考答案

(最終版)2016年12月14日注:未經(jīng)全面測試,僅供參考,發(fā)現(xiàn)錯誤,請及時修正!目錄TOC\o"1-5"\h\z\o"CurrentDocument"第二章 1\o"CurrentDocument"第三章 3\o"CurrentDocument"第四章 7\o"CurrentDocument"第五章 16第六章 22\o"CurrentDocument"第七章 46\o"CurrentDocument"第八章 71\o"CurrentDocument"第九章 83\o"CurrentDocument"第十章 85\o"CurrentDocument"第十一章 91\o"CurrentDocument"第十二章 97\o"CurrentDocument"第十三章 99第二章用賦值表達式表示下列計算。注意整數(shù)除法,改善為1.0*x(1)y=xa+bC(2)x=(In(1)y=xa+bC(2)x=(Inyla+d2-e26)512(3)sinX FaX成cos——2(4)R= (4)11 1-+一+-R\ R? &(5)(2x)2y=pow(x,(a+pow(b,c)))x=pow(log(sqrt(a+d*d))-exp(26),5.0/2.0)y=sin(X)/(a*X)+fabs(cos(3.14159265*X/2.0))R=1.0/(1.0/R1+1.0/R2+1.0/R3)y=x/(1+x/(3+(2*x*2*x)/(5+pow(2*x,3)/(7+4*x*4*x))))編程序,輸入一個字符,然后順序輸出該字符的前驅(qū)字符、該字符本身、它的后繼字符。#include'*stdio.hnvoidmain()(charcln;scanf(H%c'\&cln);if(cln>33&&cln<126)(printf("%c,%c,%c\n,,,cln-1,cln,cln+1);)else(printf("三個字符不都是可顯示字符\n");2.6編寫程序,輸入兩個整數(shù),分別求它們的和、差、積、商、余數(shù)并輸出include,,stdio.hnvoidmain()(inta,b;intHe,Cha,Ji;intYu;floatShang;printf(M\nInputTwoIntTypeNumber:\nM);scanf(n%d%dH,&a,&b);He=a+b;Cha=a-b;Ji=a*b;Yu=a%b;Shang=float(a)/float(b);printf(MResultIs:%d,%d,%d,%f,%d\n'\He,Cha,Ji,Shang,Yu);}2.9已知攝氏溫度(C)與華氏溫度(下)的轉(zhuǎn)換關系是:C=|(F-32)編寫一個攝氏溫度(t)與華氏溫度(下)進行轉(zhuǎn)換的程序,輸入攝氏溫度,輸出華氏溫度。#includenstdio.hnvoidmain()(floatC,F;printf("請輸入攝氏溫度:\nH);scanf(u%f;&C);F=9.0*C/5+32;printf(MF=%AnM,F);第三章編寫程序,輸入一個字母,若其為小寫,將其轉(zhuǎn)換成相應的大寫字母,然后輸出。#include”sldio.h”voidmain()(charcl,c2;printf("請輸入一個字母:\nM);cl=getchar();if((cl>=,a')&&(cl<='z,))〃注意這個判斷的形式,直接用字符進行判斷{c2=cl-32;printf("%c\n”,c2);)elseif((cl>=A)&&(clv=Z))〃考慮問題要全面,如果輸入的是大寫字母就直接輸出。printf(M%c\nM,cl);elseprintf("輸入的不是字母!\n");)編寫程序,判斷給定的3位數(shù)是否為Armstrong數(shù),Armstrong數(shù)是指其值等于它本身每位數(shù)字立方和的數(shù),如153就是一個Armstrong數(shù)。153=13+53+33#include<stdio.h>voidmain(void)(intInData;inta,b,c;printf(MInputaNumber:");scanf(*'%dM,&InData);a=InData/100;b=(InData-l00*a)/l0;c=InData%10;if(InData==a*a*a+b*b*b4-c*c*c)printf("%d是Armstrong數(shù)\n”,InData);elseprintf("%d不是Armstrong數(shù)\n",InData);)編寫程序,讀入一個點的坐標X,Y,計算InX+lnK當X、y在第一象限sinX+cosY當X、y在第二象限乙一<e2x+e3y當X、y在第三象限tan(x+y)當X、y在第四象限#includeMstdio.hn#includenmath.hnvoidmain()(floatx,y,z;printf("輸入兩個數(shù))scanf(H%f%f',&x,&y);if(x>()&&y>0)//x,y軸上的點不屬于任何一個象限printf("%f\n",log(x)+log(y));if(x<0&&y>0)printf("%f\n”,sin(x)+sin(y));if(x<0&&y<0)printf(M%f\nM,exp(2*x)+exp(3*y));if(x>0&&y<0)printf(M%f\nM,tan(x+y));)編程序,輸入一個整數(shù),判斷它能否被3、5、7整除,并輸出如下信息。(1)能同時被3、5、7整除;(2)能同時被兩個數(shù)整除,并指明是被哪兩個數(shù)整除;(3)能被一個數(shù)整除,并指明是哪個數(shù);(4)不能被所有3個數(shù)整除。#include"stdio.h"voidmain()(intn;inta,b,c;printf("pleaseinputn:");scanf(,"%d",&n);a=b=c=0;if(n%3==0)a=l;if(n%5==0)b=l;if(n%7==0)c=l;switch(a+b+c)(case3:printf(M3,5,7n);break;case2:if(a==O)prinlf(“5,7”);if(b==O)printf(H3,7M);if(c==O)printf(,,3,5,');break;case1:if(a==l)printf(nonly3n);if(b==l)printf(Honly5M);if(c==1)printf(Honly7n);break;default:printf(nnevercanbe!M);3.20編程序,當輸入數(shù)值月份時,顯示相應英文月份名稱。例如當輸入1時輸出January,當輸入5時輸出May,等等。參考答案:#includeHstdio.hMvoidmain(){intx;printf(MPleaseinputthenumber:**);scanf(M%dM,&x);switch(x){case1:printf(nJAN\nn);break;case2:printf(nFEB\nH);break;case3:printf("MAR\nM);break;case4:printf(nAPR\nH);break;case5:printf("MAY\n”);break;case6:printf(MJUN\nH);break;case7:printf(,,JUL\nM);break;case8:printf(,,AUG\nn);break;case9:printf(MSEP\nM);break;case10:printf(MOCT\nn);break;case11:printf(nNOV\nH);break;case12:printf(nDEC\nn);break;default:printf("Wrongnumber!\nn);)第四章4.3利用展開式計算ex,到第100項;到余項小于10-8(考慮當0<x<l;x<0;x>l時各應該如何計算)。#include<stdio.h>voidmain(void){inti;floatp=1.0,sum=1.0,x;printf("輸入x的值\n");scanf(n%f,,&x);for(i=l;i<=100;i++){p=p*x/i;sum+=p;}printf("到第100項的結(jié)果為:%f\n”,sum);)到余項小于10-8#include<stdio.h>#defineesp1e-8voidmain(void){inti;floatp=1.0,sum=1.0,x;printf("輸入x的值\n”);scanf(n%r,&x);for(i=l;fabs(p)>=esp;i++){〃要先判斷出它是遞增的還是遞減的p=p*x/i;sum+=p;}printf(”到余項小于10-8的結(jié)果為:%l\n”,sum);)4.13編寫程序,打印所有小于100的可以被11整除的自然數(shù)。#includeMstdio.hHvoidmain()inti=0,n=100;fdr(i=1;i<100;i++)4.16編寫程序,打印所有3位的Armstrong數(shù)。Armstrong數(shù)是指其值等于它本身每位數(shù)字立方和的數(shù),如153就是一個Armstrong數(shù)。153=13+53+33#include<stdio.h>voidmain(void)(inta,b,c,k=100;while(k<999)〃直接限制成三位數(shù),四位數(shù)五位數(shù)都可以同理參考。(a=k/100;b=(k-100*a)/10;c=k%10;if(k==a*a*a+b*b*b+c*c*c)printf("結(jié)果是:%d\n”,k);k++;4.19編程序,打印下圖形式的數(shù)字金字塔。11211232112343211234543211234567890987654321參考答案:#include"stdio.h"voidmain()(inti,j,k,l;for(i=l;i<=10;i++)(forO=l;j<=10?i;j++)〃打印空格printf(n”);for(k=l;k<=i;k++){if(k==10) //或者是printf(',%2d',,k%10)printf(n%2dM,k-10);elseprintf(',%2d,;k);}for(l=i-l;l>O;l-)printf(n%2dn,l);printf(,,\nn);4.20斐波納契序列問題。有一對小兔子,出生一個月后變成大兔子開始懷孕;兩個月后,生出一對小兔子,這時共有兩對兔子(一對大兔子,一對小兔子),同時大兔子又再次懷孕;三個月后,以前出生的小兔子變成大兔子,以前懷孕的大兔子又生出一對小兔子,這時共有三對兔子(兩對大兔子,一對小兔子),所有大兔子又全部懷孕;四個月后,以前出生的小兔子變成大兔子,以前懷孕的大兔子又各生出一對小兔子,這時共有五對兔子(三對大兔子,兩對小兔子),所有大兔子又全部懷孕;五個月后,以前出生的小兔子變成大兔子,以前懷孕的大兔子又各生出一對小兔子,這時共有八對兔子(五對大兔子,三對小兔子),所有大兔子又全部懷孕;假設在兔子的生養(yǎng)過程中沒有死亡。編程序,輸入n,計算n個月后,有多少對兔子,并輸出。參考答案:#include"stdio.h"voidmain()(intx,y,z;inti;intn;printf(Mpleaseinputn:");scanf("%d”,&n);x=0;〃大兔子對數(shù)y=l;〃小兔子對數(shù)for(i=l;i<=n;i++)(z=x;x=x+y;〃兔崽子全部長成大兔子y=z;〃本來有多少對大兔子,就生出多少對小兔子。}printf(Mthetotlenumberis%d\n”,x+y);〃大兔子加小兔子個數(shù)4.23求解非線性方程f(x)=0的牛頓迭代法的迭代公式是:xgn+1nf,(xn)編寫程序,用此方法求方程f(x)=x〃+x3+l=0在x°=-l附近的根。#include"stdio.h"#include"math.h"#defineeps1e-6doublef(floatx)]returnpow(x,41)+pow(x,3)+l;Idoubleff(floatx)(return41*pow(x,40)+3*x*x;)voidmain()(doublex0,xl;x0=0.0;xl=-1.0;do{x0=xl;xl=x0-f(x0)/ff(x0);}while(fabs(xO-xl)>eps);printf(Mx=%f\nM,xO);)4.29棋盤麥粒#include,,stdio.hn#includewmath.hwvoidmain()(doublev,i,n,r,w;〃數(shù)據(jù)會溢出,所以是double型i=l;n=64;r=l;w=0;fbr(i=l;i<=n;i++)(w=w+r;r=2*r;

v=w/1.4e8;printf(M%e\nM,v);)4.6編程序,打印斐波納契序列前20項。斐波納契序列是第1、2兩項為1,以后每項為前兩項之和,如下:1,1、2、3、5、8、13>22、 #includenstdio.hMintmain(intargc,char*argvf])(inti;intFi=l,Se=l;intCu;printf(,,%8d%8d,,,Fi,Se);for(i=3;i<=20;i++)(Cu=Fi+Se;printf("%8d”,Cu);if(i%5==0){)Fi=Se;Se=Cu;}return0;)4.20編程序,打印圖4.52字符圖形的左側(cè)三分之一部分。ABCDEFGHIBCDEFGHIACDEFGIHABDEFGHIABCEFGHIABCDABBBABCDEFGHIBCDEFGHIACDEFGIHABDEFGHIABCEFGHIABCDABBBCCCCCDDDDDDD

EEEEEEEEEBCDEFGHIACDEFGHIABDEFGHIABCEFGHIABCDFGHIABCDEFGHIABCDEEFGIHABCDDEFGIHABCCDEFGIHABBCDEFGHIAABCDEFGHIFFFFFFFFFEEEEEEEEEFGHIABCDEEFGIHABCDDEFGIHABCCDEFGIHABBCDEFGHIAABCDEFGHIFFFFFFFFFEEEEEEEEEDDDDDDDCCCCCBBBFGHIABCDEFFGHIABCDEEFGHIABCDDEFGHIABCCDEFGHIABBCDEFGHIA圖4.52字符圖形#include"stdio.h"intmain(intargc,char*argv[])(chari;intj;charPrintChar;for(i=,A*;i<='F';i++)(for(j=0;j<9;j++)(PrintChar=((i+j)-'A')%9+'A';printf(H%cM,PrintChar);}printf(,'\nH);)for(i=,E,;i>='A';i-)(for(j=0;j<9;j++)(PrintChar=((i+j)-,A,)%9+'A,;printf(n%cPrintChar);)printf(n\nM);)return0;}4.29古印度有一位十分好玩的國王要獎勵為他發(fā)明國際象棋的宰相達依爾,問他要什么。達依爾回答:“陛下,只要在國際象棋棋盤的第一個格子中放一粒麥子,第二個格子中放兩粒麥子,第三個格子中放四粒麥子,第四個格子中放八粒麥子, 如此下去,以后每個格子中都放它前一個格子中麥子數(shù)的兩倍,這樣放滿棋盤的64個格子為止即可。”.國王覺得這很容易,于是開始獎賞,沒想到一袋麥子很快就用完了,下一袋也很快就用完了,最后一算全印度的麥子全部用上也不夠。請編程序計算所需麥子的體積(一立方米麥子約1.4X1()8粒)。#include"stdio.h"#includeHmath.hMvoidmain()(doublev,i,n,r,w;i=l;n=64;r=l;w=0;for(i=l;i<=n;i++)(w=w+r;r=2*r;)v=w/1.4e8;printf(H%e\nH,v);)P22_45.(習題集)判斷給定字符序列中(與)、[與]、{與}是否配對(個數(shù)相等).include“stdio.h"http://因為沒有相交要求,所以直接計數(shù)就行了intmain(intargc,char*argv[])(charInChar;InChar=,A';inti,j,k;i=0;j=0;k=0;do(scanf(,,%c,,,&InChar);if(InChar=='(')i++;if(InChar==')')i—;if(InChar=='[,)j++;if(InChar=-J,)j-sif(InChar=='{,)k++;if(InChar=='}')k—;}while(InChar!='#');if(i==0)printf")配對\n");elseprintf("()不配對\n");if(j==O)printf(”[]配對\n");elseprintf("口不配對\n");if(k==O)printf("{}配對\n");elseprintf("{}不配對\n");return0;}P23_50(1)(習題集).讀入n和x,輸出序列的前n項和直到余項小于KT11Sh(x)=x+x3/3!+x5/5!+x7/7!+...+x2n+7(2n+l)!#include"stdio.h"includenmath.h"intmain(intargc,char*argv[])(intn;floatx;inti;printf("輸入n:\nH);scanf(H%dM,&n);printf("輸入x:\iT);scanf(n%f;&x);floatRes=x;floatTemp=x;;for(i=l;i<=n;i++)(Temp=Temp*x*x/((2*i)*(2*i+1));if(fabs(Temp)<1e-8){break;}Res=Res+Temp;)printf("計算結(jié)果為:%f\n”,Res);return0;}P23_50(6)(習題集).讀入n和x,輸出序列的前n項和直到余項小于arth(x)=x+x3/3+x75+x7/7+...+x2,,+l/(2n+l)#include"stdio.h"#include"math.h"intmain(intargc,char*argv[])(intn;floatx;inti;printf("輸入n:\nH);scanf(n%dH,&n);printf("輸入x:\nn);scanf(n%F,&x);floatRes=x;floatTempl=x;floatTemp=x;;for(i=l;i<=n;i++){Temp1=Templ*x*x;Temp=Templ/(2*i+l);if(fabs(Temp)<1e-8){break;)Res=Res+Temp;)printf("計算結(jié)果為:%f\n”,Res);return0;1P24_51(2)(習題集).用展開式計算圓周率PI到IO-精度,PI/2=(2/l)X(2/3)X(4/3)X(4/5)X(6/5)X(6/7)X(8/7)....(2n/2n-l)X(2n/2n+l)......#includeMstdio.hM#include"math.h"intmain(intargc,char*argv[J)(inti;floatTempP=0;floatTempC=l;i=l;while(fabs(TempC-TempP)>=1e-5)//float型的函數(shù)做余項,不要直接判等為零,算的是兩項的差值是否小于特定值。(TempP=TempC;TempC=TempP*(2*i)*(2*i)/(2*i-1)/(2*i+1);i++;)printf("計算結(jié)果為:%.6f\n",TempC);return0;第五章5.1編程序計算,、 p2(x)+5x.一、y(X)=1vf =?p(X+2)p(x+5)-vx其中,、f(ux0.3,u)+〃/2

n(u?= #include"stdio.h"includeMmath.h"floatf(floatv,floatw){return(w+v)/(7*v);)floatp(floatu)(return(f(0.3*u,u)+u/2)/(2*u);}floaty(floatx)(return(p(x)*p(x)+5*x)*p(x+2)/(p(x+5)-sqrt(x));)voidmain()(floatx;floatResult;printf(n\nlnputx:\nH);scanf(n%r,&x);Result=y(x);printf(M\nTheresultis:%f\nM,Result);)5.2編寫程序,輸入實數(shù)a、b、c的值,計算并輸出以下算式的值。4.25(〃+b)+ln(a+b+飛a+b+ )t a+bT= j 4.25+ln(c+Vc4--)

c#include"math.h"include,rstdio.h"floatT_ABC(floata,floatb,floatc)(floatResult;Result=(4.25*(a+b)+log(a+b+sqrt(a+b)+1.0/(a+b)))/(4.25+log(c+sqrt(c)+1.0/c));returnResult;)voidmain()(floatx,y,z;floatT;printf(nInputa,b,c\nH);scanf(n%f%f%f',&x,&y,&z);T=T_ABC(x,y,z);printf(MResult:%f\n';T);}P24.54(習題集).編寫程序,當1.0、2.0、3.0、….20.0時,計算如下函數(shù)到10層嵌套。F(x)=l+l/(l+l/(l+l/(l+....+l/(l+l/x)...)))#include"stdio.h"intmain(intargc,char*argv[J)(floatTempResult;for(floatx=1.0;x<=20.0;x++)(TempResult=x;for(inti=0;i<10;i++)(TempResult=1+1/TempResult;printf(“第%2d步:結(jié)果:%10.6AnM,i,TempResult);}printf("x=%10.6f,Result:%l0.6f\n\n\nM,x,TempResult);}return0;}編程序,輸入m、n的值,計算并輸出:m!(m-n)!n!#include"stdio.h"intfac(intn){intp=l;for(;n>l;n-)p=p*n;returnp;}main(){intm,n,t;floatf;printf(Minputm,n\n");scanf(*'%d%dw,&m,&n);if(m<n){t=m;m=n;n=t;)printf(,'f=%5.2f\n,\(float)fac(m)/(fac(m-n)*fac(n)));}分別編寫函數(shù),計算復數(shù)的加法、減法、乘法、除法,復數(shù)z表示成z=a+ib.#include<stdio.h>#include<stdlib.h>doubleRealPJmageP;voidadd(doublea,doubleb,doublec,doubled)/*求和*/{RealP=a+c;ImageP=b+d;)voidsub(doublea,doubleb,doublec,doubled)/*求差*/(RealP=a-c;ImageP=b-d;)voidproduct(doublea,doubleb,doublec,doubled)/*求乘積*/(RealP=a*c-b*d;ImageP=b*c+a*d;)voiddivi(doublea,doubleb,doublec,doubled)/*除法*/(doubleTempi;doubleTemp2;doubleTemp3;Templ=a*c+b*d;Temp2=b*c-a*d;Temp3=c*c+d*d;RealP=Temp1/Temp3;ImageP=Temp2/Temp3;}intmain()(doublea,b,c,d;//inti,n;intchoose;puts("Thisprogramisaboutthecalculationoftwocomplexes.H);/*菜單*/puts(Ml:Do+oftwocomplexes0);puts(M2:Do-oftwocomplexes");puts(M3:Do*oftwocomplexes");puts(M4:Do/oftwocomplexes11);puts("5:Exit");while(l)/*循環(huán)計算*/(while(l)/*輸入格式檢測,并輸入第一個復數(shù)*/{puts(nPleaseinputtherealpartandvirtualpartoffirstdigit:");if(scanf(,,%If%lf',&a,&b)==2)break;fflush(stdin);}while(l)/*輸入格式檢測,并輸入第二個復數(shù)*/{puts(nPleaseinputtherealpartandvirtualpartofseconddigit:'1);if(scanf(M%lf%ir,&c,&d)==2)break;fflush(stdin);}while(l)/*菜單選擇*/{puts(nInputyourchoose:(l-5)M);if(scanf(,"%d",&choose)==1)break;fflush(stdin);)switch(choose)(add(a,b,c,d);puts(uThesumoftwodigitsis:'1);/*顯示相加的結(jié)果*/printf(ImageP>=O?,,%lf+%lfi\n":M%lf%lfi\n,\RealP,ImageP);break;sub(a,b,c,d);puts(nThesuboftwodigitsis:'1);/*顯示相減的結(jié)果*/printf(ImageP>=O?,'%lf+%lfi\n',:',%lf%lfi\n'\ReaIP,ImageP);break;product(a,b,c,d);puts(HTheproductoftwodigitsis:1');/*顯示相乘的結(jié)果*/printf(ImageP>=O?,'%lf+%lfi\n,':,,%lf%lfi\n,\RealPJmageP);break;divi(a,b,c,d);puts(nThedivisionoftwodigitsis:'1);/*顯示相乘的結(jié)果*/printf(ImageP>=O?"%lf+%lfi\n":',%lf%lfi\n,\RealP,ImageP);break;default:return0;)}//system(upauseM);return0;)分別編寫函數(shù),檢測一個字符是否空格、數(shù)字、元音字母includeMstdio.hM#include"math.h"voidcheck(charch)(if(ch==*printf(M%cisablank",ch);elseif(ch>='0,&&ch<='9,)printf(n%cisanumber",ch);elseif(ch=='a,||ch=='A,||ch==,o,||ch=='O,||ch=='e,||ch=='E|||ch==,i,||ch==,r||ch=='u'||ch==,U1)printf(H%cisayuanyin",ch);elseprintf(n%cisaotherchar'*,ch);}main(){charch;printf(ninputachar\nn);scanf(H%ch'\&ch);check(ch);)編寫一個函數(shù)f(n),求任意4位正整數(shù)n的逆序數(shù)。例如,當n=2345時,函數(shù)值為5432o#include"stdafx.h"#include“sldio.h"intf(intn)(intQianW,BaiW,ShiW,GeW;intResult;intTemp;Temp=n;GeW=Temp%10;Temp=Temp/10;ShiW二Temp%10;Temp=Temp/10;BaiW=Temp%10;QianW=Temp/10;Result=1000*GeW+100*ShiW+10*BaiW+QianW;returnResult;)voidmain()(intInData;printf(MInputdata:\nw);scanf(M%dH,&InData);printf(nTheResultis:%d\nH,f(InData));6.1編寫函數(shù),把給定的整數(shù)數(shù)組中的。元素全部移到后面,且所有非0元素的順序不變。#include<stdio.h>#defineN10voidMoveZero(intInArray[],intEleMents)(inti,j,k;intTemp;for(i=EleMents-2;i>=0;i—)(if(InArray[i]==0)(for(j=i;j<EleMents-l;j++)(Temp=InArray[j];InArray[j]=InArray[j+1];InArray[j+1]=Temp;}))printf("移動后結(jié)果:\n");for(k=0;k<EleMents;k++)(printfC%?5d”JnArray[k]);)printf(H\nM);}voidmain(void)(intm;intAnyArray[N];printf("輸入%(1個整數(shù):\nn,N);for(m=0;m<N;m++)(scanf("%d",&AnyArray[m]);)MoveZero(AnyArray,N);6.6編函數(shù),把整數(shù)組中值相同的元素刪除得只剩一個;并把剩余元素全部串到前邊。include,,stdio.hnvoidDeleteSameEls(intArr[],intElNum)(inti;intCurElNum;intj;intk;CurElNum=EINum;for(i=0;i<CurEINum;i+4-)(for(j=i+l;j<CurElNum;j+4-)(if(Arr[j]==Arr[i]){for(k=j;k<(CurE!Num-1);k++)(Arr[k]=Arr[k+l];1Arr[CurElNum-l]=-9999;CurElNum—;printf(Mi=%dj=%d:M,ij);for(intm=O;m<ElNum;m++)(printf(M%2dH,Arr[m]);}printf(H\nM);j--;})intmain(intargc,char*argv[])(intTestArr[1000];intRealArrElNum;printf("輸入數(shù)組元素數(shù)(小于1000):");scanfC^d'\&RealArrElNum);printf("輸入數(shù)組元素:”);for(intl=O;l<RealArrElNum;l++)scanf("%d",&TestArr[l]);)printf("原始數(shù)據(jù):");for(intn=O;n<RealArrElNum;n++)(printf("%3d”,TestAnlnD;)printf(H\n\nM);DeleteSameEls(TestArr,RealArrElNum);printf(”\n刪后數(shù)據(jù):”);for(intm=0;m<RealArrElNum;m+4-)(printfC%3dM,TestAir[m]);}printf(M\nH);return0;)6.8編寫函數(shù)判斷任意給定的二維整數(shù)組(100x100)中是否有相同元素include“stdio.h"#defineRealRow100#defineColumn100intOutArr[Column*RealRow];intCounter=0;boolIsHaveSameEle(intInArray[][Column],introw)(inti,j;intkJ;boolflag=false;for(i=0;i<row;i++)(for(j=0;j<Column;j++)(intkey=InArray[i][j];boolHaveSame;HaveSame=false;for(k=i;k<row;k++)if(HaveSame)(break;if(k==i)(1=3+1;}else(1=0;}for(l;l<Column;l++)(if(InArray[k][l]==key)(flag=true;if(!HaveSame){boolTempFlag=false;for(intTemp=0;Teinp<Counter;Temp4-+){if(OutArr[Temp]==key)(TempFlag=true;break;}}if(!TempFlag){OutArr[Counter]=key;Counter++;HaveSame=true;break;}})}}}}returnflag;voidmain(void)(intAnArray[RealRow][Column];intm,n;printf("?fl!jA%dX%d的二維數(shù)組:\n",RealRow,Column);fbr(m=0;m<RealRow;m++){fbr(n=0;n<Column;n++)(scanf("%d'',&AnArray[m][n]);})if(IsHaveSameEle(AnArray,RealRow))(printf("有%d個相同的元素如下:\nM,Counter);fbr(intp=0;p<Counter;p++)(printf(n%dn,OutArr[p]);)printfC'\nH);)else(printf("無相同的元素!\n");}1編寫函數(shù),把矩陣A轉(zhuǎn)置A3并存入A中。#include"stdio.h"#defineRealRow 4#definecolumn 3voidToTranspose(intInMatrix[][column],introw){intTempMatrixPlcolumn][RealRow];inti,j;for(i=0;i<row;i++)(for(j=0;j<column;j++){TempMatrixP[j][i]=InMatrix[i][j];)intTempArray[RealRow*column];intcounter=0;for(i=0;i<column;i++)(for(j=0;j<row;j++)(TempAiray[counter]=TempMatrixP[i][j];counter++;counter=0;for(i=0;i<row;i++)(fbr(j=0;j<column;j++)(InMatrix[i][j]=TempArray[counter];counter++;)))voidmain(void)(intAnyMatrix[RealRow][column];intm,n;intCalCounter;CalCounter=0;printf("輸入%(1X%d的矩陣:\nM,RealRow,column);for(m=0;m<RealRow;m++)(fbr(n=0;n<column;n++)(scanf(H%dn,&AnyMatrix[m][n]);)}ToTranspose(AnyMatrix,RealRow);printf("輸出轉(zhuǎn)置后的%dX%d的矩陣如下:\n",column,RealRow);for(m=0;m<RealRow;m++)fbr(n=0;n<column;n++){printf(M%-4dM,AnyMatrix[m][n]);CalCounter++;if(CalCounter%RealRow==0)(printfCVn**);))))編寫函數(shù),找出給定二維整數(shù)組A中的所有鞍點。若一個數(shù)組元素A[iJ]正好是矩陣A第i行的最小值,第j列的最大值,則稱其為A的一個鞍點。include"stdio.h"#defineRealRow 3#definecolumn 4voidFindAnPoint(intInArray[][column],introw)(intij;intAnPoints=0;intTempAnPoints[RealRow*column][3];for(i=0;i<RealRow;i++)(fbr(j=0;j<column;j++)(intkey;key=InArray[i][j];boolRowMini;boolColumnMax;RowMini=true;ColumnMax=true;for(intm=0;m<column;m4-+){if(InArray[i][m]<key)(RowMini=false;break;)}for(intn=0;n<RealRow;n++)(if(InArray[n][j]>key)(ColumnMax=false;break;if(RowMini&&CoiumnMax){TempAnPoints[AnPointsJ[OJ=key;TempAnPoints[AnPoints][1]=i+l;TempAnPoints[AnPoints][2]=j+l;AnPoints++;}))if(AnPoints>0)(printf("\n%d個鞍點及其下標如下;\n",AnPoints);printf("%-6s%-6s%-6s%-6s\n"J序號","鞍點","行","列");for(intp=0;p<AnPoints;p++)(printf(,,%-6d%-6d%-6d%-6du,p+1,TempAnPoints[p][0],TempAnPoints[p][1],TempAnPoints舊⑵);primf(“\n");))else(printf(*'\n無鞍點\n");)}voidmain(void)(intAnyArray[RealRow][column];intx,y;printf("輸入%(1X%d的二維數(shù)組:\n",RealRow,column);for(x=0;x<RealRow;x++)fbr(y=0;y<column;y++)scanf("%d",&AnyArray[x][y]);)]FindAnPoint(AnyArray,RealRow);6.18數(shù)組A未排序;今有一個索引數(shù)組B保存A的下標。編程序,不改變數(shù)組A,只改變數(shù)組B完成對A的排序。如下圖所示:ABAB1011057273535284844541抖三序前升,序后#include<stdio.h>voidmain(){inta[5]={10,7,5,8,4);intb[5]={1,2,3,4,5);inti,j,k,r;for(i=0;i<4;i++)(k=i;for(j=i+l;j<5;j++)(if(a[b[j]-l]<a[b[k]-l])(k=j;))if(k!=i)(r=b[i];b[i]=b[k];b[k]=r;)}for(i=0;i<5;i++))printf("\n");)6.20設整數(shù)集合M定義如下:1)1EM;2)若xGM,貝!|2x+lGM,3x+lGM;3)沒有別的整數(shù)屬于集合M.編程序按遞增順序生成并輸出集合M的前30項。再編一個函數(shù),對任意給定整數(shù)z,判斷它是否屬于集合M。參考答案:13479101315192122272831391347910131519212227283139⑴編程序按遞增順序生成并輸出集合M的前30項。#include<stdio.h>voidmain(){intcount;intn;inti;inta[30];a[0]=l;count=l;n=2;while(count<=30)(fbr(i=0;i<=count-1;i++)if((n==a[i]*2+l)||(n=a[i]*3+l)){count++;a[count-l]=n;break;)n++;)for(i=0;i<30;i++)printf(n%4dH,a[i]);}(2)再編一個函數(shù),對任意給定整數(shù)z,判斷它是否屬于集合Mo#include<stdio.h>intfun(intm)(intresult1=0,result2=0;if(m==l)return1;if(m>l)(inta=(m-l)%2,b=(m-l)%3;if(a==O)resultl=fun((m-1)/2);if(b==O)result2=fun((m-1)/3);return(resultl||result2);}elsereturn0;}voidmain(){intdata;scanf(n%d",&data);if(fun(data)==l)printf(Hyes\nH);elseprintf(,,no\nH);}第(2)題的另一種解法#include"stdio.h"voidOut_M_N(intOutput_Nums)〃輸出集合中排序后的數(shù)據(jù)(intArrRes[10000];〃最多可輸出10000個M集合中的數(shù)據(jù)intij,k;ArrRes[0]=l;i=j=0;k=l;while(k<Output_Nums)(if((2*ArrRes[i]+l)<(3*ArrRes|j]+1))(ArrRes[k]=2*ArrRes[i]+1;i++;)elseif((2*ArrRes[i]+1)==(3*ArrRes[j]+1))(ArrRes[k]=2*ArrRes[i]+1;i++;j++;)else(ArrRes[k]=3*ArrRes[j]+1;j++;)k++;)for(intm=0;m<Output_Nums;m4-+)(if(m%10==0){printf(n\n");)printf(M%-8dM,ArrRes[m]);voidDelete_OneElement(intArr[],intDelete_Num,intArr_Nums)〃刪除數(shù)組中的元素(for(inti=Delete_Num;i<Arr_Nums-l;i++)(Arr[i]=Arr[i+lJ;}}boolIslnclude(intZ)〃判斷是否屬于集合M(intTempArr[100]={0};intCurrent_Nums=1;TempArr[O]=Z;if(Z==1)returntrue;while(Current_Nums!=O)intPre_2_Value;intPre_3_Value;Pre_2_Value=(TempArr[0]-1)%2;Pre_3_Value=(TempArr[0]-1)%3;if((Pre_2_Value!=0)&&(Pre__3_Value!=0)&&(Current_Nums==l))returnfalse;elseif((Pre_2_Value!=0)&&(Pre_3_Value!=0)&&(Current_Nums>1)){Delete_OneElement(TempArr,0,Current_Nums);Current_Nums—;continue;〃從頭開始判斷數(shù)組中的元素}if(Pre_2_Value==0){intTemp_2;Temp_2=(TempArr[0]-1)/2;if(Temp_2==l)returntrue;elseif(Temp_2>l)(TempArr[Current_Nums]=Temp_2;Current_Nums++;if(Pre_3_Value==0)(intTemp_3;Temp_3=(TempArr[0]-1)/3;if(Temp_3==l)returntrue;elseif(Temp_3>l){TempArr[Current_Nums]=Temp_3;Current_Nums++;})Delete_OneEiement(TempArr,0,Current_Nums);Current_Nums-;)returnfalse;)intmain(intargc,char*argvf])intTestNum;TestNum=O;while(TestNum!=-1)(printf(n輸入要判斷的數(shù)(輸入?1退出)\n");scanf("%d”,&TeslNum);if(TestNum==-l)break;printf("下面是M集合的前%(1項\0”維§1?41101);Out_M_N(TestNum);printf(,'\nn);if(IsInclude(TestNum))printf(n%d屬于集合M\n\n'\TestNum);elseprintf(*'%d不屬于集合M\n\n\TestNum);)return0;)6.22判斷一個字符序列中(與)、[與]、{與}是否配對且互不相交。注:程序未做全面測試,僅供參考。#include"string.h"#defineSZ500voidInitStack(int*StackTop)(*StackTop=0;)boolIsStackEmpty(int*StackTop)(if((*StackTop)==0)(returntrue;)else(returnfalse;))boolPushStack(charCharStack[],charInChar,int*StackTop,intStackSize)if((*StackTop)>(StackSize-1))printf("棧滿,壓人失敗!\n“);returnfalse;}else{CharStack[*StackTop]=InChar;*StackTop=*StackTop+1;returntrue;))boolPopStack(charCharStack[j,char*PopChar,int*StackTop)〃出棧并刪除枝頂元素(if((*StackTop)<=0)(printf("???,彈出失?。n");returnfalse;)else(StackTop=*StackTop-1;PopChar=CharStack[*StackTop];returntrue;))boolGetTopEleMentOfStack(charCharStack[],char*TopCharOfStackjnt*StackTop)〃只獲取棧頂元素,不改變棧頂(if((*StackTop)<=0)(printf("???,獲取棧頂元素失??!\n");returnfalse;)else(TopCharOfStack=CharStack[*StackTop-1];returntrue;))〃目前能判斷兩種情況:1.返回值為true,配對且互不相交;2.返回值為false,不配對或相交//特殊情況:默認要判斷的字符串至少有一個括號成分,如果字符串不包含任何括號成分,則〃視為配對且不相交,函數(shù)返值為true,但會有具體提示信息boolIsPaAndNotInt(char*TheString)(intStackSize=SZ;charCharStack[SZ];intStackTop=0;boolIsPairingAndNotIntersecting=true;boolHaveBracketEle=false;intStringLenth;StringLenth=strlen(TheString);InilStack(&StackTop);for(inti=O;i<StringLenth;i++)(if(TheString[i]==*(,||TheString[i]==*[l|TheString[i]==,{,)(HaveBracketEle=true;if(!PushStack(CharStack,TheString[i],&StackTop,StackSize))(returnfalse;})elseif(TheString[i]=-),)(HaveBracketEle=true;if(IsStackEmpty(&StackTop))〃???printf("有()不配對,缺少(。\nH);returnfalse;}charTempTopStackChar;GetTopEleMentOfStack(CharStack,&TempTopStackChar,&StackTop);if(TempTopStackChar!='(')〃棧不空但不配對或相交{if(TempTopStackChar=='[')(printf("可能有口與()相交或)不配對,缺少(,如([)]\n");returnfalse;)if(TempTopStackChar==,{*)printf("可能有{}與()相交或)不配對,缺少(,如⑴}\n");returnfalse;))else//暫時配對(PopStack(CharStack,&TempTopStackChar,&StackTop);)}elseif(TheString[i]==']'){HaveBracketEle=true;if(IsStackEmpty(&StackTop))〃棧空(printf("有口不配對,缺少[。\n");returnfalse;)charTempTopStackChar;GetTopEleMentOfStack(CharStack,&TempTopStackChar,&StackTop);if(TempTopStackChar!='[')〃棧不空但不配對或相交(if(TempTopStackChar=="(')(printf("可能有()與口相交或]不配對,缺少[,如[(])\n)returnfalse;)if(TempTopStackChar=='{')(printf("可能有{}與口相交或]不配對,缺少[,如[{]}?");returnfalse;else//暫時配對(PopStack(CharStack,&TempTopStackChar,&StackTop);)}elseif(TheString[i]=='}'){HaveBracketEle=true;if(IsStackEmpty(&StackTop))〃???printf("有{}不配對,缺少{。\n");returnfalse;}charTempTopStackChar;GetTopEleMentOfStack(CharStack,&TempTopStackChar,&StackTop);if(TempTopStackChar!=,{')〃棧不空但不配對或相交{if(TempTopStackCha『='(')Iprintf("可能有()與{}相交或}不配對,缺少{,如{⑴\n");returnfalse;)if(TempTopStackChar=='[')(printf("可能有口與{}相交或}不配對,缺少{,如{[}]\n");returnfalse;)}else//暫時配對{PopStack(CharStack,&TempTopStackChar,&StackTop);)))if(!IsStackEmpty(&StackTop))(printf("有括號不配對,可能缺少)、]或}\n");returnfalse;)if(HaveBracketEle&&IsPairingAndNotIntersecting){printf("括號配對且互不相交。\n");returntrue;)if(!HaveBracketEle)(printf("字符串不包含任何括號成分。\n");returntrue;))voidmain()(charTestString[SZ];charWiUContinue=Y;〃為N表示不再判斷下一個字符串while(WillContinue!='N'&&WillContinue!='n')(printf(M\n請輸入一個字符串:");scanf(H%sM,TestString);IsPaAndNotlnt(TestString);printf("\n繼續(xù)判斷下一個字符串嗎(Y/N)?:");getchar();scanfC^c';&WillContinue);printf(,'\nH);})編寫函數(shù)strchange,把給定的字符串反序。#includeHstring.hMinclude"stdio.h"#defineLen1000boolStrChange(charInString[])(intStrLen=strlen(InString);intMid;inti;Mid=StrLen/2;for(i=0;i<Mid;i++)(charTempCh;TempCh=InString[i];InString[i]=InString[StrLen-i-1];InString[StrLen-i-1]=TempCh;)returntrue;)voidmain(void)(charAnyString[Len];printfCn輸入字符串:”);scanf(H%sM,AnyString);StrChange(AnyString);printf("\n字符串反序后結(jié)果:\n%s\n",AnyString);)編寫函數(shù)strcat,把給定的兩個字符串連接起來。#includeMstring.hM#include"stdio.h"#defineLen1100#defineLen2100#defineLen1000intStrCat(charInString1[],charInString2[],charResString[]){intStrLen1,StrLen2,ResLen;inti;StrLen1=strlen(InString1);StrLen2=strlen(InString2);ResLen=StrLen1+StrLen2;for(i=0;i<StrLen1;i++)|ResString[i]=InStringl[i];)for(i=0;i<StrLen2;i++)(ResString[StrLenl+i]=InString2[i];)ResString[ResLen]='\O';returnResLen;voidmain(void)(charString1[Len1];charString2[Len2];charCatStringlLen];printf(H\n輸入第一個字符串:\n");scanf("%s”,Stringl);printf(H\n輸入第二個字符串:\n");scanf(,'%s,,,String2);StrCat(Stringl,String2,CatString);printf("\n連接后結(jié)果:\n%s\n",CatString);)整理名字表。編寫程序,輸入任意順序的名字表,將其按字典順序排序并輸出。#include<stdio.h>#include<string.h>#defineN5boolNameSort(charInName[][20],intCount)(inti,j,k;charTempi20];for(i=0;i<Count;i++)(k=i;for(j=i+1;j<Count;j++){if(strcmp(InName|j],InName[k])<0){k=j;}}if(k!=i){strcpy(Temp,InName[i]);strcpy(InName[i],InName[k]);strcpy(InName[k],Temp);})printf("\n名字排序后:\nH);for(i=0;i<Count;i++)(puts(InName[i]);}returntrue;voidmain()(charAnyName[N][20J;printf("\n輸入%(1個名字:\n",N);for(inti=0;i<N;i++)(gets(AnyName[i]);NameSort(AnyName,N);)約瑟夫(Josephus)問題古代某法官要判決n個犯人死刑,他有一條荒唐的邏輯,將犯人首尾相接排成圓圈,然后從第s個人開始數(shù)起,每數(shù)到第m個犯人,則拉出來處決;然后再數(shù)m個,數(shù)到的犯人再處決;...;但剩下的最后一個犯人可以赦免。編程序,給出處決順序,并告知哪一個人活下來。#include"stdio.h',voidJhus(intnjnts,intm,intFan[])(inti;intTempN;intTempOut;intTempCount=l;TempOut=s;TempN=n;while(TempN>l)(TempOut=(m+TempOut-1)%TempN;if(TempN==n)TempOut—;printf("第%d個被處決的:%d\n*',TempCount,FanfTempOut]);TempN—;TempCount++;for(i=TempOut;i<TempN;i++){Fan[i]=Fan[i+l];}}printf("活下來的人是:%d\nH,Fan[0]);1intmain(intargc,char*argv[])(inta[]={l23,4,5,6,7,8,9,1011J2,13};Jhus(13,4,3,a);return0;1P63_21(習題集).編寫函數(shù),用“逐步增加遞增子序列”法對整形數(shù)組進行排序#include"stdio.h"voidAddSort(intArr[],intElNum)inti,j,k,r;for(i=l;i<ElNum;i++){while((Arr|j]>Arr[i])&&(j>=0))(j=j-h}r=Arr[i];for(k=i-1;k>=j+1;k-)(Arr|k+l]=Arr[k];)Arr|j+l]=r;)intmain(intargc,char*argv[])(intTestArr|1000];intRealArrElNum;printf("輸入數(shù)組元素數(shù)(小于1000):”);scanf("%d”,&RealArrElNum);printf("輸入數(shù)組元素:”);for(intl=O;l<RealArrElNum;l++)(scanf(,'%d,,,&TestArr[l]);)printf("原始數(shù)據(jù):");for(intn=O;n<RealArrElNum;n++)(printf(H%3dM,TestArr[n]);)printf(M\n\nM);AddSort(TestArr,RealArrElNum);printf("\n排序數(shù)據(jù):");for(intm=0;m<RealArrElNum;m4-4-)(printf(M%3d,,,TestArr[m]);)printf(M\nM);return0;第七章下述程序執(zhí)行后,輸出結(jié)果是什么?#include<stdio.h>char*p[2][3]={“abc”,“defgh”Jijkl”,“mnopqr”Jsluvw”,“xyz”};main()(printf(M%c\nH,***(p+l));printf(,,%c\n,,,**p[O]);printf(M%c\nM,(*(*(p+1)+1))[4]);printf(M%c\nM,*(p[l][2]+2));printf("%s\n,,,**(p+l));)參考答案:mawzmnopqr編寫函數(shù),求給定字符串的長度#include"stdio.h"#include"string.h"intlength(char*str)(inti=0;while(str[i]!='\0')i++;returni;)voidmain()(chars[20];printf("輸入\n");gets(s);printf("串長=%3小11"Jength(s));}7.27編寫比較兩個字符串si、s2大小的程序。當sl>s2時,輸出1;當sl<s2時,輸出-1;當sl==s2時,輸出0。參考答案:#include"stdio.h"intstr_cmp(char*str1,char*str2)while(*strl!='\0,&&*str2!='\0')(if(*strl>*str2)return1;elseif(*strl<*str2)return-1;strl++;str2++;);if(*strl==,\0,&&*str2==,\0,)return0;elseif(*strl!-\0,)return1;elsereturn-1;voidmain()(charsl[100],s2[100];printf(Mpleaseinputthefirststring:°);scanf(H%sM,sl);printf(n\nn);printf(Mpleaseinputthesecondstring:1');scanf(',%s",s2);printf(M\nM);printf(Mtheresultis:%du,str_cmp(s1,s2));printf(,,\nM);)編寫函數(shù),分別求給定字符串中的大寫字母、小寫字母、空格數(shù)字、其他字符的數(shù)目#include"stdio.h"voidcountchar(char*p)(ints[5]={0,0,0,0,0);while(*p!-\0!)(if(*p>=,A'&&*p<='Z,)s[0]++;elseif(*p>-a,&&*p<='z')s[l]+

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論