C语言经典编程算法_第1页
C语言经典编程算法_第2页
C语言经典编程算法_第3页
C语言经典编程算法_第4页
C语言经典编程算法_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言经典编程算法汇集(不断补充)用pi/4=1-1/3+1/5-1/7+.公式求PI的近似值,直到最后一项的绝对值小有10的-6次方为止。#in elude main ()int i=-1;float j,s=O.O;for(j=1.0;fabs(1.0/j)=1e-6;j=j+2.0)i=-i;s+=i*1.0/j;s=s*4.0;prin tf(%fn,s);输入四个整数,要求按由小到大的顺序输出。main ()int a,b,c,d;printf(请输入4个整数:);sca nf(%d,%d,%d,%d,&a,&b,&c,& d);prin tf(n a=%d, b=%d, c=%d,

2、 d=%d n,a,b,c,d);if(ab)t=a;a=b;b=t;if(ac)t=a;a=c;c=t;if(ad)t=a;a=d;d=t;if(bc)t=b,b=c;c=t;if(bd)t=b;b=d;d=t;if(cd)t=c;c=d;d=t;printf(排序结果如下:n);prin tf(%d %d %d %dn,a,b,c,d);译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。例如,可以按以下规律电文变为密码:将字母A变成字母E , a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成 C,Z变成D。字母按上述规律转换,非字母字符不变。

3、如“China!转换为“Glmre!。输入一行字符,要求输出其相应的密码。#i nclude main ()char a,b100;int i,j=0;printf(qing shu ru,yi hui che jie shu:);for(i=0;(bi=getchar()!=n;i+)if(bi=a&bi=A&biZ&biz)bi=bi-26;while(bj!=0)pri ntf(%c,bj);j+;输入两个正整数m和n,求其最大公约数和最小公倍数。main ()int p,r, n, m,temp;printf(请输入两个正整数n,m);sca nf(%d,%d,&n,&m);if(nm

4、)temp=n;n=m;m=temp;p=n *m;while(m!=0)r=n %m;n=m;m=r;printf(”它们的最大公约数为:%dn,n);printf(”它们的最小公倍数为:%dn,pn);打印出所有的水仙花数”。所谓水仙花数”是指一个3位数,其各位数字的立方和等于该数本身。例如,153是一个 水仙花数”,因为153=1的立方+5的立方+3的立方。main ()i nt i,j,k, n;printf(水仙花”数是:);for(n=100; n1000; n+)i=n/100;j=n/10-i*10;k=n %10;if(n=i*i*i+j*j*j+k*k*k)prin tf(

5、%4d, n);prin tf(n);两个乒乓球队进行比赛,各出三人。甲队为 A、B、C三人,乙队为 X、Y、Z三人。已抽签 决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X、Z比。请编程序找出三对赛手的名单。main ()char i,j,k;for(i=X;i=Z;i+)for(j=X;j=Z;j+)if(i!=j)for(k=X;k=Z;k+)if(i!=k&j!=k)if(i!=X&k!=X&k!=Z)prin tf(A-%ctB-%ctC-%cn,i,j,k);用起泡法对10个数排序(由小到大)。main ()int a10,t,i,j;printf(qing s

6、hu ru 10 ge shu:n);for(i=0;i10;i+)sca nf(%d,&ai);for(i=0;i9;i+)for(j=0;j=aj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;i10;i+)prin tf(%5d,ai);输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。#i nclude main ()char stri ng81;in t i, num=0,word=0;char c;gets(stri ng);for(i=0;(c=stri ngi)!=O;i+)if(c= )word=0;else if(word=0)word=1;nu m+

7、;prin tf(there are %d wprd in the lin e.n, nu m);用选择法对10个整数排序(从小到大)。main ()int i,j,temp,a11;prin tf(E nter data:n);for(i=1;i=10;i+)pri ntf(a%d=,i);scan f(%d,&ai);prin tf(n);for(i=1;i=10;i+)prin tf(%5d,ai);prin tf(n);for(i=1;i=9;i+)for(j=i+1;jaj)temp=ai;ai=aj;aj=temp;prin tf(nThe sorted nu mbers:n);f

8、or(i=1;i=10;i+)prin tf(%5d,ai);8、6、5、4、1。要求改为:1、4、将一个数组中的直按逆序重新存放。列如原来顺序为:5、6、8。#defi ne N 5main ()int aN,i,temp;prin tf( qing shu ru :);scan f(%d,&ai);for(i=0;iN/2;i+)temp=ai;ai=aN-i+1;aN-i+1=temp;for(i=0;iN;i+)prin tf(%4d,ai);prin tf(n);每一列和对角线之和均相等。打印打印魔方阵”,所谓魔方阵是指这样的方阵,它的每一行、要求打印1平方的自然数构成的魔方阵。ma

9、in ()int a1616,i,j,k,p,m, n;p=1;while(p=1)pri ntf(E nter n(n=115):);scan f(%d,&n);if(n !=0) &(n=15 )&(n %2!=0)p=0;for(i=1;i=n ;i+)for(j=1;j=n ;j+)aij=0;j=n /2+1;a1j=1;for(k=2;k=n*n ;k+)i=i-1;j=j+1;if(in)i=i+2;j=j-1;elseif(in )j=1;if(aij=0)aij=k;elsei=i+2;j=j-1;aij=k;for(i=1;i=n ;i+)for(j=1;j=n;j+)pr

10、in tf(%4d,aij);prin tf(n);(以两两交有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中换的方式)。main ()int a11=1,4,6,13,16,19,28,40,100;int temp1,temp2, nu mber,e nd,i,j;prin tf(array a:n);for(i=0;ie nd)a10=nu mber;elsefor(i=0;inu mber)temp1=ai;ai=nu mber;for(j=i+1;j11;j+)temp2=aj;aj=temp1;temp1=temp2;break;prin tf(Now,arr

11、ay a:n);for(i=0;iO;i-)str2*i=stri;str2*i-1=;prin tf(nOutput:n%s,str);写一函数,输入一行字符,将此字符串中最长的单词输出。int alphabetic(char c)if(c=a&c=A&c=z)return(1);elsereturn(0);int Ion gest(char stri ng)int len=0,i,le ngth=0,flag=1,place=0,po int;for(i=0;i=le ngth)le ngth=le n;place=po int;len=0;return(place);main ()i n

12、t i;char lin e100;prin tf(I nput one lin e:n);gets(l in e);prin tf(nThe Ion gest word is:);for(i=Ion gest(l in e);alphabetic(l in ei);i+)prin tf(%c,li nei);prin tf(n ”);要求用折半查找法找出该数 无此表”。有15个数按由大到小的顺序存放在一个数组中,输入一个数, 是数组中第几个元素的值。如果该数不在数组中,则打印出#i nclude #defi ne N 15main ()int i,j,number,top,bott,mid,

13、loca,aN,flag=1,sign=1;char c;prin tf(E nter data:n);sca nf(%d,&a0);i=1;while(i=ai-1)i+;elseprin tf(E nter this data aga in:”);prin tf(n);for(i=0;iN;i+)prin tf(%4d,ai);prin tf(n);while(flag)pri ntf(l nput nu mber to look for:);scan f(%d,&n umber);loca=0;top=0;bott=N-1;if(nu mberaN-1) loca=-1;while(si

14、g n=1)&( top=bott) mid=(bott+top)/2;if(nu mber=amid)loca=mid;printf(Find %d,its position is %dn,number,loca+1); sig n=0;else if(nu mberamid)bott=mid-1;elsetop=mid+1;if(sig n=1|loca=_1)prin tf(%d is not foun d.n, nu mber);prin tf(Co ntinue or n ot(Y/N)?);sca nf(” %c,&c);if(c=N|c= n)flag=0;写一函数,输入一个十六

15、进制数,输出相应的十进制数。#i nclude #defi ne MAX 1000main ()char tMAX,c;int i,flag,flag1;i=0;flag=0;flag仁1;prin tf(nln put a hex nu mber:);while(c=getchar()!=O&=0&c=a&c=A&c=0&si=a&si=A&si=F)n=n *16+si-A+10;return( n);10进制转k进制(2=k=9 )编程给定程序功能是将十进制正整数m转化为k进制(2=k=9 )数的数字输出。例如,若输入8和2,则应输出1000 (即十进制数8转化为二进制表示是 1000

16、)。#in elude void fun( int m, int k )int aa20, i; for( i = 0; m; i+ ) /*fo un d*/aai = m%k;/*fo un d*/m /= k;for( ; i; i-)/*fo un d*/prin tf( %d, aa i-1 );main ()int b, n;prin tf( nPlease en ter a nu mber and a base:n); scanf( %d %d, &n, &b );用递归法将一个整数n转换成字符串。例如输入483,应输出字符串“483” n的位数不确定,可以是任意位数的整数。#i

17、 nclude void con vert(i nt n)int i;if(i=n/10)!=0)con vert(i);putchar( n%10+0);main ()int nu mber;prin tf(n In put an in teger:);sca nf(%d,&nu mber);prin tf(Output:);if(nu mber0)putchar(_);nu mber=-nu mber;convert(nu mber);有n个整数,使其前面各数顺序向后移m个位置,最后 m个数变成最前面 m个数,见图10.3。写一函数实现以上功能,在主函数中输入n个整数,并输出调整后的n个数

18、。main ()int nu mber20, n, m,i;prin tf(How many nu mbers?);sca nf(%d,&n);prin tf(I nput %d nu mbers:n, n);for(i=0;i n;i+)sca nf(%d,&nu mberi);prin tf(How many place you want to move?);sca nf(%d,&m);move( nu mber, n, m);prin tf(Now,they are:n);for(i=0;iarray;p_)*p=*(p-1);*array=array_e nd;m-;if(m0) mo

19、ve(array,n,m);3的人退有n个人围成一圈,顺序排号。从第一个人开始报数(从 1到3报数),凡报到 出圈子,问最后留下的是原来第几号的那位。main ()int n,i,a100,*p,tr=0;prin tf( qing shu ru ren shu:);sca nf(%d,&n);for(i=0;i n;i+)ai=i+1;p=a;while(tra+n-1)p=a;for(i=0;i n;i+)if(ai!=O)pri ntf(zui hou liu zai dui wu zhong de shi %d,ai);break;写一个函数,将一个 3*3的矩阵转置。main ()i

20、nt a33,*p,i,j;prin tf(I nput matrix: n);for(i=0;i3;i+)scan f(%d %d %d,&ai0,&ai1,&ai2);p=&a00;move(p);prin tf(Now,matrix:n);for(i=0;i3;i+)printf(%d %d %dn,ai0,ai1,ai2);move(i nt *poi nter)int i,j,t;for(i=0;i3;i+)for(j=i;j3;j+)t=*(poi nter+3*i+j);*(poi nter+3*i+j)=*(poi nter+3*j+i);*(poi nter+3*j+i)=t

21、;用指向指针的指针的方法对5个字符串排序并输出。#defi ne LINEMAX 20#i nclude #in clude main ()char *str5,tempLINEMAX,a 5LINEMAX,*p;int i,j;printf(qing yi ci shu ru zi fu chua n:);for(i=0;i5;i+)gets(ai);for(i=0;i5;i+)stri=ai;p=str;for(i=0;i4;i+)for(j=i+1;j0)strcpy(temp,*(p+i);strcpy(*(p+i),*(p+j);strcpy(*(p+j),temp);for(i=0;i5;i+)puts(ai);prin tf(n);写一个函数,对一个16位的二进制数取出它的奇数位(即从左边起第1、3、5、15位)。main ()un sig

温馨提示

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

评论

0/150

提交评论