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

下载本文档

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

文档简介

1、.c语言经典编程算法汇集(不断补充)用pi/4=1-1/3+1/5-1/7+.公式求pi的近似值,直到最后一项的绝对值小有10的-6次方为止。#include main()int i=-1;float j,s=0.0;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;printf(%fn,s);输入四个整数,要求按由小到大的顺序输出。main()int a,b,c,d;printf(请输入4个整数:);scanf(%d,%d,%d,%d,&a,&b,&c,&d);printf(n a=%d, b=%d, c=%d, d=%d

2、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);printf(%d %d %d %dn,a,b,c,d);译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。例如,可以按以下规律电文变为密码:将字母a变成字母e,a变成e,即变成其后的第个字母,变成,变成,变成,变成。字母按上述规律转换,非字母字符不变。如“china!”转换为“glmre!

3、”。输入一行字符,要求输出其相应的密码。精品.#include 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)printf(%c,bj);j+;输入两个正整数m和n,求其最大公约数和最小公倍数。main()int p,r,n,m,temp;printf(请输入两个正整数 n,m);scanf(%d,%d,&n,&m);if(nm)temp=n;n=m;m=temp;p

4、=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()int 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) printf(%4d,n); printf(n);精

5、品.两个乒乓球队进行比赛,各出三人。甲队为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) printf(a-%ctb-%ctc-%cn,i,j,k);用起泡法对10个数排序(由小到大)。main()int a10,t,i,j;printf(qing shu ru 10 ge shu:n)

6、;for(i=0;i10;i+)scanf(%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+)printf(%5d,ai);输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。#include main()char string81;int i,num=0,word=0;char c;gets(string);for(i=0;(c=stringi)!=0;i+)if(c= )word=0;else if(word=0)word=1;num+;printf(there are %d wprd

7、in the line.n,num);精品.用选择法对10个整数排序(从小到大)。main()int i,j,temp,a11;printf(enter data:n);for(i=1;i=10;i+)printf(a%d=,i); scanf(%d,&ai); printf(n);for(i=1;i=10;i+)printf(%5d,ai);printf(n);for(i=1;i=9;i+)for(j=i+1;jaj) temp=ai; ai=aj; aj=temp; printf(nthe sorted numbers:n);for(i=1;i=10;i+)printf(%5d,ai);将

8、一个数组中的直按逆序重新存放。列如原来顺序为:8、6、5、4、1。要求改为:1、4、5、6、8。#define n 5main()int an,i,temp;printf(qing shu ru :);for(i=0;in;i+) scanf(%d,&ai);for(i=0;in/2;i+) temp=ai; ai=an-i+1; an-i+1=temp;for(i=0;in;i+) printf(%4d,ai);printf(n);精品.打印“打印魔方阵”,所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。要求打印1平方的自然数构成的魔方阵。main()int a1616,i,

9、j,k,p,m,n;p=1;while(p=1) printf(enter n(n=115):); scanf(%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; else if(in)j=1; if(aij=0) aij=k;else i=i+2; j=j-1; aij=k; for(i=1;i=n;i+) for(j=1;j=n;j+) printf(%4d,

10、aij); printf(n); 精品.有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中(以两两交换的方式)。main()int a11=1,4,6,13,16,19,28,40,100;int temp1,temp2,number,end,i,j;printf(array a:n);for(i=0;iend) a10=number;else for(i=0;inumber) temp1=ai; ai=number; for(j=i+1;j11;j+) temp2=aj; aj=temp1; temp1=temp2; break; printf(now,array a:n

11、);for(i=0;i0;i-) str2*i=stri; str2*i-1= ; printf(noutput:n%s,str);写一函数,输入一行字符,将此字符串中最长的单词输出。int alphabetic(char c)if(c=a&c=a&c=z)return(1);elsereturn(0);int longest(char string)int len=0,i,length=0,flag=1,place=0,point;for(i=0;i=length) length=len; place=point; len=0; return(place); main() int i; ch

12、ar line100; printf(input one line:n); gets(line); printf(nthe longest word is:); for(i=longest(line);alphabetic(linei);i+) printf(%c,linei); printf(n); 精品.有15个数按由大到小的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此表”。#include #define n 15main()int i,j,number,top,bott,mid,loca,an,flag=1,sig

13、n=1;char c;printf(enter data:n);scanf(%d,&a0);i=1;while(i=ai-1) i+; else printf(enter this data again:); printf(n);for(i=0;in;i+) printf(%4d,ai);printf(n);while(flag) printf(input number to look for:); scanf(%d,&number); loca=0; top=0; bott=n-1; if(numberan-1) loca=-1; while(sign=1)&(top=bott) mid=(

14、bott+top)/2; if(number=amid) loca=mid; printf(find %d,its position is %dn,number,loca+1); sign=0; else if(numberamid) bott=mid-1; else top=mid+1; if(sign=1|loca=-1) printf(%d is not found.n,number); printf(continue or not(y/n)?); scanf( %c,&c); if(c=n|c=n) flag=0; 精品.写一函数,输入一个十六进制数,输出相应的十进制数。#includ

15、e #define max 1000main()char tmax,c; int i,flag,flag1; i=0; flag=0; flag1=1; printf(ninput a hex number:); while(c=getchar()!=0&i=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)。 #include void fun

16、( int m, int k ) int aa20, i; for( i = 0; m; i+ ) /*found*/ aai = m%k; /*found*/ m /= k; for( ; i; i- ) /*found*/ printf( %d, aa i-1 ); main() int b, n; printf( nplease enter a number and a base:n ); scanf( %d %d, &n, &b ); fun( n, b );精品.用递归法将一个整数n 转换成字符串。例如输入483,应输出字符串“483”。n的位数不确定,可以是任意位数的整数。#inc

17、lude void convert(int n)int i;if(i=n/10)!=0) convert(i);putchar(n%10+0);main()int number;printf(n input an integer:);scanf(%d,&number);printf(output:);if(number0) putchar(_); number=-number; convert(number);有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面m个数,见图10.3。写一函数实现以上功能,在主函数中输入n个整数,并输出调整后的n个数。main()int number

18、20,n,m,i;printf(how many numbers?);scanf(%d,&n);printf(input %d numbers:n,n);for(i=0;in;i+)scanf(%d,&numberi);printf(how many place you want to move?);scanf(%d,&m);move(number,n,m);printf(now,they are:n);for(i=0;iarray;p-) *p=*(p-1); *array=array_end; m-; if(m0) move(array,n,m); 精品.有n个人围成一圈,顺序排号。从第一

19、个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。main()int n,i,a100,*p,tr=0;printf(qing shu ru ren shu:);scanf(%d,&n);for(i=0;in;i+) ai=i+1;p=a;while(tra+n-1)p=a; for(i=0;in;i+) if(ai!=0) printf(zui hou liu zai dui wu zhong de shi %d,ai); break;写一个函数,将一个3*3的矩阵转置。main()int a33,*p,i,j;printf(input matrix:n);

20、for(i=0;i3;i+) scanf(%d %d %d,&ai0,&ai1,&ai2);p=&a00;move(p);printf(now,matrix:n);for(i=0;i3;i+)printf(%d %d %dn,ai0,ai1,ai2);move(int *pointer)int i,j,t; for(i=0;i3;i+) for(j=i;j3;j+) t=*(pointer+3*i+j); *(pointer+3*i+j)=*(pointer+3*j+i); *(pointer+3*j+i)=t; 精品.用指向指针的指针的方法对5个字符串排序并输出。#define linema

21、x 20#include #include main()char *str5,templinemax,a5linemax,*p;int i,j;printf(qing yi ci shu ru zi fu chuan:);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);printf(n);写一个函数,对一个16位的二进制

温馨提示

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

评论

0/150

提交评论