Linux嵌入式开发与应用

欢迎来到Linux嵌入式开发与应用>>   | 首页 资源中心 | Database | Linux | 生活趣谈 | 嵌入式开发 | 一般分类 | ITPUB论坛

数据源:以编程方式配置 ODBC 数据源

发表人:upczap | 发表时间: 2007年十二月08日, 20:39

数据源:以编程方式配置 ODBC 数据源

本主题说明如何用编程方式配置开放式数据库连接 (ODBC) 数据源名称。这增加了访问数据的灵活性,不必强制用户显式地使用 ODBC 管理器或其他程序来指定数据源名称。

通常,如果关联的数据库管理系统 (DBMS) 支持用 ODBC 管理器来创建数据源,则用户运行 ODBC 管理器来创建数据源。

用 ODBC 管理器创建 Microsoft Access ODBC 数据源时,有两个选择:可以选择现有的 .mdb 文件,或者创建新的 .mdb 文件。没有从 MFC ODBC 应用程序创建 .mdb 文件的编程方式。因此,如果您的应用程序要求将数据放到 Microsoft Access 数据源(.mdb 文件)中,最可行的办法是有一个空的 .mdb 文件,需要时可以使用或复制它。

但是,许多 DBMS 允许以编程的方式创建数据源。一些数据源维护数据库的目录规范。也就是说,目录是一个数据源,数据源中的每个表都存储在单独的文件中(对于 dBASE,每个表都是一个 .dbf 文件)。其他 ODBC 数据库的驱动程序,如 Microsoft Access 和 SQL Server,要求在满足一些特定的条件之后才能建立数据源。例如,使用 SQL Server ODBC 驱动程序时,需要建立了一台 SQL Server 计算机。

SQLConfigDataSource 实例

下面的示例用 ::SQLConfigDataSource ODBC API 函数创建一个新的称为“New Excel Data Source”的 Excel 数据源:

SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Excel Files (*.xls)", 
                   "DSN=New Excel Data Source" 
                   "Description=New Excel Data Source" 
                   "FileType=Excel" 
                   "DataDirectory=C:EXCELDIR" 
                   "MaxScanRows=20");

注意,数据源实际上是一个目录 (C:EXCELDIR),这个目录必须存在。Excel 驱动程序使用目录作为其数据源,使用文件作为单独的表(一个表就是一个 .xls 文件)。

有关创建表的更多信息,请参见 数据源:以编程方式在 ODBC 数据源中创建表

下面的内容讨论需要传递给 ::SQLConfigDataSource ODBC API 函数的参数。若要使用 ::SQLConfigDataSource,必须包括 Odbcinst.h 头文件并使用 Odbcinst.lib 导入库。另外,Odbccp32.dll(对于 16 位系统为 Odbcinst.dll)必须在运行时路径中。

您可以使用 ODBC 管理器或类似的实用程序来创建 ODBC 数据源名称。但是,有时从应用程序直接创建数据源名称获得访问权,而不需要用户运行单独的实用程序的做法更可取。

ODBC 管理器(通常安装在“控制面板”中)将一些项放在 Windows 注册表(对于 16 位系统,放在 Odbc.ini 文件)中,从而新建数据源。ODBC 驱动程序管理器将查询这个文件,以获得有关数据源的所需信息。了解哪些信息要放在注册表中很重要,因为您需要通过调用 ::SQLConfigDataSource 来提供这些信息。

尽管不用 ::SQLConfigDataSource 也可以将这些信息直接写到注册表,但是任何这样做的应用程序都依赖于驱动程序管理器当前用来维护其数据的技术。如果 ODBC 驱动程序管理器以后的修订版使用不同的方法来维护有关数据源的记录,使用这项技术的所有应用程序都将会出现问题。通常建议您在提供了 API 函数的情况下使用 API 函数。例如,如果使用 ::SQLConfigDataSource 函数,可以将代码从 16 位系统移植到 32 位系统,因为该函数可以正确地写入 Odbc.ini 文件或注册表。

SQLConfigDataSource 参数

下面解释 ::SQLConfigDataSource 函数的参数。其中大部分内容摘自随 Visual C++ 1.5 版本和更高版本一同提供的“ODBC API 程序员参考”

函数原型

BOOL SQLConfigDataSource(HWND hwndParent,UINT fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes);

备注

参数及其用法

hwndParent

指定为任何对话框的所有者的窗口。ODBC 驱动程序管理器或者特定 ODBC 驱动程序将创建这些对话框以从用户处获得有关新数据源的附加信息。如果 lpszAttributes 参数没有提供足够的信息,则显示一个对话框。hwndParent 参数可以为 NULL

lpszDriver

驱动程序的描述。这是显示给用户的名称,不是物理驱动器的名称 (DLL)。

lpszAttributes

格式为“键名=值”的属性列表。这些字符串用 Null 结束符分开,列表结尾有 2 个连续的 Null 结束符。这些属性主要是要为新数据源填入到注册表中的默认驱动程序特定项。ODBC API 参考中有关该函数没有提到的重要的一项是指定新数据源名称的“DSN”(“数据源名称”)。其他项都是针对新数据源驱动程序的。因为驱动程序会用对话框提示用户提供新值,所以通常没有必要提供所有的项。(将 hwndParent 设置成 NULL 将导致这种情况。)您也可以显式地提供默认值以便不提示用户进行输入。

使用 ODBC 管理器确定 lpszDriver 参数的驱动程序说明

  1. 运行 ODBC 管理器。

  2. 单击“添加”

这会提供已安装的驱动程序及其说明的列表。将此说明作为 lpszDriver 参数使用。请注意,应使用整个说明,包括说明中的文件扩展名和括号(如果有),如“Excel Files (*.xls)”。

另一种方法是检查注册表(对于 16 位系统,为 Odbcinst.ini 文件),在注册表项“ODBC Drivers”(或在 Odbcinst.ini 的 [ODBC Drivers] 节)下有一个所有驱动程序项和说明的列表。

一种查找 lpszAttributes 参数的键名和值的方法是:查看已配置的数据源(多半是由 ODBC 管理器配置的数据源)的 Odbc.ini 文件。

查找 lpszAttributes 参数的键名及值

  1. 运行 Windows 注册表编辑器(或者对于 16 位系统,打开 Odbc.ini 文件)。

  2. 使用以下方法之一查找 ODBC 数据源的信息:

    • 对于 32 位系统,在左窗格中查找键 HKEY_CURRENT_USERSoftwareODBCODBC.INIODBC Data Sources

      右边窗格列出了形式为“pub: REG_SZ:<data source name>”的项,这里 <data source name> 是已用您要使用的驱动程序的所需设置配置好的数据源。选择要用的数据源,例如 SQL Server。字符串“pub:”后的项依次为在 lpszAttributes 参数中要使用的键名和值。

    • 对于 16 位系统,在 Odbc.ini 文件中查找带 [<data source name>] 标记的节。

      该行之后的各行的格式为“键名=值”。这些正是在 lpszAttributes 参数中要用的项。

您也许想查看要使用的特定驱动程序的文档。可以在驱动程序的联机帮助中找到有用的信息。运行 ODBC 管理器可访问驱动程序的联机帮助。在 Windows NT、Windows 3.1 或 Windows 95 上,这些帮助文件通常位于 WINDOWSSYSTEM 目录下。

获得 ODBC 驱动程序的联机帮助

  1. 运行 ODBC 管理器。

  2. 单击“添加”

  3. 选择驱动程序名称。

  4. 单击“确定”。

在 ODBC 管理器显示为该特定驱动程序创建新数据源的信息时,单击“帮助”。这就打开了该特定驱动程序的帮助文件,该帮助文件一般包含有关使用驱动程序的重要信息。

有关更多信息,请参见 Installer DLL 函数参考


VC中用于调试程序的几个宏的使用技巧

发表人:upczap | 发表时间: 2007年十二月08日, 20:36

VC中用于调试程序的几个宏的使用技巧

一、TRACE
当选择了Debug目标,并且afxTraceEnabled变量被置为TRUE时,TRACE宏也就随之被激活了。但在程序的Release版本中,它们是被完全禁止的。下面是一个典型的TRACE语句:
int nCount =9;
CString strDesc("total");
TRACE("Count =%d,Description =%sn",nCount,strDesc);
可以看到,TRACE语句的工作方式有点像C语言中的printf语句,TRACE宏参数的个数是可变的,因此使用起来非常容易。如果查看MFC的源代码,你根本找不到TRACE宏,而只能看到TRACE0TRACE1TRACE2TRACE3宏,它们的参数分别为0123
二、ASSERT
如果你设计了一个函数,该函数需要一个指向文档对象的指针做参数,但是你却错误地用一个视图指针调用了这个函数。这个假的地址将导致视数据的破坏。现在,这种类型的问题可以被完全避免,只要在该函数的开始处实现一个ASSERT测试,用来检测该指针是否真正指向一个文档对象。一般来讲,编程者在每个函数的开始处均应例行公事地使用assertionASSERT宏将会判断表达式,如果一个表达式为真,执行将继续,否则,程序将显示一条消息并且暂停,你可以选择忽视这条错误并继续、终止这个程序或者是跳到Debug器中。下面一例演示了如何使用一个ASSERT宏去验证一个语句。
void foo( char p, int size )
{
ASSERT( p != 0 ); //确认缓冲区的指针是有效的
ASSERT( ( size >= 100 ); //确认缓冲区至少有100个字节
// Do the foo calculation
}
这些语句不产生任何代码,除非—DEBUG处理器标志被设置。Visual C++只在Debug版本设置这些标志,而在Release版本不定义这些标志。当—DEBUG被定义时,两个assertions将产生如下代码:
//ASSERT( p != 0 );
do{
if( !(p != 0) && AfxAssertFailedLine(FILE,LINE) )
AfxDebugBreak();
}while(0);
//ASSERT((size = 100);
do{
if(!(size = 100) &&AfxAssertFailedLine(FILE,LINE))
AfxDebugBreak();
}while(0);
Dowhile循环将整个assertion封装在一个单独的程序块中,使得编译器编译起来很舒畅。If语句将求取表达式的值并且当结果为零时调用AfxAssertFailedLine()函数。这个函数将弹出一个对话框,其中提供三个选项“取消、重试或忽略”,当你选取“重试”时,它将返回TRUE。重试将导致对AfxDebugBreak()函数的调用,从而激活调试器。
Dowhile循环将整个assertion封装在一个单独的程序块中,使得编译器编译起来很舒畅。If语句将求取表达式的值并且当结果为零时调用AfxAssertFailedLine()函数。这个函数将弹出一个对话框,其中提供三个选项“取消、重试或忽略”,当你选取“重试”时,它将返回TRUE。重试将导致对AfxDebugBreak()函数的调用,从而激活调试器。
AfxAssertFailedLine()是一个未正式公布的函数,它的功能就是显示一个消息框。该函数的源代码驻留在afxasert.cpp中。函数中的—FILE—和—LINE—语句是处理器标志,它们分别指定了源文件名和当前的行号。
AfxAssertFailedLine()是一个未正式公布的函数,它的功能就是显示一个消息框。该函数的源代码驻留在afxasert.cpp中。函数中的—FILE—和—LINE—语句是处理器标志,它们分别指定了源文件名和当前的行号。
三、VERIFY
因为assertion只能在程序的Debug版本中起作用,在表达式中不可以包含赋值语句、增加语句(++)或者是减少语句(--),因为,这些语句实际改变数据。可有时你可能想要验证一个能动的表达式,使用一个赋值语句。那么就到了用VERIFY宏来替代ASSERT。例如:
void foo(char p, int size )
{
char q;
VERIFY(q = p);
ASSERT((size = 100);
// Do the foo calculation
// Do the foo calculation
}
Debug模式下,ASSERTVERIFY是一回事,但是在Release模式下,VERIFY宏仍然测试表达式而assertion却不起任何作用。可以说,在Release模式下,ASSERT语句被删除了。
请注意,如果你在一个ASSERT语句中错误地使用了一个能动的表达式,编译器将不做任何警告地忽略它。在Release模式下,该表达式就会被无声息地删除掉,这将会导致程序的错误运行。由于Release版的程序通常不包含Debug信息,这类错误将很难被发现。

写给25岁以上的单身男性的100条忠告

发表人:upczap | 发表时间: 2007年四月11日, 21:14

写给25岁以上的单身男性的100条忠告

1你可以不拥有任何东西,除了对生活的激情。
2然后是钱。
3努力赚钱。
4有了钱,可以拥有很多女人的身体。
5没有钱,要拥有很多女人的心。
6如果身体和心你都无法得到,那只能说明你的无能。
7英雄和浪子,取长补短。
8该英雄时要英雄,该浪子时得浪子。
9喝酒,抽烟。一个都不能上瘾。
10赌,女人,权力。追求,但不能沉沦。
11热爱体育。如果你不热爱你就不是男人。
12即使你爱体育爱得发疯。也不能抱着体育生活一辈子。
13善待你的家人。
14网络游戏,浅尝辄止。
15有分寸,懂得控制自己。
16厨艺精湛,但不轻易下厨。
17如果厨艺不佳,刀功一定要好。
18得到女人的心,先满足她的胃。
19再给她可以倚靠的肩膀。
20依赖。女人的致命处。
21想让女人嫁给你,给她安全感。经济上和精神上的双重安全。
22不要以为每个女人都很傻。
23如果不打算骗女人一生一世。就不要轻易骗她。
24如果是善意的谎言,要设法让她明白你的良苦用心。
25如果不爱她,就不要娶她。除非你能保证对她好。
26如果背叛了她,就尽量补偿她。
27女人的寿命比男人长,她会恨男人一直恨到死。
28最好不要得罪女人。
29补偿最好的方式是钱。
30连钱都不要的女人,要小心。
31追到一个女人很容易,可是摆脱掉却很难。追求之前请三思。
32不要跟玩不起的人玩。
33就算是尝试一夜情,也不要选择去P C。
34对象的选择和客户一样,慎重。
35不要轻易给女人承诺。说者无心,听者有意。
36尊重女人的最好方式就是坦诚对她。
37即使你是个流氓,也要流氓得坦坦荡荡。
38没有一个女人,能比你的母亲重要。
39小时糊涂,大事不糊涂。
40身材魁梧,动作温柔。
41找一个理解你的人做妻子。
42找一个了解你的女人做知已。
43作为成熟男人,应该清楚得不到的才是最好的。
所以,该舍时要舍得。
44不要打女人。有这种冲动前先看看《妇女权益保障法》。
45不要谈太多次恋爱。否则你自己都会厌倦不堪。
46不要见一个爱一个,爱得太多,你的爱就要贬值。
47“我爱你”这三个字不必挂在嘴边,用行动来证明吧。
48“我爱你”堵住所有废话的最后一击。话要用在刀刃上。
49拥抱或者吻。肢体语言永远比语言更有力度。
50对上司,可以服从,可以抗议。就是不能卑躬屈膝。
51买一栋房子。即使是按揭。只要你不打算当无根浪子。
52再买一栋。即使是借钱。用于投资。
53炒股。不为赚钱,只为证明自己的判断力。
54即使是输掉一栋房子,也要笑着自嘲:我不是一个输不起的人。
55买车。先买二手车。如果你技术很好或者有很多钱则另当别论。
56哪儿摔倒,哪儿站起来再摔几次。
57没有才华,也要有气魄。
58不要西装革履,也不必着装休闲。把衬衫扣子解掉三颗,就是一种随意。
59神采飞扬,不修边幅。
60穿西装时记着把商标撕掉。
61笑,在任何人面前。
62让你周围的人因为你的存在而感到快乐。
63怕硬可以,欺软不行。
64选择婚姻,而不是婚姻选择你。
65着装整洁,不必非得把皮鞋擦得锃亮。
66随意。不必往头发上喷发胶或者定型水。
67看一个女人虚荣不虚荣,就剃上光头衣冠不整地跟她一起走在大街上。注意她的表情。
68一支玫瑰,或者一句甜言蜜语。关键时候,派上用场。女人是很容易满足的。
69因为需要才喜欢,还是因为喜欢才需要。分清楚。
70想跟女人分手时,设法让她先提出来。
71大智若愚。傻与不傻,先看你会不会装傻。
72做一个出色的男人,先学会哄。
73哄上司,哄同事,哄老人,哄女人,哄孩子。
74如果以上你通通都能哄到,那么恭喜你,你的人生一定值得你炫耀。
75魅力源于实力。
76能让别人跟着你走,是你的魅力所在。
77脾气温和,性格好斗。
78内敛。该出手时再出手。
79同流,但不合污。
80异想天开。没有异想,何来天开?
81沉稳。不乏可爱。
82如果实在长相严肃,至少可以带点儿冷幽默。
83有自己的立场和观点。不一定要表明出来。
84说到做到。做到再说。
85旅游。不必期待艳遇。
86沉默。有些话是不必说出来的。
87在女人面前,永远不要解释,只有认错。
88邀请不熟的女士吃饭,要找些天时地利的借口。
89像个君子,即使你不是。
90先赚钱,再谈爱。
91同居。如果你享受这种习惯。
92享受眼前的同时,想想以后。
93冷静和超然,即使是在危难时刻。装也要装出来。
94得之淡然,失之泰然。一切皆顺其自然。
95顺然自然,并不代表不去争取。
96不要跟一般人一般见识,即使是特殊人也一样。
97不要骂脏话。
98侮辱一个人最好的方式就是置之不理。侮辱,而不是责骂。
99认真。但不顽固。
100好好生活。你的生命是一次性的。


15所名校计算机专业之特色分析

发表人:upczap | 发表时间: 2007年四月11日, 20:41

15所名校计算机专业之特色分析

作者:◎ 清华大学 倪铭辰

随着IT时代的到来,几乎所有院校都开设了计算机系。计算机专业领域很多,虽然对于本科生来说,基本上是宽领域的全面培养,但是由于有各个学校的特色存在,同学们往往会在强势领域有更多的收获。

清华大学:在拥有多位院士的清华大学差不多在所有方向都有相应的强人撑着,相比之下,应用和系统结构更强些,某些方向已经处于世界领先水平。优势领域包括多媒体、网络技术等。同时拥有模式识别与智能控制国家重点学科。

北京大学:在软件方面尤其在中文视觉听觉信息处理方面有优势,由王选和杨芙清两位院士曾领导的方正和青鸟证实了北大在中国当前软件界的实力。硬件方面有一位院士王阳元。

上海交通大学:上海交通大学近年来在走上坡路,软件方向的发展很快,模式识别与智能控制也是国家重点学科。优势领域包括系统软件、网络信息获取与处理、并行与分布理论、数据库等。

南京大学:如果说20世纪80年代的软件专业是并蒂莲花的话,那么现在的南大完全可以说是一枝独秀,由孙钟秀院士领导的软件学科甚至已经涉及到大型操作系统的设计。优势领域包括软件自动化与形式化方法、分布计算与并行处理、系统软件及其信息安全、多媒体技术、人工智能与知识工程、数据库技术、语言信息处理等。拥有软件新技术国家重点实验室。

哈尔滨工业大学:深处寒冷北方的哈工大能保持几十年的超强实力可以说是个奇迹,作为当年唯一的计算机应用重点学科,哈工大培养出了大量的人才。现在他们与许多学校和研究机构搞学科并建,吸纳了很多外来人才,增强了哈工大的整体实力。目前哈工大承担的项目经费已超亿元。他们的优势领域包括:智能机器人、CIMS与系统集成、智能化中文信息处理机器翻译技术、计算机网络及系统安全防护技术等。

东北大学:建有软件工程国家级工程研究中心,它的软件方向大多与数据库有关,东软集团的发展证实了东大软件的实力。张嗣瀛教授是中科院院士。优势领域:智能控制与智能机器人系统、诊断与容错控制、CIMS中生产计划与存储管理的建模、宽带计算机网络、分布式多媒体信息处理技术、数据库及其应用技术、嵌入式系统技术等。

国防科技大学:这是一所不太为人所了解的学校,就像一个淡泊名利的世外高人,我们在感叹她的高大的同时,也会有一种难以接近的感觉。由3位院士领导的系统结构方向曾经研制出了让中国人骄傲的银河系列大型计算机。国防科技大学的优势领域大多和硬件相关。设有网络技术与信息安全研究所及并行与分布处理国家重点实验室。

浙江大学:前任校长潘云鹤是浙大计算机系唯一一位院士(现为中国工程院副院长),他所领衔创建的计算机图形学、智能CAD在国内无其右者,而且浙大开放式的校风,吸纳贤才的远见,使其越来越受到人们的认可。浙大建有计算机辅助设计与图形学国家重点实验室。优势领域还有CAD/CIMS、虚拟现实、网络与多媒体、产品创新设计、智能信息与人机交互技术等。

东南大学:中国工程院院士顾冠群教授为首。计算机网络、数据库及信息系统软件技术与人工智能CIMS技术是东南大学的优势领域。建有国家863/CIMS网络和数据库实验室、教育部网络和信息集成技术实验室、中国教育和科研计算机网华东(北)地区网络中心。

北京航天航空大学:是发展势头最猛的学校之一,在人工智能、软件工程和体系结构、虚拟现实与多媒体技术方向有优势。建有由李未院士领导的软件开发环境国家重点实验室,教育部虚拟现实新技术重点实验室、教育部软件网上联合研发中心。

有一些学校的计算机专业是在基础学科如数学、电子(通信)的基础上发展起来的,也就是随着计算机发展的狂热而转型来的。数学带动软件发展,电子通信则对硬件的发展奠定了良好的基础。
以数学专业发展软件专业的学校有复旦大学、南开大学、中国科技大学等。以电子通讯专业发展硬件专业的学校有西安电子科技大学、西安交通大学、北京邮电大学等。


选择排序讲解

发表人:upczap | 发表时间: 2007年四月07日, 22:07

选择排序讲解

////////////////////////////////////////////////////////////////////

#i nclude<stdio.h>

void main(){

void sort(int x[],int n);

int *p,i,a[10];

p=a;

for(i=0;i<10;i++)scanf("%d",p++);

p=a;

sort(p,10);

for(p=a,i=0;i<10;i++){

printf("%5d",*p);

p++;

}

}

void sort(int x[],int n){

int i,j,k,t;

for(i=0;i<n-1;i++){

k=i;

for(j=i+1;j<n;j++)

if(x[j]>x[k])k=j;

if(k!=i){

t=x[i];

x[i]=x[k];

x[k]=t;

}

}

}

//////////////////////Li同学发送给我的源程序有若干笔误,已修改

mail中该同学提到:

这个是课本指针那一章的,是用选择法对10个数从大到小排序的.我看不懂后面的那个被调函数尤其是那个if(k!=i),这个条件不是必然成立的吗?老师具体给我说下这个程序吧.

下面专门讲解一下这个程序。

选择排序方法是基本的排序算法之一。其算法思路简单,容易构建,缺点是执行效率不如冒泡法、希尔排序法等。

选择排序法的核心思想是从待排序数据序列中选择最大(小)的那个,将其放在最前。比如对于10个数据(编号为array[0]-array[9]),如下:

12 56 -9 456 69 321 -987 52 63 10

首先从array[0]-array[9]中选择最大的那个,将其放在array[0]

其次从array[1]-array[9]中选择最大的那个,将其放在array[1]

再次从array[2]-array[9]中选择最大的那个,将其放在array[2]

……

最后从array[8]-array[9] 中选择最大的那个,将其放在array[8]

很显然,经过9轮选择,整个数组就会按降序排列,这就是选择排序法的算法流程。

这需要用一个二重循环来实现。内层循环的本质是寻找特定范围数据的最大者,并将其放在约定位置。

将该算法以更一般的形式描述:

n个数组元素需要从大到小排序(编号为array[0]-array[n-1])。则需要n-1轮选择。

首先从array[0]-array[n-1]中选择最大的那个,将其放在array[0]

其次从array[1]-array[n-1]中选择最大的那个,将其放在array[1]

再次从array[2]-array[n-1]中选择最大的那个,将其放在array[2]

……

最后从array[n-2]-array[n-1]中选择最大的那个,将其放在array[8]

可以看出,这n-1次循环的规律是一样的。选择排序算法可以描述为:

void sort(int array[],int n){

int i;

for(i=0;i<=n-2;i++)

{array[i]-array[n-2]中选择最大的放在array[i];}

}

那么下面的任务就是实现{array[i]-array[n-2]中选择最大的放在array[i];}了。略。

注释讲解如下:

///////////////////////////////////////////////////////////////////

#i nclude<stdio.h>

void main(){

void sort(int x[],int n);

int *p,i,a[10];//主函数中声明指针变量p,循环变量i,数组a

p=a;//p指向a的首地址即a[0]

for(i=0;i<10;i++)scanf("%d",p++);//通过指针p间接访问数组元素,接受值放在数组中

p=a;//重新使指针变量指向数组首地址,非常重要

sort(p,10);//调用选择法排序函数sort(int*,int)

for(p=a,i=0;i<10;i++){//for循环用来打印已排序的数组元素,p=a没有必要

printf("%5d",*p);

p++;

}

}

void sort(int x[],int n){

int i,j,k,t;//k用来指向最大的元素

for(i=0;i<n-1;i++){//n个数组元素,i=0~n-2,n-1轮,在x[i]-x[n-2]中选择最大的放在x[i];

k=i;//默认x[i]为最大,k指向x[i]

for(j=i+1;j<n;j++)

if(x[j]>x[k])k=j;//若有元素大于x[k],则更新k,使k始终指向最大的元素

if(k!=i){//k最初指向i,若k值没有变化(k==i),说明x[i]就是x[i]-x[n-2]中的最大值,不用再交换;若k!=i,说明k值有更新就不再等于i,需要将x[k]即最大值交换到x[i]

t=x[i];

x[i]=x[k];

x[k]=t;

}

}

}

/////////////////////////////////////////////////////////////

至于Li同学所说“k!=i必然成立”是不正确的。k==i是有可能的,如array[i]-array[n-1]的最大值恰好是array[i],则k==i。这时候就不必要(而非不能)交换,因为array[k]就是array[i]

sort函数执行实例:

28 356 53 -9 93 815 -815 8 9 15降序排列(array[0]-array[9])。

//////////////////第一轮(i==0),从array[i]-array[9]中选择最大的,放在a[i]

i==0,k==5,array[i]<==>array[k]

第一轮过后:

815 356 53 -9 93 28 -815 8 9 15

//////////////////第二轮(i==1),从array[i]-array[9]中选择最大的,放在a[i]

i==1,k==1,不必交换

第二轮过后:

815 356 53 -9 93 28 -815 8 9 15

//////////////////第三轮(i==2),从array[i]-array[9]中选择最大的,放在a[i]

i==2,k==4,array[i]<==>array[k]

第三轮过后:

815 356 93 -9 53 28 -815 8 9 15

//////////////////第四轮(i==3),从array[i]-array[9]中选择最大的,放在a[i]

i==3,k==4,array[i]<==>array[k]

第四轮过后:

815 356 93 53 -9 28 -815 8 9 15

//////////////////第五轮(i==4),从array[i]-array[9]中选择最大的,放在a[i]

i==4,k==5,array[i]<==>array[k]

第五轮过后:

815 356 93 53 28 -9 -815 8 9 15

//////////////////第六轮(i==5),从array[i]-array[9]中选择最大的,放在a[i]

i==5,k==9,array[i]<==>array[k]

第六轮过后:

815 356 93 53 28 15 -815 8 9 -9

//////////////////第七轮(i==6),从array[i]-array[9]中选择最大的,放在a[i]

i==6,k==8,array[i]<==>array[k]

第七轮过后:

815 356 93 53 28 15 9 8 -815 -9

//////////////////第八轮(i==7),从array[i]-array[9]中选择最大的,放在a[i]

i==7,k==7,不必交换

第八轮过后:

815 356 93 53 28 15 9 8 -815 -9

//////////////////第九轮(i==8),从array[i]-array[9]中选择最大的,放在a[i]

i==8,k==9, array[i]<==>array[k]

第九轮过后:

815 356 93 53 28 15 9 8 -9 -815

/////////////////完成


Google 的21道面试问题

发表人:upczap | 发表时间: 2007年四月05日, 19:58

Google 的21道面试问题

10月底,Google在美国《麻省技术评论》、《LinuxJournal》、《Mensa》、《今日物理》等几本专业杂志上,刊登了一份“Google实验室能力倾向测试”。
  试卷开头,蛊惑地写着“试试看!把答案寄回Google,你有希望去Google总部参观,并成为我们其中一员”。

我看了这些题目,虽然古怪,但是也不算有困难,有兴趣的人可以做完了邮寄给google公司,也许会得到一个工作机会呢。


  1、解答下面的隐藏等式,其中的M和E的值可以互换,但不允许第一位是0:

  WWWDOT - GOOGLE = DOTCOM

  2、用一个俳句(一种日本短诗,每句有一个与季节有关的词)来建立模型,借此预测网络搜索流量的季节性变化;

  3、
  1

  1 1

  2 1

  1 2 1 1

  1 1 1 2 2 1

  下一行是什么?

  4、你正处于一个全部由崎岖小路构成的迷宫里,手里有一个满是灰尘的笔记本,可以无线上网,但是信号很弱。与此同时,一些阴森可怕、毫无生气的妖怪在你身边游荡。你会怎么做呢?

  (1)毫无目的的四处游荡,到处碰壁,直到被迷宫里的妖怪吃掉。

  (2)用笔记本作为挖掘工具,打穿地面直接进入下一关。

  (3)玩网络游戏《魔法骑兵》,直至电池耗尽,你也心灰意冷。

  (4)使用笔记本画出迷宫的节点地图,找到出路。

  (5)发送简历给Google,告诉主管妖怪你选择退出,随后你就回到现实世界。

  5、Unix有何缺陷?你准备如何补救?

  6、在Google工作的第一天,你发现身边的同事竟然是研究生一年级课本的作者,你会:

  (1)主动示好并索取签名。

  (2)不改变坐姿,但放轻打字声音,避免影响她的工作和思考。

  (3)把你每天的麦片和咖啡都留给她享用。

  (4)在她所写的书中找到你最喜欢的内容,并告诉她这些内容已经成为你的座右铭。


  7、下列哪句话最贴切的表达了Google的企业文化?
  (1)我感到很幸运。

  (2)不要干坏事。

  (3)哦,我已经解决了那个问题。

  (4)你身边50英寸之内,必定能找到食物。

  (5)以上皆是。

  8、用3种颜色为20面体上色,每个面一种颜色,有多少种组合?你会选择哪些颜色?


  9、下面是故意留出的空白,请将其填满,使之看起来不那么空。

  10、用1欧姆的电阻组成无限大的两维矩阵,“象棋跳马步”(“日”字对角点)两点之
间的电阻是多少?

  11、现在是星期日下午2点,你正在旧金山著名的湾区。你可以选择去国家公园的红杉
林里徒步旅行,或者参观城市里的文化景观。你会怎么做?

  12、你认为最美的数学等式是什么?

  13、下列哪个团体没有在Google员工中形成?

  (1)女子篮球

  (2)淡**爱好者

  (3)Cricketeers

  (4)诺贝尔奖获得者

  (5)葡萄酒俱乐部

  14、搜索技术的下一个革命性突破是什么?

  15、一个项目组由多少人构成才能达到最优规模?也就是说,一旦超过这一数字,每
增加一个成员项目组的平均生产力就会相应下降。

  (1)1个

  (2)3个

  (3)5个

  (4)11个

  (5)24个

  16、给你一个三角形ABC,请用圆规和尺找出点P,保证三角形ABP、ACP和BCP周长相等。

  17、有这样一个函数,对于任意整数n,都能返回写出0到n之间出现“1”的个数。例如,f(13)=6。请注意f(1)=1,那么下一个能实现f(n)=n的最大数字是什么?

  18、你编写的最酷的黑客程序是什么?

  19、在下面的数列中,下一个数字是多少:10, 9, 60, 90, 70, 66,?

  (1)96

  (2)10的100次方

  (3)以上皆是
  16、给你一个三角形ABC,请用圆规和尺找出点P,保证三角形ABP、ACP和BCP周长相等。

  17、有这样一个函数,对于任意整数n,都能返回写出0到n之间出现“1”的个数。例如,f(13)=6。请注意f(1)=1,那么下一个能实现f(n)=n的最大数字是什么?

  18、你编写的最酷的黑客程序是什么?

  19、在下面的数列中,下一个数字是多少:10, 9, 60, 90, 70, 66,?

  (1)96

  (2)10的100次方

  (3)以上皆是

  (4)以上皆不是

  20、用少于29个词,描述你能带给Google实验室带来的贡献。


1. Solve this cryptic equation, realizing of course that values for M and E could be interchanged. No leading zeros are allowed.
WWWDOT - GOOGLE = DOTCOM

2. Write a haiku describing possible methods for predicting search traffic seasonality.

3.
1
1 1
2 1
1 2 1 1
1 1 1 2 2 1

What is the next line?

4. You are in a maze of twisty little passages, all alike. There is a dusty laptop here with a weak wireless connection. There are dull, lifeless gnomes strolling about. hat dost thou do?

A) Wander aimlessly, bumping into obstacles until you are eaten by a grue.
B) Use the laptop as a digging device to tunnel to the next level.
C) Play MPoRPG until the battery dies along with your hopes.
D) Use the computer to map the nodes of the maze and discover an exit path.
E) Email your resume to Google, tell the lead gnome you quit and find yourself
in whole different world.

5. What's broken with Unix? How would you fix it?

6. On your first day at Google, you discover that your cubicle mate wrote the extbook you used as a primary resource in your first year of graduate school. Do you:

A) Fawn obsequiously and ask if you can have an autograph.
B) Sit perfectly still and use only soft keystrokes to avoid disturbing her concentration.
C) Leave her daily offerings of granola and English toffee from the food bins.
D) Quote your favorite formula from the textbook and explain how it's now your mantra.
E) Show her how example 17b could have been solved with 34 fewer lines of code.
7. Which of the following expresses Google over-arching philosophy?

A) "I'm feeling lucky"
B) "Don't be evil"
C) "Oh, I already fixed that"
D) "You should never be more than 50 feet from food"
E) All of the above

8. How many different ways can you color an icosahedron with one of three colors on each face?

What colors would you choose?

9. This space left intentionally blank. Please fill it with something that improves upon emptiness.

10.On an infinite, two-dimensional, rectangular lattice of 1-ohm resistors, what is the resistance between two nodes that are a knight's move away?

11.It's 2 PM on a sunny Sunday afternoon in the Bay Area. You're minutes from the Pacific Ocean, redwood forest hiking trails and world class cultural attractions. What do you do?

12.In your opinion, what is the most beautiful math equation ever derived?

13. Which of the following is NOT an actual interest group formed by Google employees?

A. Women's basketball
B. Buffy fans
C.ricketeers
D. Nobel winners
E. Wine club

14.What will be the next great improvement in search technology?

15.What is the optimal size of a project team, above which additional members do not contribute productivity equivalent to the percentage increase in the staff size?
A) 1
B) 3
C) 5
D) 11
E) 24

16.Given a triangle ABC, how would you use only a compass and straight edge to find a point P such that triangles ABP, ACP and BCP have equal perimeters? (Assume that ABC is constructed so that a solution does exist.)

17.Consider a function..which, for a given whole number n, returns the number of ones required when writing out all numbers between 0 and n. For example, f(13)=6. Notice that f(1)=1. What is the next largest n such that f(n)=n?
18.What's the coolest hack you've ever written?

19.'Tis known in refined company, that choosing K things out of N can be done in ways as many as choosing N minus K from N: I pick K, you the remaining.

Find though a cooler bijection, where you show a knack uncanny, of making your choices contain all K of mine. Oh, for pedantry: let K be no more than half N.

20.What number comes next in the sequence:
10, 9, 60, 90, 70, 66,?

A)96
B) 1000000000000000000000000000000000
0000000000000000000000000000000000
000000000000000000000000000000000
C) Either of the above
D) None of the above

21.In 29 words or fewer, describe what you would strive to accomplish if you worked at Google Labs.


在Tomcat下JSP、Servlet和JavaBean环境的配置

发表人:upczap | 发表时间: 2007年三月25日, 12:12

在Tomcat下JSP、Servlet和JavaBean环境的配置

经常看到jsp的初学者问tomcat下如何配置jsp、servlet和bean的问题,于是总结了一下如何tomcat下配置jsp、servlet和ben,希望对那些初学者有所帮助。

第一步:下载j2sdk和tomcat:到sun官方站点(http://java.sun.com/j2se/1.4.2/download.html)下载j2sdk,注意下载版本为Windows Offline Installation的SDK,同时最好下载J2SE 1.4.2 Documentation,然后到tomcat官方站点(http://www.apache.org/dist/jakarta/tomcat-4/)下载tomcat(下载最新4.1.x版本的tomcat);

第二步:安装和配置你的j2sdk和tomcat:执行j2sdk和tomcat的安装程序,然后按默认设置进行安装即可。
1.安装j2sdk以后,需要配置一下环境变量,在我的电脑->;属性->;高级->;环境变量->;系统变量中添加以下环境变量(假定你的j2sdk安装在c:j2sdk1.4.2):
JAVA_HOME=c:j2sdk1.4.2
classpath=.;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar;(.;一定不能少,因为它代表当前路径)
path=%JAVA_HOME%bin
接着可以写一个简单的java程序来测试J2SDK是否已安装成功:
public class Test{
public static void main(String args[]){
System.out.println("This is a test program.");
}
}
将上面的这段程序保存为文件名为Test.java的文件。
然后打开命令提示符窗口,cd到你的Test.java所在目录,然后键入下面的命令
javac Test.java
java Test
此时如果看到打印出来This is a test program.的话说明安装成功了,如果没有打印出这句话,你需要仔细检查一下你的配置情况。

2.安装Tomcat后,在我的电脑->;属性->;高级->;环境变量->;系统变量中添加以下环境变量(假定你的tomcat安装在c:tomcat):
CATALINA_HOME=c:tomcat;
CATALINA_BASE=c:tomcat;
然后修改环境变量中的classpath,把tomat安装目录下的commonlib下的servlet.jar追加到classpath中去,修改后的classpath如下:
classpath=.;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar;%CATALINA_HOME%commonlibservlet.jar;
接着可以启动tomcat,在IE中访问http://localhost:8080,如果看到tomcat的欢迎页面的话说明安装成功了。

第三步:建立自己的jsp app目录
1.到Tomcat的安装目录的webapps目录,可以看到ROOT,examples, tomcat-docs之类Tomcat自带的的目录;
2.在webapps目录下新建一个目录,起名叫myapp;
3.myapp下新建一个目录WEB-INF,注意,目录名称是区分大小写的;
4.WEB-INF下新建一个文件web.xml,内容如下:
<?xml version="1.0" encoding="ISO-8859-1"?>;

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">;

<web-app>;
<display-name>;My Web Application</display-name>;
<description>;
A application for test.
</description>;
</web-app>;
5.在myapp下新建一个测试的jsp页面,文件名为index.jsp,文件内容如下:
<html>;<body>;<center>;
Now time is: <%=new java.util.Date()%>;
</center>;</body>;</html>;
6.重启Tomcat
7.打开浏览器,输入http://localhost:8080/myapp/index.jsp 看到当前时间的话说明就成功了。

第四步:建立自己的Servlet:
1.用你最熟悉的编辑器(建议使用有语法检查的java ide)新建一个servlet程序,文件名为Test.java,文件内容如下:
package test;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Test extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out=response.getWriter();
out.println("<html>;<body>;<h1>;This is a servlet test.</h1>;</body>;</html>;");
out.flush();
}
}
2 .编译
将Test.java放在c:test下,使用如下命令编译:
C:Test>;javac Test.java
然后在c:Test下会产生一个编译后的servlet文件:Test.class
3 .将结构testTest.class剪切到%CATALINA_HOME%webappsmyappWEB-INFclasses下,也就是剪切那个test目录到classes目录下,如果classes目录不存在,就新建一个。 现在webappsmyappWEB-INFclasses下有testTest.class的文件目录结构
4 .修改webappsmyappWEB-INFweb.xml,添加servlet和servlet-mapping
编辑后的web.xml如下所示,红色为添加的内容:
<?xml version="1.0" encoding="ISO-8859-1"?>;

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">;

<display-name>;My Web Application</display-name>;
<description>;
A application for test.
</description>;
<servlet>;
<servlet-name>;Test</servlet-name>;
<display-name>;Test</display-name>;
<description>;A test Servlet</description>;
<servlet-class>;test.Test</servlet-class>;
</servlet>;
<servlet-mapping>;
<servlet-name>;Test</servlet-name>;
<url-pattern>;/Test</url-pattern>;
</servlet-mapping>;
</web-app>;
这段话中的servlet这一段声明了你要调用的Servlet,而servlet-mapping则是将声明的servlet“映射”到地址/Test上
5 .好了,启动Tomcat,启动浏览器,输入http://localhost:8080/myapp/Test 如果看到输出This is a servlet test.就说明编写的servlet成功了。
注意:修改了web.xml以及新加了class,都要重启Tomcat

第四步:建立自己的Bean:
1.用你最熟悉的编辑器(建议使用有语法检查的java ide)新建一个java程序,文件名为TestBean.java,文件内容如下:
package test;
public class TestBean{
private String name = null;
public TestBean(String strName_p){
this.name=strName_p;
}
public void setName(String strName_p){
this.name=strName_p;
}
public String getName(){
return this.name;
}
}
2 .编译
将TestBean.java放在c:test下,使用如下命令编译:
C:Test>;javac TestBean.java
然后在c:Test下会产生一个编译后的bean文件:TestBean.class
3 .将TestBean.class文件剪切到 %CATALINA_HOME%webappsmyappWEB-INFclassestest下,
4 .新建一个TestBean.jsp文件,文件内容为:
<%@ page import="test.TestBean" %>;
<html>;<body>;<center>;
<%
TestBean testBean=new TestBean("This is a test java bean.");
%>;
Java bean name is: <%=testBean.getName()%>;
</center>;</body>;</html>;
5 .好了,重启Tomcat,启动浏览器,输入http://localhost:8080/myapp/TestBean.jsp 如果看到输出Java bean name is: This is a test java bean.就说明编写的Bean成功了。


在DOS下装载ISO镜像文件-DOS虚拟光驱启动盘

发表人:upczap | 发表时间: 2007年三月24日, 08:13

在DOS下装载ISO镜像文件-DOS虚拟光驱启动盘

下载: www.jujumao.com/UploadFile/2004-10/2004101814748140.rar
  
  
  这个启动盘能够创建DOS下的虚拟光驱,并以中文向导方式装载ISO镜像,您只须点几下鼠标即可完成ISO镜像的装载,让您能在DOS下使用ISO镜像文件,轻松方便!
  
  我用它进行了win98、win2k、winxp等操作系统的安装均获得了成功...,但愿你也顺利!
  
  转载地址:http://bbs.macd.cn/viewthread.php?tid=523256&;fpage=4
  
  
  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=
  
  原创 by BlueFang from bbs.9Down.com
  bbs.9down.com/showthread.php?s=&threadid=12938
  
  可以在 DOS 下载入 ISO 镜像文件,好像 GOXia 在找这个吧?因为是用猫上网,所以我不放镜像了,只说用法。
  
  首先下载附件 LoadISO.rar ,解开后有四个文件( LoadISO.bat、SHSUCDHD.exe、SHSUCDX.exe、UnISO.bat),先摆到一边,然后随便找张启动软盘的镜像文件,用 WinImage 打开,提取出 Autoexec.bat ,用文本编辑器修改这个文件,找到包含 MSCDEX.EXE 的语句,在这一行前面加上 REM 把它注释掉,因为虚拟光驱跟 MSCDEX.EXE 有冲突,可能会导致系统崩溃,最后把前面虚拟光驱的四个文件和修改后的 Autoexec.bat 用 WinImage 加入软盘镜像,保存。
  
  然后把软盘镜像文件写入软盘或者制作成启动光盘,需要用时,在 DOS 下输入:LoadISO D:ISOFileWinXPCN.iso ,系统会提示你已经加载虚拟光驱,盘符是 E: ,这时就可以访问 E 盘,也就是虚拟光驱所在盘了,如果需要卸载虚拟光盘,就执行 UnISO 。这里的 D:ISOFileWinXPCN.iso 只是个例子,也许你的光盘镜像文件放在其它位置,或者系统提示加载的虚拟光驱盘符不是 E: ,示个人电脑配置不同而定。
  
  其它更多的用法大家可以自己琢磨,比如光盘镜像在 NTFS 分区,那么你就需要 NTFSDOS 的启动盘,如果用虚拟光驱安装操作系统,你又可能需要加载 smartdrv ,如果镜像在中文目录内,那又可能需要加入天汇或 UCDOS 等中文系统 ......如此等等。
  
  我个人建议制作这么一张盘:支持 NTFS ,支持中文显示和输入,包括 SmartDrv ,这也是我现在自己用的盘,嘿嘿。不过这样一来软盘空间就吃紧了,就算是 2.88M 镜像都很难解决问题,我是这么解决的,以 Acronis 系列软件的镜像文件为蓝本,因为这个镜像比较大,有四、五兆,然后用 WinImage 把 NTFSDOS 软盘的所有文件加入蓝本软盘(是否还能叫做软盘?有待商榷),加入天汇汉字系统实现中文显示,加入 SmartDrv 以加快系统安装,加入 py.com 实现中文拼音输入,最后用 WinImage 打开 NTFSDOS 软盘,通过菜单上的“映像→引导扇区属性→保存”命令将引导扇区保存为 Loader.bin ,然后用 WinImage 打开蓝本软盘,通过菜单上的“映像→引导扇区属性→打开”命令将 Loader.bin 加入蓝本软盘(不好意思,我的 WinImage 是汉化版,嘿嘿),这样的话,就不可能写入软盘了,因为个头太大,只好加入光盘了,至于如何加入光盘,可以用 EZBoot、VisualBoot、BCDW 等软件,我是用 BCDW 的,喜欢它一目了然的光盘启动界面,不要太花俏,呵呵,更具体的大家自己找资料了。顺便说一句,原版的 NTFSDOS 软盘里在 Autoexec.bat 中已经把 MSCDEX.exe 注释掉了,所以不需要再改。
  
  这四个文件中两个批处理文件是我自己写的,如果你不喜欢的话,要么自己写一个,要么就要输入两条命令了,具体怎么操作请自己看我写的批处理吧。


恭喜您成功申请ITPUB BLOG

发表人:upczap | 发表时间: 2006年十二月07日, 18:15

请牢记您BLOG的域名
http://upczap.itpub.net/
您BLOG的控制面板在
http://upczap.itpub.net/admin.php
登陆口令就是论坛口令,BLOG的口令和论坛是捆绑的。您可以在控制面板里完成发表文章,修改名称,模版以及观察统计数据等功能
全体ITPUB BLOG的内容首页在
http://weblog.itpub.net/
可以在这里了解整个ITPUB BLOG的状况,包括最新文章,BLOG列表,排名,统计数据等
怎样才可以使自己的BLOG变得知名?
只有宣传才可以使网站的访问增多,您可以把您的BLOG连接写在签名档里,或者在帖子里介绍给别的会员,也可以在别的网站和现实场合进行广泛的宣传。如果您的BLOG能被搜索引擎收录,那也对增加流量有所帮助。这也许需要您到一些常用搜索引擎那里登录一下。百度的登录入口:
http://www.baidu.com/search/url_submit.html
google的登录入口
http://www.google.com/intl/zh-CN/add_url.html
登录可以帮助您的BLOG尽快被收录(否则可能要等待比较长的时间)
法律责任
ITPUB是中华人民共和国境内网站,请大家在发表言论时注意遵守中华人民共和国法律,尊重知识产权,ITPUB只提供寄存平台,任何网友的个人言论都不代表ITPUB的观点,ITPUB也不会为网友的个人行为承担法律义务和责任。

Valid XHTML 1.0 Strict and CSS. Powered by pLog
Design by Blog.lvwo.com