自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++的模板(十二):forward模板

如果调用的是C++自动生成那个版本,会自动调用基类的对应的复制构造函数。这个例子中,复制构造函数写成了模板。在复制构造函数模板中,向重载的print()成员函数转发了参数a。模板并不清楚传给它的类型是哪种重载类型,因此转发给print(),让它打印出来。这里,forward模板携带的参数类型T,照抄模板的传入类型。f()和g()函数的"赋值"语句(赋值格式的初始化语句)各导致了2次复制构造函数调用。运行结果提示,b2确实调用了C++自动生成的那个复制构造函数。这样就可以对不同的类型,做不同的处理。

2024-07-16 12:36:49 160

原创 C++的模板(十一):算法的轨迹

set的find()方法只比较了一个子集。这里用了两组强制类型转换,把int的容器,直接当作类型integer的容器来看了:因为integer是int的原样包装,它们在2进制上没有任何不同,也就是说,在运行期没有任何不同,这样转换当然是可以的。对于容器的一个参数数据类型T,这里是int,可以对它重载一个2进制内容完全一样的 wrap_T,拦截它的构造函数,析构函数,赋值,比较等接口函数,就可以抓到它的运行轨迹。如果不想装入大量的数据,执行数十万,数百万的检索进行比较,那么怎么知道用set检索的效率更高呢。

2024-07-15 18:56:02 298

原创 用解释程序交错执行2个线程

其中,用ecount表示thread的任务是执行10次,count从 0计数,到ecount执行结束。ins照旧,存放swap(a,b):或swap(a,c):的指令。现在注意力集中到考虑,以swap(a,b):, swap(a,c):, 为蓝本的2个线程,每个线程各执行相应的swap代码10次。前面的例子,swap 语句串扰执行问题,实现了一个assign指令的解释器。现在就借用它的代码,用解释程序演示一下多线程是怎么执行的。当sched()选择的"下一个"线程已经finish,sched()就返回0。

2024-07-07 19:54:24 248

原创 Swap语句的串扰执行问题

这可以看作在6个位置的指令片中,任选3个位置,依次填入swap(a, b)的这3个语句,剩下的空位,依次填入swap(a, c)的这3个语句。指令串的每一个指令都是对初始化好的swap(a, b):和swap(a, c):的6个指令的引用。操作数给出初始值{a(‘A’), b(‘B’), c(‘C’), t1(‘x’), t2(‘z’)}。要验是否证线程安全,简单的办法是,做2个线程,各自运行swap语句数十万次,在并发环境下观察运行结果,如果出现非预期的结果,即判定线程不安全。然后转化成20个指令串。

2024-07-05 10:58:00 186

原创 C++的模板(十):shared_ptr的上锁问题

这个_M_ptr也是那个被引用计数管理的对象指针,在_Sp_counted_base及其派生类的管理范围内,如果引用计数归0,最后要销毁这个被管理的对象。执行完立即产生一个调度断点,那么别的线程可以在这个点上调度运行,如果凑巧也执行了一个 __shared_ptr ::swap(),并且是前面做到一半的那个__shared_ptr,那么它的执行导致_M_refcount被换走。加锁的办法,如果管理的是少量的大粒度的对象,可以使用单一的全局锁,如果管理的是大量的细粒度的对象,就要使用局部锁,对象粒度的锁。

2024-07-04 10:59:33 790

原创 C++的模板(九):模板的实例化问题

什么原因呢,STL中的容器,对用作key的类型是有些讲究的,key必须能够比较,而这里的Event类没写“operator

2024-06-27 21:58:05 797

原创 C++的模板(八):子系统

因为构造函数被分离,这些指针在模板外可以被派生类构造,因此可以是多态的。上面示例的子系统,绑定了事件和响应的关系,并处理收到的消息。因此,就允许了Event和Response的多态存在。这里有2个((DMM&)dr)、((DMM&)dr)的强制类型转换。dr中的list存的又是他们的基类指针,这样转化当然没问题。平常所见的大部分模板代码,模板所传的参数类型,到了模板里面,或实例化为对象,或嵌入模板内部结构中,或在模板内又派生了子类。不管怎样,最终他们在模板内,直接或间接,都实例化成对象了。

2024-06-24 13:06:38 180

原创 右值引用和移动语义

比如参数是某种表结构的node,在node内嵌了一个实际数据的对象,或者参数是pair模板这类情况,把几个实际数据对象粘贴在一起,这时需要把右值对象的一个或多个部分转发给对数据有管辖权的函数处理。如果在调用operator=过程中参数匹配的是函数返回值,藏在返回值中的那个list,反正下一步就会丢掉的,何不把它的内容链也直接拿过来呢,把它弄成空list,对析构也没有影响。const对参数施加了常量约束,因此在函数中不能修改参数引用的对象,这不仅包括不能改动对象的数据,也包括不能调用对象的非常量成员函数。

2024-06-18 13:00:03 765

原创 C++的封装(十三):迭代器问题

这里想说明,在别人的代码里,看到代码不是自己想象的样子,也不用奇怪,因为有各种不同的实现方法。汇编代码看起来虽然比较吃力,但还是可以看到,disp()函数调用了__ZN4list5beginEv函数,对应源代码的list::begin(),然后调用了 __ZN4list3endEv函数,对应源代码的list::end(),然后又调用了 _顺便说一下,察看生成的汇编代码时,因为编译器对原函数作了名称转化,运算符重载函数名不易辨认,可在源代码挨着运算符重载换个名字再写一下这个代码,这样在汇编代码中就容易找了。

2024-06-13 19:57:54 1257

原创 C++的封装(十二):外部构造函数

Create_AB(), Create_BC()是类AB, BC逻辑上的构造函数。变化之后,去掉了构造函数参数中的多余的选项。何况,关于这些参数实现细节用户根本没有什么概念,让他创建对象时去选择这些选项,他也不知道选得对不对?当然Create_AB(), Create_BC()作为config类的成员函数,仅仅是普通的成员函数。如果实现过程需要施加更多的控制,比如增加私有数据allow_debug_a,allow_debug_b作为控制选项,这时最好重开一个新的类,一个config类,让它去专注干这事。

2024-06-08 22:17:37 353

原创 大数除法运算,利用乘法优化

先用比除数多一个数位的基本单位去除以除数,得到基本单位的商d和余数r,那么如果这个数位上是n,用n去乘商和余数,可以得到近似的商nd和余数nr。假如除数是一个数位的x,那么先用两位数{1,0},实际是10000,去除x得商d和余数r,那么数{n, 0}除x,会得到商nd和余数nr。output[]={9,9,-1},现在的意思是90009。最后需要处理d[]的进位,处理后d[]传到output[]数组。在大数除法过程中,如果能有意识的利用乘法运算,应当能够提升计算速度的,因为乘法速度比较快。

2024-06-04 23:48:43 320

原创 C++的继承(十一):私有继承和受保护的继承

这就出现了一个奇观,在公共区域都能访问到的数据,到了派生类中反而访问不到了。但凡用过C++的人都知道:私有继承的成员在派生类里均为私有,受保护的继承公有和受保护的在派生类里为受保护。为了防止过度玩弄这样的花招,C++允许私有继承和受保护的继承在派生类里开放基类的权限。在这里,C的析构函数不能访问X的数据a和成员函数sqare()。进而想到,在C里面也这样做,不是就可以访问私有继承的X中的成员了吗,回避这个问题,最好的办法是让B受保护继承X,这样就可以了。通过X的别名来引用X,骗过编译器,这样就可以了。

2024-05-29 10:26:42 323

原创 C++的封装(十一):linux风格的链表和稀疏矩阵

还有一些必要的插入,删除,引用操作,它们是稀疏矩阵的基本功能。它没有包含数据字段。当然,要客户化,添加需要的用户数据,并且把list::node的指针转化到客户客户node上来。上面list的代码,list::node的结构用了标准库的pair模板,这个没有关系啊,完全可以用简单的指针,这里使用只为评估一下这玩艺好不好用。外部的visit(), found(),dispose()几个作为回调函数运行时传到链表中,这样可以随机应变,保证了操作的灵活性。插入,删除,遍历,释放都试了一遍,已经能够正常工作了。

2024-05-24 10:59:09 192

原创 C++的模板(七):左值强制类型转换

如果没有用这个语法显式实例化这个类,直接用Savein仍会碰到访问权限的问题。这样做是妥当的,因为数据成员默认都是private的,如果模板不接受指向private的数据成员的指针,这个语言也就没有这种功能了。指向数据成员的指针,除了转换指向其它数据成员的指针,不能转换成别的类型。这一步过关之后,可以通过Whatever类的对象或指针和拣出来这个x来访问类的私有数据了,这时已经是运行期问题了。这个数据成员的指针是可以提取出来的。

2024-05-22 02:19:33 288

原创 大数的指数运算

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

2024-04-25 08:17:06 272

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

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

2024-04-17 11:34:54 235

原创 一个月有多少天

时钟交汇问题是这样一个问题,分针每小时走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 779

原创 移进/规约冲突

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

2024-03-31 11:12:27 527

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

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

2024-03-30 19:17:10 290

原创 Exception 语句

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

2024-03-23 20:03:50 277

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

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

2024-03-20 11:20:38 335

原创 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 396

原创 C语言的指针类型

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

2024-02-14 20:55:29 407

原创 C++的interface机制

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

2024-01-23 14:18:18 691

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

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

2023-12-09 15:33:15 439

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

现在固定月数,反推月还款额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 387

原创 尾递归,还是递推?

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

2023-10-25 11:39:10 116

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

为了便于观察,把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 123

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

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

2023-10-03 15:00:00 264

原创 print语句的续行问题

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

2023-10-01 17:45:00 119

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

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

2023-10-01 10:00:00 169

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

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

2023-09-26 15:45:00 120

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

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

2023-09-07 08:00:00 177

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

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

2023-06-24 01:23:27 135

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

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

2023-06-19 12:43:40 170

原创 求这个数的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 208

原创 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 330

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

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

2022-09-18 17:09:42 263

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

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

2022-09-13 19:31:02 721

原创 语法树到中间代码

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

2022-06-20 11:13:10 410

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关注的人

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