程序最美(寻路)

你还在坚持练习你的技术吗?运动员天天训练,音乐家也会演练更难的曲章。你呢?

08 2013 档案

两个数交换的讨论
摘要:两个数交换的讨论 C语言课中,两个数交换的程序必定会涉及,尤其是在讲解如何传参时。这里我们重点讨论一下两个数交换有哪几种方式,以及其原理是什么。 首先,我们给出几种两个数交换的代码,然后逐一讨论:#include #include using namespace std;void swap1(int& a, int& b){ int t = a; a = b; b = t;}void swap2(int& a, int& b){ a = a + b; b = a - b; a = a - b;}void swap3(int& a, int& b) 阅读全文

posted @ 2013-08-30 13:33 unixfy 阅读(293) 评论(0) 推荐(0) 编辑

扑克牌的游戏
摘要:扑克牌的游戏 手中有13张扑克牌,分别是1、2、3、4、5、6、7、8、9、10、J、Q、K,这里我们相求一种顺序,使得:每次将牌盖住,将最上面的牌放在最下面,再将最上面的牌扔出,使得扔出去的牌的顺序依次为:1、2、3、4、5、6、7、8、9、10、J、Q、K。 我们首先给出程序的模拟操作,初始时的顺序依次为:1、2、3、4、5、6、7、8、9、10、J、Q、K。 从初始顺序到结果顺序的过程为:先把初始顺序中的第一个元素放到最下面,然后将之后初始顺序中第一个元素抽出来,放入到结果顺序中。在我们的模拟程序中,用vector保存初始顺序和结果顺序,首先检测初始顺序序列是否为空,如果不为空,则首先将 阅读全文

posted @ 2013-08-27 17:07 unixfy 阅读(318) 评论(0) 推荐(0) 编辑

简单虚拟机
摘要:简单虚拟机 本文参考自《一个简单的虚拟机》 虚拟机有: 1.内存:大小100字 2.寄存器:指令计数器指令寄存器操作码寄存器内存地址寄存器累加寄存器 3.指令:指令解释01输入02输出03加载数据到累加寄存器04存放累加寄存器数据到内存05加06减07乘08除09转移10小于零转移11等于零转移12终止0000输入结束 比如有以下程序:打印两个数中的较大数行号指令解释000120输入一个数到内存20010121输入一个树到内存21020320加载内存20中的数据到累加寄存器中030621累加寄存器减去内存21的数据041007如果小于0,则转移到内存07050220输出内存20的数据06120 阅读全文

posted @ 2013-08-25 01:56 unixfy 阅读(1637) 评论(0) 推荐(0) 编辑

代数表达式的四则运算
摘要:代数表达式的四则运算 前面我们讨论了四则运算的相关情形,对于给定的中缀表达式,我们对其进行词法分析、中缀转后缀、后缀计算等过程,最终得到中缀表达式的值。 在我们输入的中缀表达式中,我们对于每个操作数都是已知的值,不存在未知量。 而在本文中,我们是重点讨论有关中缀表达式中存在未知量的情形,我们将含有未知量的表达式称作为代数表达式。 比如给定一代数表达式:a+b-c/d*xyz 该表达式中存在5个未知量:a、b、c、d以及xyz。我们的处理过程还是按照以前处理四则运算的情形那样,首先对输入的代数表达式进行词法分析,得到想要的操作符、已知量、未知量等。然后将中缀表达式转换为后缀表达式,最后在进行后缀 阅读全文

posted @ 2013-08-22 01:33 unixfy 阅读(1135) 评论(0) 推荐(0) 编辑

后缀表达式转换为中缀表达式
摘要:后缀表达式转换为中缀表达式 之前我们介绍过《中缀表达式转化为后缀表达式》,现在我们想得到其逆过程,即如何由后缀表达式转换为中缀表达式。 目前我先给出我的一种理解和实现,其他方法以后再议。 有关中缀表达式的词法分析,本文不作考虑,而是直接用加了空格硬分割操作符和操作数的后缀表达式。 我们先来回忆一下后缀表达式的计算方法,可参考《后缀表达式的计算》。后缀表达式的计算过程为:首先设置一个操作数栈,对后缀表达式进行从左到右的扫描,如果是操作数,则直接压栈,如果是操作符,则从操作数栈中弹出相应的操作数结合当前操作符进行相应的运算,后将运算而得的结果压入到栈中,直至扫描完整个栈后,如果该中缀表达式是合法的 阅读全文

posted @ 2013-08-19 22:38 unixfy 阅读(7686) 评论(1) 推荐(2) 编辑

雇员记录系统
摘要:雇员记录系统 由于内容来自于《Professional C++》,所以书中相关说明不再赘述。 一、Employee类我们先实现一个Employee类:// Employee类声明// Employee.h#pragma once#include namespace EmployeeRecorder{ const int kDefaultStartingSalary = 30000; class Employee { public: Employee(void); ~Employee(void); void pro... 阅读全文

posted @ 2013-08-18 00:37 unixfy 阅读(614) 评论(0) 推荐(1) 编辑

基于词法分析的中缀表达式计算
摘要:基于词法分析的中缀表达式计算 前面我们对中缀表达式的词法处理进行了讲解并给出了程序示例《四则运算的词法分析》,之前我们也对中缀表达式的计算进行了一系列的分析,诸如《检测中缀表达式的合法性》。在之前的中缀表达式的计算中,我们是利用了空白符来间隔操作符和操作数,这属于一种硬分割。 本文我们利用上一篇中对中缀表达式进行词法分析,进而通过中缀表达式转换为后缀表达式,进而计算后缀表达式来实现基于词法分析的中缀表达式计算。 程序的处理过程主要是包括3个部分: 1.对中缀表达式进行词法分析 2.中缀表达式转化为后缀表达式 3.后缀表达式的计算 我们的程序也是按照以上三个步骤进行的,具体的程序如下:// 基于 阅读全文

posted @ 2013-08-16 13:16 unixfy 阅读(604) 评论(0) 推荐(0) 编辑

四则运算的词法分析
摘要:四则运算的词法分析 之前我们处理四则运算的方法有两种,第一种是对输入的格式强制限定运算符两边都有空白符,另一种是我们根据输入的字符串,对其中的运算符进行添加空白符预处理。通过添加空白符进行处理里显然不太规范和方便,真正需要做的应该是我们对输入的四则运算表达式进行词法分析,解析出相应的运算符和操作符,然后在进行中缀转后缀、后缀表达式的计算等过程。 我们的四则运算表达式只包含两种元素:操作符和操作数。 其中,操作符目前限定为+、-、*、/四种,另外还有括号:左括号和右括号。 操作数可以是小数也可以是整数。 操作符和操作数我们将其视为token,其对应的种别码分别为:tokenid+1-2*3/4( 阅读全文

posted @ 2013-08-16 11:02 unixfy 阅读(2198) 评论(0) 推荐(0) 编辑

去注释程序
摘要:去注释程序 C/C++中注释有两种形式: 1./* … */ 2.// … 我们要实现的功能就是讲程序中的注释过滤掉。 我们首先采用一种直接的方法进行过滤,就是顺序扫描整个源代码,检测 /*、*/、// 这些标示,以获取程序的注释。// 程序1:顺序扫描#include #include #include #include using namespace std;void read_prog(const string& file, string& prog){ ifstream fin(file.c_str()); if (!fin) { cerr & comm... 阅读全文

posted @ 2013-08-13 14:05 unixfy 阅读(716) 评论(0) 推荐(0) 编辑

写一个简单的C词法分析器
摘要:写一个简单的C词法分析器 在写本文过程中,我参考了《词法分析器的实现》中的一些内容。这里我们主要讨论写一个C语言的词法分析器。一、关键字首先,C语言中关键字有: auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、int、long、register、return、short、signed、sizeof、static、struct、switch、typedef、unsigned、union、void、volatile、while等共32个关键字。 二、运算符 C语言中的运 阅读全文

posted @ 2013-08-07 13:19 unixfy 阅读(16031) 评论(0) 推荐(2) 编辑

动态链接库DLL导出函数并导入使用
摘要:动态链接库DLL导出函数并导入使用 本文完全参考自《vs2008制作dll笔记,回带值样例》。 首先制作DLL文件,在vs2010中新建Win32控制台项目,选择DLL选项,简历头文件,源文件如下: 头文件:// MyDll.hextern "C" _declspec(dllexport) int Max(int a, int b);extern "C" _declspec(dllexport) int Min(int a, int b);extern "C" _declspec(dllexport) bool cim2scada(c 阅读全文

posted @ 2013-08-06 11:16 unixfy 阅读(674) 评论(0) 推荐(0) 编辑

检测中缀表达式的合法性
摘要:检测中缀表达式的合法性 前面我们对《中缀表达式的计算》以及《检测后缀表达式的合法性》进行了讨论,这里我们借助于之前对于两者的讨论,来对中缀表达式的合法性进行检测。如果中缀表达式是合法的,则返回该表达式的值;如果是非法的,则提示其非法。 我们对中缀表达式的合法性检测主要分为两个阶段: 1)中缀表达式转换为后缀表达式过程中是否存在错误; 2)后缀表达式的计算过程中是否存在错误 其中,第2阶段我们在《中缀表达式的计算》中已经做过讨论,这里重点在于第1阶段。 在第1阶段中主要涉及以下几个合法性检测: .操作数是否合法; .左括号和右括号是否匹配; 一、操作数是否合法 合法的操作数首个字符可以是“+”、 阅读全文

posted @ 2013-08-03 00:17 unixfy 阅读(4553) 评论(0) 推荐(2) 编辑

输入日期显示星期几
摘要:输入日期显示星期几 比如今天是2013年8月2日,星期五。我们现在就是要实现这样一个功能,给定一个日期,得到该日期是星期几。 比如:日期星期2013年8月2日星期五20130803星期六2013-08-04星期天2013-6-18星期二2014/1/16星期四2000/8/15星期二 我们需要解决的问题有如下几点: 1.对输入格式进行归一化处理; 2.计算将来或以前某一天是星期几; 一、对输入格式的归一化处理 我们首先实现对输入格式的归一化处理,程序如下:// 输入日期的归一化处理#include #include using namespace std;struct date{ in... 阅读全文

posted @ 2013-08-02 16:25 unixfy 阅读(921) 评论(0) 推荐(0) 编辑

!勘误!之前中缀转后缀的一处错误
摘要:!勘误!之前中缀转后缀的一处错误 之前我们在中缀转后缀的处理过程中对于当操作符为”)”的时候,对操作符栈进行弹栈操作,当操作符栈的top()值为”(”,我们将其从操作符栈中进行弹出,但是并没有终止,而是继续弹栈,这是一个严重的错误。比如对于表达式:4 - ( 3 + 2 ) / ( 3 - 1 ) 我们按照之前的做法得到的结果为: 0.5 但是,正确的结果应该为1.5 具体错误出现在: 我们在当if (op_st.top() == “(”) po_st.pop() 后没有结束while循环,从而导致操作符内所有的操作符都弹栈。 具体的修改方法是在op_st.pop()后面添加一个break;语 阅读全文

posted @ 2013-08-01 00:04 unixfy 阅读(268) 评论(0) 推荐(0) 编辑

导航

点击右上角即可分享
微信分享提示