对了这个就是幼稚园小朋友写的东西了,同是也是写给小朋友的玩具程序。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define YES 1
#define NO 0
typedef int Status;
int add(int a, int b);
int dec(int a, int b);
int mul(int a, int b);
int _div(int a, int b);
int mod(int a, int b);
int calcu(char o, int a, int b);
int str_len(char* s) {
int len = 0;
while(*s++) {
len++;
}
return len;
}
Status is_right_operation(char o) {
switch(o) {
case '+':
case '-':
case '*':
case '/':
case '%':
return YES;
default:
printf("\n不正确的操作符或未能实现的运算,请重新输入!\n");
return NO;
}
}
Status is_effective_num(char* s) {
if(str_len(s) <= 12) {
return YES;
} else {
return NO;
}
}
Status is_digit(char* s) {
while(*s) {
if(*s < '0' || *s > '9') {
return NO;
}
s++;
}
return YES;
}
int a_2_i(char* s) {
int i = str_len(s) - 1;
int tmp, sum;
for(tmp = 1, sum = 0; i >= 0; i--) {
sum += (s[i] - '0') * tmp;
tmp *= 10;
}
return sum;
}
void get_numbers(char* s, int (*f)(void), int (*f1) (int c), int* flag) {
char c;
char* p = s;
do {
c = f();
if(c == 0xd) {
break;
}
f1(c);
*s++ = c;
} while(1);
*s = '\0';
if(*p == '-') {
*flag = 1;
while(*++p) {
*(p - 1) = *p;
}
*(p - 1) = '\0';
}
}
int main(void) {
int f;
char s[100];
int a, b, c;
char o;
do{
f = 0;
printf("请输入第一个操作数:");
get_numbers(s, getch, putch, &f);
} while(!(is_digit(s) && is_effective_num(s)));
a = a_2_i(s);
if(f) {
a = -a;
}
printf("\n");
do{
printf("请输入运算符(如+ - * / %%):");
o = getch();
printf("%c\n", o);
fflush(stdin);
}while(!is_right_operation(o));
do{
f = 0;
printf("请输入第二个操作数:");
get_numbers(s, getch, putch, &f);
} while(!(is_digit(s) && is_effective_num(s)));
b = a_2_i(s);
if(f) {
b = -b;
}
printf("\n");
c = calcu(o, a, b);
printf("%d %c %d = %d\n", a, o, b, c);
}
int add(int a, int b){
return a + b;
}
int dec(int a, int b){
return a - b;
}
int mul(int a, int b){
return a * b;
}
int _div(int a, int b){
if(b == 0) {
printf("Divide Error!\n");
exit(-1);
} else {
return a / b;
}
}
int mod(int a, int b){
if(b == 0) {
printf("Divide Error!\n");
exit(-1);
} else {
return a % b;
}
}
int calcu(char o, int a, int b) {
int c;
switch(o) {
case '+':
c = add(a, b);
break;
case '-':
c = dec(a, b);
break;
case '*':
c = mul(a, b);
break;
case '/':
c = _div(a, b);
break;
case '%':
c = mod(a, b);
break;
default:
printf("Error Operation!\n");
break;
}
return c;
}