C语言程序设计实践

合集下载

C语言程序设计实验报告 实验一 简单程序设计

C语言程序设计实验报告 实验一 简单程序设计

C语言程序设计实验报告实验一简单程序设计班级 2017231 学号 201723128 姓名郭鹏博一、实验目的1、熟悉VC6.0编程环境。

2、掌握使用VC6.0输入源程序、编译连接和运行程序的基本过程。

3、练习C调试程序的方法。

4、熟练使用赋值运算、算术运算等表达式。

5、熟练使用标准输入、输出函数及各种数据类型的格式说明符。

二、实验内容及步骤1、分析程序,根据要求写出结论:课本P83页第4题、第5题;第4题(1)c1=a,c2=bc1=97,c2=98原因:字符变量实质上是一个字节的整形变量,由于它常用来存储字符,所以称为字符变量。

可以把0到127之间的整数赋给一个字符变量。

在输出字符变量的值时,可以选择以十进制整数形式或字符形式输出。

(2)c1=?c2=?c1=-59,c2=-58原因:Visual C++系是把char默认为signed char类型的,而signed char类型的变量允许存储的值为—128~127,但字符的代码不可能为负值,所以在存储字符时实际上只用到0~127这一部分,其第1位都是0。

给字符型变量赋值197和198时,所赋之值超出了字符变量的取值范围,导致无论是以以十进制整数形式输出还是以字符形式输出,输出结果均错误。

(3)c1=a,c2=bc1=97,c2=98原因同(1)第5题2、程序改错下面程序的功能是计算球体的表面积和球体的体积,程序中有多处错误,并且指定必须按下面的形式输入、输出数据。

请对程序做相应的修改。

#include <stdio.h>main{double r,s,v;int pi=3.14;scanf("%d",r);S=4*pi*r*r; /*计算球体的表面积*/V=4.0*pi*r*r*r/3.0; /*计算球体的体积*/printf("%d",r);printf("s=%f\n",s,"v=%d\n",v);}当程序运行时,要求屏幕的显示和指定的输入形式如下:input r:2.0<回车> (此处的2.0是由用户输入的数据)r=2.000000 (此处要求的是输出形式)s=50.24000000,v=33.49333333具体要求:(1)在VC6.0环境中输入上述源程序。

c语言实训心得体会(精选8篇)

c语言实训心得体会(精选8篇)

c语言实训心得体会(精选8篇)c语言实训篇1在初学C语言的一个学期后,我们进行了C语言实训阶段,尝试编写一个比较复杂的程序系统。

在为期一周的时间中,我们同组的同学共同的感受是:C语言实训和平时上课所接触的程序是有很大不同的,所经受的考验和克服的困难是平时所无法比拟的。

好在同组的搭档们精诚合作,分工明确,有问题共同解决,攻克了C语言实训的复杂程序。

在这里,我作为其中的参与者,感触良多。

在这次实训中,我对对C语言有了一个更深的了解认识,也对这个学期学的知识得到巩固,还尝试运行编程,每次运行程序成功,让我对下面的项目就充满信心。

通过自己与同学合作编写程序,最终把最初的理论知识转化基本技能。

这次的实训,使我对C语言的学习产生浓厚的兴趣。

还是这次实训,最令人激动的就是合作做项目,虽然那只是一个很小很小的项目。

每天大家来得很早,大家在一起学习,取长补短,我们很好的在实训中长知识,提高我们的学习热情。

实训中深切体会到了老师认真负责的伟大的精神和热情为同学指导的促学方式,虽然对有些时候老师没给我们指出解决问题的方法有些小抱怨,但是到了结束时才知道,这种教学让我们自己学会了自学,学会了去看懂别人的代码。

更多是老师给的感动,每天在我们来之前就到了教室,在讲课中海给我们分享他在公司上班的一些心得和体会,还有那些我们应该注意的事项,这些是平时上课时无法学到的,是更深层次的巨大收获。

通过这次实训,也使我们发现了许多问题。

在实训中,我们认识到自己还有很多的知识没学好,基础知识没理清,而且许多东西还要去翻书,去上网搜索。

而且遇到一些小错误运行不出来,就会烦躁不安,觉得有些自暴自弃或者抱怨项目的变态,以后要克服,尽量保持一颗良好的心态,学好C语言,也学好用C语言编写一个按要求的系统。

还有就是对于未来,近程就是下学期,我觉得我还有许多方面需要提高。

首先我要继续学习好C语言的基础知识,然后能在电脑上熟练的运用。

然后每天都能写一些程序,上网时候多看一些优秀的教程和优秀的代码。

程序设计实践报告

程序设计实践报告

程序设计实践报告程序设计实践报告随着个人的素质不断提高,报告十分的重要,报告具有语言陈述性的特点。

那么大家知道标准正式的报告格式吗?以下是小编为大家收集的程序设计实践报告,欢迎大家借鉴与参考,希望对大家有所帮助。

通过c语言实践,让我加深了对c语言的了解,而不只是单单的在课本中学到的那些理论,平时乏味的课程,通过自己动手亲自编写,变的生动有趣,而在自己动手的过程中,出现的问题很多,比理论要难的多,当一个程序写完以后,经常会有很多错误而没法解决。

不过,通过几天的实践,逐渐积攒了一些经验,有些错误可以很快就看出来。

这次实践有很大的收获,让我对c语言有了更深的认识,平时在课堂上学到的东西可以自己动手编写,将其转化成一些实用的技能。

如果是一个程序写完一处错误也没有,会有种成就感,于是兴趣就来了,兴趣来了,自然学的东西也就多了,能把理论变成实际的技能,让我对c语言有了浓厚的兴趣和更深层的认识。

c语言是一个有序的学习,学了最基本的替换,然后扩展到循环,嵌套,条理很清楚,不是一个零散的知识,实际上所有的课程都如此,不过通过实践我也知道了自己的不足,存在的很多问题。

比如自己写的写的小程序出了问题,不会解决了就叫老师帮忙,虽然说一定意义上增加了师生之间的感情,但是会养成一种依赖的心理,碰到问题了第一个想到的是求助而不是自己独立解决,所以以后要多多锻炼自己的信心和增加自己的能力,争取做到老师不在身边的时候也可以完成一些简单的程序编写与错误排除。

还有自己的基础知识不扎实,遇到的问题,没有很好的逻辑思维,亲自编写一个陌生的程序的时候会有种无法下手的感觉,找不到突破口。

通过实践,逐渐理清了顺序,对于简单的程序和一些相对比较繁琐的嵌套,循环,不在是看着一头雾水。

其实只要理清了思路,把基础知识掌握了,然后有条不紊的分析,一步一步理解,c语言还是很有意思的课程。

自己亲自动手编写程序让我增加了对c语言程序开发环境的.了解,在上课的时候老师就讲,学习c语言最重要的是学习c语言的逻辑思维,不管以后从事什么行业,学习c语言都对自己的职业很有帮助,如果是从事编程工程工作的话,就更有帮助了,即使以后的编程工作可能不用c语言,但是拥有扎实的c语言基础是对工作很有用的。

《C语言程序设计》实验报告

《C语言程序设计》实验报告

《C语言程序设计》实验报告学院:专业:学号:姓名:成绩:课程代码: 2001301指导教师:实验中心:电气信息专业试验中心日期:目录实验总体要求实验一………………………………………………C语言的运行环境和运行过程实验二………………………………………………数据类型、运算符与表达式实验三………………………………………………程序结构(顺序、选择和循环) 实验四………………………………………………数组实验五………………………………………………函数实验六………………………………………………指针实验七………………………………………………结构体实验八………………………………………………类和对象实验总体要求C语言程序设计课程是一门实践性很强的课程,为了培养学生的计算机应用能力,除了课堂理论教学外,必须加强程序设计课程实验的教学环节。

1、课程实验教学目的通过C语言程序设计的课程实验教学,学生应具有使用计算机解决相关问题的能力,同时为学生今后学习其他计算机应用课程打下良好的程序设计基础。

⑴分析问题和解决问题能力的训练课程实验教学将课本上的理论知识和实际应用有机地结合起来,达到训练学生分析问题解决实际问题的能力,提高学生应用计算机知识开发应用系统的综合能力。

⑵逻辑思维能力的训练通过课程实验教学,使学生正确地掌握C语言的基本知识,较好掌握基本的程序算法,以及描述方法。

培养学生在程序设计解题思路、算法的描述、编程构思等方面的计算机逻辑思维能力。

⑶程序设计技能的训练通过C语言环境下的应用实例,训练学生编写程序的能力,掌握编程的思路和方法,掌握结构化程序设计的基本概念和基本技能。

通过课程实验教学,使学生掌握C程序设计语言的语法规则,数据结构的应用,掌握算法描述及相应代码描述,掌握结构化程序设计的基本方法,能熟练编写一般的应用程序。

2、课程实验教学要求⑴要求通过解题、程序设计和上机实践,加深对所学概念的理解,提倡理论与实践相结合的学习方法。

2021年c语言程序设计实践心得1000字范文

2021年c语言程序设计实践心得1000字范文

2021年c语言程序设计实践心得1000字范文学习C语言的初期重点要放在掌握语言的语法和规定上,一定要养成良好的编程习惯,整理了c语言程序设计实践心得1000字范文,希望能帮助到您。

c语言程序设计实践心得1000字范文一C语言是一种结构化语言,是大部分编程语言的基础,C语言学好了,以后的JA V A,C#以及更多的编程语言才有可能学好。

下面就跟南宁达内一起,要学好C语言必须了解的四点:1、课前认真预习,把下一节要上的内容先自己看一遍,把不懂的地方打个标记,等上课的时候可以请教老师。

理解书上的例子,搞懂每个语句的含义,用法。

看完后尝试着不看例子自己编写程序,编完以后再跟书上进行比较,看自己的程序还有哪方面的不足,再进行改正。

想要真正学好C 语言光看书是不够的,一定要自己多动手。

2、上课认真听讲积极思考,提高上课效率。

老师上课讲述的都是课程的重点和难点,听好课程可以达到&quot;事半功倍&quot;的目的。

3、课后复习。

把每天的上课内容回家再温习一遍,独立完成课后的作业,如果有时间,最好能找点课外书籍、课外习题什么的来巩固所学的内容。

4、主动上机,多多实践,提高动手能力。

通过上机实践来验证所学的理论,通过在机器上查找错误来巩固概念,通过提高上机能力来促进理论学习,开阔编程思路,提高反映速度,提高分析问题解决问题的能力,锻炼心理素质,提高心理承受能力。

学习C语言的初期重点要放在掌握语言的语法和规定上,一定要养成良好的编程习惯,平时写程序注意语法规范格式控制,格式规范了,出了错误也容易找到出错的地方,这是C语言的基础;后期的重点要转移到掌握编程的思路和基本算法上来。

课后多做习题,找一些经典例子尝试自己编写,写程序切忌半途而费,想到一个思路,就要按自己思路把它写完,就算错了,也可以让自己了解为什么这样做会错?错在哪里?会出什么结果?以后自己也很难在这个地方犯同样的错误。

当学到一个新的知识点,就试着把它运用到以前做的习题上,不但巩固了以前学的内容,也更加能加强新知识的理解。

C语言程序设计实验指导含答案

C语言程序设计实验指导含答案

C语言程序设计实验指导含答案实验一:C语言程序设计基础实验内容:本实验主要以C语言的基础语法为主,通过一些简单的示例和练习来帮助学生熟悉C语言的基本概念和语法规则。

实验步骤:1. 编写一个简单的C程序,输出"Hello, World!"。

要求程序能够顺利编译并执行。

答案:#include <stdio.h>int main(){printf("Hello, World!");return 0;}2. 基于上一题的程序,修改代码,要求程序输入一个整数,并将其乘以2输出。

答案:#include <stdio.h>int main(){int num;printf("请输入一个整数:");scanf("%d", &num);printf("乘以2的结果为:%d", num * 2);return 0;}3. 编写一个C程序,输入一个圆的半径,计算并输出其面积和周长。

要求保留2位小数。

答案:#include <stdio.h>#define PI 3.14159int main(){float radius;printf("请输入圆的半径:");scanf("%f", &radius);float area = PI * radius * radius;float circumference = 2 * PI * radius;printf("圆的面积为:%.2f\n", area);printf("圆的周长为:%.2f\n", circumference);return 0;}实验二:循环和判断语句实验内容:本实验主要通过不同的练习来帮助学生熟悉和掌握C语言中的循环和判断语句的使用方法。

《C语言程序设计》实验报告实验六

《C语言程序设计》实验报告实验六使用指针的程序设计学号姓名一、实验目的1、掌握指针的概念,会定义和使用指针变量;2、能正确使用数组的指针和指向数组的指针变量;3、熟悉指针作为函数参数的定义和调用方法;4、能正确使用字符串的指针和指向字符串的指针变量。

二、实验内容1.分析下面的程序并上机运行程序,要求写出3组以上程序的运行结果。

#include <stdio.h>void main(){int *p1,*p2,*p;int a,b;printf("Input a b please");scanf("%d%d",&a,&b);p1=&a;p2=&b;if(a>b){ p=p1;p1=p2;p2=p;}printf("*p1=%d, *p2=%d\n",*p1,*p2);printf("a=%d, b=%d\n",a,b);}『运行结果:』输入1,2得:*p1=1,*p2=2a=1,b=2输入2,1得:*p1=1,*p2=2a=2,b=1输入56,123得:*p1=56,*p2=123a=56,b=1232.下列程序的功能是分别求出数组中所有奇数之和以及所有偶数之和。

形参n给了数组中数据的个数,利用指针odd返回奇数之和,利用指针even 返回偶数之和。

请在下面空白处将实现这一功能的函数完善,并且调试运行出结果。

#include <stdio.h>#define N 10void fun(int *a,int n,int *odd,int *even){int m;*odd=0; *even=0;for(m=0;m<n;m++)if(*(a+m)%2==0)*even+=*(a+m);else*odd+=*(a+m);}void main(){int a[N]={1,10,2,3,19,6},i,n=6,odd,even;printf("The original data is:\n");for(i=0;i<n;i++)printf("%5d",*(a+i));printf("\n\n");fun(a,n,&odd,&even);printf("The sum of odd numbers:%d\n",odd);printf("The sum of even number:%d\n",even);}『运行结果:』3.编程实现从键盘输入一个字符ch和一个字符串str,利用字符指针实现删除字符串str中和字符ch相等所有字符,然后输出字符串str。

c语言程序设计实验与课程设计教程

c语言程序设计实验与课程设计教程一、教学目标本课程的教学目标是使学生掌握C语言程序设计的基本概念、语法和编程技巧,培养学生具备运用C语言进行程序设计的能力。

具体包括以下三个方面的目标:1.知识目标:学生需要掌握C语言的基本语法、数据类型、运算符、控制结构、函数、数组和指针等概念。

2.技能目标:学生能够运用C语言编写简单的程序,解决实际问题,并具备一定的调试和优化程序的能力。

3.情感态度价值观目标:培养学生对计算机科学的兴趣和热情,提高学生分析问题和解决问题的能力,培养学生的创新精神和团队合作意识。

二、教学内容本课程的教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构、函数、数组和指针等。

具体安排如下:1.第一章:C语言概述,基本语法和数据类型。

2.第二章:运算符、控制结构和函数。

3.第三章:数组和指针。

4.第四章:字符串和文件操作。

5.第五章:指针的应用和动态内存管理。

6.第六章:C语言的高级编程技术。

三、教学方法为了提高教学效果,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。

1.讲授法:通过教师的讲解,使学生掌握C语言的基本概念和语法。

2.讨论法:引导学生进行思考和讨论,培养学生的创新思维和团队合作意识。

3.案例分析法:通过分析实际案例,使学生学会运用C语言解决实际问题。

4.实验法:让学生亲自动手编写程序,提高学生的编程能力和实践能力。

四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:选用《C语言程序设计》作为主教材,为学生提供系统性的学习资料。

2.参考书:提供《C语言程序设计实践》等参考书籍,帮助学生巩固知识点。

3.多媒体资料:制作课件、教学视频等,以直观的方式展示教学内容。

4.实验设备:提供计算机实验室,让学生进行上机实验,提高实践能力。

五、教学评估本课程的教学评估将采用多元化的评价方式,包括平时表现、作业、考试等,以全面、客观、公正地评估学生的学习成果。

C语言程序设计实验报告

南京邮电大学通达学院程序设计(上机)报告题目: R015M专业通信工程学生姓名班级学号指导教师日期 2020.11.18给定n个点的坐标,这n个点依次围成一闭合多边形,再给一点(x,y),判断它是否在多边形中。

课题分析:1、Double函数的应用:double是C语言的一个关键字,代表双精度浮点型。

占8 个字节(64位)内存空间。

其数值范围为1.7E-308~1.7E+308,精度完全保证的有效数字是15位,16位只是部分数值有保证。

可以用格式化输入输出语句scanf和printf进行double类型的输入输出,格式化字符为%lf。

2、赋值中的类型转换当赋值运算符两边的运算对象类型不同时,将要发生类型转换,转换的规则是:把赋值运算符右侧表达式的类型转换为左侧变量的类型。

3、利用自定义的函数实现叉乘4、Input():input属于printf()函数中的式样化字符串,将输出结果格式化并将输入的参数返回到程序中。

printf()函数用于向准则输出设备按规定式样输出消息。

正在编写步骤时经常会用到此函数。

printf()函数的挪用式样为: printf("<式样化字符串>",<参数表>)。

输入n个点,例如:三角形,那n就为3。

矩形,n就为4。

其中,n有限制条件,n至少大于等于3,为一个三角形。

这n个点必须按多边形顺时针或逆时针依次输入,这个多边形必须是凸多边形。

在最后运行过程中,输入n 个点的坐标。

再定义一个(x,y),判断此(x,y)是否在n个点构成的图形当中。

首先先计算两个向量(a,b),(c,d)的叉乘。

2个向量的叉乘就是计算向量的位置是在左边还是右边。

如果这个定义点在多边形内部的话,它就会始终在多边形边框的左侧或者右侧。

int n;double x, y;/输入n个点和坐标(x,y)。

void input()/定义一个input函数。

{int a,b,c,d,k;printf("请输入第一个向量");scanf("%d%d",&a,&b);printf("请输入第二版个向量");scanf("%d%d",&c,&d);k=ac+bd;printf("叉乘结果为权%d",k);}利用上方熟悉的叉乘公式进行改编,最终算出需要的(a,b)点与(c,d)点的叉乘结果。

C语言程序设计心得体会多篇

C语言程序设计心得体会多篇近年来,C语言无论在国内还是国外都得到了迅速地推广使用。

C语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的功能。

本文是关于C语言程序设计心的得,希望对大家有帮助。

C语言程序设计心得体会篇一通过此次C语言程序设计实践,本人实在是获益不浅!C语言是上个学期开的课程,所以这个学期并没怎么看过,当要开始设计的时候,还真不知从哪下手!结果,第一次的上机,我傻坐着不知道该做什么,后来就写了几个预处理命令。

回去以后,我想,这样不行,这样下去还得了!我就重新复习了一遍我们上个学期学习的内容,发觉自已有许多都遗忘了!特别是有文件的操作,几乎是一遍空白!温习过后,开始做题!一开始做题,也是有点模糊,在指导老师的指导下,我们慢慢的进入状态,我们做的是一个通讯录,内容包括很多。

运用的函数也是非常的复杂,我们一组有七个人,我分工合作,首先我一起完成了结构题,然后我们一人各负责一个函数程序的设计,经过几星期的努力,我们完成了大半个程序,但是总是有很多错误出现,有好多是些小问题,这都是我们粗心大意造成的,所以1/ 6设计程序一定要仔细,不容一点的马虎。

当然也有大问题,关于文件的操作,是我们最大的问题,不过,我们做好后,经过老师的讲解和改错,我们也懂得设计和运用了。

同时,也让我知道了,合作的力量,如果是孤军奋战的话,我也不能在规定时间内完成,当然,也多亏老师的指导。

这次设计,让我重新掌握了C语言,而且还得到了用C语言解决实际问题的宝贵经验!C语言程序设计心得体会篇二经过一个学期的学习,我对C语言有了一定的了解。

C语言是学习计算机科学的基础,作为一名计算机专业学生,掌握C语言更是毋庸置疑。

在上课之前,就经常听同学说,C语言很难学,确实,刚开始听课时觉得老师不知所云。

不过,发现对后续内容的预习后,前面的疑团都迎刃而解,这让我对C语言的学习更有信心。

计算机最重要的就是上机操作,自己编写程序,在VisualC++运行,刚开始经常会出现错误,经过分析改正后,终于能够运行了,就觉得特别激动。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言程序设计实践题目:哈夫曼编码与费诺编码姓名:苏斌斌学号:班级:通信工程170x兰州交通大学电子与信息工程学院通信工程系2018 年 6 月25 日哈夫曼编码与费诺编码兰州交通大学C语言课程设计实践《C语言程序设计实践》评分表哈夫曼编码与费诺编码目录1、哈夫曼编码 (1)(1)需求分析 (1)(2)概要设计 (1)(3)详细设计 (2)(4)程序代码 (5)(5)调试分析 (11)(6)用户使用说明 (11)(7)测试结果 (13)(8)参考文献 (14)2、费诺编码 (15)(1)需求分析 (15)(2)概要设计 (15)(3)详细设计 (15)(4)程序代码 (19)(5)调试分析 (22)(6)用户使用说明 (23)(7)测试结果 (23)(8)参考文献 (23)兰州交通大学C语言课程设计实践1、哈夫曼编码(1)需求分析程序设计任务:设计一个哈夫曼编码压缩与解压缩程序,对一个ASCII编码的文本文件中的字符进行哈夫曼编码,生成编码文件,反过来,可将编码文件译码还原为文本文件。

程序相关规定:输入的形式:整型和字符型;输入值的范围:MAXBIT 100 MAXV ALUE 10000;输出的形式:二进制编码形式输出;程序所能达到的功能:实现对一个ASCII编码的文本文件字符进行哈夫曼编码以及将编码文件译码还原为文本文件。

(2)概要设计模块设计本程序包含三个模块:主程序模块,哈夫曼编码模块,,选择模块,其调用关系如下图所示:图1.2.1模块调用关系图1.2.2哈夫曼编码(译码)模块设计哈夫曼编码与费诺编码图1.2.3主程序模块采用结构体保存过程数据.通过定义两个结构类型,分别记录二叉树的信息和编码的信息。

输出结果.将结果输出至屏幕,以循环打印的方式,调用标准输入输出函数print,将结果回显。

求解Huffman的编码通过对已经建立好的数进行循环遍历,向左路径记录为0,向右记录为1,直到所有结点访问到。

数据类型的定义哈夫曼树类型Typedef struct{//构造树Char value;//结点权值int weight //权重int parent//双亲结点int lchild//左孩子结点int rchild//右孩子结点}HNodeType求哈夫曼编码类型typedef struct{int bit[MAXBIT];int start;} HCodeType;(3)详细设计第一部分:建立哈夫曼树构建结点结构体数组HuffNode;初始化结构体数组HuffNode;输入结点及其权值;循环构造HuffmanTree;每次循环运算得到权值最小的两个结点,并合成一棵小型HuffmanTree;循环结束,所有的小型HuffmanTree合成最终的Huffman。

兰州交通大学C语言课程设计实践哈夫曼编码与费诺编码图1.3.1第二部分:构建解码(decodeing)函数图1.3.2构建新的数组num:循环判断数组string中的每个元素,并逐个存放到数组num中;构建指针nump指向数组num的首元素地址;循环解码;每次循环,如果节点是父结点,且满足条件:其子结点都为叶结点,则循环结束;循环输出相应的叶结点的解码(所求),解码完成。

第三部分:主函数调用HuffmanTree函数;循环编码。

每次循环,得到一个叶结点的编码;得到所有叶结点的编码循环结束;循环保存每个叶节点的哈夫曼编码和编码起始位;输出每个叶节点的哈夫曼编码和编码起始位;调用decodeing函数,可以进行字符或字符串的解码;程序结束。

兰州交通大学C语言课程设计实践图1.3.2(4)程序代码#include <stdio.h>#include<stdlib.h>#define MAXBIT 100 /*最大编码长度*/哈夫曼编码与费诺编码#define MAXVALUE 10000 /*最大值*/#define MAXLEAF 30 /*最大叶子数n*/#define MAXNODE MAXLEAF*2 -1 /*最大结点数(2n-1)*/typedef struct{int bit[MAXBIT];int start;} HCodeType; /* 编码结构体*/typedef struct{int weight; /*权重*/int parent; /*父结点*/int lchild; /*左子结点*/int rchild; /*右子结点*/char value; /*叶子结点*/} HNodeType; /* 结点结构体*//* 构造一颗哈夫曼树*/void HuffmanTree (HNodeType HuffNode[MAXNODE], int n){/* i、j:循环变量,m1、m2:构造哈夫曼树不同过程中两个最小权值结点的权值,x1、x2:构造哈夫曼树不同过程中两个最小权值结点在数组中的序号。

*/int i, j, m1, m2, x1, x2;/* 初始化存放哈夫曼树数组HuffNode[] 中的结点*/for (i=0; i<2*n-1; i++){HuffNode[i].weight = 0;//权值HuffNode[i].parent =-1;HuffNode[i].lchild =-1;HuffNode[i].rchild =-1;HuffNode[i].value=' '; //实际值,可根据情况替换为字母} /* end for *//* 输入n 个叶子结点的权值*/兰州交通大学C语言课程设计实践for (i=0; i<n; i++){printf ("Please input char of leaf node: ", i);getchar();scanf ("%c",&HuffNode[i].value);} /* end for */for (i=0; i<n; i++){printf ("Please input weight of leaf node: ", i);scanf ("%d",&HuffNode[i].weight);getchar();} /* end for *//* 循环构造Huffman 树*/for (i=0; i<n-1; i++){m1=m2=MAXV ALUE; /* m1、m2中存放两个无父结点且结点权值最小的两个结点*/ x1=x2=0;/* 找出所有结点中权值最小、无父结点的两个结点,并合并之为一颗二叉树*/for (j=0; j<n+i; j++){if (HuffNode[j].weight < m1 && HuffNode[j].parent==-1){m2=m1;x2=x1;m1=HuffNode[j].weight;x1=j;}else if (HuffNode[j].weight < m2 && HuffNode[j].parent==-1){m2=HuffNode[j].weight;x2=j;}} /* end for */哈夫曼编码与费诺编码/* 设置找到的两个子结点x1、x2 的父结点信息*/HuffNode[x1].parent = n+i;HuffNode[x2].parent = n+i;HuffNode[n+i].weight = HuffNode[x1].weight + HuffNode[x2].weight;HuffNode[n+i].lchild = x1;HuffNode[n+i].rchild = x2;printf ("x1.weight and x2.weight in round %d: %d, %d\n", i+1, HuffNode[x1].weight, HuffNode[x2].weight);printf ("\n");} /* end for */} /* end HuffmanTree *///解码void decodeing(char string[],HNodeType Buf[],int Num){int i,tmp=0,code[1024];int m=2*Num-1;char *nump;char num[1024];for(i=0;i<strlen(string);i++){if(string[i]=='0')num[i]=0;elsenum[i]=1;}i=0;nump=&num[0];while(nump<(&num[strlen(string)])){tmp=m-1;while((Buf[tmp].lchild!=-1)&&(Buf[tmp].rchild!=-1)){兰州交通大学C语言课程设计实践if(*nump==0){tmp=Buf[tmp].lchild ;}else tmp=Buf[tmp].rchild;nump++;}printf("%c",Buf[tmp].value);}}int main(void){HNodeType HuffNode[MAXNODE]; /* 定义一个结点结构体数组*/HCodeType HuffCode[MAXLEAF], cd; /* 定义一个编码结构体数组,同时定义一个临时变量来存放求解编码时的信息*/ int i, j, c, p, n;char pp[100];printf ("Please input n:\n");scanf ("%d", &n);HuffmanTree (HuffNode, n);for (i=0; i < n; i++){cd.start = n-1;c = i;p = HuffNode[c].parent;while (p != -1) /* 父结点存在*/{if (HuffNode[p].lchild == c)cd.bit[cd.start] = 0;else哈夫曼编码与费诺编码cd.bit[cd.start] = 1;cd.start--; /* 求编码的低一位*/c=p;p=HuffNode[c].parent; /* 设置下一循环条件*/ } /* end while *//* 保存求出的每个叶结点的哈夫曼编码和编码的起始位*/for (j=cd.start+1; j<n; j++){ HuffCode[i].bit[j] = cd.bit[j];}HuffCode[i].start = cd.start;} /* end for *//* 输出已保存好的所有存在编码的哈夫曼编码*/for (i=0; i<n; i++){printf ("%d 's Huffman code is: ", i);for (j=HuffCode[i].start+1; j < n; j++){printf ("%d", HuffCode[i].bit[j]);}printf(" start:%d",HuffCode[i].start);printf ("\n");}printf("Decoding?Please Enter code:\n");scanf("%s",&pp);decodeing(pp,HuffNode,n);getchar();return 0;}兰州交通大学C语言课程设计实践(5)调试分析在调试哈夫曼编码程序中,出现了无法解码信息的情况,在经过上网查询资料,同伴讨论之后,改正了某些错误,并确定了函数本身语法的正确性,并对函数语句进行了顺序上的改变解决了这个问题,并完成本程序。

相关文档
最新文档