📄 szys.c
字号:
while(j--!=0) m=m*1/10;
t2=t2+m;
swap=swap->link;
i++;
}
}
else if(!isPoint_included(temp)){
while(swap->link->info!='_'){swap=swap->link;i++;}
swap=temp;
while(swap->link->info!='_'&&--i!=0) {
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*10;
t2=t2+m;
swap=swap->link;
}
if(i==0||i==-1) {t2=t2+(NumberType)swap->link->info-'0';swap=swap->link;}
}
if(p->link->info=='+') tmark1=t1+t2;
else if(p->link->info=='-') tmark1=t1-t2;
else if(p->link->info=='*') tmark1=t1*t2;
else if(p->link->info=='/') tmark1=t2/t1;
p=p->link;
if(p->link->info=='+') t=t+tmark1;
else if(p->link->info=='-') t=t-tmark1;
else if(p->link->info=='*') t=t*tmark1;
else if(p->link->info=='/') t=t/tmark1;
p=p->link;
q=ID;
}
/********************************************************************/
/*********************************************************************/
else if(isOperator(p->info)&&!isOperator(p->link->info)&&Calculator_underline(p->link)==1){
temp1=p;
while(!isOperator(p->link->info)) p=p->link;
swap=temp1; t1=0;i=0; /* calculate t1 */
if(isPoint_included(temp)){ /*include point */
while(swap->link->info!='.'){swap=swap->link;i++;}
swap=temp;
while(swap->link->info!='.'&&--i!=0){
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*10;
t1=t1+m;
swap=swap->link;
}
if(i==0) {t1=t1+(NumberType)swap->link->info-'0'; swap=swap->link->link;}
i=1;
while(swap->link->info!='_'){
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*1/10;
t1=t1+m;
swap=swap->link;
i++;
}
}
else if(!isPoint_included(temp)){
while(swap->link->info!='_'){swap=swap->link;i++;}
swap=temp1;
while(swap->link->info!='_'&&--i!=0) {
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*10;
t1=t1+m;
swap=swap->link;
}
if(i==0) {t1=t1+(NumberType)swap->link->info-'0';swap=swap->link;}
}
if(p->link->info=='+') t=t+t1;
else if(p->link->info=='-') t=t-t1;
else if(p->link->info=='*') t=t*t1;
else if(p->link->info=='/') t=t/t1;
p=p->link;
}
/******************************************************************/
/********************************************************************/
else if(!isOperator(p->info) && !isOperator(p->link->link->info)&&Calculator_underline(p->link)==2){
PNode ID;
if(q==pllist->base){ /* find q */
while(q!=p){
if(q->info=='_') temp=q;
q=q->link;
}
q=temp;
}
swap=temp=pllist->base; /*find temp */
while(temp->link!=q){
if(temp->link->info=='_') swap=temp;
temp=temp->link;
}
ID=temp=swap;
swap=q;
t1=t2=0;i=0;
if(isPoint_included(q)){ /*include point */
while(swap->link->info!='.'){swap=swap->link;i++;}/*calculate t1*/
swap=q;
while(swap->link->info!='.'&&--i!=0){
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*10;
t1=t1+m;
swap=swap->link;
}
if(i==0) {t1=t1+(NumberType)swap->link->info-'0'; swap=swap->link->link;}
i=1;
while(swap->link->info!='_'){
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*1/10;
t1=t1+m;
swap=swap->link;
i++;
}
}
else if(!isPoint_included(q)){
while(swap->link->info!='_'){swap=swap->link;i++;}
swap=q;
while(swap->link->info!='_'&&--i!=0) {
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*10;
t1=t1+m;
swap=swap->link;
}
if(i==0) {t1=t1+(NumberType)swap->link->info-'0';swap=swap->link;}
}
swap=temp;
if(isPoint_included(temp)){ /*include point */
while(swap->link->info!='.'){swap=swap->link;i++;}
swap=temp;
while(swap->link->info!='.'&&--i!=0){
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*10;
t2=t2+m;
swap=swap->link;
}
if(i==0) {t2=t2+(NumberType)swap->link->info-'0'; swap=swap->link->link;}
i=1;
while(swap->link->info!='_'){
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*1/10;
t2=t2+m;
swap=swap->link;
i++;
}
}
else if(!isPoint_included(temp)){
while(swap->link->info!='_'){swap=swap->link;i++;}
swap=temp;
while(swap->link->info!='_'&&--i!=0) {
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*10;
t2=t2+m;
swap=swap->link;
}
if(i==0) {t2=t2+(NumberType)swap->link->info-'0';swap=swap->link;}
}
/*calculate t*/
if(p->link->info=='+') tmark1=t1+t2;
else if(p->link->info=='-') tmark1=t1-t2;
else if(p->link->info=='*') tmark1=t1*t2;
else if(p->link->info=='/') tmark1=t2/t1;
temp1=p=p->link;
/*//////////////////////dealt with the second part/////////*/
t1=t2=0;i=0;
while(!isOperator(p->link->info)) p=p->link;
while(q->link!=p){ /*find p*/
if(q->link->info=='_') temp=q->link;
q=q->link;
}
q=temp;
temp=temp1;
if(isPoint_included(q)){ /*include point */
while(swap->link->info!='.'){swap=swap->link;i++;}
swap=q;
while(swap->link->info!='.'&&--i!=0){
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*10;
t1=t1+m;
swap=swap->link;
}
if(i==0) {t1=t1+(NumberType)swap->link->info-'0'; swap=swap->link->link;}
i=1;
while(swap->link->info!='_'){
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*1/10;
t1=t1+m;
swap=swap->link;
i++;
}
}
else if(!isPoint_included(q)){
swap=q;
while(swap->link->info!='_'){swap=swap->link;i++;}
swap=q;
while(swap->link->info!='_'&&--i>0) {
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*10;
t1=t1+m;
swap=swap->link;
}
if(i==0||i==-1) {t1=t1+(NumberType)swap->link->info-'0';swap=swap->link;}
}
swap=temp;
if(isPoint_included(temp)){ /*include point */
while(swap->link->info!='.'){swap=swap->link;i++;}
swap=temp;
while(swap->link->info!='.'&&--i!=0){
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*10;
t2=t2+m;
swap=swap->link;
}
if(i==0) {t2=t2+(NumberType)swap->link->info-'0'; swap=swap->link->link;}
i=1;
while(swap->link->info!='_'){
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*1/10;
t2=t2+m;
swap=swap->link;
i++;
}
}
else if(!isPoint_included(temp)){
while(swap->link->info!='_'){swap=swap->link;i++;}
swap=temp;
while(swap->link->info!='_'&&--i>0) {
j=i;
m=(NumberType)swap->link->info-'0';
while(j--!=0) m=m*10;
t2=t2+m;
swap=swap->link;
}
if(i==0||i==-1) {t2=t2+(NumberType)swap->link->info-'0';swap=swap->link;}
}
/*calculate tmark2*/
if(p->link->info=='+') tmark2=t1+t2;
else if(p->link->info=='-') tmark2=t1-t2;
else if(p->link->info=='*') tmark2=t1*t2;
else if(p->link->info=='/') tmark2=t2/t1;
p=p->link;
/*calculate t*/
if(p->link->info=='+') t=tmark1+tmark2;
else if(p->link->info=='-') t=tmark1-tmark2;
else if(p->link->info=='*') t=tmark1*tmark2;
else if(p->link->info=='/') t=tmark1/tmark2;
/*dealt with the left*/
p=p->link;
q=ID;
}
}
printf("The result is %f\n",t);
return(t);
}
void main()
{
char s[100];
int i;
PLinkList pllist;
PLinkStack plstack;
pllist=Create_LinkListPointer();
plstack=Create_LinkStackPointer();
Create_LinkList(pllist);
Create_LinkStack(plstack);
printf("Input the operator:\n");
scanf("%s",&s);
for(i=0;i<strlen(s);i++){
if(!isOperator(s[i])) push_LinkList(pllist,s[i]);
else if(isOperator(s[i]) && plstack->top==plstack->base) {
if(!isOperator(pllist->top->info)) push_underline(pllist);
push_stack(plstack,s[i]);
}
else {
if(s[i]=='(') push_stack(plstack,s[i]);
else if(plstack->top->info=='('){
push_underline(pllist);
push_stack(plstack,s[i]);
}
/*//////////////////////////////////////////////////////////////////////////////////*/
else if((s[i]=='+' || s[i]=='-') && (plstack->top->info=='*' || plstack->top->info=='/') && bracket_included(plstack)){
if(!isOperator(pllist->top->info)) push_underline(pllist);
pop_stack_until_bracket(pllist,plstack);
push_stack(plstack,s[i]);
}
else if((s[i]=='+' || s[i]=='-') && (plstack->top->info=='*' || plstack->top->info=='/') && !bracket_included(plstack)){
if(!isOperator(pllist->top->info)) push_underline(pllist);
pop_all(pllist,plstack);
push_stack(plstack,s[i]);
}
/*////////////////////////////////////////////////////////////////////////////////////////////////////*/
else if((s[i]=='*' || s[i]=='/')&&(plstack->top->info=='+'|| plstack->top->info=='-')){
if(!isOperator(pllist->top->info)) push_underline(pllist);
push_stack(plstack,s[i]);
}
/*////////////////////////////////////////////////////////////////////////////////////////////////////*/
else if((s[i]=='+' && plstack->top->info=='+') || (s[i]=='-' && plstack->top->info=='-')){
if(!isOperator(pllist->top->info)) push_underline(pllist);
push_stack(plstack,s[i]);
}
/*///////////////////////////////////////////////////////////////////////////////////*/
else if(((s[i]=='+' && plstack->top->info=='-') || (s[i]=='-' && plstack->top->info=='+')) && bracket_included(plstack)){
if(!isOperator(pllist->top->info)) push_underline(pllist);
pop_stack_until_bracket(pllist,plstack);
push_stack(plstack,s[i]);
}
else if(((s[i]=='+' && plstack->top->info=='-') || (s[i]=='-' && plstack->top->info=='+')) && !bracket_included(plstack)){
if(!isOperator(pllist->top->info)) push_underline(pllist);
pop_all(pllist,plstack);
push_stack(plstack,s[i]);
}
else if(((s[i]=='+' && plstack->top->info=='+') || (s[i]=='-' && plstack->top->info=='-')) && bracket_included(plstack)){
if(!isOperator(pllist->top->info)) push_underline(pllist);
pop_stack_until_bracket(pllist,plstack);
push_stack(plstack,s[i]);
}
else if(((s[i]=='+' && plstack->top->info=='+') || (s[i]=='-' && plstack->top->info=='-')) && !bracket_included(plstack)){
if(!isOperator(pllist->top->info)) push_underline(pllist);
pop_all(pllist,plstack);
push_stack(plstack,s[i]);
}
/*///////////////////////////////////////////////////////////////////////////////*/
else if(((s[i]=='*'&& plstack->top->info=='/')||(s[i]=='/'&& plstack->top->info=='*'))&&bracket_included(plstack)&&bracket_included_and_lower(plstack)){
if(!isOperator(pllist->top->info)) push_underline(pllist);
pop_stack_until_bracket_lower(pllist,plstack);
push_stack(plstack,s[i]);
}
else if(((s[i]=='*' && plstack->top->info=='/') || (s[i]=='/' && plstack->top->info=='*')) && bracket_included(plstack) && !bracket_included_and_lower(plstack)){
if(!isOperator(pllist->top->info)) push_underline(pllist);
pop_stack_until_bracket(pllist,plstack);
push_stack(plstack,s[i]);
}
else if(((s[i]=='*' && plstack->top->info =='/') ||(s[i]=='/' && plstack->top->info=='*')) && !bracket_included(plstack) && islower_included(plstack)){
if(!isOperator(pllist->top->info)) push_underline(pllist);
pop_until_lower(pllist,plstack);
push_stack(plstack,s[i]);
}
else if(((s[i]=='*' && plstack->top->info=='/') ||(s[i]=='/' && plstack->top->info=='*')) && !bracket_included(plstack) && !islower_included(plstack)){
if(!isOperator(pllist->top->info)) push_underline(pllist);
pop_all(pllist,plstack);
push_stack(plstack,s[i]);
}
else if(((s[i]=='*'&& plstack->top->info=='*')||(s[i]=='/'&& plstack->top->info=='/'))&&bracket_included(plstack)&&bracket_included_and_lower(plstack)){
if(!isOperator(pllist->top->info)) push_underline(pllist);
pop_stack_until_bracket_lower(pllist,plstack);
push_stack(plstack,s[i]);
}
else if(((s[i]=='*' && plstack->top->info=='*') || (s[i]=='/' && plstack->top->info=='/'))&& bracket_included(plstack) && !bracket_included_and_lower(plstack)){
if(!isOperator(pllist->top->info)) push_underline(pllist);
pop_stack_until_bracket(pllist,plstack);
push_stack(plstack,s[i]);
}
else if(((s[i]=='*' && plstack->top->info =='*') ||(s[i]=='/' && plstack->top->info=='/'))&& !bracket_included(plstack) && islower_included(plstack)){
if(!isOperator(pllist->top->info)) push_underline(pllist);
pop_until_lower(pllist,plstack);
push_stack(plstack,s[i]);
}
else if(((s[i]=='*' && plstack->top->info=='*') ||(s[i]=='/' && plstack->top->info=='/'))&& !bracket_included(plstack) && !islower_included(plstack)){
if(!isOperator(pllist->top->info)) push_underline(pllist);
pop_all(pllist,plstack);
push_stack(plstack,s[i]);
}
/*////////////////////////////////////////////////////////////////////////////////////*/
else if(s[i]==')'){
if(!isOperator(pllist->top->info)) push_underline(pllist);
pop_stack_until_bracket(pllist,plstack);
pop_one(plstack);
}
}
}
pop_all(pllist,plstack);
print_llist(pllist);
Calculator(pllist);
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -