实验八指针
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上机实验八指针
一.目的要求
1.掌握指针的基本概念。
2.掌握指针变量的定义和初始化。
二.实验内容
【实验题1】程序填空,交换指针p1,p2所指向的变量。
# include
void main ( )
{ int a=1,b=2, *p1, *p2, *pt;
p1=&a; p2=&b;
printf(“p1=%d, p2=%d \n”, p1,p2);
//交换指针变量p1,p2所指向的变量
pt= p1; p1=p2 ; p2=pt; //注意:这三个指针变量前均无间接引用符* printf(“p1=%d, p2=%d \n”, p1,p2);
}
运行结果:(注意:输出的是p1、p2所指变量的地址,即变量a或b的地址)
【实验题2】程序填空,交换指针p1,p2所指变量的值。
# include
void main ( )
{ int a=1,b=2, *p1, *p2, temp;
p1=&a; p2=&b;
printf(“*p1=%d, *p2=%d \n”, *p1,*p2);
//交换p1,p2所指向的变量的值
temp= *p1 ; *p1= *p2 ; *p2= temp ; //注意:temp是普通变量,而指针p1,p2前均使用间接引用符* printf(“*p1=%d, *p2=%d \n”, *p1,*p2);
}
运行结果:(注意:指针前加*, 代表指针所指变量)
【实验题3】程序填空:输入三个整型变量i,j,k的值。请设置三个指针变量p1,p2,p3,分别指向i,j,k。然后通过p1,p2,p3使i,j,k三个变量的值依次交换,即原来i的值赋给j, 原来j的值赋给k, 原来k的值赋给i。输出交换后i,j,k的值。
i j
k
分析:三个值轮换跟两个值互换是一样的原理,在变量被赋新值之前必须保证原值已经被保存。设temp 为临时变量,则temp=i; i=k; k=j; j=temp ,参考以上做法,轮换时要求用指针p1,p2,p3来替代i,j,k. 源程序:
#include
void main ( )
{ int i,j,k,temp, *p1=&i ,*p2=&j ,*p3=&k ;
printf("Input i j k: "); scanf("%d%d%d",&i,&j,&k); //输入i j k
//i-->j-->k-->i
temp=*p1 ;
*p1= *p3 ;
*p3= *p2 ;
*p2 = temp;
printf("%d %d %d \n", *p1,*p2, *p3);//输出轮换后的i j k
}
输入:1 2 3
输出:3 1 2
【实验题4】程序填空:输入三个整数,要求设计2个指针变量p1,p2 ,使p1指向这三个数的最大值,p2指向最小者 ,并输出最大值和最小值。
# include
void main ( )
{ int a,b,c, *p1, *p2, *p3;
scanf(“%d%d%d”,&a,&b,&c);
// 令p1指向最大值
p1=a>b? &a: &b ; //p1指向a,b中较大者
if(c> *p1 ) p1=&c;
//令p2指向最小值
p2=a
if(c< *p2 ) p2=&c;
printf(“max=%d, min=%d”, *p1,*p2 );
}
运行结果:输入1 2 3
输出max=3, min=1
【实验5】程序设计(冒泡排序):输入8个实数,要求用冒泡法将这8个实数按降序排列,输出排序结果。# include
void main ( )
{ double a[8], temp, *p,*q;
//输入数组
printf(" Input 8 doubles:\n");