pta函数练习


期末考试形式改了

卑微的从同学那里要了pta来练函数

期末努力全对!💪

 

6-1 找两个数中最大者

int max(int a , int b)
{
    return (a>b?a:b); }

6-2 简单实现x的n次方

double mypow(double x,int n)
{
    int i; double num=1; for(i=0;i<n;i++) { num*=x; } return num; }

6-3 弹球距离 

double dist(double h,double p)
{
    double sum=h; while(h*p>=TOL) { h*=p; sum+=h*2; } return sum; }

6-4 使用函数求最大公约数 

int gcd(int x,int y)
{
    int rem=x; while(rem!=0) { rem=x%y; x=y; y=rem; } return x; }

6-5 使用函数输出一个整数的逆序数 

int reverse( int number ){
     int x=1,s,sum=0;
     if(number<0){
        number=-number;
        x=-x;
     }
     while(number>0){
        s=number%10;
        number=number/10;
        sum=sum*10+s;
}sum*=x;
return sum;
}

6-6 使用函数求奇数和

int even (int n)
{
    return((n%2==0)?1:0);
}
int OddSum( int List[], int N )
{
    int i,sum=0;
    for(i=0;i<N;i++)
    {
        if(List[i]%2!=0)
        {
            sum+=List[i];
        }
    }
    return sum;
}

6-7 使用函数求特殊a串数列和

int fn( int a, int n )
{
    int i;
    long long int sum=0;
    for (i=0;i<n;i++)
    {
        sum=sum*10+a;
    }
    return sum;
}
int SumA( int a, int n )
{
    int i,sum=0;
    for(i=1;i<=n;i++)
    {
        sum+=fn(a,i);
    }
    return sum;
}

6-8 使用函数求素数和

int prime( int p )
{
    int i,count=0;
    if(p<0)
    {
        return 0;
    }
    for(i=1; i<=p; i++)
    {
        if(p%i==0)
        {
            count++;
        }
    }
    return(count==2?1:0);
}
int PrimeSum( int m, int n )
{
    int sum=0;
    int i,j;
    for(i=m; i<=n; i++)
    {
        int count=0;
        if(i<0)
        {
            continue;
        }
        for(j=1; j<=i; j++)
        {
            if(i%j==0)
            {
                count++;
            }
        }
        if(count==2)
        {
            sum=sum+i;
        }
    }
    return sum;
}

6-9 统计各位数字之和是5的数 

int is( int number )
{
    int sum=0;
    while(number>0)
    {
        sum+=number%10;
        number/=10;
    }
    return(sum==5?1:0);
}
void count_sum( int a, int b )
{
    int i,count=0,sum=0;
    for(i=a;i<=b;i++)
    {
        if(is(i))
        {
            count++;
            sum+=i;
        }
    }
    printf("count = %d, sum = %d",count,sum);}

6-10 简单求和

int Sum ( int List[], int N )
{
    int i,sum=0;
    for(i=0;i<N;i++)
    {
        sum+=List[i];
    }
    return sum;
}

6-11 多项式求值

double f(int n,double a[],double x)
{
    double sum;
    int i;
    for(i=0;i<n;i++)
    {
        sum+=a[i]*pow(x,i);
    }
}

6-12 移动字母

void Shift( char s[] )
{
    char a[3];
    int i,j;
    for(i = 0; i < 3;i++)
        a[i] = s[i];
    for(i=3;s[i]; i++)
        s[i-3]=s[i];
    for(j=i-3, i = 0; i < 3;i++)
        s[j++] = a[i];
}

6-13 在数组中查找指定元素

int search( int list[], int n, int x )
{
    int i;
    if(n==0)
        return -1;
    for(i=0;i<=n;i++){
        if(list[i]==x)
            return i;
        
    }
    return -1;
}

6-14 删除字符

void delchar(char *str,char c)
{
  int i,j;
  for(i=0,j=0;str[i]!='\0';i++)
  {
    if(str[i]!='c')
    {
      str[j++]=str[i];
    }
  }
  str[j]='\0';
}

6-15 分类统计各类字符个数

void StringCount( char *s )
{
    int cap=0,low=0,bla=0,num=0,els=0,i=0;
 
    while(s[i]!='\0')
    {
        if(s[i]>='A'&&s[i]<='Z')
            cap++;
        else if(s[i]>='a'&&s[i]<='z')
            low++;
        else if(s[i]==' ')
            bla++;
        else if(s[i]>='0'&&s[i]<='9')
            num++;
        else
            els++;
        i++;
    }
    printf("%d %d %d %d %d",cap,low,bla,num,els);
}

6-16 函数实现字符串逆序

void f(char *p)
{
    int n=strlen(p);
    int i,j;
    char temp;
    for(i=0,j=n-1;i<n/2;i++,j--)
    {
        temp=p[i];
        p[i]=p[j];
        p[j]=temp;
    }
    p[n]='\0';
}

6-17 长整数转化成16进制字符串

void f( long int x, char *p )
{
    const char a[]="0123456789ABCDEF";
    int i=0;
    char f[1000];
    if(x<0)
    {
        x=-x;
        p[0]='-';
        while (x)
        {
            f[i]=a[x%16];
            x/=16;
            i++;
        }
        int j=1;
        while(i--)
        {
            p[j]=f[i];
            j++;
        }
    }
    else if(x==0)
    {
        *p='0';
    }
    else
    {
        while (x)
        {
            f[i]=a[x%16];
            x/=16;
            i++;
        }
        int j=0;
        while(i--)
        {
            p[j]=f[i];
            j++;
        }
    }
}

6-18 递归计算Ackermenn函数

int Ack( int m, int n )
{
    if(m==0)return n+1;
    else if(n==0&&m>0)return(Ack(m-1,1)) ;
    else if(n>0&&m>0)return(Ack(m-1,Ack(m,n-1)));
}

6-19 递归计算P函数

double P( int n, double x )
{
    double result;
    if(n == 0)
    result = 1;
    else if(n == 1)
    result = x;
    else
    result = ((2 * n - 1) * P(n-1,x)-(n - 1) * P(n-2,x)) / n;
    return result;
}

6-20 递归求阶乘和

double fact( int n )  {  
    double f;  
    
    if(n==1||n==0)  
        f=1;  
    else  
        f=fact(n-1)*n;  
        
    return f;  
}  
  
double factsum( int n )  
{  
    double fs;  
    
    if(n==1)  
        fs=1;  
    else if(n==0)  
        fs=0;  
    else  
        fs=factsum(n-1)+fact(n);  
    return fs;  
}  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM