编写一个transform()函数,它接受4个参数:包含double类型数据的源数组名,double类型的目标数组名,表示数组元素个数的int变量以及一个函数名(或者等价的指向函数的指针)。transform()函数把指定的函数作用于源数组的每个元素,并将返回值放到目标数组中。
例如: transform(source, target, 100, sin);
这个函数调用sin(source[0])赋给target[0],等等。共有100个元素。在一个程序中测试该函数,调用4次transform(),分别使用math.h函数库中的两个函数以及自己设计的两个适合的函数作为参数。
/*
编写一个transform()函数,它接受4个参数:包含
double类型数据的源数组名,double类型的目标数组名,
表示数组元素个数的int变量以及一个函数名(或者等价
的指向函数的指针)。transform()函数把指定的函数作
用于源数组的每个元素,并将返回值放到目标数组中。
例如:
transform(source, target, 100, sin);
这个函数调用sin(source[0])赋给target[0],等等。共有
100个元素。在一个程序中测试该函数,调用4次
transform(),分别使用math.h函数库中的两个函数以及
自己设计的两个适合的函数作为参数。
*/
#include<stdio.h>
#include<math.h>
#define PI 3.1415926
void transform1(int n,double source[],double target[],double funsin());
void transform2(int n,double source[],double target[],double funcos());
int main(void){
int choose,n;
printf("请输入操作次数:");
scanf("%d",&n);
printf("输入这%d个操作数(单位度):",n);
double source[n] ,target[n] ;
for(int i = 0;i < n;i++){
scanf("%lf",&source[i]);
}
printf("请选择操作1.sin() 2.cos():");
re: scanf("%d",&choose);
switch(choose){
case 1:
transform1(n,source,target,sin);
for(int i =0;i < n;i++)
printf("target[%d] = sin(%.2lf) = %.2lf\n",i,source[i],target[i]);
break;
case 2:
transform2(n,source,target,cos);
for(int i =0;i < n;i++)
printf("target[%d] = cos(%.2lf) = %.2lf\n",i,source[i],target[i]);
break;
default:
printf("输入有误,重新输入:");goto re ;
}
return 0;
}
void transform1(int n,double source[],double target[],double funsin()){
for(int i = 0; i < n;i++){
target[i] = sin(source[i]*PI/180);
}
}
void transform2(int n,double source[],double target[],double funcos()){
for(int i = 0; i < n;i++){
target[i] = cos(source[i]*PI/180);
}
}