栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

可以扩展二次方的C程序

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

可以扩展二次方的C程序

#include <stdio.h>#include <stdlib.h>#include <ctype.h>#define BUFFSIZE 128typedef struct _exp { //Integral expression    int n; //Max of order    int *k;//coefficient list(array)# k[0] as constant, k[n] as x^n} Exp;void print(Exp *exp);const char *extract(const char *str, char *outbuff);Exp *makeExp(const char *str);void freeExp(Exp *exp);Exp *convert(const char *str);Exp *mul(Exp *a, Exp *b);Exp *calc(const char *expStr);int main(){    char buff[BUFFSIZE];    Exp *exp;    printf("input expression Eg.(x+1)(x+3)n>");    fgets(buff, sizeof(buff)/sizeof(char), stdin);    exp=calc(buff);    print(exp);    freeExp(exp);    return 0;}void print(Exp *exp){    int i, n = exp->n;    for(i=n;i>=0;--i){        int k = exp->k[i];        if(k==0)continue;        if(k<0) printf("-");        if(k>0 && i!=n) printf("+");        if(k<0) k*=-1;//k=|k|        if(i!=0){ if(k!=1)     printf("%dx", k); else     printf("x");        }        if(i>1) printf("^%d", i);        if(i==0) printf("%d", k);    }    printf("n");}const char *extract(const char *str, char *outbuff){//pull out in parenthesis to outbuff, and remove space    while(isspace(*str))        ++str;    if(*str=='') return NULL;    while(*str!='(')++str;    while(*++str!=')')        if(!isspace(*str)) *outbuff++=*str;    *outbuff='';    return ++str;}Exp *makeExp(const char *str){    Exp *exp;    char buff[BUFFSIZE];    exp = (Exp*)malloc(sizeof(Exp));    exp->n = 0;    exp->k = (int*)calloc(1,sizeof(int));    while(*str){        int k,n;        char *p;        k=(int)strtol(str, &p, 10);        if(k==0){//never constant zero e.g(x+0)is invalid, valid E.g (x) if(p[0]=='-'){     k = -1;     ++p; } else if(p[0]=='+') {     k = 1;     ++p; } else      k = 1;        }        if(*p==''){ exp->k[0]=k;//constant part break;        }        if(*p=='x'){ n = (p[1]=='^') ? (int)strtol(&p[2], &p, 10):1; if(exp->n < n){     int i;     exp->k = (int*)realloc(exp->k, (n+1)*sizeof(int));     for(i=n;i>exp->n;--i)         exp->k[i]=0;     exp->n = n; } exp->k[n] = k; if(*p=='' || p[1]=='')break; else{     str = (n!=1)? p:p+1; }        } else { exp->k[0]=k; str = p;        }    }    return exp;}void freeExp(Exp *exp){    free(exp->k);    free(exp);}Exp *convert(const char *str){    Exp *exp;    exp=makeExp(str);    return exp;}Exp *mul(Exp *a, Exp *b){    Exp *ret;    int i,j;    ret=(Exp*)malloc(sizeof(Exp));    ret->n = a->n + b->n;    ret->k = (int*)calloc(ret->n + 1, sizeof(int));    for(i=0;i<=a->n;++i){        for(j=0;j<=b->n;++j){ ret->k[i+j] += a->k[i] * b->k[j];        }    }    return ret;}Exp *calc(const char *expStr){    Exp *exp;    char buff[BUFFSIZE];    const char *p=expStr;    exp = (Exp*)malloc(sizeof(Exp));    exp->n = 0;    exp->k = (int*)malloc(sizeof(int));   *exp->k = 1;    while(NULL!=(p=extract(p, buff))){        Exp *e,*wk;        wk=exp;        e=convert(buff);        exp=mul(wk, e);        freeExp(wk);        freeExp(e);    }    return exp;}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/437212.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号