鱼C论坛

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

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

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

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

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

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

    while(1)
    {        
        
        *p=getchar();
        
        if(*p=='\n')
        {
            break;
        }
        p++;
    }
    //调试输出接受到的数组
    printf("%s\n",num1);

    //第2部分,开始分离数组num1[]中的数字字符
    j=0 ;
    k=0 ;
    p=num1;
    for(i=0;i <= strlen(num1);i++)
    {
        
        if( isalnum(num1[i]) != 0)
        {

            n[j]=*p;    //将字符数字放入字符数组n[]中;
            j++;
        }
        else
        {
            n[j]='\0';
            n1[k]=atoi(n);   //将字符转换成整形放入n1[]中
            k++;
            j=0;
        }
        p++ ;//指向下一位
    }
    
    //调试输出下n1[]数组是否取到所有数字;
    for(i=0;i<k-1;i++)
    {
        printf("%d ",n1[i]);
    }
    printf("\n");
    //第3部分,开始分离数组num1[]中运算符号放入c[]中
    j=0 ;
    k=0 ;
    p=num1;
    for(i=0;i <= strlen(num1);i++)
    {

        if( isalnum(num1[i]) != 0)
        {
            
        }
        else
        {
        
            c[k]=*p  ; //将运算符放入c[]中
            k++;
            
        }
        p++ ; //指向下一位
    }
    //调试输出下c[]数组是否取到所有运算符;
    printf("%s\n",c) ;


    // 第四部分,进行运算 
    while(1)
    {

    
        for(i=0;i<=strlen(c);i++)
        {
            if(c[i]=='*' || c[i]=='/') //乘除运算
            {
                if(c[i]='*')
                {
                    n1[i+1]=n1[i]*n1[i+1] ;
                }
                else
                {
                    n1[i+1]=n1[i]/n1[i+1] ;
                }
                
                for(j=i;j<=strlen(c)+1;j++)  //数字字符数组从参加运算的后一位开始左移一位
                {
                    n1[j]=n1[j+1] ;
                    c[j]=c[j+1] ;
                }
                
                break;
            }
        }
        //打印出当前的计算结果表达式
        for(i=0;i<=strlen(c);i++)
        {
            printf("%d%c",n1[i],c[i]);
        }
        j=1 ;
        for(i=0;i<=strlen(c);i++)
        {
            if(c[i]=='*'||c[i]=='/')
            {
                j=0 ;         //继续循环
            }
        }
        if(j==1)
        {
            break ;         //如果都运算完了,就退出循环
        }
    }//while的结束括号
    


    while(1)
    {


        for(i=0;i<strlen(c);i++)
        {
            if(c[i]=='+' || c[i]=='-') //加减运算
            {
                if(c[i]='+')
                {
                    n1[i+1]=n1[i]+n1[i+1] ;
                }
                else
                {
                    n1[i+1]=n1[i]-n1[i+1] ;
                }

                for(j=i;j<strlen(c);j++)  //数字字符数组从参加运算的后一位开始左移一位
                {
                    n1[j]=n1[j+1] ;
                    c[j]=c[j+1] ;
                }
                
                break;
            }
        }
        //打印出当前的计算结果表达式
        for(i=0;i<=strlen(c);i++)
        {
            printf("%d%c",n1[i],c[i]);
        }
        j=1 ;
        for(i=0;i<=strlen(c);i++)
        {
            if(c[i]=='+'||c[i]=='-')
            {
                j=0 ;         //继续循环
            }
        }
        if(j==1)
        {
            break ;  //如果都运算完了,就退出循环
        }
    }//while的尾括号
    
//上面4则运算完成了,现在结果在n1[0]里面
    //第5步,输出结果
    printf("运算结果为:%d",n1[0]) ;

    getchar();
    return 0;

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 01:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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