栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

课外拓展1.模拟计算器的三种方法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

课外拓展1.模拟计算器的三种方法

目录

一,第一种方法(暴力方法)

二,第二种方法(函数指针数组)

三,第三种方法(回调函数)


一,第一种方法(暴力方法)

switch结构

#define _CRT_SECURE_NO_WARNINGS 1
#include
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=%dn", ret);
			break;
		case 2:
			printf("请输入2个操作数:>");
			scanf("%d%d", &x, &y);

			ret = Sub(x, y);

			printf("ret=%dn", ret);
			break;
		case 3:
			printf("请输入2个操作数:>");
			scanf("%d%d", &x, &y);

			ret = Mul(x, y);

			printf("ret=%dn", ret);
			break;
		case 4:
			printf("请输入2个操作数:>");
			scanf("%d%d", &x, &y);

			ret = Div(x, y);

			printf("ret=%dn", ret);
			break;
		//如果输入为0,程序结束,直接跳出
		case 0:printf("程序结束");
			break;
		//如果输入的是其他数,给用户继续选择的机会。
		default:printf("选择错误,请重新选择");
			break;
		}
	} while (input);

	return 0;
}

上面都有解释,可以多看看。

二,第二种方法(函数指针数组)

#define _CRT_SECURE_NO_WARNINGS 1
#include
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 =%dn", ret);
		}
		else if (input == 0)
			printf("程序结束。");

		else
			printf("选择错误,请重新选择n");
	
	} while (input);


	return 0;
}


三,第三种方法(回调函数)

#define _CRT_SECURE_NO_WARNINGS 1
#include
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=%dn",Calc(Add));
		case 2:
			printf("ret =%dn",Calc(Sub));
		case 3:
			printf("ret=%dn", Calc(Mul));
		case 4:
			printf("ret=%dn", Calc(Div));
		case 0:
			printf("退出程序");
		default:
			printf("请重新选择:");
		}

	} while (input);
		

	return 0;
}

上述就是模拟计算器的三种方法,静待各位大佬斧正和指教!!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/630676.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号