C语言结课作业之稍微精致的计算机

这篇博客探讨了C语言中函数指针和函数指针数组的概念及其优势。通过对比使用SWITCH语句与函数指针数组实现简单计算机功能的选择,阐述了函数指针数组在减少代码冗余和提高可维护性方面的优越性。示例代码展示了如何使用函数指针数组实现计算功能,包括加、减、乘、除、取余和次方等操作。
摘要由CSDN通过智能技术生成

这篇博客也是为了补充一下,在C语言指针当时的函数指针以及函数指针数组的应用的补充,我会在下面讲述一下函数指针在一些特定场合的应用的优势,我会在后面附上C源码希望大家支持!!!

知识总结:

1.函数名就是函数的地址,&函数名与函数名 意义一样

2.函数指针的大小依旧是4/8;

3.

我们对这一行代码进行简单的分析:

1.它是一个函数指针数组,数组名是pfarr,它一共有7个元素每个元素当时函数指针,

2.函数指针指向的是有俩个int类型参数,返回类型同样是int类型

3.函数指针数组在这种情况下,函数指针数组在代码性能,可维护性上更加强大

代码分析:

 我们可以看出来使用简单的SWITCH语句我们的代码会有很大的冗余,多段的代码都是重复的,或者说如果我们再次来增加这个计算机的功能,我们只能不断的追加SWITCH语句的情况,这样我们的代码会在一个MIAIN函数中不断的边长,情况越来越复杂,

 与上面的相比SWITCH语句,我们使用函数指针数组,当我们使用那种功能时,直接调用函数,我们不会再次出现代码冗余,并且再次追加功能是,我们只需要设计好函数,将他追加在函数指针数组中

#define _crt_secure_no_warnings 

#include<stdio.h>
//稍微精致的计算机
#include<math.h>

void face()
{
	printf("*****************************\n");
	printf("****1.  +      2.  -    *****\n");
	printf("****3.  *      4.  /    *****\n");
	printf("****5.  %%      6.  ^    *****\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 rem(int x, int y)
{
	return (x % y);
}
int pow(int x, int y)
{
	return ((int)pow(x,y));
}

int main()
{
	int n;
	int x = 0, y = 0;
	int ret = 0;
	int(*pfarr[7])(int, int) = { 0, add, sub, mul, div, rem, pow };
	do
	{
		face();

		printf("请您选择:");
		scanf("%d", &n);
		if ( n == 0)
		{
			printf("请您正确输入!!!\n");
		}
		printf("请您输入你要计算的俩个数字:");
		scanf("%d %d", &x, &y);
		ret = pfarr[n](x,y);
		printf("%d\n", ret);
	} while (n);
	printf("欢迎您的使用\n");
	return 0;
}

简单的计算机
int main()
{
	face();
	int n = 0;
	int x = 0, y = 0;
	int sum = 0;
	do
	{
		printf("请您选择:");
		scanf("%d", &n);
		switch (n)
		{
		case 1://加
			scanf("%d %d", &x, &y);
			 sum = x + y;
			printf("%d + %d = %d\n", x, y, sum);
			break;
		case 2://减
			scanf("%d %d", &x, &y);
			 sum = x - y;
			printf("%d - %d = %d\n", x, y, sum);
			break;
		case 3://乘
			scanf("%d %d", &x, &y);
			sum = x * y;
			printf("%d * %d = %d\n", x, y, sum);
			break;
		case 4://除
			scanf("%d %d", &x, &y);
			sum = x / y;
			printf("%d / %d = %d\n", x, y, sum);
			break;
		case 5://取余
			scanf("%d %d", &x, &y);
			sum = x % y;
			printf("%d % %d = %d\n", x, y, sum);
			break;
		case 6://次方
			scanf("%d %d", &x, &y);
			sum = x ^ y;
			printf("%d ^ %d = %d\n", x, y, sum);
			break;
		case 0:
			printf("欢迎您的使用!!!\n");
			break;
		default:
			printf("请您正确输入!!!\n");
			break;
		}

	} while (n);

	return 0;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山山人行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值