一、实验目的
(一)掌握指针的概念,会定义和使用指针变量;
(二)了解或掌握指针与数组的关系,指针与数组有关的算术运算、比较运算。
(三)学会用指针作为函数参数的方法。
二、预习要求
(一)地址和指针的概念;
(二)数组和指针的关系;
(三)字符串和指针的关系;
(四)函数的定义、函数类型、函数参数、函数调用的基本概念。
三、实验内容
/* c10-2.c 输入两个整数,并使其从大到小输出,用指针变量实现数的比较 */ #include "stdio.h" void main() { int *p1,*p2,*p,a,b,c; scanf("%d %d",&a,&b); p1=&a; p2=&b; p=&c; if(*p1<*p2) { *p=*p1,*p1=*p2,*p2=*p; } printf("a=%d,b=%d\n",a,b); printf("max=%d,min=%d\n",*p1,*p2); }
(2)输入数据:5,9
(3)结果输出:a=9,b=5;max=9,min=5
/* c10-3.c 输入两个整数,并使其从大到小输出,用函数实现数的交换*/ #include "stdio.h" void main() { int as(int *p1,int *p2); int a,b,*p,*q; scanf("%d %d",&a,&b); p=&a; q=&b; if(*p<*q) { as(p,q); } printf("a=%d b=%d\n",a,b); printf("max=%d min=%d\n",*p,*q); } int as(int *p1,int *p2) { int t; t=*p1; *p1=*p2; *p2=t; }
(2)输入数据:5,9
(3)结果输出:a=9,b=5;max=9,min=5
(4) 如果将 swap 函数修改为如下形式,分析如何调试和修改?
void swap(int *p1, int *p2) { int *p; *p=*p1; *p1=*p2; *p2=*p; }
用指针法输入 12 个数,然后按每行 4 个数输出
(1)编程提示:定义一个整型数组和一个整型指针,这样通过数组就可以静态分配 内存空间,存储数据;然后将指针与数组相关,使指针指向与数组相同的首地址处,这样就可以通过指针或者数组都可以对存储空间加以操作。
(2)源程序:
/* c10-4.c 用指针法输入 12 个数,然后按每行 4 个数输出 */ #include "stdio.h" void main() { int a[12]={1,2,3,4,2,3,4,5,3,4,5,6}; int *p,i; p=a; for(i=0;i<12;i++) { printf("%d ",*(p+i)); if((i+1)%4==0) printf("\n"); } }
四、实验注意事项
(一)注意变量、变量的指针、变量的地址间的相互关系;
(二)注意传地址与传值的区别。
五、思考题
(一)从键盘输入十个整数,要求用冒泡法(或选择法)实现从大到小的排列输出。
#include "stdio.h" int input(int *num); int oppo(int *num); int output(int *num); void main() { int num[10]; input(num); oppo(num); output(num); } int input(int *num) { int i; printf("请输入10个数字:"); for(i=0;i<10;i++) scanf("%d",&num[i]); } int oppo(int *num) { int i,temp; int *max,*min,*p; max=min=num; for(p=num;p<num+10;p++) {if(*p>*max) *max=*p;} {temp=num[9]; num[9]=*max; *max=temp;} for(p=num;p<num+10;p++) {if(*p<*min) *min=*p;} {temp=num[0]; num[0]=*min; *min=temp;} } int output(int *num) { int i; printf("请输出10个数字"); for(i=0;i<10;i++) printf("%d ",num[i]); }
(二)将指针作为函数参数:一个数组有10个元素{1,8, 10, 2,-5, 0, 7, 15, 4, -5}, 利用指针作为函数参数编程,输出数组中最大和最小的元素值。
#include "stdio.h" void main() { int a[10]={1,8,10,2,-5,0,7,15,4,-5}; int *p,*q,i,j; p=a,q=a; for(i=0;i<10;i++) if(*p<a[i]) { *p=a[i]; } printf("max=%d\n",*p); for(j=0;j<10;j++) if(*q>a[j]) { *q=a[j]; } printf("min=%d\n",*q); }