内容发布更新时间 : 2024/11/16 8:26:22星期一 下面是文章的全部内容请认真阅读。
上机实验九 指针
一.目的要求
1. 掌握指针的基本概念。 2. 掌握指针变量的定义和初始化。
二.实验内容
【实验题1】程序填空,交换指针p1,p2所指向的变量。
# include
{ 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
{ int a=1,b=2, *p1, *p2, temp; }
//交换p1,p2所指向的变量的值
temp= *p1 ; *p1= *p2 ; *p2= temp ; //注意:temp是普通变量,而指针p1,p2前均使用间接引用符* printf(“*p1=%d, *p2=%d \\n”, *p1,*p2); p1=&a;
p2=&b;
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
{ int i,j,k,temp, *p1= &i ,*p2= &j ,*p3= &k ; printf(\ scanf(\//输入i j k //i-->j-->k-->i temp= *p1 ; *p1= *p3 ; *p3= *p2 ; *p2 = temp; printf(\ //输出轮换后的i j k }
输入:1 2 3 输出:3 1 2
【实验题4】程序填空:输入三个整数,要求设计2个指针变量p1,p2 ,使p1指向这三个数的最大值,p2指向最小者 ,并输出最大值和最小值。
# include
{ 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
运行结果:输入 1 2 3 输出 max=3, min=1
【实验5】程序设计(冒泡排序):输入8个实数,要求用冒泡法将这8个实数按降序排列,输出排序结果。 # include
{ double a[8], temp, *p,*q;
或者 for( i=0; i<7; i++) //输入数组
for( j=0; j<7-i; j++) printf(\
if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } for( p=a; p //冒泡法 for(q=a+7; q>a; q--) for (p=a; p Part 2: 指针与数组 【实验题1】程序填空:请用下标、数组名、指针等不同方法来输出数组元素。 方法1:用下标引用数组元素,源程序如下: 方法2: 用数组名引用数组元素,源程序如下: #include void main ( ) { int i, a[5]={1,2,3,4,5}; { int i, a[5]={1,2,3,4,5}; for( i=0 ; i<5 ; i++ ) for( i=0 ; i<5 ; i++ printf(\ \ a[i] ); printf(\ \ *( a+i ) ); printf(\ printf(\} } 方法3: 用指针和下标引用数组元素,源程序如下: 方法4: 用指针引用数组元素,源程序如下: #include void main ( ) { int i, a[5]={1,2,3,4,5}, *p; { int a[5]={1,2,3,4,5}, *p; for( p=a , i=0 ; i<5 ; i++ ) for( p=a ; p< a+5 ; p++ ) printf(\ \ *( p+i )或 p[i] ); printf(\ \ *p ); printf(\ printf(\} } 【实验题2】程序填空:利用指针,将数组a中的10个整数按相反顺序存放.源程序如下: #include { int i,t, a[10],*p,*q; printf(\ for(i=0; i<10; i++) scanf(\*(p+1) ) {temp=*p; *p=*(p+1); *(p+1)=temp;} //输出排序后的数组 printf(\ for( p=a; p