练习2-9 整数四则运算

练习2-9 整数四则运算(10 分)

本题要求编写程序,计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。

输入格式:

输入在一行中给出2个正整数A和B。

输出格式:

在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。

输入样例:

3 2

输出样例:

3 + 2 = 5
3 - 2 = 1
3 * 2 = 6
3 / 2 = 1

 


分析:本题是最常规的整数四则混合运算,一般思路就是分别编写“加、减、乘、除”四个函数,然后依次调用。但是,既然之前已经对“函数指针”有所了解,何不借助此机会巩固一下这部分知识呢?

(1)建立一个函数指针数组,参数分别是四个函数的函数名,然后利用for循环遍历这个指针数组,从而实现四个函数的依次调用

(2)另外编写一个函数val,并将函数指针作为参数,根据不同情况,将不同的函数名作为调用val函数的实参,把函数入口地址传送给函数val中的形参(该形参是指向函数的指针变量),这样调用val函数就分别执行不同的函数

代码:

方法一:直接调用函数

//方法一:直接调用函数
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int Add(int a, int b)
{
	return a + b;
}
int Sub(int a, int b)
{
	return a - b;
}
int Mul(int a, int b)
{
	return a*b;
}
int Div(int a, int b)
{
	return a / b;
}
int main()
{
	int A = 0;
	int B = 0;
	scanf("%d %d", &A, &B);
	printf("%d + %d = %d\n", A, B, Add(A, B));
	printf("%d - %d = %d\n", A, B, Sub(A, B));
	printf("%d * %d = %d\n", A, B, Mul(A, B));
	printf("%d / %d = %d\n", A, B, Div(A, B));
	system("pause");
	return 0;
}

方法二:函数指针数组

//方法二:定义一个函数指针数组
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
void Add(int a, int b)
{
	printf("%d + %d = %d\n", a, b, a+b);

}
void Sub(int a, int b)
{
	printf("%d - %d = %d\n", a, b, a - b);
}
void Mul(int a, int b)
{
	printf("%d * %d = %d\n", a, b, a * b);
}
void Div(int a, int b)
{
	printf("%d / %d = %d\n", a, b, a / b);
}
int main()
{
	int A = 0;
	int B = 0;
	scanf("%d %d", &A, &B);
	void(*pf[])(int, int) = { Add, Sub, Mul, Div };
	for (int i = 0; i < sizeof(pf) / sizeof(pf[0]); i++)
	{
		(*pf[i])(A, B);
	}
	system("pause");
	return 0;
}

方法三:函数指针作为参数

//用指向函数的指针做参数
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
void Add(int a, int b)
{
	printf("%d + %d = %d\n", a, b, a+b);

}
void Sub(int a, int b)
{
	printf("%d - %d = %d\n", a, b, a - b);
}
void Mul(int a, int b)
{
	printf("%d * %d = %d\n", a, b, a * b);
}
void Div(int a, int b)
{
	printf("%d / %d = %d\n", a, b, a / b);
}

void cal(int a,int b,void(*pf)(int, int))
{
	(*pf)(a, b);
}
int main()
{
	int A = 0;
	int B = 0;
	scanf("%d %d", &A, &B);
	cal(A, B, Add);
	cal(A, B, Sub);
	cal(A, B, Mul);
	cal(A, B, Div);
	system("pause");
	return 0;
}

结果:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值