⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jm3.c

📁 数据通信中的游程编码、解码方法。(编程背景为温室温度测量
💻 C
字号:
#include <stdio.h>
#include <math.h>
main()
{
    int m=1,cho=0,count=2,n=50,cnt=2;
    int b,z,w1,w2,cho1,i;
    double a,a1,s;
    double x[50]={29.3,29.3,29.3,29.3,29.4,29.3,29.5,29.5,29.3,29.5,29.5,29.6,29.8,29.6,29.3,29.5,29.6,29.5,29.3,29.6,29.5,29.7,29.7,29.6,29.7,29.6,29.5,29.5,29.5,29.5,29.6,29.5,29.6,29.6,29.6,29.6,29.6,29.7,29.5,29.6,29.5,29.6,29.7,29.8,29.6,29.7,29.7,29.6,29.7,29.7};
    //double x[70]={29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3,29.3};
	char y[100];
	double J[100];
    double *p1;
    char *p2;
	double *p3;

    p1=x;
    p2=y;
    a=x[0];
	z=floor(a);
    b=10*(a-z);
    *p2=z;  
    p2++;
    *p2=b;
    
    while(m<=n)
    {
        m++;
        p1++;
        a1=*p1;
        if(a==a1)
        {
            cho++;
            if(m==n)  
            {
                p2++;
                *p2=cho|192;
                count++;
            }
            else    
            {
                if(cho<63)
                    continue;
                else
                {   
                    p2++;
                    *p2=cho|192;
                    count++;
                    p2++;
                    *p2=z;
                    p2++;
                    *p2=b;
                    cho=0;
                    count=count+2;
                }
            }
        }
        else
        {   
            if(cho!=0)
            {
                p2++;
                *p2=cho|192;
                count++;
                cho=0;
            }
            a=a1;
            z=floor(a);
            b=10*(a-z);
            p2++;
            *p2=z;
            p2++;
            *p2=b;
            count=count+2;
        }
    }
printf("%d",count);

p2=y;//解压,基本可正确解压,最大误差为正负0.1
p3=J;
w1=*p2;
p2++;
w2=*p2;
s=w1+0.1*w2;
J[0]=s;
while(cnt<count)
{
     p2++;
	 if((*p2&192)==192)//判断*p2的最高位和次高位是否为1.开始我用了(*p2>192)来判断,我是按y中11000000是192来判断了
		                 //但是*p2却是负数,最高位是符号位。可能是因为y数组是char型,只占一个字节,所以最高位是符号位。取一些数据验证是这样的。
						 //可见进行实际数据比较大小时一定要小心,注意最高位的符号。一般用位运算来判断比较保险。
	 {
	    cho1=*p2&63;
		for(i=1;i<=cho1;i++)
		{
	        p3++;
			*p3=s;
		}
		cnt++;
	 }
	 else
	 {
	     w1=*p2;
		 p2++;
		 w2=*p2;
		 s=w1+0.1*w2;
		 p3++;
		 *p3=s;
		 cnt=cnt+2;
	 }
}
for(i=0;i<n;i++)
printf("J[%d]=%f",i+1,J[i]);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -