C(C)学习总结笔记_第1页
C(C)学习总结笔记_第2页
C(C)学习总结笔记_第3页
C(C)学习总结笔记_第4页
已阅读5页,还剩185页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include<stdio.h>#defineN20main()chars[N][N],i,j,k,m;if(N%2==0)m=N/2;elsem=N/2+l;for(k=0;k<m;k++)for(i=k;i<N-k;i++)for(j=k;j<N-k;j++)if(i==k||i==N-k-1|[j==k|lj==N-k-1)s(i]Ul-A'+k;for(i=0;i<N;i++)(for(j=0;j<N;j++)printf(M%cM,s[i][j]);prin氓'”);aレesseypESpressanykeytocontinue)1^include<stdio.h>main(){intaレesseypESpressanykeytocontinuewhile(s[n]?='\0,)For(i=0;i<n/2;i++)if(s[i]?=s[n-1-i])tag=0;if(tag==1)printFC'VESXn");elseprintFC^OXn");>求负数平均数:#include<stdio.h>main()(inta[7]={l,-2,9,-4,-7,2,0},i,k=0;floats=0.0;for(i=0;i<7;i++)printf(M%d0,a[i]);printf(',\nH);for(i=0;a[i]!=0;i++)if(a[i]<0){s+=a[i];k++;)

printf(H%6.4r,s/k);EKItinclude<stdio.h>nain()EK1-29-4-720p4.3333Pi*essanykeytocontinue1-29-4-720p4.3333Pi*essanykeytocontinuefor(i=0;i<7;i++)printf(,B%d".4[i]printFCXn");for(i=O;a[i]?=0;i++)if(a[i]<0)<s+=a[i];k++;}printF("%6.Wts/k);小写改大写#include<stdio.h>main()(inti;chara[20];gets(a);for(i=0;a[i]!='\0,;i++)if(a[i]>=,a,&&a[i]<='z')a[i]=a[i]-32;puts(a);ttinclude<stdio.h>main()<inti;chara[20];gets(a);For(i=0;a[i]?='\0';i++)if(a[i]>=,a*&&a[i]く)a[i]=a[i]-32;puts(a);第13套题(必须是main函数在上面,fun函数段再下面,要不然会出错)#include<stdio.h>longfun(inta,intn){inti;longs,t=O;for(i=0;i<n;i++)t=t*10+a;s=t;for(i=l;i<n;i++){t=t/lO;s=s-t;)returns;}main()(inta,n;scanf(M%d%du,&a,&n);printf(,'a=%d,n=%d,,,a,n);printf(H\nM);printf("%ld\n",fun(a,n)); /・必须是Id,不能是1*/I9p6|a=3.n=6卜96298[Pressanykeytocontinue■include<stdio.h>longfun(int9p6|a=3.n=6卜96298[PressanykeytocontinueFor(i=0;i<n;i*+)t=t*10*a;s=t;forは=1;i<n;i++)(t=t/10;s=s-t;>returns;main()<inta,n;scanF( &a,&n);printF("a=%d,n=%d",a,n);printF("\n");printF("%ld\n".Fun(a,n));>解法二(不调用子函数)#include<stdio.h>main()(inta,n,i;longs,t=O;scanf(M%d%du,&a,&n);printffa二%d,n二%d”,a,n);printf(“ヽn");for(i=0;i<n;i++)t=t*10+a;s二t;for(i二l;i<n;i++)t二t710;s=s-t;}printf(',%ld\nn,s);第18套#include<stdio.h>#include<math.h> /・该句必须写上去,要不然函数中的cos,fabs函数将无来源调用,这一点要非常注意*/main()(doublexO,x1=0.0;do(x0=x1;xl=cos(x0);}while(fabs(xO-x1)>=1e-6);printf(Mroot=%f\nn,xl);Itinclude<stdio.h>"include<math.h>CBmain()<Floatx0yx1;x1=0.0;do<X0=x1;x1=cos(x0);}while(Fabs(x0-x1)>=1e-6);printF(,,root=%F\n",x1);>root=0.735085PressanyWT9cocontinue注意区别,后者为正确结果"include<stdio.h>"include<math.h>amain()root=0.739006Pressanyk>ocontinue<doublex0,x1;x1=0.0;doX0=X1;X1=COS(X0);}while(Fabs(x0-x1)>=1e-6);printFCroot=%F\n",x1);>第30套ーー删除前导・号解法一(调用子函数)#include<stdio.h>voidfun(char*a)(char*p=a,*s;while(*p=-**)p++;fbr(s=p;*s!-\0*;s++)*a++=*s;*a='\0';)main()(chara[80J; /・此处不能定义为*a*/gets(a);fun(a); /・此处不得直接写成puts(fun(a));必须得分两步写・/puts(a);)解法二(未调用子函数)#include<stdio.h>#include<string.h>main()(inti,k=0;chars[20],*p,*r;gets(s);p=s;while(*p=-**)p++;for(r=p;*r!二‘、〇';r++)s[k++]=*r;s[k]='\O';puts(s);}循环左移#include<stdio.h>#include<string.h>main()(inti,j,n,m;chara[20],t;gets(a);n=strlen(a); /*要用到strlen函数的话就要用到字符串库函数・/scanf("%d",&m);fbr(i=O;i<m;i++){t=a[O];for(j=0;j<n-l;j4-4-)a[j]=a[j+l];a[n-l]=t;1puts(a);注意必须是先输入字符串数组,再输入m值ttinclude<stdio.h>"include<string.h>13main()<inti9j,n9m;chara[20],t;gets(a);n=strlen(a);scanf(,e%d",&n);For(i=0;i<n;i++)<t=a[0];for(j=0;j<n-1;j*+)a[n-1]=t;>puts(a);>dghghgjh4hgjhdghgPressanykeytocontinue二维矩阵转置:#include<stdio.h>#include<string.h>#defineM3 /・这一句是在main函数之前・/main()(inta[M][M]={{1,2,2}J4,1,6},{1,3,2)},b[M][M],ij,k;printf("beforemotivated:\n");fbr(i=0;i<M;i++){for(j=0;j<M;j++)printf("%d",a[i][j]);printf(M\nM); /*注意大花括号的位置,以及printf(叭n");这一句的位置,每一行结尾转行*/)fbr(i=0;i<M;i++)for(j=0;j<M;j++)b[i]U]=a[i]Ul+aU][i];printf("aftermotivated:\n");fbr(i=0;i<M;i++){for(j=0;j<M;j++)printf("%d *b[i田]);printf("\nn);

城include<stdio.h>ttinclude<string.h>ttdefineM3main(){inta[M][M]={{1»2,2},<4,1,6>,<1,3,2}},b[M][M],i,j,»<;printf("beforenotiuated:\n");For(i=0;i<M;i++){for(j=0;j<M;j++)printチ(Rd ,,,a[i][j]);printFCXn**);>For(i=0;i<M;i++)For(j=0;j<M;j++)b[i][j]=a[i][j]*a[j][i];printF("aFtermotiuated:\naa);For(i=0;i<M;i++)<For(j=0;j<M;j++)printF(aa%d",b[i][j]);printF(aa\naa);[beforemotivated:[beforemotivated:k 2 2卜 ! 6k 3 2laftermotivated:h 6 312 9b 9 4[Pressanykeytocontinue#include<string.h>main()(inti,n,k=O;chars[20],*p;gets(s);n=strlen(s);p=s;fbr(i=O;i<n;i++)if(p[i]%2==O||i%2!=O)s[k++]=p[i];s[k尸、〇';puts(s);)删除字符串中某些字符:解法一#include<stdio.h>#include<string.h>main()(inti,n,k=0;chars[20],*p;gets(s);n=strlen(s);P=s;for(i=0;i<n;i++)(if(p[i]%2!=0&&i%2==0);else{s[k++]=p[i];s[kド、〇';puts(s);)解法二(主要是红色字体部分内容不同)#include<stdio.h>#include<string.h>main()(inti,n,k=O;chars[2O],*p;gets(s);n=strlen(s);p=s;fdr(i=O;i<n;i++){if(p|i]%2==0||i%2!=0)s[k++]=p[i];s[k]='\O,;)puts(s);)数组前m位输出#include<stdio.h>main()(ints[7]={1,2,34,5,6,7for(i=0;i<7;i++)printf(M%du,s[i]);printf(“ヽn");scanf("%d",&m);fdr(i=O;i<m;i++)printf(H%dH,s[i]);printf(,,\nH);求!-1/2+1/3-1/4+•••求前m项的和#include<stdio.h>main()(inti,m,fg=l;doubles=O.O,sl;scanf(n%dM,&m);fbr(i=l;i<=m;i++)(sl=i*fg;fg=fg*(-l);S+=1.0/sl;}printf("%2.4f\n",s); /*2.4前面的数字2代表包括总位数,前面的数字只要不超过6就能得到正确结果,后面的数字4代表小数点后的位数,即保留几位小数,此处与printf("%.4f\n”,s);效果ー样・/“include<stdio.h>main()a<inti,m,<fg=1;doubles=0.0,s1;scanf(,噺*,,&FI);for(i=1;i<=m;i++)<s1=i*Fg;Fg=Fg*(-1);s+=1.0/s1;>printF(-%2.4F\n",s);>IsL.7833■Pressanykeytocontinue注意这个结果不是顶行输出的,与8.4前面的数字8有关"include<stdio.h>main()ロ<inti,m,Fg=1;doubles=0.0,s1;scanF("%d“,&m);For(i=1;i<=n;i++)(s1=i*Fg;Fg=Fg*(-1);s+=1.0/s1;>printF("^8.4F\n",s);>L0.7833IPressanykeytocontinue判断几组数据的大小#include<stdio.h>#include<math.h>main()(inti,a,b,n;scanf(M%d",&n);for(i=0;i<n;i++)(scanf(M%d%d”,&a,&b);if(a>b)printf("Text%d:>\n",i+l);if(a<b)printf(HText%d:<\n';i+l);if(a==b)printf(MText%d:=\n”,i+l);^include<stdio.h>Itinclude<math.h>main()<intiva9b9n;scanf(,2dヽ&n);for(i=0;i<n;i++)<scanf("%d义d’ヽ&a,如);if(a>b)printff'Text%d:>\n",i+1);if(a<b)printf("Text%d:<\n",i+1);if(a==b)printf("Text%d:=\n",i+1);第一套选择题解法一(答案)#include<stdio.h>#include<math.h>main()(inti=2,fg=l;doubles=0.0,sl=0.75,t;while(sl>le-3)(s=s+fg*sl;t=2*i;sl=(t+l)/(t*t);fg=fg*(-l);i++;)printf("lheresultis:%f\n';s);

“include<stdio.h>ttinclude<nath.h>main()int12,Fg=1;double“include<stdio.h>ttinclude<nath.h>main()s=s+Fg*s1;t=2»i;s1=(t+1)/(t*t);Fg«Fg*(-1);s=s+Fg*s1;t=2»i;s1=(t+1)/(t*t);Fg«Fg*(-1);…;>解法二(为什么有这种差别呢?求解答)#include<stdio.h>#include<math.h>main()(inti=l,fg=l;doubles=O.O,sl,t;do(1二2巧;sl=(t+l)/(t*t);s=s+fg*sl;fg=fg*(-l);i++;)while(sl>le-3);printf(Mtheresultis:%f\nH,s);

"include<stdio.h>"include<math.h>main()<int止ユ,fg=1;doubles=0.0,sl,t;dot=2«i:s1=(t+1)/(t*t);s=s+Fg»s1;Fg=Fg*(-1);i++;while(s1>1e-3);printFC'theresultis:%f\n",s);解法三(带子函数段)#include<stdio.h>#include<math.h>doublefun(doublee)(inti=l,fg=l;doubles=O.O,sl,t;do(t=2*i;sl=(t+l)/(t*t);s=s+fg*sl;fg=fg*(-l);i++;]while(sl>e);returns;main()(doublee;scanf("%lc”,&e); /・此处红色字体%le不能写成%f,这里scanf函数与printf函数使用规则不同,scanf函数读取double型数据是用%le,printf函数显示double型数据是用%f»注意区别・/printf(H%f\nH,fun(e));【实现十进制到二进制的转换):#include<string.h>main()(intk=0,i;longt,sl;charp[20],ch;scanf(M%ld'\&t);do(sl=t%2;t=t/2;p[k++]=sl+,0,;while(t>0);p[kド、〇';for(i=0;i<k/2;i++)(ch=p[i];p[i]=p[k-l-i];p[k-l-i]=ch;}puts(p);99999911110100001000111111Pressanykeytocontinue【二进制到十进制的转换】:#include<stdio.h>#include<string.h>main()(inti,j,n,k;longt=O;chars[20];gets(s);n=strlen(s);for(i=0;i<n;i++)(k=l;for(j=l;j<=n-l-i;j++)k=k*2;t=t+k*(s[i]-,O');1printf("%ld\n",t);£1110100001000111111ヨ99999Pressanykeytocontinue【实现16进制到10进制的转换】:#include<stdio.h>#include<string.h>main()(intij,n,k;longt=O;chars[20];gets(s);n=strlen(s);for(i=0;i<n;i++)(k=l;for(j=l;j<=n-l-i;j++)k=k*16;if(s[i]>='0,&&s[i]<='9,)t=t+k*(s[i]-'O');if(s[i]>=*A,&&s[i]<=,G,)t=l+k*(s[i]-55); /*例如16进制中的,パ代表10进制中的10,而字符火对应的ASCI!值为65,其他的,B,…一直到,ド都可以依此类推・/}printf(H%ld\nM,t);LA2B3L07187Pressanykeytocontinue【实现10进制到16进制的转换】:#include<stdio.h>#include<string.h>main()(intk=0,i;longt,sl;charp[20],ch;scanf(M%ld\&t);dosl=t%16;t=t/16;if(sl>=l&&sl<=9)p[k++]=sl+'O,;if(sl>=10&&sl<=15)p[k++]=sl+55;while(t>0);p[k]='\O';for(i=0;i<k/2;i++)ch=p[i];p[i]=p[k-l-i];p[k-l-i]=ch;Iputs(p);L07187LA2B3Pressanykeytocontinue^include<stdio.h>^include<string.h>amain()■107187<■1A2B3intk=0,i;longt,s1;charp[20],ch;scanf("%ld",&t);printf("ZXヽ>■Pressanykeytocontinuettinclude<stdio.h>北include<string.h>tlmain()255<377intk=0,i;longt,s1;charp[20]9ch;scanf("%ld,,,&t);printFC,^o\n"-t);>Pressanykeytocontinue【2进制转化为8进制】:思路:2进制ー10进制ー8进制#include<stdio.h>#include<string.h>main()(inti,j,n,k,m=0;longt=O,s1;chars[20],p[20],ch;gets(s);n=strlen(s);for(i=0;i<n;i++)(k=l;for(j=l;j<=n-1-i;j++)k=k*2; /・蓝色字体2如果变为8.则可以实现8进制到10进制的转换・/t=t+k*(s[i]-,O,);)printf(”%ld\n”,t);dosl=t%8;/・这两句顺序不能颠倒,否则会导致结果错误,即必须是先求余,后求商如果是先求商后求余的话,即按照“t=t/8;sl=t%8”的顺序执行,后一句中sl=t%8中的t己经改变・/t=t/8;p[m++]=sl+'O'; /*m用于统计二进制数的位数,在此二进制数是作为字符串的形式输出的・/while(t>0);p[m]='\0';for(i=0;i<m/2;i++) /*该for循环用于倒序输出・/(ch=p[i];p[i]=p[m-l-i];p[m-l-i]=ch;Iputs(p);11111111255377rPressan9keytocontinue【2进制转化为16进制】:思路与2进制转化为8进制相似#include<stdio.h>#include<string.h>main()(intij,n,k,m=0;longt=0,sl;chars[20],p[20],ch;gets(s);n=strlen(s);for(i=0;i<n;i++)k=l;for(j=l;j<=n-l-i;j++)k=k*2; /・蓝色字体2如果变为8,则可以实现8进制到10进制的转换・/t=t+k*(s[i]-'O');}printf("%ld\n",t);dosl=t%16;/*这两句顺序不能颠倒,否则会导致结果错误,即必须是先求余,后求商如果是先求商后求余的话,即按照“t=t/16;sl=t%16”的顺序执行,后一句中sl=t%16中的t已经改变・/t=t/16;if(sl>=l&&sl<=9)p[m++]=sl+,0,;if(sl>=10&&sl<=15)p|m++]=sl+55; /*m用于统计二进制数的位数,在此二进制数是作为字符串的形式输出的・/)while(t>0);p[m]='\0';for(i=0;i<m/2;i++) /*该for循环用于倒序输出・/ch=p[i];p[i]=p[m-l-i];p[m-l-i]=ch;puts(p);需ザ12设第IFF— \PressanyUciiy inue【从母字符串中查找子字符串的个数】:解法一#include<stdio.h>#include<string.h>main()inti,j,k=0,nl,n2;chars[100],p[100],q[100];gets(s);gets(p);nl=strlen(s);n2=strlen(p);for(i=0;i<nl;i++)(for(j=0;j<n2;j++)qlj]=s(i+j]; /・动态保存字符串数组q,以便与子字符串P比较・/q[n2]='\0';if(strcmp(q,p)==O)k++;)printf(M%d\nM,k);1解法二(注意首先定义字符串s,p的长度要足够长,如定义为100。若定义为20,当从输入设备输入的字符串的长度超过20的时候,会出现错误)#include<stdio.h>#include<string.h>main()(intij,k=0,tag,nl,n2;chars[100],p[100];gets(s);gets(p);nl=strlen(s);n2=strlen(p);for(i=0;i<nl;i++)(tag=l;for(j=0;j<n2;j++)>f(pU]!=s[i+j])tag=0;if(tag==l)k++;)printf("%d\n",k);printzF('なprintzF('なd\n'ゝk);^include<stdio.h>^include<string.h>main()<inti,j,k=O,tag,n1,n2;chars[100],p[100];gets(s);gets(p);n1=strlen(s);n2=strlen(p);For(i=0;i<n1;1♦♦)<tag=1;For(j=0;j<n2;j++)iF(p[j]?=s[i+j])tag=0;iF(tag==1)k+*;【自己研究的小课题】#include<stdio.h>#include<string.h>voidfunl(charsl[l00])(char*s=sl,*p;while(*s=-*')s++;for(p=s;*p!=*\0';p++)*sl++=*p;*sl='\0';voidfun2(chars2[l00])(intk=0;char*s=s2,*p;while(*s!=,\0,)s++;s一;while(*s=-*')A;*(s+l)='\0*;main()inti;charsl[100],s2[100|;printf("Beforetransfered(s1):");gets(sl);printf(MBeforetransfered(s2):H);gets(s2);funl(sl);fun2(s2);printf(HAftertransfered(sl):'*);puts(sl);printf(HAftertransfered(s2):H);puts(s2);printf(MAfterlinked(s1+s2):");puts(strcat(sl,s2));■G:\Ci§B\Debug\C(Beforetransfei*ed<sl>:***A*B*CD***[Beforetransfered<s2>:**EF«GH*I*J***|Aftertransfered<sl>:A*B*CD***Kftertransfered<s2>:**EF*GH*I*Jhfterlinked<sl+s2>:A*B*CD*****EF*GH*I*J[Pressanykeytocontinue【自己研究小课题】将Excel中的列标变换为!0进制数:AAA-703#include<stdio.h>#include<string.h>main()(inti,j,n;longsl=0,k;chars[100];gets(s);n=strlen(s);fdr(i=O;i<n;i++){k=l;for(j=l;j<=n-l-i;j++)k=k*26;sl=sl+(s[i]-64)*k;)printf("%ld\n”,sl);703-AAA(当输入的数字为26的倍数时,会出现错误,其他的某些情况也会出现错误,有待进ー步考察)#include<stdio.h>#include<string.h>main()(intk=0,i;longt,s,sl;charp[20],ch;scanf(M%ldH,&t);do(sl=t%26;t=t/26;p[k++]=sl+64;while(t>0);p[k]バ(T;fdr(i=0;i<k/2;i++)(ch=p[i];p[i]=p[k-l-i];p[k-l-i]=ch;1puts(p);"G:\C求最大公约数:(1也可以是最大公约数,而且注意运行程序时最好切换输入法为英文输入法,要不然会出现死循环)#include<stdio.h>#include<string.h>main()inta,b,i,k=0,s[100];printff请输入两个正整数:");

scanf(%d,%d,&a,&b);while(a<=0||b<=0)(prinlf(”请重新输入两个正整数:");scanf(M%d,%du,&a,&b);}for(i=l;i<=a&&i<=b;i++)/・该数组最后ー个元素必为最大公约数・//・该数组最后ー个元素必为最大公约数・/printf("最大公约数:%d\n”,s[k-1]);"G:\C语BXDebugヽ个人入人数y

个人入人数y

人,^^S

聾重重大es1,数数数,--is数正正正正两两两:7求最小公倍数:#include<stdio.h>#include<string.h>main()(inti,a,b,t;prinlf("请输入两个正整数:");scanf(”%d,%d”,&a,&b);while(a<=0||b<=0)(printf(”请重新输入两个正整数:”);scanf(M%d,%d",&a,&b);)if(a<b)/*该if语句用于存储a,b中较大值,并把最大值放入t变量中・/t=b;elset=a;i=t; /・此处i可以不必从a,b中较大值开始,可以直接从i=!开始进入while循环,直至有这样ー个i同时可以整除a,b,同时还可省去求a,b中较大值的过程,这ー点在求多个整数的最小公倍数时尤其要注意*/while(i%a!=O||i%b!=O)i++;printf("最小公倍数:%d\n",i);"G:\C语B\Debu09,,91109,,911・T--1.--If期正正必就!!^«正两两两:9ke璽重重小es

青青青主旨販pr结合求最大公约数与最小公倍数(该程序段中的while循环部分未看懂,同时注意最小公倍数与最大公约数的关系:最小公倍数=数ド数2/最小公约数):#include<stdio.h>main()(inta,b,num1,num2,temp;printf(npleaseinputtwonumbers:\nn);scanf(,,%d,%d,',&numl,&num2);if(numl<num2){temp=num1;numl=num2;num2=temp;}a=numl;b=num2;while(b!=O)/・利用辗除法,直到b为〇为止・/(temp=a%b;a=b;b=temp;}Fprintf(ngongyueshu:%d\n",a);printf(',gongbeishu:%d\n,\numl*num2/a);}字符转换:#include<stdio.h>#include<string.h>main()(chars;s=getchar(); ノ*从标准输入设备中读入一个字符・/s='0'+,9'-s;putchar(s); /*输出经过处理的字符,注意该语句不会自动转行・/printf("\n");第7套修改题#include<stdio.h>#include<string.h>main()(chara[100],b[100];inti,k=l;gets(a);b[O]=a[O];for(i=l;b[i]!='\0';i++)(if(i%3==0)b[k++]='/*注意这两句的顺序・/b[k++]=a[i]; /・该句前不能加else*/]b[k]='\O';puts(b);将六个字符串升序排列:(注意解体思路与数组排列相似,只不过要用到特定的字符串处理函数)#include<stdio.h>#defineN6#include<string.h>main()(inti,j;charss[N][100],t[100];printf("before:\nH);for(i=0;i<N;i++)scanf(M%sM,ss[i]);for(i=0;i<N;i++)for(j=i+l;j<Ny++)if(strcmp(ss|j],ss[i])>0)(strcpy(t,ss[i]);strcpy(ss[i],ss|j]);strcpy(ss[j],t);)printf("after:\n");for(i=0;i<N;i++)printf("%s\n”,ss[i]);对五个数按顺序排列:先把五个数赋值给数组元素,然后再对数组元素按顺序排列,最后再把排列好的数组元素返给a,b,c,d,e,这样当整数个数比较多时就会显示出其优势。#include<stdio.h>main()(floats[5],t,a,b,c,d,e;inti,j;scanf(n%f%f%f%f%f;&a,&b,&c,&d,&e);s|0]=a;s[l]=b;s[2J=c;s|3]=d;s[4]=e;for(i=0;i<5;i++)for(j=i+l;j<5;j++)if(s[i]<s[j]){t=s[i];s[i]=s(j];s[j]=t;)a=s[0];b=s[l];c=s[2];d=s[3];e=s[4];printf(Ha=%.lf,b=%.lf,c=%.lf,d=%,lf,e=%.1f\n*\a,b,c,d,e);1233679029a=90.0J,b=67.0,.c=33.0J,d=29.0,6=12.0Pressanykeytocontinue第13套题程序填空题奇数位置的字符循环右移(同时注意总结循环左移、右移等相关问题):#include<stdio.h>#include<string.h>main(){inti,n;chars[100],sl[100]; /・定义两个字符串,以便进行处理・/gets(s);n=strlen(s);for(i=0;i<n;i++)sl[i]=s[i];for(i=0;2*i+l<n;i++)s[2*i+3]=sl[2*i+l];if(n%2==0) /・对最末的字符进行特殊处理・/s[l]=sl[n-l];elses[l]=sl[n-2];s[nl='\0';puts(s);)循环右移提供另一种思路,为避免混淆,定义两个,以便进行相应处理)#include<stdio.h>#include<string.h>main(){inti,j,n;chars[100],sl[100];gets(s);n=strlen(s);for(i=0;i<3;i++) /・移动三次・/(for(j=0;j<n;j++)sl[j]=s[j];for(j=l;j<n;j++)s[j]=sl[j-l];s(0]=sl|n-l];s[n]='\0';}puts(s);

"G:\Ci§B\Debu("G:\Ci§B\Debu(bcdefghghabcde'ressanykeytocontinue循环左移:#include<stdio.h>#include<string.h>main()(inti,j,n;chars[100],sl[100];gets(s);n=strlen(s);for(i=0;i<3;i++)(for(j=0;j<n;j++)sl|j]=s[j];fora=0;j<n-l;j++)s[j]=sl[j+l];s[n-l]=sl[01;s[n]='\0';)puts(s);efghabcressanykeytocontmueressanykeytocontmue删掉字符串中的重复字符(应用于普遍情况,思路最重要):abaabcddI从字符串第一个字符a开始往后历寻,删掉重复的aabbcddI从新字符串第二个字符b开始往后历寻,删掉重复的babcddI从新字符串第三个字符C开始往后历寻,删掉重复的C,此时发现没有重复的C,保持不变输出abcddI从新字符串第四个字符d开始往后历寻,删掉重复的d

abed#include<stdio.h>#include<string.h>main()(inti,j,k;chars[100];gets(s);for(i=0;s[i]!='\0,;i++)(k=i+l;for(j=i+1;s[j]!='、0';j++)if(s[i]!=s[j])s[k++]=s[j];s[k]='\O';}puts(s);} •include<stdio.h>北include<string-h>main(){inti,j,k=O;chars[1OO];gets(s);for(i=0;s[i]?='\0';!♦♦)<•ウシ ,ForrT^i*i;srii?=\o;j++)if(s[i]?=s[j])sLfeMj=s[j];s[k]='\0-;>puts(s);}删除整型数组中重复的元素(注意数组的处理方法与字符串的处理方法有不同之处,字符串以结尾符‘\。’结尾,而数组没有类似的结尾符,这一点尤其需要注意):#include<stdio.h>#defineN20main()(inti,j;ints[N]={2,2,-3,3,4,4,5,6,6,0,6,7,7,8,9,9,10,-2,10,10};for(i=0;i<N;i++)printf(n%dn,s[i]);printf(”\n");for(i=0;i<N;i++)for(j=i+l;j<N;j++)if(s[i]==s[j])sU]=-l; /・选用一个数组中没有的整数ー1赋给数组中所有重复的的元素,然后把新数组中的非•1元素删掉,即可实现目标功能・/for(i=0;i<N;i++)if(s[ij!=-l)printf(w%d\s[i]);printfC'\nn);22-3344566067789910-210102-33456078910-2Pressan9keytocontinue对整个二位数组做循环右移处理,然后再做一次特殊处理(即前m列元素全部置为0):#include<stdio.h>#defineM3#defineN4main()(ints[M][N]={{1,2,3,4},[4,5,6,7},{7,8,9,1}},sl[M][N],iJ,k,m;printf("循环右移之前的二维数组:\n");for(i=0;i<M;i++)(for(j=0;j<N;j++)printf("%d",s[i][j]);printf("\n");)printf("循环右移m次:");scanf("%d",&m);fbr(i=O;i<M;i++)for(k=0;k<m;k++)Ifor(j=0;j<N;j++)sl[i][j]=s[i][j];for(j=0;j<N-l;j++)s[i]U+l]=sl[i]|j];s(i][O]=sl[i][N-l];printfT循环右移m次之后的二维数组:\n");fbr(i=O;i<M;i++)for(j=0;j<N;j++)printf("%d",s[i][j]);printf("\n");)printf("再做一次特殊处理之后的二维数组:\n");for(i=0;i<M;i++)for(j=0;j<m;j++)s[i]U]=O;fdr(i=O;i<M;i++)(for(j=0;j<N;j++)printf(*'%d”,s[i皿);printf(M\nM);循环右移之前的二维数组:123445677891翳龜二盥后的二维数组:234156748917再做一次特殊处理之后的二维数组:000100040007Pressanykeytocontinue第23套题修改题部分:#include<stdio.h>#include<string.h>main()(intij,n;chars[100],tl[100],t2[100],sl[100];printf("pleaseenterstrings:H);gets(s);printf("pleaseentersubstringt上”);gets(tl);printf("pleaseentersubstringt2:");gets(⑵;

while(strlen(t2)!=strlen(tl))(printf(',ERROR\nM);printf(npleaseentersubstringt2:u);gets(⑵;}n=strlen(tl);for(i=0;s[i]!=,\0,;i++)(for(j=0;j<n;j++)sl(j]=s[i+j];sl[n]=)(r;if(strcmp(s1,t1)==0)for(j=i;j<i+n;j++)slj]=t2|j-il;}printf("afterreplacingstringsbecome:");puts(s);[please[please[pleaseIERRORIpleaseERRORIpleaseERROR[pleaseenterstrings:abcdel2fgh345ijk6789abcabcdesa88[please[please[pleaseIERRORIpleaseERRORIpleaseERROR[pleaseentersubstringtl:abcentersubstringt2:1entersubstringt2:16entersubstringt2:1688entersubstringt2:168■afterreplacingstringsbecome:168del2fgh345ijk6789168168desa88■Pressanykeytocontinue第26套题填空题延伸:如果情况允许,N可以取5,6…,对应1000〇〜99999』0000〇〜999999.…#include<stdio.h>#deflneN4#include<string.h>main()(intij,k=O,t,x,sl[N],s2[l000],sum;prinlf("请输入ー个正整数x:");scanf("%d",&x);while(x<l||x>9*N)primf("请重新输入ー个正整数x:");

scanf("%d",&x);for(i=1000;i<=9999;i++)(t=i;sum=O;for(j=0;j<N;j++)(sl[j]=t%10;scanf("%d",&x);for(i=1000;i<=9999;i++)(t=i;sum=O;for(j=0;j<N;j++)(sl[j]=t%10;t=t/10;sum+=sl|j];/・每历寻ー次sum都要初始化为0.以便以后与x比较・//・几位数就要循环几次,得到各位数・/if(sum==x)s2[k++]=i;}printfClOO0〜9999满足条件的整数有:\n");for(i=0;i<k;i++)printf(n%dM,s2[i]);if((i+l)%10==0||i==(k-l))printf(H\nH);x:0稼的整数有x:88x:9稼的整数有11008101710261035104410531062107110801107Lus11251134114311521161117012061215122411233124212511260130513141323133213411350140414131422143114401503151215211530160211611162017011710180020072016202520342043120522061207021062115212421332142215121601220522142223223222412250230423132322233112340240324122421243025022511252026012610127003006301530243033304230513060310531141312331323141315032043213322232313240330313312332133303402341134203501351036004005(401440234032404140504104411341224131414014203421242214230430243114320440144104500150045013502250315040510351125121513052021521152205301531054006003601260216030610216111612062016210630070027011702071017110172008001801081009000[Pressanykeytocontinue在字符串中特定字符后插入特定字符:详细版本(可以通过该程序段看清每ー步流程的走向):#include<stdio.h>main()inti,j,n;chars[100],t[100],*p;printf("\n原始字符串为丁);gets(s);n=strlen(s);for(i=0;i<n;i++)t[i]=T; /・这里为了给插入的・号留足够的空间,作这ー步处理,原字符串后链接ー个同样长度的由特殊字符组成的字符串(特殊字符必须是明显有别于题目中所给的原始字符串中的所有字符)*/t[n]='\O';strcat(s,t);printf("\n经过第一次特殊处理后的字符串为丁);puts(s);for(i=0;i<2*n;i++)if(s[i]>='0,&&s[i]<='9') /・每遇到ー个数字字符,数字字符后的每个字符都要相应地向右移一位,然后数字字符后要插入一个・号,而且必须是先右移,然后插入,而不能是先插入,再右移,即蓝色部分所示顺序不能颠倒・/{for(j=2*n-l;j>=i+2;j-)s[j]=s|j-l];s[i+l]='*';)s[2*n]=ヘ〇';printf("\n插入特定字符后的字符串为:");puts(s);P=s;whi阳・p!ゴ!')P++;*p='、〇'; /*去掉多余的!号*/printf("\n插入后最终的字符串为:");puts(s);原始字符串为:def35adh3kjsdf7 牛手琴処理经过第一次特殊处理后的字符串为:def35ilh3kjsdf7???**??!悒入特定字符后的字符串为:def3-5*adh3*kjsdf7*!展人后最终的字符串为:def3*5*adh3*kjsdf7*Pressanykeytocontinue精简版:(忽略过程)#include<stdio.h>#include<string.h>main()(intij,n;chars[100],t[100],*p;printf(M\n原始字符串为:");gets(s);n=strlen(s);for(i=0;i<n;i++)t[吋;t[n]='\O';strcat(s,t);for(i=0;i<2*n;i++)if(s[i]>=,0,&&s[i]<=,9,)(for(j=2*n-1;j>=i+2;j—)s[j]=s[j-l];s[i+l戸";}s[2*n]=,\0,;P=s;while(*p!二’!')p++;*p二ヘ〇’;printf(”\n插入后最终的字符串为puts(s);}答案解法:理解,红色部分最关键#include<stdio.h>voidfun(char的){inti,j,n;for(i=0;s[i]!='\0';i++)/*******ネ**mund**********/if(s[i]>='0'&&s[i]<='9'){n=0;/**********砧und**********/while(sfi+l+n!!=0)n++;for(j=i+n+1;j>i;j—)/**********found**********/s[j+l]=s[j];s[i+l]=中;main(){chars[80]=Hdef35adh3kjsdf7H;printf(H\nTheoriginalstringis:%s\nn,s);fun(s);printf(H\nTheresultis:%s\n',,s);髀始字符串为:def3Sadh3kjsdf7悩入后最终的字符串为:def34*adh3*kjsdf7"■Pressanykeytocontinue延伸:在数字字符后插入ー个・号和一个#号#include<stdio.h>#include<string.h>main()(inti,j,n;chars[100],t[100],*p;printf(H\n原始字符串为:");gets(s);n=strlen(s);for(i=0;i<2*n;i++)t[i]=**;t[n]ゴ、〇';strcat(s,t);for(i=0;i<3*n;i++)if(s[i]>='0,&&s[i]<='9'){for(j=3*n-l;j>=i+3;j—)s[i+l]='**;s[i+2]='#';}s[3*n]='\0';p=s;while(*p!='')P++;*p二、〇';printf(M\n插入后最终的字符串为:");puls(s);原始字符串为:abcl2d3e4fg5hijk678插入后最终的字符串为:abc1»#d3*#4*ttg5*ttijk6«tt8»#Pressanykeytocontinue二次延伸:第40套题填空部分:#include<stdio.h>#include<string.h>main()(inti,j,n;chars[100],t[100],*p,ch;printf(M\n原始字符串为:");gets(s);printf(u\n需要插入的字符为:");ch=getchar();n=strlen(s);fdr(i=O;i<n;i++)t[i]=T;t[n]='\0';strcat(s,t);for(i=0;i<2*n;i++)if(s[i]==ch)(for(j=2*n-1;j>=i+2;j—)s[j]=s|j-l];s[i+l]=*; /*此处不可直接写成中+l]=ch;这样会造成无限死循环,必须用ー个特殊字符先占据后面的位置,然后再用用蓝色字体的for循环实现替换即可・/}s[2*n]=,\0';p=s;whi阳・p!=’!')P++;*p二へ。';for(i=0;s[i]!=,\0,;i++)if(s[i]==«**)s[i]=ch;printf(H\n插入后最终的字符串为ゴ);puts(s);点金:例如:asdaabcdeaf^Ia*sda*a*bcdea*fgIaasdaaaabcdeaafg改进版:#include<stdio.h>#include<string.h>main()(inti,j,n;chars[100],t[100],*p,ch;printf("\n原始字符串为:");gets(s);printf("\n需要插入的字符为ch=getchar();n=strlen(s);for(i=0;i<n;i++)t[i]=T;t[n]=,\O,;strcat(s,t);for(i=0;i<2*n;i++)if(s[i]==ch)(for(j=2*n-l;j>=i+2;j—)s[j]=s(j-l];s[i+l]=ch;i++; /・为避免出现死循环,此处i还需要再加1,这样就可以从寻找到的特定字符后的第二个字符开始进行下一次历寻・/)s[2*n]='\0';p=s;while(*p!-!')p++;*p='、〇';printf("\n插入后最终的字符串为:");puts(s);原始字符串为:ahgshagsaasa需要插入的字符为:a插入后最终的字符串为:aahgshaagsaaaasaaPressanykeytocontinue第41套修改题错误解法:#include<stdio.h>#include<math.h>main()(inti=0,k=0,s[100];doublesum=0.0;do(scanf("%d",&sli]); /*注意此处scanf括号里面的%d后不能接空格,接空格就不能得出正确结果,%d后面不要接任何内容,就如正确解法中所示。这一点注意与printf的用法相区别・/i++;)while(s[i]!=0);for(i=0;s[i]!=0;i++)if(s[i]>0){sum=sum+s[i];k++;)sum=sum/k;printf(Msum=%f\n,,,sum);}正确解法:#include<stdio.h>#include<math.h>main()(inti=O,k=O,s[100];doublesum=0.0;do(scanf("%d",&s[i]); /*学习体会在屏幕上输入整型数组的方法,如红色字体所示,同时注意正确解法中while循环与错误解法中while循环的细微差别,i++的位置很关键・/while(s[i++]!=O);for(i=0;sロ]!=0;i++)if(s[i]>0)Isum=sum+s[i];k++;)sum=sum/k;printf("sum=%f\n",sum);)附:scanf与printf需要注意的一点:scanf用法中输入单精度noat型数据格式控制符使用%f或%e,输入双精度double型数据格式控制符使用%If或%le,输入长整型long型数据使用格式控制符%Id而printf用法中输出单精度float型和双精度double型数据都可以使用%f作为格式控制符,输入长整型!ong型数据使用格式控制符%Id(这一点与scanf用法一样)第49套填空部分延伸:(输入的数组中不能包括〇,除了最后的结尾标志为0之外)#include<stdio.h>main()(inti=O,k=O,j,t,s[100],s1[100];printf("请输入ー个数组(以0结尾):");do(scanf("%d",&s[i]);k++;)while(s[i++]!=0); /*k表示整个数组元素的个数(包括结尾标志元素〇)*/for(i=0;i<k-l;i++)for(j=i+l;j<k-l;j++)if(s[i]<s[j])(t=s[i];s[i]=s[j];s[j]=t;)printf("\n降序排列之后的数组为:");for(i=0;i<k;i++)printf(M%dn,s[i]);printf(n\nn);for(i=0;i<k;i++)sl[i]=s[i]; /・为避免混淆,新建一个与数组S相同的数组S1*/for(i=l;2*i<k-l;i++)s[2*i]=sl[i];t=i;if(k%2==0)for(i=k-3;i>0;i=i-2)s[i]=sl[t++];elsefor(i=k-2;i>0;i=i-2)s[i]=sl[t++];printf(M\n最终得到的数组为:");for(i=O;i<k;i++)printf(M%d\s[i]);printf(”\n");解题思路如以下截图所示:请输入一イ喪爼(以福尾):1423965870降序排列之后的数组为:9876543210最终得到的数组为:9182736450PressanykeytocontinueSR-尾>:142396580降序排列之后的数组为:986543210最终得到的数组为:918263540Pressanykeytocontinue第61套修改题(重点在于思路,注意答案解法提供了一种新的降序排列的思路)#include<stdio.h>main()ints[100]={1,4,10,37,2,8,5,9,6),k0=0,k1=1,t,i;

for(i=l;i<10;i++)if(s[kO]<s[i])kO=i;t=s[O];s[O]=s[kO];s[kO]=t;for(i=2;i<10;i++)if(s[kl]<s[i])kl=i;t=sfl];s[l]=s[kl];s[kl]=t;for(i=0;i<10;i++)printf(M%d,\s[i]);printf(”\n");E "G:\CigB\Debug\wq.exe"110,93.7,2,8,5,4,6.tocontinue/第63套填空题左添*号(关键在于蓝色部分)#include<stdio.h>#include<string.h>#defineM5#defineN20main()chars[M][N],t[N];inti,j,k,max,index=0;fbr(i=0;i<M;i++)gets(s[i]);max=strlen(s[O]);for(i=l;i<M;i++)if(max<strlen(s[i])){max=strlen(s[i]);index=i;)for(i=0;i<M;i++)if(i!=index){k=strlen(s[i]);for(j=0;j<max-k;j++)5]二,が;t[j]=O;strcat(t^[i]);strcpy(s[i],t);}for(i=0;i<M;i++)puts(s[i]);右添・号#include<stdio.h>#include<string.h>#defineM5#defineN20main()chars[M][N];inti,j,k,max,index=0;for(i=0;i<M;i++)gets(s[i]);max=strlen(s[O]);fdr(i=l;i<M;i++)if(max<strlen(s[i]))(max=strlen(s[i]);index=i;}for(i=0;i<M;i++)if(i!=index)(k=strlen(s[i]);for(j=k;j<max;j++)sUKj尸・';s[i][max]=O;}for(i=0;i〈M;i++)puts(s[i]);"G:\C1gB\Debug\yuyu.exe"IchinaKeman9WashingtonDCMSA|Amepica*****IChina*******iGemany*****WashingtonDC|Pi*essanykeytocontinue第73套填空题部分:(提供另ー种判断素数的方法)#include<stdio.h>main()(intij,n,k=0,s[100];printf(nn=");scanf("%d",&n);for(i=0;i<n-2;i++)s[i]=i+2;for(i=0;i<n-2;i++)for(j=i+l;j<n-2;j++)if(G+2)%(i+2)==0)

s[j|=O;for(i=0;i<n-2;i++)if(s[i]!=O)s[k++]=s[i];for(i=0;i<k;i++)printfC'%d;;s[i]);printfC,\nM);实现功能:2〜n中找出所有素数并输出思路:由标号0ーn・2对2〜n进行控制,下标+2就等于数组对应值,这样可以避免由数组值直接控制,会遇到数组值为0的情况,该思路与答案解法不同,注意体会。标号:。标号:。数组对应值:24 5 6 7 86 7 8 9 10第73套修改题部分:(用到判断素数的子函数会更简单)#include<stdio.h>int(intm)(intk,tag=l;fbr(k=2;k<m;k++)if(m%k==O)lag=O;returntag;Imain()inti,j,n;printf("请输入ー个偶数n:u);

scanf("%d”,&n);while(n%2)printf("请重新输入ー个偶数n:M);scanf(n%d",&n);)for(i=n-l;i>0;i-)forG=i-l;j>0;j-)if(isprime(i)&&isprime(j)&&(i+j)—n)printf(,,n=%d+%d\n,,,ij);6767数数n偶一一个人入一入霹+3聾重31n=29+5n=23+llPressanykeytocontinue第78套填空题:同理可以找出大于均值并且最接近均值的数组元素注意:红色字体rand的用法rand()是ー个可以生成随机数的函数随机数,函数返回的随机数在0-RAND_MAX(32767)之间;rand()%100结果是随机数除以100后所得的余数,即限定随机的范围是在〇〜99之间;使用rand()函数需添加头文件:include<stdlib.h>#include<stdio.h>#include<stdlib.h>#defineN10main()(doubleav=0,min,t[N];intij,index,s[N];for(i=0;i<N;i++)(s[i]=rand()%50;printf(*'%dH,s[i]);)for(i=0;i<N;i++)av=av+s[i];av=av/N;printf(M\n%lf\nH,av);i=0;while(s[i]>av)i++; /・黑粗字体部分实现指针指向第一个小于均值的数组元素,并记下下标・/min=av-s[i];index=i;for(j=i+l;j<N;j++)if(av-s[j]>O&&av-s[j]<min)(min=av-s[j];index=j;)printf(,,%d\n,\s[index]);}补充:c语言常用头文件包含的库函数math.h常用函数intabs(intx);doubleacos(doublex);doubleasin(doublex);doubleatan(doublex);doubleatan2(doubley,doublex);doubleatof(constchar*s);doubleceil(doublex);doublecos(doublex);doublecosh(doublex);doubleexp(doublex);doublefabs(doublex);doublefloor(doublex);doublefmod(doublex,doubley);doublefrexp(doublex,int*exponent);longlabs(longx);doubleIdexp(doublex,intexponent);doublelog(doublex);doublelog10(doublex);doublemodf(doublex,double*ipart);doublepow(doublex,doubley);doublesin(doublex);doublesinh(doublex);doublesqrt(doublex);doubletan(doublex);doubletanh(doublex);

stdio.h常用函数包括intfclose(FILE*stream);intfflush(FILE*stream);intfgetc(FILE*stream);intfgetpos(FILE*stream,fpos_t*pos);char*fgets(char*s,intn,FILE*stream);FILE*fope

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论