在这篇博客中,我们将深入探讨使用C语言编写的简单计算器。这个计算器不仅支持基本的加法、减法、乘法、除法,还包括异或运算。我们将利用函数指针和菜单驱动的方法,展示如何创建一个灵活且具有组织性的计算器。
int add(int x,int y ) {
int z = x + y;
}
int sub(int x, int y) {
int z = x - y;
}
int cdd(int x, int y) {
int z = x * y;
}
int fcc(int x, int y) {
if (y != 0) {
int z = x / y;
return z;
} else {
printf("错误:除数不能为零\n");
}
}
int xor(int x, int y) {
int z = x ^ y;
}
muen() {
printf("******************************\n");
printf("*1.和 2.差 3.积 4.商 5.异或 *\n");
printf("*********** 0.退出 ***********\n");
printf("******************************\n");
}
int main() {
int input = 0;
int x = 0;
int y = 0;
do
{
muen();
printf("请输入你要计算的类型>");
scanf("%d",&input);
switch (input)
{
case 1:
printf("请输入两个数>");
scanf("%d%d", &x, &y);
printf("%d\n", add(x, y));
break;
case 2:
printf("请输入两个数>");
scanf("%d%d", &x, &y);
printf("%d\n", sub(x, y));
break;
case 3:
printf("请输入两个数>");
scanf("%d%d", &x, &y);
printf("%d\n", cdd(x, y));
break;
case 4:
printf("请输入两个数>");
scanf("%d%d", &x, &y);
printf("%d\n", fcc(x, y));
break;
case 0:
printf("退出");
break;
default:
printf("请重新输入!\n");
break;
}
} while (input);
int add(int x, int y) {
int z = x + y;
}
int sub(int x, int y) {
int z = x - y;
}
int cdd(int x, int y) {
int z = x * y;
}
int fcc(int x, int y) {
int z = x / y;
}
这四个函数(add
、sub
、cdd
、fcc
)用于执行基本的算术运算。
void muen() {
printf("******************************\n");
printf("*1.和 2.差 3.积 4.商 5.异或 *\n");
printf("*********** 0.退出 ***********\n");
printf("******************************\n");
}
这个函数 muen
打印了一个简单的计算器程序菜单,这个可以自己按照自己喜好
int main() {
int input = 0;
int x = 0;
int y = 0;
do {
muen();
printf("请输入你要计算的类型>");
scanf("%d", &input);
switch (input) {
case 1:
printf("请输入两个数>");
scanf("%d%d", &x, &y);
printf("%d\n", add(x, y));
break;
case 2:
printf("请输入两个数>");
scanf("%d%d", &x, &y);
printf("%d\n", sub(x, y));
break;
case 3:
printf("请输入两个数>");
scanf("%d%d", &x, &y);
printf("%d\n", cdd(x, y));
break;
case 4:
printf("请输入两个数>");
scanf("%d%d", &x, &y);
printf("%d\n", fcc(x, y));
break;
case 0:
printf("退出");
break;
default:
printf("请重新输入!\n");
break;
}
} while (input);
}
这个主函数包含一个简单的菜单循环,允许用户选择不同的操作。用户可以输入数字来选择操作类型。然后,程序根据用户的选择执行相应的操作,包括调用上述四个函数。循环在用户输入 0
时结束。
这个代码是一个简单的计算器实现,但还需要一些改进来提高其功能性和可靠性。
int add(int x,int y ) {
int z = x + y;
}
int sub(int x, int y) {
int z = x - y;
}
int cdd(int x, int y) {
int z = x * y;
}
int fcc(int x, int y) {
if (y != 0) {
int z = x / y;
return z;
} else {
printf("错误:除数不能为零\n");
}
}
int xor(int x, int y) {
int z = x ^ y;
}
void xyz(int (*paa)(int,int)) {//函数回调:将函数地址传给函数指针,这样传的什么函数就执行该函数
int x = 0;
int y = 0;
printf("请输入两个数>");
scanf("%d%d", &x, &y);
printf("%d\n", paa(x, y));
}
muen() {
printf("******************************\n");
printf("*1.和 2.差 3.积 4.商 5.异或 *\n");
printf("*********** 0.退出 ***********\n");
printf("******************************\n");
}
int main() {
int input = 0;
int x = 0;
int y = 0;
//优化
do
{
muen();
printf("请输入你要计算的类型>");
scanf("%d",&input);
switch (input)
{
case 1:
xyz(add);//函数回调
break;
case 2:
xyz(sub);
break;
case 3:
xyz(cdd);
break;
case 4:
xyz(fcc);
break;
case 0:
printf("退出");
break;
default:
printf("请重新输入!\n");
break;
}
对函数回调的解释
void xyz(int (*paa)(int, int));
这里的 paa
是一个函数指针,它指向一个接受两个整数参数并返回整数的函数。在 xyz
函数中,通过调用 paa
来执行具体的数学运算。
xyz(add);
在主程序中,通过将 add
函数的地址传递给 xyz
函数,实现了函数回调。这里 add
是一个函数,可以是加法运算,而 xyz
函数会调用 add
函数进行计算。
void xyz(int (*paa)(int, int)) {
int x = 0;
int y = 0;
printf("请输入两个数>");
scanf("%d%d", &x, &y);
printf("%d\n", paa(x, y));
}
在 xyz
函数中,首先通过用户输入获取两个整数 x
和 y
。然后,通过调用函数指针 paa
执行具体的数学运算。由于 paa
是一个函数指针,它可以指向不同的数学运算函数,实现了根据用户选择的不同数学运算类型来动态调用相应的函数。
通过使用 xyz(add)
、xyz(sub)
等方式,实现了根据用户输入选择不同数学运算类型,并通过函数回调执行相应的计算。这种设计使得代码更具灵活性,可以轻松地扩展和修改支持的数学运算。
int add(int x,int y ) {
int z = x + y;
}
int sub(int x, int y) {
int z = x - y;
}
int cdd(int x, int y) {
int z = x * y;
}
int fcc(int x, int y) {
if (y != 0) {
int z = x / y;
return z;
} else {
printf("错误:除数不能为零\n");
}
}
int xor(int x, int y) {
int z = x ^ y;
}
muen() {
printf("******************************\n");
printf("*1.和 2.差 3.积 4.商 5.异或 *\n");
printf("*********** 0.退出 ***********\n");
printf("******************************\n");
}
int main() {
int input = 0;
int x = 0;
int y = 0;
int(*pa[])(int,int) = {0,add,sub,cdd,fcc,xor};//利用函数指针数组--存储函数
do
{
muen();
printf("请输入你要计算的类型>");
scanf("%d", &input);
if (input>=1 && input<=5)
{
printf("请输入两个数>");
scanf("%d%d", &x, &y);
printf("%d\n", pa[input](x, y));
}
else if (input == 0)
{
printf("退出\n");//input == 0(为假)
}
else
{
printf("请重新输入\n");
}
} while (input);
int (*pa[])(int, int) = {0, add, sub, cdd, fcc, xor};
这行代码定义了一个函数指针数组 pa
,它包含了六个元素。每个元素都是一个指向函数的指针,这些函数接受两个整数参数并返回整数。数组的第一个元素为 0
,主要是为了占位,使得数组的索引从1开始对应不同的数学运算。
用户输入和函数调用:
在主程序中,通过用户的输入 scanf("%d", &input)
获取用户选择的数学运算类型。然后,通过 pa[input]
来访问函数指针数组中对应索引的元素,即获取用户选择的数学运算函数的指针。
printf("请输入你要计算的类型>");
scanf("%d", &input);
如果用户输入的数字在数组范围内(1到5),程序会要求用户再输入两个数,并通过 pa[input](x, y)
调用相应的数学运算函数。这样,根据用户的选择,程序动态地调用了不同的数学运算函数。
if (input >= 1 && input <= 5) {
printf("请输入两个数>");
scanf("%d%d", &x, &y);
printf("%d\n", pa[input](x, y));
}
在 do-while
循环中,如果用户输入了 0(为假)
,即选择退出,循环会结束,程序退出。
} while (input);
通过使用函数指针数组,你实现了一个更加灵活的计算器,用户可以通过输入选择不同的数学运算类型,而程序会相应地调用相应的函数进行计算。