PTA6-1 使用函数输出水仙花数 (10分) 6-2 使用函数求奇数和 (10分) 6-3 使用函数求最大公约数 (10分) 6-4 递归实现指数函数 (15分) 6-5 数字金字塔 (15分) 7

PTA作业

6-1 使用函数输出水仙花数 (10分)

水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=1
​3
​​ +5
​3
​​ +3
​3
​​ 。 本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。

函数接口定义:
int narcissistic( int number );
void PrintN( int m, int n );
函数narcissistic判断number是否为水仙花数,是则返回1,否则返回0。

函数PrintN则打印开区间(m, n)内所有的水仙花数,每个数字占一行。题目保证100≤m≤n≤10000。

裁判测试程序样例:
#include <stdio.h>

int narcissistic( int number );
void PrintN( int m, int n );

int main()
{
int m, n;

scanf("%d %d", &m, &n);
if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
PrintN(m, n);
if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);

return 0;

}

/* 你的代码将被嵌在这里 */
输入样例:
153 400
输出样例:
153 is a narcissistic number
370
371

int pow(int x,int n)
{
	int p=1;
	while(n)
	{
		p*=x;
		n--;
	}
	return p;
}
int narcissistic( int number )
{
	int sum=0,count=0,m,n;
	m=n=number;
	do
	{
		count++;
		m=m/10;
	}while(m);
	do
	{
		sum+=pow(n%10,count);
		n=n/10;
	}while(n);
	if(sum==number)
		return 1;
	else
		return 0;
}
void PrintN( int m, int n )
{
	int i;
	for(i=m+1;i<n;i++)
		if(narcissistic(i))
			printf("%d\n",i);
}

6-2 使用函数求奇数和 (10分)

本题要求实现一个函数,计算N个整数中所有奇数的和,同时实现一个判断奇偶性的函数。

函数接口定义:
int even( int n );
int OddSum( int List[], int N );
其中函数even将根据用户传入的参数n的奇偶性返回相应值:当n为偶数时返回1,否则返回0。函数OddSum负责计算并返回传入的N个整数List[]中所有奇数的和。

裁判测试程序样例:
#include <stdio.h>

#define MAXN 10

int even( int n );
int OddSum( int List[], int N );

int main()
{
int List[MAXN], N, i;

scanf("%d", &N);
printf("Sum of ( ");
for ( i=0; i<N; i++ ) {
    scanf("%d", &List[i]);
    if ( even(List[i])==0 )
        printf("%d ", List[i]);
}
printf(") = %d\n", OddSum(List, N));

return 0;

}

/* 你的代码将被嵌在这里 */
输入样例:
6
2 -3 7 88 0 15
输出样例:
Sum of ( -3 7 15 ) = 19

int even( int n )
{
	if(n%2)
		return 0;
	return 1;
}
int OddSum( int List[], int N )
{
	int sum=0,i;
	for(i=0;i<N;i++)
		if(even(List[i])==0)
			sum+=List[i];
	return sum;
}

6-3 使用函数求最大公约数 (10分)

本题要求实现一个计算两个数的最大公约数的简单函数。

函数接口定义:
int gcd( int x, int y );
其中x和y是两个正整数,函数gcd应返回这两个数的最大公约数。

裁判测试程序样例:
#include <stdio.h>

int gcd( int x, int y );

int main()
{
int x, y;

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

return 0;

}

/* 你的代码将被嵌在这里 */
输入样例:
32 72
输出样例:
8

int gcd( int x, int y )
{
	int n,m,s;
	m=(x>y)?x:y;
	n=(x>y)?y:x;
	while(n)
	{
		s=m%n;
		m=n;
		n=s;
	}
	return m;
}

6-4 递归实现指数函数 (15分)

本题要求实现一个计算x
​n
​​ (n≥1)的函数。

函数接口定义:
double calc_pow( double x, int n );
函数calc_pow应返回x的n次幂的值。建议用递归实现。题目保证结果在双精度范围内。

裁判测试程序样例:
#include <stdio.h>

double calc_pow( double x, int n );

int main()
{
double x;
int n;

scanf("%lf %d", &x, &n);
printf("%.0f\n", calc_pow(x, n));

return 0;

}

/* 你的代码将被嵌在这里 */
输入样例:
2 3
输出样例:
8

double calc_pow( double x, int n )
{
	double p=1;
	while(n)
	{
		p*=x;
		n--;
	}
	return p;
}

6-5 数字金字塔 (15分)

本题要求实现函数输出n行数字金字塔。

函数接口定义:
void pyramid( int n );
其中n是用户传入的参数,为[1, 9]的正整数。要求函数按照如样例所示的格式打印出n行数字金字塔。注

意每个数字后面跟一个空格。

裁判测试程序样例:
#include <stdio.h>

void pyramid( int n );

int main()
{
int n;

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

return 0;

}

/* 你的代码将被嵌在这里 */
输入样例:
5
输出样例:
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5

void pyramid( int n )
{
	int i,j;
	for(i=1;i<=n;i++)
	{
		for(j=0;j<n-i;j++)
			printf(" ");
		for(j=1;j<=i;j++)
			printf("%d ",i);
		printf("\n");
	}
}

7-1 函数的嵌套调用 (10分)

求三个数中最大数与最小数的和。要求:编写三个函数;一个函数实现求3个数中最大数;另一个函数实现求3个数中最小数;第3个函数调用前两个函数,实现求最大数与最小数的和。

输入格式:
给3个变量赋值。

输出格式:
输出最大数与最小数的和。按格式“Max+Min=”的格式输出。

输入样例:
1 -24 20
输出样例:
Max+Min=-4

#include<stdio.h>
void add(int x,int y);
int Max(int x,int y,int z); 
int Min(int x,int y,int z);
int main(void)
{
	int x,y,z;
	scanf("%d %d %d",&x,&y,&z);
	add(Max(x,y,z),Min(x,y,z));
	
}
int Max(int x,int y,int z)
{
	return (x>y)?(x>z?x:z):(y>z?y:z);
}
int Min(int x,int y,int z)
{
	return (x<y)?(x<z?x:z):(y<z?y:z);
}
void add(int x,int y)
{
	printf("Max+Min=%d",x+y);
}
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值