C语言课程实习报告.docx
《C语言课程实习报告.docx》由会员分享,可在线阅读,更多相关《C语言课程实习报告.docx(15页珍藏版)》请在冰豆网上搜索。
C语言课程实习报告
新疆农业职业技术学院
《C语言程序设计》
教学实习报告
部门:
信息技术学院
专业:
计算机应用
班级:
09高职应用班
姓名:
聂宇
指导教师:
徐玉莲
《C语言程序设计》教学实习报告
09高职应用班聂宇
一、实习时间:
2010年6月21日—2010年6月25日
二、实习地点:
第一微机室
三、实习目的:
1、熟悉我们自己所用的计算机的C语言开发环境,并且能够熟练掌握,达到错误能找到原因并且加以改正。
2、加深对课本理论知识的理解,进一步掌握书中重点、难点实例,锻炼自己的编写程序能力和实际应用能力。
3、上机调试程序的过程中,发现错误,解决错误,保证程序的正确运行,运行结果与给定结果完全相同。
4、学会用书中基本知识解决实际中的一些问题,将书本所学的内容与实际操作相结合,掌握把实际问题转变为C语言描述的算法的方法,明确思路。
将自身的不足与缺陷改掉,养成良好编辑风格
5、培养我们的主观能动性、沟通、表达能力和团队合作意识,为我们以后的发展打下基础。
四、实习内容及方法:
在本次实习中,我们采用了由浅及深、由易到难的实习方法,而且也是按照书本的教学进程内容进行的,同时采取了实际应用与理论相结合的方法,在机房里面实习,一边理解,思考做题的思路与解法,另一边就可以马上进行上机实际操作。
这对于我们加深对C语言的理解、操作以及动手能力都有了很大的帮助与提高。
实训的内容主要分为了七个版块:
第一版块:
1、TurboC运行环境。
了解TC的基本环境,熟悉常用菜单项和快捷键:
在这一小节中,需要熟练的掌握并应用TurboC的运行环境,和基本配置。
TurboC是在计算机上广泛使用的一个C语言开发环境,它具有方便、直观、易用的界面和丰富的函数库。
它把程序的编辑、编译、连接和运行等操作去不都集中在一个界面上进行,使用非常方便。
并且TurboC不需要特别安装,只需要将其拷贝到硬盘上就可以使用了。
为了方便管理用户的程序文件和维TurboC2.0的运行环境,客户应在机子上建立自己的工作目录,一边用来存放自己所需要开发的源程序文件。
下面就是建立怎样自己文件夹,在空白区域内输入自己所建立的文件夹路径即可。
2、C程序的编辑、编译、连接和运行过程。
掌握C程序的运行步骤,初步了解C程序的特点。
在TurboC的运行中,快捷键使用非常方便,只需Ctrl+菜单栏中菜单名的首字母即可。
上面是一个程序编译与链接的截屏。
第一个CompiletoOBJ将源程序编译为OBJ文件,MakeEXEfile编译连接一次进行,LinkEXEfile将OBJ文件连接为EXE文件。
3、VC6.0环境的熟悉,自己按照软件并在软件中能够调试简单的C语言程序。
第二版块:
1、C语言数据类型:
整型、实型、字符型。
C语言的函数类型非常丰富,除了这几类以外,还有实型、数组、指针、结构体等,在这一小节中,主要了解关于数据类型的定义、用法以及他们的存储类型,一边与以后灵活运用。
C语言中还有常量与变量之分,常量是在程序执行过程中其值不变的量。
二且在C语言中常量不需要类型说明就可以直接使用,常量的类型是由常量的本身隐含决定的。
2、运算符及表达式。
在C语言中,预算符非常丰富运算灵活,常用的有以下几个:
(1)算术运算符:
+、-、*、/、%(取余)及++(自增)、--(自减)。
(在这里需要注意的是:
“/”运算符,在C语言中两边都是整数的话,运算结果只取整数部分;“%”他的两边都必须是整数才可以运行;“**、--”运用这个运算符时要注意“先用后加(减)、先加(减)后用”的问题)
(2)赋值运算符:
=及复合赋值运算符(+=、-=、*=、/=、%=等)。
(在这里需要注意的是“=、==”的区别,要明确用法及所用的地方,“=”它的作用是赋值,“==”它的作用是判断相等)
(3)逗号运算符:
(对于逗号表达式索要注意的是要明确它所用的地方以及在使用时所要注意的细节)。
了解三种运算符的优先级,掌握三种运算符及相应表达式的应用(详见附录)。
第三版块:
在这一节里,我们实习了C语言的三大结构:
1、顺序结构:
2、选择结构:
if……else,switch语句。
在这里许啊哟我们学习的很多,因为只要是程序,就脱离不了这个三大结构的范畴。
在这个学习里我编写了
(1)、输入某年某月某日,判断这一天是这一年的第几天?
。
(2)、给一个不多于5位的正整数,要求:
一、求它是几位数,二、逆序打印出各位数字。
(3)、某市不同车牌的出租车3公里的起步价和计费分别为:
夏利7元,3公里以外,2.1元/公里;富康8元,3公里以外,2.4元/公里;桑塔纳9元,3公里以外,2.7元/公里。
编程:
从键盘输入乘车的车型及行车公里数,输出应付工资。
源程序减附录;
经过这几个程序的练习,让我聊股的掌握了选择语句的用法以及精髓,同是这个用法和技巧已经深深的可在了我的脑海里,还有同过这些个程序的编写,让我对以前有的丝丝而非的地放完全通透理解,获益匪浅。
循环结构:
while、do-while、for
在循环这一节里,我们主要做了以下程序:
(1)、求200-300之间所有素数,每5个换行。
(2)、猜数字游戏。
规则为:
输入一个0-10之间的数字,有5次猜测机会。
如果输入0-4之间的数字,提示“太小了”;如果输入5-7之间的数字,提示“接近了”;如果输入9-15之间的数字,提示“太大了”;如果输入8,提示“correct!
”;如果次数超过5次,提示“没有机会了,退出!
”。
(3)、打印输出如下图形:
(“◇”菱形)
(4)、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?
都是多少?
提示:
可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
(5)、打印输出九九乘法表。
我以前就对循环这一节里的内容就理解的比较好,现在做这些题很顺利的就做下去了,但在做的同是也会出现以写小的问题,但这个让我也更深一步的理解了循环语句的用法、思路以及其中的精华。
总的对这一节来说,使自己更神一步的理解了选择、循环的用法以及在使用过程中需要注意的一些细节问题。
第四版块:
1、一、二维数组的定义、引用及初始化。
初始化:
一维数组:
初始化赋值的一般形式为:
static类型说明符数组名[常量表达式]={值,值……值};其中static表示是静态存储类型,C语言规定只有静态存储数组和外部存储数组才可作初始化赋值
二维数组:
a.可以只对部分元素赋初值,未赋初值的元素自动取0值。
b.如对全部元素赋初值,则第一维的长度可以不给出。
2、一、二维数组的应用。
在一维数组的应用中,要与循环嵌套使用,二维数组要与也要与循环嵌套使用,但是在这里,嵌套还要是循环的嵌套,因为只有这样使用才可以使程序更加简洁、简便。
就像第五题:
有一个班4个学生,5门课。
编程实现如下功能:
(1)求每一门课程的平均分;
(2)求每一个学生的平均分;
思路:
定义一个二维数组,用二重循环输入这个数组,然后进行相加,在求平均直,最后在用二重循环进行输出。
在这里,进行了求平均值的过程。
这里进行了二重循环输出。
第五版块:
1、函数的定义和调用
函数可分为库函数和用户定义函数两种。
(1)库函数
库函数只不需要用户自己定义的,只需要在用的时候将其调用出来用就可以了,非常方便,并且C语言有这丰富的函数库。
(2)用户定义函数
用户自己定义的函数,是属于一个自定义范畴,自己定义的函数不仅要在程序中定义函数本身,而且在主调函数模块中还必须对该被调函数进行类型说明,然后才能使用。
2、函数参数和函数值
(1)无参函数
函数定义、函数说明及函数调用中均不带参数。
主调函数和被调函数之间不进行参数传送。
此类函数通常用来完成一组指定的功能,可以返回或不返回函数值。
(2)有参函数
也称为带参函数。
在函数定义及函数说明时都有参数,称为形式参数(简称为形参)。
在函数调用时也必须给出参数,称为实际参数(简称为实参)。
进行函数调用时,主调函数将把实参的值传送给形参,供被调函数使用。
(1)有返回值函数
此类函数被调用执行完后将向调用者返回一个执行结果,称为函数返回值。
由用户定义的这种要返回函数值的函数,必须在函数定义和函数说明中明确返回值的类型。
(2)无返回值函数
此类函数用于完成某项特定的处理任务,执行完成后不向调用者返回函数值。
这类函数类似于其它语言的过程。
由于函数无须返回值,用户在定义此类函数时可指定它的返回为“空类型”,空类型符的类型说明为“void”。
2、函数的嵌套调用和递归调用
C语言中不允许作嵌套的函数定义。
因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。
但是C语言允许在一个函数的定义中出现对另一个函数的调用。
这样就出现了函数的嵌套调用。
即在被调函数中又调用其它函数。
这以小节内容经过几个练习题的联系,让我掌握到了其中的主要部分,对此也比较的明确。
4、局部变量和全局变量及变量的存储类别
局部变量:
局部变量也称为内部变量。
局部变量是在函数内作定义说明的。
其作用域仅限于函数内,离开该函数后再使用这种变量是非法的。
全局变量:
全局变量也称为外部变量,它是在函数外部定义的变量。
它不属于哪一个函数,它属于一个源程序文件。
其作用域是整个源程序。
在函数中使用全局变量,一般应作全局变量说明。
只有在函数内经过说明的全局变量才能使用。
全局变量的说明符为extern。
但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。
在C语言中,对变量的存储类型说明有以下四种:
auto自动变量
register 寄存器变量
extern 外部变量
static 静态变量
在局部变量中所定义的变量,只能在该函数中使用,在函数编辑时,预处理命令下定义的变量属于全局变量,在每个函数中都可以使用,并且在使用函数传递参数时,不用传递全局变量。
在这里,我主要说的是第二个练习题,它的思想是一个加密算法。
思路是:
现编写一个主程序,实现函数调用,在子函数中实现加密算法并且输出。
在输入是将接收的值设置为一个全局变量。
就像下面的这个例子:
在这里,将所输入的值进行分解成个、十、百、千位,分别进行加密算法。
在这里进行加密算法,每位上的数加上6除以8以后的余数,在将第一位与第四位对调,第三位与第二位对调。
在最后输出结果。
第六版块:
1、指针、指针变量的概念
指针的基本概念在计算机中,所有的数据都是存放在存储器中的。
一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在第二章中已有详细的介绍。
为了正确地访问这些内存单元,必须为每个内存单元编上号。
根据一个内存单元的编号即可准确地找到该内存单元。
内存单元的编号也叫做地址。
既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。
“指针变量”是指取值为地址的变量
2、数组的指针
一个数组是由连续的一块内存单元组成的。
数组名就是这块连续内存单元的首地址。
一个数组也是由各个数组元素(下标变量)组成的。
每个数组元素按其类型不同占有几个连续的内存单元。
一个数组元素的首地址也是指它所占有的几个内存单元的首地址。
一个指针变量既可以指向一个数组,也可以指向一个数组元素,可把数组名或第一个元素的地址赋予它。
如要使指针变量指向第i个元素可以把i元素的首地址赋予它或把数组名加i赋予它。
3、指向字符串的指针返回指针的函数
(1)、字符串指针变量本身是一个变量,用于存放字符串的首地址。
而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。
字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。
(2)、对字符数组作初始化赋值,必须采用外部类型或静态类型,而对字符串指针变量则无此限制;
(3)、对字符串指针方式char*ps="CLanguage";可以写为:
char*ps; ps="CLanguage";而对数组方式:
staticcharst[]={"CLanguage"}不能写为:
charst[20];st={"CLanguage"};而只能对字符数组的各元素逐个赋值。
3、指针数组及指向指针的指针
指针数组的说明与使用一个数组的元素值为指针则是指针数组。
指针数组是一组有序的指针的集合。
指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。
指针数组说明的一般形式为:
类型说明符*数组名[数组长度]
在指针这一小节,主要是用指针实现:
输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。
写3个函数:
输入10个数;进行处理;输出10个数。
在这里进行函数的调用,一个输入函数,一个操作函数,一个输出函数。
在这里用数组实现了输入。
在这里用指针实现了将最小的数与第一个数对换,把最大的数与最后一个数对换。
在最后进行输出。
第七版块:
实训七属于一个综合类型的题目,他要求的比较高,必须在自己王权理解通透了课本知识以后才有可能理解这道题,并且进行修改完善。
主要这道题本身是在VC环境下运行的,将其移植到TurboC环境下运行,这其中牵扯到一些语法不同,在TurboC中不可以运行,要进行慢慢调试。
经过不懈的努力、修改,终于将其成功的在TurboC环境下可以正常运行了。
(详见附录)
五、结论
收获
我的收获:
在本次实习中,我学到了很多实际有用的东西,而且基本上都是在课本上学不到的,并且也在实习中梳理了自己对C语言这门课程所学的所有内容,让自己对C这门课程有了更进一步的认识,有了一个良好的基础,为自己的以后打下了坚实基础。
从开头到现在,所有的内容实习完了,上机实验是学习程序设计语言必不可少的实践环节,在C语言灵活、简洁中,更需要通过编程的实践来真正掌握它。
历时4天的《C语言程序设计》已经结束了,在这几天编程的过程中感触颇多,实训编程的同时暴露出了许多我自身存在的问题,同时也对自身有了很大的提高。
首先,对我以前做题做事非常马虎的毛病有了很大的改进,通过在这几天编程的过程中的锻炼,我现在做题比以前仔细多了,会小心翼翼地去看每一个地方,会仔细地检查程序的每一个字母、标点,以及每个可能出错的地方,更会特别仔细,生怕自己一不小心搞错了,而导致整个程序都无法运行。
其次,在编程的过程当中弥补了我许多知识上的缺陷,弄清楚了我不懂的地方和似是而非的地方,使我及时补上了欠缺,为自己以后的人生道路打下了良好基础,同时也让我对每一件事都有了一个好的心态去对待它,更让自己在编写程序的过程中每时每刻都处于充足的状态。
再次,通过几天综合实训编程使我的知识形成了一个完整的框架结构,而不再是零散的知识个体,使我在使用时更加的方便,更加灵活,以前有好多题目要写十行八行的,还有些地方弄得不是太懂,现在只需要五六行就可以搞定,而且还对于思路特别清晰、明确。
第四,在实习结束后,我对做完的习题检查比再是一切的走马观花,而是仔细核对、认真检查,和以前相比明显改善了好多,以前自己对于检查程序总是没有耐心,不好好检查,有问题总是找老师,相对于实习之后来说,有了很大的改善,自己不但可以坐下来耐心检查,还能够自己将程序调试成功,这对于现在的我来说是一个明显的进步。
第五,通过实习改变了我做题时心烦气燥的习惯,现在做题可以平和静气的完成。
第六,通过实习我的自制能力更强了,基本完全可以控制自己,避免外界的干扰,安心地完成自己的工作。
第七,在学习过程中,由于天气炎热,心里烦躁,同时也是每天都盯着频幕看,脑袋都看大了,但是我却一直坚持了下来,这对于我来说,也是一个非常好的习惯。
这同时也是我的一个收获。
第八,实训过程中,充分发挥团队协作精神,共同进步,帮助同学顺利完成实训课程,有困难一起解决,同时也使我在他们身上学到了很多东西。
总之,通过实习使我自身的知识体系得到巩固、提高以及使团队工作的能力得到锻炼。
不足
我的不足:
首先,我的第一个,同时也是一个最大的缺点,自己对于理论知识掌握的还不是很通透,理解的不够彻底,对于一些问题似似而非,给自己编写程序的过程中带来了很大的麻烦。
其次,我不能够精心的去完成每一个程序,对于每个程序而言,都是马马虎虎,只要运行结果是对的,那就可以了。
虽然我自己也知道这样是不好的,但是自己就是不愿意去改,在经过实习之后虽然有所改善,但在我看来,改进的不是很大。
第三,自己做题时还有些马虎,一些小的细节在编写程序过程中不注意,只有在编译连接是才可以发现、对其进行修改,对于一些小程序还不能实现一次就可以完成编译连接。
第四,做题时自己不能心平气和的去做。
第五,自己的子宅里不够强,不能持之以恒的坐在自己的座位上编写程序,歇一会就要起来转转。
六、致谢
在此,我仅代表我自己,对老师您致以崇高的敬意和深深的感谢,没有您,就没有我那么多的收获,您不辞辛苦,在这炎热天气里,放弃您的休息时间来为我们辅导,在辅导过程中,您更是尽心尽力,从来没有少过一节课,更没有过迟到早退,对我们是全程陪同,在我们实习中随时出现问题,随时解决。
只要发现问题,您从来没有说是不管过,从来没有烦躁过,对我们提出的问题,也是耐心解决,一边不懂,接着再讲一边,脸庞流下的汗水,您却从来没有在意过。
对我们泥更是不计报酬的为我们服务,让我们有一个好的学习环境,不用为自己遇到问题而烦恼,在这里我想对您说一声:
老师,您辛苦了!
请接受您的学子的深深谢意与感激。
在这里,也对学校表示由衷的谢意,感谢学校为我们提供了良好的实习环境,让我们在这炎热的天气里,能够舒爽的坐在教室里实习,而不用操心任何问题,在这里,对我们学校表示谢意。
此致
敬礼
附录
1级优先级左结合
()圆括号
[]下标运算符
->指向结构体成员运算符
.结构体成员运算符
2级优先级右结合
!
逻辑非运算符
~按位取反运算符
++自增运算符
--自减运算符
-负号运算符
(类型)类型转换运算符
*指针运算符
&地址与运算符
sizeof长度运算符
3级优先级左结合
*乘法运算符
/除法运算符
%取余运算符
4级优先级左结合
+加法运算符
-减法运算符
5级优先级左结合
<<左移运算符
>>右移运算符
6级优先级左结合
<、<=、>、>=关系运算符
7级优先级左结合
==等于运算符
!
=不等于运算符
8级优先级左结合
&按位与运算符
9级优先级左结合
^按位异或运算符
10级优先级左结合
|按位或运算符
11级优先级左结合
&&逻辑与运算符
12级优先级左结合
||逻辑或运算符
13级优先级右结合
?
:
条件运算符
14级优先级右结合
=+=-=*
=/=%=
>=<<=
&=^=|=全为赋值运算符
15级优先级左结合
,逗号运算符