- 博客(24)
- 资源 (5)
- 收藏
- 关注
原创 浮点数到底能不能用 == 进行比较
今天看c语言,遇到一个问题,浮点类型能不能用 == 进行比较,其实这个问题以前也碰到过,在面试的时候,只知道尽量不要使用 == 对浮点数进行比较。那么为什么呢,计算机中的计算不是确定的么?首先我们要了解浮点数在计算机中怎么存放的。《深入理解计算机系统》中这样说过,浮点数普遍的作为实数运算的近似值的计算,是很有用的。这里说的是实数的近似值的计算,所以浮点数在计算机中其实是一种不精确的表示。它存在
2013-02-25 11:46:30 10613
原创 把c语言中的声明用程序翻译成通俗的语言
理解c语言的优先级规则:A 声明从它的名字开始读取,然后按照优先级次序一次读取B优先级从高到底依次是:b1 声明中被括号括起来的那部分b2 后缀操作符 括号()表示这是一个函数,而方括号【】表示这是一个数组b3 前缀操作符,星号*表示“指向。。。的指针”C 如果const(或volatile)关键字的后面紧跟类型说明符(如int,long等),那
2012-04-11 19:59:01 2866
原创 模拟实现c语言中的动态内存分配malloc函数
动态存储器分配器维护着一个进程的虚拟的存储器区域,称为堆(heap)。分配器将堆视为一组不同大小的块的集合来维护。每个块就是一个连续的虚拟存储器片(chunk),要么是已经分配的,要么是空闲的。我们这里把内存堆空间模拟为一个字节数组buf[1000],块的数据结构为:typedef struct HeadStruct{ size_t size; void *buf;
2012-02-28 21:28:08 5337 1
转载 状态机的c语言编程
一 有限状态机的实现方式有限状态机(Finite State Machine或者Finite State Automata)是软件领域中一种重要的工具,很多东西的模型实际上就是有限状态机。FSM的实现方式:1) switch/case或者if/else这无意是最直观的方式,使用一堆条件判断,会编程的人都可以做到,对简单小巧的状态机来说最合适,但是毫无疑问,这样的方式比较原始,对
2012-02-22 11:09:54 11220
原创 状态机解决有关删除程序中的注释的问题
最近几天看程序员面试宝典,有一个面试题:编写程序去掉c,c++中的注释。要按照常规的方法,分析几种情况,会很麻烦,于是上网看看有么有更好的解决方法。 可以用状态机解决这种情况很多的分支问题。(关于状态机的详细知识,会转载令一篇博客。) 以下是自己分析的这个题的状态: 状态\输入/*“\'回车其它01
2012-02-22 11:06:16 1781 1
转载 二维数组动态分配和释放 [转]
(1)已知第二维Code-1char (*a)[N];//指向数组的指针a = (char (*)[N])malloc(sizeof(char *) * m);printf("%d\n", sizeof(a));//4,指针printf("%d\n", sizeof(a[0]));//N,一维数组free(a);(2)已知第一维
2012-01-06 11:01:51 595
原创 关于printf函数及变参数函数实现
printf函数一直都是一个很强大的函数,它的变参数是怎么实现的?一直是一个困扰我的问题。经过查找资料,了解了这是一类c语言通用的问题:变参数函数的实现。 要实现这种机制,必须要现了解4个宏定义:va_list, va_start, va_arg, va_end。下面给出这四个宏定义在c语言中的实现: 在解释这几个宏定义之前先要了解一下可边参数函数
2011-12-27 09:14:50 664
原创 烙饼排序
星期五的晚上,一帮同事在希格玛大厦附近的“硬盘酒吧”多喝了几杯。程序员多喝了几杯之后谈什么呢?自然是算法问题。有个同事说:“我以前在餐馆打工,顾客经常点非常多的烙饼。店里的饼大小不一,我习惯在到达顾客饭桌前,把一摞饼按照大小次序摆好——小的在上面,大的在下面。由于我一只手托着盘子
2011-08-31 22:20:01 1042
转载 调色板的原理
PC机上显示的图象是由一个个像素组成的,每个像素都有自己的颜色属性。在PC的显示系统中,像素的颜色是基于RGB模型的,每一个像素的颜色由红(B)、绿(G)、蓝(B)三原色组合而成。每种原色用8位表示,这样一个的颜色就是24位的。以此推算,PC的SVGA适配器可以同时显示224约一
2011-07-26 10:54:55 706
转载 DDB与DIB的区别2
依赖于设备的位图(DDB)DDB(Device-dependent bitmap)依赖于具体设备,这主要体现在以下两个方面:DDB的颜色模式必需与输出设备相一致。例如,如果当前的显示设备是256色模式,那么DDB必然也是256色的,即一个像素用一个字节表示。在256色以下的位图中
2011-07-25 11:18:04 1493
转载 DDB与DIB的区别1
DDB与DIB的区别(转载)DDB与DIB的区别(转载):DDB(设备相关位图)DDB依赖于具体设备:DDB的颜色模式必需与输出设备相一致。例如,如果当前的显示设备是256色模式,那么DDB必然也是256色的。在256色以下的位图中存储的像素值是系统调色板的索引,其颜色依赖于系统
2011-07-25 11:16:39 1236
原创 C++流及文件的操作
C++中把数据之间的传输操作叫做“流”。在C++中流既可以表示数据从内存传到某个载体或输出设备中,即“输出流”,也可以表示数据从载体或输入设备传到内存中的变量中,叫“输入流”。 在C++中数据的输入和输出包括三种方式: 1 对标准输入设备键盘和标准输
2011-07-24 10:38:14 1886
转载 句柄与指针的联系与区别
句柄是一个32位的整数,实际上是windows在内存中维护的一个对象(窗口等)内存物理地址列表的整数索引。因为windows的内存管理经常会将当前空闲对象的内存释放掉,当需要时访问再重新提交到物理存储,所以对象的物理地址是变化的,不允许程序直接通过物理地址来访问对象。程序将想访问
2011-07-24 10:27:12 483
原创 动态规划解0-1背包问题
<br /> 0-1背包问题:给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量是W,问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大?(每个物品有两种情况,装入背包或者不装入背包)。<br /> 0-1背包问题可以用动态规划来解决。它满足动态规划的两个条件:最优子结构和重叠子问题。(证明见《计算机算法设计与分析》p77)。解动态规划问题时关键是问题的表示和递归关系的生成。能把问题完美的表示出来并且证明了此问题满足最优子结构,那么这个问题就解决了一半。<br /> 0
2011-05-12 10:53:00 1557
原创 堆排序
<br />堆是一种重要的数据结构,二叉堆是一颗完全二叉树。可以用数组存放二叉堆,每个节点与数组中的存放位置对应。<br /> <br />这里的堆排序算法是一种应用最大堆的原地排序算法(原地排序就是指不申请多余的空间来进行的排序),效率为O(nlgn)。<br /> <br />Max_Heapify(int a[],int anum,int i)是建立堆的子程序,即假设i的左孩子和右孩子均满足最大堆的性质,但是i不满足,此子程序就是通过将i “float down”来维持最大堆的性质。<br /> <b
2011-04-28 09:48:00 385
原创 July 微软面试100题 第18题 约瑟夫环
<br />题目:n个数字(0,1,2,........,n-1)形成一个圆圈,从数字0开始,每次从圆圈中删除第m个数字(第一个为当前 数字本身,第二个为当前数字的下一个数字)当一个数字删除 以后,从被删除的下一个继续删除第m个数字,求出这个圆圈中的最后一个数字。<br /> <br /> <br /> <br /> <br />约瑟夫环问题,本科刚开始学习数据结构时的一个课程设计,考察的是对链表的操作<br />只要仔细的分析好指针操作就可以完成。<br />程序清单:<br /> <br />#incl
2011-04-26 17:28:00 637
原创 July 微软面试100题 第17题 字符串中第一个只出现一次的字符
<br />在一个字符串中找到第一个只出现一次的字符,如输入abaccdeff,则输出b<br /><br /> <br /> <br />我的刚开始的想法是对于每一个字符来说,遍历整个字符串,检查它出现的次数,直到找到仅有一次出现的字符,显然,这个算法的时间复杂度是O(n2)的。JULY用的是hash表实现的,由于字符(char)是一个长度为8的数据类型,因此总共有可能256 种可能。于是我们创建一个长度为256的数组,每个字母根据其ASCII码值作为数组的下标对应数组的对应项,而数组中存储的是每个字符对
2011-04-26 15:09:00 509
原创 July 微软面试100题 第16题 二叉树的层次遍历
<br />输入一颗二叉树,从上往下按层次打印树的每个节点,同一层中按照从左往右的顺序打印。<br /> <br /> <br /> <br />二叉树的层次遍历,用队列非常容易实现。<br />这里用的是链队列。<br />程序清单如下:<br />#include <iostream.h>#include <malloc.h>typedef struct TNode{ int data; struct TNode *lchild; struct TNode *rchild;}
2011-04-25 21:42:00 643
原创 Video Game Design
Professor Cloud has been consulting in the design of the most anticipated game of theyear: Takehome Fantasy XII. One of the levels in the game is a maze that playersmust navigate through multiple rooms from an entrance to an exit. Each room can beempty, co
2011-04-24 16:18:00 1033
原创 Manhattan skyline problem
<br />老师给的一道算法作业题,要求O(nlgn)实现,题目如下:<br /> <br /> <br />Suppose that you are given the exact locations and shapes of several rectangular<br />buildings in a city, and you wish to draw the skyline (in two dimensions) of these<br />buildings, eliminating hidd
2011-04-24 16:06:00 3255 1
原创 July 微软面试100题 第13题
输入一个单向链表,输出该链表中倒数第k个节点分析:本质是单链表的倒置#include #include typedef struct ListNode{ int data; ListNode *next;}*List;List InitList(){ int num; int data; List head=(List)malloc(sizeof(ListNode)); head->next=NULL; List p=head; cout>num;
2011-04-06 14:59:00 611
原创 bmp图像的直方图均衡化
<br />#include <windows.h>#include <stdio.h>unsigned char *pBmpBuf;//读入图像的数据指针int bmpWidth;//图像的宽int bmpHeight;//图像的高RGBQUAD *pColorTable;//颜色表指针int biBitCount;//图像类型,每像素的位数bool readBmp(char *bmpName){ //二进制方式打开 FILE *fp=fopen(bmpName
2011-04-06 10:30:00 2930
原创 July 微软面试100题 第11题 求二叉树的最大距离
<br /> 求二叉树中节点的最大距离 <br />如果我们把二叉树看成是一个图,父子节点之间的连线是双向的。我们姑且定义“距离”为两个节点之间的边的个数。<br />写一个程序。<br />求一棵二叉树中相距最远的两个节点之间的距离。<br /> ////////////////////////////////////////////////////////<br />一棵二叉树中节点的最大距离只有两种情况,经过根节点和不经过根节点。<br />所以可以用递归的方法来求解。<br />程序如下:<br /
2011-04-01 16:32:00 531
原创 July 微软面试100题 第十题自己的思路
<br />用两个栈相互入栈出栈。达到输出字符的目的,代码如下:<br />#include <iostream.h><br />#include <stdio.h><br />#include <malloc.h><br />//用两个栈处理字符串,通过出栈入栈输出字符串<br />typedef struct Stack<br />{<br /> char a[256];<br /> int top;<br /> int base;<br /> int size;<br />}*sqstack;<br
2011-03-31 08:58:00 987 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人