汕头网站建设推荐,网站seo优化推广外包,深圳家具定制,合肥平台网站建设个人主页#xff08;找往期文章包括但不限于本期文章中不懂的知识点#xff09;#xff1a; 我要学编程(ಥ_ಥ)-CSDN博客 前期思路#xff08;菜单的制作等#xff09;#xff1a;利用C语言的分支循环少量的函数知识写一个猜数字的小游戏-CSDN博客
计算器的制作其实与游…个人主页找往期文章包括但不限于本期文章中不懂的知识点 我要学编程(ಥ_ಥ)-CSDN博客 前期思路菜单的制作等利用C语言的分支循环少量的函数知识写一个猜数字的小游戏-CSDN博客
计算器的制作其实与游戏没有很大的区别。
#include stdio.h
void Add(int x, int y)//加法
{printf(%d\n, x y);
}void Sub(int x, int y)//减法
{printf(%d\n, x - y);
}void Mul(int x, int y)//乘法
{printf(%d\n, x * y);
}void Div(int x, int y)//除法
{printf(%d\n, x / y);
}void menu()
{printf(****************************\n);printf(**** 1.Add 2.Sub ****\n);printf(**** 3.Mul 4.Div ****\n);printf(****** 0.exit ******\n);printf(****************************\n);
}int main()
{int input 0;int x 0;int y 0;do{menu();printf(请输入您要进行的运算);scanf(%d, input);switch (input){case 1:printf(请输入要运算的数);scanf(%d%d, x, y);Add(x,y);break;case 2:printf(请输入要运算的数);scanf(%d%d, x, y);Sub(x, y);break;case 3:printf(请输入要运算的数);scanf(%d%d, x, y);Mul(x, y);break;case 4:printf(请输入要运算的数);scanf(%d%d, x, y);Div(x, y);break;case 0: printf(退出计算器\n);break;default: printf(输入错误请重新输入\n);break;}} while (input);return 0;
}
注意上述计算都是整数运算。
上面这个代码虽然能够达到我们想要的目的但是我们会发现这个比较冗杂特别是那个switch……case语句。那么我们有没有什么办法使这个代码看上去简洁一点呢这个就得用到函数指针数组的知识点不知道的小伙伴可以去我的主页自取指针第3篇通过一个数组存放一些函数的地址再间接来调用这些函数。
#include stdio.h
void Add(int x, int y)
{printf(%d\n, x y);
}void Sub(int x, int y)
{printf(%d\n, x - y);
}void Mul(int x, int y)
{printf(%d\n, x * y);
}void Div(int x, int y)
{printf(%d\n, x / y);
}void menu()
{printf(****************************\n);printf(**** 1.Add 2.Sub ****\n);printf(**** 3.Mul 4.Div ****\n);printf(****** 0.exit ******\n);printf(****************************\n);
}int main()
{int input 0;int x 0;int y 0;void (*p[5])(int, int) { 0, Add, Sub, Mul, Div };//数组初始化对应的运算do{menu();printf(请输入您要进行的运算);scanf(%d, input);printf(请输入要运算的数);scanf(%d%d, x, y);switch (input){case 1:p[1](x, y);break;case 2:p[2](x, y);break;case 3:p[3](x, y);break;case 4:p[4](x, y);break;case 0: printf(退出计算器\n);break;default: printf(输入错误请重新输入\n);break;}} while (input);return 0;
}
这个代码去计算确实是没问题。但是如果我们输入错误或者是想退出计算器就显得有点别扭。
输入错误了或者不想用了还要我们输入运算数。
怎么解决呢其实只要我们限制输入的数就行了。
#include stdio.h
void Add(int x, int y)
{printf(%d\n, x y);
}void Sub(int x, int y)
{printf(%d\n, x - y);
}void Mul(int x, int y)
{printf(%d\n, x * y);
}void Div(int x, int y)
{printf(%d\n, x / y);
}void menu()
{printf(****************************\n);printf(**** 1.Add 2.Sub ****\n);printf(**** 3.Mul 4.Div ****\n);printf(****** 0.exit ******\n);printf(****************************\n);
}int main()
{int input 0;int x 0;int y 0;void (*p[5])(int, int) { 0, Add, Sub, Mul, Div };do{menu();printf(请输入您要进行的运算);scanf(%d, input);if ((input 1) (input 4))//switch语句在此处用不了{printf(请输入要运算的数);scanf(%d%d, x, y);p[input](x,y);}else if (input 0){printf(退出计算器\n);}else{printf(输入错误请重新输入\n);}} while (input);return 0;
} 如果把if语句写进switch语句中会导致if语句不执行。因为先执行的switch语句就直接跳到case语句去了不会理会if语句。
当然这个也可以用函数调用的方法来写。
#include stdio.h
void Add(int x, int y)
{printf(%d\n, x y);
}void Sub(int x, int y)
{printf(%d\n, x - y);
}void Mul(int x, int y)
{printf(%d\n, x * y);
}void Div(int x, int y)
{printf(%d\n, x / y);
}void menu()
{printf(****************************\n);printf(**** 1.Add 2.Sub ****\n);printf(**** 3.Mul 4.Div ****\n);printf(****** 0.exit ******\n);printf(****************************\n);
}void calc(void(*p)(int, int))
{printf(请输入要运算的数);int x 0;int y 0;scanf(%d%d, x, y);p(x, y);}int main()
{int input 0;int x 0;int y 0;do{menu();printf(请输入您要进行的运算);scanf(%d, input);switch (input){case 1:calc(Add);break;case 2:calc(Sub);break;case 3:calc(Mul);break;case 4:calc(Div);break;case 0: printf(退出计算器\n);break;default: printf(输入错误请重新输入\n);break;}} while (input);return 0;
}