博文

经典幽默笑话(2008-02-20 17:34:00)

摘要:  甲:嫦娥为啥要急着奔月?
乙:后羿一射九日,就算神仙他也受不了啊   一对青年男女在公园约会时,女孩特别想放屁,她想了个办法:
  女:你听过布谷鸟叫吗?
  男:没听过。
  女:我给你学,布(放屁声)-谷(口中发出的声音)。
  学了几声后,该放的也已放完。
  女:听清了吗?
  男:放屁声太大,没听清
高速公路上严重塞车已经有一段时间,一名驾驶人耐心在车上等候。这时候,一个人敲了他车窗。驾驶人摇下玻璃,问对方"什么事"。对方说:"陈水扁遭恐怖份子绑架,绑架者威胁立刻交一亿元赎金,否则会用汽油和一根火柴烧死他。……所以,你了解吧,我们希望大家同心协力,尽己所能一起来捐献。"驾驶人问:"好吧……,其他人大概捐多少?""嗯……不一定,从一公升到二十公升都有。"
电脑一定是女生!!因为:
  1.大部分的男生一定会对她一往情深,当然,总有人例外。
  2.大部分的女生对她怀有敌意。
  3.你跟她在一起的时间越久,你就会越离不开她。
  4.你跟她在一起的时间越久,你花的钱就越多。
  5.她永远走在流行的尖端。
  6.她的记性出奇的好,但往往忘记最重要的那一件事。
  7.她看起来很聪明,实际上却很迷糊,凡事都得替她安排妥当、解释清楚。否则,她肯定会回答\"Bad Command or Filename\"。
  8.她偶尔会使使小性子、耍耍小姐脾气,但多半在你最需要她时“当机”,而且来不及“存档”。 中文幽默王  ......

阅读全文(2151) | 评论:0

面试题心得(2008-01-19 23:11:00)

摘要:面试题: 如何将a。b的值进行交换,并且不使用任何中间变量? 用异或的方法比较好,不会发生溢出,如果采用 a= a+b; b= a-b; a= a-b; 这样做的缺点是如果a,b很大 可能溢出,而采用: a= a^b; b= a^b; a=a^b; 面试题2: 在c++程序中调用被c编译器编译的的函数,为什么要加extern“c”? 因为c++支持函数重载,c语言不支持函数重载,函数被c++编译后在库中的名字与c语言的不同,假设某个函数的原型是:void foo(int x,int y)。该函数被c编译器编译后在库中的名字为_foo,而c++的为_foo_int_int之类的名字。 c++提供了c连接交换指定符号extern“c” 解决名字匹配的问题。  ......

阅读全文(310) | 评论:1

c++内存管理(2008-01-18 12:41:00)

摘要:程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本文的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。 1、内存分配方式

  内存分配方式有三种:
  (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
  (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
  (3) 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。

  2、常见的内存错误及其对策
  发生内存错误是件非常麻烦的事情。编译器不能自动发现这些错误,通常是在程序运行时才能捕捉到。而这些错误大多没有明显的症状,时隐时现,增加了改错的难度。有时用户怒气冲冲地把你找来,程序却没有发生任何问题,你一走,错误又发作了。 常见的内存错误及其对策如下:
  * 内存分配未成功,却使用了它。
  编程新手常犯这种错误,因为他们没有意识到内存分配会不成功。常用解决办法是,在使用内存之前检查指针是否为NULL。如果指针p是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查。如果是用malloc或new来申请内存,应该用if(p==NULL) 或if(p!=NULL)进行防错处理。

  * 内存分配虽然成功,但是尚未初始化就引用它。
  犯这种错误主要有两个起因:一是没有初始化的观念;二是误以为内存的缺省初值全为零,导致引用初值错误(例如数组)。 内存的缺省初值究竟是什么并没有统一的标准,尽管有些时候为零值,我们宁可信其无不可信其有。所以无论用何种方式创建数组,都别忘了赋初值,即便是赋零值也不可省略,不要嫌麻烦。

  * 内存分配成功并且已经初始化,但操作越过了内存的边界。
  例如在使用数组时经常发生下标“多1”或者“少1”的操作。特别是在fo......

阅读全文(2429) | 评论:2

关于C++中继承、重载、掩盖(转)(2007-12-07 21:12:00)

摘要:在开始之前,我们可以先看下面这个小程序: #include <iostream> using namespace std;   class Base { private:        int x; public:        virtual void mf1()        {               cout<<"Base: mf1()"<<endl;        }        virtual void mf1(int)        {               cout<<"Base: mf1(int)"<<endl;        }        virtual void mf2()        {               cout<<"Base: mf2()"<<endl;        }        void mf3(double)   &......

阅读全文(2399) | 评论:0

 打包程序入门图解(2007-11-16 20:16:00)

摘要:本篇文档会告诉你如何使用InstallShield开发平台来创建,编译,运行一个安装程序。在这篇文档中你会学习到安装过程中碰到的下面一些内容:加载安装文件,设置快捷方式,修改注册表,条件安装一些文件,注册com组件,更换安装界面,调试以及发布安装程序。   创建,编译,测试安装的工程   这一部分主要讲述如何快速的创建一个安装Project。   1、创建一个安装的工程   首先来看看InstallShield8.0的开发控制台界面,熟悉一下开发环境。
图1
  我们可以从文件菜单中选择开始一个新的工程向导,或者可以直接从工具栏中选中开始一个新的工程向导按钮,更直接的就是单击控制台界面上的Start the Project Wizard超链接即可弹出一个创建新工程的对话框如图2,你可以安装提示一步一步地往下走就是了。


图2
  单击下一步,给我们的工程设置名称,见图3


图3
  在上图中,当你输入一个工程的名字并单击下一步的时候,向导就会创建一个ProjectName.ism,被例子中则创建了 liqiang_test.ism文件,你在IDE中对工程所做的设置都保存在这个文件中,如果你想将你的工程移植到其他机器上,你只需要将.ism文件复制到其他机器上即可。

  单击下一步,选择安装工程的类型,见图4


图4
  这个属性页允许你选择创建工程的类型,这里我们选择了InstallScript MSI Project,这种类型的安装程序使用脚本来驱动安装界面,使用windows installer来改变目标系统,比如添加文件,创建快捷方式,修改注册表,关于InstallScript MSI Project和Basic MSI Project两种方式详细的区别,你可以参考帮助文件。 单击下一步,设置应用程序的信息,图5


图5
  你在Application Name中填写的应用程序的名称会出现在安装对话框中,并且你在控制面板的添加和删除程序对话框中显示的名称也就是这个名......

阅读全文(3336) | 评论:0

vs兼容问题心得(2007-11-15 17:37:00)

摘要:这两天有点焦头烂额,   我们这边运行的好好的程序,   到了测试的机器上就不能启动(是根本运行不了,   而不是运行出错),   弄得我异常郁闷。   经过了一番摸索,   发现和   winxp、win2003中为解决dll   hell而引入的manifest机制有关系。而以前我们用vs2003开发,   它并没有强制程序使用manifest,   但到了vs2005中,   这已经改成必需的了,   而我们并没有按照需要进行相关的配置,   所以程序启动不了了。   根据目前的经验,   vs2005编译的程序不能启动大致有两个原因,   下面简单介绍解决办法。
1、在开发组的机器上(安装有vs2005)有时都不能启动
这一般是项目的文件被放在了fat/fat32分区上导致的,   解决方法是把它们都移动到ntfs分区上,   或者把“项目属性 ¦Manifest   Tool ¦General ¦Use   FAT32   Work-around”设为yes。
2、开发组运行正常,   换到其它机器上就不行了
这一般就是系统dll(包括crt,mfc,atl等)没有正确配置导致的。   如果程序是release版,   那么很简单,   只要把“\SDK\v2。0\BootStrapper\Packages\vcredist_x86”下的 "vcredist_x86。exe "拷贝到目标机器上运行即可,   这是以x86平台为例的,   如果你用的是别的cpu平台(amd64或ia64)把x86替换成相应的内容就可以了。
如果是debug版,   就复杂一些了,   首先要确定你需要的dll的版本,   绝大多数(注意:不是 "所有 ")情况下它和编译器的版本相同,   通过vs2005的关于对话框就能看到,   如下图所示:


  确定版......

阅读全文(2504) | 评论:0

搞笑程序(爱情版)(2007-11-03 07:55:00)

摘要:这是一个网上流传甚广的搞笑程序代码。作为程序员的我们,号称是高收入群体,然后事实究竟是不是大家都如此丰衣足食呢?经常贪黑与计算机相伴,我们的另一半,你找到了么?遇到下面这样一个看似玩笑,而其实是非常现实的问题,你如何应对呢?
result love(boy, girl)
{
    if( boy.有房() and boy.有车() )
    {
        boy.set(nothing);
        return girl.嫁给(boy);
    }
    if( girl.愿意等() )
    {
    while(!(boy.赚钱 > 100,000 and girl.感情 > 8 ) )
    {
        for( day=1; day <=365; day++)
        {
            if( day == 情人节 )
            if( boy.givegirl(玫瑰) )
                girl.感情++;
        &nbs......

阅读全文(2531) | 评论:2

初学mfc感悟(2007-10-27 22:39:00)

摘要:好久不来了,最近忙于mfc的学习,现在学到链接数据库的部分,感觉很有意思啊,遇到很多问题,我在插入了记录后,再显示全部记录,但没有我插的记录,我已经用updata了,但再重新编译运行一次,显示记录时就有了,郁闷死了,查了好多书都没有解决,百度了半天,google了半天也没结果,谁能帮忙,告诉我,该怎么办。。。......

阅读全文(2753) | 评论:0

基数排序(2007-09-16 23:37:00)

摘要:
/* This is the radxsort */ #include<iostream>
#include<cstdlib> using namespace std;
const int N=5;
const int K=3;
struct Radx{
       int key[N];
       int keyNum;
       }l[10];
      
void radxSort(int array[])
{
     int i,j,p,q,a;
     for(j=1;j<=K;j++)
     {
       for(p=0;p<10;p++)
       { for(q=0;q<N;q++)
         l[p].key[q]=0;
         l[p].keyNum=0;
         }
        
         for(p=0;p<N;p++)
         {

阅读全文(340) | 评论:0

insersort(2007-09-16 23:36:00)

摘要:  /* This program is about the insertsort,Binsertsort,shellinsertsort*/  
#include<iostream>
#include<cstdlib> using namespace std; const int MAX=10;
void insertSort(int list[])
{//This is insetsort
     int i,j;
     for(i=2;i<=MAX;i++)
     {
        if(list[i]<list[i-1])
          {list[0]=list[i];
           list[i]=list[i-1];
           for(j=i-2;list[j]>list[0];j--)
           list[j+1]=list[j];
           list[j+1]=list[0];
          }//for
     }//for }//insertSort void BinsertSort(int list[])
......

阅读全文(279) | 评论:0