📄 qiqidlg.cpp
字号:
}
else
{
m_qplay3=m_qq;//这俩句是不可少的,是程序的真正核心!当触发.的按钮后,b=false把执行带到了小数部分中,
m_qq=0; //则各个数字按钮就随之进入小数输入中,进入后我先把123.125的整数部分保存在m_qplay中
//其余的小数点后面的数就按小数输入,因为前面整数的输入是按整数输入的
m_qq=m_qplay3+9*1/pow(10,i);
i++;
}
UpdateData(false);
}
void CQiqiDlg::OnButton10() ///这里很特殊,是0的按钮,无论是整数还是小数,尤其是小数的问题最为头痛!
{
// d=10;///这是为Backspace准备的!
if(b!=false)
{
m_qq=m_qq*10;
}
else
{
m_qplay3=m_qq;
m_qq=0;
m_qq=m_qplay3+1*1/pow(10,i)-1*1/pow(10,i);//这里是难点!如0.102中的0.10如何作到!我再减去多加的0.02(以例为例)即可
i++;
}
UpdateData(false);
}
void CQiqiDlg::OnButton11() //正负号
{
// TODO: Add your control notification handler code here
m_qq=-m_qq;
UpdateData(false);
// m_qq=0;
// if(a==7) c=0;
}
void CQiqiDlg::OnButton12() ////小数的运用是本程序的第二个至关重要的核心
{
// TODO: Add your control notification handler code here
// m_qq=m_qq*1/10;有错误!!!!!!!!!
// m_qplay3=m_qq;
// m_qq=0;
//UpdateData(false);
// i=0;
b=false;//这是一个标记//
i=1;///这是对i的初始化,要不初始化的话,只要打开计算机当第一次使用小数时,系统就自动赋下小数点记位的i值,它分配的数过大,所以会出现如1#end
// UpdateData(false);
}///在这里并不进行小数的程序,只是设定一些开关,真正的小数代码有各个数据按钮来完成!·
void CQiqiDlg::OnButton18() //倒数
{
// TODO: Add your control notification handler code here
m_qq=1/m_qq;
UpdateData(false);
// m_qq=0;本想刷新一下,但由于与连续的四则运算不兼容。所以刷新的工作就全权有刷新按钮来实现
// if(a==7) c=0;
}
void CQiqiDlg::OnButton16() //次方的计算
{
// TODO: Add your control notification handler code here
m_qplay1=m_qq;
m_qq=0;
i=0;//结束上一个小数的输入后,把小数记位回0。
//m_qq=pow(m_qplay3,m_qq);在这儿写这句话是错误的,在这我已经把m_qq赋值为0了!
UpdateData(false);
a=5;////也要输入俩个数,所以这个与四则运算一样,也在=号中完成!
// if(a==7) c=0;
}
void CQiqiDlg::OnButton14() //开根号
{
// TODO: Add your control notification handler code here
if(m_qq>=0)
{
m_qq=sqrt(m_qq);
UpdateData(false);
}
else
{
AfxMessageBox("根号下不能为负值!!!请重新输入!");
m_qq=0;
UpdateData(false);
return;
}
// if(a==7) c=0;
// m_qq=0;////
}
void CQiqiDlg::OnButton13() //除法
{
// TODO: Add your control notification handler code here
m_qplay1=m_qq;//把输入完毕的第一个数具给一个变量,来做到储存的目的。
//这样在输入第二个数据时可还利用m_qq,保证程序不变。
m_qq=0;//使其值恢复为0,即初始值。
i=0;//这样做的目的是为了刷新一下小数点,否则,记下一个数时会错!!
a=1;//这样做的目的是标记一下,当按下加号是其标记是1。以便在编辑=号代码时好识别是进行的哪种运算。
// b=true;
// if(a==7) c=0;
}//此程序的代码还可解释为:点击+-*/运算符后,取值,换句话说就是表示第一个数据输入结束
void CQiqiDlg::OnButton15() //乘法
{
// TODO: Add your control notification handler code here
m_qplay1=m_qq;
m_qq=0;
i=0;
a=2;
// if(a==7) c=0;
// b=true;
}
void CQiqiDlg::OnButton17() //减法
{
// TODO: Add your control notification handler code here
m_qplay1=m_qq;
m_qq=0;
i=0;
a=3;
// if(a==7) c=0;
// b=true;
}
void CQiqiDlg::OnButton19() //加法
{
// TODO: Add your control notification handler code here
m_qplay1=m_qq;
m_qq=0;
i=0;
a=4;//这样做的目的是标记一下,当按下加号是其标记是1。以便在编辑=号代码时好识别是进行的哪种运算。
//这样就简化了在=号程序中识别的难点。
//主要原因是加减乘除运算必须在=号中实现,因为第二个去值必须在出发等号时才可提取!
// if(a==7) c=0;
// b=true;
}
void CQiqiDlg::OnButton20() //=的程序是本程序的第四个核心 主要用在四则运算中,其余如sin,cos..都是自己的消息响应函数来直接输出
{
// TODO: Add your control notification handler code here
// m_qplay2=m_qq;//我为什么敢这样做,而不担心当输入的是两个数时,m_qq可能是第一个值。因为在这是消息响应函数,只有出发按钮才可执行。
//我把上面一行隐去的原因是在对数运算中底不能为负值,我要进行判断!只是为了a==6这一行!
if(a==1) {m_qplay2=m_qq; m_qq=m_qplay1/m_qplay2;}
else if(a==2) {m_qplay2=m_qq; m_qq=m_qplay1*m_qplay2;}
else if(a==3) {m_qplay2=m_qq; m_qq=m_qplay1-m_qplay2;}
else if(a==4) {m_qplay2=m_qq; m_qq=m_qplay1+m_qplay2;}
else if(a==5) {m_qplay2=m_qq; m_qq=pow(m_qplay1,m_qplay2);}
else if(a==6)
{
if(m_qq>0)
{
m_qplay2=m_qq;
m_qq=log10(m_qplay1)/log10(m_qplay2);
}
else if (m_qq=1)
{
AfxMessageBox("对数函数的底不能为1!!!请重新输入!");
m_qplay2=m_qq=0;
UpdateData(false);
return;
}
else
{
AfxMessageBox("对数函数的底不能为负!!!请重新输入!");
m_qplay2=m_qq=0;
UpdateData(false);
return;
}
}
// else if(a==7) c=0;
UpdateData(false);
b=true;//退出小数模式,否则,再输入时就自动成了小数模式,输入的永远是是小数。
// m_qq=0;
m_qplay1=0;
m_qplay2=0;
m_qplay3=0;
a=0;
i=0;
}
void CQiqiDlg::OnButton21() //还原
{
// TODO: Add your control notification handler code here
m_qq=0;
m_qplay1=0;
m_qplay2=0;
m_qplay3=0;
a=0;
i=0;
// c=0;
b=true;
UpdateData(false);
}
void CQiqiDlg::OnButton22() //正弦
{
// TODO: Add your control notification handler code here
m_qq=sin(m_qq);
UpdateData(false);
// if(a==7) c=0;
}
void CQiqiDlg::OnButton23() //余弦
{
// TODO: Add your control notification handler code here
m_qq=cos(m_qq);
UpdateData(false);
// if(a==7) c=0;
}
void CQiqiDlg::OnButton24() //正切
{
// TODO: Add your control notification handler code here
m_qq=tan(m_qq);
UpdateData(false);
// if(a==7) c=0;
}
void CQiqiDlg::OnButton25() //余切
{
// TODO: Add your control notification handler code here
m_qq=1/tan(m_qq);
UpdateData(false);
// if(a==7) c=0;
}
void CQiqiDlg::OnButton26() //阶乘
{
// TODO: Add your control notification handler code here
if(m_qq>=1)//不要忽略掉数学函数成立的条件
{
double n=1;
for(int l=1;l<=m_qq;l++)
{
n=n*l;///用一个变量代替m_qq;
}
m_qq=n;
UpdateData(false);
}
else
{
AfxMessageBox("阶乘函数的定义域必须是正整数!!!请重新输入!");
m_qq=0;
UpdateData(false);///这样做是清空编辑框,为了重新输入!
return;
}
// if(a==7) c=0;
}
void CQiqiDlg::OnButton27() //lnx
{
// TODO: Add your control notification handler code here
if(m_qq>0)
{
m_qq=log(m_qq);
UpdateData(false);
}
else
{
AfxMessageBox("自然对数的定义域是非负的!!!请重新输入!"); //其后()内是弹出对话框中的内容!不过它只是
//对话框中一种提示信息的对话框,但不能进行修改和编辑
m_qq=0;
UpdateData(false);
return;
}
// if(a==7) c=0;
}
void CQiqiDlg::OnButton28() //lgx
{
// TODO: Add your control notification handler code here
if(m_qq>0)
{
m_qq=log10(m_qq);
UpdateData(false);
}
else
{
AfxMessageBox("常用对数的定义域是非负的!!!请重新输入!"); //其后()内是弹出对话框中的内容!不过它只是
//对话框中一种提示信息的对话框,但不能进行修改和编辑
m_qq=0;
UpdateData(false);
return;
}
// if(a==7) c=0;
}
void CQiqiDlg::OnButton29() //logaX
{
// TODO: Add your control notification handler code here
if (m_qq>0)
{
m_qplay1=m_qq;
m_qq=0;
i=0;
a=6;////也要输入俩个数,所以这个与四则运算一样,也在=号中完成!
}
else
{
AfxMessageBox("常用对数的定义域是非负的!!!请重新输入!");
m_qq=0;
UpdateData(false);
return;
}
// if(a==7) c=0;
}
//void CQiqiDlg::OnButton30() //Backspace
//{
// TODO: Add your control notification handler code here
// c+=1;//是Backspace按钮的点击积家器//点击一下累积一次
// m_qq=int m_qq/10;//点击一下879变为87。由将879除以10后成87.9然后强制转化为整型数来做到! m_qq=int pow(m_qq,c);
// int q=int m_qq/pow(10,1);//本以为可以将其强制转化为整形,这个问题解决了但由于m_qq是double型int不能等于double型!所以我要再定义一个整形的数来实现转换,这个整形数定义为此函数的局部变量。
// q=int m_qq;
// q=int q/pow(10,c);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///本以为可将其强制转化为整型但系统不承认!!另行方法:::::就是识别一下输入的数据最后一位是谁,所以我要标记一下各个数据按钮!!再定义一个标记符,其为成员数据与a,b,c一样。
// while(c!=0)///用while循环,这样就可以在不知道循环几次的的条件下进行循环!只要按下Backspace按钮就可。
// {
// switch(d)
// {
// case 1:m_qq=(m_qq-(m_qq-1))/10;
// case 2:m_qq=(m_qq-(m_qq-2))/10;
// case 3:m_qq=(m_qq-(m_qq-3))/10;
// case 4:m_qq=(m_qq-(m_qq-4))/10;
// case 5:m_qq=(m_qq-(m_qq-5))/10;
// case 6:m_qq=(m_qq-(m_qq-6))/10;
// case 7:m_qq=(m_qq-(m_qq-7))/10;
// case 8:m_qq=(m_qq-(m_qq-8))/10;
// default:m_qq=m_qq/10;
// }////如879变成87就是(879-(879-9))/10;
// }
// d=(m_qq/10)
//////////////////////////////////////////////////////////////////////////////////////////////////////////
///执行不了,因为我没做到识别谁是最后一位!!!!!!!!!!!!
// UpdateData(false);
// a=7;//这样作的目的是为将此按钮的点击累加器c值在对下一个数操作时使之为0。重新开始!但在这作不到所以必须在判断一个数输完的按钮中做,即=-+*/号以及开根号等等的运算中,即只要是运算都要处理!
//}
void CQiqiDlg::OnButton31() //CE
{
// TODO: Add your control notification handler code here
m_qq=0;
UpdateData(false);
b=true;
}
void CQiqiDlg::OnButton32() //绝对值
{
// TODO: Add your control notification handler code here
if(m_qq<0)
m_qq=-m_qq;
else
m_qq=m_qq;
UpdateData(false);
b=true;
}
void CQiqiDlg::OnButton33() //π
{
// TODO: Add your control notification handler code here
m_qq=3.1415926;
UpdateData(false);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -