下载后可任意编辑实验二互信息的计算 实验二互信息的计算信科 1.实验目的进一步熟悉互信息的计算熟练掌握编程语言字符处理程序的设计和调试技术 2.实验要求已知:信源符号为英文字母(不区分大小写)和空格。 输入:一篇英文的信源文档。 输出:列出每两个字母之间的互信息并计算平均互信息。 基本思想读入英文字符,分两次读入第一次读入计算字符信息熵,第二次读入计算信道疑义度。 计算平均互信息时,把读入的每个英文字符转化为对应的 ASCII 码,存入数组中。 定义一个矩阵,用于存放前后两个字母出现的次数。对数组做循环,p[i]指向前一个字符,p[i+1]指向后个字符,每向后移动一位,把矩阵的元素加1,直至把数组循环完。复制一个矩阵,分别求出联合概率和条件概率,把两个矩阵对应的元素相乘,把矩阵元素累加,即得信道疑义度。用熵减去信道疑义度,即得平均互信息。 英文字符Eachofushassuchabank.It'snameis“TIME“.Everymorning,TIMEcreditsyouwith86400seconds.Everynightitwritesovernobalances.Itallowsnooverdraft.Eachdayitopensanewaccountforyou.Eachnightitburnstheremainsoftheday.Ifyoufailtousetheday'sdeposits,tgelossisyours.Thereisnogoingback.Thereisnodrawingagainstthe“tomorrow“.Youmustliveinthepresentontoday'sdeposits.Investitsoastogetfromittheutmostinhealth,happinessandsuccess!Theclockisrunning.Makethemostoftoday.#include“stdio.h“#include“stdlib.h“#includevoidmain(){FILE*fp;fp=fopen(“file.txt“,“r“);intd,i=0,j=0;intp[1000];// 用 于存放字母1下载后可任意编辑intb,c,add=0;floatnum[26]={0},space=0;floatt;doubleshang;floatf[26]={0};floatM[27][27]={0},N[27][27]={0};if(fp==NULL){printf(“不能打开文件\n“);exit(0);};while((d=fgetc(fp))!=EOF)//把字符的 ASC 码存入数组中 {p[i++]=d;}for(i=0;p[i]>0;i++)// 把 小 写 字 母 转 化 成 大 写 字 母{if(p[i]>=97)p[i]=p[i]-32;}printf(“字符的ASC码为:\n“);for(inta=0;p[a]>0;a++){printf(“%d“,p[a]);}printf(“\n“);//把p 填 入 矩 阵 M 中 for(i=0;p[i]>0;i++)// 填 满 矩 阵 M 第 一 行 {if(p[i]==32){intg=p[i+1];if(g==32){M[0][0]=M[0][0]+1;}else{g=g-64;M[0][g]++;}}}for(i=0;p[i]>0;i++)// 填 满 矩 阵 的 其 他 行{if(p[i]!=32){inth,k;h=p[i]-6...