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