头歌C语言:函数1

1.计算两个正整数的最大公约数(函数的调用)

任务描述

编程计算两个正整数的最大公约数。其中求最大公约数的函数原型已经给出,请在主函数中编程调用函数,输出最大公约数。

程序的运行示例: 12,3↙ 3 ####函数原型说明 求最大公约数的函数原型如下: int MaxCommonFactor( int a, int b); 返回值:返回的是最大公约数;若输入的数据有任意一个不满足条件,返回值是-1。 参数:a,b是两个整型数

#include<stdio.h>
int MaxCommonFactor( int a, int b)
{ 
   int c; 
   if(a<=0||b<=0) 
      return -1; 
   while(b!=0)
   { 
     c=a%b; 
     a=b;
     b=c;
   } 
  return a; 
}   
int main(void)
	{  
	  /*********Begin*********/
    int a;int b;
	  scanf("%d,%d",&a,&b);
    a = MaxCommonFactor(a,b);
    printf("%d\n",a);
	  
	  /*********End**********/ 
    return 0;
}

2.求和

任务描述

题目描述:给你一个n,要求你编写一个函数求1+2+.......+n.

相关知识(略)
编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。

输入 输入一个n

输出 输出1+2+.......+n的和

#include<stdio.h>
//编写函数
/*********Begin*********/
int total(int n){
    int result=0;//头歌中int result 不会默认result=0
    for(int i=1;i<=n;i++){
        result = result + i;
    }
    return result;
}
/*********End**********/ 
int main(void)
{  
    /*********Begin*********/
    int n;int result;
    scanf("%d",&n);
    result = total(n);
    printf("%d",result);
    /*********End**********/ 
    return 0;
}

3.回文数计算

任务描述

本关任务:编写函数求区间[200,3000]中所有的回文数,回文数是正读和反读都是一样的数。如525, 1551

相关知识(略)
编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。 输入 无需输入

输出 输出区间[200,3000]中所有的回文数,一行一个回文数,不需要输出其它无关的字符。

202 212 222 232 242 .....

#include<stdio.h>
void solve(){
    /*********Begin*********/
    int i=200;
    int a,b,c,d;
    for(i=200;i<1000;i++)
    {
        int n=i;
        a = n%10;
        b = ((n-a)%100)/10;
        c = ((n-10*b-a)%1000)/100;
        if(n==100*a+10*b+c) printf("%d\n",n) ;
    }
    for(i=1000;i<=3000;i++)
    {
        int n=i;
        a = n%10;
        b = ((n-a)%100)/10;
        c = ((n-10*b-a)%1000)/100;
        d = ((n-100*c-10*b-a)%10000)/1000;
        if(n==1000*a+100*b+10*c+d) printf("%d\n",n) ;
    }

    /*********End**********/ 
}
int main(void)
{  
    solve();
   return 0;
}

4.编写函数求表达式的值

任务描述

题目描述:有如下表达式 s = 1 + 1 / 3 + (1 * 2) / (3 * 5) + (1 * 2 * 3) / (3 * 5 * 7) + .... + (1 * 2 * 3 * .... * n) / (3 * 5 * 7 * ... * (2 * n + 1))

编写函数求给出的n所对应的表达式s的值。

相关知识(略)
编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。 输入

一个整数n 输出

输出表达式的值,保留小数点后10位的值。

#include<stdio.h>
//编写题目要求的函数
/*********Begin*********/
double mul(int n){
    double result=1;double min=1;double mon=1;
    for(int i=1;i<=n;i++)
    {        
        min = min*i;
        mon = mon*(2*i+1);
        result = result+min/mon;
    }
    return result;
}
/*********End**********/ 
int main(void)
{  
    /*********Begin*********/
    int n;double result=1;
    scanf("%d",&n);
    result = mul(n);
    printf("%.10f",result);
    /*********End**********/ 
    return 0;
}

5.阶乘数列

任务描述

题目描述:求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字。

相关知识(略)
编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。 输入

一个整数n(1<=n<=20) 输出 输出表达式的值,占一行。

#include<stdio.h>
//编写函数
/*********Begin*********/
long long fac(int n)
{
    long long mid=1;
    long long result=0;
    for(int i=1;i<=n;i++)
    {
        mid=mid*i;
        result = result+mid;
    }
    return result;
}
/*********End**********/ 
int main(void)
{  
    /*********Begin*********/
    int n;
    scanf("%d",&n);
    long long result = fac(n);
    printf("%lld",result);//long long类型需要%lld
    /*********End**********/ 
    return 0;
}

6.亲密数(函数版)

任务描述

题目描述:两个不同的自然数AB,如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数AB称为亲密数。求3000以内的全部亲密数。

相关知识(略)
编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。 输入 无需输入 输出 3000以内的全部亲密数(输出格式:(A,B),不加换行,不加分隔符号) 一对亲密数只输出一次,小的在前

#include<stdio.h>
void solve(){
    /*********Begin*********/   
    int B,n,mid=0;
    for(int A=1;A<=3000;A++)
    {
        if(A!=mid)//跳过已有B值
        {
            B =0;//置零
            n =0;
            for(int y=1;y<A;y++)
            {
                if(A%y==0)
                {
                    B=B+y;
                }
            }
            for(int i=1;i<B;i++)
            {
                if(B%i==0)
                {
                    n=n+i;
                }
            }
            if(A==n&&A!=B)
            {
                printf("(%d,%d)",A,B);
                mid=B;//将已有B值记录
            }
        }       
    }
    /*********End**********/ 
}
int main(void)
{  
    solve();
    return 0;
}

7.公约公倍数

任务描述

题目描述:写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。

相关知识(略)
编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充,变量类型使用long long int输入 两个正整数 输出 最大公约数 最小公倍数 如果输入的数中包含负数,则输出Input Error

#include<stdio.h>
//编写最大公约数GCD函数
/*********Begin*********/
long long GCD(long long m,long long n)
{
    long long result=1;
    for(int i=1;i<m;i++)
    {
        if(m%i==0&&n%i==0)
        {
            result=i;
        }
    }
    return result;
}
/*********End**********/ 

//编写最小公倍数LCM函数
/*********Begin*********/
long long LCM(long long m,long long n)
{
    long long result = (m*n)/GCD(m,n);
    return result;
}
/*********End**********/ 
int main(void)
{  
    /*********Begin*********/
    long long m,n;
    scanf("%lld %lld",&m,&n);
    if(m<0||n<0)
    {
        printf("Input Error");
    }
    else
    {
        printf("%lld %lld",GCD(m,n),LCM(m,n));
    }
    /*********End**********/ 
    return 0;
}

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

czy,出发!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值