资源描述
C语言程序设计 实验报告书专 业: 班 级: 姓 名: 学 号: 实验地点: 任课教师: 实验题目: 实验环境: Visual C+6.0 一、 实验目的1.了解什么是指针,什么是指针变量,并学会通过指针变量访问整型变量;2.学会用指针方法来处理问题,学会定义指针变量;3.学会将指针类型和函数结合在一起,用的数据作函数的参数;4.学会在函数中通过改变形参(指针变量)的值,来改变实参(指针变量)的值;5.学会在函数中通过改变形参(指针变量)的值,来改变实参(指针变量)的值,并且调用函数来实现该程序;6.了解引用数组中各个元素共有三种方法:(1)下标法(2)通过数组名计算数组元素的地址。找出元素的值(3)用指针变量指向数组元素;7.学会用指针变量指向数组元素,通过改变指针变量的值,是指针变量先后指向数组中的各个元素;8.学会定义一个函数实现交换,知道实参用数组名a,形参可用数组名,也可用指针变量名;9.学会用指针变量作实参;10.学会用指针方法实现程序;11.清楚地区别各个符号所代表的是地址还是值,了解有关概念;12.学会用指向数组元素的指针变量;13.学会用指向一维数组的指针变量;14.了解用指针变量作形参可以有两种方法:(1)用指向变量的指针变量(2)用指向一维数组的指针变量;15.了解用指针变量作形参可以有两种方法:(1)用指向变量的指针变量(2)用指向一维数组的指针变量;16.学会字符串的定义方式,可以通过定义字符数组来实现;17.学会通过字符指针变量来输出一个字符串;18.知道对字符串中字符的存取,既可以用下标的方法,也可以用指针方法;19.知道对字符串中字符的存取,既可以用下标的方法,也可以用指针方法;20.学会通过调用函数来实现字符串的复制;21.学会改变指针变量的值;22.学会用函数指针变量来调用函数;23.知道怎样使用指向函数的指针变量;24.学会使用指向函数的指针变量;25.知道怎样使用返回指针的函数;26.知道怎样使用返回指针的函数;27.知道什么是指针数组,学会定义和使用指针数组;28.学会使用指向指针数据的指针变量;29.学会使用指向指针数据的指针变量30.学会怎样用malloc函数来建立动态数组;二、 实验内容1.通过指针变量访问整型变量;2.输入a和b两个整数,按先大后小的顺序输出a和b;3.输入a和b两个整数,按先大后小的顺序输出a和b,现用函数处理,而且用指针类型作函数参数;4.对输入的两个整数按大小顺序输出;5.输入三个整数a,b,c,要求按从大到小的顺序将它们输出,要求用函数实现;6.有一个整型数组a,有10个元素,要求输出数组中的全部元素;7.通过指针变量输出数组a中的10个元素;8.将数组a中的n个整数按相反顺序存放;9.将数组a中的n个整数按相反顺序,用指针变量做实参;10.用指针方法对10个整数按由大到小顺序排序;11.输出二维数组的有关数据(地址和值);12.有一个3*4的二维数组,要求用指向元素的指针变量输出二维数组各元素的值;13.输出二维数组任一行任一列元素的值;14.有一个班,3个学生,各学四门课,计算总平均分数以及第n个学生的成绩;15.在上一题的基础上,查找一门以上课程不及格的学生,输出他们的全部课程的成绩;16.定义一个字符数组,在其中存放字符串“I love China!”,输出该字符串和第8个字符;17.通过字符指针变量输出一个字符串;18.将字符串a复制为字符串b,然后输出字符串b;19.用指针变量来处理上一例题;20.用函数调用实现字符串的复制;21.改变指针变量的值;22.用函数求整数a和整数b中的较大者;23.输入两个整数,然后让用户选择1或2,选1时调用max函数,输出其中的大数,选2时调用min函数,输出其中的小数;24.有两个整数a和b,由用户输入1,2或3。如输入1,程序就给出a和b中大者,输入2,就给出a和b中的小者,输入3,则求a与b之和;25.有a个学生,每个学生有b门课 的成绩,要求用户在输入学生的序号之后,能输出该学生的全部成绩,用函数指针来实现;26.对上一例题中的学生,找出其中有不及格的课程的学生及其学号;27.将若干字符串按字母顺序(由小到大)输出;28.使用指向指针数据的指针变量;29.有一个指针数组,其元素分别指向一个整形型数组的元素,用指向指针数据的指针变量,输出整型数组个元素的值;30.建立动态数组,输入5个学生的成绩,另外用一个函数检查其中有无低于60分的,输出不合格的成绩;三、 实验结果1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.四、 实验中存在的问题及解决办法1.在开头处定义了两个指针变量,但是他们没有指向任何变量,程序的后面才规定了这两个指针变量指向哪两个变量,此时pointer_1的值为&a,pointer_2的值为&b;2.用指针方法处理这个问题,要注意的是:本题中,没有交换整型变量的值,而是交换两个指针变量的值,即p1和p2是指向交换了一下;3.函数的参数不仅可以是整型或是浮点类型的,还可以是指针类型的,它的作用是经一个变量的地址传送到另一个函数中;4.此题目的函数中,改变的是形参(指针变量)的值,通过此方法来改变实参的值;5.再次强调:C语言中实参变量和形参变量之间的数据传递是单向的“值传递”方式,所以用指针改变函数参数时同样也要遵循这一规则,注意:不可能通过执行调用函数来改变实参指针变量的值,但是可以通过改变实参指针变量所指变量的值;6.可以有三种方法应用数组中的各元素:(1)下标法(2)通过数组名计算数组元素的地址。找出元素的值(3)用指针变量指向数组元素;特别注意不要混淆;7.这个程序中,问题在于指针变量p的指向。首先,指针变量p的初始值为a数组首元素的地址,但是经过第一个for循环读入数据以后,p已指向a数组的末尾。因此在执行第二个for循环时,p的起始值不是&0了,而是a+10,由于执行第二个for循环时,每次要执行p+,因此p指向的是a数组下面的10个存储单元,而这些存储单元是不可预料的,因此程序运行的时候出了错;8.注意:实参用数组名a,形参可用数组名,也可用指针变量名;9.在输入arr数组的元素以后,要对指针变量p进行重新指向,由于p的值已经改变,如果不重新指向arr0,下一个for循环中,p的起始值不是0了,而是代表p+10以后的数组,程序运行的时候就会出现错误;10.定义int*型指针变量p指向a0,定义sort函数使数组a中的元素按由大到小的顺序排列,在主函数中调用sort函数,用指针变量p作实参,sort函数的形参用数组名,用选择排序法来实现该程序;11.这个程序中区别了几个重要的符号,要注意区分什么是地址,什么是地址中的值;12.二维数组的元素是整型的,他相当于整型变量,可以用int*型指针变量指向它,二维数组的元素在内存中是按行顺序存放的,即存放完序号为0的行中的全部元素后,接着存放序号为1的行中的全部元素,以此类推。因为可以用一个指向整型元素的指针变量,依次指向各元素;13.int(*p)4表示定义p为一个指针变量,它指向包含4个整型元素的一堆数组。注意*p两侧的括号必不可少,如果写成*p4,由于方括号运算级别高,因此p先于4结合,p4是定义数组的形式,然后再与前面的*结合,*p4就是指针数组,这两者有本质上的区别,要注意区别,在写程序的时候不要出错;14.程序中,把score00的地址传给p,使p指向score00,然后再average函数中,使p先后指向二维数组的各个元素,p每增加1就改为指向score数组的下一个元素,形参n代表需要求平均值的元素的个数;p_end代表的是最后一个元素的地址;15.该程序中,实参score和形参p的类型是相同的,在调用search函数时,p得到实参score的值,即score0的起始地址,也就是说p指向score数组的第一行,然后p先后指向各行;16.用字符数组存放一个字符串,可以通过数组名和下标引用字符串中一个字符,也可以通过数组名和格式声明%s输出该字符串;注意:由于在初始化时字符的个数是确定的,因此可以不必指定数组的长度,用数组名string和输出格式%s可以输出整个字符串;17.对字符指针变量的初始化,实际上是把字符串第一个元素的地址(即存放字符串的字符数组的首元素地址)赋给指针变量string,使string指向字符串的第一个字符;18.该程序中,可以通过地址访问其数组的元素;19.由于可以用指针变量访问字符串,因此可以通过改变指针变量的值使它指向字符串中的不同字符;定义两个指针变量,改变指针变量的值,使它们顺序指向数组中的各元素,进行对应元素的复制;20.可以定义一个函数copy_string用来实现字符串的复制功能,在主函数中调用此函数,函数的形参和实参可以分别用字符数组名或字符指针变量;21.指针变量a的值是可以变化的,printf函数输出字符串时,从指针变量a当时所指向的元素开始,逐个输出各个字符,知道遇到0为止,而数组名虽然代表地址,但它是常量,它的值是不能改变的,这点要注意;22.可以定义一个指向函数的指针变量,用来存放某一函数的起始地址;23.在程序中,调用函数的语句是“c=(*p)(a,b)”,这样使用了指向函数的指针变量;24.在该程序中,只用到了f1和f2函数,完全可以在fun函数中直接调用这两个函数,不用定义指针变量,但是如果在每次调用fun函数时,要调用的函数时不固定的,这时,使用指针变量就比较方便了。只要在每次调用fun函数的时候给出不同的函数名作为实参即可,fun函数不必做任何修改;这是一种符合结构化程序设计方法原则的方法,要注意掌握;25.该函数的返回值是&scorek0(即存放序号为k的学生序号为0的课程的数组元素的地址),然后在主函数中输出该生的全部成绩;26.在该程序中,main函数不止调用一次search函数,在search函数中检查3个学生有无不及格的课程,如果有,就返回该学生的0号课程的地址&scorei0,否则返回NULL;27.该程序中要注意的是:用选择法排序,但是不移动字符串,而是改变指针数组的各元素指向;28.定义一个指针数组name,并对它初始化,使name数组中每一个元素分别指向5个字符串,定义一个指针型数据的指针变量p,使p先后指向name数组中各个29.注意:指针数组的元素只能存放地址,不能存放整数;30.用malloc函数开辟一个动态自由区域,用来存5个学生的成绩,会得到这个动态区域第一个字节的地址,它的基类型是void型,用一个基类型为int的指针变量p来指向动态数组的各元素,并输出它们的值,但要注意:必须先把malloc函数返回的void指针转换为整型指针,然后赋给p1;
展开阅读全文