如何更好更快的学习编程的经验

第一:基础打好!先找本最基础的书看,不管别人评价他是多么的垃圾!因为对你来说,这本书很不错!第二:看书的时间不超过%5就对了,网络才是真正学知识的地方!一个问题你可能要看一天的书才明白,但Google一下可能10分钟搞定!第三:你要装B,装B,再装B!!要把自己当牛人才能成为牛人,CSDN不是有人提问吗?你是大牛,帮他们解决问题吧,别人问的不会才好,Google吧,然后你会了!再然后你牛了! 第四:提问题!一个人学习不可能不会遇到问题,太没质量的问题不要题,养成独立思考的习惯,Google可以帮助你思考!第四:面试题!一般出面试题的人不会是垃圾,也不会出太垃圾的题,完全搞懂出题人...
原创 | 2010-04-08 18:56 | 阅读 1214 次 | 评论 1 条

用栈实现递归与非递归的转换

递归与非递归转换的基础知识是能够正确理解三种树的遍历方法:前序,中序和后序,第一篇就是关于这三种遍历方法的递归和非递归算法。 一、为什么要学习递归与非递归的转换的实现方法? 1)并不是每一门语言都支持递归的。 2)有助于理解递归的本质。 3)有助于理解栈,树等数据结构。 二、三种遍历树的递归和非递归算法 递 归与非递归的转换基于以下的原理:所有的递归程序都可以用树结构表示出来。需要说明的是,这个”原理”并没有经过严格的数学证明,只是我的一个猜 想,不过在至少在我遇到的例子中是适用的。学习过树结构的人都知道,有三种方法可以遍历树:前序,中序,后序。理解这三种遍历方式...
C | 2009-04-15 14:50 | 阅读 3165 次 | 评论 0 条

Printf的部分实现

[quote][code]#include <stdio.h>int main(){ printf("%hhh"); return 0;}[/code]就是上面的代码,在VC++与C-FREE上运行没有结果显示,而在TURBOC上显示的结果则为%hhh请问下这是为什么?哪个结果才是正确的呢?[/quote] 这个问题的原因是因为几种编译器对printf函数的实现不同,下面我对这两种情况分别进行了实现 1.DEV_C++,VC++ 6.0,VS200X.....[code]#include <stdio.h> #include <stdlib.h> #include...
原创 | 2009-04-12 11:35 | 阅读 2898 次 | 评论 1 条

Date类

今天写了一个日期类,发上来共享一下 //头文件:(date.h)class Date{public:Date();Date(int y,int m,int d);Date(const Date&amp; dt);Date&amp; add_year(int n);Date&amp; add_month(int n);Date&amp; add_day(int n);bool leapyear(int n);Date operator+(int n);Date operator-(int n);Date&amp; operator++();Date&amp; operator--()...
原创 | 2009-04-12 11:34 | 阅读 2153 次 | 评论 0 条

设计将数组A[1][n]中所有奇数移到偶数之前的算法

设计将数组A[1][n]中所有奇数移到偶数之前的算法,不另外增加存储空间,时间复杂度为o(n) /******************************************************** 算法: 从第一个数开始,如果是偶数,与最后一个数交换,同时将最后一个数排除出去,不用处理了;如果是奇数的话,就继续下一次循环....这样进行下去,直到这个数是应该处理的数的最后一个为止 **************************************************************/ #include <stdio.h> #define ...
原创 | 2009-04-12 11:33 | 阅读 4549 次 | 评论 0 条

输出一个整型数据的二进制形式(高效)

一般人会考虑用位运算,程序代码如下: #include<stdio.h> void Print(int n){if(n==1||n==0){ printf("%d",n); return;}Print(n>>1);printf("%d",n%2);} int main(){int a;scanf("%d",&amp;a);Print(a);return 0;} 我们现在用一种特别的方法.用位段,可以不用进行运算即可输出结果,首先我们用一个程序输出整型数据在内存中的形式,程序代码如下: #include <stdio.h>#include <stdlib.h>type...
原创 | 2009-04-12 11:30 | 阅读 3618 次 | 评论 0 条

控制多个光驱的打开关闭

void ctrl_cdrom_door( LPCTSTR drivename ,//光驱的盘符,如f:等. bool fOpen//弹出时用true,弹入时用false ) { TCHAR devstr[128],ctrlstr[128]; wsprintf(devstr,_T("open %s type cdaudio alias mycd wait"),drivename); wsprintf(ctrlstr,_T("set mycd door %s wait"),fOpen?_T("open"):_T("closed")); mciSendString(devstr,NULL...
原创 | 2009-04-12 11:29 | 阅读 2505 次 | 评论 0 条

求高次幂算法(高效)

#include<stdio.h> #include<math.h>#define N 62 //指定的指数int main(){ int i,x,exp=1,time=0;//exp记录指数,time用来统计乘法计算次数 scanf("%d",&amp;x); long double a,s=(long double)x; while(exp!=N) //指数等于指定的指数结束循环 { a=x; for(i=1;exp<N;i*=2)//指数小于指定的时候,继续以平方的形式递乘 { ...
原创 | 2009-04-12 11:28 | 阅读 4714 次 | 评论 5 条

汉明重量的延伸

当然对于TheBeet来说,数1个数字的二进制形式太没有挑战性了。最近TheBeet想到了一个问题来挑战自己——数出一个从0, 1, 2, .. , n的序列中数字2进制表示后1的个数。TheBeet想了很久也没想出来,于是他找到了您来帮忙。 Input 输入包含多个测试数据。 每个测试数据为一行,每行包括一个非负十进制整数n(n < 2^63)。 输入数据以-1结束。 Output 对于每个测试点,先输出"Case #:",#代表第几个测试点,然后在下一行输出对应数列二进制表示后1的个数。 Sample Input Sample Output Case ...
原创 | 2009-04-12 11:26 | 阅读 2254 次 | 评论 0 条

VB程序设计小技巧(1)

1.让你的程序只运行一次 你自己编写的程序是否可以运行多个,你是否看见有些程序运行多个时会提示程序已正在运行,下面就让我们来实现这个功能,其实非常简单,只要用APP的一个方法就可以了,在程序加载时,调用一下APP的PrevInstance方法就可以检测程序是否正在运行,程序好下 建立一个窗体,在代码中输入如下代码即可: Option Explicit Private Sub Form_Load()If App.PrevInstance Then MsgBox "The programe is running now,you shouldn't run the progr...
原创 | 2009-04-12 11:25 | 阅读 2766 次 | 评论 0 条

VB程序设计小技巧(2)

5.设置窗体透明度,并实现窗体渐入淡出 设置窗体透明度要用到三个API函数SetWindowLong,SetLayeredWindowAttributes和GetWindowLong,建立一个模块,输入代码如下: Option ExplicitPrivate Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongPrivate Declare Function SetLayeredWindowA...
原创 | 2009-04-12 11:23 | 阅读 2646 次 | 评论 0 条

第1章 文件结构

第 1 章 文件结构 每个 C++/C 程序通常分为两个文件。一个文件用于保存程序的声明( declaration ),称为头文件。另一个文件用于保存程序的实现( implementation ),称为定义( definition )文件。 C++/C 程序的头文件以“ .h ”为后缀, C 程序的定义文件以“ .c ”为后缀, C++ 程序的定义文件通常以“ .cpp ”为后缀(也有一些系统以“ .cc ”或“ .cxx ”为后缀)。 1.1 版权和版本的声明 版权和版本的声明位于头文件和定义文件的开头(参见示例 1-1 ),主要内容有: ( 1 )版权信息。 ( 2 )文件名称,...
C | 2009-03-09 09:58 | 阅读 4147 次 | 评论 0 条

第2章 程序的版式

第2章 程序的版式 版式虽然不会影响程序的功能,但会影响可读性。程序的版式追求清晰、美观,是程序风格的重要构成因素。可以把程序的版式比喻为“书法”。好的“书法”可让人对程序一目了然,看得兴致勃勃。差的程序“书法”如螃蟹爬行,让人看得索然无味,更令维护者烦恼有加。请程序员们学习程序的“书法”,弥补大学计算机教育的漏洞,实在很有必要。   2.1 空行   空行起着分隔程序段落的作用。空行得体(不过多也不过少)将使程序的布局更加清晰。空行不会浪费内存,虽然打印含有空行的程序是会多消耗一些纸张,但是值得。所以不要舍不得用空行。【规则2-1-1】在每个类声明之后、每个函数定义结束之后都...
C | 2009-03-09 09:57 | 阅读 3050 次 | 评论 0 条

第3章 命名规则

第3章 命名规则比较著名的命名规则当推Microsoft公司的“匈牙利”法,该命名规则的主要思想是“在变量和函数名中加入前缀以增进人们对程序的理解”。例如所有的字符变量均以ch为前缀,若是指针变量则追加前缀p。如果一个变量由ppch开头,则表明它是指向字符指针的指针。 “匈牙利”法最大的缺点是烦琐,例如int i, j, k; float x, y, z;倘若采用“匈牙利”命名规则,则应当写成int iI, iJ, ik; // 前缀 i表示int类型float fX, fY, fZ; // 前缀 f表示float类型如此烦琐的程序会让绝大多数程序员无法忍受。据考察,没有一种命名规则可以...
C | 2009-03-09 09:57 | 阅读 2415 次 | 评论 0 条

第4章 表达式和基本语句

第4章 表达式和基本语句   读者可能怀疑:连if、for、while、goto、switch这样简单的东西也要探讨编程风格,是不是小题大做?我真的发觉很多程序员用隐含错误的方式写表达式和基本语句,我自己也犯过类似的错误。表达式和语句都属于C++/C的短语结构语法。它们看似简单,但使用时隐患比较多。本章归纳了正确使用表达式和语句的一些规则与建议。 4.1 运算符的优先级   C++/C语言的运算符有数十个,运算符的优先级与结合律如表4-1所示。注意一元运算符 + - * 的优先级高于对应的二元运算符。 优先级 运算符 结合律 从   高 ...
C | 2009-03-09 09:57 | 阅读 3931 次 | 评论 0 条

第5章 常量

第5章 常量常量是一种标识符,它的值在运行期间恒定不变。C语言用 #define来定义常量(称为宏常量)。C++ 语言除了 #define外还可以用const来定义常量(称为const常量)。 5.1 为什么需要常量 如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦?(1) 程序的可读性(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意思,用户则更加不知它们从何处来、表示什么。(2) 在程序的很多地方输入同样的数字或字符串,难保不发生书写错误。(3) 如果要修改数字或字符串,则会在很多地方改动,既麻烦又容易出错。l 【规则5-1-1】 尽量使用含义直观的常量来表示...
C | 2009-03-09 09:55 | 阅读 2030 次 | 评论 0 条

第6章 函数设计

第6章 函数设计 函数是C++/C程序的基本功能单元,其重要性不言而喻。函数设计的细微缺点很容易导致该函数被错用,所以光使函数的功能正确是不够的。本章重点论述函数的接口设计和内部实现的一些规则。函数接口的两个要素是参数和返回值。C语言中,函数的参数和返回值的传递方式有两种:值传递(pass by value)和指针传递(pass by pointer)。C++ 语言中多了引用传递(pass by reference)。由于引用传递的性质象指针传递,而使用方式却象值传递,初学者常常迷惑不解,容易引起混乱,请先阅读6.6节“引用与指针的比较”。   6.1 参数的规则   【规则6...
C | 2009-03-09 09:55 | 阅读 2623 次 | 评论 0 条

第7章 内存管理

第7章 内存管理欢迎进入内存这片雷区。伟大的Bill Gates 曾经失言: 640K ought to be enough for everybody — Bill Gates 1981程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本章的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。7.1内存分配方式内存分配方式有三种:(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2) 在栈上创建。在执行函数时,函...
C | 2009-03-09 09:55 | 阅读 2804 次 | 评论 0 条

第8章 C++函数的高级特性

第8章 C++函数的高级特性   对比于C语言的函数,C++增加了重载(overloaded)、内联(inline)、const和virtual四种新机制。其中重载和内联机制既可用于全局函数也可用于类的成员函数,const与virtual机制仅用于类的成员函数。重载和内联肯定有其好处才会被C++语言采纳,但是不可以当成免费的午餐而滥用。本章将探究重载和内联的优点与局限性,说明什么情况下应该采用、不该采用以及要警惕错用。8.1 函数重载的概念 8.1.1 重载的起源自然语言中,一个词可以有许多不同的含义,即该词被重载了。人们可以通过上下文来判断该词到底是哪种含义。“词的重载”可以使语...
C | 2009-03-09 09:54 | 阅读 2368 次 | 评论 0 条

第9章 类的构造函数、析构函数与赋值函数

第9章 类的构造函数、析构函数与赋值函数   构造函数、析构函数与赋值函数是每个类最基本的函数。它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险。  每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。对于任意一个类A,如果不想编写上述函数,C++编译器将自动为A产生四个缺省的函数,如A(void); // 缺省的无参数构造函数A(const A &amp;a); // 缺省的拷贝构造函数~A(void); // 缺省的析构函数A &amp; operate =(const A &amp;...
C | 2009-03-09 09:54 | 阅读 2367 次 | 评论 0 条
浏览190678次