CPL期末复习

· · 个人记录

0.

int范围 10^9

long long 9*10^18

1.猫的分类

2024年第二次机试T2

二分查找

2.scanf用法(%[],^,*)

  1. 基本的字符匹配

    • 匹配单个字符
      • %cscanf用来读取单个字符的格式说明符,这类似于正则表达式中匹配单个字符。例如:
        char ch;
        scanf("%c", &ch);

        上述代码会读取用户输入的一个字符并存储到变量ch中。

    • 匹配普通字符串
      • scanf的格式字符串中,普通字符需要与输入中的字符完全匹配。例如:
        int num;
        scanf("abc%d", &num);

        这里scanf会先匹配abc这三个字符,然后再读取一个整数存储到num中。如果输入不是以abc开头,scanf将无法正确读取整数。

  2. 扫描集(%[])的使用

    • 匹配字符集合中的字符
      • %[]scanf中的扫描集,用于读取方括号内指定的字符集合中的字符。例如,%[abc]会读取输入中连续的abc字符,直到遇到不在abc中的字符。
        char str[100];
        scanf("%[abc]", str);

        上述代码会将输入中连续的abc字符存储到str数组中。

    • 匹配不在字符集合中的字符(取反操作)
      • %[^abc]的作用与%[abc]相反,它会读取连续的不是abc的字符,直到遇到abc字符。例如:
        char str[100];
        scanf("%[^abc]", str);

        这段代码会将输入中连续的非abc字符存储到str数组中。

  3. 宽度指定和抑制赋值

    • 宽度指定
      • 可以在%和格式字符之间指定宽度,用于限制读取的字符数量。例如,%3c会读取3个字符。
        char ch[4];
        scanf("%3c", ch);

        这里scanf会读取3个字符存储到ch数组中,由于C语言中的字符串需要以\0结尾,所以ch数组的大小至少应该为4。

    • *抑制赋值(``)**:
      • %后面添加*可以抑制赋值,即读取相应的数据但不存储。例如,%*d会读取一个整数但不存储它。
        int num1, num2;
        scanf("%*d%d", &num2);

        上述代码会跳过第一个整数,然后读取第二个整数并存储到num2中。

  4. 数字及其他格式匹配

    • 匹配整数和浮点数
      • %d用于读取十进制整数,%f用于读取单精度浮点数,%lf用于读取双精度浮点数。例如:
        int num;
        float f_num;
        scanf("%d%f", &num, &f_num);

        这段代码会先读取一个整数存储到num中,然后读取一个单精度浮点数存储到f_num中。

    • 匹配十六进制和八进制数
      • %x%X用于读取十六进制整数,%o用于读取八进制整数。例如:
        int hex_num, oct_num;
        scanf("%x%o", &hex_num, &oct_num);

        这里会分别读取一个十六进制整数和一个八进制整数并存储到相应的变量中。

需要注意的是,scanf函数在处理输入时,如果输入不符合格式要求,可能会出现问题,如程序陷入死循环或者变量存储错误的值。而且它的“正则表达式”功能相对有限,不像专门的正则表达式库那样功能强大。

3.const char 和char const

头文件 #include<stdlib.h>

比较函数 int cmp(const void ,const void )

void qsort(void base, size_t nmemb, size_t size, int (compar)(const void , const void ));

void bsearch(const void key, const void base, size_t nmemb, size_t size, int (compar)(const void , const void ));

5.21T3五子棋