c语言输入字符串进行运算,常见的课程设计题目——用C语言实现简单计算器功能 功能: 输入一个整数算术表达式字符串,分解出数值及运算符,并计算输出结果。 要求: 利用菜单可以循环实现求出加法、减法、乘法...

#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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值