博文
谈程序员的数学修养(2007-03-18 15:09:00)
摘要:可能有很多朋友在网上看过google公司早几年的招聘广告,它的第一题如下了:{first 10-digit prime found in consecutive digits e}.com,e中出现的连续的第一个10个数字组成的质数。据说当时这个试题在美国很多地铁的出站口都有大幅广告,只要正确解答了这道题,在浏览器的地址栏中输入这个答案,就可以进入下一轮的测试,整个测试过程如同一个数学迷宫,直到你成为google的一员。又如Intel某年的一道面试题目:巴拿赫病故于1945年8月31日。他的出生年份恰好是他在世时某年年龄的平方,问:他是哪年出生的?这道看似很简单的数学问题,你能不能能快地解答呢?下面则是一道世界第一大软件公司微软的招聘测试题:中间只隔一个数字的两个素数被称为素数对,比如5和7,17和19,证明素数对之间的数字总能被6整除(假设这两个素数都大于6),现在证明没有由三个素数组成的素数对。这样的试题还有很多很多,这些题目乍初看上去都是一些数学问题。但是世界上一些著名的公司都把它们用于招聘测试,可见它们对新员工数学基础的重视。数学试题与应用程序试题是许多大型软件公司面试中指向性最明显的一类试题,这些试题就是考察应聘者的数学能力与计算机能力。某咨询公司的一名高级顾问曾说:微软是一家电脑软件公司,当然要求其员工有一定的计算机和数学能力,面试中自然就会考察这类能力。微软的面试题目就考察了应聘人员对基础知识的掌握程度、对基础知识的应用能力,甚至暗含了对计算机基本原理的考察。所以,这样的面试题目的确很“毒辣”,足以筛选到合适的人。
四川大学数学学院的曹广福教授曾说过:“一个大学生将来的作为与他的数学修养有很大的关系”。大学计算机专业学生都有感触,计算机专业课程中最难的几门课程莫过于离散数学、编译原理、数据结构,当然像组合数学、密码学、计算机图形学等课程也令许多人学起来相当吃力,很多自认为数据库学得很好的学生在范式、函数依赖、传递依赖等数学性比较强的概念面前感到力不从心,这些都是因为数学基础或者说数学知识的缺乏所造成的。数学是计算机的基础,这也是为什么考计算机专业研究生数学都采用最难试题(数学一)的原因,当然这也能促使一些新的交叉学科如数学与应用软件、信息与计算科学专业等飞速发展。许多天才程序员本身就是数学尖子,众所周知,Bill Gates的数学成绩......
条形码编程实例 (2007-03-18 15:05:00)
摘要:条形码编程实例
条形码技术广泛应用于各行各业,你随便拿起一本书、一包薯片都可以在外包装上找到,利用条码读取机便可将这一条条黑白相间、粗细不同的垂直线条识别而转换为具体的数值,并将这个数值返回到计算机中进行处理。
正是有了条形码技术,人们很方便就能取得该商品的有关信息,如商品名称、规格、价格等,因为每种商品都有其对应的条形码。通过条形码,计算机(终端、服务器)就可以迅速返回用户,从数据库中读取约定的商品、信息使得销售、进货、存货等等管理更有效率,也对防止假冒伪劣有一定的抑制作用。
条码的编码方式有多种,不同行业,不同国家,标准也不尽相同。条形码通过线条的粗细来表达其数值。至于接口方式一般也有多种,如键盘口的、串行口的。一般传感装置是光罩式的,也有笔式的。 上面笼笼统统地谈了一些关于条形码的知识,可帮助你更好地阅读以下更深入的内容。条形码有关概念先说到这里,接着是详细具体的编程实现方法。
一、条形码的读取
用过键盘口式的扫条码工具的朋友就知道,它就如同在鍵盘上按下数字鍵一样,基本不需任何编程和处理。但如果你使用的是其它接口的话,可能你就要为该设备编写通讯代码了。以下有一段简单的25针串口的条码读取器通讯代码。
Option Explicit
Dim sData As String
Private Sub Form_Load()
With MSComm1
.CommPort = 3 '设为COM3,试运行的系统而定,你可提供一个Combox让用户选择。
.PortOpen = True '打开通讯端口
End With
End Sub
Private Sub MSComm1_OnComm()
Dim EndPos As Integer
Select Case MSComm1.CommEvent
Case comEvReceive '当有数据传送过来时
sData = sData & Trim(MSComm1.Input)
'检索回车,通常读卡机每组数据結尾都返回一个回车作为结束符
EndPos = InStr(1, sData, Chr(13))
If EndPos = 0 Then '如果未结束就继续努力
Else '读完一组。
八条DOS网络命令(2007-03-18 15:04:00)
摘要:八条DOS网络命令
一,ping
它是用来检查网络是否通畅或者网络连接速度的命令。作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,可以初步判断目标主机的操作系统等。下面就来看看它的一些常用的操作。先看看帮助吧,在DOS窗口中键入:ping /? 回车,。所示的帮助画面。在此,我们只掌握一些基本的很有用的参数就可以了(下同)。
-t 表示将不间断向目标IP发送数据包,直到我们强迫其停止。试想,如果你使用100M的宽带接入,而目标IP是56K的小猫,那么要不了多久,目标IP就因为承受不了这么多的数据而掉线,呵呵,一次攻击就这么简单的实现了。
-l 定义发送数据包的大小,默认为32字节,我们利用它可以最大定义到65500字节。结合上面介绍的-t参数一起使用,会有更好的效果哦。
-n 定义向目标IP发送数据包的次数,默认为3次。如果网络速度比较慢,3次对我们来说也浪费了不少时间,因为现在我们的目的仅仅是判断目标IP是否存在,那么就定义为一次吧。
说明一下,如果-t 参数和 -n参数一起使用,ping命令就以放在后面的参数为标准,比如“ping IP -t -n 3”,虽然使用了-t参数,但并不是一直ping下去,而是只ping 3次。另外,ping命令不一定非得ping IP,也可以直接ping主机域名,这样就可以得到主机的IP。
下面我们举个例子来说明一下具体用法。
这里time=2表示从发出数据包到接受到返回数据包所用的时间是2秒,从这里可以判断网络连接速度的大小。从TTL的返回值可以初步判断被ping主机的操作系统,之所以说“初步判断”是因为这个值是可以修改的。这里TTL=32表示操作系统可能是win98。
(小知识:如果TTL=128,则表示目标主机可能是Win2000;如果TTL=250,则目标主机可能是Unix)
至于利用ping命令可以快速查找局域网故障,可以快速搜索最快的QQ服务器,可以对别人进行ping攻击……这些就靠大家自己发挥了。
......
C语言图形处理基本知识(2007-03-18 15:03:00)
摘要:
Turbo C提供了非常丰富的图形函数, 所有图形函数的原型均在graphics. h中, 本文主要介绍图形模式的初始化、独立图形程序的建立、基本图形功能、图形窗口以及图形模式下的文本输出等函数。另外, 使用图形函数时要确保有显示器图形驱动程序*BGI, 同时将集成开发环境Options/Linker中的Graphics lib选
为on, 只有这样才能保证正确使用图形函数。
1. 图形模式的初始化
不同的显示器适配器有不同的图形分辨率。即是同一显示器适配器, 在不同模式下也有不同分辨率。因此, 在屏幕作图之前, 必须根据显示器适配器种类将显示器设置成为某种图形模式, 在未设置图形模式之前, 微机系统默认屏幕为文
本模式(80列, 25行字符模式), 此时所有图形函数均不能工作。设置屏幕为图形模式, 可用下列图形初始化函数:
void far initgraph(int far *gdriver, int far *gmode, char *path);
其中gdriver和gmode分别表示图形驱动器和模式, path是指图形驱动程序所在的目录路径。有关图形驱动器、图形模式的符号常数及对应的分辨率见表2。图形驱动程序由Turbo C出版商提供, 文件扩展名为.BGI。根据不同的图形
适配器有不同的图形驱动程序。例如对于EGA、 VGA 图形适配器就调用驱动程序
EGAVGA.BGI。
&n......
C语言图形函数(2007-03-18 15:02:00)
摘要:基本图形函数
基本图形函数包括画点, 线以及其它一些基本图形的函数。本节对这些函数
作一全面的介绍。
一、画点
1. 画点函数
void far putpixel(int x, int y, int color);
该函数表示有指定的象元画一个按color所确定颜色的点。对于颜色color的
值可从表3中获得而对x, y是指图形象元的坐标。
在图形模式下, 是按象元来定义坐标的。对VGA适配器, 它的最高分辨率为
640x480, 其中640为整个屏幕从左到右所有象元的个数, 480 为整个屏幕从上到
下所有象元的个数。屏幕的左上角坐标为(0, 0), 右下角坐标为(639, 479), 水
平方向从左正向, 到右为x轴垂直方向从上到下为y轴正向。TURBO C 的图形函数
都是相对于图形屏幕坐标, 即象元来说的。
关于点的另外一个函数是:
int far getpixel(int x, int y);
它获得当前点(x, y)的颜色值。
2. 有关坐标位置的函数
int far getmaxx(void);
返回x轴的最大值。
int far getmaxy(void);
返回y轴的最大值。
&n......
C语言版第48次编程比赛 (2007-03-10 18:44:00)
摘要:/*
第一题:......
第二题:... ...
*/
#include <iostream.h>//
#include <math.h>//
#include <stdlib.h>//使用到exit()函数
#include <conio.h>//使用到获取键盘字符函数
const int MAX_M = 300;//指数建议不要超过 MAX_M,不然计算结果将无法预料
int* getFactor(const int num);//取得因数表
int SumFactorMod(int n, int s);//取得余数
int SumFactorMod(int n, int m, int s);//取得n^m因数之和%s
bool test1();
bool test2();
int main()
{
const char* text1=" 第一题: 输入2个数字n,s。求数字n的所有因数之和除以s的余数.比如输入6 5 6的因数有1,2,3,6,因数之和为12,因为12除以5的余数为2 于是输出2。假设n,m都不超过5000000 \0";
const char* text2=" 第二题: 输......
程序员须知(2007-02-13 15:48:00)
摘要:程序员须知
我始终认为,对一个初学者来说,IT界的技术风潮是不可追赶。我时常看见自己的DDMM们把课本扔了,去卖些价格不菲的诸如C#, VB.Net 这样的
大部头,这让我感到非常痛心。而许多搞不清指针是咋回事的BBS站友眉飞色舞的讨论C
#里面可以不用指针等等则让我觉得好笑。C#就象当年的ASP一样,“忽如一夜春风来,
千树万树梨花开”,结果许多学校的信息学院成了“Web 学院”。96,97级的不少大学生
都去做Web 了。当然我没有任何歧视某一行业的意识。我只是觉得如果他们把追赶这些
时髦技术的时间多花一点在基础的课程上应该是可以走得更远的。
几个误区
初学者对C#风潮的追赶其实也只是学习过程中经常遇到的几个误区之一。我将用一些实
际的例子来说明这些现象,你可以按部就班的看看自己是不是属于其中的一种或者几种
:
认为计算机技术等于编程技术:
有些人即使没有这个想法,在潜意识中也有这样的冲动。让我奇怪的是,许多信息学院
的学生也有这样的念头。认为计算机专业就是编程专业,与编程无关的,或者不太相关
的课程他统统都不管,极端的学生只要书上没带“编程”两个字他就不看。
其实编程只是计算机技术应用过程中一种复杂性最低的劳动,这就是为什么IT业最底层
的人是程序员(CODER)。计算机技术包括了多媒体,计算机网络,人工智能,模式识别
,管理信息系统等等这些方面。编程工作只是在这些具体技术在理论研究或者工程实践
的过程中表达算法的过程。编程的人不一定对计算机技术的了解就一定很高。而一个有
趣的现象是,不少大师级的计算机技术研究者是不懂编程的。网上的炒作和现实中良好
的工作待遇把编程这种劳动神秘化了。其实每一个程序员心里都明白,自己这些东西,
学的时候并不比其它专业难,所以自然也不会高档到哪里去。
咬文嚼字的孔已己作风:
我见过一本女生的《计算机网络原理》教材,这个女生像小学生一样在书上划满了横杠
杠,笔记做得满满的,打印出来一定比教材还厚。我不明白的是,像计算机网络原理这
样的课程有必要做笔记?我们的应试教育的确害了不少学生,在上《原理》这一类课程
的时候许多学生像学《马列原理》一样逐字背诵记忆。这乃是我见过的最愚蠢的行为。
所谓《原理......
C语言中非常有用的函数mktemp(2007-02-13 12:32:00)
摘要:
char *mktemp( char *template );
用于:Create a unique filename.
Windows中,函数叫下面两个名字,包含于 io.h 文件中
char *_mktemp( char *template );
wchar_t *_wmktemp( wchar_t *template );
Return Value
Each of these functions returns a pointer to the modified template. The function returns NULL if template is badly formed or no more unique names can be created from the given template.
template的格式:baseXXXXXX,base为任意字符,然后是六个X。(记住,是六个哦)
Example/* MKTEMP.C: The program uses _mktemp to create
* five unique filenames. It opens each filename
* to ensure that the next name is unique.
*/
#include"stdio.h"
#include "io.h"
#include "string.h"
char *template = "fnXXXXXX";
char *result;
char names[5][9];
void main( void )
{
int i;
FILE *fp;
for( i = 0; i < 5; i++ )
{
strcpy( names[i], template );
/* Attempt to find a unique filename: */
result = _mktemp( names[i] );
if( result == NULL )
printf( "Problem creating the te......
C语言OPEN函数详解(2007-02-13 12:32:00)
摘要:open是一个非标准的低级文件I/O函数,返回的是文件的低级句柄,原型:
int open(char* path, int access, ...);
open是一个可变参数的函数实现,后面的可变参数通常表示unsigned mode,mode参数是否存在要看access的值,path是文件的路径。
access和mode的可取值通常在FCNTL.h里面定义,access的可取值如下:
#define O_RDONLY 1
#define O_WRONLY 2
#define O_RDWR 4
access还可以是以下flag及它们之间的组合而得到的性质:
#define O_CREAT 0x0100 /* create and open file */
#define O_TRUNC 0x0200 /* open with truncation */
#define O_EXCL 0x0400 /* exclusive open */
#define O_APPEND &n......
C语言写系统软件举例(2007-02-13 12:31:00)
摘要:---- 我们知道C语言的功能非常强大, 很适合编写系统软件。利用它我们可以很容易地解决经常遇到的一些棘手的问题,如拷贝隐含或系统属性的文件(特别是光盘中的隐含文件)、在任意DOS版本或在windows中更改子目录的名称、在任意DOS 版本中使用带空格的目录名等等。这些问题仅靠操作系统或常用的工具软件往往很难凑效。我们可以利用C语言的强大功能来编写一些小程序,能够很顺利地解决这些问题。
---- 一、拷贝隐含或系统属性的文件
---- 使用操作系统提供的拷贝命令不能拷贝隐含或系统属性的文件,因为在拷贝过程中系统会提示“File not found”。下面的小程序可以解决这个问题。
// copyfile.c
# include < stdio.h >
# include < stdlib.h >
main(int argc,char *argv[])
{ if(argc< 3)
{
printf("\n用法: COPYFILE
< 源文件名 > < 目标文件名 >\n");
exit(1);
}
copy(argv[1],argv[2]);
}
copy(char * file1,char * file2)
{
char ch;
FILE * fp1,* fp......