鱼C论坛

 找回密码
 立即注册
查看: 3086|回复: 8

S1E30课后作业第2题——函数指针

[复制链接]
发表于 2021-5-13 18:05:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-13 19:22:02 | 显示全部楼层
你为什么说这个代码有问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-13 19:23:15 | 显示全部楼层
double main,可以的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-13 21:50:53 | 显示全部楼层
人造人 发表于 2021-5-13 19:23
double main,可以的

就算我改成int main(),运行还是不对。
我输入5+3,没有任何输出结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-13 21:51:41 | 显示全部楼层
人造人 发表于 2021-5-13 19:23
double main,可以的

没有运行结果。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-13 21:52:24 | 显示全部楼层
weijun_zhang 发表于 2021-5-13 21:50
就算我改成int main(),运行还是不对。
我输入5+3,没有任何输出结果
scanf("%lf%c%lf",&a,sig,&b);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-14 11:30:42 | 显示全部楼层
不会,插眼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-16 01:10:48 | 显示全部楼层
你调用了函数吗  也没用函数指针数组呀
#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[5] = { '0', '+', '-', '*', '/' };

int(*p[5])(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[input])(x, y);

 

}

else{
printf("输入错误!\n");

}

printf("%d %c %d = %d\n", x, a[input], y, ret);

}

system("pause");

return 0;

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-21 20:23:02 | 显示全部楼层
scanf("%lf%c%lf",&a,sig,&b);//sig前面取地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-11 05:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表