zoukankan      html  css  js  c++  java
  • 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类似,但是它是将输出保存到一个字符串中,而不是输出到标准输出.

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

  • 相关阅读:
    【博弈论】取火柴游戏
    【贪心】马拉松接力赛
    【贪心】0/1背包
    【贪心】赶作业
    C# 设计模式 (一)
    C# 反射入门
    C# WinForm 访问webService天气预报
    WebService 测试地址
    C# Windows服务相关
    CSS 案例学习
  • 原文地址:https://www.cnblogs.com/ahl5esoft/p/2537580.html
Copyright © 2011-2022 走看看