C语言:计算器

将每一个运算都封装为一个函数,再用指针调用。

此计算器可以一次性的计算 加 减 乘 除 按位左移 按位右移 按位与 按位或 按位异或 等计算

运用了 do while语句 switch语句 分支语句 函数调用 函数指针 递归 的一些知识:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

void menu()
{
printf("****************************\n");
printf("*** 1—>'+' 2—>'-' ***\n");
printf("*** 3—>'*' 4—>'/' ***\n");
printf("*** 5—>'>>' 6—>'<<' ***\n");
printf("*** 7—>'&' 8—>'|' ***\n");
printf("*** 9—>'^' ***\n");
printf("****************************\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 divs(int x, int y)
{
return x / y;
}

int Shift_right_bit(int x, int y)
{
return x >>= y;
}

int Shift_left_bit(int x, int y)
{
return x <<= y;
}

int Bitwise_with(int x, int y)
{
return x & y;
}

int Bitwise_or(int x, int y)
{
return x | y;
}

int Bitwise_XOR(int x, int y)
{
return x ^ y;
}

void Print_Binary(unsigned int x)
{
if (x > 1)
{
Print_Binary(x >> 1);
}
putchar((x & 1) ? '1' : '0');
}

// void calu(int (*pf)(int, int))
//{
// int x = 0;
// int y = 0;
// int z = 0;
// printf("请输入操作数");
// scanf("%d %d", &x, &y);
// z = pf(x, y);
// printf("十进制结果:%d\n", z);
// printf("二进制结果:\n");
// Print_Binary(z);
// printf("\n");
//}

void calus(int (*pfs)(int,int))
{
int x = 0;
int y = 0;
int z = 0;
printf("请输入操作数");
scanf("%d %d", &x, &y);
z = pfs(x,y);
// 以二进制输出
// plana:用库函数itoa
// planb:手“冻”实现
printf("十进制结果:%d\n",z);
printf("二进制结果:");
Print_Binary(z);
printf("\n");
}

int main()
{
menu();
int input = 0;
do
{
printf("请输入:");
scanf("%d",&input);
switch (input)
{
case 1:
calus(add);
break;
case 2:
calus(sub);
break;
case 3:
calus(mul);
break;
case 4:
calus(divs);
break;
case 5:
calus(Shift_right_bit);
break;
case 6:
calus(Shift_left_bit);
break;
case 7:
calus(Bitwise_with);
break;
case 8:
calus(Bitwise_or);
break;
case 9:
calus(Bitwise_XOR);
break;
case 0:
printf("《退出》");
break;
default:
printf("输入错误!重新输入!");
break;
}

} while (input);

return 0;
}

如果有什么错误,欢迎指出,如果有帮助,点个赞,谢谢。