迭代算法解题的一般思路
迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。 利用迭代算法解决问题,需要做好以下三个方面的工作: 一、确定迭代变量。在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。 二、建立迭代关系式。所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键...
小谈声明(Declaration)与定义(Definition)
今天读到林锐的书《高质量C++/C编程指南》,对其中的声明和定义内容颇有微辞。 声明(Declaration)用于说明每个标识符的含义,而并不需要为每个标识符预存储空间。预留存储空间的声明称为定义(Definition)。声明的形式为:声明说明符 声明符声明符是由存储类说明符和类型说明符组成的。 1、变量的声明有两种情况: 一种是需要建立存储空间的。 例如:int a 在声明的时候就已经建立了存储空间。 2、另一种是不需要建立存储空间。 例如:extern int a 其中 变量a是在别的文件中定义的。...
使用Visual C++调试器调试
使用Visual C++调试器调试 一、调试版本与发布版本 有时程序能在调试版本运行但不能运行于发布版本,反之也有可能。一般说来,一个发布版本意味着某些类型的优化,而一个调试版本则没有优化。下面我们来看看它们的区别: 1、特别针对调试版本的编译选项 (1)/MDd,/MLd或者/MTd 调试版本的运行时刻库有调试符号,使用了调试堆,调试堆的目的是发现内存破坏和内存泄漏,并且向用户报告源代码的哪个地方出了问题。特性: .调试版本的运行时刻库对内存的分配作了跟踪,允许用户检查内存泄漏。 .在刚分配的内存里写...
程序员应具备的素质
中国有很多精于编码的人,但是中国软件行业,尤其是网络应用开发方面误区很大,很难形成有规模的软件开发力量和产品能力,不但比美国差距甚远,和印度相比也是颇有不如。这些问题不是在于中国程序员的智商和工作努力状况,也不是在于国家和民间对开发的投入程度,而是很大程度上,有一些对技术,对程序开发,对项目设计方面的思想误区,这些误区,导致了软件行业的产品化能力不足,缺乏规模化和大型复用系统研发能力,可以说,改变认识误区,是解决软件行业小作坊模式和个体英雄模式所带来的局限性的重要工作。 程序员是一种技术工作,在IT的发...
关于结构的size和class的size
这个东西让我载了跟头;一定要弄明白;结构的size和class...
调用CSC编译器的一个批处理文件
自己写的第二个实用批处理文件^^ @echo off set input=%2 set outpu=%1 set wdir=%cd% set output=%outpu%.exe cls if == (set output=out.exe) if =={} (set input=%outpu%.cs) if == goto inse if not exist %input% goto ine if exist %output% del %output% pushd %windir%\Microsoft....
小写金额转换为大写金额(C实现)
银行、单位和个人填写的各种票据和结算凭证是办理支付结算和现金收付的重要依据,直接关系到支付结算的准确、及时和安全。票据和结算凭证是银行、单位和个人凭以记载帐务的会计凭证,是记载经济业务和明确经济责任的一种书面证明。因此,填写票据和结算凭证,必须做到标准化、规范化,要要素齐全、数字正确、字迹清晰、不错漏、不潦草,防止涂改。 我的服务需要一个金额转换过程,本来想在网上找,但都是C++、JavaScript、Delphi的Demo,还没有C的。索性自己写一个。参考了其它的转换算法,对我有些启发。 大多的算法都...
玩转setjmp与longjmp
不要忘记,前面我们得出过结论,C语言中提供的这种异常处理机制,与C++中的异常处理模型很相似。例如,可以定义出类似的try block(受到监控的代码);catch block(异常错误的处理模块);以及可以随时抛出的异常(throw语句)。所以说,我们可以通过一种非常有技巧的封装,来达到对setjmp和longjmp的使用方法(或者说语法规则),基本与C++中的语法一致。很有诱惑吧! 首先展示阿愚封装的在C语言环境中异常处理框架 1、首先是接口的头文件,主要采用“宏”技术!代码如下: /*******...
全面了解setjmp与longjmp的使用
将对setjmp与longjmp的具体使用方法和适用的场合,进行一个非常全面的阐述。 另外请特别注意,setjmp函数与longjmp函数总是组合起来使用,它们是紧密相关的一对操作,只有将它们结合起来使用,才能达到程序控制流有效转移的目的,才能按照程序员的预先设计的意图,去实现对程序中可能出现的异常进行集中处理。 与goto语句的作用类似,它能实现本地的跳转 这种情况容易理解,不过还是列举出一个示例程序吧!如下: void main( void ) { int jmpret; jmpret = setj...
gdb相关命令简介
今天学习使用gdb,现总结如下: 关于断点的命令: awatch: awatch用来为一个表达式设置观察点,在表达式的值发生改变时,或者当表达式的值被读取的时候,程序停止执行。 break: 用于在程序中设置断点 break + 要设置断点的行号 clear: 用于清除断点 clear + 要清除断点的行号 commands: 用于为遇到断点之后执行特定的指令而设置的 command + 断点号 如果commands 之后没有断点号,gdb会将最后一个设置的断点编号作为默认值。 condition: 在...
递归算法的全排列
#include stdio.h int a[100]; static int c; static int counter; bool check(int n,int m,int k) { int i; for(i=n;ik;i--) if(m==a[i])return false; return true; } void quanpailie(int n,int k) { int i,j; if(k=1) { for(i=n;i=1;i--) { if(check(n,i,k)) { a[k]=i;...
关于Debug和Release之本质区别
-------------------------------------- 本文主要包含如下内容: 1. Debug 和 Release 编译方式的本质区别 2. 哪些情况下 Release 版会出错 3. 怎样“调试” Release 版的程序 -------------------------------------- 关于Debug和Release之本质区别的讨论 一、Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调...