简单计算器的实现

本文介绍了C语言中基本的控制结构如while循环和switch语句,然后深入探讨了函数指针的概念,包括如何使用回调函数以及函数指针数组的应用,通过实例展示了如何通过函数指针进行灵活的函数调用。
摘要由CSDN通过智能技术生成

由简单到进阶,涉及while循环,switch语句,函数指针,函数指针数组,回调函数

一般实现(while循环,switch语句)

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

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 menu()
{
	printf("***************************\n");
	printf("*******1.add  2.sub********\n");
	printf("*******3.mul  4.div********\n");
	printf("*******0.exit**************\n");
	printf("请选择:");
}

int main()
{
	int input = 0;
	int x = 0;
	int y = 0;
	do
	{
		menu();
		scanf("%d", &input);

		switch (input)
		{
		case 1:
		{
			printf("请输入两个整数:");
			scanf("%d%d", &x, &y);
			int result = add(x, y);
			printf("result = %d\n", result);
			break;
		}
		case 2:
		{
			printf("请输入两个整数:");
			scanf("%d%d", &x, &y);
			int result = sub(x, y);
			printf("result = %d\n", result);
			break;
		}
		case 3:
		{
			printf("请输入两个整数:");
			scanf("%d%d", &x, &y);
			int result = mul(x, y);
			printf("result = %d\n", result);
			break;
		}
		case 4:
		{
			printf("请输入两个整数:");
			scanf("%d%d", &x, &y);
			int result = div(x, y);
			printf("result = %d\n", result);
			break;
		}
		case 0:
		{
			printf("退出计算器\n");
		}
		default :
		{
			printf("选择错误,请重新选择\n");
		}
		}
	} while (input);
	return 0;
}

回调函数实现(函数指针)

我们首先来了解一下什么是回调函数函数指针

回调函数:回调函数(Callback Function)是一种通过函数指针调用的函数,其中函数的指针(地址)被作为参数传递给另一个函数。当这个指针被用来调用其所指向的函数时,即称为回调函数。

函数指针:指向函数的指针。函数指针的声明:返回类型(*函数指针名)(参数列表)。eg:

int (*p)(int,int);

函数指针的两种主要用途:

1.调用函数:通过函数指针,可以间接地调用函数,这种方式在某些情况下比直接调用函数更加灵活和方便。
2.作为函数的参数:函数指针可以作为另一个函数的参数,以实现回调函数等功能。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

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 menu()
{
	printf("***************************\n");
	printf("*******1.add  2.sub********\n");
	printf("*******3.mul  4.div********\n");
	printf("*******0.exit**************\n");
	printf("请选择:");
}

int cal(int(*pf)(int, int))
{
	int x = 0;
	int y = 0;
	printf("请输入两个整数:");
	scanf("%d%d", &x, &y);
	int result = pf(x, y);
	printf("result = %d\n", result);
}

int main()
{
	int input = 0;
	do
	{
		menu();
		scanf("%d", &input);

		switch (input)
		{
		case 1:
		{
			cal(add);
			break;
		}
		case 2:
		{
			cal(sub);
			break;
		}
		case 3:
		{
			cal(mul);
			break;
		}
		case 4:
		{
			cal(div);
			break;
		}
		case 0:
		{
			printf("退出计算器\n");
		}
		default:
		{
			printf("选择错误,请重新选择\n");
		}
		}
	} while (input);
	return 0;
}

函数指针数组实现

函数指针数组:是存放函数指针的数组,每个元素都是一个指向函数的指针。函数指针数组可以用于存储多个函数的地址,并通过索引来调用这些函数。它的一般声明形式为:返回类型(*函数名[数组大小])(参数列表)。eg:

int (*p[3])(int,int);
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

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 menu()
{
	printf("***************************\n");
	printf("*******1.add  2.sub********\n");
	printf("*******3.mul  4.div********\n");
	printf("*******0.exit**************\n");
	printf("请选择:");
}

int main()
{
	int input = 0;

	do
	{
		menu();
		scanf("%d", &input);
		int(*op[5])(int, int) = { 0,add,sub,mul,div };
		if (input >= 1 && input <= 4)
		{
			int x = 0;
			int y = 0;
			printf("请输入两个整数:");
			scanf("%d%d", &x, &y);
			int result = op[input](x, y);
			printf("result = %d\n", result);
		}
		else if (input == 0)
		{
			printf("退出计算器\n");
		}
		else
		{
			printf("选择错误,请重新选择\n");
		}
	} while (input);
	return 0;
}


		

有错误的地方,希望大家可以指正。

欢迎一起学习交流。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值