软件设计
文章平均质量分 66
孔雀东南飞
踏踏实实,勤勤恳恳!
展开
-
STM32 + SDIO + FATFS 调试记录
首先要说一个问题,就是在写文件(f_write)的时候跳硬件中断的问题。堆栈不够,使用的开发板是奋斗v3.0,芯片是stm32f103vet6,有64K的ram,但是在startup_stm32f10x_hd.s的启动代码文件里对堆栈的定义却很小,不知道为什么,是因为别的硬件资源自己去分配么?现在还没有搞明白。下面有图为证: 原来是512个字节,现在我把他修改成了 2048转载 2011-12-27 21:02:39 · 6605 阅读 · 0 评论 -
华为2012校园招聘上机编程题(1)
编程题(共3题,第一题20分,第二题30分,第三题50分,共100分)注意:1、请上机编写程序,按题目要求提交文件。[详见考试说明,点击进入考试说明]2、本试题采用自动执行测试用例进行评分,测试用例不对考生公开3、评卷通过在给定用例输入下,严格按照试题要求比较考生原创 2011-09-15 16:59:41 · 3893 阅读 · 11 评论 -
插入排序
一、直接插入排序插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因原创 2011-08-26 16:22:45 · 578 阅读 · 0 评论 -
VC++中使用ADO访问SQL Server 2000简介
ADO操作SQL 1.导入相关库文件(一般在StdAfx.h中导入) #import "c:\program files\common files\system\ado\msado15.dll" \no_name转载 2011-07-19 17:40:26 · 1767 阅读 · 1 评论 -
直接通过ADO操作Access数据库(修改版)
本文根据VCKBASE网站的上的《直接通过ADO操作Access数据库 》 修改而来,版权归原作者/徐景周直接通过ADO操作Access数据库 作者/徐景周下载源代 码 我在《VC知识库在线杂志》第十四期和第十五期上曾发表了两篇文章——“直接通过ODBC读、写Excel表转载 2011-07-18 21:20:23 · 917 阅读 · 0 评论 -
数据库链接字符串大集合
AS/400 (iSeries)IBM .Net Data Provider 您需要使用 IBM.Data.DB2.iSeries 命名空间DataSource=myServerAddress;UserID=myUsername; Password=myPassword;Data转载 2011-07-19 20:00:34 · 816 阅读 · 0 评论 -
临界区(Critical section)与互斥体(Mutex)的区别
1、临界区只能用于对象在同一进程里线程间的互斥访问;互斥体可以用于对象进程间或线程间的互斥访问。2、临界区是非内核对象,只在用户态进行锁操作,速度快;互斥体是内核对象,在核心态进行锁操作,速度慢。3、临界区和互斥体在Windows平台都下可用;Linux下只有互斥体可用。1、临界转载 2011-07-14 20:18:18 · 1666 阅读 · 0 评论 -
Using Mutex Objects (MSDN2001)
Using Mutex ObjectsYou can use a mutex object to protect a shared resource from simultaneous access by multiple threads or processes. Each t转载 2011-07-21 21:32:42 · 697 阅读 · 0 评论 -
const 指针 和 指向const型指针 辨析
const是C++中引入的一个新的关键字,它为C++编程带来了很大的方便。指向const对象的指针和const指针是两个名字很接近的 概念,对于初学者来说非常容易搞混,这里对它们进行区分。 指向const对象的指针 可以这样理解指向const对象的指针: 指向const对象的指针就是一个指针,不能通过它来修改它所指向的对象的值 · 声明方法:const int *p; const对象在初始化后是不允许对其值进行修改的,因此,我们不能用一个普通指针指向一个const对象,即下面转载 2011-05-11 14:51:00 · 582 阅读 · 0 评论 -
C语言运算符优先级顺口溜
<br />醋坛酸味灌 味落跳福豆 <br /><br />共44个运算符 <br />醋-初等,4个: ( ) [ ] -> 指向结构体成员 . 结构体成员 <br />坛-单目,9个: ! ~ ++ -- -负号 (类型) *指针 &取地址 sizeof长度 <br />酸-算术,5个: * / % + -减 <br />味-位移,2个: << >> <br />灌-关系,6个: < <= > >= == 等于 != 不等于 <br />味-位逻,3个: & 按位与 ^ 按位异或 | 按位或 <b转载 2011-05-04 11:43:00 · 777 阅读 · 0 评论 -
DELETE和TRUNCATE的区别
delete from aatruncate table aa区别1、delete from后面可以写条件,truncate不可以2、delete from记录是一条条删的,所删除的每行记录都会进日志,而truncate一次性删掉整个页,因此日至里面只记录页释放,简言之,delete from更新日志,truncate基本不,所用的事务日志空间较少3、delete f原创 2011-06-22 21:27:00 · 532 阅读 · 0 评论 -
strcpy、memcpy和memmove函数源码
char *strcpy( char *strDestination, const char *strSource ){ char *strTemp = strDestination; while(*strTemp ++ = *strSource++); return strDestination;}void *memcpy( void *dest, const void原创 2011-06-16 15:45:00 · 2302 阅读 · 1 评论 -
华为2012校园招聘上机编程题(2)
1、删除字符串中所有给定的子串问题描述: 在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。要求实现函数: int delete_sub_str(const char *str, const char *sub_str, char *r原创 2011-09-15 22:05:57 · 2397 阅读 · 0 评论 -
华为2012校园招聘上机编程题(3)
1、简单四则运算问题描述:输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值注: 1、表达式只含 +, -, *, / 四则运算符,不含括号2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况3、要考虑加减乘除按通常四则运原创 2011-09-16 20:41:20 · 2913 阅读 · 4 评论 -
指针的引用(*&)与指针的指针(**)
在下列函数声明中,为什么要同时使用*和&符号?以及什么场合使用这种声明方式? void func1( MYCLASS *&pBuildingElement ); 论坛中经常有人问到这样的问题。本文试图通过一些实际的指针使用经验来解释这个转载 2011-08-25 16:24:27 · 1101 阅读 · 1 评论 -
InstallShield for Microsoft Visual C++ 6.0使用初探
InstallShield for Microsoft Visual C++ 6 是一个非常好的制作安装程序的软件。从它的名称可以看出它是为Visual C++ 6定制的软件,但这并不说明它只能用于Visual C++ 6的安装程序制作。其他应用程序同样可以用它制作安装程序,只不过这时需要单独启动InstallShield for Microsoft Visual C++ 6,且需要人工加入一些代转载 2011-12-14 16:51:35 · 3679 阅读 · 0 评论 -
Windows API函数之PlaySound函数以及sndPlaySound函数用法
一、PlaySound函数用法PlaySound函数的声明为:BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);1、参数pszSound是指定了要播放声音的字符串,该参数可以是WAVE文件的名字,或是WAV资源的名字,或是内存中声音数据的指针,或是在系统注册表WIN.INI中定义的系统事件声音。如果该参转载 2011-12-13 16:13:06 · 905 阅读 · 0 评论 -
MFC中CListCtrl控件的用法
功能强大的CListCtrl:做网络笔记,还需添加修改CListCtrl改变行的颜色,列的颜色,字体颜色等.资源属性里面有个sort设置排序的,如果不小心选了Ascending,那么你insertItem的顺序就就1,10,11,12,13,14,15,16,17,18,19,2,20,21....所以要注意.首先使用下面的语句设置CListCtrl的style:DWORD转载 2011-12-07 15:57:56 · 12628 阅读 · 1 评论 -
printf函数对参数的计算顺序,是从右往左的
例:#include void main() { int i=2; printf("%d,%d,%d,%d,\n",i++,++i,i,i++); printf("%d\n",i); } 首先,应该说明的是在不同的编译环境中结果是不一样的。 关于转载 2011-08-29 10:35:26 · 22475 阅读 · 7 评论 -
指针数组和数组指针
#include using namespace std;int main() { double a = 10.0, b = 20.0; double* arr[2] = {&a,&b}; double* (*gh)[2] = &arr; // gh是一个数组指针原创 2011-08-30 11:32:44 · 915 阅读 · 0 评论 -
C++空类实例大小不是0原因
初学者在学习面向对象的程序设计语言时,或多或少的都些疑问,我们写的代码与最终生编译成的代码却大相径庭,我们并不知道编译器在后台做了什么工作.这些都是由于我们仅停留在语言层的原因,所谓语言层就是教会我们一些基本的语法法则,但不会告诉我们为什么这么做?今天和大家谈的一点感悟就是我在学转载 2011-08-29 16:30:19 · 724 阅读 · 0 评论 -
选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。void selection_so原创 2011-08-27 16:29:18 · 607 阅读 · 0 评论 -
归并排序
归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divideand Conquer)的一个非常典型的应用。归并操作归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操原创 2011-08-27 15:35:44 · 617 阅读 · 0 评论 -
中兴笔试题:两有序数组的中位数求解
题目:设X[1..n]和Y[1..n]为两个数组,每个都包含n个已排好序的数。给出一个求数组X和Y中所有2n个元素的中位数的、O(lgn)时间的算法。 首先假设中位数等于m,在数组X中。假设X[k]=m,于是X中就有k个元素小于等于m,n-k个元素大于等于m。我转载 2011-09-21 16:10:08 · 1724 阅读 · 0 评论 -
volatile详解
<br />就象大家更熟悉的const一样,volatile是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。<br /> 推荐一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatil转载 2011-04-14 17:16:00 · 547 阅读 · 0 评论 -
可重入
<br />可重入<br />若一个程序或子程序可以“安全的被并行执行(Parallel computing)”,则称其为可重入(reentrant或re-entrant)的。即当该子程序正在运行时,可以再次进入并执行它(并行执行时,个别的执行结果,都符合设计时的预期)。若一个函数是可重入的,则该函数:不能含有静态(全局)非常量数据。不能返回静态(全局)非常量数据的地址。只能处理由调用者提供的数据。不能依赖于单实例模式资源的锁。不能调用(call)不可重入的函数(有呼叫(call)到的函数需满足前述条件)。转载 2011-05-23 11:35:00 · 765 阅读 · 0 评论 -
EasySize动态调整对话框控件位置和大小
<br />EasySize - Dialog resizing in no time!<br />http://www.codeproject.com/KB/dialog/easysize.aspx<br /> <br /> <br />对easysize的一些介绍:<br />http://blog.const.net.cn/item/32ae21fb1a6df39c.htm<br />VC窗口自由的调整大小的实现。具体代码和详细的英文说明,大家可以看原文,本篇是使用后的具体细节说明。<br /><br转载 2010-10-14 21:21:00 · 587 阅读 · 0 评论 -
linux命令行下载工具
<br />命令行下载工具 <br /><br /> 对于喜欢命令行操作及追求高效率、高速度下载的朋友,推荐使用命令行下载工具。命令行工具不但使用方便,而且大多具有很高的下载速度及下载效率,尤其适合于大批量下载文件。下面就为大家详细介绍一下这些工具。 <br /><br /> Wget Wget是一个十分常用命令行下载工具,多数Linux发行版本都默认包含这个工具。如果没有安装可在http://www.gnu.org/software/wget/wget.html转载 2010-10-12 11:10:00 · 529 阅读 · 0 评论 -
MFC(Visual C++ 6.0)中使用文件流fstream的相关问题
1、头文件编写如下:#include #include #include using namespace std;2、实例 CString FileName; ifstream AnalysisFile(FileName,ios::in|ios::binary); if (!AnalysisFile) { AfxMessageBox("Error"); } else { string UserInfo; AnalysisFile>>UserInf原创 2010-09-26 22:05:00 · 1685 阅读 · 0 评论 -
CString,string,char*之间的转换
<br />这三种类型各有各的优点,比如CString比较灵活,是基于MFC常用的类型,安全性也最高,但可移植性最差。string是使用STL时必不可少的类型,所以是做工程时必须熟练掌握的;char*是从学习C语言开始就已经和我们形影不离的了,有许多API都是以char*作为参数输入的。所以熟练掌握三者之间的转换十分必要。<br />以下我用简单的图示指出三者之间的关系,并以标号对应转换的方法。<br /> <br /><br />1 string to CString <br /> CString.转载 2010-09-26 21:59:00 · 514 阅读 · 0 评论 -
Fedora 13下安装Nvidia显卡驱动的方法/Linux无法进入X Windows 图形界面的解决方法
<br />0.到NVIDIA网站下载最新NVIDIA驱动。<br />1.赋予它可执行权限。chmod +x NVIDIA-Linux-xxxxxx.run<br />2.编辑 /etc/modprobe.d/blacklist.conf 文件,以阻止nouveau模块的加载。<br /> #vi /etc/modprobe.d/blacklist.conf<br /> 在文件末尾添加 blacklist nouveau<br />3.阻止kernel加载nouveau模块<br /> #vi /boot转载 2010-09-14 21:41:00 · 4306 阅读 · 0 评论 -
关于EOF和getchar()
<br />大师级经典的著作,要字斟句酌的去读,去理解。以前在看K&R的The C Programming Language(SecondEdition) 第1.5节的字符输入/输出,被getchar()和EOF所迷惑了。可能主要还是由于没有搞清楚getchar()的工作原理和EOF的用法。因此,感觉很有必要总结一下,不然,很多琐碎的知识点长时间过后就会淡忘的,只有写下来才是最好的方法。 其实,getchar()最典型的程序也就几行代码而已。本人所用的环境是DebianGNU/Linux,在其他系统下也一样转载 2010-09-03 11:40:00 · 542 阅读 · 0 评论 -
VC++的链接错误LNK2005
本文转自:http://www.douban.com/group/topic/2670445/ 流浪的矩阵(庸才)VC++的链接错误LNK2005 编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误。弄清楚它形成的原因,就可以轻松解决它了。 造成LNK2005错误主要有以下几种情况: 1. 重复定义全局变量。可能存在两种情况: A、对于一些初学原创 2010-05-24 23:13:00 · 835 阅读 · 0 评论 -
在线程中如何获得主对话框中的指针?
在线程中常用到所在对话框中的成员变量,如对话框中控件的变量显示的改变。下面举两个不同方法的例子:UINT WorkThread1(LPVOID param){ CTestDlg *dlg=(CTestDlg*)AfxGetApp()->GetMainWnd(); for(int i=0;i { dlg->SetDlgItemInt(IDC_EDIT_THRED1,i); if(i==9) i=0; Sleep(转载 2010-07-07 20:55:00 · 1980 阅读 · 0 评论 -
CNiVector和CNiMatrix数据类型的使用
<br /> CNiVector和CNiMatrix是Measurement Studio定义的两种数据类型,分别为矢量和矩阵类型,在VC++中引用其元素的方法如下:<br /><br /><br />(1) 对于CNiVector而言,包括:<br />CNiInt8Vector - signed 8-bit integer vector. <br />CNiUInt8Vector - unsigned 8-bit integer vector. <br />CNiInt16Vector - sig转载 2010-07-08 21:40:00 · 1988 阅读 · 0 评论 -
LPVOID
LPVOID是一个没有类型的指针,也就是说你可以将任意类型的指针赋值给LPVOID类型的变量(一般作为参数传递),然后在使用的时候在转换回来。 可以将其理解为long型的指针,指向void型。 例如: class CMyClass { void Start(); static UINT StartThread(LPVOID lParam); }; void CMyClass::Start() { AfxBeginThread(StartThread, this);转载 2010-07-01 19:28:00 · 3205 阅读 · 0 评论 -
VC++ 6.0下OpengGL配置以及glut配置
<br />转自:http://leaddo.blog.sohu.com/112647260.html<br /> <br />下面我将对Windows下的OpenGL编程进行简单介绍。<br /><br />第一步:选择一个编译环境 <br /><br />现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的。但这里我们选择VC++ 6.0作为学习OpenGL的环境。 <br /><br />第二步:转载 2010-06-30 11:15:00 · 738 阅读 · 0 评论 -
程序员面试题精选100题(04)-在二元树中找出和为某一值的所有路径
<br /><br />题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。<br />例如输入整数22和如下二元树<br /> 10<br /> / /<br /> 5转载 2010-12-20 20:55:00 · 377 阅读 · 0 评论 -
程序员面试题精选100题(03)-求子数组的最大和
<br /><br />题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。<br />例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。<br />分析:本题最初为2005年浙江大学计算机系的考研题的最后一道程序设计题,在2006年里包括google在内的很多知名公司都把本题当作面试题。由于本题在网络中转载 2010-12-20 20:56:00 · 498 阅读 · 0 评论 -
程序员面试题精选100题(05)-查找最小的k个元素
题目:输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。分析:这道题最简单的思路莫过于把输入的n个整数排序,这样排在最前面的k个数就是最小的k个数。只是这种思路的时间复杂度为O(nlogn)。我们试着寻找更快的解决思路。我们可以开辟一个长度为k的数组。每次从输入的n个整数中读入一个数。如果数组中已经插入的元素少于k个,则将读入的整数直接放到数组中。否则长度为k的数组已经满了,不能再往数组里插入元素,只能替换了。如果读入的这个整数比数组中已有转载 2010-12-21 15:36:00 · 829 阅读 · 0 评论