1.模拟函数
#include <stdio.h>
int f(int x)
{
return 3*x-8;
}
int g(int x,int y)
{
if(x>0)
return f(x)+y;
else
return f(x-y+5);
}
int main()
{
int x=9;
int y=2*x-7;
int k1=f(4);
int k2=f(k1-2);
int k3=f(k1+f(k2));
int w1=g(3,5);
int w2=g(f(k1)-5,g(2,f(k2+w1)));
printf("%d \n",w2);
return 0;
}
2.斐波那契数列(递归)
递归分为终止递归部分和持续递归部分,以斐波那契数列为例子
#include <stdio.h>
int f(int x)
{
if(x==0||x==1)
return x;
else
return f(x-1)+f(x-2);
}
int main()
{
for(int i=1;i<=12;i++)
{
printf("%d \n",f(i));
}
return 0;
}
需知道不管怎么调用,函数的每次调用都是独立的个体,是互不干扰的。
3.c语言的六种数据类型
1B=1字节=8比特=8bit
short-16bit int-32bit long-64bit float-32bit double-64bit char-8bit
double有效数字16位,float有效数字6~7位,float和int相比精度并不高;
float的有效数字为什么是6~7位?
(−1)S∗1.M∗2E−127
阶码使用的是一种叫做移码的东西,和补码类似,就是数值整体偏移固定长度(float中偏移量offset=127)。所以阶码范围1254实际表示的是-126127。阶码全为1表示无穷大,全为0表示非规格化数。
尾数部分采用1.M的格式,小数点前固定有一个1,这样表示的范围又大了一点。
至于精度问题,当1.11111111111111111111111作为尾数时,精度最高。此时共计24个1,即2^23=8388608共7位。所以C语言的float精度为7的结论得出来了。至于为什么6~7,是因为十进制和二进制相互转化的时候,不是所有数都能对得上,会有些情况存在误差。比如计算机无法准确表示0.51,只能表示为0.5099999…。所以准确能保证的是6位。
char本质上是数字类型;
1>既然是数字,可以用%d输出,可以看到该符号的编码;
2>也可以比较大小;
3>但是加减不建议,因为char是8位,可能会超范围;
硬盘上删除一些数据并非真的删掉了,只是被标记为无效;包含硬盘上的可用空间也是被标记为无效的空间。
不管是视频数据还是音频数据在计算机里都是二进制;若被标记为int类型则按照int类型解析,其他类型也一样。