用do while和switch结构编写简单计算器 20

#include<stdio.h>intmain(void){floata;charb;scanf("%f",&a);do{floatn;scanf("%c%f",&b,... #include<stdio.h>

int main(void)
{
float a;
char b;

scanf("%f",&a);
do
{
float n;

scanf("%c%f",&b,&n);
switch(b)
{
case'+':a=a+n;break;
case'-':a=a-n;break;
case'*':a=a*n;break;
case'/':a=a/n;break;

}
}while(b!='=');
printf("%f",a);

return 0;
}
哪位高手帮帮忙 哪里错了啊
用于几个数的加减乘除
展开
 我来答
我非常爱吃白菜
2010-05-21 · 超过33用户采纳过TA的回答
知道答主
回答量:108
采纳率:0%
帮助的人:72.5万
展开全部
正好,我刚写了个,发上来你看看

/*
*设计思想:
*简单的计算器,只能进行加减乘除四个基本的运算
*每一个运算一个函数,用数组传递参数,并返回
*拥有记忆功能,并能进行后续计算
*纯字符界面
*没有考虑到数值溢出的情况
*实现方法也比较笨
*总的思路是,建立一个具有两个元素的数组,用来存储两个待计算的数
*第一次要给数组的两个元素一次赋值,并计算,如果需要继续运算的话
*就把结果赋值给数组的第一个元素,再输入一个数赋值给数组的第二个
*元素,以此从输入第二个元素的地方循环,达到继续计算的目的。
*/
#include "stdio.h"
#include <conio.h>
#include <stdlib.h>
int m=0; /*用来记录计算次数来控制历史结果查询*/
float mem[20]; /*用来记录历史结果,最大为20*/

/*加法的函数*/
float add(float *n)
{
float x;
x=(*(n+0)+*(n+1));
return(x);
}

/*减法的函数*/
float sub(float *n)
{
float x;
x=(*(n+0)-*(n+1));
return(x);
}

/*乘法的函数*/
float mul(float *n)
{
float x;
x=(*(n+0)**(n+1));
return(x);
}

/*除法的函数*/
float chu(float *n)
/*原来函数名是div,但是div好像被定义过了*/
/*编译时就会报错,改后编译成功
*写法与上面也有所不同主要是因为
*x=(*(n+0)/*(n+1))
*与注释几乎一样。。。
*/
{
float z;
z=(n[0]/n[1]);
return(z);
}

/*这个用来达到输出历史结果的效果*/
void mem_r()
{
char u;
int i;
printf("\n\tPlease choose a mode for print resualt\n");
printf("\t l is for list all history resualt\n");
printf("\t u is for latest resualt");
u=getch();
if(u=='l')
{
printf("\nHistory resualt is:\n");
for (i=0;i<=m;i++)
{
if(i%5==0&&i!=0)printf("\n");
printf("\t%g",mem[i]);
}
}
else printf("\nlatest resulr is:\t %g \t\n",mem[m]);
exit(0);
}

/*增加这个函数是能够在选错mode后能够重新进行选择*/
char choose_o()
{
char x;
printf("please choose a mode\n");
x=getch();
printf("you choose mode %c\n",x);
if(x=='q')exit(0);
else if(x=='m') mem_r();
else if(x!='a'&&x!='s'&&x!='d'&&x!='f')
{
printf("Wrong mode,please choose again\n");
choose_o();
}
return(x);
}

/*这个函数,纯粹是因为无聊才把他给独立出来的*/
void welcome()
{
printf("\t\tA simple counter\n");
printf("\tyou have 6 choice\n");
printf("\tpress a to add 2 numbers\n");
printf("\tpress s to sub 2 numbers\n");
printf("\tpress f to mul 2 numbers\n");
printf("\tpress d to div 2 numbers\n");
printf("\tpress m for list result\n");
printf("\tpress q for exit\n");
}

int main()
{
float a[2]; /*用来存储两个待计算的数值*/
float r; /*存储上一次计算结果*/
char o,p; /*o,p是用来存储选择状态的*/
float i,j; /*这两个其实不要也行*/
int s=1; /*是一个状态符号用于实现循环*/
welcome();
printf("Please input your first num:");
scanf("%f",&a[0]);
while(s)
{
printf("\nPlease input your second num:");
scanf("%f",&a[1]);
printf("Choose add(a) sub(s) div(d) mul(f) \n");
i=a[0];
j=a[1];
o=choose_o();
switch(o)
{
case 'a':r=add(a),printf("\n\t%g + %g = %g\n",i,j,r);break;
case 's':r=sub(a),printf("\n\t%g - %g = %g\n",i,j,r);break;
case 'f':r=mul(a),printf("\n\t%g * %g = %g\n",i,j,r);break;
case 'd':r=chu(a),printf("\n\t%g / %g = %g\n",i,j,r);break;
case 'm':mem_r();break;
case 'q':exit(0);
default:printf("\n\tWARNNING:WRONG OPTION!!");break;
}
mem[m]=r;
printf("\t\nDo you want to contiune?(y for yes,n for no,m for list result)\n");
p=getch();
if(p=='y')
{
s=1;
a[0]=r;
m++;
if(m>20) m=0;
}
else
if(p=='m')
{
mem_r();
s=0;
}
else s=0;
}

}
意法半导体(中国)投资有限公司
2023-06-12 广告
单片机,即单片微控制器,也称为单片微型计算机,是将中央处理器(CPU)、存储器(ROM,RAM)、输入/输出接口和其他功能部件集成在一块 在一个小块的集成电路上,从而实现对整个电路或系统的数字式控制。单片机不是完成某一个逻辑功能的芯片,而是... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
凌乱的舞步_杰
2010-05-18 · TA获得超过434个赞
知道小有建树答主
回答量:385
采纳率:0%
帮助的人:166万
展开全部
scanf("%f",&a);这句话没有什么用
另外switch结构中最后最好有一个default语句来表示上面case中情况没有执行到,这样的话就可以省去while(b!='=');这条语句了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
清蒸的鲤鱼
2010-05-20
知道答主
回答量:2
采纳率:0%
帮助的人:0
展开全部
swtich()括号内只能接受int型数据,不能填字符串
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式