博文

键盘代码表(2005-08-15 21:01:00)

摘要:bios.hint   bioskey(int cmd)本函数用来执行各种键盘操作,由cmd确定操作。       cmd可为以下值:       0 返回敲键盘上的下一个键。若低8位为非0,即为ASCII字符;若低8位为0,         则返回扩充了的键盘代码。       1 测试键盘是否可用于读。返回0表示没有键可用;否则返回下一次敲键之值。         敲键本身一直保持由下次调用具的cmd值为0的bioskey所返回的值。       2 返回当前的键盘状态,由返回整数的每一个位表示,见下表:        ┌──┬───────────┬───────────┐        │ 位 │为0时意义             │为1时意义             │        ├──┼───────────┼───────────┤        │ 7  │插入状态         &nb......

阅读全文(8272) | 评论:1

年龄趣题(2005-08-15 14:25:00)

摘要:两位俄罗斯数学家在飞机上相遇."如果我没记错的话,你有3个儿子."伊凡说."他们现在多大拉?""他们年龄的乘积是36,"艾格说."他们年龄的和恰是今天的日期.""对不起,艾格."一分钟后,伊凡开口道,"你并没有告诉我你儿子的年龄.""哦,忘记告诉你拉,我的小儿子是红头发的.""啊,那就很清楚拉."伊凡说,"我现在知道你的3个儿子各是多大拉."请问....伊凡是怎么知道的他们的年龄的?分别是多少?......

阅读全文(2972) | 评论:0

%*的又一应用(2005-08-15 12:46:00)

摘要:用*组成X型图案,如下:1*          *7  2*      *6    3*  *5      4*4    5*  *3  6*       *27*           *1 程序由林杰杰发布http://programfan.com/club/showbbs.asp?id=97897#include int main(void){    int i;    int k;    for (i = 1;i <= 7;i++)    {        k = (i <= 4 ? i : 8 - i);        printf("%*s",k,"*");        printf("%*s\n",8 - 2 * k,"*" + (k == 4));    }    return 0;} 运行结果:*     **   *  * *   *  * **  ......

阅读全文(2993) | 评论:0

Jos问题(2005-08-14 16:25:00)

摘要:Jos问题n个人围成一圈,从1开始顺序报数,报到m的退出,再从1开始报数,直到仅剩一个人为止。输出出列序列。#include<stdio.h>#include<malloc.h> struct Man{  int num;  struct Man *next;}; void Jos(int n,int m = 3){    struct Man *head, *p, *b, *t;    int i;     head=(struct Man*)malloc(sizeof head);     p = head;    b = head;    for(i = 1;i < n;i++){ //创建循环单链表        p->num = i;        p->next = (struct Man*)malloc(sizeof p->next);         p = p->next;    }    p->num = n;    p->next = head;//创建完毕  //开始报数    p = head;    i = 0;    do{        if(++i == m){  //报到3            i = 0;     //重新......

阅读全文(3168) | 评论:0

解析:菱形的高效率代码(2005-08-15 12:28:00)

摘要:解析:菱形的高效率代码输出菱形的高效率代码如下:#include int main(int _){   while(_!=10)   {      printf("%*s\n",_<=5?4+_:14-_,"*********"+(_<=5?10-2*_:2*_-10));           _++;   }  return 0;}运行结果如下:    *   ***  ****************************  *****   ***    *(注:第4、6行显示有误。应为一个菱形。下同)解析:1.printf("%*s", int, char*);%*表示右对齐方式显示,int为从左起到右对齐处的字符数例如:printf("%*d", 4, 345);输出结果如下:3452._<=5?4+_:14-_该表达式即是计算菱形右边界3."*********"+(_<=5?10-2*_:2*_-10)该表达式是计算显示*的个数,事实上是地址运算。printf("%p\n", "*********"+(_<=5?10-2*_:2*_-10));注:%p为输出16进制32位地址。则输出:00420FA000420F9E00420F9C00420F9A00420F9800420F9A00420F9C00420F9E00420FA0若改为printf("%*s\n",_<=5?4+_:14-_,"123456789"+(_<=5?10-2*_:2*_-10));则输出结果如下:    9   789  5678934567891234567893456789  ......

阅读全文(3575) | 评论:1

feof(2005-08-14 01:12:00)

摘要:MSDN 2001 ------------------------ feof Tests for end-of-file on a stream. int feof( FILE *stream ); The feof function returns a nonzero value after the first read operation that attempts to read past the end of the file. It returns 0 if the current position is not end of file. There is no error return. Example /* FEOF.C: This program uses feof to indicate when * it reaches the end of the file FEOF.C. It also * checks for errors with ferror. */ ********************************************************* #include<stdio.h> struct number {     int num; }a[10],b[10]; int main(void) {     int i;     FILE *fp;     fp=fopen("d:\\abc.txt","w+");     for(i=0;i<10;i++)        a[i].num=i;     for(i=0;i<10;i++)        fwrite(&a[i],sizeof(struct number),1,fp);  &......

阅读全文(3667) | 评论:0

输出变量内存地址(2005-08-13 17:03:00)

摘要:%p的运用 #include <stdio.h> int main() {   int i = 0;   printf("[%p]\n",&i);   return 0; }......

阅读全文(2547) | 评论:0

(转)成为编程高手的五个阶段(2005-08-22 10:58:00)

摘要:第一阶段 此阶段主要是能熟练地使用某种语言。这就相当于练武中的套路和架式这些表面的东西。 第二阶段 此阶段能精通基于某种平台的接口(例如我们现在常用的Win 32的API函数)以及所对应语言的自身的库函数。到达这个阶段后,也就相当于可以进行真实散打对练了,可以真正地在实践中做些应用。 第三阶段 此阶段能深入地了解某个平台系统的底层,已经具有了初级的内功的能力,也就是“手中有剑,心中无剑”。 第四阶级 此阶段能直接在平台上进行比较深层次的开发。基本上,能达到这个层次就可以说是进入了高层次。这时进入了高级内功的修炼。比如能进行VxD或操作系统的内核的修改。 这时已经不再有语言的束缚,语言只是一种工具,即使要用自己不会的语言进行开发,也只是简单地熟悉一下,就手到擒来,完全不像是第一阶段的时候学习语言的那种情况。一般来说,从第三阶段过渡到第四阶段是比较困难的。为什么会难呢?这就是因为很多人的思想变不过来。 第五阶级 此阶段就已经不再局限于简单的技术上的问题了,而是能从全局上把握和设计一个比较大的系统体系结构,从内核到外层界面。可以说是“手中无剑,心中有剑”。到了这个阶段以后,能对市面上的任何软件进行剖析,并能按自己的要求进行设计,就算是MS Word这样的大型软件,只要有充足的时间,也一定会设计出来。 第六阶级 此阶段也是最高的境界,达到“无招胜有招”。这时候,任何问题就纯粹变成了一个思路的问题,不是用什么代码就能表示的。也就是“手中无剑,心中也无剑”。 此时,对于练功的人来说,他已不用再去学什么少林拳,只是在旁看一下少林拳的对战,就能把此拳拿来就用。这就是真正的大师级的人物。这时,Win 32或Linux在你眼里是没有什么差别的。 每一个阶段再向上发展时都要按一定的方法。第一、第二个阶段通过自学就可以完成,只要多用心去研究,耐心地去学习。 要想从第二个阶段过渡到第三个阶段,就要有一个好的学习环境。例如有一个高手带领或公司里有一个好的练手环境。经过二、三年的积累就能达到第三个阶段。但是,有些人到达第三个阶段后,常常就很难有境界上的突破了。他们这时会产生一种观念,认为软件无非如此,认为自己已无所不能。其实,这时如果遇到大的或难些的软件,他们往往还是无从下手。 现在我们国家大部分程序员都是在第二、三级之间。他们大多都是通过自学成才的,不过......

阅读全文(2807) | 评论:0

打印1+11+111+1111+11111=(2005-08-13 16:26:00)

摘要:问题: 打印1+11+111+1111+11111=           2+22+222+2222+22222=           ....................           9+99+999+9999+99999=#include int main(){  int i, j, n, sum=0;  for(i = 1;i <= 9;i++){    sum = 0;     for(j = 0,n = 0; j < 5; j++){      n *= 10;      n += i;      sum += n;      if(j == 4) printf("%d = ",n);      else printf("%d+",n);    }    printf("%d\n",sum);  }   getchar();  return 0;  }结果如下:1+11+111+1111+11111=123452+22+222+2222+22222=246903+33+333+3333+33333=370354+44+444+4444+44444=493805+55+555+5555+55555=617256+66+666+6666+666......

阅读全文(4071) | 评论:0

(转)关于指针及数组的基本概念问题(2005-08-13 14:44:00)

摘要:原贴: http://www.programfan.com/club/showbbs.asp?id=95120xiangyu138的答复 回答网友的问题:主题:关于指针及数组的基本概念问题1.请问如下的函数参数定义是不是相等的,用指针做参数有什么意义Node(double *xyz) { x = xyz[0]; y = xyz[1]; z = xyz[2]; }Node(double xyz[3]) { x = xyz[0]; y = xyz[1]; z = xyz[2]; }答:两者是相等的,而且第一种其实更标准,因为第二种也是转化为第一种。在函数形式参数里是没有数组的,都被转化为指针了。所以这时在函数里面没有办法通过像:sizeof(xyz)/sizeof(xyz[0])来取得数组元素的个数(因为根本就不是数组),所以一般还要传递一个数组元素个数的值,否则编这个函数的人不知道你原来的数组个数是多少。如:Node(double xyz[],int n) { x = xyz[0]; y = xyz[1]; z = xyz[2]; } 2.单看double *xyz 的定义,是不是数或数组都可以传递。但是看了{ x = xyz[0]; y = xyz[1]; z = xyz[2]; }这个具体实现所以才知道要传递一个数组过来?答:这个完全错,是看形式参数double *xyz 就知道要传递一个一次指针(一次地址)过来,你要是传数值就会出错的,而且不能传二次指针如:char **argv;的argv。 3.请问 main(int argc,char **argv)这里面的char **argv 具体是表示的是什么意思,传递参数进来时,是应该传递一个指针还是其他,谢谢!答:char **argv 是二次指针,也就是二次地址的意思,就是地址的地址(本身地址也是一个二进制数,它也需要一个地址来保存的哦)。可以传char *aa[];这个是指针数组(也就是数组的元素是指针),或者是二次指针char **a。 **************************1.那为什么我看大部分都喜欢用指针而不直接用数组呢?我觉得用数组定义的很清楚啊答:随便你了,没有所谓的大部分的,其实两者的速度差不多的。3.传 char* p[3] = { "abc", "1234567......

阅读全文(3553) | 评论:3