C语言习题:第8章——函数

目录

试题1 

试题2

试题3

试题4

试题5

试题6 

试题7

试题8

试题9

试题10

试题11

试题12


  C语言练习题专栏: C语言习题_繁星Starry的博客-CSDN博客


试题1 

【题目描述】

 请编写一个求两整数的最大值函数GetMax。要求在main函数中调用该函数,计算并输出最大值。其中已经给出了部分代码,请你编写计算最大值的函数,将代码补充完整。只提交你写的函数。

部分代码如下:

#include <stdio.h>

/******函数写在此处******/

int main()

{

    int num1, num2, max;

    scanf("%d %d", &num1, &num2);

    max = GetMax(num1, num2);

    printf("MAX=%d\n", max);

    return 0;

}

【输入】

  两个整数。

【输出】

  两个整数中的最大值。

【样例输入】

15 30

【样例输出】

MAX=30

int GetMax(int x,int y)
{
    return(x>y?x:y);
}

试题2

【题目描述】

编写程序分模块设计实现计算器的基本运算功能(加减乘除,除数默认不为0)。

其中已经给出了部分代码,请你编写要求的函数,将代码补充完整。只提交你写的函数。

部分代码如下:

#include <stdio.h>

/******函数写在此处******/

int main()

{

    float x, y, result;

    char c;

    scanf("%f%c%f", &x, &c, &y);

    if (c =='+')

        result = sum(x, y);        /*有参函数调用*/

    else if (c =='-')

        result = sub(x, y);

    else if (c == '*')

        result = mult(x, y);

    else if (c == '/')

        result = divi(x, y);

    printf("%.2f\n", result);

    return 0;

}

【输入】                                         

两个数字,一个运算符号

【输出】

运算结果,结果保留2位小数。

【样例输入】

2*3

【样例输出】

6.00

float sum(float x,float y)
{
    float sum;
    return sum=x+y;
}
float sub(float x,float y)
{
    float sub;
    return sub=x-y;
}
float mult(float x,float y)
{
    float mult;
    return mult=x*y;
}
float divi(float x,float y)
{
    float divi;
    return divi=x/y;
}

剩下的题过几天更~

 试题3

【题目描述】

编写函数实现功能:若a,b,c 能构成等边三角形函数返回3,若能构成等腰三角形函数返回2,若能构成一般三角形函数返回1,若不能构成三角形函数返回0。其中已经给出了部分代码,请你编写要求的函数,将代码补充完整。只提交你写的函数。

部分代码如下:

#include <stdio.h>

 

/******函数写在此处******/

 

int main()

{

    int a,b,c,shape;

    scanf("%d%d%d",&a,&b,&c);

    shape =fun(a,b,c);

    printf("The shape : %d\n",shape);

    return 0;

}

【输入】                                         

三个整数

【输出】

三角形的形状用123表示

【样例输入】

3 3 3

【样例输出】

The shape : 3 

int fun(int a,int b,int c)
{
    if(a==b&&b==c)
        return 3;
    else if(a==b||b==c||c==a)
        return 2;
    else if(a+b>c&&b+c>a&&a+c>b)
        return 1;
    else
        return 0;
}

 试题4

【题目描述】

从键盘输入n 值,输出如下图形(n=6)。

  1  2  3  4  5  6

  1  1  2  3  4  5

  1  1  1  2  3  4

  1  1  1  1  2  3

  1  1  1  1  1  2

  1  1  1  1  1  1

其中已经给出了部分代码,请你编写要求的函数,将代码补充完整。只提交你写的函数。

部分代码如下:

#include <stdio.h>

 

/******函数写在此处******/

 

int main()

{

    int n;

    scanf("%d",&n);

    fun(n);

    return 0;

}

【输入】                                         

正整数n

【输出】

n*n大小的数字图形(每个数字占3个域宽)

【样例输入】

5

【样例输出】

  1  2  3  4  5

  1  1  2  3  4

  1  1  1  2  3

  1  1  1  1  2

  1  1  1  1  1 

#define N 100
int fun(int n)
{
    int i,j,k,a[N];
    for(i=0;i<n;i++)
    {
        a[i]=i+1;
    }
    for(j=0;j<n;j++)
    {
        for(i=0;i<n;i++)
        {
            printf("%3d",a[i]);
        }
        printf("\n");
        for(i=0;i<n;i++)
        {
            a[i]--;
            if(a[i]==0)
                a[i]++;
        }
    }
}

试题5

 【题目描述】

 完成函数计算任意两个整数的阶乘之和。其中已经给出了部分代码,请你编写要求的函数,将代码补充完整。只提交你写的函数。

部分代码如下:

#include <stdio.h>

 

/******函数写在此处******/

 

int main()

{

    int num1, num2, result;

    scanf("%d,%d",&num1,&num2);

    result = factorial(num1) + factorial(num2);//调用两次factorial()

    printf("%d", result);

    return 0;

}

【输入】

两个整数

【输出】

两个数字分别阶乘然后相加的运算结果

【样例输入】

2,3

【样例输出】

8  

int factorial(int num)
{
    int i,result=1;
    for(i=1;i<=num;i++)
        result*=i;
    return result;
}

 试题6 

 【题目描述】

 编写一个函数Fun,其功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。

其中已经给出了部分代码,请你编写函数,将代码补充完整。只提交你写的函数。

部分代码如下:

#include <stdio.h>

/******函数写在此处******/

int main()

   int  n;

   scanf("%d",&n);

   printf("The result is: %d\n",Fun(n));

   return 0;

}

【输入】

  一个整数n。

【输出】

 按照要求形成的新整数。

【样例输入】

27638496

【样例输出】

The result is: 26846 

int Fun(int n)
{
    int i,j,k=0,b[10],ss;
    do
    {
        i=n%10;
        if(i%2==0)
        {
            b[k]=i;
            k++;
        }
        n=n/10;
    }
    while(n>0);
    ss=0;
    for(j=k-1;j>=0;j--)
        ss=ss*10+b[j];
    return ss;
}

 试题7

【题目描述】

从键盘输入3个数,将最大值放在变量a中,最小值放在变量c中,将中间值放在变量b中。其中已经给出了部分代码,请你编写要求的函数,将代码补充完整。只提交你写的函数。

部分代码如下:

#include <stdio.h>

 

/******函数写在此处******/

 

int main()

{

    int a,b,c;

    scanf("%d%d%d",&a,&b,&c);

    fun(&a,&b,&c);

    printf("a=%d,b=%d,c=%d\n",a,b,c);

    return 0;

}

【输入】                                         

三个整数

【输出】

按要求输出变量abc的值

【样例输入】

55 12 34

【样例输出】

a=55,b=34,c=12

例如:  

输入

Result

-10 -32 -789

a=-10,b=-32,c=-789

6 6 6

a=6,b=6,c=6

int fun(int *a,int *b,int *c)
{
    int m,i;
    for(i=1;i<=2;i++)
    {
        if(*a<*b)
        {
            m=*a;
            *a=*b;
            *b=m;
        }
        if(*b<*c)
        {
            m=*b;
            *b=*c;
            *c=m;
        }
    }
    return *a,*b,*c;
}

 试题8

【题目描述】

编写函数将两个变量的值交换,例如变量a中的值原为3b中的值原为8,程序运行后a中的值为8b中的值为3。其中已经给出了部分代码,请你编写要求的函数,将代码补充完整。只提交你写的函数。

部分代码如下:

#include <stdio.h>

 

/******函数写在此处******/

 

int main()

{

    int a,b;

    scanf("%d %d",&a,&b);

    fun(&a,&b);

    printf("%d %d\n",a,b);

    return 0;

}

【输入】                                         

两个整数

【输出】

交换后的两个整数

【样例输入】

3 5

【样例输出】

5 3  

int fun(int *a,int *b)
{
    int m;
    m=*a;
    *a=*b;
    *b=m;
    return *a,*b;
}

 试题9

 【题目描述】

编写函数,求一个字符串长度。main函数中输入字符串,并输出其长度

其中已经给出了部分代码,请你编写函数,将代码补充完整。只提交你写的函数。

部分代码如下:

#include <stdio.h>

/******函数写在此处******/

int main()

{

    int len;

    char str[200];

    scanf("%s", str);

    len = lenght(str);

    printf("%d\n", len);

    return 0;

}

【输入】

一个字符串。

【输出】

其字符个数。

【样例输入】

china↙

【样例输出】

5↙   

int lenght(char str[200])
{
    int i=0;
    while(str[i]!='\0')
        i++;
    return i;
}

 试题10

【题目描述】

 请编写一个判断素数的函数PrimeJudge。具体功能是对录入的一个整数num进行判断,判断其是否为素数,如果是素数,则返回1,否则返回0。其中已经给出了部分代码,请你编写要求的函数,将代码补充完整。只提交你写的函数。

部分代码如下:

#include <stdio.h>

 

/******函数写在此处******/

 

int main()

{

    int num;

    scanf("%d", &num);

    if( PrimeJudge(num) )

        printf("Prime\n");

    else

        printf("Non Prime\n");

    return 0;

}

【输入】

  一个整数num。

【输出】

 num如果是素数,则返回1,否则返回0。

【样例输入】

13

【样例输出】

Prime

例如:  

输入

Result

21

Non Prime

31

Prime

2

Prime

56

Non Prime

79

Prime

int PrimeJudge(int num)
{
    int p=1,i;
    for(i=2;i<num-1;i++)
    {
        if(num%i==0)
            p=0;
    }
    return p;
}

试题11

 【题目描述】

      哈哈!我们终于学了递归了,现在大家一定感到非常有意思吧,那个典型的汉诺塔问题,一个非常短的程序居然可以完成如此复杂的工作,真是神奇啊!来吧,让我们也动手编写一个递归程序,当然,我们要编写的不可能太复杂。功能:从键盘录入两个数nm来表示一个区间, n  为区间的起始点,m为区间的终止点  ,求整数 n  m 区间的累加和,其中n<=m。

其中已经给出了部分代码,请你编写函数,将代码补充完整。只提交你写的函数。

部分代码如下:

#include <stdio.h>

/******函数写在此处******/

int main()   

{   

    int m,n,s;   

    scanf("%d%d",&n,&m);   

    s=GetSum(n,m);   

    printf("%d\n",s); 

    return 0;  

}

【输入】

       两个整数nm。

【输出】

       n 到 m 区间的累加和。

【样例输入】

1 100

【样例输出】

5050 

int GetSum(int a,int b)
{
    if(a==b)
    return b;
    return a+GetSum(a+1,b);
}

 试题12

【题目描述】

据说有个智商不高的富翁和一个智商较高的骗子。有一天骗子对富翁说:“我搞了一个基金会,你将短期不用的富余资金存到我这里吧。第一天你只需要存入一元,第二天存入两元,以此类推,以后每天存入的资金是前一天的2倍,直到若干天期满为止。与此同时,你可以每天最多支取一笔价钱不菲的金额。”俩人按照上述要求立字据,合约执行若干天后结束,到时两人互不相欠。

现要求编写两个函数Deposit()Withdraw()分别计算富翁的存入和支取金额,并编写程序调用这两个函数判断骗子要想骗取富翁的金钱,合约需要执行的最少天数,以及骗子总共骗取的金钱数,其中通过输入获得富翁每天可以支取的最大金额数。其中录入数据格式要求有多行。第一行输入一个整数n,表示有n行测试数据。以下有n行数据,每行数据表示富翁每天可以支取的最大金额数amount1<=amount<=1000000),单位为元。输出有n行。每行两个数据,第1个数据表示,骗子要想骗取富翁的金钱,根据富翁每天可以支取的最大金额数,判断出的合约需要执行的最少天数;第2个数据表示骗子所骗取的金钱数。

其中已经给出了部分代码,请你编写函数,将代码补充完整。只提交你写的函数。

部分代码如下:

#include <stdio.h>

/******函数写在此处******/

int main()

{

    int n,i,day;

    int amount,dpt,wd;

    scanf("%d",&n);

    for(i=1;i<=n;i++)

    {

        scanf("%d",&amount);

        for(day=1;;day++)

        {

            dpt=Deposit(day);

            wd=Withdraw(day,amount);

            if(dpt-wd>0)

            {

                printf("%d天骗取现金%d元\n",day,dpt-wd);

                break;

            }

        }

    }

    return 0;

}

【输入】

有多行。第1行输入一个整数n,表示有n行测试数据。以下有n行数据,每行数据表示富翁每天可以支取的最大金额数amount1<=amount<=1000000),单位为元。

【输出】

有多行。每行两个数据,第1个数据表示,骗子要想骗取富翁的金钱,根据富翁每天可以支取的最大金额数,判断出的合约需要执行的最少天数;第2个数据表示骗子所骗取的金钱数。

【样例输入】

2↙

300000↙

400000

【样例输出】

23天骗取现金1488607元↙

24天骗取现金7177215元↙ 

int fun(int x)
{
    if(x==1)
    return 1;
    return 2*fun(x-1);
}
int Deposit(int x)
{
    if(x==1)
    return 1;
    return 2*fun(x-1)+Deposit(x-1);
}
int Withdraw(int x,int y)
{
    return x*y;
}

本文就到这里啦,如有帮助,请多支持~  

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值