实验十 C程序的指针(一) 一、实验目的 1. 掌握指针和指...
实验十 C程序的指针(一) 一、实验目的 1. 掌握指针和指针变量的概念。 2. 掌握简单指针变量的定义和基本使用方法。 3. 熟悉指针和一维数组的关系,掌握指向一维数组的指针变量的定义方法,熟练使用指针变量访问一维数组元素。 4. 了解指针和二维数组的关系,掌握用指针表示二维数组元素的方法。 5. 了解指针与字符串的关系,能熟练使用指针处理字符串。 二、实验内容及实验步骤 1. 用指针访问简单变量。从键盘输入三个整数,要求设三个指针变量p1,p2,p3,使p1指向三个数的最大者,p2指向次大者,p3指向最小者,然后按由小到大的顺序输出这三个数。 参考程序 /* 用指针访问简单变量的程序 */ #include "stdio.h" main() { int a,b,c,temp; int *p1,*p2,*p3; printf("请输入三个整数值(a,b,c):\n"); scanf("%d,%d,%d",&a,&b,&c); p1=&a; /* 使指针p1指向简单变量a */ p2=&b; /* 使指针p2指向简单变量b */ p3=&c; /* 使指针p3指向简单变量c */ if(*p1<*p2) 10 { temp="*p1;*p1=*p2;*p2=temp;" } * 至此p1指向了三个数中的最大数 至此p3指向了最小数,p2指向了中间数 printf("%d,%d,%d\n",*p3,*p2,*p1); ① 运行程序,任意输入三个整数(之间以逗号分隔),察看并分析程序运行结果。 ② 运行程序,按由小到大的顺序输入三个整数(之间以逗号分隔),察看并分析程序运行结果。 ③ 运行程序,按由大到小的顺序输入三个整数(之间以逗号分隔),察看并分析程序运行结果。 2. 用指针法在一维有序数组中插入数据。如下是具有10整数的升序数列,存储在一维数组中,要求在其中插入任意一个整数后数列仍然有序。数列:10,20,30,40,50,60,70,80,90,99 参考程序 用指针法在一维有序数组中插入数据程序 #include "stdio.h" #define m main() int a[m+1]="{10,20,30,40,50,60,70,80,90,99};" i,n,*p,*q; printf("请输入要插入的数据:\n"); scanf("%d",&n); a[m]="n;" for(p="a,i=0;i<=M;i++)" 确定要插入的位置p p="p+i;" p指向要插入数据的位置 break; for(q="a+M-1;q">=p;q--) /* 元素后移 */ *(q+1)=*q; *p=n; /* 插入数据 */ printf("\n插入数据后的数列:\n"); for(p=a,i=0;i<m+1;i++) 1 3 5 7 9 11 13 15 19 20 printf("%d ",*(p+i)); } 3. 用指针实现选择法排序程序。输入20个整数,并用指针实现选择法升序排序。 参考程序 * 用指针实现的选择法排序程序 #include "stdio.h" #define m main() { int a[m],n,i,j,min,temp,*p,*q; printf("请输入排序数据:\n"); for(p="a;p<a+M;p++)" 输入数据 scanf("%d",p); printf("排序前数列:\n"); ",*p); for(i="0;i<M-1;i++)" 选择法排序 q="&a[i];" temp="a[i];" a[i]="*q;" *q="temp;" printf("\n排序后数列:\n"); 输出排序结果 ① 凡是排序程序,输入数据调试时至少要包括三种情况:任意的一组数据;一组升序数据;一组降序数据。 ② 在上面的参考程序中,指针变量p在每一次的数组处理中都是变化的,不管是数组数据输入、数组数据输出、每一趟排序等,p指针总是逐步向后指向下一个元素。在编写调试程序时,指针p的指向也可以相对固定,而采用加(或减)移动量的方式指向其他的数组元素。 4. 测试、运行自己编写的程序。 将一个3*3的矩阵转置,用一函数实现之。 在主函数中用scanf函数输入以下矩阵元素: 将数组名作为函数实参,在执行函数的过程中实现矩阵转置,函数调用结束后在主函数中输出以转置的矩阵。 三、实验报告要求 写明: 1. 实验目的 2. 实验内容与步骤 编写的程序(题目,经调试、运行后正确的程序) 思考题的解决方法。 5.>