2014湖南大学c语言实验题目及其答案 (3) 下载本文

内容发布更新时间 : 2024/5/20 17:33:36星期一 下面是文章的全部内容请认真阅读。

第3章 指针

一. 目的和要求

1、 掌握指针的概念和定义方法。 2、 掌握指针的操作符和指针的运算。 3、 了解指针与数组的关系。 4、 了解指针与字符串的关系。 5、 学习指针在函数中的应用。

二. 相关知识

1、指针变量的定义和初始化

指针变量是用来存放其它变量地址的变量。其定义格式如下: 存储类型 数据类型 *指针变量名1[=初值1],… 说明:

① 相同类型的指针变量和普通变量可以放在一起说明。

② 指针变量和普通变量完全一样,由它的定义位置决定指针的作用域和生命期。 ③ 要使一个指针变量指向一个确定的变量,必须将该变量的地址赋给指针变量。 ④ 一个指针只能指向同一个类型的变量。

2、&运算符和*运算符

在C语言中提供了两个有关指针的运算符: ① &运算符称为“取地址运算符”。 ② 运算符称为“指针运算符”,也称为“间接运算符”,如:*p代表p所指向的变量。

3、使用指针运算符应注意的问题

① 指针变量定义中的“*”与“*”运算符的区别。

指针变量定义中的“*”不是运算符,它只是表示其后的变量是一个指针类型的变量。而对于语句“*p=5;”,其中的“*”是指针运算符“*”,“*p”代表p指向的变量。 ② &运算符与*运算符是互逆的。如:y=x; y=*&x; 两个语句是等效的。

4、对指针变量的操作

在定义了一个指针变量之后,如:int *p, a; 就可以对该指针进行各种操作。 ① 给一个指针变量赋予一个地址值,如:p=&a;。 ② 输出一个指针变量的值, printf(“%o”,p);。

③ 访问指针变量所指向的变量, 如:printf(“%d”,*p);。

5、指向数组的指针变量的使用

数组名本身可以看成是该数组的指针,但它的位置是固定的。如果定义一个指针变量,并把这个指针指向该数组的起始地址,那么通过对指针的运算,就可以完成对数组的访问。

如,引用一维数组元素(int a[10], *p=a;)的方法有: ① 下标法, 如:a[i], p[i]。

② 地址法, 如:*(a+i), *(p+i)。

6、 指针数组和多级指针

① 一个数组,如果每个元素都是指针类型的,则它是指针数组。指针数组是用来存放一批地址的。

② 当定义的某个指针变量专门用来存放其它指针变量的地址时,这样的指针变量就称为指针的指针,也称二级指针。

7、指针型函数及函数指针

① 指针型函数,是指函数的返回值是指针型的,即这类函数的返回值是地址数据。 指针型函数调用与一般函数的调用方法完全相同,唯一需要注意的是只能用指针变量或指针型数组元素来接受指针型函数的返回值。

② 指向函数的指针称为函数指针,当把函数名赋给指针变量时,该指针变量的内容就是函数的存储地址。

函数指针的作用主要是把指针作为参数传送到其它函数。如果使指针变量指向不同的函数,将它的值传给被调用函数中的形参时,能调用不同的函数。

三. 实验练习

实验练习1:输入3个整数,按从大到小的次序输出(使用指针)。

本练习要求在封闭式实验课中在助教或者讲师的指导下完成。本练习分成6个部分: 1. 实验目的 2. 问题描述 3. 事例输出 4. 程序模板 5. 问题解答提示 6. 后续问题和任务

程序模板是完整的、可实际运行的C程序,其中关键的一行或者多行代码已经替换为注释。请先阅读问题描述,分析事例输出;然后研究模板的代码。参考问题解答提示,用C代码替换/* */注释。编译并执行程序,并将输出结果与提供的事例输出进行比较。然后回答强化练习。

实验目的

本实验旨在巩固学生对指针这种数据结构的理解,增强程序设计能力。在这个实验中,学生将练习:

? 定义一个指针变量并使它指向一个一维数组,它有三个数组元素。 ? 在循环语句中使指针下移,依次输入三个整数存入数组中。 ? 使指针上移,指向第三个数组元素。

? 第三个数与第一个数进行比较,若小于第一个数则交换。 ? 第三个数与第二个数进行比较,若小于第二个数则交换。 ? 第二个数与第一个数进行比较,若小于第一个数则交换。

? 利用循环语句,按反序输出数组,即输出第一个数、第二个数、第三个数。

在强化练习中,学生将练习:

? 按从小到大的次序输出三个整数。

? 在循环语句中,不使用循环控制变量i,就用指针p进行输入输出。

? 不用数组,使用三个指针变量完成该题。

问题描述

编写程序,从键盘输入三个整数存入数组中,使指针p指向该数组,操作指针使数组中的数按从大到小的次序输出。

示例输出 请输入三个整数:12 90 55 90 55 12 程序模板

#include \

void main()

{ int a[3],*p=a;

int i,temp;

printf(\请输入三个整数:\ for(i=0;i<3;i++,p++) /*利用指针变量输入撒播个整数*/ /*指针变量自减1*/; if(*p<*(p-2))

/* *p与*(p-2)交换*/ /*如果*p小于*(p-1)*/

{ temp=*p; *p=*(p-1); *(p-1)=temp; }

/*第2个数与第1个数比较,若第2个数小于第1个数,则交换*/

for(i=2;i>=0;i--,p--) printf(\

}

问题解答提示

1.指针是一种特殊的变量,它的值是地址值,说明它时前面冠以*号。 2.将指针指向数组的起始地址,只要把数组名赋给指针变量。 3.利用循环每输入一个数据,指针就下移一个数据。

4.输入完数据后,指针指向最后一个数组元素之后。应使指针上移指向最后一个数据。P—实现指针上移。

5.利用条件判断语句if和中间变量temp,将最大的数存放在数组的第一个数组元素中,最小的数存放在第三个数组元素中。

6.在循环语句for中,若初值大于终值,则步长要为负数,循环控制变量的值依次递减直到小于终值才退出循环。

7.如果在实验中碰到任何问题,请向实验老师寻求帮助。

强化练习