Author: David

C语言新手入门——从下载IDE开始

最近,高三的弟弟马上要去大学了。于是乎,打算教一教他C语言。 让我们从下载IDE( Integrated Develop Environment,即集成开发环境)开始。 Step Zero:买书 首先你需要的是一本完美的书,能够随时在你身边指引你的书。 《C程序设计语言》——if not you, then who? 本书原著即为C语言的设计者之一Dennis M.Ritchie和著名计算机科学家Brian W.Kernighan合著的一本介绍C语言的权威经典著作。我想,没有人比他更了解自己的设计。 摒弃你们的“谭浩强”吧~不是说谭先生不好,只是还不够。 Step One:下载最smart的IDE——CodeBlocks 1. 下载 地址:http://www.codeblocks.org/downloads/26 win7系统,选择这个版本就好了codeblocks-12.11mingw-setup.exe,可以从两个站点下载,一般是从这里Sourceforge这里下,如图 点击连接以后,会跳到Sourceforge网站,等几秒钟就开始自动下载。 2. 安装 点击Next,如上图。 点击I Agree, 如上图。 这一步是装运行所必须的各种软件,不用修改,默认点击Next就行。如上图。 这一步是选择安装路径,可以点击“Browse”然后在弹出的地方选择,或者直接在“Destination Folder”下面的输入框里填写。不建议安装在C盘,工具软件安装在其他盘比较好。比如我就是安装在E盘的Tools文件夹下。然后点击Install进行安装即可。如上图。 如果安装途中出现以下错误,请以管理员身份重新执行安装步骤。即右键“codeblocks-12.11mingw-setup.exe”安装文件,然后选择以管理员身份运行。 安装完成后,会问你是否现在运行Codeblocks,如下图。 可爱的Codeblocks就出来啦!!!! 3. 编写第一个程序之前的小配置 初次启动CodeBlocks的时候,会让你选择是否所有的 C和C++文件都以CodeBlocks打开,如图红色方框所示。点击它,然后点击OK。 现在我们需要新建一个项目,如下图所示。点击界面中间的”Create a new project” 在弹出的窗口里选择“Console application“,即控制台程序,如下图所示。 点击go,跳到下一个页面。选择使用的语言,这里选C。如下图所示。 点击Next以后进入下一个页面。 在”Project title“,即项目名称这里填写项目的名称,这里我们用填入”Test“举例。填好以后,下面的Project fileName以及Resulting fileName会自动帮你填好。 然后就是选择你代码所在的目录,即”Folder to create […]

POJ 2453 解题报告

题目意思:给定正整数x,求出在二进制表示中与他有相同个数的‘1’,且比他大的最小的数。 可以把此题当成求二进制中1的个数来做。而该算法在我的其他帖子(点击这里)中已经有详细说明。 代码: [cpp] #include <iostream> using namespace std; int Count (int); int main() { int x, num; while(cin >> x) { if(!x) break; num = Count(x); while(x++) if(Count(x) == num) { cout << x << endl; break; } } return 0; } int Count(int x) { x = (x & 0x55555555) + ((x >> […]

寻找发帖“水王”

编程之美第2.3题————寻找发帖“水王” 题目描述: Tango是微软亚洲研究院的一个试验项目。研究院的员工和实习生们都很喜欢在Tango上面交流灌水。传说,Tango有一大“水王”,他不但喜欢发贴,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子总数的一半。如果你有一个当前论坛上所有帖子(包括回帖)的列表,其中帖子作者的ID也在表中,你能快速找出这个传说中的Tango水王吗? 首先,我们可以假设有这样一个数据结构来表示帖子 [cpp] type struct post { char* title; char* content; int uid; }post_t; [/cpp] 题目告诉我们已知所有帖子的列表,也就是说我们知道了所有帖子的链表 post_t* post_list,或者是所有帖子的数组post_array[num]。然后让我们找到出现次数最多的uid是多少,并且该uid一定超过了总和的一半。为了叙述方便,下面用数组举例。最容易就想到的方法,就是遍历整个数组,记录每一个uid出现的次数,然后再比较一下,求出最大的。 其实,这个问题就可以等价于:求数组中出现次数大于一半的那个数 解法一 对数组排序,然后遍历排好序的数组,统计各ID出现的次数,找到超过一半的那个即可。代码如下: [cpp] int Find (int* post, int len) { sort(post, post + len); int num = 1; for(int i = 0; i < len; i++) { if(post[i] == post[i + 1]) num++; else num […]

求二进制数中1的个数

编程之美第2.1题————求二进制数中1的个数 题目描述:对于一个字节(8bit)的无符号整形变量,求其中的二进制表示中“1”的个数,要求算法的执行效率尽可能的高。 书中由浅入深地给出了几种解法。 解法一 也是最容易想到的,因为对于无符号整数,若采取对2取余操作,结果只有两种,奇数余1,偶数余0,而奇数的二进制最后一位为1,偶数的二进制最后一位为0。这样我们就可以通过奇偶判断来得到结果,以二进制数1011和1100举例: 1011 对2取余,余数为1,二进制末尾为1,即含有一个1 1100 对2取余,余数为0,二进制末尾为0,即含有一个0 不管这个二进制数的高位有多少个0或者多少个1,对2取余的操作只与最低位相关。所以,如果能够把所有的位都作为最低位,对2取余一次,然后将结果相加,即可得到该题答案。而二进制数中,右移操作,就相当于除以2,所以有了以下解法。 [c] unsigned int Count (unsigned int x) { unsigned int num = 0; // the result while(x) // end of loop when x is 0 { if(x % 2 == 1) // to judge whether the last bit is ‘1’ { num++; } x = […]

读《怀才纳贿的“二皇帝”和珅》

和珅(1750~1799,清朝人,钮祜禄氏),权臣,豪商,巨贪。 读这本书并不是因为什么“读史可以明智”,还达不到那个境界。“以史为鉴”倒还是不错的。 读这本书是因为最近开始对历史有些感兴趣,恰巧在书店转的时候,又被它诙谐的语言,文学的形式所吸引,离开的时候也就带上了。从来没见过一本史书可以这样写,让人读起来毫不费力,有一些像小说。 本书从和珅出生,到求学,到考公务员(是的,原书写的就是考公务员),再到后来的官场沉浮,一直写到乾隆驾崩以后势力的迅速没落,最后上吊自杀。全方位、多角度地展示了一个真实的和珅,一个有血有肉的和珅。 此前,接触和珅最多的则是从电视上——《铁齿铜牙纪晓岚》,一部饱受争议的电视剧,最大的争议点当然还是不符合历史。其实大可不必纠结,电视剧本来就是用来消遣的,君不见广大抗日神剧中,八路军小战士手撕日寇么,难道这也要去算一算作用力与反作用力? 再说和珅,王刚先生之所以把和珅演的惟妙惟肖、脍炙人口,不是因为多像历史的和珅,而是因为多像剧本。试问,你见过哪个电视剧的反面能演到如此让人又爱又恨看不到又想的程度么?王刚的和珅,走的是“戏饰和珅”的感觉。结合剧本的语境词境意境,将和珅一角色表达的生动活泼惟妙惟肖。 只是,和珅真不是一个大胖子啊,王刚先生。 据广大史书记载,和珅是一个美男子,而在不是以肥为美的大清,我觉得,和珅应该不会是一个胖子。 回到书中,给我印象最深的,除了和珅的干女婿刘国泰借银填仓那一段(因为最近发生的黑龙江火龙烧仓事件,实在是很难让人不起联想),就是和珅对夫妻、兄弟、朋友之前感情的珍视了,他也有他善良的一面。不过好像上天并不眷顾他们家,在各自前途最光明的时候,都相继死去,以致最后的描写的和中堂都有点让人惋惜的感觉。 如果你还没读过这本书,也碰巧想了解一下中国史上第一贪的话,可以试着读一读。走近和坤跌宕起伏、颇具戏剧色彩的人生,无疑也能让你对人性、对历史有更多的体会。 2013-7-17 于 北京

MySQL 插入错误

MySQL insert error。。。。。。。。   一条简单的SQL语句,竟然插入错误: INSERT INTO USER (id, describe) VALUES (‘David’, ‘diudiu’); 咋一看确实没错啊,瞅半天才发现,是由于table中有字段名是MySQL的保留字。这里就是‘describe’,报错也就理所当然了。 解决办法: 在关键字的地方加上反引号”`”,就是键盘1旁边的那个字符。 MySQL就是通过添加反引号来区别保留字。 上述修改为 INSERT INTO USER (id, `describe`) VALUES (‘David’, ‘diudiu’); 即可。    

Linux 下 C++ 连接 Mysql

——国外有一篇博客写得挺好,有一些小错误,改正以后翻译过来,发这里了。 C++是一个效率非常高的编程语言 Linux 是一个类Unix操作系统,它促进了开源软件社区的发展,并且用这些开源软件就几乎足以构建一个复杂精妙的企业系统。 MySQL是一个流行的多线程、多用户的数据库管理系统,全球有超过1000万的安装量。   这篇文章将演示如何在Linux下用C++连接MySQL。 首先我们需要将所需要的头文件和库全部包含进来 #include <stdio.h> #include <mysql.h> 然后我们来定义一下main函数 int main() { // code  return 0; }; 然后我们定义一下需要用到的变量,你应该将这些写到main函数里去。 MYSQL_RES *result; MYSQL_ROW row; MYSQL *connection, mysql; int state; 既然要使用MySQL数据库,我们首先就得连上它,使用下面的代码即可: mysql_init(&mysql); connection = mysql_real_connect(&mysql,host,usr,pswd,database,0,0,0); 其中 host – 数据库所在主机的名字,比如 “localhost” 或者 “192.168.250.100” usr – 连接数据库时使用的用户名 pswd – 连接数据库时使用的密码 database – 数据库的名称 如果有错误发生,如用户名/密码不匹配,我们可以通过以下代码获取到错误信息: if (connection == NULL) { printf(“%s\n”, […]