刚刚入门,在学习的过程中,遇到了一些琐碎的小知识点,慢慢的总结一下
--------------------------------------------
一.scanf("格式控制", 地址表列): scanf(,)的用法,逗号前面的是格式控制,后面的是地址表列
1.在格式控制中如果还有除了格式说明外的其他字符,则在输入的时候在相应的位置也要输入与这些字符相同的字符----例如:要求按照2016/12/19的形式输入年月日的时候就可以用scanf("%d/%d/%d", &m, &n, &d)的方式输入年月日, 自动将两个斜杠之间的数字保存给m n d。
2.在用“%c”输入的时候,空格和转义字符也作为有效字符输入-----例如:输入三个字符给字符数组的时候,如果输入a b c,最后只把a b保存起来了,因为中间的空格也当做了一个字符。
3.遇到“回车”,“tab”或者非法输入的时候结束输入数据。
4.scanf()函数返回的是输入的变量个数 ---- 可以用scanf("%d", &n) == 1 判断是否输入一个变量
二.用printf("%%")的方式输出%这个字符
printf("%.*f", n, m)的方式 以保留小数点后n位输出浮点数m,即*被n代替 -----例如:printf("%.*f", 2, m) 来按要求输出小数点后2位输出m
三.竞赛中可能用到的数学函数调用:
pow(,) 例如: pow(2.0, 16.0)求的是2的十六次方 -----用浮点数类型 2.0, 16.0
四.小技巧:
1) x%100 表示保存x的后两位, 即x%1--- 1后面多少个0即为保存x后多少位
2)x/100 表示去掉x后两位,同理 x/1--- 1后面多少个0即为去掉x后多少位
五.数学知识
1)模运算
(a + b) % p = (a % p + b % p) % p (1)
(a - b) % p = (a % p - b % p) % p (2)
(a * b) % p = (a % p * b % p) % p (3)
(a^b) % p = ((a % p)^b) % p (4)
六.竞赛中用到的头文件以及对应的库函数和他们的用法
#include<string.h>
memcpy( , , ) : 因为两个数组之间不能相互复制,所以这个函数的作用就体现出来了,数组a复制k个元素到数组b,可以这样做memcpy(b, a, sizeof(int)*k) 第三个元素为K个元素的字节长,如果要把a全部复制到b中,用memcpy(b, a, sizeof(a))。
memset( , , ):这个函数的作用是为数组设值,它也在<string.h>中定义 例如:memset(a, 0, sizeof(a))的作用是把数组a清零。PS:该函数对数组操作时只能用于数组的置0或-1,其他值无效。
strchr( , ):该函数的作用是在一个字符串中查找单个字符,例如:strchr( s, buf[i])即为在字符串s中查找字符buf[i]。
度娘解释:strchr函数原型:extern char *strchr(const char *s,char c);查找字符串s中首次出现字符c的位置。 成功找到则返回第一个找到的位置,否则返回NULL。
例如:cout << strchr("abcde", 'a') 会输出abcde,其实就和输出字符串的首地址会输出整个字符串是一个意思。
strlen(): strlen()函数的的作用就是求字符串的实际长度
#incude<algorithm>
#include<ctype.h>
isalpha(): 用来判断一个字符是否为字母,例如isalpha(a)
isdigit()判断一个字符是否为数字,
toupper()将一个字符转换为大写,如果c为小写英文字母,则返回对应的大写字母;否则返回原来的值。 所以用putchar(toupper())来把一个小写转换为大写并输出
tolower()将一个字符转换为小写,
isprint()
七.
1)用 ch-'0'可以把字符ch转换为数字
2)用 x+'A'可以把数字转换为字符