当前位置:文档之家› C语言编写的计算器

C语言编写的计算器

#include
#include
#include
#include
float add(float a,float b); /*调用函数实现加法*/
float sub(float a,float b); /*调用函数实现减法*/
float mul(float a,float b); /*调用函数实现乘法*/
float dv(float a,float b); /*调用函数实现除法*/
void delay(void); /*仅起延时作用*/
typedef struct jisuanqi //定义结构体存储计算式并对结构体起另名
{
float a; //第一个数
char c; //运算符
float b; //第二个数
char e; //存储等号
float d; //结果数
} AA;
void main()
{
FILE *fp; //用文件永久式储蓄计算式及结果
AA num[100];
float a,b; //a,b分别存储两个数
char ch; //ch用于选择是否继续进行计算
char t='1'; //t用于选择操作类型
int i=0,j; //i为结构体数组下标,j应用于输出结构体元素
printf("\t*********************欢迎使用本计算器!*********************\n");
printf("\t使用说明:数字+enter+运算符+enter+数字+enter,才可得正确结果\n");
delay(); //仅起延时作用
do
{
system("cls"); //清除屏幕
loop: printf("\t请选择需操作的类型:\n\t1、计算式子2、输出并查看计算式及其结果3、退出计算器\n\t\t\t\t");
//定位在这里可避免查看计算式时清除屏幕
scanf("\n%c",&t); //特别注意这里的\n,我始终不明白,但又必须加这\n
getchar();
switch(t) //选择操作类型
{
case '1': //输入计算式及计算和存储
{
ch='1';
{
while(ch=='1') /*用于循环操作*/
{
printf("\t************************************************************\n\t");
printf("输入的数字是:");
scanf("%f",&a);
num[i].a=a;
num[i].e='=';
printf("\t输入的计算符是:");
getchar();
scanf("%c",&ch);
num[i].c=ch;
printf("\t");
switch(ch) /*用于选择算术类型*/
{
case '+':printf("输入的数字是:");scanf("%f",&b);num[i].b=b;num[i].d=add(a,b);
printf("\t************************************************************\n\t");printf("\t%f%c%f=%f\n",num[i].a,num[i].c,num[i].b,num[i].d);break;
case '-':printf("输入的数字是:");scanf("%f",&b);num[i].b=b;num[i].d=sub(a,b);
printf("\t************************************************************\n\t");printf("\t%f%c%f=%f\n",num[i].a,num[i].c,num[i].b,num[i].d);break;
case '*':printf("输入的数字是:");scanf("%f",&b);num[i].b=b;num[i].d=mul(a,b);
printf("\t************************************************************\n\t");printf("\t%f%c%f=%f\n",num[i].a,num[i].c,num[i].b,num[i].d);break;
case '/':printf("输入的数字是:");scanf("%f",&b);
{
if(b==0)
{printf("\tError,divided by zero.\n");break;}
else
{num[i].b=b;num[i].d=dv(a,b);
printf("\t*******************************

*****************************\n\t");printf("\t%f%c%f=%f\n",num[i].a,num[i].c,num[i].b,num[i].d);break;}
}
default:printf("\tError");
}
printf("\t是否继续计算:1是2不是\n"); //选择是否循环输入计算式
getchar();
printf("\t");
scanf("%c",&ch);
system("cls"); //清除屏幕
if(ch=='1') i++; //继续进行计算时,自增结构体数组元素下标
else break;
}
}
break;
}
case '2':
{
for(j=0;j<=i;j++) //循环输出计算式及结果
{
printf("\t%f%c%f=%f\n",num[j].a,num[j].c,num[j].b,num[j].d);
}
break; //跳出switch选择
}
case '3':printf("\t将退出,请稍后......\n\t");break;
default:printf("\tillegal operator.\n");
}
if(t=='3') break; //退出do-while循环,跳出goto循环,退出计算器程序
if(t=='2') goto loop; //不继续计算时,选择是否要查看计算式及结果
}while(t!=3);
if((fp=fopen("Calculator.txt","wb+"))==NULL) //把计算式储存在文件中,以便保存和查看
{printf("cannot open file\n");return;return;}
for(j=0;j<=i;j++)
if(fwrite(&num[j],sizeof(struct jisuanqi),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
float add(float a,float b) /*调用函数实现加法*/
{
float m=0,n;
char ch;
m=a+b;
return m;
}
float sub(float a,float b) /*调用函数实现减法*/
{
float m=0,n;
char ch;
m=a-b;
return m;

}
float mul(float a,float b) /*调用函数实现乘法*/
{
float m=0,n;
char ch;
m=a*b;
return m;
}
float dv(float a,float b) /*调用函数实现除法*/
{
float m=0,n;
char ch;
m=a/b;
return m;
}
void delay(void) /*仅起延时作用*/
{
Sleep(5000);
}


相关主题
文本预览
相关文档 最新文档