BUPT2021秋季计算导论第七次实验

BUPT2021秋季计算导论

设计函数(一)

实验5_1_设计函数fun (100 分)
已知分段函数,当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 x );
int main()
{
	int    x ;

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

    return 0 ;  
}
int fun(int num)
{
	if (num < 1)
		{
			return num ;
		}
		else if ( (num >= 1) && ( num <= 10))
				{
					return 2*num - 1 ;
				} 
				else if ( (num > 10)&& ( num <= 100))
						{
							return 3*num -11 ;
						}
						else if (num > 100)
							{
								return num * num - 24;
							}
}
		

设计函数(二)

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

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

函数接口定义:
函数原型如下:
int getDays(int year,int month);
其中 year 和 month 都是用户传入的参数,分别代表年份和月份。函数须返回该月的天数。

裁判测试程序样例:
函数被调用的例子如下:
#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) ;

    return 0 ;    
}

int    getDays(int year , int month) 
{
	switch(month){
		case 1: case 3: case 5: case 7: case 8: case 10: case 12 : 
		                                                         return 31;
	                                                             break;
		case 4: case 6: case 9 :case 11 :
			                            return 31;
			                            break;
		case 2:
			  {
			    if (( year % 4 == 0&& year % 100 != 0) || (year % 400 == 0))
			    	{
			    		return 29;
					}
					else {
						return 28;
					}
			  }
	}
}

设计函数(三)

实验5_4_设计函数getDigit (100 分)
设计函数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 ;
	while (n != 0)
		{
			i++;
			n= n/10;
		}
		return i;
}

设计函数(四)

实验5_5_设计函数reverseNum (100 分)
设计函数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 n) 
{
	int reverse = 0;
	int  temp ;
	while ( n !=0 )
		{
			temp = n % 10;
			reverse = reverse * 10 + temp ;
			n = n /10; 
		}
	return reverse ;
}

设计函数(五)

实验5_6_设计函数mypow (100 分)
设计函数int mypow(int x,int n),返回正整数x的n次幂,如mypow(2,10)值为1024。

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

函数接口定义:
函数原型如下:
int mypow(int x,int n);
其中 x 和 n 都是用户传入的参数。 x 、n 以及x 的n次幂都不超过int的范围。函数须返回 x 的 n 次幂。

裁判测试程序样例:
函数被调用的例子如下:
#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 i ;
	int mult = 1;
	for ( i= 0; i< n ;i++)
		{
			mult = mult * x;
		}
	return mult ;
}

设计函数(六)

实验5_10_设计函数judgeTriangle (100 分)
设计函数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);
其中 a 、b和 c 都是用户传入的参数。运算中所有整数均不超过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)
{
	if(((a+b)> c)&&((b+c)>a)&&((c+a)>b))
		{
			if ((a==b)&&(a==c))
				{
					return 3;
				}
				else if(( a==b&&a!=c)||(a==c &&a!= b)||(b ==c &&b!= a))
					{
						return 2;
					}
					else if ((a*a + b*b== c*c)||(a*a +c*c == b*b)||(b*b+c*c == a*a))
							{
							   return 1;
						    }
						    else {
						    	return 0;
							}
     	}
     	else {
     		return -1 ;
     	}
}
	


设计函数(七)

实验5_11_设计函数isPerfect与printPerfect (100 分)
如果一个整数的各因子(包括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]内的所有完全数及完全数的总个数。

函数接口定义:
void printPerfect(int n);
其中 n 是用户传入的参数。 函数没有返回值。

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    printPerfect(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))  //如果是完全数 
        {
            printPerfect(i) ;//打印该完全数 
            count ++ ;  //计数器加1 
        }        
    }
    printf("The total number is %d.\n",count);//输出a,b两数间完全数的数量 
    return 0 ;
}
int isPerfect(int n)
{
	int sum = 0;
	int i ;
	if(n>8128)
	  {
	  	return 0;
	  }
	  else {
        	for ( i = 1; i < n ;i++)
	         	{
			      if ( n % i == 0)
				     {
				     	sum =sum + i;
			    	 }
			    }  
             	  if( sum == n)
	  	            {
		             	return 1;
	         	     }
	        	    else {
		    	          return 0;
	                	 }
	        }
}
void    printPerfect(int n)
{
	int i ;
	for ( i =1; i < n ; i++)
		{
			if (n % i == 0)
				{
					if(i ==1)
					  {
					  printf("%d=%d",n,i);
			          }	
					  else{
					  	    printf("+%d",i);
					      }
				}
		}
		
	printf("\n");
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

影不在遗忘

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

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

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

打赏作者

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

抵扣说明:

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

余额充值