c/c++实现计算器功能(输入多项表达式 + - x / ,等号输出结果。)

添加了退格操作,给补上了,在文章最后(附源码)

课程设计实现计算器功能 加减乘除

先讲大概思路,模拟计算器,大家用的计算器都是输入一个表达式然后等号 计算器就会输出结果;
基本的加减乘除 和 数字的混合表达式
首先就要想到表达式的加减乘除符号的判断及其优先级还有小括号。

接下来话不多说 上代码:

#include <iostream>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#include<cstring>
using namespace std;
#define MAX 100
char postexp[MAX];//定义的存放操作数的字符数组(就是加减乘除的符号)

用到的头文件

class calculator   //计算器类
{private:typedef struct  //存储数字  {char n[MAX]; int top;}SqStack;typedef struct //存储运算符   {double n[MAX];int top;}SqStack1;public:calculator(){}; //空的构造函数void trans(char *exp,char postexp[]);  //算数表达式转换后缀表达式算法double compvalue(char * postexp);  //计算后缀表达式的值void InitStack(SqStack *&s);  //栈初始化void DestroyStack(SqStack *&s);  //销毁栈bool StackEmpty(SqStack *s); //判断栈空bool Push(SqStack *&s,char e);   //进栈bool Pop(SqStack *&s,char &e);  //出栈bool GetTop(SqStack *s,char &e);  //取栈顶元素//以下成员函数同上,区别为:参数类型与函数名不同 void InitStack1(SqStack1 *&s);   void DestroyStack1(SqStack1 *&s);bool StackEmpty1(SqStack1 *s);bool Push1(SqStack1 *&s,double e);bool Pop1(SqStack1 *&s,double &e);bool GetTop1(SqStack1 *s,double &e);void menu();    //菜单 选择 容错 void Dealy();  //延时函数
};

定义计算器类,然后用到结构体 一个定义给数字,一个定义给运算符。下面是所有成员函数的声明,这里有两部分栈的操作函数(其实内容都一样),分别要用给数字和运算符两个栈,所以要区别名称以调用,(定义两个栈的结构体和两部分栈的操作函数要对应)

void calculator::InitStack(SqStack *&s) //栈初始化
{s = (SqStack *)malloc(sizeof(SqStack));//分配一个顺序栈空间,首地址存放在S中s->top = -1;//栈顶指针置为1
}void calculator::DestroyStack(SqStack *&s)//销毁栈
{free(s);//释放S的对象
}bool calculator::StackEmpty(SqStack *s) //判断栈空
{return(s->top == -1);//判断条件
}bool calculator::Push(SqStack *&s, char e) //进栈
{if (s->top == MAX - 1)//栈上溢出return false;s->top++;//栈顶指针增1s->n[s->top] = e;//元素e放栈顶return true;
}bool calculator::Pop(SqStack *&s, char &e)//出栈
{if (s->top == -1)//栈下溢出return false;e = s->n[s->top];//取栈顶元素s->top--;//栈顶指针减1return true;
}bool calculator::GetTop(SqStack *s, char &e) //取栈顶元素
{if (s->top == -1)//栈下溢出return false;e = s->n[s->top];//取栈顶元素return true;
}void calculator::InitStack1(SqStack1 *&s)
{s = (SqStack1 *)malloc(sizeof(SqStack1));s->top = -1;
}void calculator::DestroyStack1(SqStack1 *&s)
{free(s);
}bool calculator::StackEmpty1(SqStack1 *s)
{return(s->top == -1);
}bool calculator::Push1(SqStack1 *&s, double e)
{if (s->top == MAX - 1)return false;s->top++;s->n[s->top] = e;return true;
}bool calculator::Pop1(SqStack1 *&s, double &e)
{if (s->top == -1)return false;e = s->n[s->top];s->top--;return true;
}bool calculator::GetTop1(SqStack1 *s, double &e)
{if (s->top == -1)return false;e = s->n[s->top];return true;
}

这个没什么说的,就是 栈操作的函数(注意函数名称及其所用的栈定义名称要对应)

void calculator::trans(char *exp,char postexp[])
{char e;SqStack * Optr;   InitStack(Optr);  int i=0;while(* exp!='=') {switch(* exp) {case'(':Push(Optr,'('); exp++;  break;case')':  Pop(Optr,e);while(e!='(')  { postexp[i++]=e;  Pop(Optr,e);}   exp++;break;case'+':case'-':while(!StackEmpty(Optr)){GetTop(Optr,e);  if(e!='(') {postexp[i++]=e;Pop(Optr,e);}elsebreak;}Push(Optr,* exp);exp++;break;case'*':case'/':while(!StackEmpty(Optr)){GetTop(Optr,e);if(e=='*'||e=='/'){postexp[i++]=e;Pop(Optr,e);}else  break;}     Push(Optr,*exp);exp++;break;default: while(* exp>='0' && * exp<='9'){postexp[i++]=* exp;exp++;}postexp[i++]='#';}}while(!StackEmpty(Optr)){ Pop(Optr,e);postexp[i++]=e;}postexp[i]='\0'; DestroyStack(Optr);
}

划重点:这个函数和下一个函数是这个程序的关键, 这个是数据结构中的后缀表达式转换 !!!

就是 将输入的算术表达式转换成后缀表达式的算法,这个当时在看数据结构时看的有点绕,不过还是理解了,打大家可以参考《数据结构教程 第五版 李春葆》

double calculator::compvalue(char * postexp)//计算后缀表达式的值
{double d,a,b,c,e;SqStack1 * Opnd;//定义操作数栈InitStack1(Opnd);//初始化操作数栈while(* postexp!='\0')//postexp字符串未扫描完时循环{switch(* postexp){case'+':               //判定为‘+’号Pop1(Opnd,a);      //出栈元素aPop1(Opnd,b);      //出栈元素bc=b+a;             //计算cPush1(Opnd,c);     //将计算结果c进栈break;case'-':                //判定为‘-’号Pop1(Opnd,a);       //出栈元素aPop1(Opnd,b);       //出栈元素bc=b-a;              //计算cPush1(Opnd,c);      //将计算结果c进栈break;case'*':                //判定为‘*’号Pop1(Opnd,a);       //出栈元素a  Pop1(Opnd,b);       //出栈元素bc=b*a;              //计算cPush1(Opnd,c);      //将计算结果c进栈break;case'/':                //判定为‘/’号Pop1(Opnd,a);       //出栈元素a  Pop1(Opnd,b);       //出栈元素bif(a!=0)            //分母不为零时,计算{c=b/a;          //计算cPush1(Opnd,c);  //将计算结果c进栈break;}else                {printf("\n\t除零错误!\n");   exit(0);        //异常退出}break;default:                //处理数字字符d=0;                //将连续的数字字符转换成对应的数值存放到d中while(* postexp>='0' && * postexp<='9')    //判定为数字字符{d=10*d+*postexp-'0';postexp++;}Push1(Opnd,d);      //将数值d进栈break;}postexp++;              //继续处理其他字符}GetTop1(Opnd,e);            //取栈顶元素eDestroyStack1(Opnd);        //销毁栈return e;                   //返回e
}

重点!

这个是将转换成的后缀表达式计算出来的算法 即我们最重要得出的计算结果

后缀表达式作为参数传进去
《数据结构教程 第五版 李春葆》

void calculator:: menu()   //定义一个calculator类的函数
{   calculator m;
char exp[MAX];
char  choice;
int flag=0;     //使初始值=0//操作界面cout<<"             -------------------------------------------"<<"\t\n";
cout<<"             -                                         -"<<"\t\n";
cout<<"             -------------------------------------------"<<"\t\n";
cout<<"             -             Welcome  TO  Use            -"<<"\t\n";
cout<<"             -------------------------------------------"<<"\t\n";
cout<<"             -                                         -"<<"\t\n";
cout<<"             -                                         -"<<"\t\n";
cout<<"             -------------------------------------------"<<"\t\n";
cout<<"             -                Calculator               -"<<"\t\n";
cout<<"             -------------------------------------------"<<"\t\n";
cout<<"             -                                         -"<<"\t\n";
cout<<"             -------------------------------------------"<<"\t\n";
cout<<"Please enter expression\n";
cout<<"\n     --And add the '=' end of the expression:";//算数表达式 容错机制int f1=0,i;
while(f1==1 || scanf("%s%*c",&exp))// %*c 为吸收回车字符
{int l=strlen(exp);//检测输入字符串的长度赋值给lif(f1==0){i=0;f1=1;}if((exp[i]=='+'||exp[i]=='-'||exp[i]=='*'||exp[i]=='/')&&(exp[i+1]=='+'||exp[i+1]=='-'||exp[i+1]=='*'||exp[i+1]=='/') || (exp[i]>='A' && exp[i]<='Z') || (exp[i]>='a' && exp[i]<='z')||exp[l-1]!='='/*||exp[i]==' '*/){m.Dealy();//调用 报错并延迟画面函数system("cls");m.menu();//清屏;调用函数本身}else if(i==l){break;}i++;
}
m.trans(exp,postexp); //进行表达式转换
//cout<<postexp;   //后缀表达式输出
cout<<"\nValue:"<<m.compvalue(postexp)<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl;  //计算表达式结果
cout<<"A:全清"<<endl;
cout<<"0:退出"<<endl;
cout<<"Please Choose:";//选择操作 容错机制
do
{   if(!(cin>>choice))  //    判断是否输入{ flag=0;}     else    if(!(choice=='A'||choice=='0')){          flag=0;}else{flag=1;break;}cout<<"Error Please re-enter:";//错误提示fflush(stdin);//清楚缓冲区
}while(flag==0);
switch(choice)
{case 'A':system("cls");m.menu();//清屏函数;返回菜单
case '0' :exit(1);break; //退出程序
default:break;
}}

界面,然后就是判断用户输入,不能是字母,不能是两个运算符连续输入,然后输入完表达式必须要在输入等号才能回车运行,再者就是计算完一个表达式后可以选择退出程序 或者全清除 再次运行计算

选择退出程序 或者全清除


fflush(stdin);//清楚缓冲区;
这个东西挺有趣,就是scanf这个东西会有缓冲区,会残留上一次的字符,比如你循环输入或许会陷入死循环,具体大家可以去查一查,

void calculator::Dealy()//画面延迟函数
{int i = 0,j;cout<<"\n          --Warning ,Error expression, Please Re-enter!\t\t\t";for (i = 1; i <= 100; ++i){printf("\b\b\b\b%3d%%",i);for (j = 0; j < 2500000; ++j){i++;i--;}}
}

花里胡哨 其实这个没什么大用,为了流程美观(其实美观不美观我也不知道hhhhhh)

就是错误的输入就提示你错了,请重输,延时这个画面随后又跳回最开始的输入界面重新输入(延时时间可以调整,其实很鸡肋)

int  main() //主函数
{calculator m;m.menu();return 0;
}

主函数,直接调用menu就ok了,,,

运行一下就是这个效果
遗憾的是不支持小数计算


前些日子有个妹子问之前的c/c++计算器功能中好像没有 退格操作.

所以就改了下之前的代码,算是添加了一段代码进去

退格操作

//清除操作 int j=0; //开始接收表达式,置下标为0
while(1)//对表达式每一个字符输入进行判断{char ch;ch = getch();//接收键入的表达式字符if( (ch == 'c'||ch == 'C') && j != 0)//判断键入的字符是否为退格键(c为设置的退格键)//并且表达式第一个收的字符不能为退格键字符(因为没有格可以退){cout<<"\b \b";// 如果是退格操作 ,\b 将光标向前移一位,//(两个\b 退格键字符也要消除,加上被退格的字符,移动两位)//按下c退格键 造成视觉上当前字符被退格的假象exp[--j] = ' ';//因为是视觉上的退格假象,其实被退格的当前字符仍然//存在exp数组中,所以对此字符复制为空}else//如果不是退格键,是正常输入{cout<<ch;//打印该字符exp[j] = ch;//并添加到exp数组中保存j++;}if(ch == '=')//循环终止条件//表达式尾部以  =  号结束表达式输入{break;} }

添加了以上代码
上述代码中 exp[]为接收的用户输入的表达式;

正常运行

退格前

退格后

源码

下面是全部代码

#include <bitset>
#include <iostream>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#include<cstring>
using namespace std;
#define MAX 100
char postexp[MAX];//定义的存放操作数的字符数组(就是加减乘除的符号)class calculator   //计算器类
{private:typedef struct  //存储数字  {char n[MAX]; int top;}SqStack;typedef struct //存储运算符   {double n[MAX];int top;}SqStack1;public:calculator(){}; //空的构造函数void trans(char *exp,char postexp[]);  //算数表达式转换后缀表达式算法double compvalue(char * postexp);  //计算后缀表达式的值void InitStack(SqStack *&s);  //栈初始化void DestroyStack(SqStack *&s);  //销毁栈bool StackEmpty(SqStack *s); //判断栈空bool Push(SqStack *&s,char e);   //进栈bool Pop(SqStack *&s,char &e);  //出栈bool GetTop(SqStack *s,char &e);  //取栈顶元素//以下成员函数同上,区别为:参数类型与函数名不同 void InitStack1(SqStack1 *&s);   void DestroyStack1(SqStack1 *&s);bool StackEmpty1(SqStack1 *s);bool Push1(SqStack1 *&s,double e);bool Pop1(SqStack1 *&s,double &e);bool GetTop1(SqStack1 *s,double &e);void menu();    //菜单 选择 容错 void Dealy();  //延时函数
};
void calculator::InitStack(SqStack *&s) //栈初始化
{s = (SqStack *)malloc(sizeof(SqStack));//分配一个顺序栈空间,首地址存放在S中s->top = -1;//栈顶指针置为1
}void calculator::DestroyStack(SqStack *&s)//销毁栈
{free(s);//释放S的对象
}bool calculator::StackEmpty(SqStack *s) //判断栈空
{return(s->top == -1);//判断条件
}bool calculator::Push(SqStack *&s, char e) //进栈
{if (s->top == MAX - 1)//栈上溢出return false;s->top++;//栈顶指针增1s->n[s->top] = e;//元素e放栈顶return true;
}bool calculator::Pop(SqStack *&s, char &e)//出栈
{if (s->top == -1)//栈下溢出return false;e = s->n[s->top];//取栈顶元素s->top--;//栈顶指针减1return true;
}bool calculator::GetTop(SqStack *s, char &e) //取栈顶元素
{if (s->top == -1)//栈下溢出return false;e = s->n[s->top];//取栈顶元素return true;
}void calculator::InitStack1(SqStack1 *&s)
{s = (SqStack1 *)malloc(sizeof(SqStack1));s->top = -1;
}void calculator::DestroyStack1(SqStack1 *&s)
{free(s);
}bool calculator::StackEmpty1(SqStack1 *s)
{return(s->top == -1);
}bool calculator::Push1(SqStack1 *&s, double e)
{if (s->top == MAX - 1)return false;s->top++;s->n[s->top] = e;return true;
}bool calculator::Pop1(SqStack1 *&s, double &e)
{if (s->top == -1)return false;e = s->n[s->top];s->top--;return true;
}bool calculator::GetTop1(SqStack1 *s, double &e)
{if (s->top == -1)return false;e = s->n[s->top];return true;
}void calculator::trans(char *exp,char postexp[])
{char e;SqStack * Optr;   InitStack(Optr);  int i=0;while(* exp!='=') {switch(* exp) {case'(':Push(Optr,'('); exp++;  break;case')':  Pop(Optr,e);while(e!='(')  { postexp[i++]=e;  Pop(Optr,e);}   exp++;break;case'+':case'-':while(!StackEmpty(Optr)){GetTop(Optr,e);  if(e!='(') {postexp[i++]=e;Pop(Optr,e);}elsebreak;}Push(Optr,* exp);exp++;break;case'*':case'/':while(!StackEmpty(Optr)){GetTop(Optr,e);if(e=='*'||e=='/'){postexp[i++]=e;Pop(Optr,e);}else  break;}     Push(Optr,*exp);exp++;break;case'%':while(!StackEmpty(Optr)){GetTop(Optr,e);if(e=='%'){postexp[i++]=e;Pop(Optr,e);}else  break;}     Push(Optr,*exp);exp++;break;default: while(* exp>='0' && * exp<='9'){postexp[i++]=* exp;exp++;}postexp[i++]='#';}}while(!StackEmpty(Optr)){ Pop(Optr,e);postexp[i++]=e;}postexp[i]='\0'; DestroyStack(Optr);
}
double calculator::compvalue(char * postexp)//计算后缀表达式的值
{double d,a,b,c,e;SqStack1 * Opnd;//定义操作数栈InitStack1(Opnd);//初始化操作数栈while(* postexp!='\0')//postexp字符串未扫描完时循环{switch(* postexp){case'+':               //判定为‘+’号Pop1(Opnd,a);      //出栈元素aPop1(Opnd,b);      //出栈元素bc=b+a;             //计算cPush1(Opnd,c);     //将计算结果c进栈break;case'-':                //判定为‘-’号Pop1(Opnd,a);       //出栈元素aPop1(Opnd,b);       //出栈元素bc=b-a;              //计算cPush1(Opnd,c);      //将计算结果c进栈break;case'*':                //判定为‘*’号Pop1(Opnd,a);       //出栈元素a  Pop1(Opnd,b);       //出栈元素bc=b*a;              //计算cPush1(Opnd,c);      //将计算结果c进栈break;case'/':                //判定为‘/’号Pop1(Opnd,a);       //出栈元素a  Pop1(Opnd,b);       //出栈元素bif(a!=0)            //分母不为零时,计算{c=b/a;          //计算cPush1(Opnd,c);  //将计算结果c进栈break;}else                {printf("\n\t除零错误!\n");   exit(0);        //异常退出}break;case'%':{                //判定为‘*’号Pop1(Opnd,a);       //出栈元素a  Pop1(Opnd,b); int s = 0;s = (int)a;  int q = 0;q = (int)b;     //出栈元素bint l = 0;l = q % s;c=(double)l;              //计算cPush1(Opnd,c);      //将计算结果c进栈break;}default:                //处理数字字符d=0;                //将连续的数字字符转换成对应的数值存放到d中while(* postexp>='0' && * postexp<='9')    //判定为数字字符{d=10*d+*postexp-'0';postexp++;}Push1(Opnd,d);      //将数值d进栈break;}postexp++;              //继续处理其他字符}GetTop1(Opnd,e);            //取栈顶元素eDestroyStack1(Opnd);        //销毁栈return e;                   //返回e
}void calculator:: menu()   //定义一个calculator类的函数
{   calculator m;
char exp[MAX];
char  choice;
int flag=0;     //使初始值=0//操作界面cout<<"             -------------------------------------------"<<"\t\n";
cout<<"             -                                         -"<<"\t\n";
cout<<"             -------------------------------------------"<<"\t\n";
cout<<"             -             Welcome  TO  Use            -"<<"\t\n";
cout<<"             -------------------------------------------"<<"\t\n";
cout<<"             -                                         -"<<"\t\n";
cout<<"             -                                         -"<<"\t\n";
cout<<"             -------------------------------------------"<<"\t\n";
cout<<"             -                Calculator               -"<<"\t\n";
cout<<"             -------------------------------------------"<<"\t\n";
cout<<"             -                                         -"<<"\t\n";
cout<<"             -------------------------------------------"<<"\t\n";
cout<<"Please enter expression\n";
cout<<"\n     --And add the '=' end of the expression:";//清除操作
int j=0;
while(1){char ch;ch = getch();if( (ch == 'c'||ch == 'C') && j != 0){cout<<"\b \b";exp[--j] = ' ';}else{cout<<ch;exp[j] = ch;j++;}if(ch == '='){break;} }//算数表达式 容错机制
int f1=1,i=0;
while(f1==1)
{int l=strlen(exp);//检测输入字符串的长度赋值给l
/*  if(f1==0){i=0;f1=1;}*/if(i==l){break;}if( (exp[i]=='+'||exp[i]=='-'||exp[i]=='*'||exp[i]=='/'||exp[i]=='%') && (exp[i+1]=='+'||exp[i+1]=='-'||exp[i+1]=='*'||exp[i+1]=='/'||exp[i+1]=='%') )
//  || (exp[i]>='A' && exp[i]<='Z') || (exp[i]>='a' && exp[i]<='z')||exp[l-1]!='='/*||exp[i]==' '*/{m.Dealy();//调用 报错并延迟画面函数system("cls");m.menu();//清屏;调用函数本身}if( (exp[i]>='A' && exp[i]<='Z') || (exp[i]>='a' && exp[i]<='z')/*||exp[i]==' '*/ ){m.Dealy();//调用 报错并延迟画面函数system("cls");m.menu();//清屏;调用函数本身}i++;
}
m.trans(exp,postexp); //进行表达式转换
//cout<<postexp;   //后缀表达式输出
long b = m.compvalue(postexp);
cout<<"\nValue:"<<m.compvalue(postexp)<<endl;
cout<<"Integer value is "<<long(b)<<endl<<endl<<endl;
cout<<"OCT: "<<std::oct<<b<<endl;
cout<<"DEC: "<<std::dec<<b<<endl;
cout<<"HEX: "<<std::hex<<b<<endl;
cout<<"BIN: "<<bitset<16>(b)<<endl<<endl<<endl<<endl;  //计算表达式结果
cout<<"A:Clear"<<endl;
cout<<"0:Exit"<<endl;
cout<<"Please Choose:";//选择操作 容错机制
do
{
cin>>choice;    if(!(choice=='A'||choice=='0')){          flag=0;}else{break;}cout<<"Error Please re-enter:";//错误提示fflush(stdin);//清楚缓冲区
}while(flag==0);
switch(choice)
{case 'A':system("cls");m.menu();//清屏函数;返回菜单
case '0' :exit(1);break; //退出程序
default:break;
}}
void calculator::Dealy()//画面延迟函数
{int i = 0,j;cout<<"\n          --Warning ,Error expression, Please Re-enter!\t\t\t";for (i = 1; i <= 100; i++){printf("\b\b\b\b%3d%%",i);for (j = 0; j < 2500000; j++){}}
}
int  main() //主函数
{calculator m;m.menu();return 0;
}

闲来无事,唉~

c/c++实现计算器功能(输入多项表达式 + - x / %,等号输出结果与 2 ,8,16,10进制结果,全清除) 退格操作相关推荐

  1. java计算器源码有转换16进制和10进制功能

    上源码 布局 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <Linear ...

  2. 自定义Matlab功能函数——10进制整数矩阵转二进制字符矩阵

    不同版本matlab的m语言语法会略有不同,这里使用的版本为Matlab 2021a. 一. 10进制整数矩阵转二进制字符矩阵 因为FPGA只能识别二进制,所以在做Verilog仿真时经常需要matl ...

  3. 第H题 输入N求N的阶乘的10进制表示的长度

    输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3. Input 输入N(1 <= N <= 10^6) Output 输出N的阶乘的长度 Sample Input 6 ...

  4. Verilog数字系统设计——10进制计数器,具有异步复位功能

    Verilog数字系统设计--10进制计数器,具有异步复位功能 题目 编程实现10进制计数器,具有异步复位功能,十位和个位用8421BCD码表示,各端口定义如下图所示: 仔细考虑端口定义中每个端口的含 ...

  5. 使用指针输入一段16进制字符串,将其转化为10进制

    举例,输入fff,输出4095 方法1 #include<iostream> #include<iomanip> #include<cstring> using n ...

  6. c语言16进制按10进制输出,C语言编程:写一个函数,输入一个16进制数,输出相应的10进制数。...

    满意答案 chengexin 2013.05.27 采纳率:59%    等级:11 已帮助:10599人 #include #include #include #define N 1000 char ...

  7. php 10进制位数保持,php 任意进制的数转换成10进制功能实例

    /** * 任意进制的数转换成十进制 * @param * @arrange (512.笔记) jb51.cc * 显示转换数字所涉及的步骤 * 从任何基数(如八进制或十六进制)到基数10 * 请参阅 ...

  8. 2进制与10进制在计算机中的应用,二进制转十进制和十六进制计算器

    (1) 十进制转换为二进制,分为整数部分和小数部分 ① 整数部分 方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为 ...

  9. 怎么用计算机的计算器转换进位制,计算机进制换算(进制转换计算器)

    我想知道进制的转换方法, 8 16 10进制转换成2进制都是除2. 但其他进制之间. 进数转换:1.二进制数.十六进制数转换为十进制数(按权求和) 二进制数.十六进制数转换为十进制数的规律是相同的.把 ...

最新文章

  1. c语言启动程序句柄无效,电脑中玩英雄联盟提示“句柄无效”是怎么回事
  2. 用Virtual PC 2007安裝Fedora Core 9
  3. Java基础知识➣面向对象(八)
  4. 启明云端方案分享| ESP32-C3智能网关应用解决方案
  5. 数组工具类Arrays
  6. CF1131 G. Most Dangerous Shark(DP+单调栈优化)
  7. php 获取内容页图片,织梦CMS如何从列表页获取内容页的图片
  8. 万有引力的意思_从牛顿的苹果到牛顿的大炮:万有引力定律
  9. 每日算法系列【LeetCode 1004】最大连续1的个数 III
  10. greenplum数据库建表及分区
  11. 机械硬盘显示位置不可用无法访问介质受写入保护
  12. 模拟退火算法求解--顺序约束的路由部署问题
  13. PHP所支持的时区列表
  14. 项目反应理论 EM估计
  15. 华硕路由域名访问_使用金万维宽带通云解析实现用友T+异地访问
  16. 基于VMWare虚拟机搭建Linux集群
  17. 300辆无人车200万公里路测零事故,首次揭秘背后整套安全保障方案
  18. 计算机数学的外文翻译,计算机 数学 外文翻译 外文文献 英文文献 模糊随机森林.doc...
  19. JAVA练习 家庭记账本
  20. 星上维智能科技CEO左作人,机器视觉会越来越智能化

热门文章

  1. c++ 函数声明后面加上 const 有什么作用
  2. UI自动化测试与接口自动化测试区别
  3. 2894 Txx考试
  4. SAP-BAPI物料主数据修改毛重净重
  5. 一分钟了解英语表达:某方法是基于什么假设
  6. java强制下线 session_Session管理之超时设置和强制下线
  7. (附源码)计算机毕业设计SSM基于web的火车订票管理系统
  8. Tomcat配置Https(默认端口8443)
  9. python在哪里写编程_Python编程入门介绍
  10. 用数据分析的指标拆解思路如何从股市了解市场