鱼C论坛

 找回密码
 立即注册
查看: 2169|回复: 1

[技术交流] 用C写了个简单计算器,附上源码,有点乱大神勿喷!

[复制链接]
发表于 2015-6-13 23:14:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  1. #include<stdlib.h>
  2. #include<string.h>
  3. #include <ctype.h>
  4. int main(void)
  5. {       
  6.     char num1[222]={0};//存放从键盘接受的所有字符
  7.     char *p=num1 ;   //定义一个指向num1[]的指针p
  8.     char n[222]={0};//存放从NUM1中分离出来的数字字符
  9.     int n1[222]={0};//存放转化后的整形数字准备参加运算
  10.     char c[222]={0};//存放从NUM1中分离出来的运算字符
  11.     unsigned int i,j,k;//设置3个循环变量
  12.     //第一部分,从接盘接受输入的字符放入num1[]中

  13.     while(1)
  14.     {       
  15.         
  16.         *p=getchar();
  17.         
  18.         if(*p=='\n')
  19.         {
  20.             break;
  21.         }
  22.         p++;
  23.     }
  24.     //调试输出接受到的数组
  25.     printf("%s\n",num1);

  26.     //第2部分,开始分离数组num1[]中的数字字符
  27.     j=0 ;
  28.     k=0 ;
  29.     p=num1;
  30.     for(i=0;i <= strlen(num1);i++)
  31.     {
  32.         
  33.         if( isalnum(num1[i]) != 0)
  34.         {

  35.             n[j]=*p;    //将字符数字放入字符数组n[]中;
  36.             j++;
  37.         }
  38.         else
  39.         {
  40.             n[j]='\0';
  41.             n1[k]=atoi(n);   //将字符转换成整形放入n1[]中
  42.             k++;
  43.             j=0;
  44.         }
  45.         p++ ;//指向下一位
  46.     }
  47.    
  48.     //调试输出下n1[]数组是否取到所有数字;
  49.     for(i=0;i<k-1;i++)
  50.     {
  51.         printf("%d ",n1[i]);
  52.     }
  53.     printf("\n");
  54.     //第3部分,开始分离数组num1[]中运算符号放入c[]中
  55.     j=0 ;
  56.     k=0 ;
  57.     p=num1;
  58.     for(i=0;i <= strlen(num1);i++)
  59.     {

  60.         if( isalnum(num1[i]) != 0)
  61.         {
  62.             
  63.         }
  64.         else
  65.         {
  66.         
  67.             c[k]=*p  ; //将运算符放入c[]中
  68.             k++;
  69.             
  70.         }
  71.         p++ ; //指向下一位
  72.     }
  73.     //调试输出下c[]数组是否取到所有运算符;
  74.     printf("%s\n",c) ;


  75.     // 第四部分,进行运算
  76.     while(1)
  77.     {

  78.    
  79.         for(i=0;i<=strlen(c);i++)
  80.         {
  81.             if(c[i]=='*' || c[i]=='/') //乘除运算
  82.             {
  83.                 if(c[i]='*')
  84.                 {
  85.                     n1[i+1]=n1[i]*n1[i+1] ;
  86.                 }
  87.                 else
  88.                 {
  89.                     n1[i+1]=n1[i]/n1[i+1] ;
  90.                 }
  91.                
  92.                 for(j=i;j<=strlen(c)+1;j++)  //数字字符数组从参加运算的后一位开始左移一位
  93.                 {
  94.                     n1[j]=n1[j+1] ;
  95.                     c[j]=c[j+1] ;
  96.                 }
  97.                
  98.                 break;
  99.             }
  100.         }
  101.         //打印出当前的计算结果表达式
  102.         for(i=0;i<=strlen(c);i++)
  103.         {
  104.             printf("%d%c",n1[i],c[i]);
  105.         }
  106.         j=1 ;
  107.         for(i=0;i<=strlen(c);i++)
  108.         {
  109.             if(c[i]=='*'||c[i]=='/')
  110.             {
  111.                 j=0 ;         //继续循环
  112.             }
  113.         }
  114.         if(j==1)
  115.         {
  116.             break ;         //如果都运算完了,就退出循环
  117.         }
  118.     }//while的结束括号
  119.    


  120.     while(1)
  121.     {


  122.         for(i=0;i<strlen(c);i++)
  123.         {
  124.             if(c[i]=='+' || c[i]=='-') //加减运算
  125.             {
  126.                 if(c[i]='+')
  127.                 {
  128.                     n1[i+1]=n1[i]+n1[i+1] ;
  129.                 }
  130.                 else
  131.                 {
  132.                     n1[i+1]=n1[i]-n1[i+1] ;
  133.                 }

  134.                 for(j=i;j<strlen(c);j++)  //数字字符数组从参加运算的后一位开始左移一位
  135.                 {
  136.                     n1[j]=n1[j+1] ;
  137.                     c[j]=c[j+1] ;
  138.                 }
  139.                
  140.                 break;
  141.             }
  142.         }
  143.         //打印出当前的计算结果表达式
  144.         for(i=0;i<=strlen(c);i++)
  145.         {
  146.             printf("%d%c",n1[i],c[i]);
  147.         }
  148.         j=1 ;
  149.         for(i=0;i<=strlen(c);i++)
  150.         {
  151.             if(c[i]=='+'||c[i]=='-')
  152.             {
  153.                 j=0 ;         //继续循环
  154.             }
  155.         }
  156.         if(j==1)
  157.         {
  158.             break ;  //如果都运算完了,就退出循环
  159.         }
  160.     }//while的尾括号
  161.    
  162. //上面4则运算完成了,现在结果在n1[0]里面
  163.     //第5步,输出结果
  164.     printf("运算结果为:%d",n1[0]) ;

  165.     getchar();
  166.     return 0;

  167. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-6-14 12:09:22 | 显示全部楼层
还不错吧,有界面么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-17 10:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表