回复 57楼 QQ346957135
return 后面加break 不是多余的么?
程序代码:#include<stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
//函数声明:
double NumberParse(int temp_number_integer[],int temp_number_decemal[],int integer,int decemal);
//此函数根据提供的整数部分和小数部分及(integer整数部分的数字个数)和(decemal小数部分的数字个数)返回实数
double NumberDeal(double number_one,double number_two,char deal);//实现两个实数的加减乘除的函数
void main()
{
int temp_number_integer[200];//整数部分
int temp_number_decemal[200];//小数部分
int integer =0;//输入整数部分的计数器
int decemal =0;//输入小数部分的计数器
int sign =1;//用来标记小数点
char deal;//记录运算符
char type;//临时变量,存储每次输入的字符
double number_one=0;
double number_two=0;//对两个实数作初始化
int k=0;//用来标记负号
printf("这是一个加减乘除计算器,(输入格式为:4*5=):\n");//注意格式
while((type=getch())!=27)//循环输入,输入为ESC时跳出循环
{
if(type==46)//小数点,46为小数点的ASCII码
{
printf("%c",'.');
sign =0;
}
else if(type>=49&&type<=57)//0到9
{
printf("%d",type-48);
if(sign==1)//输入整数部分
{
temp_number_integer[integer] =(int)type-48;
integer++;
}
else//输入小数部分
{
temp_number_decemal[decemal] =(int)type-48;
decemal++;
}
}
else
{
if(type=='=')//等号情况为最后输出,各值要进行初始化操作用于下次循环
{
number_two =NumberParse(temp_number_integer,temp_number_decemal,integer,decemal);
integer =0;
decemal =0;
sign =1;
printf("%c",'=');
printf("%f",NumberDeal(number_one,number_two,deal));
printf("%c",10);
number_one=0;
number_two=0;
}
else if(k==0&&type==45)//输入为负号且不是作为运算符
{
printf("%c",type);
k=1;
}
else //其他情况
{
printf("%c",type);
deal =type;
if(number_one==0&&k==1)//第一个数为负实数
{
number_one =(-1)*NumberParse(temp_number_integer,temp_number_decemal,integer,decemal);
integer =0;
decemal =0;
sign =1;//初始化
}
else//第一个数为正实数
{
number_one =NumberParse(temp_number_integer,temp_number_decemal,integer,decemal);
integer =0;
decemal =0;
sign =1;//初始化
}
}
}
}
exit(0);
}
//以下较为简单,不做注释
double NumberParse(int temp_number_integer[200],int temp_number_decemal[200],int integer,int decemal)
{
int i=0;
double number=0;
while(integer>0)
{
number=number + temp_number_integer[i]*pow((double)10,integer-1);//pow(x,y),计算x的次幂
integer --;
i++;
}
if(decemal!=0)
{
i=0;
while(i<=decemal)
{
number =number + temp_number_decemal[i]*pow(0.1,i+1);
decemal --;
i++;
}
}
return number;
}
double NumberDeal(double number_one,double number_two,char deal)
{
switch(deal)
{
case '+' :return number_one+number_two;break;
case '-' :return number_one-number_two;break;
case '*' :return number_one*number_two;break;
case '/' :return number_one/number_two;break;
}
}