本文结合PTA专项练习带领读者掌握函数,刷题为主注释为辅,在代码中理解思路,其它不做过多叙述。
目录
- 6-1 输出星期名
- 6-2 三整数最大值
- 6-3 数据排序
- 6-4 多项式求值
6-1 输出星期名
请编写函数,根据星期数输出对应的星期名。
函数原型
void ShowDayWeek(int dow);
说明:参数 dow 为星期数。若 dow 在 0 ~ 6 范围内,则输出“日”、“一”、“二”、…、“六”,否则不输出任何信息。
星期值 星期名
0 日
1 一
2 二
3 三
4 四
5 五
6 六
裁判程序
#include <stdio.h>
void ShowDayWeek(int dow);
int main()
{
int w;
scanf("%d", &w);
ShowDayWeek(w);
putchar('\n');
return 0;
}
/* 你提交的代码将被嵌在这里 */
输入样例1
3
输出样例1
三
输入样例2
9
输出样例2
//switch语句实现即可
void ShowDayWeek(int dow)
{
switch(dow)
{
case 0:
printf("日");
break;
case 1:
printf("一");
break;
case 2:
printf("二");
break;
case 3:
printf("三");
break;
case 4:
printf("四");
break;
case 5:
printf("五");
break;
case 6:
printf("六");
break;
default:
;
}
}
6-2 三整数最大值
请编写函数,求三个整数的最大值。
函数原型
int IntMax3(int x, int y, int z);
说明:参数 x、y 和 z 为三个整数,函数值为三个整数中的最大值。
裁判程序
#include <stdio.h>
int IntMax3(int x, int y, int z);
int main()
{
int a, b, c, d;
scanf("%d%d%d", &a, &b, &c);
d = IntMax3(a, b, c);
printf("%d\n", d);
return 0;
}
/* 你提交的代码将被嵌在这里 */
输入样例
15 36 -27
输出样例
36
//嵌套即可
int IntMax3(int x,int y,int z)
{
int max=(x>y?x:y)>z?(x>y?x:y):z
return max;
}
6-3 数据排序
输入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)
{
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
int t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
6-4 多项式求值
本题要求实现一个函数,计算阶数为n,系数为a[0] … a[n]的多项式f(x)=∑i=0~n(a[i]x^i) 在x点的值。
函数接口定义:
double f( int n, double a[], double x );
其中n是多项式的阶数,a[]中存储系数,x是给定点。函数须返回多项式f(x)的值。
裁判测试程序样例:
#include <stdio.h>
#define MAXN 10
double f( int n, double a[], double x );
int main()
{
int n, i;
double a[MAXN], x;
scanf("%d %lf", &n, &x);
for ( i=0; i<=n; i++ )
scanf("%lf", &a[i]);
printf("%.1f\n", f(n, a, x));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
2 1.1
1 2.5 -38.7
输出样例:
-43.1
double f(int n,double a[],double x)
{
double pow=1,sum=0;
for(int i=0;i<=n;i++)//先计算x的i次方
{
if(i==0)
pow=1;
else
pow*=x;
sum+=a[i]*pow;
}
return sum;
}