经典的113道c语言题目及代码解释.docx
1 .输入两个正整数,m和n,求其最大公约数和最小公倍数,#inc1.udc<stdio.h>voidmain()Iinthcftint.ini):尸函数声明*/int1.cd(intjntjnt):/函数声明47intu,v>hj;Prin1.fr'P1.easeinput(wonumbers:n*);scanft"%d.%dM.&u,&v);h=hcf(u.v):Prin1.frHCF=%dn*h);I=Icd(Uxh);Prin1.T1.C.D=%d"J):)in(hcf'(incujntv)IiniUr:if(v>u)(t=uu=vv=ujwhi1.e(r=u%v)!=O)(u=vzv=r:)rcturn(v);im1.cd(i11u.intv.inth)Ircturn(u47);2 .输入一行字符,分别统计出其中字母、空格、数字和其他字符的个数,Winc1.udc<stdio.h>intIetteGdigitvSpacc,others;voidmain()Ivoidcount(char11):chartcxS();PrinifCT1.easeinputswing:nM);gc4s(ex1.);Printf(''string:5"):PUtSaCt);Ieuer-O;digi=O:SP1.KX=0:Othcrs=O;CoUn1.(IeX。;prin1.ftM1.e1.1.er:%d.digi(:,iid.space:%d.o1.hcrs:%(fne.1.e1.ter.digi1.spaceA>1.hers):voidcoun1.(charstr()Iinti;if<(s1.ri)>=,a'siri<=y>(s(ri)>=Wstr(!1.<=Z)>1.etter+:c1.scif(sir|iJ>='(r&&sir|i|<=V)digi(÷÷e1.seif(siri)=32)space+:e1.seothers+;>3 .输入一个正整数求出它是几位数:输出原数和位数C*inc1.de<s(dio.h>intdigit:voidmain()Ivoidcount(char();chartext(80:printfC*P1.easeinputnumbcrsn*);gcu(cxt);PriInfrNumbersAn,*);puts(iext);digit=O;count(cx();Prin1.frdigit%ddigi1.);voidcount(charstr)inii;for(i=0istr(i)!=<0'ii+)if(stri>=<0,str<=,9,)digit÷÷4 .钻入一个正整数.输出原数并逆序打印出各位数字#inc1.udc<stdio.h>voidinvef1.1.ongI11u1.ong);voidnain()Iunsigned1.ongiNumber;PriiHfr'P1.easeinputanuinber:nH);scanf("%1.d',.<iNurnber);prinf(',Theinputnumberis%1.dn,*.iNumber);prin1.f("Theinversenumberis:"):invcrt1.ong1.nt(iNumber);voidinvet1.ongInUongx)Iif(x>=(Mkx<=9)primtr'%dn,x);e1.se(printf(,'%d".x%10);invcrt1.ongInt(x1.O);J)5 .从键盘上输入假设干学生的一门课成绩,统计并输出最高成绩和最低成绩及相应的序号,当输入负数时结束输入.6 .从键盘上输入假设干学生的一门课成绩,计算出平均分,当输入仪数时结未输入。将结果输出。7 .求1.!+2!+3!+20!.凡结果输出.#inc1.udc<stdio.h>voidmain。If1.oats=O.t=1.;intn;fbr(n=1.;n<=20;n+)(t=tn:S=S1H;)Prin1.frI!÷2!+3!+.+20!-%Cw:8 .打印以以下图案:案Winc1.de<sidio.h>voidnain()Iinti,j;PrinIfCThepictureisnw);sia1.iccharpiciurc(4J7=(V7V*a.1«t<1.t,於,:*,11.I1.1.1.JI»for(i=0;i<=3;i+)fortj=0<=6÷÷)printf("%cvic<ufeiU):Primfrr):J9 .打印以以下图案:#inC1.UdCVs【d心.h>voidmain()i11ti.j;Printf("Thepictureis:n*);charpicturc4114=(*'hIJ案:*:拿.於产,:,和).fr(i=OJ<=3zi+)for(j=OJ<=3÷÷)printf("%cpicturei);Primfer):J10 .求以下试子的值,112+1314+1/99-1/100.将结果输出。Winc1.udc<stdio.h>voidmain()f1.oatsum=1.0.1.,s=i:inti;for(i三Ui<=100i+÷)I=Hksum=sum+t:s=-s;Jprin1.f(',h1.2+1.3-1.44-+1./99-1./100=%5.4nnM.sum>:11 .打印出100999之间的所有水仙花数。析nc1.ude<stdi<>.h>voidnain()inti.j.k.n:Pri1.Mf1.n00799之间的所有水仙花数am:W');fbr(n=100n<1000n÷+)(i=n1.:j=n10-i0;k=n%IO;if«n=产i*i+j与专+kk*k)PrintR'%d,n);Iprinf("n,);>12 .求Sn=a÷aa*aaa÷÷aaa之tf1.,n,a由雄盘输入C*inc1.de<s(dio.h>voidmain()Iinta,n.i=1.3n=jn=();prinif('*a.n=:H);SCanfr%d%d”.&a&n):whi1.c(i<=n)(n=tn+a;sn=sn+tn:a=a*10;+i;>Prin1.R“d+aa+aaa+.+aa.a-%dn,*.sn):)13 .打印以以下图案:*拿分*衾*衾#inc1.uck<s1.dio.h>voidmain()JChara1.7=咒'叫*.f产');inti.j.k:charspace=',:Prin1.frThCpicturefbf(i=0u<4u+)prin<f("'n");primf("");for(j=1.y<=ij+)printftj"%c*,space);fortk=0;k<7;k+)Prin1.fr%cf1.:JprintfCn");14 .打印以以下图案:112112321123432I15 .打印以以下图案:123432112321121I16 .编写一个统计学生成绩程序,完成以下功能:输入4个学生的2门课成绩:求出全班的总平均分.将结果输出。#inc1.ude<s1.dio.h>WdcfincN4structstudentIcharnum(3:charnamc4;f1.oatscorc2;f1.oatavr;>s1.uN:voidmain()Iintij;f1.oatsum,avcragc;f<x(i=Oii<Nii÷÷)产输入数据军(Printtrinputscoresofstudcnt%dzn"J÷1.);prinif(*'namc:w);$canfC%sM.$tui|.nan)e);fortj=0<2÷+)PrinWSCore%d:"J+1);scanf(,%stui.scorcyj):Iavcragc=0;/计口/for(i=Oi<NJ÷÷)(SUm=O:fortj=0y<2zj÷÷)sum÷=su(i.scorc(j;stui,avr=sun2;average+=stuij.avr:)average/=N;rinfC,NamescoreIscoe2average”);fr(i=OJ<Ni+)(primf(N%5s%IOsN.stui|.numt$tui.namc);for(j=0<2÷÷)p11n1.f(,'%9.2,.s(ui).sc>rcj);printiV%8.2fn*.stu|i|.avr);Iprinif(',average=%5.2nnM.average);>17 .打印以以下图案:*号*8qindudc<s1.d心.h>voidmain()JChara51=F'叫*.*;*:inti,j.k;charspace=',:printft''Thcpicturei$:w);fb<(i=0d<5u+÷)(printf(n"):printf(""Xfor(j=1.<=iy+)p11ntft"".space);fortk=0k<5k+÷)printft"%c-.a(kh:JPrintfrW);1.&给出年月.t1.计算该H是该年的第几天.#inc1.ude<stdio.h>voidI1.1.ainOintsum_day(int.int);int1.cap(intyear);intyear,n>nh.day.days;prin1.ft,*inputda1.e(year.mnth.day>:*):scanf("od.id.%d*.Aycar.month.day):prinf,%d'%d.(d*,ycar.monch.day);days=sum.day(n>onh.day);if(kap<year>&&mun1.h>=3)days=days+1:PrinIfnSthe%dthdayin(hisyear.W,days);intsum-day(intnwnth.mtday>IimdayJabU3三三0,3128,313031.30,31,31,30,3130,31;inti;for(i=1.zi<11>n1.hu÷+)day+=day_tah|i|:rcturn(day);>int1.eap(intyear)Iint1.eap;1.ea>=yeart4=0yea5100!二OIIyea汽400二二0;return(IeapkI19 .求个广3的整型矩阵而角战元素之和。将原矩阵和求出的和输出。析ndxk<s1.d心.h>voidmain()Joata33um-O;intij:Prinm”请轴入元素:W):for(i=0;i<3;i+)for(j=0j<3y+)scanfC%.Aa(i)j1.):fr(i=0i<3a+)sum=sum+aii);Printf("对角纹之和足:%6.2M,.sum):for(i=0;i<=3;i+)Ifor(j=0jj<=3j+)Prinm-%5.2a"jD:printfCn");20 .求一个川3的矩阵各行元素的平均值:将厘矩阵和求出的平均值全部输出.WinC1.ude<stdioh>voidmain()inia41134.i,j,k;for(i=Od<4j+)fortj=0j<3j+)scanf("%d",*(a+i)+j);forti=0;i<4:i+)Ik=0:f<x(j=0j<3j+)k+=ai1.U:Prin1.f('第%d行的平均值是%d".i+1.k);printft"n");21 .求一个3M的矩阵各列元素的平均值:将原矩阵和求出的平均值全部输出.inc1.udc<stdio.h>voidmain。Iinta(4J3ji(4,ijJc:fbr(i=O;i<4U+)fortj=0<3+)SCanIr%d".*(a+i)+j);for(i=0;i<4;i+)Ik=0;for(j=()Jv3J+)k+=ai11j;PrintfC第d行的平均伯是d"j+1.k);printf("n");22 .求一个3"的矩阵各列元素的最大伯,将原矩阵和求出的M大1.全部输出.#inc1.ude<stdio.h>voidmain()in«a|35|331.i.j.k;fof(i=0:i<3;i+)for(j=0:jv5:j+)scanft%d,*(a+i)+j);fbr(i=0i<3i+)(*(s+i)=*(*(a+j)>:for1.j=kj<5y+)ifC(s+i)<*C(a+i)+j)*(s+i)三*(*(a+i)+j):)fbr(i=O;i<3;i+)(primf("1.ine=%dMax=%dj,s(j);printf('n");I23 .求-个中3的矩阵各行元索的最大值将原矩阵和求出的最大值全部输出.inc1.udc<stdio.h>voidmain()Iinta(4)(3.s4.i.j.k:fbr(iR;i<4:i+)fo<(j=OJ<3+)SCanf(%,*(a+i)+j):fbr(i=O;i<4;i+)(*(s+i)三*(*(a+i);for(j=kj<3y+)if(*(s+i)<*(*(a+i)+j)*(s+i)=(*(a+i)+j);Jfor(i=0:i<4;i+)(pri11(f("Row=%dMax=%d",i.si1.);prin1.ft"n"):24 .求一个M-N的矩阵中元素的最大值.将原矩阵和求出的最大伯全部输出.#inc1.ude<stdio.h>WdefineNIOWcfineM10voidmain()intaN,i,j,k-.max,m.n;SCanfr%d%d,'.m.n);fbr(i=Oa<m;i+>for(j=0<ny+)SCanf("%d".*(a+i)+j>for(i=Ozi<mzi)for(j=0j<nI;j+)(if(ai)U<=ai1.U+1.)max=aij+1.;e1.semax=ai)j:Jki=max;forti=0:i<m-1.:i+)if(ki<=ki+1.)max=k(i+1.:e1.semax=k(ij;pri11(f("%d".nax);>25 .判断一个N“N的掂阵是否为对称矩阵,将原矩阵检出,判断结果输H1.#inc1.ude<stdio.h>IMefineN10voidmain()Iinta|N|N|.i,j.k,n;SCann%An):forti=0:i<n;i+)fortj=0j<ny+)scantC"id".<feafij):fon(i=0;i<n;i+)for(j=i+<nj+)(iRaiJ1.i1.=aj1.i>k=1.:e1.sek=():if(k=O)printf("bushi");e1.sePrintfrShiwXforti=0:i<n:i+)for(j=OJvnJ+)printf1.%d"uij>26 .有一篇文章有三行文字,柘行有80个字符-要求统计出其中英文大写字母、消协字母、数字、空格以及其他字符的个数。#inc1.ude<s1.dio.h>voidmain()inti.j.big=0.sna=0.11m=0.spa-0.o<h=0;char1.cx1.(3)(8O):for(i=<);i<3:i+)(PrinIfr请输入行%dM'j+1.);ge1.s(1.ex1.(i);fortj=Oj<XOtextjj!=V),y÷+)Iif(exti(j|>='A'&&texii(j)<=,Z')big:e1.seif(tcxt!jJ>=a,tcxtiJj<=z,)sma÷÷e1.seiRtextiJU>=Wtex(iJj)<=9)num+;e1.seifacxt1.iHj=',)spa÷÷e1.seOIhf)PrintR”大写字母:%d.big):Prinrtr小写字母:%Gtsma);Prin1.fr数字:%dn-jwm):PrinIa"空格:d'n".spa);Printfr其它:%d.oth);27 .将20个第数放到一维数组中,输出该数处的最大值和最小值.finc1.udc<stdio.h>voidmain()inti.j.11in.tnax,a(21.;Printfr请输入数据Nr);fbr(i=1.;i<=20;i+)(printiK-a%d1.=",i);SCanf-%<r.&aiD:1fbr(i=1.;i<=1.9;i+)(min=i;for(j=2<=19j+)if(a(min>a(jj);amin=a(j;)fbr(i三hi<三19u+)(max=i:for(j=2y<=19y+)if(anm<a(j);anm=a1.j:)PrintR”最大数为:%dn*,a(max);Printfr最小数为:%rfn,afmin);28 .将15个整数放到一维数组中,输出该数组中的最大猿它的下标.然后将它和数组中的最前面的元素对换。ffinc1.udc<stdio.h>voidmain()Iinti,j.min,nax.a116.m.n;Prin1.fr说输入数据加f0f(i=1.ii<=5ji+)(printiatidj=',i);scanf(,ai);)for(i=ki<=14zi+)(max=i;fortj=2<=)4+÷)if(a|ma.|<ii(j);amaxj=aj:m=1.n三PrinIT'最人数卜标为:%d.%dnH.m,n);29 .将字符数组§1“种下标为偶数的元素瞅给外一字符数组312并输出StrI和汨2,#inc1.ude<s1.dio.h>Winc1.udc<string.h>#dct1.ncNIOvoidmain()Iinti,n;charstr1.N.str2(N);ge<s(str1.);fortn=0;n<N:n+)Ii=2*n;str2njs(r1.(i:puts(str1);puts(str2);30 .编写一个程序,符两个字符母连接起来不要使用Sgat函数.Winc1.dc<stdio.h>voidmain<)Icharstr1.2O.str22O:inti=0,j=0;Prin1.fC请输入字符串1:城);scanf("%sM.str1.);Prinm"请输入字符串2:5"):scanf("%s",str2);Whi1.e(SirKiB=tU)')i+:whi1.e(sr2(j!=,0)sir1.i+=sir2(j+:str1.i=W;printf('合并之后的字符率为:%$5”,而1);3】.编写一个程序,符字符数组a中的全部字符更制到字符数组b中不要使用SmrPy函数.#inc1.udc<stdio.h>Winc1.de<sring.h>voidnain()Ichara40,b40;inti:Prin1.(C请输入a:iT):SCanf("%s".a):fbr(i=Oi<=(八)i÷÷)bi=ai:PrinITb%s.b):32 .编写一个程序,找出3个字符申中的最大者,格它输出.#inc1.i*dc<s1.dio.h>#inc1.udc<string.h>voidmain()Icharstring20:charstr32O:inti;tbf(i=0i<3U+÷)ge1.s(s1.ri);if(strcmp(str().str(1.)>0)strcpy(string3rOXe1.sesircpy(s1.ring1.r(IJ):if(strcmp(str(2).string>>0)Mrcp>'(sring3r2);PriInfC最大的字符串是:n%Sn*string);>33 .编写程序,输入任意个1-7之间的整数,将他们转换成时应的英文总词C例如,I转换成MOnday.7转换成Sunday1#inc1.udc<stdio.h>voidmain()inta:Prmtf("输入一个整数:Wxscanf(M%dM,&a):if(a1.>PrintfUMondayVn"):e1.seif(a=2)PriiItfrTUCSday);e1.seif(a=3)PrinIfrwendeSdayW);e1.seif(a=4)prin1.f(nThursdayXn*):e1.seif(a=5)printft;MFridayn");e1.seif(a=6)prin1.fC,Saturdayn*,);e1.seif(a=7)PrimfrSUndayW);e1.seprintf(,'Uf廓IrX)34 .编写程序,输入两个条数,和K/、/之中的任意一个运算符,输出计算结果。*inc1.ude<sidio.h>voidmain()f1.oatahchare:Prin1.f(请输入一个运算符:5"):scanf(',%c,c);Pri1.nf(“请输入两个整数:j11;scanf(".idM.&a,&b);switch(c)(case'+,jxinf("%n,a÷b)brvak;case,-,prin1.f(%fn".a-b)break;casc*:printfC%fjiM.a4b):brc4k;case?':printf(',%nIayb):1HCak;defau1.t:Primfr错误”>:3工输入年号,计算这一年的2月份的天数,将结果输出.#inc1.i*dc<s1.dio.h>voidmain()Jintyearjeap;PriIHfr请输入年份:S)scanf("®od'&ycar);if(ycar%4三三0)(if<year%100=O>Iif(ycar%400=0)1.ea=1.;e1.sefrequency+=I;if<si>O>Ia=si1.;sum+=a;)PrintfC这典数中0的个数为%dn”,frequency);PrintfC这些数中所有正数的和为%dn".wm);63 .谙编程实现:蚪入两个整数,判断它们之间的关系(=.<>等),并清楚地将比拟结果输出.64 .请编程实现:输入几个整数,判断其中隅数的个数,并输出结果(要求:数据的个数及原始数据由犍盘输入).Sinc1.ix1.c<stdiah>tfdeneN20voidenter(i11ta,intn)inti;PrinIfr谢输入敷据:H):for(i=Oi<ni+)scanfC%d*.&ai);PrintfCn原始数据为:n");fbr(j=O;i<n;i+)printf("%d".ai);printf('n");voidmain()Ivoidenter(int.int);inti;inta(N.n;print*%输入你所要的数组元素个数:5"):scanf("W.n);enter(a.n):for(i=0;i<n;i+)(if(a(i%2=O)Prin1.f("其中的偶数是dW'Mi):J65.请编程实现:输入几个整数,判断其中奇数的个数,并输出奇数的累加利.(要求:数据的个数及82 .斑数组a中的收设十个数已按从小到大的顺序有序:在主函数中输入,个数,将其插入到该数组中,使得原数组依然按原序有序,分别输入原数组和插入新元素之后的数组.Winc1.dc<stdio.h>voidmain<)Ii11ta21.i,j.n.p.tcmp;PrintfC请输入数组元素的个数:");scanf("%d".&n);PrinIfr请输入%d个整数:W".n):for(i=0:i<n;i+)Seanfr%(r,&aiD;fbr(i=1.;i<=n-1.;i+)(for(j=Oj<=n-1.-izj)if(a(j1.>aj+1.)(temp=a(j:aUI=aU÷haj+1.=tcmp;)JPrintfr原数组为:5");fbr(i=O;i<=n-1.;i+)PriIMfi("%5d"aiD;printf("'j请输入插入的数scanf("5d",p);f<x(i=O:i<=n-1.;i+)if(p<a(i)cmp=ai;ai1.=p:p=temp:an=p;primf("插入元本后的数组为:">:for(i=();i<=n;i+)PrintIK"%5d",ai);83 .彳f5个国家名,编程实现按字母先后顺序排序,然后分别给出原数组和排序之后的数组.Winc1.ude<stdio,h>Wi11c1.ude<string.h>1464115101051inchic<stdio.h>voidmain<)Ii11tij.N.a|211|21J;PrintfC请输入打印的行数:scanf("%d".&N);for(i=ki<N+ki+)(ai1.11=;ai11=1.;)for(i=3;i<N+ki+)for(j=2j<=i-1.y+)aiU1.=ai-)U-1.M-1.1.j1.;for(i=1.;i<N+1.:i+)Ifbr0=1.<=i+)printfC%6d".a(i|(j);printft"n");PrinWIO;86.编一个函数实现招一个制型的一维数组中的数逆序存放,不使用辅助数黑.主函数滁入个拓型的一维数组,调用上述函数,将该数祖逆置,将结果输出.Winc1.ude<stdio.h>Wdcf1.neN1()voidmain()inia(N.i.temp:printf("entcrarraya:'n");fbr(i=0;i<N;i+)scanf%d,a(i):prin1.f("arraya:n");forti=();i<N:i+)printK-%4d",ai);fb<(i=0;i<N/2;i+)(tcmp=ai;a=aN-i-1.;aN-i1.=emp;)printf("nNow,arraya:n");fw(i=O;i<N:i+)printf("%4d'',a(i);PrintfCw);87编写一个函数COnV5求一个方阵的转置矩阵:主函数中输入方阵的阶数和方附.在主函数中将原矩阵和转置矩阵按原格式输出.ffinc1.udc<stdio.h>voidmain()voidConVerUin1.1.IO10);i11ta10(10.p.q.i,j;PrintfC请输入矩阵的行和列:O:SCanfrscanf("%d"q>Prin1.请输入矩阵的元素值:W"):forti=0:ivp:i+)for(j=0j<q+*)scanf("d".aij);Prin1.fr原矩阵为:);for(i=0:i<p:i+)(fortj=0<<j+)printf(,5d.a(ijj>:printf(n"):Iconvert(八);Prinw里里地阵为:W>:for(i=0:i<q:i+)(fortj=0<py+)printf("%5d',a(i)j>primf(n"):Jvoidconvert(inta11()1.()i111.i.j.1.;fof<i=0a<0u+)fbrG=i+1.y<IOj)I-U1.i1.1.jhai)U1.=aj)i);三OJ(i=t;88 .求11值,精度为IO5:1141-1.3÷1.5-1.7+Winc1.de<sdio.h>voidmain()If1.oata=1.0,b;inti;for(i=1:1.0(2*i+1)>0.00001;i+)(if(i%2!=0)a-=1.0(2*i+1.);e1.sea+=I.W(2*i÷1.);1b=4.0*a:printf(,b的值为:%Rjr.b):89 .用公式计算:e¾1.+1.1.!+1.2!-+1.n!精度为1.(6°#incIudc<stdio.h>oatf,un(inc);voidmain()Iinti;atc=1.0;for(i=1zfun(i)>0.()0()0()0()ki+)c+=fun(i);printf<c=%Pn,c);oatfun(intn)Iinti;f1.oatterm=1.0:fbr(i=1.i<=nU÷÷)iernV=i;returnterm:90 .有一分数序列2/1.3/2,5/3.875,13/8.21/13求该序列的前20项之和。Wi11c1.ude<stdio.h>voidmain()inti;11oa1.a(22.b20).p=0.0;a()=1.0:aI=1.0;fbr(i=2;i<22;i+)ai=ai-1.+ai-2;for(i=0;i<20;i+)b1.=ai+2ai+1.;for(i=0;i<20;i+)P÷=NiJ:printf("%f".p):91 .编一个子函数GCD,求两个IE整数的最大公约数,主程序输入n个自然数,调GCD,求出这n个数的最大公约数.Winc1.ude<stdio.h>intGCD(int.in1.);voidmain()Jinta(100.ij.k;Printf("请输入数组元素的个数:):SCanfrPrinm"请输入d个正整数An",n):for(i=0;i<n:i+)SCanfC%d'aiD:k=GCD(a0,a1.);fb<(i=2;i<n;i+)k=GCD<k,a(ij):printf(,输入的d个正整数的最大公约数是:%dn".n.k):intGCD(in1.x.i11ty)inti,min.p.q,gcd;if(x<=y)min=x:e1.semin=y;for(i=1.;i<=min:i+)(p=x%i;q=#i:if(p=O&&q=O)gcd=i;Jreturngcd:)92,写函数求疝00的值。计算公式为:Sin(x)=X-X33÷X55!-X77!÷+(1)n1X2n1.(2n-1)!.#inc1.ude<s1.dio.h>f1.oatfun(f1.oattint):oatsin(int,f1.oa();f1.oat(emXint);voidnain()Iintn;f1.oatx;PrinIa"请输入11.xIfiAn"):SCanfescanf('%,x);pnniftMsin(%D=%r.x3in(n.x)X>oatsin(intn,f1.oatx)Iinti:f1.oats=0.0:for(i=ki<=nji÷+)s÷=fn(1.0ti1.)*fun(x,25ti-1)*enn(2*i-1);returns;Ioatfn(f1.oatxj11n)Iinti;f1.oatP=I.0;fbr(i=Od<nU+÷)p=p