C语言经典编程算法

C语言经典编程算法

ID:47427261

大小:54.00 KB

页数:15页

时间:2020-01-10

上传者:无敌小子
C语言经典编程算法_第页
预览图正在加载中,预计需要20秒,请耐心等待
资源描述:

《C语言经典编程算法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

C语言经典编程算法汇集(不断补充)用pi/4=1-1/3+1/5-1/7+...公式求PI的近似值,直到最后一项的绝对值小有10的-6次方为止。#includemain(){inti=-1;floatj,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("%f ",s);}输入四个整数,要求按由小到大的顺序输出。main(){inta,b,c,d;printf("请输入4个整数:");scanf("%d,%d,%d,%d",&a,&b,&c,&d);printf(" a=%d,b=%d,c=%d,d=%d ",a,b,c,d);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(a>d){t=a;a=d;d=t;}if(b>c){t=b,b=c;c=t;}if(b>d){t=b;b=d;d=t;}if(c>d){t=c;c=d;d=t;}printf("排序结果如下: ");printf("%d%d%d%d ",a,b,c,d);}译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。例如,可以按以下规律电文变为密码:将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D。字母按上述规律转换,非字母字符不变。如“China!”转换为“Glmre!”。输入一行字符,要求输出其相应的密码。 #includemain(){chara,b[100];inti,j=0;printf("qingshuru,yihuichejieshu:");for(i=0;(b[i]=getchar())!=' ';i++){if((b[i]>='a'&&b[i]<='z')||(b[i]>='A'&&b[i]<='Z'))b[i]+=4;if(b[i]>'Z'&&b[i]<='Z'+4||b[i]>'z')b[i]=b[i]-26;}while(b[j]!=''){printf("%c",b[j]);j++;}}输入两个正整数m和n,求其最大公约数和最小公倍数。main(){intp,r,n,m,temp;printf("请输入两个正整数n,m");scanf("%d,%d",&n,&m);if(n=a[j+1])      {t=a[j];a[j]=a[j+1];a[j+1]=t;}for(i=0;i<10;i++)printf("%5d",a[i]);}输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。#includemain(){charstring[81];inti,num=0,word=0;char c;gets(string);for(i=0;(c=string[i])!='';i++)if(c=='')word=0;elseif(word==0){word=1;num++;}printf("thereare%dwprdintheline. ",num);}用选择法对10个整数排序(从小到大)。main(){inti,j,temp,a[11];printf("Enterdata: ");for(i=1;i<=10;i++){printf("a[%d]=",i);  scanf("%d",&a[i]);  }printf(" ");for(i=1;i<=10;i++)printf("%5d",a[i]);printf(" ");for(i=1;i<=9;i++){for(j=i+1;j<=10;j++)   if(a[i]>a[j])     {temp=a[i];      a[i]=a[j];      a[j]=temp;      }}printf(" Thesortednumbers: ");for(i=1;i<=10;i++)printf("%5d",a[i]);}将一个数组中的直按逆序重新存放。列如原来顺序为:8、6、5、4、1。要求改为:1、4、5、6、8。#defineN5main(){inta[N],i,temp;printf("qingshuru :");for(i=0;in))     {i=i+2;      j=j-1;     }   else     {if(i<1)i=n;      if(j>n)j=1;     }if(a[i][j]==0)   a[i][j]=k;else  {i=i+2;   j=j-1;    a[i][j]=k;   }  }for(i=1;i<=n;i++)  {for(j=1;j<=n;j++)     printf("%4d",a[i][j]);   printf(" ");   }}有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中(以两两交换的方式)。main(){inta[11]={1,4,6,13,16,19,28,40,100};inttemp1,temp2,number,end,i,j;printf("arraya: ");for(i=0;i<10;i++)  printf("%5d",a[i]);printf(" ");printf("Insertdata:");scanf("%d",&number);end=a[9];if(number>end)  a[10]=number;else  {for(i=0;i<10;i++)     {if(a[i]>number)        {temp1=a[i];         a[i]=number;         for(j=i+1;j<11;j++)           {temp2=a[j];            a[j]=temp1;            temp1=temp2;            }      break;      }   }}printf("Now,arraya: ");for(i=0;i<11;i++)printf("%6d",a[i]);}写一函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字间有一个空格。如输入1990,应输出“1990”。 main(){charstr[80];voidinsert(chars[]);printf(" Inputfourdigits:");scanf("%s",str);insert(str);}voidinsert(charstr[]){inti;for(i=strlen(str);i>0;i--)  {str[2*i]=str[i];   str[2*i-1]='';   }printf(" Output: %s",str);}写一函数,输入一行字符,将此字符串中最长的单词输出。intalphabetic(charc){if((c>='a'&&c<='z')||(c>='A'&&c<='z'))return(1);elsereturn(0);}intlongest(charstring[]){intlen=0,i,length=0,flag=1,place=0,point;for(i=0;i<=strlen(string);i++)   if(alphabetic(string[i]))     if(flag){point=i;  flag=0;}     elselen++;   else   {flag=1;     if(len>=length)     {length=len;     place=point;     len=0;     }   }   return(place);    }   main()   {inti;    charline[100];    printf("Inputoneline: ");    gets(line);    printf(" Thelongestwordis:");    for(i=longest(line);alphabetic(line[i]);i++)      printf("%c",line[i]);    printf(" ");   }有15个数按由大到小的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此表”。#include#defineN15main(){inti,j,number,top,bott,mid,loca,a[N],flag=1,sign=1;charc;printf("Enterdata: ");scanf("%d",&a[0]);i=1;while(i=a[i-1])     i++;   else     printf("Enterthisdataagain:");   }printf(" ");for(i=0;ia[N-1]))     loca=-1;   while((sign==1)&&(top<=bott))     {mid=(bott+top)/2;      if(number==a[mid])         {loca=mid;         printf("Find%d,itspositionis%d ",number,loca+1);  sign=0;         }      elseif(number#defineMAX1000main(){chart[MAX],c;  inti,flag,flag1;  i=0;  flag=0;  flag1=1;  printf(" Inputahexnumber:");  while((c=getchar())!=''&&i='0'&&c<='9'||c>='a'&&c<='f'||c>='A'&&c<='F'){flag=1;t[i++]=c;}elseif(flag)  {t[i]='';printf("decimalnumber%d: ",htoi(t));printf("Continueornot?");c=getchar();if(c=='N'||c=='n')  flag1=0;  else    {flag=0;     i=0;     printf(" Inputahexnumber:");      }   }     }}htoi(chars[]){inti,n;  n=0;  for(i=0;s[i]!='';i++)    {if(s[i]>='0'&&s[i]<='9')n=n*16+s[i]-'0';     if(s[i]>='a'&&s[i]<='f')n=n*16+s[i]-'a'+10;     if(s[i]>='A'&&s[i]<='F')n=n*16+s[i]-'A'+10;     }     return(n);  }10进制转k进制(2<=k<=9)编程      给定程序功能是将十进制正整数m转化为k进制(2<=k<=9)数的数字输出。例如,若输入8和2,则应输出1000(即十进制数8转化为二进制表示是1000)。      #include      voidfun(intm,intk)      {         intaa[20],i;         for(i=0;m;i++){      /**********found**********/           aa[i]=   m%k;      /**********found**********/           m/=k;         }         for(;i;i--)      /**********found**********/           printf("%d",aa[i-1]);      }main(){    intb,n;    printf(" Pleaseenteranumberandabase: ");    scanf(   "%d%d",&n,&b);    fun(n,b);} 用递归法将一个整数n转换成字符串。例如输入483,应输出字符串“483”。n的位数不确定,可以是任意位数的整数。#includevoidconvert(intn){inti;if((i=n/10)!=0)   convert(i);putchar(n%10+'0');}main(){intnumber;printf(" Inputaninteger:");scanf("%d",&number);printf("Output:");if(number<0)   {putchar('_');   number=-number;   }convert(number);}有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面m个数,见图10.3。写一函数实现以上功能,在主函数中输入n个整数,并输出调整后的n个数。main(){intnumber[20],n,m,i;printf("Howmanynumbers?");scanf("%d",&n);printf("Input%dnumbers: ",n);for(i=0;iarray;p--)     *p=*(p-1);  *array=array_end;  m--;  if(m>0)move(array,n,m);  }有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。main(){intn,i,a[100],*p,tr=0;printf("qingshururenshu:");scanf("%d",&n);for(i=0;ia+n-1)p=a;    }for(i=0;i#includemain(){char*str[5],temp[LINEMAX],a[5][LINEMAX],**p;inti,j;printf("qingyicishuruzifuchuan:");for(i=0;i<5;i++)  gets(a[i]);for(i=0;i<5;i++)  str[i]=a[i];p=str;for(i=0;i<4;i++)  for(j=i+1;j<5;j++)    if(strcmp(*(p+i),*(p+j))>0)      {strcpy(temp,*(p+i));strcpy(*(p+i),*(p+j));strcpy(*(p+j),temp);}for(i=0;i<5;i++){puts(a[i]);printf(" ");}}写一个函数,对一个16位的二进制数取出它的奇数位(即从左边起第1、3、5、...、15位)。main(){unsignedgetbits(unsigned);unsignedinta;printf(" Inputanoctal number:");scanf("%o",&a);printf(""result:%o ",getbits(a));}unsignedgetbits(unsignedvalue){inti,j,m,n;unsignedintz,a,q;z=0;for(i=1;i<=15;i+=2){q=1;  for(j=1;j<=(16-i-1)/2;j++)    q=q*2;  a=value>>(16-i);  a=a<<15;  a=a>>15;  z=z+a*q;  }return(z);}编一函数用来实现左右循环移位。main(){unsignedmoveright(unsigned,int);unsignedmoveleft(unsigned,int);unsigneda;intn;printf(" Inputanoctalnumber:");scanf("%o",&a);printf("Inputn:");scanf("%d",&n);if(n>0)  {moveright(a,n);   printf("result:%o ",moveright(a,n));   }else  {n=-n;   moveleft(a,n);   printf("result:%o ",moveleft(a,n));   }}unsignedmoveright(unsignedvalue,intn){unsignedz;  z=(value>>n)|(value<<(16-n));   return(z);  }unsignedmoveleft(unsignedvalue,intn){unsignedz;  z=(value>>(16-n))|(value<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭