S1E30课后作业第2题——函数指针
S1E30课后作业第2题题目:2. 请编写一个程序,要求用户输入两个数,分别计算它们加减乘除的结果。
请确保你的代码符合下面要求:
加减乘除分别由四个函数实现:add、sub、mul 和 divi
定义一个函数指针数组指向上面四个函数
只能通过函数指针的形式访问上面四个函数
需要支持浮点数,注意除数不能为 0
麻烦指点下下面编译通过的代码,问题出在哪里?
#include <stdio.h>
double plus(double a, double b);
double minus(double a, double b);
double product(double a, double b);
double devide(double a, double b);
double plus(double a, double b)
{
return (a+b);
}
double minus(double a, double b)
{
return (a-b);
}
double product(double a, double b)
{
return (a*b);
}
double divide(double a, double b)
{
return (a/b);
}
double (*p)(double, double);
double main()
{
double a,b;
char sig;
printf("请输入两个数:");
scanf("%lf%c%lf",&a,sig,&b);
switch(sig)
{
case'+':p=plus;
case'-':p=minus;
case'*':p=product;
case'/':p=divide;
}
if(sig=='/'&&b==0)
{
printf("Error,除数不能为0");
}
else
{
printf("结果=%lf",p(a,b));
}
return 0;
} 你为什么说这个代码有问题?
double main,可以的 人造人 发表于 2021-5-13 19:23
double main,可以的
就算我改成int main(),运行还是不对。
我输入5+3,没有任何输出结果 人造人 发表于 2021-5-13 19:23
double main,可以的
没有运行结果。。。{:5_104:} weijun_zhang 发表于 2021-5-13 21:50
就算我改成int main(),运行还是不对。
我输入5+3,没有任何输出结果
scanf("%lf%c%lf",&a,sig,&b); 不会,插眼 你调用了函数吗也没用函数指针数组呀
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int mul(int a, int b)
{
return a * b;
}
int divi(int a, int b)
{
return a / b;
}
void menu()
{
printf("---------------------------------\n");
printf("------1.add 2.sub------\n ");
printf("------3.mul 4.div------\n ");
printf("---------------------------------\n");
printf("请选择:");
}
int main()
{
int x = 0;
int y = 0;
int input = 1;
int ret = 0;
char a = { '0', '+', '-', '*', '/' };
int(*p)(int x, int y) = { 0, add, sub, mul, divi }; //定义一个函数指针数组存放函数地址
while (input)
{
menu();
scanf("%d", &input);
if (input == 0)break;
if (input > 0 && input < 5)
{
printf("请输入操作数:");
scanf("%d %d", &x, &y);
ret = (*p)(x, y);
}
else{
printf("输入错误!\n");
}
printf("%d %c %d = %d\n", x, a, y, ret);
}
system("pause");
return 0;
}
scanf("%lf%c%lf",&a,sig,&b);//sig前面取地址
页:
[1]