自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(94)
  • 资源 (9)
  • 收藏
  • 关注

原创 大数的指数运算

因为123456789的123456789次方是个很大的数,大约有50亿个数位,限于计算机的存储能力,也限于计算机的运算速度,实际演示不了。一个“节”可以存放4位数字,或8位数字,因此可以按“节”看作是10000进制或100000000进制。因为指数是常数的原因,对pexp中的循环和条件做了优化。大数的指数运算也是按“节”拆分,然后再链接起来。这里假设一个“节”存放4位数字,所以是万进制。当然,这里做了乘法优化,而不是原始的最多进行9999次连乘的算法。当跨计算“节”时, 要对“节”进行调整。

2024-04-25 08:17:06 165

原创 C++的封装(十):数据和代码分离

这样变化后,class正常使用不受影响,如果要访问私有数据也轻而易举。因为class在代码完全不生成(隐藏的)数据成员,访问内部数据只需一个class到对应的struct的强制类型转换。但是在开发阶段,成员方法还不完全具备,过于讲究封装必定会碍手碍脚,反而使debug不能充分施展。封装的好处当然是非常多的。就是说,class只写方法,数据都放到对应的struct里面。class都从对应的struct私有继承自己的数据成员。所以你学了之后,要悄悄的用,千万别说这是我教的。可以试试这个方法,数据和代码分离。

2024-04-17 11:34:54 207

原创 一个月有多少天

时钟交汇问题是这样一个问题,分针每小时走1圈,时针每小时走1/12圈,这次交汇后下次什么时间再次交汇?因为分针走的时候时针也在走,肯定要多于1小时,然后分针追上时针。求得月亮绕地球公转周期是27.4天。同理,月亮公转一周时,地球也(绕日)走了27.4天。转化成时分秒是,29天12小时44分10秒。跟精确值29天12小时44分3秒相比,误差是7秒。月亮绕地球作圆周运动,向心力是地球对月亮的万有引力。月亮的质量大约是地球的1/81。这个数据无所谓,计算的时候会约掉。所以可以知道农历的一个月大约是29.5天。

2024-04-08 11:03:00 731

原创 移进/规约冲突

记号j的token是VAR,关联的名称是字符串"j"。好了,或者应该说“坏了”,当分析器执行规约时状态回到语句头,于是进行一个tmpnametab清理。分析器运行到这里时,不知道后面会不会有else,需要再读进一个token来确认这个if语句是不是结束了。直到花费大量的时间来调试,最终发现是这个bug的原因之前,一直是很困惑。编译函数的时候,不同于外面,外面的语句接受一条执行一条,不会积累。注意,下一条语句的第一个token在上一条语句结束时,已经提前读入了。这时候j呢,j引用的是goo的位置。

2024-03-31 11:12:27 320

原创 Goto到另一个函数内部:实现

现在用来存储label的索引,或者-1,代表还是原来的fcall。label的索引分两种情况,如果是递归调用自己,存的是本地label表的索引,如果是外部函数,存的是label名称字符串的索引。原来只有内部label,函数编译好后,只保留label所对应的语句节点。函数调用时检查这个k值,如果是外部label,则提取label名称字符串,检索label表,找到后重新设置这个索引值。原来的fcall的数据指针没用满。最后执行原来的函数语句,或者抛出goto,现搜索goto,找到后在那条语句开始执行函数。

2024-03-30 19:17:10 246

原创 Exception 语句

一元二次方程求根的程序,如果遇到Delta 小于0,则无解,函数不能返回值。而如果传一个字符串参数给exception(),也产生了一个需要特殊处理的例外, 因为所有的函数都只接受‘数’做参数,这里需要接受字符串参数。遇到Delta

2024-03-23 20:03:50 266

原创 C语言函数原型说明问题

直到C++被低效的值传递和深度复制问题所困扰,被大幅拖慢了程序运行的速度,并且引发了一大堆复杂罗苏的避免值传递的办法。用指针的方式传double肯定会有额外的开销,数学计算的程序员不答应。这就变成上面的,看似奇诡,过度懒惰的函数说明方式。然而,原创并非没有它的道理。就可以调用了,并不需要说明它的参数,调用时给什么参数就传什么参数。后来ansi标准建立后,规定把参数类型说明在参数表中,防止参数不匹配的函数调用,这个问题就解决了。在早期的C语言,函数参数说明不写在参数中,而是写在外面,这样(这有什么好处?

2024-03-20 11:20:38 313

原创 Goto到另一个函数内部

函数增加goto的目标label参数,原来的execute_e_ls(f->syntree, 0, exception);变为带goto标记的execute_e_ls(f->syntree, f->labeltab[i], exception);这个goto的意思是调用函数daily(31),但是从标号case_friday处开始执行。当然,这局部是个递归,它也是用同样的句法来调用自己。Goto到另一个函数内部的用法,在现存的高级语言中基本上已经绝迹了。要允许Goto到另一个函数内部,首先要有语法的支持。

2024-03-01 13:10:35 373

原创 C语言的指针类型

如果不把++的副作用存回去,上面展示的代码中,就是引用a[1]的意思,也就是p[1]。第二种方法有些风险,因为可能会遇到字界对齐问题,遇到字界对齐问题时编译器会对结构类型填充,这样就会比实际的数组大,这种赋值就出现了越界访问问题。可以用指针加上偏移来引用数组的单元,也可以把未经索引的数组赋给指针,这个东西的实际类型就是指针。数组可以复合构造更高维的数组,指针也可以增加间接的层次构造2级指针和多级指针。因为数组可以复合,构造更复杂的数组,指针可以复合,构造更复杂的指针,并且可以合在一起进行。

2024-02-14 20:55:29 397

原创 C++的interface机制

关于C++的interface机制,这里是老调重弹。在我前文中曾经谈到过。对每一个匹配的类型都手工翻译成这样的代码是乏味的。真奇怪C++语言经过这么多趟次的标准修订,ISO标准委员会还没有同意让语言直接接受它。但是标准的C++语法不直接支持这样写!仅管,事实上C++底层的语法已经完全实现了这个机制的基础设施。interface可以自动兼容有同样方法的类型。

2024-01-23 14:18:18 489

原创 自定义函数参数传递问题

由于固定位置重入,传入的参数,被后来嵌套的函数的参数传递覆盖了。当时这样用是因为,程序在执行期间, symtab_compile[DM_FOR_LOCAL].var[]作为为编译配置的内存资源,被闲置着。遇到嵌套的函数时因为会重新一个这样的分配,就不会出现重入的问题,不会发生参数覆盖,这样就解决问题了。自己写的解释程序,一直用的好好的。在暗自得意的过程中,突然出现了bug,被泼了一头冷水。因为,个人还不死心,仍然想利用这个闲置的编译期的内存。当然,改动会变得复杂,还会有更多的坑需要去踩…

2023-12-09 15:33:15 433

原创 二分查找计算等额本息还款额的方法

现在固定月数,反推月还款额p。p必然在借款额x和利息x*r之间。任取一个初值p, 用estimate()估算所需月数,若果大了,调高p值,若果小了,调低p值,同时调整上限和下限。这样就可以求出p值了,这是个二分查找法。这样虽然已经说得过去,但是满足条件的p不必只有一个。实际还需要找出最小的那个p,所以加入更多的估算精练最小的p。但如果知道每月还款额,推算多少个月还完却很简单。假设借款为x, 月利率为r, 每月还款额为p。每月还款额为5123,最后一个月还5118。上限和下限趋向同值了,才输出p。

2023-12-08 15:41:56 379

原创 尾递归,还是递推?

同样,对于比较复杂的组合数计算,也可以写成这种尾递归格式,实际上还是应该算作递推。这里每一步n-1,最后n==0返回一个东西,看起来很地道的递归。如果再增加一个每一步递增的参数z,改成。虽然写成了递归格式,个人觉得这样写还是应该算递推吧!这是个等价变化,对结果完全没有影响。再加上打印语句观察中间步骤,现在怎么看都像递推,递归只是做做样子的了?因为尾递归不允许两个子式,也不引用返回值。关于斐波那契数的计算,写成递归式就是。现在n不递减,变化一下递归结束条件,

2023-10-25 11:39:10 114

原创 带返回值的递归转为非递归

为了便于观察,把C(n-1, k) 和 C(n-1, k-1)的返回值逐个分配在alloc数组a[]里面。并且增加一个特别的H()任务来求和,H()任务和C(n-1, k) 和 C(n-1, k-1)压入同一栈中,所以H()任务用一个不可能出现的n值,即-1,来表示 和 C()任务的区别。注意压栈的顺序是逆序即H(), C(n-1, k-1),C(n-1, k)。计算公式是,C(n, k) = C(n-1, k) + C(n-1, k-1)。带返回值的递归转为非递归与不带返回值的递归转为非递归相似。

2023-10-21 09:15:00 117

原创 用户函数自动共享全局output数组功能

y_tab解释程序中,虽然有了用户自定义函数的功能,能够按照值传递规则传递参数,但是仍然不能传递引用。但是可以增加一个全局的,名字叫output的特殊数组,让每个用户自定义函数自动拥有这个数组,从而获得函数之间共享全局数据的功能。上面,strcpy()的这几句,在符号表中增加"output"符号,最后output的2句,给这个数组分配固定空间。此外,还要在调用用户自定义函数分配空间时,及用户自定义函数返回回收分配空间时,跳过这个output数组。当然,在清理符号表时,也跳过这个符号。

2023-10-03 15:00:00 259

原创 print语句的续行问题

所以,最后引用的字符串要到运行栈的栈顶,找到当前正在执行的函数,通过它的func指针找到它的字符串常量表,然后才能引用到这个字符串。它没有直接绑定数据元素,而是生成了一个NT_POP节点,在节点左指针中存放数据元素,这里是字符串数据,NT_STRING节点。希望做成这样,如果print语句的最后一个元素是字符串,且是单个退格符"\b",则控制print语句不换行。如果希望输出在同一行上,对不起,没办法。语法节点标记为NT_PS,说明这个语法树子树是个打印语句,它只有左指针有内容,指向实际要输出的数据。

2023-10-01 17:45:00 108

原创 捕捉数组越界访问问题

有时候,在数组上实现一个算法的时候,往往需要在算法中把数组分解成一些子数组。如果在这些子数组上出现越界访问,代表算法的实现有问题。但这些问题常常不容易发现。这时候,可以用带有数组越界访问检测功能的重载数组来暂时替代这些子数组,来捕捉算法的实现的越界访问问题。编译之后,就可以把隐藏的越界访问查出来了。

2023-10-01 10:00:00 163

原创 汉诺塔的2个非递归解法

关于汉诺塔的非递归解法,如果使用堆栈模仿递归解法的入栈出栈操作,则因为编译器产生的汇编指令,对递归解法的出入栈操作优化的效果,非递归解法没有明显的性能提升。第一个参考了2叉树的非递归中序遍历算法。第二个采用压栈生成子任务思路,注意子任务的压栈顺序和实际执行相反。至此,用堆栈改进递归算法的学习终于可以毕业了!

2023-09-26 15:45:00 87

原创 C++的继承(十):虚函数和Debug

而且,无论这里的OnCmdMsg()是为真而在里面调用了ID_FILE_NEW对应的处理函数OnFileNew(),还是为假因而调用了if块中的OnFileNew(),总是要调用OnFileNew(),不是吗?无论何时,当需要对一个写好的类成员函数调试时,都可以派生一个新的类,只包含一个成员函数,跟要调试的成员函数重名。复制它的代码并修改,因而重载它。为了调试这个代码,重新派生一个CApp类,代码只包含一个函数,名字也叫ProcessShellCommand。有时候,对写好的代码有疑问,所以需要调试。

2023-09-07 08:00:00 163

原创 C++的继承(九):filebuf过滤器问题

这里借用了strstream和fstream,一个用来读取数据,一个用来填充过滤后的缓冲区。最后结果是mybuf继承filebuf, 代换fstream中的filebuf后,克隆fstream的代码,重新封装成myfstream。所以要模仿一个filebuf的类型,它和filebuf的内容几乎一模一样,除了多了一步过滤奇数。而且fstream也是个标准类,更糟糕的是filebuf已经被它写成了私有数据成员了。为了工作并发进行,开发团队决定暂时屏蔽数据文件中的奇数,但不能破坏文件中的数据。

2023-06-24 01:23:27 114

原创 C++的封装(九):把多态装进盒子

而含有多态内容的stream_buf指针,作为iostream类的构造函数参数,传递给iostream类,从而把多态的范围控制在iostream类。当多态的指针交给各个分散的代码段的时候,多态的范围就是各个分散的代码段。通过这样一个继承链和虚函数实现以后,可以狼和鳄鱼的对象可以以animal的面目出现在程序中,但仍然可以保持各自的个性bite()。现在,程序的其他部分引用这个改编的animal的时候,不需要考虑多态,而运行时实际上狼和鳄鱼还是保持了自己的个性bite()。详细请看编译器的STL源码。

2023-06-19 12:43:40 154

原创 求这个数的23次方根

来看一下大数的计算。这是一个201位的10进制整数。现在要求它的23次方根。x的初值为8(+1)位数,有效数字为5.463535。先估计x的初值,n近似为9.16 * 10**200。求得这个数的23次方根为5 4637 2891。

2023-05-30 05:55:26 177

原创 C++的模板(六):类型推导

由于用到n/2的计算式,n的奇偶性会对结果产生影响,所以模板递归头有两个:对于vector_front的半段,递归头是特化的vector_front和vector_front;关于在《用继承和模板写个C++的vector》中给的例子,https://blog.csdn.net/aaasssdddd96/article/details/102636814, operator。中这几个条件语句是写给编译后的目标程序的,不能给编译器利用,这样的推演最终导致编译器的推导陷入无限递归。

2022-09-24 15:46:51 320

原创 C++的封装(八):inline函数

同样的代码,编译的结果跟编译的顺序,有没有优化有关。这样可以保证只有一份源代码。但是受条件编译的影响,编译出来的目标代码可能并不一样。当偶然的,把release版本的obj和debug版本的obj link到一起时,可能会出现意想不到的问题。C++的inline函数看似简单,却是非常容易出问题的地方。需要特别小心,不小心可能会被遇到的错误吓到。C++的版本虽然不断修订,inline函数的缺陷却一直没有被人注意到。这里x.cpp和main.cpp的代码中都出现了expimp函数的一个inline实现。

2022-09-18 17:09:42 253

原创 C++内存泄漏的检测

当怀疑某个class存在内存泄漏时,让它临时继承这个base类,就可以全程追踪这个class所有的内存分配了。程序的逻辑还是对的,暂时没有表现出什么异常,但内存不停的消耗,越来越大,系统越来越慢,最终崩溃。如果写程序的人自以为内存已经全部释放,而容器中还有元素,就说明存在了内存泄漏。为了追踪class D的内存问题,只需让D简单的继承一下重载过new 的base类,一切追踪都是自动完成。当调试完成时,确定class D的内存操作都已正确,只需把D 对重载new的继承删除即可。完整的代码是这样的,

2022-09-13 19:31:02 693

原创 语法树到中间代码

把源程序扫描进语法树后,怎么继续转化成中间代码呢?把分支语句的继续转化成条件表达式计算和goto语句:把循环语句的继续转化成条件表达式计算和goto语句:其他几个分支和循环的变体,也同法转化。这样就得到了只包含表达式计算和goto的顺序语句。因而语法树退化成线性结构:内容只剩下表达式和goto,计算的时候,每条语句只有两种状态:要么正在执行,要么不在执行,不再出现语句挂起,递归执行内层语句的情况。这样就可以采用数组存储。数组存储的显著优点是可以随机跳转,跳转没有搜索开销。最后复合表达式再分解为基本表达

2022-06-20 11:13:10 351

原创 C++的封装(七):namespace

C++很多类型在定义的时候,同时也定义了一些标志,供用户调用的时候使用。典型的,如STL的iostream,打开文件时,就需要用到一些预定义的标志。#include <fstream>using namespace std;int main(){ ofstream fp("test.txt", ios::out|ios::app|ios::ate);}这样,既显得臃肿记忆又有些负担:用到的out,ate,app标志究竟属于ios? ios_base? basic_ios? 还是

2022-02-10 15:33:00 1530

原创 大数的除法运算

数学里的除法运算通常写作:y / x = a …b如果写成等价的乘法形式,则是:y = ax + b这个式子有个性质,就是,如果用100x来代替式中的x, 分成2个式子y = a1(100x) + y1y1 = a2 x +b1就有 a= a1a2的连缀, b= b1。这个性质可以用来分段计算a值。如果用2进制,写成y = a0a1a2…an x +b移项得,y - a0 (2^n *x) - … - an x = b这是一个连续减的计算。 a0…an的取值是0或1。在连续减的过程,

2022-01-30 15:49:02 1155

原创 C++的封装(六):析构函数潮

现在假设在一个图形系统上工作。图形系统的最基本的单位是“点”:class Point : public GObject{public: int x; int y;public: point(); double distance(); double distance(Point p); double direction(); ~point();};这个定义暂时看起来似乎还不错。不过需要注意这里“点”的构造函数、析构函数是有内容的。一个图形系统上的任务会用到大量的“点”。任务完成时

2022-01-21 19:37:44 283

原创 二叉树和尾递归

二叉树是递归结构,用递归方法来访问是最自然的。下面摘录课本二叉树中序遍历代码,这是最简单大家最熟悉不过的东西了:#include <stdio.h>#define visit(tree) printf("%d ", tree->x)struct node { int x; struct tree *left; struct tree *right;};void inorder(struct node *tree) { if(tree->left) inor

2021-11-17 21:18:41 427

原创 C++的继承(八):模板和虚函数

我们知道包含基类的成员和继承的作用是相同的,如果没有用到虚函数和受保护的成员的话。现在,一个对话框包含两个button,既然能够用成员变量来实现,那么用继承来实现当然是没问题。class SystemButton {};class Button1 : public SystemButton {public: virtual OnButtonClick1() { printf("button 1 click\n"); }};class Button2 : public Sys

2021-10-09 08:48:46 636

原创 C++的封装(五):把所有的东西封装成一个类

现在假设老师布置了作业,要班上同学做个汉诺塔程序。做好之后,大概是这样子:void hanoi(int level, int from, int to, int temp){ printf("hanoi-tower\n");}void hanoi_norecursion(int level, int from, int to, int temp){ printf("hanoi-tower2\n");}int main(){}现在要把代码和别的同学的合并

2021-10-06 10:01:44 911 1

原创 C++的继承(七):多态和重载

C++中多态如果反过来看,就是“少态”。关于C++中多态和重载的问题,先来看下面的例子:class Sound {public: int value; void louder() { value++; }};class Display {public: int value; void brighter() { value+=10; }};这是两个完全没有联系的类。现在我们要为他们各写一个demo。demo可以这样写:void

2021-10-05 21:34:33 237

原创 冒泡排序bubblesort(二)

关于冒泡排序的循环头部,for(i=0; i<n-1; i++)…,另一种思考方法是,n 个元素的序列,每次把最小的元素冒泡到头部,剩下的元素头部逐步减少1,未排序序列的长度也跟着从前头部缩小1,尾部不变,已排序部分则增大1。直到未排序的序列只剩下最后一个序对时,做最后一次比较和交换,任务即告完成。这时,用for(i=0; i<n-1; i++)…表示对已排序部分的收集。这样也可。这是逐个增加的。但对逆序对的扫描就需要从右至左扫描了。写成代码就是下面的样子,这里用printp2()来展示有

2021-09-24 12:09:37 53

原创 冒泡排序bubblesort

以前对冒泡排序不够重视。依照算法书硬背下来似乎也就够了。算法依次扫描序列中的逆序对,把它交换过来。那么n 个元素的序列,可以划分出 n-1个邻接的序对,这是不言而喻的。从左到右扫描逆序对的时候,每次交换,都把较大的那个交换进下一个序对, n-1个序对扫描完的时候,最后一个序对的最后一个元素就是整个序列的最大者。所以冒泡排序的第一趟扫描确定了最终序列的第n个元素,把它排除之后,序列缩短为 n-1个元素的序列,这样就可以继续套用前面的做法,直到序列缩短为只有2个元素,2个元素如果逆序,交换一下任务完成,如果不

2021-09-24 09:40:18 81

原创 C++的封装(四): 访问控制

C++在类型封装中引入public/protected/private访问控制之后,对成员的混乱访问问题得到了纠正,但同时也带来了一个问题,就是作者自己也无法随意访问类中的成员。一个正在开发中的类是需要随时检查内部成员变量的,毕竟一个没有经过仔细调试的东西是不能保证正确的。这个问题怎么解决呢?第一步,在开始设计一个类型时,可以先用struct。用struct声明的类,所有成员默认都是public属性的,这时可以随时检查内部成员变量的值,也可以随时调用各个成员函数,没有访问障碍。当类型开发成型后,再改回c

2021-09-17 20:29:16 91

原创 C++的继承(六):多重继承转化为单重继承

C++语言中,使用继承的时候,如果派生类没有用到基础类中的受保护成员,也没有用到虚函数,则可以用分层而不用继承。只要派生类中包含一个基础类的数据成员。虽然引用的语法起了些变化,功能却不受影响。如:class Base {public: void f(){}};class D {public: Base b;};如果是多重继承,如果也是这种情况,即没有使用到基础类的受保护成员或虚函数,那么也可以同样转换成分层。如果用到了基础类中的受保护成员或者虚函数,则每个

2021-09-12 09:18:15 625

原创 C++的模板(五):压缩格式

声明一个C++的模板语法是,template 压缩格式的用法很简单。就是在外部定义一个struct, 把传给模板的参数,定义到struct 里面,这样就只要传一个struct 好了。比如原来的template是这样的:template<class Node_type, class Value_type> …可以把传给template两个参数类型收集到一个struct里面去。然后再把这个struct传给template:struct my_value {…};struct my_nod

2021-09-05 07:17:14 97

原创 UNIX的fork()和exec()调用是一种bootloader

在UNIX流派的系统上,启动一个新程序的方法是用fork()和exec()系统调用。fork()复制当前进程,然后exec()启动新程序。然而为什么要使用这么一个奇怪的流程呢?UNIX设计为分时系统。系统的每个进程,通过操作系统分享了同一个计算机硬件,它们运行在操作系统映射的虚拟机上。这个虚拟机就是程序运行所需的“硬件”。那么fork()就是复制了这么一个虚拟机。而exec()就是把一个新程序装入到这个虚拟机。所以exec()是虚拟机上的引导程序,就像系统启动时,lilo和grub这类真机上引导程序一样。

2021-06-21 21:56:07 133

原创 在语法树中解释执行Goto语句

解释执行含有goto语句的语法树是相当麻烦的。当遇到goto节点时,要抛出goto的目标节点。然后逐级向语法树上游回溯,每回溯一层,又要向下扫描这一层除抛出goto的节点以外的语句。如果找到目标节点,则清除这个label,从这个点恢复执行语法树。否则继续抛出goto。这里还有两种情况,因为下层的语句有可能已经执行过了,然而在执行过程中又抛出了goto。所以还需判断返回的goto是否和传入的goto相同。如果不同,那么前面被排除的抛出goto的分支再排除已经是不对的了,要重新加回去扫描。在搜寻goto 目

2021-03-13 13:32:01 267 1

C 语言脚本解释程序y

自己设计的C语言解释程序。可以解释执行基本的C语言语句。包含C语言的基本流控语句,数据有整数和浮点数据类型。print语句可以使用字符串。新增了自定义函数功能。一定程度上能代替C语言进行数值计算。适合用于C语言学习,数值计算,算法测试等场合。包内txt文件含有例子程序。

2021-03-11

bigtab.zip

C语言解释程序。可以交互式运行或执行脚本。数据类型只有整数一种。但大小没有限制。可以用作大数计算和高精度计算。语法同C语言。其中包括求小数点后100位对数,平方根,三角函数的示例脚本。

2021-02-02

选修课学习计划配置器|score.zip

根据选修的课程,累计同学的学分,看是否达到要求。以此确定本学期学习计划。课程名字和学分可按照example.txt 的格式配置。

2020-11-06

tetris.zip

俄罗斯方块编程练习。C语言编写。适用于Windows环境。含有源代码。可用mingw-gcc和 VC++编译。

2020-04-12

自动配平化学反应方程式程序-大系数

化学反应方程式自动配平的程序。Windows系统下运行。在原来的基础上增加了对大系数的处理。能够配平系数在10000以内的化学方程式。 input chemical expr: NaClO3 +FeCl2 + HCl = NaCl + FeCl3 +H2O 1 6 6 1 6 3 input chemical expr: KMnO4+FeSO4+H2SO4=Fe2(SO4)3+MnSO4+K2SO4+H2O 2 10 8 5 2 1 8 input chemical expr: Fe+HNO3+H2O=Fe(OH)3+NH4NO3 8 6 15 8 3 input chemical expr: MnO2+HCl=MnCl2+Cl2+H2O 1 4 1 1 2 input chemical expr: Cl2+NaOH=NaCl+NaClO+H2O 1 2 1 1 1 input chemical expr: PhCH3 + KMnO4 + H2SO4 = PhCOOH + K2SO4 + MnSO4 + H2O 5 6 9 5 3 6 14 input chemical expr: P4 +P2I4 +H2O = PH4I + H3PO4 13 10 128 40 32 input chemical expr: K4Fe(CN)6+KMnO4+H2SO4=KHSO4+Fe2(SO4)3+MnSO4+HNO3+CO2+H2 4 30 82 46 2 30 24 24 47 input chemical expr: Fe36Si5+H3PO4+K2Cr2O7=FePO4+SiO2+K3PO4+CrPO4+H2O 9 836 192 324 45 128 384 1254

2019-10-05

自动配平化学反应方程式程序

中学生化学课学习资源。运行环境说明 1, 安卓手机使用需安装Dosbox环境,然后把Dos版本程序存入Dosbox的目录,Dosbox启动后,在C:\>后输入程序名运行 2, Win系统可以使用Windows下的版本 3, 提供源代码

2019-06-05

自动配平化学反应方程式程序

中学化学反应方程式自动配平的程序。中学生化学课学习资源。16位程序,可在Dos, Dosbox,WinXP 系统使用。

2018-11-29

C++ GUI Qt4 编程(第二版) 英文版

C++ GUI Qt4 编程(第二版) 英文版, CHM格式

2016-12-21

802.11权威指南

802.11权威指南, 802.11® Wireless Networks: The Definitive Guide

2014-05-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除