PTA习题练习day1

1.本题要求实现一个计算m~n(m<n)之间所有整数的和的简单函数。

函数接口定义:

int sum( int m, int n );

其中mn是用户传入的参数,保证有m<n。函数返回的是m~n之间所有整数的和。

int sum( int m, int n )
{
    int sum=0;
    sum=(n-m+1)*(n+m)/2;//等差数列求和公式
    return sum;
}

2.

本题要求实现函数输出n行字符金字塔。

函数接口定义:

void CharPyramid( int n, char ch);

其中nch是用户传入的参数,n为[1, 9]的正整数。要求函数按照如样例所示的格式打印出n行由字符ch构成的字符金字塔。注意每个字符后有一个空格。

void CharPyramid( int n, char ch)
{
    for(int i=0;i<n;i++)
    {
        for(int j=n-i-1;j>0;j--)
        {
            printf(" ");
        }
        for(int j=0;j<i+1;j++)
        {
            printf("%c ",ch);
            if(j==i)
            {
                printf("\n");
            }
        }
    }
}

3.

本题要求实现一个统计整数中指定数字的个数的简单函数。

函数接口定义:

int CountDigit( int number, int digit );

其中number是不超过长整型的整数,digit为[0, 9]区间内的整数。函数CountDigit应返回numberdigit出现的次数。

int CountDigit( int number, int digit )
{
    int count=0;
    if(number<0)
    {
        number=-number;
    }
    if(number==0&&digit==0)
    {
        return 1;
    }
    while(number>0)
    {
        if(number%10==digit)
        {
            count++;
        }
        number=number/10;
    }
    return count;
}

4.

水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。

函数接口定义:

int narcissistic( int number ); void PrintN( int m, int n );

函数narcissistic判断number是否为水仙花数,是则返回1,否则返回0。

函数PrintN则打印开区间(m, n)内所有的水仙花数,每个数字占一行。题目保证100≤mn≤10000。

int narcissistic( int number )
{
    int gw,sw,bw,qw;
    gw=number%10;
    sw=(number/10)%10;
    bw=(number/100)%10;
    qw=number/1000;
    if(number>99&&number<1000)
    {
        if(gw*gw*gw+sw*sw*sw+bw*bw*bw==number)
            return 1;
    }
    else if(number>999&&number<10000)
    {
        if(gw*gw*gw*gw+sw*sw*sw*sw+bw*bw*bw*bw+qw*qw*qw*qw==number)
            return 1;
    }
    return 0;
}


void PrintN( int m, int n )
{
    for(int i=m+1;i<n;i++)
    {
        if(narcissistic(i))
        {
            printf("%d\n",i);
        }
    }
}

5.

本题要求实现一个函数,用下列公式求cos(x)的近似值,精确到最后一项的绝对值小于e:

cos(x)=x0/0!−x2/2!+x4/4!−x6/6!+⋯

函数接口定义:

double funcos( double e, double x );

其中用户传入的参数为误差上限e和自变量x;函数funcos应返回用给定公式计算出来、并且满足误差要求的cos(x)的近似值。输入输出均在双精度范围内。

double funcos( double e, double x )
{
    double fact(int n)
    {
        double result = 1;
        for (int i = 1; i <= n; i++) {
            result *= i;
        }
        return result;
    }
    
    double sum = 1.0;
    double fz = 1.0, fm = 1.0;
    int n = 2;
    int flag = -1;

    while (fabs(fz / fm) >= e)
    {
        fz = pow(x, n);
        fm = fact(n);
        sum += flag * (fz / fm);
        flag = -flag; 
        n += 2; 
    }
    
    return sum;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值