1、实验五 指针与结构体一、实验目的1掌握指针和指针变量的概念。2掌握简单指针变量的定义和基本使用方法。3熟悉指针和一维数组的关系,掌握指向一维数组的指针变量的定义方法,熟练使用指针变量访问一维数组元素。4了解指针和二维数组的关系,了解用指针表示二维数组元素的方法。5了解指针与字符串的关系,能熟练使用指针处理字符串。6掌握结构体类型变量的定义和使用;二、实验预习1.理解为什么要引入指针,引入指针是为了解决什么问题。指针和地址之间的关系是什么?2.指针和指针变量有什么区别?3.如何理解指针的类型和变量空间存储数值的类型之间的对应关系?当指针自增时,跳过的地址为多少,与什么因素有关?4理解指向数组的指
2、针与数组名之间的联系与区别?数组名可以通过自增来实现地址空间的变化吗?5指向数组的指针和指针数组之间有什么样的区别,在定义的时候如何区分?6理解为什么要引入结构体?结构体类型和结构体变量分别指什么?三、实验内容(一)阅读并调试下列程序,根据要求给出程序结果。1用指针访问简单变量。 编程分析定义指向整型变量的指针变量,然后通过“*指针变量”的形式即可访问相应的简单变量。 参考程序/* 用指针访问简单变量的程序 */#include “stdio.h“void main()int a,b,c,temp;int *p1,*p2,*p3;printf(“请输入三个整数值(a,b,c):n“);scan
3、f(“%d,%d,%d“,p1= /* 使指针 p1 指向简单变量 a */p2= /* 使指针 p2 指向简单变量 b */p3= /* 使指针 p3 指向简单变量 c */if(*p1=p;q-) /* 元素后移 */*(q+1)=*q;*p=n; /* 插入数据 */printf(“n 插入数据后的数列:n“);for(p=a,i=0;i2) /* 闰年处理 */if(d.year%400=0|d.year%100!=0printf(“Total: %dn“,sum); 程序调试 运行程序,输入一个合法日期数据,察看并分析程序结果。 运行程序,输入一个月份非法的日期数据,察看并分析程序结
4、果。 运行程序,输入一个日子非法的日期数据,察看并分析程序结果。 完善程序,使得在任何情况下,都能输出一个合理的结果。(二)程序编制题1. 写一个程序,用指针进行操作,求 2 个整数的最大值。 2. 编一个程序,输入 n 个互不相等的整数存于数组中,并输出。程序如发现输入的数据已输入过,则要求重新输入。要求用指针实现。3. 请编写程序,判断一个字符串是否是回文。若是回文,输出“yes”,否则输出“no”。回文是顺读和倒读都一样的字符串(如 ABCBA,或者 12321 就是回文)。要求用指针实现。4定义一个结构体变量,其成员包括:职工号、姓名、工龄、工资,从键盘输入具体的数据,然后输出。四、思考题1在“用指针访问简单变量”实验中,调试程序时,给出了三组顺序不同的调试数据。请读者分析,这对调试程序有何意义。2在“用指针法在一维有序数组中插入数据”实验中,可不可以不移动数组元素而直接插入一个数据?为什么?。