本文结合PTA专项练习带领读者掌握函数,刷题为主注释为辅,在代码中理解思路,其它不做过多叙述。
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; }