c语言设计一个简单的计算器程序

设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:
操作数1 运算符op 操作数2
计算表达式的值,指定的算术运算符为加(+)、减(-)、乘(*)、除(/)。
功能要求:
(1)程序能进行浮点数的算术运算。除法要对分母为0的情况给出警告及避免。
(2)要求输入的算术表达式中的操作数和运算符之间可以加入任意多个空白符。
(3)要求可以连续做多次算术运算,每次运算结束后,程序都给出提示:
Do you want to continue(Y/N or y/n)?
用户输入Y或y时,程序继续进行其他算术运算;否则程序退出运行状态。
[提示:可利用空格加%c(或者%1s)格式符输入用户回答,可利用do-while语句实现反复运算直到用户输入N或n。]
我的程序是
#include "stdio.h"
void math()
{
float a,b;
char op;
scanf("%f %c %f",&a,&op,&b);
switch(op)
{
case '+':printf("%.2f+%.2f=%.2f\n",a,b,a+b);
break;
case '-':printf("%.2f-%.2f=%.2f\n",a,b,a-b);
break;
case '*':printf("%.2f*%.2f=%.2f\n",a,b,a*b);
break;
case '/':if(b=0)printf("错误!分母为零");
else printf("%.2f/%.2f=%.2f\n",a,b,a/b);
break;
default :printf("输入的符号错误。");
}
}
void main()
{
char c;
for(;;)
{
printf("请输入表达式:\n");
math();
printf("do you want to continue(y/n or Y/N)?\n");
c=getchar();
if(c=='n'||c=='N')
break;
}
}
在运行之后提问之后的Y,n不起作用 无法结束循环
我想知道哪个地方出错了。
我是菜鸟求大神罩。。

#include<stdio.h>//计算器

voidmenu()//自定义的菜单界面

printf("--------------------\n");

printf("请输入你的选择\n");

printf("1.+\n");

printf("2.-\n");

printf("3.*\n");

printf("4./\n");

printf("--------------------\n");

intmain()

inti=0;

intj=0;

intnum=0;//计算结果存放在nun

intselect=0;//选择的选项存放在select

do//do-while先执行再判断循环条件,即可实现重复计算功能

menu();//打印出菜单界面

scanf("%d",&select);//输入你的选项

printf("请输入计算值:");

scanf("%d%d",&i,&j);//输入要计算的数值

switch(select)

case1:

printf("%d+%d=%d\n",i,j,num=i+j);//实现加法功能

break;

case2:

printf("%d-%d=%d\n",i,j,num=i-j);//实现减法功能

break;

case3:

printf("%d*%d=%d\n",i,j,num=i*j);//实现乘法功能

break;

case4:

printf("%d-%d=%d\n",i,j,num=i/j);//实现除法功能

break;

default:

printf("输入有误重新选择");

break;

}while(select);

return0;

运行结果:

扩展资料:

return表示把程序流程从被调函数转向主调函数并把表达式的值带回主调函数,实现函数值的返回,返回时可附带一个返回值,由return后面的参数指定。

return通常是必要的,因为函数调用的时候计算结果通常是通过返回值带出的。如果函数执行不需要返回计算结果,也经常需要返回一个状态码来表示函数执行的顺利与否(-1和0就是最常用的状态码),主调函数可以通过返回值判断被调函数的执行情况。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-06-26

#include<<a href="https://www.baidu.com/s?wd=stdio.h&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y4ryfLuADkP1bYmvD3nhmz0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EPH6srjc4rH61" target="_blank" class="baidu-highlight">stdio.h</a>>

void main() { float x,y,z; char c;

scanf("%f%c%f",&x,&c,&y);

switch ( c ) {

case '+': z=x+y; break;

case '-': z=x-y; break;

case '*': z=x*y; break;

case '/': z=( y==0 )?(0):(x/y); break;

default: z=0; break;

}

printf("%f%c%f=%f\n",x,c,y,z);

}

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。[1]  目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。

本回答被网友采纳
第2个回答  2014-05-28
#include
#include
#include
#include
#define MaxQSize 80

float qlist[MaxQSize],qlist1[MaxQSize],qlist2[MaxQSize]; //定义三个全局队列
int front=0,rear=0,front1=0,front2=0,rear1=0,rear2=0,count=0,count1=0,count2=0;//定义三个队列头结点、尾结点、数据个数
main()
{
char c[80];
void Enter(float),pop(),ClearStack();
printf("input string:(n:sin,o:cos,s:sqrt)\n");
while(gets(c),*c!='q' ||*c!='Q')
{
switch(*c)
{
case '+':
case '*':
case 's':
case 'n': //求SIN
case 'o': //求COS
case '/': //将符号入第一个队列
{
if(count==MaxQSize)
{
printf("Quere overflow!");
exit(1);
}
count++;
qlist[rear]=*c;
rear=(rear+1)%MaxQSize;
break;}
case '-':
{
if(strlen(c)>1) //如果是负号,则将负号和数一起入第二个队列
Enter(atof(c));
else //否则,说明是减号,入第一队列
if(count==MaxQSize)
{
printf("Quere overflow!");
exit(1);
}
count++;
qlist[rear]=*c;
rear=(rear+1)%MaxQSize;
break;}
case '=':
pop(); //显示结果
break;
case 'c':
ClearStack();
break;
case 'q':
ClearStack();
exit(1);
default:
Enter(atof(c));
break;
}
}
return 0;
}

void Enter(float num) //将数据入第二个队列
{
if(count1==MaxQSize)
{
printf("Queue overflow!\n");
exit(1);
}
count1++;
qlist1[rear1]=num;
rear1=(rear1+1)%MaxQSize;

}

void ClearStack() //将三个队列清空
{
count=0;
count1=0;
count2=0;
front=0;
rear=0;
front1=0;
rear1=0;
front2=0;
rear2=0;
}

void pop() //显示结果
{
float QFront(float num1,float num2,char *temp);
float num1,num2;
float sum;
char temp;
temp=qlist[front]; //将第一个队列中的头结点读出来
while(count1!=0) //判断第二个队列是否有数
{
temp=qlist[front]; //将队列中头结点读出来
sum=QFront(num1,num2,&temp);
count--;
front=(front+1)%MaxQSize;//将第一个队列头指针加1
}
if(count!=0 && temp=='s')
sum=sqrt(qlist2[front2]);
if(count!=0 && temp=='n')
sum=sin(qlist2[front2]);
if(count!=0 && temp=='o')
sum=cos(qlist2[front2]);
printf("%f",sum);
}

float QFront(float num1,float num2,char *temp)
{
float number,numb1;
float QFront1();
void QInsert(float);
num1=QFront1(); //先读出一个数
switch(*temp)
{
case '+':
if(count2==0)
{
num2=QFront1();//读出第二个数
number=num1+num2;
QInsert(number);//将结果存入第三个队列
}
else
{
number=num1+qlist2[front2];
front2=(front2+1)%MaxQSize;
QInsert(number);
}
break;

case '-':
if(count2==0)
{
num2=QFront1();
number=num1-num2;
printf("number=%f\n",number);
QInsert(number);
}
else
{
number=qlist2[front2]-num1;
printf("number=%f\n",number);
front2=(front2+1)%MaxQSize;
QInsert(number);
}
break;

case '*':
if(count2==0) //如果第三个队列中没有数据,则从第二个队列中读出一个数据
{
num2=QFront1();
number=num1*num2;
QInsert(number);
}
else //否则,从第三个队列中读出数据
{
number=qlist2[front2]*num1;
front2=(front2+1)%MaxQSize;
QInsert(number);
}
break;
case '/':
if(count2==0)
{
num2=QFront1();
if(num2==0)
{
printf("divied by 0");
ClearStack();
exit(1);
}
else
{
number=num1/num2;
QInsert(number);
}
}
else
{
if(num1==0)
{
printf("divide by 0");
ClearStack();
exit(1);
}
else
{
number=qlist2[front2]/num1;
front2=(front2+1)%MaxQSize;
QInsert(number);
}
}
break;

case 's':
if(count2==0)
{
number=sqrt(num1);
QInsert(number);
}
else
{
number=sqrt(qlist2[front2]);
printf("number=%d\n",number);
front2=(front2+1)%MaxQSize;
QInsert(number);
}
break;
case 'n':
if(count2==0)
{
number=sin(num1);
QInsert(number);
}
else
{
number=sin(qlist2[front2]);
front2=(front2+1)%MaxQSize;
QInsert(number);
}
break;

case 'o':
if(count2==0)
{
number=cos(num1);
printf("number=%d\n",number);
QInsert(number);
}
else
{
number=cos(qlist2[front2]);
printf("number=%d\n",number);
front2=(front2+1)%MaxQSize;
QInsert(number);
}
break;
}
return number;
}

float QFront1() //从第一个数据读数据
{
float temp;
if(count1==0)
{
printf("Deleting from an empty queue!\n");
exit(1);
}
temp=qlist1[front1];
count1--;
front1=(front1+1)%MaxQSize;
return temp;
}

void QInsert(float number) //将结果存入第三个队列
{
if(count2==MaxQSize)
{
printf("Queue overflow!\n");
exit(1);
}
count2++;
qlist2[rear2]=number;
rear2=(rear2+1)%MaxQSize;
}

其实这个程序用链表实现更好,但是由于时间关系,所以用了数组。当然,这个程序还不是很完善,还有很多地方需要改进,比如可以用图形界面来进行操作、可以将三个队列放入一个结构体中等。
第3个回答  推荐于2017-11-26
/*
2013年12月23日 12:43:46
目的:计算器的实现
*/

# include <stdio.h>
# include <ctype.h>
# include <math.h>

char get_choice(void); //获取用户输入的选项,并建立目
char get_first(void); //获取用户输入的选项,并剔除错误输入
float get_int(void); //获取用户输入的计算值
float add(void); //定义加法函数
float subtraction(void); //定义减法函数
float multiplication(void); //定义乘法函数
float division(void); //定义除法函数
float extract(void); //定义开方函数
float square(void); //定义平方函数
float cube(void); //定义立方函数

int count = 0;
int main(void)
{
char choice;

printf("***欢迎使用由小钱制作的计算器***\n");
choice = get_choice();
while(choice != 'q')
{
switch(choice)
{
case 'a':
add(); break;
case 'b':
subtraction(); break;
case 'c':
multiplication(); break;
case 'd':
division(); break;
case 'e':
extract(); break;
case 'f':
square(); break;
case 'g':
cube(); break;
default :
printf("您输入有误,请重新输入:"); break;
}
fflush(stdin);
choice = get_choice();
}

printf("bye");

return 0;
}

//获取用户输入的选项,并建立目录
char get_choice(void)
{
char ch;
int a = 0;

//建立目录

printf("\n--------------------------------\n");
printf("a. 加法\t\t\tb. 减法\nc. 乘法\t\t\td. 除法\n");
printf("e. 开方\t\t\tf. 平方\ng. 立方\t\t\tq. 退出\n");
printf("--------------------------------\n");
printf("请输入你的选项:");

ch = get_first();
while(ch == ' ' || ch == '\n' || ch == '\t')
ch = get_first();

//判断用户输入的选项是否有误
while((ch<'a' || ch>'g') && ch !='q')
{
putchar(ch);
printf(" 你输入的选项有误,请重新输入:");
ch = get_first();

}

return ch;
}

//获取用户输入的选项,并剔除错误输入
char get_first(void)
{
char ch;

ch = getchar();

//剔除由用户输入选项时产生的换行符
while(ch == '\n')
{
ch = getchar();
}

return ch;
}

//获取用户输入的计算值
float get_int(void)
{
float input;
char ch;
int a;

if(count == 0)
printf("亲!请输入数值:");
if(count == 1)
printf("亲!请输入第一个数值:");
if(count == 2)
printf("亲!请输入第二个数值:");

a = scanf("%f", &input);

//判断用户的输入是否为一个数值
while(a != 1)
{
//剔除用户输入错误的字符
while((ch = getchar()) != '\n')
{
putchar(ch);
printf(" 不是一个数值,请输入例如3、111.2、或者-1");
a = scanf("%f", &input);
}
}

return input;
}

//定义加法函数
float add(void)
{
float i, j, sum;

count = 0;
count = count+1;
i = get_int();
count = count+1;
j = get_int();
sum = i + j;

printf("%.2f + %.2f = %.2f\n", i, j, sum);

return sum;
}

//定义减法函数
float subtraction(void)
{
float i, j, sum;

count = 0;
count = count+1;
i = get_int();
count = count+1;
j = get_int();
sum = i - j;

printf("%.2f - %.2f = %.2f\n", i, j, sum);

return sum;
}

//定义乘法函数
float multiplication(void)
{
float i, j, sum;

count = 0;
count = count+1;
i = get_int();
count = count+1;
j = get_int();
sum = i * j;

printf("%.2f * %.2f = %.2f\n", i, j, sum);

return sum;
}

//定义除法函数
float division(void)
{
float i, j, sum;

count = 0;
count = count+1;
i = get_int();
count = count+1;
j = get_int();

//判断除数是否为0
while(j == 0)
{
printf("除数不能为0\n请重新输入!!!\n");
j = get_int();
}
sum = i / j;

printf("%.2f / %.2f = %.2f\n", i, j, sum);

return sum;
}

//定义开方函数
float extract(void)
{
float i, sum;

count = 0;
i = get_int();
//判断开方数是否小于0,如果小于0,则让用户重新输入
while(i < 0)
{
printf("请输入大于0的数值\n");
i = get_int();
}
sum = sqrt(i);

printf("%.2f的开方等于%.2f\n", i, sum);

return sum;
}

//定义平方函数
float square(void)
{
float i, sum;

count = 0;
i = get_int();
sum = i * i;

printf("%.2f的平方等于%.2f\n", i, sum);

return sum;
}

//定义立方函数
float cube(void)
{
float i, sum;

count = 0;
i = get_int();
sum = i * i * i;

printf("%f的立方等于%.3f\n", i, sum);

return sum;
}本回答被提问者采纳
第4个回答  2019-02-22
#include<cstdio>
int main()
{
for(;;){
int a,b;
char c;
scanf("%d %d %c",&a,&b,&c);
if(c=='+'){
printf("%d",a+b);
}
if(c=='-'){
printf("%d",a-b);
}
if(c=='*'){
printf("%d",a*b);
}
if(c=='/'){
printf("%d",a/b);
}
}
return 0;
}
相似回答