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语言实训篇1在初学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字范文学习C语言的初期重点要放在掌握语言的语法和规定上,一定要养成良好的编程习惯,整理了c语言程序设计实践心得1000字范文,希望能帮助到您。
c语言程序设计实践心得1000字范文一C语言是一种结构化语言,是大部分编程语言的基础,C语言学好了,以后的JA V A,C#以及更多的编程语言才有可能学好。
下面就跟南宁达内一起,要学好C语言必须了解的四点:1、课前认真预习,把下一节要上的内容先自己看一遍,把不懂的地方打个标记,等上课的时候可以请教老师。
理解书上的例子,搞懂每个语句的含义,用法。
看完后尝试着不看例子自己编写程序,编完以后再跟书上进行比较,看自己的程序还有哪方面的不足,再进行改正。
想要真正学好C 语言光看书是不够的,一定要自己多动手。
2、上课认真听讲积极思考,提高上课效率。
老师上课讲述的都是课程的重点和难点,听好课程可以达到"事半功倍"的目的。
3、课后复习。
把每天的上课内容回家再温习一遍,独立完成课后的作业,如果有时间,最好能找点课外书籍、课外习题什么的来巩固所学的内容。
4、主动上机,多多实践,提高动手能力。
通过上机实践来验证所学的理论,通过在机器上查找错误来巩固概念,通过提高上机能力来促进理论学习,开阔编程思路,提高反映速度,提高分析问题解决问题的能力,锻炼心理素质,提高心理承受能力。
学习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++运行,刚开始经常会出现错误,经过分析改正后,终于能够运行了,就觉得特别激动。
C语言程序设计上机实验报告(精选5篇)[修改版]
第一篇:C语言程序设计上机实验报告黔南民族师范学院C语言程序设计上机实验报告系部:计算机科学系年级:2013 级班级:姓名:学号:实验时间:实验成绩:2013年月日实验三顺序结构程序的设计一实验名称:顺序结构程序的设计二.实验环境:windows XP系统,VC++6.0软件三.实验目的:四.实验内容:五.算法描述流程图六.源程序七.测试数据及运行结果八.实验心得实验成绩评分要求1、原创性发现抄袭或雷同成绩为0分2、正确性程序正确60分3、可读性格式清楚,有注释,变量命名规范20分4、健壮性对特殊测试数据有考虑有测试10分5、效率程序运行效率高10分第二篇:C程序设计上机实验报告10C程序设计实验报告实验名称:指针与数组学时安排:2课时实验类别:上机操作型实验要求:1人1组 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄一、实验目的1. 理解指针、地址和数组间的关系;2. 掌握通过指针操作数组元素的方法;3. 掌握数组名作为参数的编程方式。
二、实验设备介绍软件需求: Visual C++ 6.0或CFree3.5以上版本硬件需求: 对于硬件方面的要求,建议配置是Pentium III 450以上的CPU处理器,64MB以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。
三、实验内容1. 定义函数void sort(int a[],int n)amain函数,并在其中调用sort函数。
示例如下:After sorted the array is: -9 -6 1 2 4 52. 输入10个整数存储到数组a,再输入一个整数x,在数组a中查找x,若找到则输出相应的下标,否则显示“Not found!”。
要求定义和调用函数search(int list[], int n, int x),在数组list中查找元素x,若找到则返回相应下标,否则返回-1。
C语言程序设计实验实验指导书及答案
实验一熟悉C程序运行环境班级学号姓名成绩一、实验目的1. 熟悉C语言Visual C++调试环境;2. 掌握C程序的编辑、调试及运行;二、实验内容项目1. 调试并运行下面程序,并写出运行结果:include <>int main{printf“Good morning\n”;printf“Hello,world\n”;return 0;}运行结果注意,按照屏幕输出格式写:项目2. 调试并运行下面程序,并写出运行结果:include <>int main{int a , b , sum; /定义变量/a=23; b=56; /为变量赋值/sum=a+b; /计算两个变量的和/printf“sum is %d\n”,sum; /输出计算结果/return 0;}运行结果:项目3. 调试并运行下面程序,并写出运行结果:include <>int maxint,int;int main{int a , b , c; /定义变量/a=23; b=56; /为变量赋值/c=maxa,b; /调用max函数,将得到的值赋给c/ printf“max is %d\n”,c; /输出c的值/return 0;}int maxint x,int y /定义max函数,函数值为整型/ {int z; /定义变量/ifx>yz=x;elsez=y;returnz; /将z的值返回/}运行结果:三、提高部分1.试想,如果求10个数中的最大者,则程序该如何编写;程序代码运行结果:实验二数据及其运算班级学号姓名成绩一、实验目的1. 掌握C数据类型的概念、熟悉整型、字符型和实型基本类型的常量的用法;学会三种基本类型变量的定义、赋值和使用方法;2. 掌握算术表达式、关系表达式及逻辑表达式的特点及用法;3. 熟悉运算符的优先级和结合性的概念;4. 学习简单程序的编写方法;二、实验内容项目1. 编辑运行下面程序,并分析运行结果;include<>int main{int m,a,b,c,d,e; /定义整型变量/printf“please input a data:m=”;scanf“%d”,&m;/从键盘输入一个整数/a=m+1;b=m-2;c=m3;d=m/4;e=m%5;printf“a=m+1;a=%d\n”,a;printf“b=m-2;b=%d\n”,b;printf“c=m3;c=%d\n”,c;printf“d=m/4;d=%d\n”,d;printf“e=m%%5;e=%d\n”,e;return 0;}运行结果:项目2. 编辑运行下面程序,并分析运行结果;include<>int main{float m,n,s;printf“m=”;scanf“%f”,&m;/输入矩形的边长/printf“n=”;scanf“%f”,&n;/输入矩形的边长/s=mn; /计算矩形的面积/printfs=%f\n”,s;/输出矩形的面积/return 0;}1输入24和5,运行结果:2输入-24和5,运行结果:分析结果是否正确3对上面程序进行修改,当输入一个非法的边长负数或零,会给出提示而不计算矩形的面积;输入-24和5,运行结果:项目3. 先阅读程序,并写出结果,再运行程序并分析结果;include<>int main{int i,j,m,n,p,q,x,y;i=8;j=10;p=0;q=0;x=1;y=1;m=++i;选做根据矩形面积的计算方法,编写一个输入圆半径r,计算园周长L和圆面积S的程序;注意判断圆半径r是否大于零;程序代码和运行结果可写在指导书背面实验三程序控制结构选择班级学号姓名成绩项目1.三角形成立条件判断及面积计算项目任务输入三个整型数据,判断这三个整型数据能否围成三角形,如果能组成三角形,计算并输出它的面积,如果不能围成三角形输出“三条边不能围成三角形”;项目说明C语言实现选择结构筑要用if语句,按照判断所给定的条件是否满足,根据判定结果的真或假来决定执行在if语句中给出的两种操作之一;项目目的1正确使用关系表达式和逻辑表达式表达条件;2学习分支语句if的使用方法;3进一步熟悉VC集成环境的使用方法,学习VC环境提供的调试工具;项目要点1已知三边求三角形面积的公式:p=a+b+c/2 s= sqrtpp-a p-b p-c2已知三边能围成三角形的条件是:任意两边之和大于第三边;3C语言中求平方根的函数是sqrtdouble x,该函数在头文件中;4if语句中“表达式”必须用“”和“”括起来,它的值为逻辑值;除常见的关系表达式或逻辑表达式外,也允许是其他类型的数据,如整型、实型、字符型等;5else子句可选是if语句的一部分,必须与if配对使用,不能单独使用;程序代码:运行结果:项目2. 百分制成绩转换为成绩等级项目任务输入一个百分制成绩,输出对应的等级;项目目的1正确使用关系表达式和逻辑表达式表达条件;2学习多switch分支选择语句的使用方法;项目要点解决本项目的关键是如何将输入的百分制成绩与case 常量联系起来,不难想到将百分制成绩用score 表示除以10之后再取整,一定得到0到10之间的数;9、10对应’a ’,8对应‘b ‘,……,5、4、3、2、1、0对应’e ’既不及格; 程序代码:运行结果:项目3.选做⎝⎛<--=>+=0100012x x x x x y ;程序代码和运行结果可写在指导书背面实验四程序控制结构循环班级学号姓名成绩项目1:使用循环结构实现重复处理项目说明从键盘输入一个班的成绩,把百分制转换成等级制;将百分制成绩用score表示除以10之后再取整,一定得到0到10之间的数;9、10对应’a’,8对应‘b‘,……,5、4、3、2、1、0对应’e’既不及格;要求分别使用三种循环结构实现;该项目中,假设班级人数不固定,规定输入若干0至100的成绩,如果成绩不在此范围,则表示结束;该项目中,同时要使用switch语句实现多分支选择结构;项目目的1掌握用while语句和do…while语句实现循环的方法;2掌握用for语句实现循环的方法;3掌握三种语句的特点和应用技巧;4掌握用break语句和continue语句改变循环状态的方法;项目内容1、用while语句实现的程序代码:2、用do…while和break语句实现的程序代码:3、用do…while和continue语句实现的程序代码:4、用for语句实现的程序代码:项目2.选做求101!nn =∑即求1!2!3!10!++++程序代码和运行结果可写在指导书背面实验五数组班级学号姓名成绩项目1.冒泡排序法项目说明输入10个数,用“冒泡法”对10个数排序由小到大;冒泡法的基本思想:通过相邻两个数之间的比较和交换,使数值较小的数逐渐从底部移向顶部,较大的数逐渐从顶部移向底部;就像水底的气泡一样逐渐向上冒,故而得名;项目目的1掌握冒泡排序算法的编程;2掌握与数组有关的算法;程序代码:运行结果:项目2.字符统计项目说明有一篇文章,共有3行文字,每行80个字符;要求分别统计出其中英文字母和数字的个数;项目目的1掌握键盘输入字符串方法;2掌握二维数组的处理方法;技术要点13行文字可定义一个二维字符数组来表示;2使用gets 函数对字符串进行输入;程序代码:include <>int main{int i,j,upp,low,dig,spa,oth;char text380;upp=low=dig=spa=oth=0;for i=0;i<3;i++{ printf"please input line %d:\n",i+1;getstexti;for j=0;j<80 && textij='\0';j++{if textij>='A'&& textij<='Z'upp++;else if textij>='a' && textij<='z'low++;else if textij>='0' && textij<='9'dig++;else if textij==' 'spa++;elseoth++;}}printf"\nupper case: %d\n",upp;printf"lower case: %d\n",low;printf"digit : %d\n",dig;printf"space : %d\n",spa;printf"other : %d\n",oth;return 0;}运行结果:项目3.选做在二维数组中,若某一位置上的元素在该行中最大,而在该列中最小,则该元素即为该二维数组的一个鞍点;要求从键盘上输入一个二维数组,当鞍点存在时,把鞍点找出来; 程序代码和运行结果可写在指导书背面实验六函数班级学号姓名成绩项目1:使用函数实现对二维数组转置;项目说明写一个函数,使给定的33的二维整型数组转置,即行列互换;要求输出转换之前和转换之后的结果; 项目目的1掌握函数的定义和调用;2掌握二维数组名作为函数的参数的使用技巧;技术要点1使用二重循环对二维数组进行输入,处理和输出;2二维数组名作为函数的参数,定义函数需要给出第二维的大小;程序代码:运行结果:项目2:使用函数实现成绩处理项目说明输入3个学生4门课的成绩,分别用函数实现以下功能:1计算每个学生的平均分;2计算每门课的平均分;3找出12个分数中最高分数所对应的学生和课程;项目目的1掌握函数的定义和调用;2掌握全局变量的使用;技术要点学生成绩可定义成全局的二维数组,这样自定义函数可以直接使用,而不需要进行参数的传递; 程序代码:运行结果:项目3.选做求101!nn =∑即求1!2!3!10!++++阶乘要求使用递归函数来实现,程序代码和运行结果可写在指导书背面实验七指针班级学号姓名成绩项目1.使用指针参数交换两个变量值项目说明用函数实现两个变量值的交换,使其在主调函数和被调函数中的值一致,并且返回这两个变量的和以及乘积;要求用指针变量作为函数参数;项目目的1熟悉如何定义指针变量,掌握将指针变量作为函数参数的方法;2掌握通过指针参数由被调函数向主调函数传递多个值的方法;技术要点由于变量的值始终存放在内存单元中,因此,要交换两个变量的值,只需交换这两个变量对应的存储单元的值即可,这就需要知道两个变量的地址;也就是说,需要保证主调函数与被调函数中所要交换的两个数的内存单元是同一内存单元,即传递的参数是内存单元的地址,而不是内存单元中的值;程序代码:运行结果:项目2. 数组的排序和的插入项目目的1熟悉如何定义指针变量,掌握将指针变量指向一维数组元素的方法;2掌握如何对数组进行排序;3掌握如何在一个有序的数列中查找合适的位置;4掌握如何将一个数插入到一个有序数列中;技术要点1排序可采用冒泡法或者选择法;2有序数组中插入一个数的关键是找到该数据插入的位置,然后将插入位置及其后的所有元素均后移一位,在空出的位置放入待插入的数据;例如,在13、27、38、49、65、76、97 这列有序数据中插入53 这个数,成为新的有序数列13、27、38、49、53、65、76、97;4定义数组时多开辟一个存储单元,用于存放待插入的数据;程序代码:运行结果:项目3.选做程序代码和运行结果可写在指导书背面编写函数 int findint p,int n,int x,在指针 p 所指的数组中查找整型数 x,如果 x 在数组中,则该函数返回 1,否则返回 0;n 为数组的大小;编写主函数测试之;。
c语言程序设计实训报告
c语言程序设计实训报告一、实训背景本次实训是为了加强学生对C语言程序设计的掌握,提高其编程能力和解决问题的能力。
通过实际操作,学生可以更深入地了解C语言的基础知识和应用技巧。
二、实训目的1. 掌握C语言程序设计的基本语法和数据类型;2. 学会使用流程控制语句编写简单的程序;3. 学会使用数组、函数等数据结构进行程序设计;4. 提高学生解决问题的能力。
三、实训内容1. 基础语法练习:包括变量定义、常量定义、运算符使用等;2. 流程控制语句练习:包括if-else语句、switch-case语句等;3. 数组练习:包括一维数组和二维数组的定义和使用;4. 函数练习:包括函数声明、函数调用以及递归函数等。
四、实训过程1. 基础语法练习:在第一次实验中,我们主要学习了如何定义变量和常量,并进行简单的运算。
我们通过不同类型变量之间进行赋值来熟悉各种数据类型之间的转换规则,同时也学会了如何使用printf()函数输出结果。
2. 流程控制语句练习:在第二次实验中,我们学习了if-else语句和switch-case语句。
我们通过编写简单的程序来熟悉这些流程控制语句的使用方法,同时也学会了如何使用scanf()函数获取用户输入。
3. 数组练习:在第三次实验中,我们学习了如何定义一维数组和二维数组,并进行简单的操作。
我们通过编写一个简单的矩阵转置程序来加深对数组的理解。
4. 函数练习:在第四次实验中,我们学习了如何声明函数、调用函数以及递归函数等。
我们通过编写一个求斐波那契数列的程序来熟悉函数的使用方法,并体会到递归函数的特点和应用场景。
五、实训收获通过这次实训,我对C语言程序设计有了更深入的理解。
我不仅掌握了基本语法和数据类型,还学会了如何使用流程控制语句、数组、函数等数据结构进行程序设计。
同时,在实践过程中,我也提高了自己解决问题的能力。
六、总结C语言作为一门经典而重要的编程语言,在计算机科学领域有着广泛的应用。
c语言程序设计实验报告
c语⾔程序设计实验报告C语⾔程序设计实验报告实验⼀1.⽤scanf函数输⼊数据,a=3,b=7,x=8.2,y=123.22,c1=‘A’,c2=‘a’,⽤printf 函数进⾏输出。
2.输⼊三⾓形的三边长,求三⾓形⾯积。
3..存款利息计算,有10000元,想存5年,按以下⼏种⽅法存。
(1)⼀次存5年。
(2)先存2年期,到期将本息再存3年。
(3)先存3年期,到期后再存2年。
(4)存1年期,到期将本息再存1年,连存5次。
计算各⾃存法5年后的本息是多少?4.设半径r=1.5,圆柱⾼h=3,求圆周长,圆⾯积,圆柱表⾯积,圆柱体积。
⽤scanf 输⼊数据,输出结果,输⼊要有⽂字说明,取⼩数点后2位数字。
5.给出⼀个不多于5位的正整数,要求:(1)求出它是⼏位数?(2)分别输出每个数字?(3)按逆顺序输出。
如(123输出321)实验⼆1.输⼊两个正整数,求其最⼤公约数和最⼩公倍数。
2.⼀个数如果恰好等于它的因⼦之和,这个数就称为完数,例如6=1+2+3,编程找出1000之内的所有完数,并按下⾯格式输出其因⼦。
6its factors are1,2,33.输⼊⼀⾏字符,分别统计出其中英⽂字母、空格、数字和其他字符的个数。
4.⼀个球从100m⾼度⾃由落下,每次落地后反跳回原⾼度的⼀半,再落下,再反弹。
求它在第10次落地式,共经过多少⽶,第10次反弹多⾼。
实验三1.从键盘输⼊⼀个整数,并将其插⼊到其元素已按升序排列的数组中,要求插⼊操作完成后,数组中的元素仍按升序排列。
2.⼀篇⽂章,共有三⾏⽂字,每⾏有80个字符。
要求分别统计出其中英⽂⼤写字母、⼩写字母、数字、空格以及其他字符的个数。
3.从键盘输⼊10个整数,并求出这10个数的最⼤值及出现次数。
4.编写个⼈所得税计算器。
输⼊个税起征点和⽉收⼊,计算应交税款。
(起征点为2000元)不超过500元的部分税率5%超过500元⾄2000元的部分税率10%超过2000元⾄5000元的部分税率15%超过5000元⾄20000元的部分税率20%超过20000元⾄40000元的部分税率25%超过40000元⾄60000元的部分税率30%超过60000元⾄80000元的部分税率35%超过80000元⾄100000元的部分税率40%超过100000元的部分税率45%。
C语言程序设计实习报告
********************菜 单********************
=== 1 插入通讯成员 ===
=== 2 删除通讯成员 ===
=== 6 修改成员资料 ===
=== 0 退出本次操作 ===
=============================================
请输入您选择的操作:
3
输入要查找人的姓名:
************************电子通信录*******************************
姓名:A 手机:1235467897
办公电话:1224667 家庭电话: 525647
邮箱:45Hkkkl125 住址:SGGDH1564
2
请输入要删除人的姓名:
A
姓名:A 手机:1235467897
办公电话:1224667 家庭电话: 525647
邮箱:45Hkkkl125 住址:
真的要删除吗?(Y:是N:否)
Y
已删除确认项!
五.用户手册
由于程序本身并不复杂,这套程序的操作方法并不难懂。首先在进入界面后,会自动弹出表格,用户可以根据表格提示进行数据的录入,查找,修改,删除等操作。由于能力有限,未能实现图形界面,这在一定程度上影响了用户界面的美观,但总体上完成了要求的各项功能,满足了题目需求。
六.测试结果
请输入邮箱:SGHYTRHdfghsd3535
请输入住址:SDGSDGter
请保存,保存后自动返回原界面!
请输入您选择的操作:
4
C语言程序设计实验报告(函数)
C语言程序设计实验报告(实验名称:函数)1实验目的(1)掌握函数的定义方法、调用方法、参数说明以及返回值;(2)掌握实参与形参的对应关系,以及参数之间的“值传递”的方式;(3)掌握函数的嵌套调用及递归调用的用的设计方法;(4)在编程过程中加深理解函数调用的程序设计思想。
2实验内容(1)编写一个函数primeNum(int x),功能是判别一个数是否为素数。
要求:①在主函数中输入一个整数x(直接赋值或从键盘输入);②函数类型为空值(void),调用primeNum( )函数后,在函数中输出x是否为素数的信息,输出格式为“x is a prime number”或”x is not aprime number”;③分别输入一下数据:0,1,2,5,9,13,59,121,并运行程序,检查结果是否正确。
(2)编写函数 mulNum(int a,int b),它的功能是用来确定a和b是否是整数倍的关系。
如果a是b的整数倍,则函数返回值为1,否则函数返回值为0。
要求:①在主函数中从键盘输入一对整型数据a和b;②调用函数后,根据返回值对a和b的关系进行说明。
例如,在主函数中输入:10,5,则输出“10 is a multiple of 5”;③分别输入下面几组数据进行函数的正确性测试:1与5,5与5,6与2,6与4,20与4,37与9。
3算法描述流程图(1)primeNum(int x)(判别一个数是否是素数)函数流程图①主函数流程图:②判断素数函数流程图:(2)mulNum(int a,int b)(确定a和b是否是整数倍的关系)函数流程图①主函数流程图:②判断倍数流程图:4源程序(1)判断某个数是否是素数#include <stdio.h>int primNum(int x) /*编写函数判断某个数是否是素数*/ {int i;if (x==0||x==1) /*当x等于1或等于0时判断是否为素数*/return 0;for (i=2;i<x;i++) /* 当x大于2时判断不为素数的数*/{if (x%i==0)return 0;}if (x%i) /* 当x等于2或不满足上述条件时时判断出该数是素数*/ return 1;}void main(){int n ;printf("Please input an integer:"); /* 提示从键盘输入一个数x */scanf("%d",&n);if (primNum(n)==1) /* 调用定义的函数*/ printf("%d is a prime number\n",n); /* 由函数得出结论判断是否为素数*/ elseprintf("%d is not a prime number\n",n);}(2)个数是否是整数倍关系#include <stdio.h>int mulNum(int a,int b)/* 定义函数确定两个数是否有整数倍关系*/{if (a%b==0) /* 判断出a是b的整数*/return 1;else /* 判断出a不是b的整数*/return 0;}void main (){int m,n;printf ("please input tow integers:\n"); /*提示从键盘输入两个数*/scanf ("%d%d",&m,&n); /*从键盘输入两个数的值*/if(mulNum(m,n)==1) /*调用定义的函数并判断输出相应的结果*/printf("%d is a multiple of %d\n",m,n);elseprintf("%d is not a multiple of %d\n",m,n);}5测试数据(1)实验(1)测试数据为0,1,2,5,9,13,59,121 运行结果当测试数据0时当测试数据1时当测试数据2时当测试数据5时当测试数据9时当测试数据13时当测试数据59时当测试数据121时(2)实验2测试的数据1与5,5与5,6与2,6与4,20与4,37与9。
刘喜平c语言程序设计方法与实践
刘喜平c语言程序设计方法与实践C语言程序设计方法与实践在计算机科学领域,程序设计是一门基础性的学科。
随着科技的迅速发展和计算机的广泛应用,掌握一门高效的编程语言变得尤为重要。
C语言作为一种通用的高级编程语言,广泛应用于系统软件、嵌入式系统和网络应用等领域。
刘喜平的《C语言程序设计方法与实践》为学习C语言的初学者提供了一套系统而实用的学习方法。
本书首先介绍了C语言的基础知识,包括变量、常量、运算符等。
然后,作者从程序的结构入手,详细讲解了C语言的分支结构、循环结构和函数等。
他提供了大量的示例代码和实践任务,帮助读者理解各种概念和技术,并提供了解决实际问题的方法。
与其他编程语言相比,C语言注重效率和控制能力。
为了帮助读者培养这方面的能力,刘喜平在书中提供了大量的练习题,涵盖了各个知识点和技巧。
这些练习题既可以培养读者的编程思维,又可以巩固所学知识。
作者还提供了实用的调试技巧,帮助读者找出和解决程序中的错误。
在书的后半部分,刘喜平着重介绍了C语言的高级特性,如指针、数组和结构体等。
这些知识点对于提高程序的效率和性能至关重要。
作者通过详细的解释和示例代码,帮助读者掌握这些高级特性的使用方法,并指导读者如何应用于实际项目中。
此外,本书还介绍了C语言的文件操作、位运算和内存管理等重要概念。
这些内容对于学习和理解计算机系统一体化有着重要的意义。
作者通过清晰的语言和实际案例,帮助读者理解这些概念的原理和使用方法。
总体而言,《C语言程序设计方法与实践》是一本很好的学习C语言的教材。
它结构清晰,内容丰富,既适合初学者入门,又适合有一定编程基础的读者提升技能。
通过学习本书,读者可以掌握C语言的基础知识和编程技巧,提高解决实际问题的能力。
在我们日常生活和工作中,计算机程序无处不在。
掌握C语言程序设计方法与技巧,可以更好地理解和应用现代科技的发展,提高工作效率和竞争力。
因此,推荐大家阅读刘喜平的《C语言程序设计方法与实践》,通过阅读和实践,掌握C语言的核心内容,并将其应用到实际工作中,从而更好地应对日常的编程任务。
c语言程序设计实验实训
c语言程序设计实验实训一、充分准备,使学生明确实训的目的与要求本次实训的目的是要求学生通过熟练运用turbo c 2.0的开发环境,以所掌握的c语言知识为基础,围绕本次安排的实训项目,精心准备,认真调试,通过查阅资料、通过阅读相关程序代码、通过多次上机调试、通过同学们相互讨论,使学生对c语言程序设计有一个全面的了解,从而能更加系统地理解c语言基础知识。
本次教学实验的建议就是:教师必须深入细致给参予教学实验的学生分好组与,特别注意成绩优劣的配搭。
同时,教学实验前发布本次教学实验内容,建议每个学生深入细致搞好教学实验前的准备工作,查询有关资料,精心撰写代码。
各组学生单一制顺利完成教学实验项目,单一制编写教学实验报告,深入细致及时展开教学实验总结。
指导教师通过进占教师后台管理系统对学生的教学实验过程展开追踪指导、审查管理、展开评阅,并得出考核成绩。
教师在教学实验期间必须检查学生至课情况,及时调整选定的分组角色。
二、精心组织,认真做好项目实训对教师方面,本次教学实验建议教师两节教学实验课必须到场。
教师必须清点学生到场情况并搞好执勤记录,在存有学生缺席的情况下调整不好角色分配。
同时建议教师必须把教学实验内容具体内容分配至课时,并提供更多有关内容可供学生浏览。
教师通过进占教师后台管理系统对学生的.教学实验过程展开追踪指导、审查管理、展开评阅,并得出考核成绩;对学生方面,本次教学实验教学实验考核分后合格与不能合格两个档次。
不合格的可以建议轻搞,轻搞的次数不影响考核成绩。
对激活的同学,一经辨认出,建议从头做起, 由老师选定内容, 顺利完成有关的内容, 否则为不能合格。
三、本次实训的效果与经验通过此次教学实验,社会各界同学打牢了基础,锻炼身体了能力,综合素质获得很大提升。
同时教学实验也为促进我系则专业建设提供更多了多样的经验。
1、本次实训促进了我系人才培养计划的完善和课程设置的调整。
近年来,我系为适应学生的实践需要陆续增设与调整了一系列课程,如开源系列,受到同学们的欢迎。
C语言程序设计基础与实践
C语言程序设计基础与实践一、基础知识1. C语言编译器C语言编译器是将C语言代码翻译成计算机能够理解的二进制指令的程序。
常见的C语言编译器有Microsoft Visual C++、Borland C++、GCC等。
2. C语言程序开发环境C语言程序开发环境包括编译器、IDE(Integrated Development Environment,集成开发环境)、编辑器和调试器。
常见的开发环境有Visual Studio、CodeBlocks、Dev-C++等。
3. C语言语法C语言的语法非常简单,注重语言结构和思维方式。
C语言的主要特点包括:(1)注释:单行注释以“\/\/”开头,多行注释以“\/*”开头,“*\/”结尾;(2)语句:每条C语言语句以分号“;”结尾;(3)函数:C语言程序中定义一个函数需要定义函数名、函数参数列表、函数返回值类型和函数体;(4)变量:C语言可以定义各种类型的变量,如int、double、char等;(5)运算符:包括算术运算符、关系运算符、逻辑运算符等。
4. C语言程序的编写和编译C语言程序的编写过程分为编辑、编译和运行三个步骤。
编辑器是用于编辑源代码的程序,编译器是将编写好的代码翻译成二进制机器指令的程序,运行器则是将编译后的代码在计算机上运行的程序。
编码过程中,需要注意使用变量和函数命名,以及注释等规范,多使用printf输出调试信息以便查错,编译过程中,需要注意编译器错误和警告信息。
二、实践经验1. C语言内存管理C语言中的指针和动态内存分配是C语言语法中的重要部分。
指针是一种特殊的变量类型,能够直接在内存地址上读写数据。
动态内存分配是在程序运行时分配内存的方法,可以使用malloc和free函数进行动态内存分配和释放。
使用指针和动态内存分配需要注意内存泄漏和段错误等问题。
2. C语言函数函数是C语言中的重要元素,能够让程序更加模块化,更易于维护和重用。
C语言函数的调用过程中需要注意函数调用的参数传递方式(值传递和引用传递)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)调试分析在调试哈夫曼编码程序中,出现了无法解码信息的情况,在经过上网查询资料,同伴讨论之后,改正了某些错误,并确定了函数本身语法的正确性,并对函数语句进行了顺序上的改变解决了这个问题,并完成本程序。