C语言 A律压缩
来源:互联网 发布:出入无时 莫知其乡解释 编辑:程序博客网 时间:2024/06/05 15:24
昨天的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] = 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;}
1 0
- C语言 A律压缩
- C语言 int &a
- lzw压缩算法的c语言实现
- LZW算法压缩c语言实现
- LZW算法压缩c语言实现
- lzw压缩算法的c语言实现
- c语言字符串处理-----压缩字符串
- 字符串压缩——C语言
- 嵌入式C 语言ROM 压缩方法
- C语言 并查集 压缩路径
- 文件压缩(平台Linux & 语言C++)
- C语言实现压缩二例
- C语言实现压缩二例
- C语言行程编码压缩算法
- 字谜游戏(a)C语言
- C语言函数 - A开头
- 此C语言函数---A
- C语言的A*算法
- 【干货】使用Java发送各种格式的邮件
- 为什么Android总是事无巨细地告诉你应用索取的每一项权限?
- 第10章-基于树的方法(1)-生成树
- UDP套接字的使用介绍
- poj 2456 Aggressive cows
- C语言 A律压缩
- Android 高仿微信图片选择器
- iOS视图控制器编程指南 --- 呈现一个视图控制器
- Top K Frequent Elements
- 在运行hive的时候出现的问题
- java 中的this和基本数据类型的值传递
- android 关于Button在StateListDrawable 中使用AnimationDrawable的问题
- 315. Count of Smaller Numbers After Self
- 数组的选择排序和冒泡排序