09-10金城C语言常用算法总结

时间:2024.3.31

金城学院09-10C语言常用算法总结

(请注意不要随意传播)

一、第五章常用算法总结

1)分段函数的计算

/***** P8  5.20   *****/

main( )

{

  int x,y;

  scanf("%d",&x);

  if ( x>2 && x<=10 )  y=x*(x+2);

  else if ( x>-1 && x<=2 )  y=2*x;

       else if (x<=-1)  y=x-1;

          else  y=-1;

  printf(“%d  %d  \n”,x, y );

}

/* P37  实验四 1   */

# include <stdio.h>

main( )

{

  int x,y;

  scanf("%d",&x);

  if (x<1)  y=x;

  else if ( x<10 )  y=2*x-1;

       else  y=3*x-11;

  printf("%d  %d \n",x,y);

}

二、第六章常用算法总结

1)多项式累加和、累乘积;

/* P11  6.8 */

# include <stdio.h>

main()

{

  int a,b,c,i;

  a=c=0;

  for ( i=0;i<=10;i=i+2)

   {

       a+=i;

       b=i+1;

       c+=b;

   }

  printf("sum of the even=%d\n",a);

  printf("sum of the odd =%d\n",c-11);

}

实验五 2 1+2+3+4+5+…

main()

{

  int s=0,i,t=1;

  for (i=1;i<=5;i++)

    {

       t=t*i;

       s=s+t;

    }

  printf("1!+2!+3!+4!+5!=%d \n",s);

}

    下面程序的功能是:有一个分数序列,求出这个序列的前20项之和,请填空。 

#include<stdio.h>

main()

{  float a=2,b=1,sum=0,t;

_int  i ;____

for( i=1; i<=20;i++)

  {  sum+= a/b;

     t=a;

     a+=b;

     b=t;

  }

 printf("sum=%f\n",sum);

}

    下面pi函数的功能是根据以下的公式,返回满足精度e要求的p的值,请填空。

main( )

{  double eps=1e-6,s=0,t=1.0;

   int n ;

   for ( n=1; t > eps ; n++ )

      {

             s += t ;

             t = t *n / (2*n + 1 ) ;

      }

   printf("PI=%f \n",2*s);

}

2)求素数(判断素数);

# include <math.h>

main()

{

  int i,m,k;

  scanf("%d",&m);

  k=sqrt(m);

  for (i=2;i<=k;i++)

      if ( m%i ==0 ) break;

  if (i==k+1) printf("%d is a prime . \n",m);

  else printf("%d is not a prime. \n",m);

}

3)数的分解,如水仙花数,完数等;

*用数组和循环实现数的分解

#include <stdio.h>

void main( )

{   long n; int a[5], i=0, k;

      scanf(“%d”&n);

      while(n>0)

      {    a[i]=n%10;

           n=n/10;

           i++;

   }

      printf(“ws=%d  \n”, i );

      for(k=i-1; k>=0; k--)

printf(“ %4d ”,a[k]);

      printf(“\n”);

      for (k=0; k<i; k++)

printf(“%4d ”,a[k]);

      printf(“\n”);

}

*打印出所有的“水仙花数”。

#include <stdio.h>

void main( )

{    int i,a,b,c;         /*  a百位,b十位,c个位  */

      for(i=100; i<1000; i++)

      {    a=i/100; b=i/10%10; c=i%10;

           if (a*a*a+b*b*b+c*c*c==i)

printf(“%4d”,i);

      }

      printf(“\n”);

}

*完数(一个数为其因子之和)

#include <stdio.h>

void main( )

{

  int i,j,s;

  for (i=1; i<1000;i++ )

{

  s=0;

        for (j=1;j<i;j++)

             if ( i%j==0 ) s+=j;

      if ( i==s )

       {

             printf("%d its factors are  1",i);

             for ( j=2;j<i;j++)

                if (i%j==0) printf(",%4d",j);

             printf("\n");

       }

    }

}

4)求最大公约数和最小公倍数。

求最大公约数、最小公倍数

#include <iostream.h>

int gys(int m, int n)  // 用辗转相除法求最大公约数

{   

      int d, x ,u ;

      d=m>n?m:n;

      x=m<n?m:n;

      u=d%x;

      while(u!=0)

    {  d=x;   x=u;  u=d%x;  }

      return(x);

}

int gys(int m, int n)      // 用辗转相除法求最大公约数的优化算法

{    int r;

      while((r=m%n)!=0)

    {  m=n; n=r; }

      return(n);

}

int gbs(int m, int n)        // 求最小公倍数

{   

      int maxy;

   maxy=gys(m,n);

      return(m*n/maxy);

}

int gys(int m, int n)   // 根据定义求最大公约数

{   

      int i,x;

      x=m<n?m:n;

      for(i=x; i>=1; i--)

           if(m%i==0 && n%i==0) break;

      return(i);

}

int gbs(int m, int n)    // 根据定义求最小公倍数

{   

      int i,d;

      d=m>n?m:n;

      for(i=d; i<=m*n; i++)

           if(i%m==0 && i%n==0) break;

      return(i);

}

int gys(int m, int n)   // 求最大公约数:大数减小数直至两数相等

{  

      while(m!=n)

           if(m>n)m=m-n;

           else n=n-m;

      return(m);

}

void main( )

{   

      int m,n;

      scanf("%d%d",&m,&n);

      printf("gong yue shu:%4d \n",gys(m,n));

      printf("gong bei shu:%4d \n",gbs(m,n));

}三、第七章常用算法总结

1)数组运算,如找最大,最小值问题,累加和,求平均值;

     见函数调用例,非函数调用略,二维数组略。

2)排序运算,如冒泡法,选择排序;

     见函数调用例

3)字符串操作:strcpy strcat strlen

     见函数调用例

四、第八章常用算法总结

能以函数的形式完成第五章、第六章、第七章的常用算法。

一、以下程序的功能是:从键盘输入n的值,计算1+1/2+1/3+1/4+…+1/n的值,并将和值返回主调函数,请填空。  

#include<stdio.h>

float sum(int n)

float i=2;

  float s =1.0;

  while(i<=n )

   {

      s =s +1/i;

      i++;  

}

  return (s ); 

}

main()

{  float m;

float s;

scanf("%f",&m);

s=sum(m);

printf("s=%f\n",s); 

}

二、P38  实验五 2 1+2+3+4+5+…

# include <stdio.h>

int jc(int m)

{

  int i,w=1;

  for (i=1;i<=m;i++)

     w=w*i;

  return w;

}

main()

{

  int i,n,s=0;

  scanf("%d",&n);

  for ( i=1;i<=n;i++ )

      s=s+jc(i);

  printf("s=%d \n",s);

}

三、求素数判断 x 是否是素数,若是素数,返回1;若不是素数,返回0

# include <math.h>

int prime1(int x)           /*   1   */

{  

    int k, i;

    k=sqrt(x);

    for(i=2; i<=k; i++)

         if(x%i==0) break;

    if(i==k+1) return(1);

    else return(0);

}

int prime2(int x)         /*   2   */

{  

    int k, i;

    k=sqrt(x);

    for(i=2; i<=k; i++)

         if(x%i==0) return(0);

    return(1);

}

main()

{

  int i,m;

  scanf("%d",&m);

  if (prime(m)==1) printf("%d is a prime . \n",m);

  else printf("%d is not a prime. \n",m);

}

四、打印出所有的“水仙花数”。

int hs( int m )

{

int a,b,c;     /* a百位,b十位,c个位 */

       a=m/100; b=m/10%10; c=m%10;

       if (a*a*a+b*b*b+c*c*c==m) return 1;

   else return 0;

}

#include <stdio.h>

void main( )

{

  int i,a,b,c;         /*  a百位,b十位,c个位  */

  for (i=100; i<1000; i++)

     if (hs(i))   printf("%4d",i);

  printf("\n");

}

五、完数

#include <stdio.h>

int ws(int m)

{

   int i,s=0;

   for (i=1;i<m;i++)

     if ( m%i==0 ) s+=i;

   if (s==m) return 1;

   else return 0;

}

void main( )

{

  int i,j,s;

  for (i=1; i<1000;i++ )

    { 

      if ( ws(i)==1 )

       {

              printf("%d its factors are  1",i);

             for ( j=2;j<i;j++)

                 if (i%j==0) printf(",%4d",j);

             printf("\n");

       }

    }

}

六、最大公约数和最小公倍数略

七、求一维数组最大、最小、平均值

1:通过全局变量返回数组的最大值和最小值,通过函数的返回值返回数组的平均值。

#include <stdio.h>

float  max, min;

float  average(float array[ ], int n)

{    int  i;  float  aver, sum;

      max=min=sum=array[0];

      for (i=1; i<n; i++)

      {   if (array[i]>max) max=array[i];

           else if (array[i]<min)  min=array[i];

           sum=sum+array[i];

      }

      aver=sum/n;

      return(aver);

}

void main( )

{   float  ave, score[10];

      int i;

      for (i=0; i<10; i++)  scanf("%f",&score[i]);

      ave=average(score, 10);

      printf("max=%f \n",max);

      printf("min =%f \n",min);

      printf("average=%f \n",ave);

}

2:通过指针做函数参数,返回数组的最大值、最小值和平均值。

// 推荐使用此方法

#include <stdio.h>

void  average(float array[ ], int n, float *maxp, float *minp, float *averp)

{   int  i;  float sum;

      sum=array[0];

      *maxp=*minp=array[0];

      for (i=1; i<n; i++)

      {   if (array[i]>*maxp)  *maxp=array[i];

           else if (array[i]<*minp)  *minp=array[i];

           sum=sum+array[i];

      }

      *averp=sum/n;

}

void main( )

{  

  float  score[10], max, min, aver ;

  int i;

  for (i=0; i<10; i++)

      scanf("%f",&score[i]);

      average(score, 10, &max, &min, &aver);

      printf("max=%f \n",max);

      printf("min =%f \n",min);

      printf("average=%f \n",aver);

}

八、一维数组排序(选择法、冒泡法)

1:将n个整数按由小到大排列

#include <stdio.h>

void sort(int a[ ],int n)          // 选择法排序

{

      int i,j,p,t;

      for(i=0; i<n-1; i++)

       {

       p=i;

           for(j=i+1; j<n; j++)

                 if(a[j]<a[p]) p=j;

           if(p!=i) {t=a[i]; a[i]=a[p]; a[p]=t;}

       }

}

void sort(int a[ ],int n)          // 冒泡法排序

{   int i,j,t;

      for(i=0; i<n-1; i++)

           for(j=0;j<n-1-i;j++)

                 if(a[j]>a[j+1])

                   { t=a[j]; a[j]=a[j+1]; a[j+1]=t; }

}

void main( )

{    int i,a[10];

      for(i=0;i<10;i++)  scanf("%d",&a[i]);

      sort(a,10);

      for(i=0;i<10;i++)

           printf("%4d",a[i]);

      printf("\n");

}

九、字符串操作(不用系统函数,完成strlen, strcpy, strcat功能)

#include <stdio.h>

int mystrlen(char *p)       /* strlen函数功能 */

{

      int i,n=0;

      while (*p!=0)    {  n++;  p++;  }

      return  n;

}

void main( )

{    char str[10];

      gets(str);

      printf("%4d  \n",mystrlen(str));

}

# include <stdio.h>

void mystrcpy(char *to,char *from)

/* strcpy函数功能 */

{    int i;

      for (i=0;from[i]!='\0';i++)

           to[i]=from[i];

      to[i]='\0';

}

void main( )

{    char str1[10],str2[10];

   gets(str2);

      mystrcpy(str1,str2);

   puts(str1);

}

void mystrcat(char *s1,char *s2)

 /* strcat函数功能 */

{   int i=0,j=0;

    while (s1[i]!='\0') i++;

    while (s2[j]!='\0')

           s1[i++]=s2[j++] ;

    s1[i]='\0' ;

}

void main( )

{    char str1[20],str2[10];

      gets(str1);

   gets(str2);

      mystrcat(str1,str2);

   puts(str1);

}

更多相关推荐:
C语言算法总结

1.水仙花数:#includestdio.hintmain(){inta,b,c,d;for(a=100;a=999;a++)/*thedataavarifyfrom100to999*/{b=a/100;c=a…

C语言算法总结,非常精辟

C语言算法总结2牛顿迭代求a的平方根思想汇总迭代公式为xn105xnaxn要求前后两次求出的x的差的绝对值小于105算法语句floatax0x1scanffampax0a2dox0x1x1x0ax02循环N次当...

C语言算法全总结

算法Algorithm计算机解题的基本思想方法和步骤算法的描述是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述包括需要什么数据输入什么数据输出什么结果采用什么结构使用什么语句以及如何安排这些语句等通常...

c语言常用算法总结

C语言常用算法模块的总结一最大值最小值问题教材page1316page362423page98例5152二连乘连加问题page113114115page12963page1296465三闰年算法page17pa...

c语言 算法之总结

算法Algorithm是一系列解决问题的清晰指令也就是说能够对一定规范的输入在有限时间内获得所要求的输出如果一个算法有缺陷或不适合于某个问题执行这个算法将不会解决这个问题不同的算法可能用不同的时间空间或效率来完...

c语言排序算法总结(主要是代码实现)

冒泡排序(BubbleSort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。…

C语言常用算法总结

C语言常用算法模块的总结一、最大值,最小值问题教材page13/1.6、page36/2.4(2)、(3)、page98例5.1、5.2二、连乘连加问题page113、114、115page129/6.3pag…

全国计算机2级考试C语言公共基础知识总结

全国计算机2级考试C语言公共基础知识总结20xx0408142714分类标签字号大中小订阅全国计算机等级考试二级c语言公共基础知识总结第一章数据结构与算法11算法算法是指解题方案的准确而完整的描述算法不等于程序...

c语言第五章 数组算法总结

第五章数组数组的概念一组相同类型数据的集合数组中的所有元素都只能是同一个类型的数组中的元素在内存中的空间是连续的数组的定义数组元素的引用和数组的初始化看书或者课件容易错的地方数组的定义语句如inta10是定义了...

c语言版排序算法复杂度

各种排序算法的稳定性和时间复杂度小结选择排序快速排序希尔排序堆排序不是稳定的排序算法冒泡排序插入排序归并排序和基数排序是稳定的排序算法冒泡法这是最原始也是众所周知的最慢的算法了他的名字的由来因为它的工作看来象是...

C语言所有内部排序算法

C语言所有内部排序算法冒泡法选择法插入法快排法希尔归并1冒泡法includeltstdiohgtincludeltstdlibhgtvoidmaopaointaintnintijtempflagfori0ilt...

多种排序算法实现C语言

排序算法是面试笔试中必定要涉及的内容常见的排序算法有插入排序冒泡排序选择排序快速排序堆排序希尔排序归并排序基数排序等下面是我自己针对这几种算法进行一些总结和实现1按照时间性能来分可以划分为三类排序算法1Onlo...

c语言算法总结(25篇)