user-0 提问: 【C语言求助】幼儿园计算器 2.0（一位正整数±乘除）相关问题

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 2 楼 user-2的回复:问题：参与运算的只能一位数。式子中不能连乘或连除（如：1+2*3*4）。供参考：#include <stdio.h> #include <math.h> #include <stdlib.h> void main() {        printf("hw 附加题\n");        int i,j=0,result,sz,tmp=0,m;        char t[2];                           //增加字符数组t        printf("请输入参与计算数字的个数：\n");        scanf("%d",&sz);        int size=2*sz-1; //size是所有字符的长度，后面用于控制循环条件         getchar();   //吸收回车~        printf("请输入算式：\n");        char a[1000],c[1000],d[1000],n[1000]; //a[1000] 为原始字符，n[1000]用于记录a[]里的数字部分                                              //c[1000]记录a中乘除运算后的字符（就是说a与c的区别在于c里没有乘除）                                              //d[1000]为c转成整型的数组        int tmp1,tmp2;                //这两个临时变量是整型        gets(a);        //记录a中数字（a-->n)        for(int i=0;i<size;i++)        {             if(a[i]!='\n')             {                 if(a[i]<='9'&&a[i]>='0')                 {                     sscanf(&a[i],"%d",&n[i]);                      printf("n[%d]=%d ",i,n[i]);                 }             }             else break;         }        //记录乘除，并将乘除项算出来        for(i=0;i<size;i++)        {             if(a[i]!='\n')             {                 if(a[i]=='*')                 {                     m=i-(2*tmp+1);  // m=i-(2*tmp+1)是在乘除后生成的新的数的排列序数。如1-2*3   *号位于i=4，进行运算后变成1-6， // 数字6位于i'=3  ==  m=i-(2*tmp+1)=4-(2*0+1)=3 完美印证计算公式~ //tmp是当前乘除号以前的乘除号的数目                     tmp1=n[i-1]*n[i+1]; //如tmp1=2*3                     //printf("tmp1=%d\n",tmp1);                     sprintf(t,"%d",tmp1); //把整型tmp1转化为字符                     c[m] = t[0];                     //printf("c[%d]=%c",m,c[m]);                     tmp++;  //每乘除一次，tmp自增一                     i++;    //i自增一次                 }                 else if(a[i]=='/')                 {                     m=i-(2*tmp+1);                     tmp2=n[i-1]/n[i+1];//没考虑不能整除的情况                     sprintf(t,"%d",tmp2);                     c[m] = t[0];                     tmp++;                     i++;                 }                 else                 {                     m=i-2*tmp; //在当前不是乘除号的情况下，算出当前字符的序数                     c[m]=a[i]; //非乘除时直接赋给c                 }             }             else break;        }        //输出c[m]，以便观察        for(i=0;i<m+1;i++)//for(m=0;m<size;m++)        {            printf("c[%d]=%c\n",i,c[i]);        }        //system("pause");        for(m=0;m<size;m++) //记录c中数字（c——>d)        {             if(c[m]!='\n')             {                 if(c[m]<='9'&&c[m]>='0')                 {                     sscanf(&c[m],"%d",&d[m]);                     printf("c[%d]=%c ",m,c[m]);                     printf("d[%d]=%d ",m,d[m]);                  }             }             else break;          }         result=d[0];         printf("result0=%d\n",result);          //以下为加减计算部分         for(m=0;m<size-2*tmp;m++)  //size-2*tmp为进行乘除后的总字符数         {           if(c[m]!='\n')           {             if(c[m]=='-')               {                   printf("d[%d]=%d ",m+1,d[m+1]);                   result-=d[m+1];               }               else if(c[m]=='+')               {                   result+=d[m+1];               }           }           else break;        }        printf("result=%d",result);          }  //hw 附加题 //请输入参与计算数字的个数： //6 //请输入算式： //1+2*3+1*5+4 //n[0]=1 n[2]=2 n[4]=3 n[6]=1 n[8]=5 n[10]=4 c[0]=1 //c[1]=+ //c[2]=6 //c[3]=+ //c[4]=5 //c[5]=+ //c[6]=4 //c[0]=1 d[0]=1 c[2]=6 d[2]=6 c[4]=5 d[4]=5 c[6]=4 d[6]=4 result0=1 //result=16请按任意键继续. . . 哇⊙∀⊙！谢谢！ 之后细看

user: user-2
content: 问题：参与运算的只能一位数。式子中不能连乘或连除（如：1+2*3*4）。供参考：#include <stdio.h> #include <math.h> #include <stdlib.h> void main() {        printf("hw 附加题\n");        int i,j=0,result,sz,tmp=0,m;        char t[2];                           //增加字符数组t        printf("请输入参与计算数字的个数：\n");        scanf("%d",&sz);        int size=2*sz-1; //size是所有字符的长度，后面用于控制循环条件         getchar();   //吸收回车~        printf("请输入算式：\n");        char a[1000],c[1000],d[1000],n[1000]; //a[1000] 为原始字符，n[1000]用于记录a[]里的数字部分                                              //c[1000]记录a中乘除运算后的字符（就是说a与c的区别在于c里没有乘除）                                              //d[1000]为c转成整型的数组        int tmp1,tmp2;                //这两个临时变量是整型        gets(a);        //记录a中数字（a-->n)        for(int i=0;i<size;i++)        {             if(a[i]!='\n')             {                 if(a[i]<='9'&&a[i]>='0')                 {                     sscanf(&a[i],"%d",&n[i]);                      printf("n[%d]=%d ",i,n[i]);                 }             }             else break;         }        //记录乘除，并将乘除项算出来        for(i=0;i<size;i++)        {             if(a[i]!='\n')             {                 if(a[i]=='*')                 {                     m=i-(2*tmp+1);  // m=i-(2*tmp+1)是在乘除后生成的新的数的排列序数。如1-2*3   *号位于i=4，进行运算后变成1-6， // 数字6位于i'=3  ==  m=i-(2*tmp+1)=4-(2*0+1)=3 完美印证计算公式~ //tmp是当前乘除号以前的乘除号的数目                     tmp1=n[i-1]*n[i+1]; //如tmp1=2*3                     //printf("tmp1=%d\n",tmp1);                     sprintf(t,"%d",tmp1); //把整型tmp1转化为字符                     c[m] = t[0];                     //printf("c[%d]=%c",m,c[m]);                     tmp++;  //每乘除一次，tmp自增一                     i++;    //i自增一次                 }                 else if(a[i]=='/')                 {                     m=i-(2*tmp+1);                     tmp2=n[i-1]/n[i+1];//没考虑不能整除的情况                     sprintf(t,"%d",tmp2);                     c[m] = t[0];                     tmp++;                     i++;                 }                 else                 {                     m=i-2*tmp; //在当前不是乘除号的情况下，算出当前字符的序数                     c[m]=a[i]; //非乘除时直接赋给c                 }             }             else break;        }        //输出c[m]，以便观察        for(i=0;i<m+1;i++)//for(m=0;m<size;m++)        {            printf("c[%d]=%c\n",i,c[i]);        }        //system("pause");        for(m=0;m<size;m++) //记录c中数字（c——>d)        {             if(c[m]!='\n')             {                 if(c[m]<='9'&&c[m]>='0')                 {                     sscanf(&c[m],"%d",&d[m]);                     printf("c[%d]=%c ",m,c[m]);                     printf("d[%d]=%d ",m,d[m]);                  }             }             else break;          }         result=d[0];         printf("result0=%d\n",result);          //以下为加减计算部分         for(m=0;m<size-2*tmp;m++)  //size-2*tmp为进行乘除后的总字符数         {           if(c[m]!='\n')           {             if(c[m]=='-')               {                   printf("d[%d]=%d ",m+1,d[m+1]);                   result-=d[m+1];               }               else if(c[m]=='+')               {                   result+=d[m+1];               }           }           else break;        }        printf("result=%d",result);          }  //hw 附加题 //请输入参与计算数字的个数： //6 //请输入算式： //1+2*3+1*5+4 //n[0]=1 n[2]=2 n[4]=3 n[6]=1 n[8]=5 n[10]=4 c[0]=1 //c[1]=+ //c[2]=6 //c[3]=+ //c[4]=5 //c[5]=+ //c[6]=4 //c[0]=1 d[0]=1 c[2]=6 d[2]=6 c[4]=5 d[4]=5 c[6]=4 d[6]=4 result0=1 //result=16请按任意键继续. . .

user: user-0
content: 麻烦帮忙看看。。。