c/c++学习笔记(13)

表查询

  算法采用的是散列查询方法(哈希表),将输入的名字转化为一个很小的非负整数,该整数随后会将作为一个指针数组下标.数组的每个元素指向某个链表的表头,链表中的各个块用于描述具有该散列值的名字.如果没有名字散列到该值,则数组元素的值为NULL.

  散列函数能是一个数据序列的访问过程更加迅速有效,这样能将数据元素更快的定位到.通常有以下几种方法:1、直接寻址法(H(key) = a + b * key);2、数字分析法;3、平方取中法;4、折叠法;5、随机数法;6、除留余数法.具体的信息可以参考维基百科.

类型定义(typedef)

  C语言通过它来建立新的数据类型名,例如:typedef int Length,则Length与int类型完全相同.

  从任何意义上讲,typedef声明并没有创建一个新类型,它只是为某个已经存在的类型增加了一个新的名字而已.

  实际上,它与#define还是比较相似的,但是由于typedef是由编译器解释的,因此它的文本替换功能超过预处理器的能力,例如:

typedef int (*PFI) (char *, char *)

  以上语句定义了PFI是一个指向函数的指针,该函数拥有2个char *类型参数,返回值为int.除了表达方式更加简洁之外,还有2个原因:1、可以是程序参数化,提高程序的可移植性;2、为程序提供更好的说明性.如:

//定义
struct tnode *talloc(void);

typedef struct tnode *Treeptr

//改为
Treeptr talloc(void)

联合

  联合是可以(在不同时刻)保存不同类型和长度的对象的变量,编译器负责跟踪对象的长度和对齐要求;以在单块存储区中管理不同的类型数据,而不需要在程序中嵌入任何同机器相关的信息.它的语法基于结构,实际上,它就是一个结构,如:

union u_tag
{
    int ival;
    float fval;
    char *sval;
} u;

  变量u必须足够大,以存储3种类型中最大的一种.访问成员的语法为:联合名.成员或者联合指针.成员.

标准输入/输出

  文本流由一系列行组成,每一行的结尾是一个换行符.如果系统没有遵循这种模式,则标准库会通过一些措施使系统适用这种模式.如将回车符和换页符转化为换行符,在输出端进行反转.

int getchar(void);

  从标准输入中一次获取一个字符,若文件结尾,则返回EOF.常量EOF在头文件<stdio.h>,值为-1.

  使用命令行prog <infile,会使程序prog从infile文件中读取字符.

int putchar(int);

  将字符c送至标准输出上,默认情况下,标准输出是屏幕显示.如发生错误,则返回EOF.

  命令行prog >outfile,会将标准输出重定向到outfile中.

格式化输出--printf函数

  printf函数的完整描述如下:

int printf(char *format, arg1, arg2,...)

  格式字符串包含两种类型对象:普通字符和转换说明.在输出时,将普通字符原样不动地复制到输出流中,而转换说明则并不直接输出到输出流中,而是用于控制printf中参数的转换和打印.

  转换说明以%开始,一个转换字符结束,依次可能包含如下:

  • 负号,用于指定被转换的参数按照左对齐的形式输出.
  • 数,用于指定最小字段宽度.转换后的参数将打印不小于最小字段宽度的字长,如有必要,字段左边(使用左对齐方式,则为右边)多余位置用空格填充.
  • 小数点,用于将字段宽度和精度分开
  • 数,精度宽度,如:字符串最大字符数、浮点小数位数、整数至少输出数字数目.
  • 字母h(整数作为short类型)或l(整数作为long类型)

参数类型,输出形式,如下:

  • d,i     int类型;显示一个带符号的十进制数(i和d用在scanf函数中时是不同的).
  • o       int类型;无符号八进制数(没有前导0)
  • x,X     int类型;显示一个无符号的十六进制数,X可用来显示数字0~9和字母A~F,x可用来显示数字0~9和字母a~f .
  • u       int类型;无符号十进制数
  • c       int类型;单个字符
  • s       char *类型;顺序打印字符串中的字符,直到遇到'/0'或已打印了由精度指定的字符数为止.
  • f       double类型;十进制小数[-]m.dddddd,其中d的个数由精度指定(默认值为6)
  • e,E     double类型;[-]m.dddddde+/-xx或[-]m.ddddddE+/-xx,其中d的个数由精度指定(默认值为6)
  • g,G     double类型;如果指数小于-4或大于等于精度,则用%e或%E格式输出,否则用%f格式输出.尾部的0和小数点不打印.
  • p       void *类型;指针(取决于具体实现)
  • %       不转换参数;打印一个百分号%   
int sprintf(char *string, char *format, arg1, arg2,...)

  该函数与printf类似,但是它是将输出保存到一个字符串中,而不是输出到标准输出.

  今天的学习就到此结束了,明天继续,加油!

posted @ 2012-06-06 06:37  ahl5esoft  阅读(235)  评论(0编辑  收藏  举报