zoukankan      html  css  js  c++  java
  • 补:四则运算代码

    #include "stdafx.h"
    #include "stdio.h"
    #include "stdlib.h"
    #include <string.h>
    #include<math.h>
    #define MAX_LINE 1024
    struct shuzi{
    int fenzi;
    int fenmu;
    };
    int numi=0,stacki=0,result;

    struct shuzi num[1000];
    char stack[100],s[MAX_LINE],s1[MAX_LINE],s2[MAX_LINE],*q,*p,*P;
    int gcd(int a, int b)
    {
    if(!b) return a;
    else return gcd(b, a%b );
    }
    int chnum(char c)
    {
    switch (c)
    {
    case '0':return -1;
    case '(':return 0;
    case '+':return 1;
    case '-':return 1;
    case '*':return 2;
    case '/':return 2;
    case '^':return 3;
    default:exit(1);
    }
    }
    void change()
    {
    q=s1;
    p=s;
    stack[0]='0';
    while (*p!='')
    {
    while ((*p>='0'&&*p<='9') || *p=='|')
    *q++=*p++;
    *q++=' ';
    while (*p==' ')
    p++;
    if (*p=='')
    break;
    if (*p==')')
    {
    while (stack[stacki]!='(')
    {
    *q=stack[stacki--];
    q++;
    *q=' ';
    q++;
    }
    stacki--;
    p++;
    }
    else if (*p=='(')
    {
    p++;
    stack[++stacki]='(';
    q--;
    }
    else
    {
    if (chnum(*p)>=chnum(stack[stacki])) stack[++stacki]=*p;
    else
    {
    while (chnum(*p)<=chnum(stack[stacki]))
    {
    *q=stack[stacki--];
    q++;
    *q=' ';
    q++;
    }
    stack[++stacki]=*p;
    }
    p++;
    }
    }
    while (stacki>0)
    {
    *q=stack[stacki--];
    q++;
    *q=' ';
    q++;
    }
    while (*p==' ')
    p++;
    }
    int readnum()
    {
    int s=0;
    while (*q>='0'&&*q<='9')
    {
    s=s*10+*q-'0';
    q++;
    }
    return s;
    }
    void cal()
    {
    q=s1;
    char c;
    int i;
    double s;
    int gongyueshu;
    num[numi].fenzi=readnum();
    //q++;
    if(*q=='|'){
    q++;
    num[numi].fenmu=readnum();
    }
    else
    num[numi].fenmu=1;
    q++;
    while (*q!='')
    {
    if(*q==' ')
    q++;
    while (*q=='+'||*q=='-'||*q=='*'||*q=='/'||*q=='^')
    {
    c=*q;
    q++;
    switch(c)
    {
    case '+':
    num[numi-1].fenzi = num[numi-1].fenzi * num[numi].fenmu;
    num[numi].fenzi = num[numi].fenzi * num[numi-1].fenmu;
    num[numi-1].fenmu = num[numi-1].fenmu * num[numi].fenmu;
    num[numi-1].fenzi = num[numi-1].fenzi + num[numi].fenzi;
    gongyueshu=gcd(num[numi-1].fenzi,num[numi-1].fenmu);
    num[numi-1].fenzi=num[numi-1].fenzi/gongyueshu;
    num[numi-1].fenmu=num[numi-1].fenmu/gongyueshu;
    numi--;
    break;
    case '-':
    num[numi-1].fenzi = num[numi-1].fenzi * num[numi].fenmu;
    num[numi].fenzi = num[numi].fenzi * num[numi-1].fenmu;
    num[numi-1].fenmu = num[numi-1].fenmu * num[numi].fenmu;
    num[numi-1].fenzi = num[numi-1].fenzi - num[numi].fenzi;
    gongyueshu=abs(gcd(num[numi-1].fenzi,num[numi-1].fenmu));
    num[numi-1].fenzi=num[numi-1].fenzi/gongyueshu;
    num[numi-1].fenmu=num[numi-1].fenmu/gongyueshu;
    numi--;
    break;
    case '*':
    num[numi-1].fenzi = num[numi-1].fenzi * num[numi].fenzi;
    num[numi-1].fenmu = num[numi-1].fenmu * num[numi].fenmu;
    gongyueshu=gcd(num[numi-1].fenzi,num[numi-1].fenmu);
    num[numi-1].fenzi=num[numi-1].fenzi/gongyueshu;
    num[numi-1].fenmu=num[numi-1].fenmu/gongyueshu;
    numi--;
    break;
    case '/':
    num[numi-1].fenzi = num[numi-1].fenzi * num[numi].fenmu;
    num[numi-1].fenmu = num[numi-1].fenmu * num[numi].fenzi;
    gongyueshu=gcd(num[numi-1].fenzi,num[numi-1].fenmu);
    num[numi-1].fenzi=num[numi-1].fenzi/gongyueshu;
    num[numi-1].fenmu=num[numi-1].fenmu/gongyueshu;
    numi--;
    break;
    }
    }
    while (*q>='0'&&*q<='9')
    {
    num[++numi].fenzi=readnum();
    if(*q=='|'){
    q++;
    num[numi].fenmu=readnum();
    }
    else
    num[numi].fenmu=1;
    q++;
    }
    }
    }
    int panduan(){
    struct shuzi answer;
    memset(s2, 0, sizeof(s2)-1);
    printf("请输入答案:");
    gets(s2);
    q=s2;
    if(*q=='-'){
    q++;
    answer.fenzi=-readnum();
    if(*q=='|'){
    q++;
    answer.fenmu=readnum();
    }
    else
    answer.fenmu=1;
    }
    else{
    answer.fenzi=readnum();
    if(*q=='|'){
    q++;
    answer.fenmu=readnum();
    }
    else
    answer.fenmu=1;
    }
    if(answer.fenzi==num[0].fenzi && answer.fenmu==num[0].fenmu){
    printf("回答正确! ");
    return 1;
    }
    else{
    printf("回答错误! ");
    if(num[0].fenmu == 1){
    printf("正确答案:%d ",num[0].fenzi);
    }
    else{
    printf("正确答案:%d|%d ",num[0].fenzi,num[0].fenmu);
    }
    return 0;
    }
    }

    void main(){
    int right=0;
    int N=0;
    FILE *fp;
    int len;
    if((fp = fopen("test.txt","r")) == NULL)
    {
    perror("fail to read");
    exit (1) ;
    }
    while(fgets(s,MAX_LINE,fp) != NULL)
    {
    N++;
    len = strlen(s);
    s[len-1] = '';
    printf("第%d道:",N);
    puts(s);
    change();
    cal();
    right = right +panduan();
    printf("回答正确%d道. ",right);
    printf("回答错误%d道. ",N-right);
    printf("************************** ");
    memset(s, 0, len-1);
    memset(s1, 0, sizeof(s1)-1);
    }
    }

  • 相关阅读:
    学习比较-列表
    查看Linux下系统资源占用常用命令
    eclipse加载maven工程提示pom.xml无法解析org.apache.maven.plugins:maven-resources-plugin:2.4.3解决方案
    springmvc 注解扫描失败的可能原因
    单例模式:懒加载(延迟加载)和即时加载
    nginx 正向代理和反向代理
    LINUX中错误 SELinux is disabled
    修改Win10默认窗口背景色为护眼色的方法
    搜索引擎之Lucene
    MongoDB系列(一):MongoDB安装及基础语法
  • 原文地址:https://www.cnblogs.com/13070037Yu/p/5295397.html
Copyright © 2011-2022 走看看