第10周 函数相关练习题

5-1 设计函数fun 分段函数
已知分段函数,当x<1时,y=x;当1<=x<=10时,y=2x-1;当10< x <=100时,y=3x-11;当x>100时,y=x*x-24。 设计函数int fun(int x),根据分段函数计算y值。 函数返回值范围不会超过int型变量。 输入为一个整数x,即自变量x。输出为函数值y的结果

函数接口定义:

函数原型 如下:
int fun ( int x );

其中 x 是用户传入的参数。 x的值不超过int的范围。函数须返函数值 y 的结果。

裁判测试程序样例:

函数被调用代码如下:
#include<stdio.h>

int    fun(int) ;

int main()
{
    int    x ;

    scanf("%d",&x);
    printf("The result is:y=%d\n",fun(x)) ;

    return 0 ;    
}

/* 请在这里填写答案 */

输入样例:

-99

输出样例:

The result is:y=-99

答案:

#include<stdio.h>

int    fun(int) ;//要先做声明

int main()
{
    int    x ;

    scanf("%d",&x);
    printf("The result is:y=%d\n",fun(x)) ;

    return 0 ;    
}
//以下为答案的填写。(上面的主函数系统已经有了,不用再输进去)
int fun(int x)
{
    int y=0;
    if (x<1)
     y=x;
    else if((x>=1)&&(x<=10))
     y=2*x-1;
    else if((x>10)&&(x<=100))
     y=3*x-11;
    else if(x>100)
     y=x*x-24;

    return y;//意思是把函数值y还给调用这个fun函数的主函数中,返回类型是int
}


5-2 设计函数getDays 计算某月天数
设计函数int getDays(int year,int month),根据给定的年year和月份month,计算该月的天数并返回。 提示:注意闰年的判断。

输入与输出要求: 输入两个整数y,m,即年份与月份。输出该年内该月的天数,占一行。 测试用例保证输入合法。

函数接口定义:

函数原型如下:
int getDays(int year,int month);

其中 yearmonth 都是用户传入的参数,分别代表年份和月份。函数须返回该月的天数。
裁判测试程序样例:

函数被调用的例子如下:
#include<stdio.h>

int    getDays(int,int) ;

int main()
{
    int    year, month ;

    scanf("%d%d",&year,&month);
    printf("There are %d days in month %d year %d.",getDays(year,month), month, year) ;

    return 0 ;    
}

/* 请在这里填写答案 */

输入样例:

1995 7

输出样例:

There are 31 days in month 7 year 1995.

答案:

#include<stdio.h>

int    getDays(int,int) ;//声明
int main()
{
    int    year, month ;

    scanf("%d%d",&year,&month);
    printf("There are %d days in month %d year %d.",getDays(year,month), month, year) ;
//调用getDays(年,月)
    return 0 ;    
}
int getDays(int year,int month)//得到的参数就是年,月
{
	int days=0;

	if (((year%4==0)&&(year%100!=0))||(year%400==0)){
		if ((month>=1)&&(month<=7)&&(month%2!=0)&&(month!=2))
		 days=31;
		else if ((month>=8)&&(month<=12)&&(month%2==0))
		 days=31;
		else if ((month>2)&&(month<=6)&&(month%2==0))
		 days=30;
		else if ((month>=9)&&(month<=11)&&(month%2!=0))
		 days=30;
		else if (month==2)
		 days=29;
	}
	else{
		if ((month>=1)&&(month<=7)&&(month%2!=0)&&(month!=2))
		 days=31;
		else if ((month>=8)&&(month<=12)&&(month%2==0))
		 days=31;
		else if ((month>2)&&(month<=6)&&(month%2==0))
		 days=30;
		else if ((month>=9)&&(month<=11)&&(month%2!=0))
		 days=30;
		else if (month==2)
		 days=28;
	}
	return days;
}

5-3 设计函数getDigit 计算正整数长度
设计函数int getDigit(long long n),计算并返回正整数n的长度。

输入与输出要求: 输入一个正整数n,n的取值范围不会超过long long类型变量。输出该正整数的位数,如“The integer 20 has 2 digits.”,占一行。注意单词digits的单复数形式。
函数接口定义:

函数原型如下:
int getDigit(long long n);

其中 n 是用户传入的参数。 n 的值不超过long long的范围。函数须返回 n 的长度。

裁判测试程序样例:

函数被调用 的例子如下:
#include<stdio.h>

int getDigit(long long n); 

int main()
{
    long long     n ;
    int            len ;

    scanf("%lld",&n);
    len = getDigit(n) ;
    if (len > 1)
        printf("The integer %lld has %d digits.\n",n, len) ;
    else
        printf("The integer %lld has %d digit.\n",n, 1) ;
    return 0 ;    
}

/* 请在这里填写答案 */

输入样例:

1234567890

输出样例:

The integer 1234567890 has 10 digits.

答案:

#include<stdio.h>
int getDigit(long long n); //声明
int main()
{
    long long n ;
    int len ;

    scanf("%lld",&n);
    len = getDigit(n) ;//调用计算正整数长度的子函数
    if (len > 1)
        printf("The integer %lld has %d digits.\n",n, len) ;
    else
        printf("The integer %lld has %d digit.\n",n, 1) ;
    return 0 ;    
}

int getDigit(long long n)
{
    int i=0;
    long long x;
    x=n;
    while(x>0){
        x=x/10;
        i++;
    }
    return i;
}

5-4 设计函数reverseNum 逆序输出正整数
设计函数int reverseNum(int n),返回正整数n反转后的形式,如reverseNum(12345)的值为54321。

输入与输出要求: 输入一个正整数n,n的取值范围不会超过int类型变量,n不会有前导0,n的结尾也不会有0。输出该正整数的反转形式,输出如“The reverse form of number 12345 is 54321.”,占一行。
函数接口定义:

函数原型如下:
int reverseNum(int n);

其中 n 是用户传入的参数。 n 的值不超过int的范围。函数须返回 n 反转后的数字。

裁判测试程序样例:

函数被调用例子如下:
#include<stdio.h>

int reverseNum(int) ; 

int main()
{
    int        num ;

    scanf("%d",&num);
    printf("The reverse form of number %d is %d.\n",num,reverseNum(num)) ;

    return 0;
}

/* 请在这里填写答案 */

输入样例:

12345

输出样例:

The reverse form of number 12345 is 54321.

答案:

#include<stdio.h>
int reverseNum(int) ; //声明
int main()
{
    int        num ;

    scanf("%d",&num);
    printf("The reverse form of number %d is %d.\n",num,reverseNum(num)) ;
//调用使正整数逆序的函数
    return 0;
}
int reverseNum(int num)
{
	int d,t=0;
	int x=num;
	do{
		d=x%10;//得到尾巴的值
		t=t*10+d;//把尾巴的值放在开头,一开始t=0,所以得到尾巴自己
		x/=10;//砍掉尾巴
		//然后再返回上面第一部循环,得到去掉尾巴后的值的新尾巴
	}while(x>0);
	return t;
	//将逆序的结果返回去
}

(记得复习含0的正整数怎么 逆序/分解 输出,回到迭代算法中看)

5-5 设计函数mypow 计算x的n次幂
设计函数int mypow(int x,int n),返回正整数x的n次幂,如mypow(2,10)值为1024。

输入与输出要求: 输入两个非负整数x、和n,x的n次幂不会超过int型范围。输出计算结果,占一行。
函数接口定义:

函数原型如下:
int mypow(int x,int n);

其中 xn 都是用户传入的参数。 xn 以及x 的n次幂都不超过int的范围。函数须返回 xn 次幂。
裁判测试程序样例:

函数被调用的例子如下:
#include<stdio.h>

int mypow(int , int ) ;

int main()
{
    int x, n ;

    scanf("%d%d",&x,&n) ;
    printf("%d\n",mypow(x,n)) ;

    return 0;
}

/* 请在这里填写答案 */

输入样例:

2 10

输出样例:

1024

答案:

#include<stdio.h>

int mypow(int , int ) ;

int main()
{
    int x, n ;

    scanf("%d%d",&x,&n) ;
    printf("%d\n",mypow(x,n)) ;

    return 0;
}
int mypow(int x, int n)
{
    int y=0;
    y=pow(x,n);
    return y;
}

5-6 设计函数judgeTriangle 判断三角形
设计函数int judgeTriangle(int a,int b,int c),判断a、b、c三边是否能构成三角形,如果能,那么进一步判断是属于哪种三角形(等边、等腰、直角、不规则三角形)。这里的a、b、c没有顺序之分。 当a、b、c三边不能构成三角形时,返回-1;当a、b、c三边构成不规则三角形时,返回0;当a、b、c三边构成直角三角形时,返回1;当a、b、c三边构成等腰三角形时,返回2;当a、b、c三边构成等边三角形时,返回3。

输入与输出要求: 输入三个正整数a、b、c,分别代表三角形的三边,输出判断结果。当无法构成三角形时输出“It is not a triangle.”;当构成不规则三角形时输出“It is a scalenous triangle.”;当构成直角三角形时输出“It is a right-angled triangle.”;当构成等腰三角形时输出“It is an isosceles triangle.”;当构成等边三角形时输出“It is a equilateral triangle.”。
函数接口定义:

函数原型如下:
int judgeTriangle(int a,int b,int c);

其中 abc 都是用户传入的参数。运算中所有整数均不超过int范围。函数须按题目要求返回相应的值。
裁判测试程序样例:

函数被调用的例子如下:
#include<stdio.h>

int judgeTriangle(int,int,int) ; 

int main()
{
    int        a, b, c ;    

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

    switch(judgeTriangle(a,b,c))
    {
        case    -1    :    printf("It is not a triangle.\n") ;    break ;
        case    0    :    printf("It is a scalenous triangle.\n") ;    break ;
        case    1    :    printf("It is a right-angled triangle.\n") ;    break ;
        case    2    :    printf("It is an isosceles triangle.\n") ;    break ;
        case    3    :    printf("It is a equilateral triangle.\n") ;    break ;
    }

    return 0;
}

/* 请在这里填写答案 */

输入样例:

13 5 12

输出样例:

It is a right-angled triangle.

答案:


#include<stdio.h>
int judgeTriangle(int,int,int) ; 

int main()
{
    int   a, b, c ;    

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

    switch(judgeTriangle(a,b,c))
    {
        case    -1    :    printf("It is not a triangle.\n") ;    break ;
        case    0    :    printf("It is a scalenous triangle.\n") ;    break ;
        case    1    :    printf("It is a right-angled triangle.\n") ;    break ;
        case    2    :    printf("It is an isosceles triangle.\n") ;    break ;
        case    3    :    printf("It is a equilateral triangle.\n") ;    break ;
    }

    return 0;
}

int judgeTriangle(int a,int b,int c)
{
	int x=0;
	if((a+b>c)&&(b+c>a)&&(c+a>b)){
		if((a*a+b*b==c*c)||(a*a==b*b+c*c)||(b*b==a*a+c*c))
		x=1;
		else if(((a==b)&&(a!=c))||((a==c)&&(a!=b))||((b==c)&&(b!=a)))
		x=2;
		else if((a==b)&&(a==c))
		x=3;
		else
		x=0;
	}
	else
	 x=-1;
	 return x;
}

5-7 设计函数isPerfect与printPerfect 判断并打印完全数
问题描述: 如果一个整数的各因子(包括1但不包括该整数本身)值之和等于该整数,则该整数称为“完全数”(perfect number)。例如,6是一个完全数,因为6=1+2+3。你的任务是设计函数isPerfect和printPerfect,判断并打印出区间[a,b](1<=a<b<=20000)内的所有完全数,并统计完全数的总个数。 isPerfect函数原型:int isPerfect(int n);用于判断正整数n是否为完全数,若是,则返回值为1,否则为0。 printPerfect函数原型:void printPerfect(int n);用于打印出一个完全数n的所有因子,当执行printPerfect(6)时,打印效果为:6=1+2+3。

输入与输出要求: 输入两个正整数a和b,输出区间[a,b]内的所有完全数及完全数的总个数。
函数接口定义:

本题只设计isPerfect,函数原型如下:
int isPerfect(int n);

其中 n 是用户传入的参数。如果 n是完全数,则函数须返回 1,否则返回0

裁判测试程序样例:

函数被调用的例子如下:
#include <stdio.h>

//判断一个数是否为完全数的函数
int        isPerfect(int);

//打印完全数的函数 
void    printPerfact(int);

int main()
{
    int i,a,b,count;

    scanf("%d%d",&a,&b);
    count = 0 ;//a,b两数间完全数的数量,初始化为0 
    for(i=a;i<=b;i++)
    {
        if (isPerfect(i))  //如果是完全数 
        {
            printPerfact(i) ;//打印该完全数 
            count ++ ;  //计数器加1 
        }        
    }
    printf("The total number is %d.\n",count);//输出a,b两数间完全数的数量 
    return 0 ;
}

/* 请在这里填写答案 */

输入样例:

1 10000

输出样例:

6=1+2+3
28=1+2+4+7+14
496=1+2+4+8+16+31+62+124+248
8128=1+2+4+8+16+32+64+127+254+508+1016+2032+4064
The total number is 4.

答案:

#include <stdio.h>

//判断一个数是否为完全数的函数
int        isPerfect(int);

//打印完全数的函数 
void    printPerfact(int);

int main()
{
    int i,a,b,count;

    scanf("%d%d",&a,&b);
    count = 0 ;//a,b两数间完全数的数量,初始化为0 
    for(i=a;i<=b;i++)
    {
        if (isPerfect(i))  //如果是完全数 
        {
            printPerfact(i) ;//打印该完全数 
            count ++ ;  //计数器加1 
        }        
    }
    printf("The total number is %d.\n",count);//输出a,b两数间完全数的数量 
    return 0 ;
}

//判断一个数是否为完全数的函数
int isPerfect(int n)
{
 int x,y,sum=0;

 for(x=1;x<=n/2;x++){
  if(n%x==0)
   sum+=x;
 }
 if(n==sum)
  y=1;
 else
  y=0;

 return y;
}
//打印完全数的函数
void printPerfact(int n)
{
 int i=0;

  if (isPerfect(n))
     printf("%d=",n);
  for(i=1; i<n; i++) {

      if((n%i==0)&&(i!=n/2))
      printf("%d+",i);
      else if(i==n/2)
      printf("%d\n",i);
   }

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值