您的位置:首页 > 编程语言 > C语言/C++

C语言 A律压缩

2016-05-05 21:45 519 查看


昨天的compress之所以传出一个空值,是因为compress运行后,数组b被释放,所以需要给他定义一个static,它就使得b[8]存放在内存中的静态存储区中,所占用的存储单元一直不释放直到整个程序运行结束 。

#include <stdio.h>
#include <stdlib.h>

int * compress(int vaule)
{
int i, j;
int temp, a_temp;
int deviation;
static int b[8] = {0};//必须是static,否则运行结束后b[]会被释放
int a[16];
int c[8] = {16,32,64,128,256,512,1024,2048};
int d[16] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};

printf("please input vaule:");
scanf("%d",&vaule);

if(vaule < 0){
//vaule = abs(vaule);
vaule = -vaule;
}
else
b[0] = 1;

for(i = 0;i < 7;i++){
if(vaule < c[i]){
printf("i = %d\n",i);

break;
}
}
//段落码
switch (i) {
case 0:
b[1] = 0;
b[2] = 0;
b[3] = 0;
break;
case 1:
b[1] = 0;
b[2] = 0;
b[3] = 1;
break;
case 2:
b[1] = 0;
b[2] = 1;
b[3] = 0;
break;
case 3:
b[1] = 0;
b[2] = 1;
b[3] = 1;
break;
case 4:
b[1] = 1;
b[2] = 0;
b[3] = 0;
break;
case 5:
b[1] = 1;
b[2] = 0;
b[3] = 1;
break;
case 6:
b[1] = 1;
b[2] = 1;
b[3] = 0;
break;
case 7:
b[1] = 1;
b[2] = 1;
b[3] = 1;
break;
default:
break;
}

printf("c[%d] = %d",i,c[i]);
printf("\n");

if(i == 0)
temp = c[i] - 0;
else
temp = c[i] - c[i - 1];

printf("temp = %d\n",temp);

printf("a[] = ");
a_temp = temp / 16;
a[15] = c[i];

for(i = 14, j = 0;i > 0, j < 16; i--, j++) {

a[i] = a[15] - a_temp * d[j];
}
for(i = 0;i<16;i++){
printf("[%d]",a[i]);
}
printf("\n");

for(i = 0;i < 16;i++){
if(vaule < a[i]){
printf("i = %d\n",i);

break;
}
}
//段内码
switch (i) {
case 0:
b[4] = 0;
b[5] =
4000
0;
b[6] = 0;
b[7] = 0;
break;
case 1:
b[4] = 0;
b[5] = 0;
b[6] = 0;
b[7] = 1;
break;
case 2:
b[4] = 0;
b[5] = 0;
b[6] = 1;
b[7] = 0;
break;
case 3:
b[4] = 0;
b[5] = 0;
b[6] = 1;
b[7] = 1;
break;
case 4:
b[4] = 0;
b[5] = 1;
b[6] = 0;
b[7] = 0;
break;
case 5:
b[4] = 0;
b[5] = 1;
b[6] = 0;
b[7] = 1;
break;
case 6:
b[4] = 0;
b[5] = 1;
b[6] = 1;
b[7] = 0;
break;
case 7:
b[4] = 0;
b[5] = 1;
b[6] = 1;
b[7] = 1;
break;
case 8:
b[4] = 1;
b[5] = 0;
b[6] = 0;
b[7] = 0;
break;
case 9:
b[4] = 1;
b[5] = 0;
b[6] = 0;
b[7] = 1;
break;
case 10:
b[4] = 1;
b[5] = 0;
b[6] = 1;
b[7] = 0;
break;
case 11:
b[4] = 1;
b[5] = 0;
b[6] = 1;
b[7] = 1;
break;
case 12:
b[4] = 1;
b[5] = 1;
b[6] = 0;
b[7] = 0;
break;
case 13:
b[4] = 1;
b[5] = 1;
b[6] = 0;
b[7] = 1;
break;
case 14:
b[4] = 1;
b[5] = 1;
b[6] = 1;
b[7] = 0;
break;
case 15:
b[4] = 1;
b[5] = 1;
b[6] = 1;
b[7] = 1;
default:
break;
}

//计算偏差值
deviation = (a[i] + a[i - 1]) / 2 - vaule;
if(deviation < 0)
deviation = -deviation;

for(i = 0;i < 8;i++)
printf("[%d]",b[i]);

printf("\n");

printf("deviation = %d\n",deviation);

//printf("b = %d\n",b);
//printf("*b = %d\n",*b);

return b;
}

void decompress(int b[])
{
int temp;
int k;
char seg;
int c[8] = {1,1,2,4,8,16,32,64};
int d[8] = {0,16,32,64,128,256,512,1024};

if(b[0] == 0){
seg = '+';
}
else
seg = '-';

k = b[1] * 4 + b[2] * 2 + b[3];

temp = d[k] + c[k] * (b[4] * 8 + b[5] * 4 + b[6] * 2 + b[7]);

printf("vaule = %c%d\n",seg,temp);
}

int main()
{
int vaule;
int *b;
int a[8];
int i;

b = compress(vaule);
//printf("%d\n",b);
//printf("%d\n",*b);

for(i = 0;i < 8;i++){
a[i] = *(b + i);
printf("[%d]",a[i]);
}

decompress(a);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 算法 A律压缩