1 rewind函数的功能
1.1 rewind的功 能: 将文件内部的位置指针重新指向一个流(数据流/文件)的开头。
1.2 文件内部的位置指针会随着对文件的读写文件的位置指针(指向当前读写字节)向后移动。
1.3 而文件指针是指向整个文件,如果不重新赋值文件指针不会改变
2 fopen的第一个参数的说明
2.1 fopen的第一个参数是字符串,字符串中应该放入要打开文件的绝对地址
2.2 字符串赋给其它的字符串的时候将会自动无视 \ 这个符号,其自动视为和其它字符配合
配合之后形成转义字符
比如绝对路径是:c:\user\text.txt,则给到fopen的一个参数的实参是"c:\\user\\text.txt"
3 fopen在第二次打开之后重新写入字符串时会将之前的内容清除
4 函数 fseek 把文件位置重定位到文件中的指定位置
5 fputc的使用说明
5.1 若调用 fputc 函数输出字符成功,则其返回值是输出的字符
5.2 若调用 fputc 函数输出字符失败,则其返回值是EOF
6 设计一个算法,算出 n 阶乘有多少个尾随零,
比如5的阶乘是120,则5的阶乘有1个尾随零,
40的阶乘是815915283247897734345611269596115894272000000000
则40的阶乘有9个尾随零
解题思路:
思路一:直接求出来所给数的阶乘,通过循环得到这个阶乘结果的尾随零的个数
在C语言中,无法保证所有数的解成都可以用一个变量接收,
所以给的数稍微大一点,比如到30,就无法求解
思路二,求出来所给数的阶乘,只要知道这个数的末尾是0,就将计数加一
且将这个数除以十以后的结果赋给原变量
所以给的数到40,就无法求解
思路三,首先根据几个事实得到此思路
fact 1: 尾随零的个数只会随所给数的增加而单调递增
fact 2: 只有在所给的数是5的倍数的时候,尾随零的个数才会发生变化
fact 3: 如果将所给数分解成多个质数相乘,质数中5的个数就是fact 2中变化的个数
下面的代码能够保证当n为有限的数时,只要给出一个取值范围比n大的变量i即可
但是这个代码的缺点是:1. n很大时无法求解(n已经是取值范围最大的变量)
2. 时间复杂度过高
int find_five(unsigned long long int i)
{
int incre = 0;
while (i % 5 == 0)
{
incre++;
i /= 5;
}
return incre;
}
int trailingZeroes(int n)
{
int count = 0;
unsigned long long int i = 5;
while (i <= n)
{
int incre = find_five(i);
count += incre;
i += 5;
}
return count;
}
思路四,直接利用fact3,查看n分解成质数的乘积后有几个5,每次除以5以后决定增量
7 题目描述:写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。
如果小数点后数值大于等于 0.5 ,向上取整;小于 0.5 ,则向下取整
7.1 float型变量中存储的二进制数赋值给同样是4字节(X86)的int型变量,应该使用指针变量
float num = 4.1f;
int* ptmp_num = (int*)pnum;
int tmp_num = *ptmp_num;
7.2 对于一个X86中的浮点数,其在内存中第32位是符号位,第24到31位是小数点平移位
第1到23位是小数点后显示位
7.3 想要对一个正的浮点数进行四舍五入,需要对整数部分和小数部分分别进行分析
case1: 当小数点平移位小于01111110,则这个浮点数是大于等于0,小于0.5的数
case2: 当小数点平移位是:01111110,则这个浮点数是大于等于0.5,小于1的数
case3: 当小数点平移位是:01111111,则这个浮点数是大于等于1,小于2的数
整数部分就是1,对于小数部分,分为以下两种情况
case3.1 小数点后显示位小于10000000000000000000000,浮点数小于1.5
case3.2 小数点后显示位大于等于10000000000000000000000,浮点数大于等于1.5
case4: 当小数点平移位大于01111111,则这个浮点数是大于等于2的数
可以考虑右边这个24位数:1xxxxxxxxxxxxxxxxxxxxxxx,小数点后显示位
利用循环将这个24位数不断右移编程一个奇数(末尾为0),
记这个二进制数为X,假设X的最高非零位是二进制数中的第digit位
X的前E' 位是这个浮点数的整数部分对应的二进制数,记为bi_integer,
X的后digit - E' 位是这个浮点数的的小数部分对应的二进制数,记为bi_fraction
记 bi_integer对应的十进制数是integer,X的第digit - E'位是key,
注:(从低到高数,最低位是第一位)
case4.1 key是0,浮点数大于等于integer,小于integer + 0.5
case4.2 key是1,浮点数是大于等于integer + 0.5,小于integer + 1