怎么做网站何做网站,网站开发众包,鞍山高新区网站,php培训学校网站源码在这篇博客中#xff0c;我们将深入探讨使用C语言编写的简单计算器。这个计算器不仅支持基本的加法、减法、乘法、除法#xff0c;还包括异或运算。我们将利用函数指针和菜单驱动的方法#xff0c;展示如何创建一个灵活且具有组织性的计算器。
第一种代码展示#xff1a; … 在这篇博客中我们将深入探讨使用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);
代码分析Code Analysis
1. 函数定义
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用于执行基本的算术运算。
2. 菜单函数
void muen() {printf(******************************\n);printf(*1.和 2.差 3.积 4.商 5.异或 *\n);printf(*********** 0.退出 ***********\n);printf(******************************\n);
}这个函数 muen 打印了一个简单的计算器程序菜单这个可以自己按照自己喜好
3. 主函数
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 函数进行计算。 xyz 函数的实现 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 (input1 input5) {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);通过使用函数指针数组你实现了一个更加灵活的计算器用户可以通过输入选择不同的数学运算类型而程序会相应地调用相应的函数进行计算。