下面是一计算器程序,想用VC++做一个界面,只要有输入与输出文本框和计算、推出按钮即可。本人菜鸟没用过VC,请问高人如何将C程序导入VC语气界面结合!
#include "conio.h"
#include "stdio.h"
#include "stdlib.h"
#include "math.h"#define SIZE 100
#define ARRAYSIZE 10int     checkexp(char*);
int     checkparen(char* cp1 );
char*    findpunc(char* cp1 );
int     checkpunc(char* cp1 );    
double    asc2num(char* cp1, char* cp2);
double    seperatewords( char* expression );
char*    finddot(char* cp1, char* cp2);
char*    findmatch(char* cp1 );
double    calculate(double expcp[ARRAYSIZE], char puncs[ARRAYSIZE], char punc );

解决方案 »

  1.   

    程序接上
    main(){
        char expression[SIZE+1];
        double results=0;
        
        window(1,1,80,25 );
        textbackground(BLUE);
        textcolor(WHITE);
        clrscr();    window(1,1,80,5);
        textbackground(WHITE);
        textcolor(BLACK);
        clrscr();
        gotoxy(1,1);
        
        cprintf("this programme can solve an expression including ( ) + - * / ^ ;\r\n" );
        cprintf("if you wana use minus, use(0-xxx) or (.-xxx) to take place of it;\r\n" );
        cprintf("please enter your expressions; no space is expected;\r\n" );
        cprintf("key in 'q' to quit the programme;" );
        
        window(1,7,80,8);
        textbackground(BLUE);
        textcolor(WHITE);  while(1){
            while(bioskey(1)==0);
            clrscr();
            gotoxy(22,7 );
            gets(expression );
            /*check if quit;*/
            if( *expression=='q' ){
                break;
            }
            
            /*check if expression is legal;*/
            if( !checkexp(expression) ){
                continue;
            }
            
            /*recursion*/
            results=seperatewords(expression);
            gotoxy(20,8);
            cprintf("   the result is: %lf\r  ",results);
            gotoxy(22,5);
        }  /*end while*/
    }
      

  2.   

    接上……
    /*codes below used to seperate words and use recursion to 
    solve each expression in "(" and ")" ;*/
    double seperatewords(char* expression ){
        double expcp[ARRAYSIZE];
        char puncs[ARRAYSIZE]="";    char* cp1=expression;
        char* cp2=expression;
        int i=0;
        double* results=NULL;
        
        while( i<ARRAYSIZE ){
            cp2=findpunc(cp1);
            if(*cp2=='(' ){
                expcp[i]=seperatewords(cp2+1 );
                cp2=findmatch(cp2)+1;
            }else if(*cp2==')' ){
                expcp[i]=asc2num(cp1,cp2);
                puncs[i]='\0';
                results=&expcp[i];
                break;
            }else{
                expcp[i]=asc2num(cp1,cp2);
            }
            if(*cp2!='\0'){
                if(*cp2==')' ){
                    results=&expcp[i];
                    break;
                }
                /*store punctuations;*/
                puncs[i]=*cp2++;
                i++;
                cp1=cp2;
            }else{
                /*end of expression;*/
                puncs[i]='\0';
                results=&expcp[i];
                break;
            }
        }
        if (i>=ARRAYSIZE ) {
            cprintf("operands are too many...\nonly calculate the front %d operands\n", ARRAYSIZE);
            puncs[i-1]='\0';
        }
        calculate(expcp, puncs, '^' );
        /* '*' and '/' have the same PRI
        * so they are associative, so it doesn't matter which is calculated first;
        * '+' and '-' is the same;
        */
        calculate(expcp, puncs, '/' );
        calculate(expcp, puncs, '*' );    calculate(expcp, puncs, '+' );
        calculate(expcp, puncs, '-' );
        return *results;
    }
    char* findpunc(char* cp1){
        while( (*cp1>='0'&&*cp1<='9') || *cp1=='.' ){
            cp1++;
        }
        return cp1;
    }
    char* findmatch(char* cp1 ){
        int i=0;
        while(1 ){
            if(*cp1=='(' ) i++;
            else if(*cp1==')' ){
                i--;
                if(i==0) break;
            }
            cp1++;
        }
        return cp1;
    }
      

  3.   

    抱歉代码很长
    /*codes below used to convert nums;*/
    double asc2num(char* cp1, char* cp2){
        double num=0;
        double power=10,powernum=1;
        char* cptemp=NULL;
        char* cprem=NULL;
        
        /*because cp2 points to a punc , -- to point to a number;*/
        cprem=cptemp=finddot( cp1, cp2 );
        /*if exist,digitals in front of dot;*/
        if(cprem>cp1){
            cptemp--;
            for(;cp1<=cptemp;cptemp--){
                num+=(*cptemp-'0')*powernum;
                powernum*=power;
            }
        }
        /*if exist,digitals behind the dot;*/
        if(cprem<cp2){
            cptemp=cprem;
            power=.1;
            powernum=.1;
            cptemp++;
            for(;cptemp<cp2;cptemp++){
                num+=(*cptemp-'0')*powernum;
                powernum*=power;
            }
        }
        return num;
    }
    char* finddot(char* cp1, char* cp2){
        while( *cp1!='.' && cp1<cp2 ){
            cp1++;
        }
        return cp1;
    }/*punc is the punc you wana to calcute with;*/
    double calculate(double expcp[ARRAYSIZE], char puncs[ARRAYSIZE], char punc ){
        /*compute multiplying and dividing;*/
        double* p_operandl=NULL;
        double* p_operandr=NULL;
        double numtemp=0;
        int        i=0;
        int        j=0;
        char*    cp1=puncs;
        char*    cp2;
        while(*cp1!='\0'){
            i=j;
            p_operandl=&expcp[i];
            p_operandr=&expcp[i];
            cp2=cp1+1;
            if(*cp1!='x'){
                p_operandr=&expcp[++i];
                while(*cp2=='x'){
                    cp2++;
                    i++;
                    p_operandr=&expcp[i];
                }            if(*cp1==punc){
                    if (punc=='^' ) {
                        numtemp=pow(*p_operandl, *p_operandr );
                    }else if(punc=='/' ){
                        if(*p_operandr==0){
                            cprintf("sign divider's right operand must not be 0!\n");
                            numtemp=0;
                            break;
                        }
                        numtemp= *p_operandl / *p_operandr;
                    }else if (punc=='*' ) {
                        numtemp= *p_operandl * *p_operandr;
                    }else if (punc=='+' ) {
                        numtemp= *p_operandl + *p_operandr;
                    }else if (punc=='-' ) {
                        numtemp= *p_operandl - *p_operandr;
                    }
                *cp1='x';
                *p_operandr=numtemp;
                }
            }
            cp1++;
            j++;
        }/*end while*/
        return numtemp;
    }