求解答
3、(基础题)函数指针的应用:sin(x)、cos(x)、tan(x)都是三角函数,形参、函数返回结果都是double类型,它们的声明、定义已包含在math.h中。请编写编程实现如下功能:根据输入的整数(1、2、3)分别调用sin(x)、cos(x)、tan(x),x的值也需要输入,请补充程序所缺代码:#include <stdio.h>
#include <math.h>
int main()
{
int n;
double x;
printf("请输入整数1,2,3(分别调用sin(x)、cos(x)、tan(x)):");
scanf("%d",&n);
printf("请输入x的值:");
scanf("%lf",&x);
(1) //定义指向函数的指针变量;
void fun(double (*p)(double z),double x, int n) ;//函数声明
(2) //调用fun()函数
return 0;
}
//函数功能: 根据n的值(1,2,3)分别调用sin(x)、cos(x)、tan(x),并输出结果;n为其它值时,提示“输入的数据有误,不能调用任何函数!”
void fun(double (*p)(double z),double x, int n)
{
//函数的实现代码
} #include <stdio.h>
#include <math.h>
int main() {
int n;
double x;
printf("请输入整数 1, 2, 3 (分别调用sin(x)、cos(x)、tan(x)):");
scanf("%d", &n);
printf("请输入 x 的值:");
scanf("%lf", &x);
double(*a)(double) = sin;
double(*b)(double) = cos;
double(*c)(double) = tan;
double(*p)(double) = NULL;
void fun(double (*p)(double z), double x, int n); // 函数声明
switch (n)
{
case 1:
fun(a, x, n);
break;
case 2:
fun(b, x, n);
break;
case 3:
fun(c, x, n);
break;
default:
fun(p, x, n);
break;
}
return 0;
}
void fun(double(*p)(double), double x, int n) {
if (n < 1 || n > 3) {
printf("输入的数据有误,不能调用任何函数!");
return;
}
printf("%lf", p(x));
} 傻眼貓咪 发表于 2022-3-27 15:12
#include <stdio.h>
#include <math.h>
int main()
{
int n;
double x;
printf("请输入整数1,2,3(分别调用sin(x)、cos(x)、tan(x)):");
scanf("%d", &n);
printf("请输入x的值:");
scanf("%lf", &x);
double(*p)(double) = NULL;//定义指向函数的指针变量;
void fun(double (*p)(double z), double x, int n);//函数声明
fun(p,x,n); //调用fun()函数
return 0;
}
//函数功能: 根据n的值(1,2,3)分别调用sin(x)、cos(x)、tan(x),并输出结果;n为其它值时,提示“输入的数据有误,不能调用任何函数!”
void fun(double (*p)(double z), double x, int n)
{
double y;
char* format;
if (n == 1)
{
p = sin;
format = "sin(%.2f)=%f\n\n";
}
else if (n == 2)
{
p = cos;
format = "cos(%.2f)=%f\n\n";
}
else if (n == 3)
{
p = tan;
format = "tan(%.2f)=%f\n\n";
}
if ((n == 1) || (n == 2) || (n == 3))
{
y = (*p)(x);
printf("%s,%f,%f",format, x, y);
}
else
printf("输入数据有误,不能调用任何函数!\n");
}
我这个哪里错了,该怎么修改? kjdskaf 发表于 2022-3-27 15:32
#include
#include
int main()
#include <stdio.h>
#include <math.h>
int main()
{
int n;
double x;
printf("请输入整数1,2,3(分别调用sin(x)、cos(x)、tan(x)):");
scanf("%d", &n);
printf("请输入x的值:");
scanf("%lf", &x);
double(*p)(double) = NULL;//定义指向函数的指针变量;
void fun(double (*p)(double z), double x, int n);//函数声明
fun(p, x, n); //调用fun()函数
return 0;
}
//函数功能: 根据n的值(1,2,3)分别调用sin(x)、cos(x)、tan(x),并输出结果;n为其它值时,提示“输入的数据有误,不能调用任何函数!”
void fun(double (*p)(double z), double x, int n)
{
double y;
char* format;
if (n == 1)
{
p = sin;
format = "sin(%.2f)=%f\n\n";
}
else if (n == 2)
{
p = cos;
format = "cos(%.2f)=%f\n\n";
}
else if (n == 3)
{
p = tan;
format = "tan(%.2f)=%f\n\n";
}
if ((n == 1) || (n == 2) || (n == 3))
{
y = (*p)(x);
printf(format, x, y); // <------------- 改这里 -------------
}
else
printf("输入数据有误,不能调用任何函数!\n");
} 傻眼貓咪 发表于 2022-3-27 16:26
不行啊,显示了,第40行
使用了可能未初始化的本地指针变量“format”
kjdskaf 发表于 2022-3-27 18:10
不行啊,显示了,第40行
使用了可能未初始化的本地指针变量“format”
我测试没有问题,如果真的不行,就不要这样写了,一行一行打印吧:#include <stdio.h>
#include <math.h>
int main()
{
int n;
double x;
printf("请输入整数1,2,3(分别调用sin(x)、cos(x)、tan(x)):");
scanf("%d", &n);
printf("请输入x的值:");
scanf("%lf", &x);
double(*p)(double) = NULL;//定义指向函数的指针变量;
void fun(double (*p)(double z), double x, int n);//函数声明
fun(p, x, n); //调用fun()函数
return 0;
}
//函数功能: 根据n的值(1,2,3)分别调用sin(x)、cos(x)、tan(x),并输出结果;n为其它值时,提示“输入的数据有误,不能调用任何函数!”
void fun(double (*p)(double z), double x, int n)
{
double y;
if (n == 1)
{
p = sin;
y = (*p)(x);
printf("sin(%.2f)=%f\n\n", x, y);
}
else if (n == 2)
{
p = cos;
y = (*p)(x);
printf("cos(%.2f)=%f\n\n", x, y);
}
else if (n == 3)
{
p = tan;
y = (*p)(x);
printf("tan(%.2f)=%f\n\n", x, y);
}
if ((n == 1) || (n == 2) || (n == 3))
{
;
}
else
printf("输入数据有误,不能调用任何函数!\n");
}
页:
[1]