习题5 函数

1.使用函数计算分段函数的值:输入x,计算并输出下列分段函数f(x)的值。要求定义和调用函数sign(x)实现该分段函数。试编写相应程序。 f(x)=1 x>0
=0 x=0
=-1 x<0

#include <stdio.h>
int sign(int x);
int main()
{
    int x;
    printf("Enter a number:\n");
    scanf("%d", &x);
    printf("f(%d)=%d", x, sign(x));
    return 0;
}
int sign(int x)
{
    if (x > 0)
    {
        return (1);
    }
    else if (x < 0)
    {
        return (-1);
    }
    else
    {
        return (0);
    }
}

2.使用函数求奇数和:输入一批正整数(以零或负数为结束标志),求其中的奇数和。要求定义和调用函数even(n)判断数的奇偶性,当n为偶数时返回1,否则返回0试编写相应程序。

#include <stdio.h>
int jishu(int x);
int main()
{
    int n;
    int sum=0;
    printf("请输入一批正整数(以零或负数为结束标志):\n");
    while (1)
    {
        scanf("%d",&n);
        if (n<=0)
        {
            break;
        }
        if (jishu(n)==0)
        {
            sum=sum+n;
        }
    }
    printf("奇数和为:%d\n",sum);

    return 0;
}
int jishu(int x)
{   
    int ret;
        if (x%2==0)
        {
            ret=1;
        }
        else
        {
            ret=0;
        }
        return ret;
}

3.使用函数计算两点间的距离:给定平面任意两点坐标(x1,y1)和(x2,y2),求这两点之间的距离(保留2位小数)。要求定义和调用函数dist(x1,y1,x2,y2)计算两点间的距离。试编写相应程序。

#include <stdio.h>
#include <math.h>
double dist(double x1, double y1, double x2, double y2);
int main()
{
    double x1, y1, x2, y2;
    double l;
    printf("Enter x1,y1,x2,y2:\n");
    scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
    printf("两点之间的距离公式为:%.2f", dist(x1, y1, x2, y2));

    return 0;
}
double dist(double x1, double y1, double x2, double y2)
{
    double l;
    l = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
    return l;
}

4.利用函数计算素数个数并求和:输入两个正整数m和n(1≤m,n≤500),统计并输出m和n之间的素数的个数以及这些素数的和。要求定义并调用函数
prime(m)判断m是否为素数。试编写相应程序。

#include <stdio.h>
#include <math.h>

int prime( int p );
int PrimeSum( int m, int n );

int main()
{
    int m, n, p;
    int count=0;

    scanf("%d %d", &m, &n);
    printf("Sum of ( ");
    for( p=m; p<=n; p++ ) {
        if( prime(p) != 0 ){
            printf("%d ", p);
            count++;
        }
    }
    printf(") = %d\n", PrimeSum(m, n));
    printf("sushu has %d",count);

    return 0;
}
//函数prime当用户传入参数p为素数时返回1,否则返回0
int prime(int p)
{
    int isPrime =1;
    if(p<=1){
        isPrime = 0;
    }else{
        for(int j=2;j<p;j++){
            if(p%j==0){
                isPrime = 0;
                break;
            }
        }
    }
    return isPrime;
}
int PrimeSum( int m, int n )
{
    int sum=0;
    for(int i=m; i<=n; i++ ) {
        if( prime(i) != 0 )
            sum+=i;
    }
    return sum;
}

5.使用函数统计指定数字的个数:读入一个整数,统计并输出该数中“2”的个数。要求定义并调用函数 countdigit( number digit),它的功能是统计整数 number中数字 digit的个数。例如,
countdigit(12292,2的返回值是3。试编写相应程序。

#include <stdio.h>
int countdigit(number,digit);
int main()
{
    int number,digit;
    printf("Enter number and digit:\n");
    scanf("%d %d", &number, &digit);
    printf("%d",countdigit(number, digit));
    return 0;
}
int countdigit(int number,int digit)
{
    int count=0;
    if (number<0) 
        number=-number;
    do
    {
        if(digit==number%10)
            count++;
        number=number/10;
    } while (number);
    return count;
}

6.使用函数输出水仙花数:输入两个正整数m和n(1≤m,n≤1000),输出m之间的所有满足各位数字的立方和等于它本身的数。要求定义并调用函数is(number)判断number的各位数字之立方和是否等于它本身。试编写相应程序。

#include <stdio.h>
int function(int n) //自定义函数
{
    int i,g,s,b;
    
        b=n/100;
        s=(n-b*100)/10;
        g=n%10;

        return n==g*g*g+b*b*b+s*s*s;//返回n

}
int main()
{
    int i,m,n;
    printf("Enter m and n:\n");
    scanf("%d %d",&m,&n);
    if(m>=1&&n<=1000)
    {
        for(i=m;i<n;i++)//遍历
        {
            if(function(i))
            printf("%d\n",i);
        }
    }
    else
    {
        printf("Invalid value");
    }
    return 0;
}

7.使用函数求余弦函数的近似值:输入精度e,用下列公式计算cosx的近似值,精确到最后一项的绝对值小于e。要求定义和调用函数funcos(e,x)求余弦函数的近似值。试编写相应程序。
cos(x)=x​0​​/0!−x​2​​/2!+x​4​​/4!−x​6​​/6!+⋯

#include <stdio.h>
#include <math.h>
double funcos(e,x);
int main()
{
    double e, x;

    scanf("%lf %lf", &e, &x);
    printf("cos(%.2f) = %.6f\n", x, funcos(e, x));

    return 0;
}
double funcos(double e,double x)
{
    double ans = 1, term = ans;
	double xx = 1, down = 1, d = 0;
	double f = -1; 
    while (fabs(term) >= e) 
    {
        xx *= (x * x);
        down *= (d + 1) * (d + 2);
        term = f * xx / down;
        ans += term;
        f *= (-1);
        d += 2;
    }
    return ans;
}
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值