模拟计算器的三种方法-总结前面所学的案例
目录
一,第一种方法(暴力方法)
switch结构
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void menu(void) {
//提供菜单
printf("************请选择****************\n");
printf("******1.Add*********2.Sub*********\n");
printf("******3.Mul*********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;
}
int main() {
//因为计算器可以反复使用,所以用循环来写
//至于用while还是do-while都是看自己喜好
do {
//在循环中定义变量,每次循环开始时初始化数据,就不会影响后面的运算
int x, y, ret;
x = y = ret = 0;
int input=0;
//输出菜单
menu();
//选择函数来运行程序,达到自己的目的
printf("请选择:>");
scanf("%d",&input);
//因为选项很多,太过复杂。选择用switch结构
switch (input) {
case 1:
printf("请输入2个操作数:>");
scanf("%d%d", &x, &y);
//调用函数
ret = Add(x, y);
printf("ret=%d\n", ret);
break;
case 2:
printf("请输入2个操作数:>");
scanf("%d%d", &x, &y);
ret = Sub(x, y);
printf("ret=%d\n", ret);
break;
case 3:
printf("请输入2个操作数:>");
scanf("%d%d", &x, &y);
ret = Mul(x, y);
printf("ret=%d\n", ret);
break;
case 4:
printf("请输入2个操作数:>");
scanf("%d%d", &x, &y);
ret = Div(x, y);
printf("ret=%d\n", ret);
break;
//如果输入为0,程序结束,直接跳出
case 0:printf("程序结束");
break;
//如果输入的是其他数,给用户继续选择的机会。
default:printf("选择错误,请重新选择");
break;
}
} while (input);
return 0;
}
上面都有解释,可以多看看。
二,第二种方法(函数指针数组)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void menu(void) {
printf("************请选择****************\n");
printf("******1.Add*********2.Sub*********\n");
printf("******3.Mul*********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;
}
int main() {
//这里并没有用switch结构,这里跟第一个程序不同,上一个程序中input定义在了switch外面,所以没啥问题
//但是在这里,函数的主体就只有一个循环,由于我们用的是do-while循环,最后while后面的input是在循环体外面的,
//如果在里面定义input的话,作用域就到不了外面,故,我们把input定义在外面。
int input = 0;
do {
//这里我们采用函数指针数组的方法。
int (*parr[5])(int, int) = { NULL,Add,Sub,Mul,Div };
int x, y, ret;
x = y = ret = 0;
//输出菜单
menu();
//选择方法
printf("请选择:>");
scanf("%d", &input);
if (input >= 1 && input <= 4) {
//初始化数据
printf("请输入2个操作数:");
scanf("%d%d", &x, &y);
//用函数指针的方法,用指针调用函数
ret = (parr[input])(x, y);
printf("ret =%d\n", ret);
}
else if (input == 0)
printf("程序结束。");
else
printf("选择错误,请重新选择\n");
} while (input);
return 0;
}
/*首先我们来分析一下,计算器有五种选择,我们用目前所学的方法来解决这个问题,我这里写了三种办法
第一种方法就是switch结构(变态的循环),第二种我选择函数指针数组的方法,即用数组存放函数的地址
给予用户多种函数,主要是数组的便利性,可以提供多种选择,第三种方法我们对第一种方法进行改良,我们
习惯对重复的操作写成自定义函数。同时我们采取函数指针做参数的方法。返回值为调用完函数后得到的值*/
/*首先我们来分析一下,计算器有五种选择,我们用目前所学的方法来解决这个问题,我这里写了三种办法
第一种方法就是switch结构(变态的循环),第二种我选择函数指针数组的方法,即用数组存放函数的地址
给予用户多种函数,主要是数组的便利性,可以提供多种选择,第三种方法我们对第一种方法进行改良,我们
习惯对重复的操作写成自定义函数。同时我们采取函数指针做参数的方法。返回值为调用完函数后得到的值*/
三,第三种方法(回调函数)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void menu(void) {
printf("************请选择****************\n");
printf("******1.Add*********2.Sub*********\n");
printf("******3.Mul*********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;
}
int Calc(int(*pf)(int, int)) {
int x, y;
x = y = 0;
printf("请输入两个操作数:");
scanf("%d%d",&x,&y);
return pf(x, y);
}
int main() {
int input=0;
menu();
printf("请选择:>");
scanf("%d",&input);
do {
switch (input) {
case 1:
printf("ret=%d\n",Calc(Add));
case 2:
printf("ret =%d\n",Calc(Sub));
case 3:
printf("ret=%d\n", Calc(Mul));
case 4:
printf("ret=%d\n", Calc(Div));
case 0:
printf("退出程序");
default:
printf("请重新选择:");
}
} while (input);
return 0;
}
/*其实这个地方就是一个回调函数的方法,首先,我们要清楚回调函数的作用和定义,回调函数就是在b函数调用a函数,
那么回调函数的作用是什么呢?就是在有多个函数选择时,我们可以另外定义一个函数,这个函数就是就是回调函数了,
回调函数的参数就是一个函数指针,这个指针便可以接收函数了,因为指针并没有指向,所以这个指针可以接收任意一个函数、
这就是回调函数。*/
/*其实这个地方就是一个回调函数的方法,首先,我们要清楚回调函数的作用和定义,回调函数就是在b函数调用a函数,
那么回调函数的作用是什么呢?就是在有多个函数选择时,我们可以另外定义一个函数,这个函数就是就是回调函数了,
回调函数的参数就是一个函数指针,这个指针便可以接收函数了,因为指针并没有指向,所以这个指针可以接收任意一个函数、
这就是回调函数。*/
上述就是模拟计算器的三种方法,静待各位大佬斧正和指教!!!
版权声明:本文为m0_63309778原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。