鱼C论坛

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

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

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

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

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

x
S1E30课后作业第2题
题目:2. 请编写一个程序,要求用户输入两个数,分别计算它们加减乘除的结果。

请确保你的代码符合下面要求:
加减乘除分别由四个函数实现:add、sub、mul 和 divi
定义一个函数指针数组指向上面四个函数
只能通过函数指针的形式访问上面四个函数
需要支持浮点数,注意除数不能为 0
麻烦指点下下面编译通过的代码,问题出在哪里?

  1. #include <stdio.h>

  2. double plus(double a, double b);
  3. double minus(double a, double b);
  4. double product(double a, double b);
  5. double devide(double a, double b);

  6. double plus(double a, double b)
  7. {
  8.         return (a+b);
  9. }

  10. double minus(double a, double b)
  11. {
  12.         return (a-b);
  13. }

  14. double product(double a, double b)
  15. {
  16.         return (a*b);
  17. }

  18. double divide(double a, double b)
  19. {
  20.         return (a/b);
  21. }

  22. double (*p)(double, double);

  23. double main()
  24. {
  25.         double a,b;
  26.         char sig;
  27.         printf("请输入两个数:");
  28.         scanf("%lf%c%lf",&a,sig,&b);
  29.         switch(sig)
  30.         {
  31.                 case'+':p=plus;
  32.                 case'-':p=minus;
  33.                 case'*':p=product;
  34.                 case'/':p=divide;
  35.         }
  36.         if(sig=='/'&&b==0)
  37.         {
  38.           printf("Error,除数不能为0");
  39.         }
  40.         else
  41.         {
  42.           printf("结果=%lf",p(a,b));        
  43.         }
  44.         return 0;
  45. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-5-13 19:22:02 | 显示全部楼层
你为什么说这个代码有问题?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-13 19:23:15 | 显示全部楼层
double main,可以的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

就算我改成int main(),运行还是不对。
我输入5+3,没有任何输出结果
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

没有运行结果。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-13 21:52:24 | 显示全部楼层
weijun_zhang 发表于 2021-5-13 21:50
就算我改成int main(),运行还是不对。
我输入5+3,没有任何输出结果
  1. scanf("%lf%c%lf",&a,sig,&b);
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-14 11:30:42 | 显示全部楼层
不会,插眼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-16 01:10:48 | 显示全部楼层
你调用了函数吗  也没用函数指针数组呀
  1. #define&#160;_CRT_SECURE_NO_WARNINGS&#160;1

  2. #include<stdio.h>

  3. #include<windows.h>

  4. int&#160;add(int&#160;a, int&#160;b)

  5. {
  6. return&#160;a&#160;+ b;

  7. }

  8. int&#160;sub(int&#160;a, int&#160;b)

  9. {
  10. return&#160;a&#160;- b;

  11. }

  12. int&#160;mul(int&#160;a, int&#160;b)

  13. {
  14. return&#160;a&#160;* b;

  15. }

  16. int&#160;divi(int&#160;a, int&#160;b)

  17. {
  18. return&#160;a&#160;/ b;

  19. }

  20. void&#160;menu()

  21. {
  22. printf("---------------------------------\n");

  23. printf("------1.add &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;2.sub------\n ");

  24. printf("------3.mul &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;4.div------\n ");

  25. printf("---------------------------------\n");

  26. printf("请选择:");

  27. }

  28. int&#160;main()

  29. {
  30. int&#160;x = 0;

  31. int&#160;y = 0;

  32. int&#160;input = 1;

  33. int&#160;ret = 0;

  34. char&#160;a[5] = { '0', '+', '-', '*', '/'&#160;};

  35. int(*p[5])(int&#160;x, int&#160;y) = { 0, add, sub, mul, divi };&#160;&#160;//定义一个函数指针数组存放函数地址

  36. while&#160;(input)

  37. {
  38. menu();

  39. scanf("%d", &input);

  40. if&#160;(input == 0)break;

  41. if&#160;(input > 0 && input < 5)

  42. {
  43. printf("请输入操作数:");

  44. scanf("%d %d", &x, &y);

  45. ret = (*p[input])(x, y);

  46. &#160;

  47. }

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

  50. }

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

  52. }

  53. system("pause");

  54. return&#160;0;

  55. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-21 20:23:02 | 显示全部楼层
scanf("%lf%c%lf",&a,sig,&b);//sig前面取地址
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-7 15:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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