曼彻斯特编码

上传人:daj****de2 文档编号:170873450 上传时间:2022-11-23 格式:DOCX 页数:9 大小:22.08KB
收藏 版权申诉 举报 下载
曼彻斯特编码_第1页
第1页 / 共9页
曼彻斯特编码_第2页
第2页 / 共9页
曼彻斯特编码_第3页
第3页 / 共9页
资源描述:

《曼彻斯特编码》由会员分享,可在线阅读,更多相关《曼彻斯特编码(9页珍藏版)》请在装配图网上搜索。

1、曼彻斯特编码c程序悬赏分:5 -解决时间:2008-7-18 10:12哪位大侠可以帮忙提供曼彻斯特编码C的源代码啊?小弟感激先!sainttim 级提问者:最佳答案/ I/标题:曼彻斯特和差分曼彻斯特编码的实现|/分析:曼彻斯特编码是将每个码元的中央实现跳变,具体的码字表示为:I/1-10,0-01.I/差分曼彻斯特编码每个码元依前一码元而定,遇1跳变,遇0保持I/若前为:01,则 1-10 0-01I/若前为:10,则 1-01 0-10I/实现:定义两个数组,一个用来放置输入要编码的序列,另一个用来放编码后的序列I/I/I/*/头文件#include #include #include/

2、*/ /全局变量#def ine M 10int j;/指向编码后序列的数组下标int i;/输入码字的数组下标int length; /求值输入数组的长度/*/参数表int Direct_code(char strO)/ 直接编码char dirct_code2*M;memset(dirct_code,0,2*M);dirct_code0=0;dirct_code1=1;j=2;exter n len gth;for(i=0;i01 1 -10if(strOi=O)dirct_codej+=0;dirct_codej+=0;else if(str0i=1)dirct_codej+=1;dir

3、ct_codej+=1;else printf (input error,exit); return 1;/ 输入出错/循环处理后数据prin tf(-);pri ntf (after process: %c%c ,dirct_codej-2,dirct_codej-1);/结果字符串加上终结符dirct_codej=0;/输出结果printf();pri ntf (Direct_code cod ing is:%s ,dirct_code);return 0;int Man chester(char str0)曼彻斯特编码char Ma nchester2*M;memset(Ma nches

4、ter,0,2*M);Man chester0=0;Ma nchester1=1;j=2;exter n len gth;for(i=0;i01 1 -10if(strOi=O).Ma nchesterj+=0;Ma nchesterj+=1;else if(str0i=1) .Ma nchesterj+=1;Ma nchesterj+=0;else .printf (input error,exit); return 1;/ 输入出错/循环处理后数据prin tf(-);pri ntf(after process: %c%c ,Ma nchesterj-2,Ma nchesterj-1);/

5、结果字符串加上终结符Man chesterj=0;/输出结果printf();pr intf (Ma nchester cod ing is :%s ,Ma nchester);return 0;int Dif_Ma nchester(char str0)差分曼彻斯特编码char Dif_Ma nch2*M;memset(Dif _Ma nch,0,2*M);初始化数组Dif_Ma nch0=0;Dif_Ma nch1=1;j=2;exter n len gth;for(i=0;i01 1 -10if(str0i=0).Dif_Ma nchj+=Dif_Ma nchj-3;Dif_Ma nch

6、j+=Dif_Ma nchj-2;else if(str0i=1).Dif_Ma nchj+=Dif_Ma nchj-2;Dif_Ma nchj+=Dif_Ma nchj-3;else printf (input error,exit); return 1;/ 输入出错/循环处理后数据prin tf(-);printf(after process: %c%c ,Dif _Manchj-2,Dif _Manchj-1);/结果字符串加上终结符Dif_Man chj=0;/输出结果printf();printf(Dif_Manchester coding is :%s ,Dif _Manch);r

7、eturn 0;/*/入口点int main(int argc, char* argv )char str0M;/获取输入数据pri ntf (please in put the nu mber str ing u wan t(it must less tha n 10):);sca nf(%s,str0);/验证输入数据是否正确,可以用assert之类pr intf (what u in put is: %s ,str0);len gth=strle n( str0);assert(le ngth M );设置断言,数组越界检查/输出数据区置0/memset(str1,0,2*M);Dire

8、ct_code(str0);Ma nchester(strO);Dif_Ma nchester(strO);return 0;/*/*/ 这是刚刚开始自己写的程序 /#defi ne M 10#i ncludevoid mai n()int i=0;int strOM;int str12*M;pr intf (please in put the nu mber str ing u want:);sca nf(%s,strO);doif(strOi=O) str1i=O;str1i+1=1;else if (str0i=1)str1i=1;str1i+1=O;i+;while(strOi!=总结

9、几点:A:字符串和数字是不同的,例如1 , 0表示的是字符,而1, 0表示的数字(但是有个问题还是不太明白,数 组中存放数字有什么错误 吗?为何要用字符呢?哈哈,别骂我.)。一个字符用表示时,它传递给计算机的是它的ASCII码值B:编写程序时候每一段代码做了什么都应该清晰明了,设定一定的提示输出,显示程序所做的事情,结构要清晰,每一次数据处理得到 了什么结果每一步数据处理我都清楚的想知道他做了什么C:重要的一点是写程序前,自己脑子里面应该有个很清晰的思路,画流程图是重点,我常常在还没有想好是怎么回事的情况下就匆忙动 笔了,结果进展反而非常之慢“问题是你没有把问题先搞清楚,没有把输入,处理输入,

10、输出这些过程在脑袋里搞清楚”D:个人问题:付出时间的同时不能付出同等的精力,并不是不想,虽然已经很专注了,但是我知道自己脑袋里面还在想其他的事情,没 有事先把头脑清空了,再来写程序。另外自己做事情不够专心,三心二意:写程序的时候可能同时在看网页,或者是其他的,遇到一个问题不懂,去网上查很久,走很大一 个弯路回来,虽然懂了不明白的那一点,但是目前进行的却被打断了。E:目前为止比较完整的程序写了三个了,每个都不容易,不是程序难,是我写的不容易大家认为我可能不是编程的料F:突然想起ziji 一个致命的缺点:拖拉。G:补充:这个只是模拟,其实曼彻斯特编码应该是对应与位的运算 /新知识点一:ASSERT

11、()ASSERT()是一个调试程序时经常使用的宏。 assert是验证assert后面的括号里的表达式是否为真的函数,若为假,程序运行的时候就会报错.当构造一个应用程序的时候,应该始终记住:应该让程序在出现 bug或非预期的错误的时候,应该让程序尽可能早地突然死亡。这样做 可以帮助你在开发测试循环中尽早地发现错误。不导致突然死亡的错误将很难被发现;它们通常会被忽略,直到程序在客户系统中 运行以后才被注意到。检查非预期状态的最简单的方式是通过标准C库的assert宏。这个宏的参数是一个布尔表达式(Boolean expression )。当表达式 的值为假的时候,assert会输出源文件名、出错

12、行数和表达式的字面内容,然后导致程序退出。Assert宏可用于大量程序内部需要一致性检查的场合。例如,可以用assert检查程序参数的合法性、检查函数(或C+中的类方法)的前提条件和最终状态(postcondition )、 检查非预期的函数返回值,等等。每次使用assert宏,不仅可以作为一项运行期的检查,还可以被当作是嵌入代码中的文档,用于指明程序的行为。如果你的程序中 包含了 assert( condition ),它就是在告诉阅读代码的人:condition在这里应该始终成立;否则很可能是程序中的bug。对于效率至上的代码,assert这样的运行时检查可能引入严重的效率损失。在这种情况

13、下,你可以定义 NDEBUG宏并重新编译源码 (可以通过在编译器参数中添加-DNDEBUG参数做到)。在这种情况下,assert宏的内容将被预处理器清除掉。应该只在当效率必须 优先考虑的情况下,对包含效率至上的代码的文件设置NDEBUG宏进行编译。因为assert可能被预处理过程清除,当使用这个宏的时候必须确信条件表达式不存在副作用。特别的,不应该在assert的条件表达式中使用这些语句:函数调用、对变量赋值、使用修改变量的操作符(如+等)。例如,假设你在一个循环中重复调用函数do_something。这个函数在成功的情况下返回0,失败则返回非0值。但是你完全不期望 它在程序中出现失败的情况。

14、你可能会想这样写:for (i = 0; i 100; +i)assert (do_something () = 0);不过,你可能发现这个运行时检查引入了不可承受的性能损失,并因此决定稍候指定 NDEBUG以禁用运行时检测。这样做的结果是 整个对assert的调用会被完全删除,也就是说,assert宏的条件表达式将永远不会被执行,do_something 一次也不会被调用。因此,这 样写才是正确的:for (i = 0; i 0);这会帮助你发现错误的调用;同时它很清楚地告诉了读代码的人:这个函数对参数的值有特殊的要求。不要就此退缩;在你的程序中适当地时候使用assert宏吧。使用Asser

15、tion来提高你代码的可靠性以下是一些使用assertion的四种情况及其对应的例子,这些方式可以让java程序的可靠性更高。一、检查控制流;在if-then-else和swith-case语句中,我们可以在不应该发生的控制支流上加上 assert f alse语句。如果这种情况发生 了,assert能够检查出来。例如:x取值只能使1,2,3,我们的程序可以如下表示switch (x) case 1:;case 2:;case 3:.default: assert false:x value is in valid: +x;二、在私有函数计算前,检查输入参数是否有效;对于一私有些函数,要求输入

16、满足一些特定的条件,那么我们可以在函数开始处使用 assert进行参数检查。对于公共函数,我们通常不使用assertion检查,因为一般来说,公共函数必须对无效的参数进行检查和处理。而 私有函数往往是直接使用的。例如:某函数可能要求输入的参数必须不为null。那么我们可以在函数的一开始加上assert parameter1!=null : paramerter is null in test method;三、在函数计算后,检查函数结果是否有效;对于一些计算函数,函数运行完成后,某些值需要保证一定的性质,因此我们可以通过assert 检查该值。例如,我们有一个计算绝对值的函数,那么我们就可以在

17、函数的结果处,加上一个语句:assert value=0:Value should be bigger than 0:+v alue;通过这种方式,我们可以对函数计算完的结果进行检查。四、检查程序不变量;有些程序中,存在一些不变量,在程序的运行生命周期,这些不变量的值都是不变的。这些不变量可能是一个简 单表达式,也可能是一个复杂的表达式。对于一些关键的不变量,我们可以通过 assert进行检查。例如,在一个财会系统中,公司的支出和收入必须保持一定的平衡关系,因此我们可以编写一个表达式检查这种平衡关系,如下表示。private boolea n isBala nce() 在这个系统中,在一些可能

18、影响这种平衡关系的方法的前后,我们都可以加上assert验证:assert isBalance():balanee is destoried;/新知识点(二)memset。v oid *memset(v oid *s,int c,size_t n)总的作用:将已开辟内存空间s的首n个字节的值设为值c。2。例子#i n clude#i n cludemai n()char *s=Golde n Global View;clrscr();memset(s,G,6);printf (%s,s);getchar();return 0;3。memset()函数常用于内存空间初始化。如:char str1

19、OO;memset(str,0,100);4。 memset()的深刻内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为或0;例:char a100;memset(a, 0, sizeof (a);memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;例:char a100,b50; memepy (b, a, sizeof(b);注意如用sizeof (a),会造成b的内存地址溢出。strcpy就只能拷贝字符串了,它遇到0就结束拷贝;例:char a100,b50;strcpy (a,b);如用strcpy (b,a),要注意a中的

20、字符串长度(第 一个0之前)是否超过50位,如超过,则会造成b的内存地址溢出。5.补充:某人的一点心得 memset可以方便的清空一个结构类型的变量或数组。如:struct sample_structchar csName16;int iSeq;int iTy pe;;对于变量struct sample_strcut stTest;一般情况下,清空stTest的方法:stTest.csNameO=O;stTest.iSeq=O;stTest.iType=O;用memset就非常方便:memset(&stTest,0,sizeof (struct sample_struct);如果是数组:str

21、uct sample_struct TEST10;则memset(TEST,0,sizeof (struct sample_struct)*10);6。strcpy原型:extern char *strcpy (char *dest,char *src);用法:#i n clude功能:把src所指由NULL结束的字符串复制到dest所指的数组中。说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 返回指向dest的指针。memcpy原型:extern v oid *memcpy (void *dest, void *src, unsigned int count);用法:#i n clude功能:由src所指内存区域复制count个字节到dest所指内存区域。说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。memset原型:extern v oid *memset(v oid *buffer, int c, int count);用法:#i n clude功能:把buff er所指内存区域的前count个字节设置成字符c。说明:返回指向buff er的指针。参考资料:开发者在线http:/W賦离线留言回答者:CNET开发专家团-十一级

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!