第一次个人作业近况

这次作业的目标是写一个四则运算小程序。

1.要求能够读取txt格式的试题,并算出标准答案,在使用者输入答案后对其输入的答案按照标准答案判分。

2.关于运算方面,要求支持加减乘除和括号,但是不能出现小数,所有结果只能由整数、真分数和假分数表示。

3.其次关于拓展功能,要求能够程序自己生成题目而不是从txt中读取,而且生成的题目不能重复,题目运算种类分布均匀。

在两个学期之前的数据结构课上,我们曾经实现过这种简单的综合运算的计算器。所以我打算用相同的思路,采用栈的结构来存储运算符号和数值,并设计算法组织运算的先后顺序,实现括号→乘除→加减的优先级。

为了实现功能的自定义,我没有采用库中封装好的栈,而是自己实现了一个栈的类。头文件代码如下:

  1 template<typename T>
  2 class Stack
  3 {
  4 private:
  5     T * head;
  6     int maxSize;
  7     int currentSize;
  8 public:
  9     Stack();
 10     Stack(int mSize);
 11     ~Stack();
 12     T top();
 13     bool pop();
 14     bool push(T n);
 15     bool clear();
 16     bool isEmpty();
 17 };

其次是程序的主体——计算器类。头文件代码如下:

 1 #include "Stack.h"
 2 #define MAX_LENGTH 128
 3 class Calculator
 4 {
 5 private:
 6     double number;
 7     char mark;
 8     char question[MAX_LENGTH];
 9     Stack<char> cStack = Stack<char>(80);
10     Stack<double> dStack = Stack<double>(80);
11
12     void storeMark(char const mark);
13     bool priorTo(char input,char top);
14     void calculate(char const mark);
15     void showAns();
16     double getAns();
17     void reply();
18 public:
19     Calculator();
20     ~Calculator();
21     void run();
22     void parse();
23 };

以上各函数只要明确目标,想清运算符的优先级还是比较好写的。下面着重说说自己这次感受最深的一个方面——文件IO。

由于平时用c++的机会不多(不知道Unity为什么支持C#却不支持C++),尤其是文件IO这块用的更是少,所以在这方面走了不少弯路。由于我们的C++是自学课,而且文件IO这块并不是考试重点,所以我的文件IO手段还停留在C语言的阶段。但是一想起来那个时候文件内指针造成的各种问题以及feof多扫描一次这种不愉快的经历,我决定尝试新的方法。上网看了看,觉得ifstream这个货好厉害,能够将文件的读取简化得像iostream里的cin和cout一样,这等高逼格的方法不能不学。

其实用起来也比较简单,主要的优点是有putback()这个bug一样的函数,谁还需要一个字符一个字符的自己退啊,一个函数搞定。下面是我的代码:

 1 void Calculator::parse()
 2 {
 3     ifstream myfile = ifstream("myfile.txt");
 4     ifstream myfile_temp = ifstream("myfile.txt");
 5     if (!myfile){
 6         cout << "Unable to open myfile";
 7         system("pause");
 8     }
 9     if (!myfile_temp){
10         cout << "Unable to open myfile";
11         system("pause");
12     }
13     while (!myfile.eof())//EOF在文件尾会多循环一次
14     {
15         myfile >> mark;
16         switch (mark)
17         {
18         case ‘+‘:
19         case ‘-‘:
20         case ‘*‘:
21         case ‘/‘:
22         case ‘(‘:
23         case ‘)‘:
24             storeMark(mark);
25             break;
26         case ‘=‘:
27             storeMark(‘#‘);
28             myfile_temp.getline(question, MAX_LENGTH);
29             cout << question << endl;
30             //////////////////////////////此处添加输入输出//////////////////////////////
31             reply();
32             ////////////////////////////////////////////////////////////////////////////
33             //showAns();
34             break;
35         case ‘0‘:
36         case ‘1‘:
37         case ‘2‘:
38         case ‘3‘:
39         case ‘4‘:
40         case ‘5‘:
41         case ‘6‘:
42         case ‘7‘:
43         case ‘8‘:
44         case ‘9‘:
45             myfile.putback(mark);
46             myfile >> number;
47             dStack.push(number);
48             break;
49         default:
50             break;
51         }
52         mark = ‘!‘;//换成不起作用的字符,防止重复分析字符
53     }
54     myfile.close();
55     myfile_temp.close();
56 }

最后附上我的程序目前的效果,还没做出分数以及自动出题,不过也会很快做出来的~

时间: 2024-10-11 10:02:26

第一次个人作业近况的相关文章

第一次迭代作业提交

程序java代码: 1 import java.util.Arrays; 2 import java.util.Scanner; 3 4 public class volleyball { 5 6 public static void main(String[] args) { 7 8 int[][] scoreArr = new int[5][2];// 定义二维数组,用于记录每局比赛分数 9 int red = 0; 10 int blue = 0;// 定义红蓝变量,用于判断红蓝整场比赛输

C++ 第一次上机作业

今天完成了C++第一次上机作业,感觉比较简单. 题目: 求2个数或3个正整数中的最大数,用带有默认参数的函数实现. 对3个变量按由小到大顺序排序,要求使用变量的引用. 编写一个程序,用同一个函数名对几个数据进行从小到大排序,数据类型可以是整型.浮点型.用重载函数实现. 对第4题改用函数模板实现,并与第4题程序进行对比分析. 第一题代码: 1 #include<iostream> 2 using namespace std; 3 4 void max(int a=0,int b=0,int c=

第一次课程作业(3月7日)

第一次课程作业:梳理课程重点(信息基础+服务管理) 第一章:信息化基础知识 1.信息的概念(知道):有两个层次(1)本体论:你认为它是什么样就是什么样 (2)信息论:由于我的认识不断深入,逐渐趋于它的本质 2.国家信息化体系6要素,关系图要记住,某个要素是什么功能 信息技术应用:六要素中的龙头,国家信息化建设的主阵地 信息资源:信息资源的开发利用是国家信息化建设的核心任务,是国家信息化建设取得实效的关键,也是国家信息化的薄弱环节.信息资源.材料资源.能源共同构成国民经济和社会发展的三大战略资源,

第一次的作业,现实的自身

第一部分:结缘计算机 我第一次接触计算机是在小之前学的事了,在我的亲戚家,我哥手把手教学CS,那时候之知道几个按键,连按键的名子,作用的不了解的.之后就是小学的计算机课,老师交一些画图,制表,但那个时候已经有大神可以连网下载小游戏了!我深受其害-我感觉似乎好多的男生都是因为游戏和计算机认识的. 第二部分:在计算机系里学习 13年报考本校的土木工程系,但被调剂带计算机系 ,15年退伍回来复学 开始学习我不曾了解过的计算机!开始接触C语言,数据库,HTML等等.2年的学习,我自己觉得我似乎连编程的"

第一次网上作业

看了牛老师发布的几篇文章后,我感触颇深.不错的,作为一个农村来的孩子,我们身上背负着很大的责任,学校又给了我们这么好的学习条件,有图书馆,有电子阅览室,我们更没有理由不认真努力的去学习. 在21世纪这个信息科技迅速发展的时代,我以作为一个计算机专业的学生感到十分荣幸.然,这也是一个竞争非常激烈,难度相当大的专业.要想把这门专业,学透,学精,就必须付出巨大的努力,花费大量的时间去专研,去学习.对于软件工程这门学科,我认为有许多东西需要去学习,最重要的是要有一个好的学习方法.陈老师传授给我们的就有一

第一次结对作业

我和他结识于网络,没有过多的交流,伴随着一句"你有队友吗?"的问话和"没有",的回答,我们便决定了这学期痛苦的软工实践之旅我们一起走,不要认为很随便,看似很随随便的背后,隐藏了种种原因,我们是经过深思熟··········算了,编不下去了,其实还真挺随便得. 随后互相爆出了对方的姓名和学号:张富华-031502341和张岳-,一看我们同性瞬间亲切了好多,仿佛已经认识好久了一样,马上便开始了实践之旅. 可以看出来,本次作业描述的就是我们学校里学生社团的现状:纳新时全程

C++第一次的作业感想

1.本周小结:这周第一次开始接触C++,上手之后发现并没有想象中的困难,从一开始模仿到看解释,慢慢了解几个代码的意义,就开始做程序,一个个错误的排查,打的数量多了错误就渐渐少了,也尝试了学长教的if,else的语句,感受到了一点成就感. 遇到的问题和解决:一按运行就跳出,询问了老师之后懂了system("pause"):上网查了才知道还要在开头加一个#include<stdlib.h>. 还有没有找到错误,但就是无法运行.查了书,问了同学也没什么头绪. 下周计划:进一步学习

【作业】第一次JAVA作业

1.设计一个类,要求有一些基本属性及两个以上的方法. (可从日常生活中抽取) 2.在类中加入2个不同参数的构造方法. 3.再设计一个类,包含main方法,对上面的类进行应用与 测试. 4.该作业要求编程并调试通过. 5.对你设计的类要有详细的文字说明(类所封装的内容, 属性.方法的功能与含义等). 1 /* 类所封装的内容:对播放器的频道及开关状态进行调整 2 * 属性:调高.调低频道:开.关播放器 3 */ 4 package Homework; //储存在我的电脑上的 Homework 包中

第一次交作业

十一七天假期,实在太嗨,和家里的亲戚朋友吃吃喝喝的,不过还是挤出时间来学习了,四天早上都去图书馆学习了,看看JQ视频了. 下面看一下我的四个作业,基本上都是CSS3的内容 第一个2D的转换: <style type="text/css">.ss{ width:200px; height:50px; background-color:#999999;}.ss:hover{transform: rotate(30deg);-ms-transform: rotate(30deg)