沈阳师范大学大一上册C语言PTA题目集以及答案(第五章 函数 函数题篇)

6-1 求出二维数组的最大元素及其所在的坐标 (10分)
编写一个函数fun,函数的功能是:求出N×M整型数组的最大元素及其所在的行坐标及列坐标(如果最大元素不唯一,选择位置在最前面的一个)。

函数接口定义:
int fun(int array[N][M]);
其中 a 是用户传入的参数。 函数须返回 N×M整型数组的最大元素,其所在的行坐标及列坐标放在全局变量Row和Col中。

裁判测试程序样例:
#include <stdio.h>
#define N 4
#define M 3
int Row,Col;
int fun(int array[N][M]);
int main()
{
int a[N][M],i,j,max,row,col;
for(i=0;i<N;i++)
for(j=0;j<M;j++)
scanf("%d",&a[i][j]);
for(i=0;i<N;i++)
{ for(j=0;j<M;j++)
printf("%5d",a[i][j]);
printf("\n");
}
max=fun(a);
printf(“max=%d,row=%d,col=%d”,max,Row,Col);
return 0;
}

/* 请在这里填写答案 */
输入样例:
5 8 4
4 5 11
1 2 3
7 4 1
输出样例:
5 8 4
4 5 11
1 2 3
7 4 1
max=11,row=1,col=2

int fun(int array[N][M])
{
	int i,j,k;
	Row=0;Col=0;
	k=array[0][0];
	for(i=0;i<N;i++)
			for(j=0;j<M;j++)
			{
				{if(k<array[i][j])
				{
					k=array[i][j];
					Row=i;Col=j;
				}
				}
			}
	return k;
}

6-2 数据排序 (10分)
输入n(<10)个整数,用任一排序算法按从小到大排序后输出。

函数接口定义:
在这里描述函数接口。例如:
void fun(int a[], int n);
裁判测试程序样例:
在这里给出函数被调用进行测试的例子。例如:
#include <stdio.h>

void fun(int a[], int n);

int main()
{int i,a[10],n;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
fun(a,n);
for(i=0;i<n;i++)
printf("%3d",a[i]);
printf("\n");
return 0;
}

/* 请在这里填写答案 */
输入格式:先输入n值,再输入要排序的n个数据。

输入样例:
6
3 5 4 6 2 1
输出样例:
1 2 3 4 5 6

void  fun(int a[], int  n)
{
	int i,j,k;
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			if(a[j]>a[i])
			{
				k=a[j];
				a[j]=a[i];
				a[i]=k;
			}
			
			
		}
	}
}

6-3 求平均值并统计小于等于平均值的个数 (10分)
fun函数的功能是:给定n个实数,输出平均值,并统计小于等于平均值的实数个数。

函数接口定义:
int fun(float x[],int n);
函数fun的功能是求实型数组x中n个实数的平均值并输出平均值,函数返回小于等于平均值的实数个数。其中输出的平均值按“ave=%.2f\n”的格式输出

裁判测试程序样例:
#include<stdio.h>
int fun(float x[],int n);
int main()
{float x[]={23.5,45.67,12.1,6.4,58.9,98.4};
printf("%d\n",fun(x,6));
return 0;
}

/* 请在这里填写答案 */
输出样例:
ave=40.83
3

int fun(float x[],int n)
{
	float sum=0,average;
	int i,ge=0;
	for(i=0;i<n;i++)
	{
		sum=sum+x[i];
	}
	average=sum/6.0;
	for(i=0;i<n;i++)
	{
		if(x[i]<average||x[i]==average)
		{
			ge=ge+1;
		}
	}
	printf("ave=%.2f\n",average);
	//printf("%d\n",ge);
	return ge;
}

6-4 函数判断闰年 (10分)
主函数中通过键盘输入年份,调用函数fun判断该年是否为闰年。

函数接口定义:
int fun(int year);
其中 year 是用户传入的参数。 year 的值不超过int的范围。 year是闰年函数须返回 1 ,否则返回0.。

裁判测试程序样例:
#include <stdio.h>
int fun(int year);
int main()
{
int year,np;
scanf("%d",&year);
np=fun(year);
if (!np)
printf(“no\n”,year);
else
printf(“yes\n”,year);
return 0;
}

/* 请在这里填写答案 */
输入样例:
2000
输出样例:
yes
输入样例:
1800
输出样例:
no

int fun(int year)
{int a;
	if(year%400==0)
		a=1;
	else
	{
		if(year%4==0&&year%100!=0)
			a=1;
		else
			a=0;
	}
	if(a==1)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

6-5 杨辉三角形 (10分)
编写函数fun产生如下杨辉三角形,产生的行数由main给出。

函数接口定义:
void fun(int a[N][N],int n);
其中 a 和 n 都是用户传入的参数。 函数须产生 n 行杨辉三角形。

裁判测试程序样例:
#include <stdio.h>
#define N 10
void fun(int a[N][N],int n);
int main()
{
int a[N][N];
int i,j,n;
scanf("%d",&n);
fun(a,n);
for (i=0;i<n;i++)
{ for (j=0; j<=i;j++)
printf("%6d",a[i][j]);
printf("\n");
}
return 0;
}

/* 请在这里填写答案 */
输入样例:
5
输出样例:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

void fun(int a[N][N],int n)
{
	int b,c;
	a[0][0]=1;
	for(b=0;b<n;b++)
	{
		a[b][0]=1;
		for(c=0;c<=b;c++)
		{
			if(c==0)
			a[b][c]=1;
			else if(b>=1&&c>=1&&b!=c)
			a[b][c]=a[b-1][c]+a[b-1][c-1];
			else if(b==c)
			a[b][c]=a[b-1][c-1];
		}
	}
}

-6 歌唱比赛打分 (8分)
某歌唱比赛计分规则是:对于评委给出的分数,去掉一个最高分,去掉一个最低分,剩余分数求算术平均值并保留2位小数,作为选手最终得分。
本题要求实现这样一个计分函数。
评委给出的分数存在数组中,分数均为0100之间的整数,并且保证评委人数在320之间。

函数接口定义:
double getScore(int *score, int total);
其中score和total是传入的参数,score是评委打分数组的首地址,total是评委人数;
函数将选手的得分以double类型返回,注意:函数返回的分数只需保证小数点后至少2位精确数字即可,打印2位小数得分的操作由函数调用者进行。

裁判测试程序样例:
/* 此测试程序仅为示例,实际的测试程序可能不同,不要仅针对样例的输入和输出编写函数,而是要根据题意要求编写函数 */
#include <stdio.h>
double getScore(int score, int total);
int main(){
int score[5] = {92, 90, 99, 95, 98}; /
仅为示例,实际的测试程序中,数组大小和元素数值都可能与样例不同 /
printf("%.2f\n", getScore(score, 5) ); /
getScore( )函数只负责返回分值,由main函数中的代码负责按照2位小数打印输出 /
return 0;
}
/
你所编写的函数代码将被嵌在这里,注意:不要提交你编写的用于测试的main( )函数,否则无法通过编译 */
输入样例:
对于本题给出的裁判测试程序样例,没有输入。实际的裁判程序可能有输入。
输出样例:
对于本题给出的裁判测试程序样例,只有一行输出如下。实际的裁判程序可能有其他输出情况。
95.00

double getScore(int *score, int total)
{
	int i,j,k;
	int max=score[0],min=score[0];
	double sum=0,average=0;
	for(i=0;i<total;i++)
	{
		if(score[i]>max)
		max=score[i];
	}
	for(i=0;i<total;i++)
	{
		if(score[i]<min)
		min=score[i];
	}
	for(i=0;i<total;i++)
	{
		if(score[i]==max)
		{score[i]=0;
        break;}
	}
	for(i=0;i<total;i++)
	{
		if(score[i]==min)
		{score[i]=0;
        break;}
	}
	for(i=0;i<total;i++)
	{
		sum=sum+score[i];
	}
	average=sum/((total-2)*1.0);
	return average;
}

6-7 递归求Fabonacci数列 (10分)
本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:

f(n)=f(n−2)+f(n−1) (n≥2),其中f(0)=0,f(1)=1。

函数接口定义:
int f( int n );
函数f应返回第n个Fabonacci数。题目保证输入输出在长整型范围内。建议用递归实现。

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

int f( int n );

int main()
{
int n;

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

return 0;

}

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

int f( int n )
{
	if(n==0)
	return 0;
	int i,a=1,b=1,c,d=0;
	for(i=1;i<n;++i)
	{
		c=a+b;
		a=b;
		b=c;
		d++;
	}
	return a;
}
  • 14
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值