C语言运用回调函数实现计算器

本文实例为大家分享了C语言运用回调函数实现计算器的具体代码,供大家参考,具体内容如下

回调函数概念:

回调函数是一个通过函数指针调用的函数,也就是将函数的地址作为参数传递给另一个函数,当这个指针回来调用其指向的函数时,称为回调函数。

本次制作计算器的功能:

1.add —— 加法

2.sub —— 减法

3.mul —— 乘法

4.div —— 除法

0.exit —— 退出

具体来通过代码讲解:

(1)首先写一个菜单函数,在运行程序时打印菜单

void menu()
{
 printf("*************************\n");
 printf("*******   1.add   *******\n");
 printf("*******   2.sub   *******\n");
 printf("*******   3.mul   *******\n");
 printf("*******   4.div   *******\n");
 printf("*******   0.exit  *******\n");
 printf("*************************\n");
}

(2)写好四个关于加、减、乘、除操作的函数

int Add(int x, int y)
{
 return x + y;
}
int Sub(int x, int y)
{
 return x - y;
}
int Mul(int x, int y)
{
 return x * y;
}
int Div(int x, int y)
{
 return x / y;
}

(3)写主函数,定义input是你要输入的数,用来选择计算器的功能;然后使用do while循环,内嵌菜单函数。

int main()
{
 int input = 0;
 do
 {
  menu();
  printf("请选择你要进行的操作:\n");
  scanf("%d",&input);
 } while (input);
 return 0;
}

(4)用switch语句定义每个数字相对应的功能;default代表其他选项;Calc函数是我们接下来要写的回调函数。

int main()
{
 int input = 0;
 do
 {
  menu();
  printf("请选择你要进行的操作:\n");
  scanf("%d",&input);
  switch (input)
  {
  case 1:
   Calc(Add);
   break;
  case 2:
   Calc(Sub);
   break;
  case 3:
   Calc(Mul);
   break;
  case 4:
   Calc(Div);
   break;
  case 0:
   printf("退出计算器\n");
   break;
  default:
   printf("选择错误,请重新选择!\n");
   break;
  }
 } while (input);
 return 0;
}

(5)定义Calc函数,用一个函数指针作为参数接收(Add、Sub、Mul、Div)函数的地址;pf作为函数指针直接指向相应函数;然后输出结果;(这个回调函数csdn似乎识别不了,编译器是可以的,所以就以注释的形式写了,后面也是一样)。

void Calc()  //括号内容:int(*pf)(int, int)
{
 int x = 0;
 int y = 0;
 int ret = 0;
 printf("请输入2个操作数:\n");
 scanf("%d %d",&x,&y);
 ret = pf(x,y);
 printf("%d\n",ret);
}

最后送上全部的代码小小总计一下:

#include <stdio.h>

void menu()
{
 printf("*************************\n");
 printf("*******   1.add   *******\n");
 printf("*******   2.sub   *******\n");
 printf("*******   3.mul   *******\n");
 printf("*******   4.div   *******\n");
 printf("*******   0.exit  *******\n");
 printf("*************************\n");
}

int Add(int x, int y)
{
 return x + y;
}
int Sub(int x, int y)
{
 return x - y;
}
int Mul(int x, int y)
{
 return x * y;
}
int Div(int x, int y)
{
 return x / y;
}

void Calc()  //括号内容:int(*pf)(int, int)
{
 int x = 0;
 int y = 0;
 int ret = 0;
 printf("请输入2个操作数:\n");
 scanf("%d %d",&x,&y);
 ret = pf(x, y);
 printf("%d\n", ret);
}

int main()
{
 int input = 0;
 do
 {
  menu();
  printf("请选择你要进行的操作:\n");
  scanf("%d",&input);
  switch (input)
  {
  case 1:
   Calc(Add);
   break;
  case 2:
   Calc(Sub);
   break;
  case 3:
   Calc(Mul);
   break;
  case 4:
   Calc(Div);
   break;
  case 0:
   printf("退出计算器\n");
   break;
  default:
   printf("选择错误,请重新选择!\n");
   break;
  }
 } while (input);
 return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言MFC基础之计算器详解

    目录 基于MFC计算器(基础点) 需求:把计算器运算的过程呈现出来. 基础点 总结 基于MFC计算器(基础点) 主要是在实现MFC计算器的过程中碰到的一些问题,和补充的一些知识. 需求:把计算器运算的过程呈现出来. 想法:利用两个队列,一个存储输入的字符串(表达式),一个存放结果. 分别命名为queue1,和myqueue,让字符串从左到右依次入队列. 但之后按照自己的思路去推演,发现如果进入队列的是1+23,如果下一个字符入队的是"+",那么先计算23的结果入队myqueue中,而q

  • C语言实现简单计算器程序

    这两天在看一个C语言写的计算器程序,做了不少的功夫,跟着作者一步步的进行完善,了解了许多细节性的东西,在此自己做个总结,加深自己对程序的印象,也算是梳理. 在该计算器程序,能进行加减乘除.sin.cos.exp等操作,同时能进行数值保存功能.而该计算器使用逆波兰表示法.即所有运算符都跟在操作数的后面,比如下列表达式: (1 - 2) * (4 + 5)采用逆波兰表示法表示为:1 2 - 4 5 + * 逆波兰表达法中不需要圆括号,只要知道每个运算符需要几个操作数就不会引起歧义. 计算器程序实现很

  • C语言数据结构之简易计算器

    本文实例为大家分享了C语言简易计算器的具体代码,供大家参考,具体内容如下 主要解决了处理负数.小数等的基础运算操作,无图形界面 #include <iostream> #include <stack> using namespace std; class Calculator{ private: int Priority(char fuhao); double CalSuffix(string PostfixExp); public: double Calculate(string

  • C语言结课设计之计算器功能

    本文实例为大家分享了C语言实现计算器的具体代码,供大家参考,具体内容如下 /*===============================================*\ ** 设计目的:简单计算器,计算形如10*(20.2-30.6)+5.0/2的表达式值 ** 简要原理:中缀式转逆波兰式(后缀式) ** IDE:Dev-Cpp 4.9.9.2 ** 注意事项:括号必须是英文状态的 ** 时间: 2014-6-17 \*==================================

  • C语言实现简单计算器功能(1)

    本文为大家分享了C语言实现简单计算器功能的具体方法,供大家参考,具体内容如下 这几天一直上控制语句,在学完if.switch和循环语句后,为了巩固所学知识点,想给学生出一道简单的计算器程序.题目如下: 通过所学的知识(选择语句.循环语句)完成一个简单的计算器编程,要求不许抄袭,只能用自己所学的知识点,不可引用网上自己的不懂的程序. 要求的格式如下图: 要求以这样的一种格式进行输出,并能通过选择完成不同的功能. 如:选择1,完成整数相加功能,算完后又能回到该页面. 经过分析,我简单的写了一段代码,

  • C语言实现简单计算器功能(2)

    本文接着上一篇C语言实现简单计算器功能(1)继续学习. 之前用switch语句完成了一个简单计算器的功能,下面我给大家用if语句和while循环语句再实现一个简单计算器的编程. 要求: 实现简单的计算器,具体代码如下: #include <stdio.h> // 头文件 void main() { char a = 0; // 变量声明并初始化 int x, y; // 变量声明 int result = 0; char b = 37; while(1) // whiel循环实现反复在计算器系

  • C语言运用函数指针数组实现计算器功能

    本文实例为大家分享了C语言运用函数指针数组制作计算器的具体代码,供大家参考,具体内容如下 先来回顾一下概念: 指针数组 -- 存放指针的数组 函数指针 -- 存放函数地址的指针 函数指针数组 -- 存放函数指针的数组 接下来说说这次要制作的计算器的功能: 1.add -- 加法 2.sub -- 减法 3.mul -- 乘法 4.div -- 除法 0.exit -- 退出 具体来通过代码讲解: (1)首先写一个菜单程序,在运行程序时首先打印一次菜单. void menu() { printf(

  • C语言实现简单计算器

    本文实例为大家分享了C语言实现简单计算器的具体代码,供大家参考,具体内容如下 实现效果如图: 实现代码如下: #include<stdio.h> #include<windows.h>//gotoxy #include<conio.h> #define width 80 #define height 30 void gotoxy(int x, int y); void GreateFrame() { int i = 0; for (i = 0 ; i < widt

  • C语言实现简单的计算器

    本文实例为大家分享了C语言实现简单计算器的具体代码,供大家参考,具体内容如下 描述:简单的实现四则运算 1.switch法 #include<stdio.h> void menu()//菜单函数 { printf("************************************\n"); printf("***** 1.add 2.sub *****\n"); printf("***** 3.mul 4.div *****\n&quo

  • C语言运用回调函数实现计算器

    本文实例为大家分享了C语言运用回调函数实现计算器的具体代码,供大家参考,具体内容如下 回调函数概念: 回调函数是一个通过函数指针调用的函数,也就是将函数的地址作为参数传递给另一个函数,当这个指针回来调用其指向的函数时,称为回调函数. 本次制作计算器的功能: 1.add -- 加法 2.sub -- 减法 3.mul -- 乘法 4.div -- 除法 0.exit -- 退出 具体来通过代码讲解: (1)首先写一个菜单函数,在运行程序时打印菜单 void menu() { printf("***

  • 关于c语言中回调函数的理解

    前言 在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序. 这段话不是那么好理解,不同语言实现回调的方式有些许不同.其实可以这样理解,回调就是在一个函数中调用另外一个函数. 在c语言中,回调是使用函数指针来实现的. 函数指针--顾名思义,是指向一个函数的指针.通常函数指针有两个方面的用途,一个是转换表(jump table),另一个是作为参数传递给一个函数. 下面是两个函数指针的声明 int(*f)(i

  • c语言中回调函数的使用以及实际作用详析

    目录 前言 一.通过这节课程你能掌握以下知识: 二.程序架构的核心理念和需求 三.回调函数的作用 1.输出型 2.输入型 四.掌握回调函数的程序编写 总结 前言 今天给大家讲一下芯片/模块厂家写SDK必须会使用的一种技术:回调函数. 回调函数这个知识点其实并不是很难,难是难在网上很多讲解回调函数的都说的太学术化了化了,一点也不亲民. 很多人即使知道怎么写回调函数也根本就搞不懂它们在实际产品中也有什么用,什么时候用. 所以这节课呢我们会以程序架构的需求为出发点,讲解回调函数是怎么满足它这个需求的.

  • C语言中回调函数的使用详情

    目录 1.程序架构 2.回调函数的作用 3.掌握回调函数的程序编写 4.回调函数在产品中的应用 下文将学习到; 程序架构的核心理念和需求 掌握回调函数的作用 掌握回调函数的程序编写 掌握回调函数在产品中的应用 1.程序架构 一个好的程序架构至少要达到以下要求: 硬件层和应用层的程序代码分开,相互之间的控制和通讯使用接口,而且不会共享的全局变量或者数组. 用专业术语描述就是可移植性.可扩展性. 在51单片机写程序时,基本上一个.c文件解决,包括寄存器配置,产品功能.到了stm32时,我们会把不同的

  • C语言中回调函数的含义与使用场景详解(2)

    目录 详解C语言中回调函数的含义与使用场景(2) 使用场景一(重定义): 使用场景二(扩展函数功能): 使用场景三(分层): 总结 详解C语言中回调函数的含义与使用场景(2) 引言:在上一篇文章中介绍了回调函数的概念与使用方法,本节将深入地介绍回调函数典型的使用场景.通过使用回调函数可以实现驱动和应用程序的分离解耦,让程序更加地灵活.也可以借助回调函数实现插入自定义代码.分层设计程序的思想. 使用场景一(重定义): 在统一的接口中,动态地改变一个函数的功能.该函数的功能可以是加载参数.或者执行运

  • C++回调函数实现计算器和qsort

    目录 前言 一.计算器 1.switch语句实现 2.回调函数实现 二.qsort 1.冒泡排序 2.qsort 3.qsort排序浮点数 4.qsort排序字符型 5.qsort排序结构体 6.自定义实现my_qsort 总结 前言 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应

  • C语言中回调函数和qsort函数的用法详解

    目录 回调函数 指向函数指针数组的指针 qsort(qulick sort)-库函数 回调函数 通过函数指针调用的函数,如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数. 回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应. 举例: #include<stdio.h> void menu() { printf("*************************

  • C语言中回调函数的含义与使用场景详解

    目录 举例 动态改变回调函数的实现的方法: 1)编译时直接赋值 2)运行时实现动态注册 3)作为函数参数传递到指定的函数内 总结 举例 在下述程序中函数 test2_cal() 中调用 函数指针 s_cal 指定的函数执行数值的计算.则 s_cal 指定的那些函数就可以看作一个回调函数. typedef int (*my_calculate_t)(int a, int b); static int cal_sum(int a, int b) { printf("now is sum\r\n&qu

  • PHP回调函数概念与用法实例分析

    本文实例讲述了PHP回调函数概念与用法.分享给大家供大家参考,具体如下: 一.回调函数的概念 先看一下C语言里的回调函数:回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应. 其他语言里的回调函数的概念与之相似,只不过各种语言里回调函数的实现机制不一样,通俗的来说,回调函数是一个我们定

  • Java 回调函数详解及使用

    Java 回调函数详解 前言: C语言中回调函数解释: 回调函数(Callback Function)是怎样一种函数呢? 函数是用来被调用的,我们调用函数的方法有两种: 直接调用:在函数A的函数体里通过书写函数B的函数名来调用之,使内存中对应函数B的代码得以执行.这里,A称为"主叫函数"(Caller),B称为"被叫函数"(Callee). 间接调用:在函数A的函数体里并不出现函数B的函数名,而是使用指向函数B的函数指针p来使内存中属于函数B的代码片断得以执行--听

随机推荐