小学生计算器上各种按键的作用?

小学生计算器上各种按键的作用?,第1张

(CM) 清除存储值                                          

(RM) 取出存储值

(M-) 当前显示值与存储值相减并保存              

(M+) 把目前显示的值放在存储器中,中断数字输入

(0-9) 按钮分别为输入数字0-9 字符键              

() 钮用来输入小数点

(+/-) 钮用来转换当前值的正负                

(√) 求平方根                  

(%) 求百分比

(→)提供退格键功能                

(C)按钮清除刚才的输入                  

(=) 确认计算结果

归零 (AC)清除全部数据结果和运算符                

(CE)清除现有寄存器中的值并显示"0" 数据重新输入

扩展资料:

小学最好别用计算器

数学运算能力培养是从很小的时候开始的

过早使用计算器会抹杀孩子运算乃至速算能力的萌芽,计算器是用来解决手工很难算出来的,或是要花费很大代价以及时间才能算出来的,中高考都不给用计算器,我觉得这点也是为学生好。

如果从小学开始就形成对计算器的依赖,那么即使你思维逻辑能力再强,我相信以后的数学成绩也不会很好,因为运算是连接过程与结果的桥梁。

所有数据都可以用分数来表示,比如整数可以认为分母为1,这样,所有数据可以这样保存(数据结构为:)

struct 
{
    int z;//分子
    int m;//分母
};

我没写过具体的可以计算分数的计算器,下面是加减乘除和括号的计算器源代码,你参考一下,如果看懂了应该不难改,应该是数据结构课程里堆栈这一块的内容。

测试样例:

输入:

2(3+6(8/2+1))

输出:

66

#include<stdioh>
#include<stringh>
#include<stdlibh>
typedef struct priority
{
char symb;
int pri;
}priority;
priority kuPriority[7]={{'+',1},{'-',1},{'',2},{'/',2},{'(',3},{')',3},{'\0',0}};
char co[100];
char symbol[100];
int numb[100];
int sPoint,nPoint;
int sHead,nHead;
int findPri(char symb)
{
for(int i=0;i<7;i++)
{
if(kuPriority[i]symb==symb)
return kuPriority[i]pri;
}
return -1;
}
int calc(int a,int b,char symb)
{
switch(symb)
{
case '+':return a+b; 
case '-':return a-b;
case '':return ab; 
case '/':
if(b==0)
{
printf("除数为0\n");
system("pause");
exit(0);
}
else 
{
return a/b;
}
}
}
void f()
{
int len;
int i,a;
int flag,negative;
scanf("%s",co);//scanf能解决行末空格问题,gets不行 
len=strlen(co);
sPoint=nPoint=0;
//栈的准备
int sum=0;
flag=-1;
negative=1;

for(i=0;i<len;i++)
{
if(i==0 && co[0]=='-')
{
negative=-1;
continue;
}
if(co[i]<='9' && co[i]>='0')
{
if(i!=0)
{
if(co[i-1]==')')
{
printf("不合法:右括号后面不能是数字\n");
system("pause");
return;
}
}
flag=0;
sum=sum10+co[i]-'0';
if(i==len-1)
{
numb[nPoint++]=sumnegative;
sum=0;
negative=1;
}
else if(!(co[i+1]<='9' && co[i+1]>='0'))
{
numb[nPoint++]=sumnegative;
sum=0;
negative=1;
}
}
else //是运算符 
{
if(co[i]=='(' ||co[i]==')')
{
if(co[i]=='('&&flag==0)
{
printf("不合法:左括号前面不能是数字\n");
system("pause");
return;

}
else if(co[i]==')'&&flag!=0&&co[i-1]!=')') 
{
printf("不合法:右括号前面不能是非右括号运算符\n") ;
system("pause");
return;
}
flag=2;
}
else//不是括号 
{

if(sPoint!=0)
{
if(co[i-1]=='('&&co[i]!='(')//非左括号运算符前面不能是左括号
{
if(co[i]=='-')//负号
{
negative=-1;
continue; 

else if(co[i]=='+')
{
continue;
}
if(co[i]!='(')
{
printf("不合法:左括号后面不能有非括号运算符\n") ;
system("pause");
return;
 } 

}
if(flag==1)
{
printf("不合法:运算符前后不能有除括号以外的运算符\n") ;
system("pause");
return;
}
flag=1; 
}
symbol[sPoint++]=co[i];
}
}
//栈准备完毕 
a=0; 
for(i=0;i<=sPoint;i++)
{
if(symbol[i]=='(')
{
a++;
}
else if(symbol[i]==')')
{
a--;
}
if(a==-1)
{
printf("括号符不匹配\n");
system("pause");
return;
}
}
if(a!=0)
{
printf("括号符不匹配\n");
system("pause");
return;
}
//检查匹配括号完毕 
if(sPoint!=0)
{
sPoint--;
}
if(nPoint!=0)
{
nPoint--;
}

//开始计算
int formal,current;

sHead=-1;
nHead=0;
if(symbol[0]=='(')
{
nHead--;
}
while(1)
{
sHead++;

if(nPoint==0)
{
printf("%d",numb[0]);
break;
}
if(sHead==0)
{
continue;
}
formal=findPri(symbol[sHead-1]);
current=findPri(symbol[sHead]);
if(formal==-1 || current==-1)
{
printf("非法字符\n");
system("pause");
return;
}


if(symbol[sHead]!='(')//非左括号
{
nHead++; 

if(current==3) //括号
{
if(symbol[sHead]=='(')
{
continue;
}
else
{
//消掉括号 
if(symbol[sHead-1]!='(')
{
numb[nHead-1]=calc(numb[nHead-1],numb[nHead],symbol[sHead-1]);
for(a=nHead;a<nPoint;a++)
{
numb[a]=numb[a+1];
}
numb[a]=0;
nPoint--;

for(a=sHead-1;a<sPoint;a++)
{
symbol[a]=symbol[a+1];
}
symbol[sPoint]='\0';
sPoint--;
nHead=0;
sHead=-1;
if(symbol[0]=='(')
{
nHead--;
}
continue;//重新开始 
}
else
{
for(a=sHead-1;a<=sPoint-2;a++)
{
symbol[a]=symbol[a+2];
}
symbol[sPoint-1]=symbol[sPoint]='\0';
sPoint-=2;
sHead=-1;
nHead=0;
if(symbol[0]=='(')
{
nHead--;
}
continue;//重新开始 
}

}

if(formal<current)
{
continue;
}
else if(formal>=current && formal!=3)//且不是括号 
{
numb[nHead-1]=calc(numb[nHead-1],numb[nHead],symbol[sHead-1]);
for(a=nHead;a<nPoint;a++)
{
numb[a]=numb[a+1];
}
numb[nPoint]=0;
nPoint--;

for(a=sHead-1;a<sPoint;a++)
{
symbol[a]=symbol[a+1];
}
symbol[sPoint]='\0';
sPoint--;
sHead=-1;
nHead=0;
if(symbol[0]=='(')
{
nHead--;
}
continue; 
}
}
}
int main()
{
while(1)
{
f();
printf("\n");
 } 
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12782845.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存