#include /*对将要使用的实现的四个功能进行声明*/
int ADD(char num); //实现连续加法
int MIN(char num); //实现连续减法
int MUL(char num); //实现连续乘法
int DIV(char num); //实现连续除法
int main()
{
int enter_to, num;//菜单提示 (+,-,*,/以及混合运算)
printf(” simplified calculator \n”);
printf(“========================================\n”);
printf(“= ADD(+) press 1 =\n”);
printf(“= MIN(-) press 2 =\n”);
printf(“= MUL(*) press 3 =\n”);
printf(“= DIV(/) press 4 =\n”);
printf(“= q to quit =\n”);//按 q 键退出系统(实际上任意非数字键即可退出)
printf(“========================================\n”);
printf(“Please choose the function! “);//选择需要进行的功能
while((scanf(“%d”,&enter_to))==1)
{
getchar(); //用来消化回车键,去掉会是num的值初始化为0,影响程序运行
switch(enter_to)//采用模块化思想
{
case 1:ADD(num);
break;
case 2:MIN(num);
break;
case 3:MUL(num);
break;
case 4:DIV(num);
break;
default:
printf(“No such function!\n”);
}
printf(“Please choose the function!(q to quit) “);//使菜单循环出现
}
return 0;
}
//第一部分: 加法运算
int ADD(char num)
{
int sum=0,data=0;
printf(“Just for it!(= to end)\n”);
//这句话的目的是使用户知道成功的启动了该功能,同时告诉用户输入的结束标志是输入一个 =
while((num=getchar())!=’=’) //知道输入 = 时再结束
{
if(num>=’0′ && num<=’9′)
//将字符类型转化为整型 ,因为一开始输入的是字符型
//注意是字符类型的 ‘0’ 到 ‘9’ 之间,而不是数字的0 到 9
data=data*10+num-‘0’; //根据 ASCII 的数学关系进行转换
else
{
sum+=data; //对非一位的字符类型转换为整型的处理
data=0;
}
}
sum+=data;
printf(“%d\n”,sum); //打印结果
return 0;
}
//第二部分: 减法运算
/*第二部分与第一部分思路相近,仍需要将字符转换维整形等
但不一样的地方是,对于第一个数字,不能采用减法处理,
应该对第一个数字采用加法,对后面的数字进行减法运算*/
int MIN(char num)
{
printf(“\nJust for it!(= to end)\n”);//同第一部分提示,提示用户成功打开了该程序
int sum=0,data=0,i=0,j=0;
/* sum存放算式的结果
data存放字符转化的数字
i , j 用于循环计数与判断是否为第一个数
*/
while((num=getchar())!=’=’)
{
if(num>=’0′ && num<=’9′)
{
data=data*10+num-‘0’;
i+=1;
}
else if(i && j==0) //第一个数要进行加法运算 (注意判断条件)
{
j++;//让 j 的值增加
sum+=data;
data=0;
}
else if(j!=0)//当计算过第一个数之后,j 的值就不再为 0 ,此后进入该循环,实现从第二个数之后的连续减法
{
sum-=data;//从第二个数开始进行减法运算
data=0;
}
}
sum-=data;
printf(“%d\n”,sum);
return 0;
}
//第三部分: 乘法运算
/*连续乘法与连续加法跟接近,不同之处在于此时的 product(乘积) 应该 初始化为 1 , 而不是0*/
int MUL(char num)
{
printf(“\nJust for it!(= to end)\n”);
int product=1; int data=0;
while((num=getchar())!=’=’)
{
if(num>=’0′ && num<=’9′)
data=data*10+num-‘0’;
else
{
product*=data;
data=0;
}
}
product*=data;
printf(“%d\n”,product);
return 0;
}
//第四部分: 除法运算
/*除法是最复杂的情况,
连续除法与连续减法有相近之处,都需要对第一个数进行逆向运算处理
即第一个数要采用乘法运算,对第二个之后的数采用除法
另外,连续除法还需要考虑 被除数作为 0 时的特殊处理
以及(-5)/1=-5, 5/(-1)=5 的处理(相信跟多人会忽略这一点)*/
int DIV(char num)
{
printf(“\nJust for it!(= to end)\n”);
int i=0,j=0,data=0;
float consult=1.00;
while((num=getchar())!=’=’)
{
if(num>=’0′ && num<=’9′)
{
data=data*10+num-‘0’;
i+=1;
}
else if(i && j==0) //第一个数进行乘法运算
{
j++;
consult=consult*1.0*data;
data=0;
}
else if(j!=0) //从第二个开始进行除法运算
{
consult=consult*1.0/data;
data=0;
}
}
consult=consult*1.0/data;
printf(“%.2f\n”,consult);
return 0;
}