c语言知识(1)
用freopen重定向输入
freopen函数以指定模式重新指定到另一个文件,模式用于指定新文件的访问方式。
FILE *freopen(const char * restrict filename, const char * restrict mode, FILE * restrict stream);
filename:文件名或文件路径,mode:文件访问权限字符串("r"只读,“w”只写,“a”追加写入),steam:需要被重定向的文件流。
eg:freopen("c:\\tmp\\test.txt", "r", stdin);
数据存储是以字节(Byte)为单位,数据传输大多是以位(bit)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。
ASCII码:一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。如一个ASCII码就是一个字节。
UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。
Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。
符号:英文标点占一个字节,中文标点占两个字节。
int, long, short, char的最高位是符号位,为1表示负数,为0表示非负数。整型数据转化为字符型数据时,只会留下最右边的一个字节,其余位丢弃
2.1 输入输出进阶
%f:读入输出float/输出double。
%lf:读入double。
%lld:读入输出long long。
%s:读入输出字符串,不需要加“&”。
%u:以无符号整数形式输出整数。
%x:以十六进制形式读入或输出整数
示例1 4 5;按每个整数占8个字符的宽度,右对齐输出它们。 %8d | 1 4 5
按每个整数占8个字符的宽度,右对齐输出它们,不足位用0补齐 %08d |000000001 000000004 000000005
类似的 %.6f 和%.06f 效果相同 float a=2.4 %.6f|2.400000
不要用“a == b”的办法判断两个浮点数是否相等,也不要用“a == 0”的办法判断浮点数 a是否等于0,因为浮点数是有误差的。
应该用“a-b>-eps && a-b<-eps“,即a和b的差的绝对值小于某个很小值 eps的办法来判断a和b是否相等。
如果结果要保留小数点后面n位,那么 eps可以取 10的-(n+2)次方。
3.1 if语句
else总是和离它最近的if配对。
循环控制变量定义在“表达式1”中,则只在for语句内部起作用,可以不用担心循环控制变量重名。
循环结构里的“表达式1”和“表达式3”都可以是用逗号连接的若干个表达式。
“表达式1”“表达式2”“表达式3”都可以不写,但是“;”必须保留。