本文结合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):zreturn 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 10double 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;elsepow*=x;sum+=a[i]*pow;}return sum;}