#include <iostream>
#include <cmath>
using namespace std;
int main()
{
/*初始化*/
float px[20];
int n;
cout<<"输入n的值:"<<endl;
cin>>n;
for(int i=0;i<n;i++)
{
cout<<"输入p["<<i<<"]的概率"<<endl;
cin>>px[i];
}
cout<<endl;
cout<<endl;
/*排序px[i]*/
float temp;
cout<<"概率从大到小排序后结果:"<<endl;
for(i=0;i<n;i++)
{ for(int j=i+1;j<n+1;j++)
if(px[i]<px[j])
{
temp=px[i];
px[i]=px[j];
px[j]=temp;
}
cout<<px[i]<<", ";
}
cout<<endl;
cout<<endl;
/*求pa[i]的值*/
float pa0=0;
cout<<"第i个码字的累加概率:"<<endl;
cout<<"pa[0]="<<pa0<<", ";
float pa[20];
for(i=1;i<n;i++)
{
pa[0]=0;
pa[i]=pa[i-1]+px[i-1];
cout<<"pa["<<i<<"]的值="<<pa[i]<<", ";
}
cout<<endl;
cout<<endl;
/*求k[i]自信息量 和 码字*/
int t[20];
float k[20];
for(i=0;i<n;i++)
{ t[i]=-log(px[i])/log(2);
k[i]=-log(px[i])/log(2);
if(t[i]<k[i])
k[i]=t[i]+1;
cout<<"k["<<i<<"]自信息量(码字长度)为"<<k[i]<<",";
//实现二进制编码
int code[20];
for(i=0;i<n;i++)
for(int j=0;j<k.length;j++){
if(pa[i]*2<1)
{
code[j]=0;
pa[i+1]=pa[i]*2;
}
else
{
code[j]=1;
pa[i+1]=pa[i]*2-1;
}
cout<<"pa["<<i<<"]的码字为:"<<endl;
}
return 0;
}
}
请帮忙改改,在看下实现二进制编码时有没有其他的错误,谢谢,在线等
c++ 数组长度的问题,不能用.length返回数组长度吗
C++没有.length这个封装方法来获取长度,要想获取数组的长度可以有很多方法,最简单的就是调用API来获取strlen函数!
c++ 获取数组长度
这个很简单,c++提供专门的方法length可以知道数组的长度,并且也可以自己通过遍历算出数组的长度!谢谢,望采纳!
C++ length()、size()、sizeof()三者的区别
c++中,length()只是用来获取字符串的长度。c++中,在获取字符串长度时,size()函数与length()函数作用相同。 除此之外,size()函数还可以获取vector类型的长度。sizeof()运算符用来求对象所占内存空间的大小。需要注意的是,如果不使用Vector作为数组进行参数传递,那么在传递数组引用是需要再传递一个...
c++ 数组用指针方式传递给函数以后如何获得数组的长度?
要在一个函数中得到一个数组的长度,你应该这个数组作为一个引用传出去,那样,就能用sizeof(Array)\/sizeof(Array[0])的方法获得长度了。
...提示error C2228: left of '.length' must have class\/struct\/union...
你是现要求数组a[]的长度(包含的元素个数)吧,C++里面没有直接记录数组长的length值,你这是java里可以用的.在C++你只需这样既可!代码如下 include<iostream>using namespace std;void main (){ int a[]={1,2,3}; int i=0; for(i;i<sizeof(a)\/sizeof(int);i++) { cout<<"a[...
c++ 6如何获取数组长度
如果是字符数组,可以包含头文件string.h然后使用strlen(字符数组)获得数组长度.其他类型的数组是根据定义获取的,无法通过计算得到.
c++中各类型数组长度
*1024 \/4=524288个。当然这是一种假设。回答补充:一个int数据一共有4*8=32位,其中第一位是符号位,不计入,他可以表达最大的数值是2^31-1=2147483647。如果你要用数组的方式来拓展一个数值的大小,那么你就需要自己定义计数算法了,那样比较的有难度。附:double型的一共是8*8=64位。
C++传数组后怎么在函数内计算数组长度?
C\/C++会将数组(形参)作为指针来传递,绝对没有关于数组长度的任何信息,所以,当形参是数组时,通常还有一个参数来传递数组的长度,比如sort(int a[], int len);,a[]是int型数组,len则为数组a的长度,但形参是字符串时,则不需要传递数组长度,这是因为,字符串是以'\\0'结束的,函数通过检测'...
C\/C++中如何获取数组的长度?
取得数组a的长度,并将其存储在变量len中printf("%d",len);system("pause");return 0;}【C++】#include <iostream>using namespace std;template <class T>int getArrayLen(T& array){\/\/使用模板定义一 个函数getArrayLen,该函数将返回数组array的长度return (sizeof(array) \/ sizeof(array[0]...
C++字符串数组中的字符串长度与int数组内的数字比较之间的问题
string类的length()函数的返回类型为size_type。而size_type被定义成无符号类型,通常就是unsigned int,具体的就得看操作系统。而int默认是有符号类型。所以下面这句:if(s[0][0].length()>Max[0])实际上就是 大于号左边为无符号数,右边为有符号数。C++里又有一条规则:当有符号数与无符号数...