请设计一个程序,能够实现针对小学生做100以内的四则运算练习的游戏,要求设计菜单能够选择加减乘除中的一种运算或者综合运算,每种运算随机生成10道题,每道题为10分,算对得10分,算错不得分并给出正确答案,十道题做完之后给出总分并对于成绩给与评价(如大于等于90分为perfect、大于等于70分为good、大于等于60分为passing、小于60分为failed)。菜单如下:
1、加法运算
2、减法运算
3、乘法运算
4、除法运算
5、综合运算
6、退出
注意:综合运算为加减乘除运算随机选择出题
四则运算 练习的游戏
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- CSDN专家-深度学习进阶 2021-06-27 13:02关注
可以参考这个,实现了四则运算:
#include <stdio.h> /*包含头文件*/ #define MAX_SIZE 1024 /*数组长度*/ int insert_operand(int *operand , int * top_num ,int num) /*数据压入数据栈*/ { (*top_num) ++; operand[*top_num] = num; /*保存数据*/ return 0; /*正常退出*/ } int insert_oper (char * oper , int *top_oper , char ch) /*操作符压入符号栈*/ { (*top_oper)++; oper[*top_oper] = ch; /*保存操作符*/ return 0; /*正常退出*/ } int compare(char *oper , int *top_oper , char ch) /*比较操作服优先级*/ { if((oper[*top_oper] == '-' || oper[*top_oper] == '+') /*判断当前优先级是否比栈顶操作符优先级高*/ && (ch == '*' || ch == '/')) { return 0; /*操作符压入栈*/ } else if(*top_oper == -1 || ch == '(' || (oper[*top_oper] == '(' && ch != ')')) /*判断操作符栈是否为空;栈顶操作 符是否为'('*/ { return 0; /*操作符压入栈*/ } else if (oper[*top_oper] =='(' && ch == ')' ) /*判断括号内的表达式是否计算完毕*/ { (*top_oper)--; return 1; /*对()进行处理*/ } else { return -1; /*进行操作符的运算*/ } } int deal_date(int *operand ,char *oper ,int *top_num, int *top_oper) /*进行数据运算*/ { int num_1 = operand[*top_num]; /*取出数据栈中两个数据*/ int num_2 = operand[*top_num - 1]; int value = 0; if(oper[*top_oper] == '+') /*加法操作*/ { value = num_1 + num_2; } else if(oper[*top_oper] == '-') /*减法操作*/ { value = num_2 - num_1; } else if(oper[*top_oper] == '*') /*乘法操作*/ { value = num_2 * num_1; } else if(oper[*top_oper] == '/') /*除法操作*/ { value = num_2 / num_1; } (*top_num) --; /*将数据栈顶下移一位*/ operand[*top_num] = value; /*将得到的值压入数据栈*/ (*top_oper) --; /*将操作符栈顶下移一位*/ } int main() { int operand[MAX_SIZE] = {0}; /*数据栈,初始化*/ int top_num = -1; char oper[MAX_SIZE] = {0}; /*操作符栈,初始化*/ int top_oper = -1; char *str = (char *) malloc (sizeof(char) * 100); /*获取表达式(不带=)*/ scanf("%s",str); char* temp; char dest[MAX_SIZE]; int num = 0; int i = 0; while(*str != '\0') { temp = dest; while(*str >= '0' && *str <= '9') /*判断是否是数据*/ { *temp = *str; str ++; temp ++; } /*遇到符号退出*/ if(*str != '(' && *(temp - 1) != '\0') /*判断符号是否为'('*/ { *temp = '\0'; num = atoi(dest); /*将字符串转为数字*/ insert_operand(operand, &top_num,num); /*将数据压入数据栈*/ } while(1) { i = compare(oper,&top_oper,*str); /*判断操作符优先级*/ if(i == 0) { insert_oper(oper,&top_oper,*str); /*压入操作符*/ break; } else if(i == 1) /*判断括号内的表达式是否结束*/ { str++; } else if(i == -1) /*进行数据处理*/ { deal_date(operand,oper,&top_num,&top_oper); } } str ++; /*指向表达式下一个字符*/ } printf("num = %d\n",operand[0]); /*输出结果*/ return 0; /*正常退出*/ }
解决 1无用
悬赏问题
- ¥15 NRF24L01能发送但是不能接收
- ¥15 想问一下这种情况怎么解决呢(关键词-file)
- ¥15 python Flassk 模块部署 服务器时报错
- ¥15 Opencv(C++)异常
- ¥15 VScode上配置C语言环境
- ¥15 汇编语言没有主程序吗?
- ¥15 这个函数为什么会爆内存
- ¥15 无法装系统,grub成了顽固拦路虎
- ¥15 matlab有关债券凸性久期的代码
- ¥15 lvgl v8.2定时器提前到来