2nd 简单四则运算更新

简单四则运算更新

功能:由随机数决定出题为10个以内的数字,并确定是否出现括号(仅限一对),顺序输出表达式,并用栈的方式进行计算,判断正误。其他功能有待进一步实现。

头文件

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>

栈的结构体

typedef struct stack
{
    double * e;
    int zd;
}bds_stack;

声明函数

void InitStack(bds_stack ** s,int n);
int Push_stack(bds_stack * s,double t);
void Pop_stack(bds_stack * s,double * t);
double Opt_num();
void Cal(int n);
void yxj_table();

定义全局变量

int yxj[7][7];
bds_stack * dz,* tz;

主函数

int main()
{
    int num;
    int c = 0,p,s;
    double r,ans,r1,r2,r3;
    int * d,* t;
    int p1,p2;       //存储出现括号的下标
int m,n,f;       //分别记录数组d、t的下标
int i,j,k;
    yxj_table();     //初始化优先级数组
    scanf("%d",&num);
    srand(time(NULL));       //随机数种子
    for(i = 0;i < num;i++)
    {
        m = 0;n = 0;f = 0;
        while(c == 1||c == 0)
        {
            c = rand()%10;  //数字字符
        }
        s = rand()%2;     //是否出现括号
        if(s == 1)         //确定字符总数
        {
            p = c + 1;
        }
        else
        {
            p = c - 1;
        }
        printf("%d %d %d\n",c,p,s);
        d = (int * )malloc(sizeof(int)*c);
        t = (int * )malloc(sizeof(int)*p);
        InitStack(&dz,c);
        InitStack(&tz,p);
        Push_stack(tz,0);       //0为‘#’
        for(j = 0;j < c;j++)
        {
            d[j] = rand()%100;             //数字为两位数
        }
        if(s == 1)
        {
            p1 = rand()%(p-2)+1;
            p2 = rand()%(p-p1-1)+1+p1+1;
            p1--; p2--;                    //下标
            t[p1] = 5;
            t[p2] = 6;
        }
        for(j = 0;j < p;j++)
        {
            if(s == 1)
            {
                if(j == p1||j == p2)
                    continue;
            }
            t[j] = rand()%4+1;
        }
        j = 0;
        if(t[n] == 5)
        {
            printf("(");
            Push_stack(tz,t[n]);
            n++;
            j++;
        }
        for(;j < (c+p);)              //输出表达式
        {
            if(f == 0)
            {
                printf("%d",d[m]);
                Push_stack(dz,d[m]);
                m++; j++;
                if(t[n] == 6)
                {
                    printf(")");
                    while(yxj[(int)tz->e[tz->zd-1]][t[n]] != 2)
                    {
                        if(yxj[(int)tz->e[tz->zd-1]][t[n]] == 1)
                        {
                            r = Opt_num();
                            Push_stack(dz,r);
                        }
                        else
                        {
                            printf("出错!\n");
                            return 1;
                        }
                    }
                    Pop_stack(tz,&r);
                    n++; j++;
                }
                f = 1;
            }
            else
            {
                if(t[n] == 1)
                {
                    printf("+");
                    Cal(t[n]);
                }
                if(t[n] == 2)
                {
                    printf("-");
                    Cal(t[n]);
                }
                if(t[n] == 3)
                {
                    printf("*");
                    Cal(t[n]);
                }
                if(t[n] == 4)
                {
                    printf("/");
                    Cal(t[n]);
                }
                n++;j++;
                if(t[n] == 5)
                {
                    printf("(");
                    Push_stack(tz,t[n]);
                    n++; j++;
                }
                f = 0;
            }
        }
        printf(" =  ?\n");
        while((yxj[(int)(tz->e[tz->zd-1])][0]) != 2)
        {
            r = Opt_num();
            Push_stack(dz,r);
        }
        scanf("%lf",&ans);
        if(ceil(fabs(r-ans)) == 0)
        {
            printf("right!!\n");
        }
        else
        {
            printf("false!!\n");
        }
    }
    return 0;
}

初始化优先级表

void yxj_table()
{
    int i,j;
    yxj[0][0] = 2;
    yxj[0][6] = 3;  yxj[5][0] = 3;
    for(i = 0,j = 1;j <= 5;j++)
    {
        yxj[i][j] = 0;
    }
    yxj[6][0] = 1;
    for(i = 1;i <= 4 ;i++)
    {
        for(j = 0;j <= 2;j++)
        {
            yxj[i][j] = 1;
        }
    }
    for(i = 5,j = 1;j <= 4;j++)
        yxj[i][j] = 0;
    for(i = 6,j = 1;j <= 4;j++)
        yxj[i][j] = 1;
    for(i = 1;i <= 2;i++)
    {
        for(j = 3;j <= 5;j++)
        {
            yxj[i][j] = 0;
        }
    }
    for(i = 3;i <= 4;i++)
    {
        for(j = 3;j <= 4;j++)
        {
            yxj[i][j] = 1;
        }
    }
    yxj[3][5] = 0; yxj[4][5] = 0;
    for(j = 6,i = 1;i <= 4;i++)
    {
        yxj[i][j] = 1;
    }
    yxj[5][6] = 2;
    yxj[5][5] = 3;  yxj[6][5] = 3; yxj[6][6] = 3;
}

初始化栈

void InitStack(bds_stack ** s,int n)
{
    *s = (bds_stack*)malloc(sizeof(bds_stack));
    (*s)->e = (double*)malloc(sizeof(double)*n);
    (*s)->zd = 0;
}

入栈

int Push_stack(bds_stack * s,double t)
{
    int q;
    s->e[s->zd] = t;
    q = s->zd;
    s->zd++;
    return q;
}

出栈

void Pop_stack(bds_stack * s,double * t)
{
    (*t) = s->e[--(s->zd)];
}

字符出栈计算

double Opt_num()
{
    double num1,num2,opt;
    Pop_stack(dz,&num2);
    Pop_stack(tz,&opt);
    Pop_stack(dz,&num1);
    if(opt == 1)
    {
        return num1 + num2;
    }
    if(opt == 2)
    {
        return num1 - num2;
    }
    if(opt == 3)
    {
        return num1 * num2;
    }
    if(opt == 4)
    {
        return num1 / num2;
    }
    return 0;
}

优先级比较

void Cal(int n)
{
    double r;
    int k;
    while(yxj[(int)(tz->e[tz->zd-1])][n] != 0)
    {
        if(yxj[(int)(tz->e[tz->zd-1])][n] == 1)
        {
            r = Opt_num();
            Push_stack(dz,r);
        }
        else
        {
            printf("出错!\n");
        }
    }
    Push_stack(tz,(double)n);
}

ssh://[email protected]:amberpass/szysgx.git

https://git.coding.net/amberpass/szysgx.git

结对编程体会:

  通过这几次结对编程,让我对合作有了更深的了解,也深刻意识到合作在软件开发中的重要作用,它不仅能够增加编程效率,让1+1不仅仅等于2,而且也增进了队友之间的感情,让我们在学习知识的同时也收获友谊。

时间: 2024-10-07 17:08:40

2nd 简单四则运算更新的相关文章

简单四则运算

问题描述: 输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值 注: 3.1.表达式只含 +, -, *, / 四则运算符,不含括号 3.2.表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况 3.3.要考虑加减乘除按通常四则运算规定的计算优先级 3.4.除法用整数除法,即仅保留除法运算结果的整数部分.比如8/3=2.输入表达式保证无0作为除数情况发生 3.5.输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现

华为机考--简单四则运算

问题描述: 输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值 注: 1.表达式只含 +, -, *, / 四则运算符,不含括号 2.表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况 3.要考虑加减乘除按通常四则运算规定的计算优先级 4.除法用整数除法,即仅保留除法运算结果的整数部分.比如8/3=2.输入表达式保证无0作为除数情况发生 5.输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况 要求实

BASH 脚本制作简单 Workflow - 更新 2014/6/17 12:00

因为需要,我创建了一个脚本叫 wf.sh (随意起什么名字),它可以读取当前目录下的 config.ini 配置文件来解析并执行工作流任务(Workflow). 直接上代码: config.ini Workflow.Name = example Workflow.Description = my work flow example \n and I know what's going on here. #Workflow.StartJob = job1 Workflow.NextJobCount

Unity编程笔录--ulua+PureMVC框架简单热更新使用

ulua+PureMVC框架简单热更新使用 前言: 1:作者官网论坛 首先介绍的是这个框架是一位大牛  骏擎[CP]  jarjin   写的,据说原本是"非常多人不知道怎么使用Ulua,所以搞了个演示Demo",可是这个初衷发生了变化,突然有一个天作者发现非常多人基于这个Demo去做游戏了.这出乎作者的意料. 在此希望这个框架会越来越好. 眼下为止这个框架是全然免费的. 官网地址:http://www.ulua.org/ 近期刚刚开了一个论坛,大家不懂的能够去看看,论坛地址:http

24点游戏计算器 (简单四则运算)(c++)

24点游戏计算器 (简单四则运算)(c++):https://github.com/liuxinig/cpp_1001/blob/master/24dian_siZeIN.txt 1 //24点统计 2 3 #include <iostream> 4 #include <cmath> 5 using namespace std; 6 #define N 14 7 //a数组存四个数字 8 int cixu[3],fuHao[3],p[N],sum = 0; 9 float a0[4

Google Chrome 调试JS简单教程[更新]

题外话,刚开始我写这篇内容只是将自己了解的一些知识放上来,不巧的是我分析了我的来访日志,很多朋友都有这个需求,为了大家没有白来,我决定充实下这篇文章.最近更新时间2014-02-14 chrome版本: 32.0.1700.107 m 我是一名忠实Chrome迷,使用它已经快有2年的历史了,整体给我的感觉就是清爽,快速,简洁.又打小广告了……^_^,虽然我知道IE8+也有调试工具,包括火狐的什么XXBUG,但是我用过之后,个人还是十分偏爱chrome的debug. chrome对于在前端打拼的兄

Java实验项目二——小学生考试系统(简单四则运算)

Program:设计实现一个小学生数学考试系统,完成随机出题(简单的四则运算),学生答题,自动判分的功能. Description:代码如下: 1 /* 2 * Description:面向考试系统建立类TestSystem 3 * 4 * */ 5 6 package entity; 7 8 public class TestSystem { 9 10 private int num1; //声明两个操作数 11 private int num2; 12 private String oper

第二周-四则运算更新

四则运算功能更新: HTTPS:https://git.coding.net/li_yuhuan/CalculateTest.git SSH:[email protected]:li_yuhuan/CalculateTest.git 代码: static void Main(string[] args) { int length = args.Length; if (0 == length) { for (int i = 0; i < 20; i++) { ShowTest(false); }

简单四则运算的随机输入

java练习 课堂练习题目,随机输入一个简单的四则运算,符号也随机,不输出结果. 代码: 1 public static void main(String[] args) { 2 // TODO Auto-generated method stub 3 String[] number = {"0","1","2","4","5","6","7","8&quo