当前位置:文档之家› 实验7 指针及其运算

实验7 指针及其运算

实验七指针及其运算实验目的理解指针的概念,会定义和使用指针变量,掌握指针的运算规则,学会使用数组的指针和指向数组的指针变量。

要点提示1.变量在内存单元的地址称为该变量的“指针”。

2.指针变量是用来存放其它变量地址的变量。

3.指针变量定义的一般形式:类型标识符*指针变量名;4.指针运算符&(取变量地址运算符)和*(取值运算符)是互逆的运算符,右结合。

++,--,+,- 运算符是按地址计算规则进行的。

5.用指针作为函数参数,可以实现“调用函数改变变量的值,在主调函数中使用这些改变的值。

6.数组的指针是指数组的起始地址(首地址),数组元素的指针是指数组元素的地址。

数组名代表数组的首地址,是地址常量。

实验内容1.指针变量的说明,初始化和使用。

2.指针作为函数参数。

3.数组的指针和指针数组的指针变量的说明和使用4. 数组名作为函数参数实验步骤读懂并输入程序,完成填空后输出结果,(下面程序中的中文注释可以不输入)1. 输入a和b两个整数,按先大后小的顺序输出。

算法提示:不交换变量的值,而是交换两个指针变量的值,使p1指向较大的数,p2指向较小的数。

#include<iostream>using namespace std;main(){int *p1,*p2, 【】;/* 变量说明语句*/int a, b;cout<<"\n Please input a and b:";cin>>a>>b;p1=&a;p2=&b;if (a<b){ p=p1; p1=p2; p2=p;} /* p1和p2变量的值进行交换*/cout<<"max=”<<【】<<”min="<<【】<<endl;}程序运行结果:Please input a and b: 12 34【】2.输入三个整数,按由小到大的顺序输出。

用函数和指针实现。

#include<iostream>using namespace std;main(){int a,b,c;int *p1,*p2,*p3;cout<<"\nInput 3 numbers:";cin>>a>>b>>c;p1=&a; p2=&b; p3=&c;if (a>b) swap(【】); /* 函数调用*/if (a>c) swap(【】); /* 函数调用*/if (b>c) swap(【】); /* 函数调用*/cout<<"\nThe sorted numbers:”<<a<<”,”<<b<<”,”<<c<<endl;}swap(int *p1, int *p2){ int 【】;p=*p1; *p1=*p2; *p2=p;}程序运行结果:Input 3 numbers: 100 200 150The sorted numbers: 【】问答:上面程序中语句printf("\nThe sorted numbers: %d,%d,%d\n",a,b,c);是否可改为如下的语句:printf("\nThe sorted numbers: %d,%d,%d\n",*p1,*p2,*p3); _____, 请验证.3.输出数组中的数据元素。

#include<iostream>using namespace std;#define N 5main(){ int *p,i,a[N];p=a;cout<<"\nInput 5 numbers:";for (; p<a+N; p++)【】;【】; /* 修改指针变量p的值*/cout<<"\nOutput array:";for (; p<a+N; p++)cout<< *p ;}程序运行结果:Input 5 numbers: 1 3 5 7 9Output array:【】4. 在a数组中查找与x 值相同的元素的所在位置,用指针实现。

#include<iostream>using namespace std;main(){int a[6],x,i;cout<<"\nInput 5 numbers:";for (i=1; i<=5; i++) cin>>a+i; /* 读数到a[1]…a[5] */cout<<"\nInput x:";cin>>x;*a=x; i=5; /* 将x存入a[0]中*/while (x!=*(a+i))【】;if (【】)cout<<x<<"'s position is:"<<i<<endl;else cout<<x<<” Not been found!\n";}程序运行结果:Input 5 numbers: 1 3 5 7 9Input x: 33's position is 25. 有一个数组,内放5个学生成绩,求平均分,用函数实现。

#include<iostream>using namespace std;main(){ float average();static int score[5]={60,70,80,90,80}, i;float aver;printf("\nScores:");for (i=0; i<5; i++)cout<<*(score+i);aver=【】;cout<<"\nAverage score:"<<aver;}float average(int *array){int i;float aver,sum=0;for (i=0;i<5;i++)sum=sum + *(array+i);aver=sum/5;【】}程序运行结果:【】【】作业与练习一、选择题1.若有定义语句int a[5], *p=a;,则对A数组元素的正确引用是【】A)*&a[5] B)a+2 C) *(p+5) D)*(a+2)2.若有定义语句int a[5], *p=a;,则对A数组元素地址的正确引用是【】A)p+5 B)*a+1 C) &a+1 D)&a[0]二、填空1.若有以下语句static int a[]={0,1,2,3,4}, *p; p=&a[2];p=&a[2];则*--p的值是【】p=&a[2];则*p--的值是【】p=&a[2];则*p++的值是【】p=&a[2];则*++p的值是【】p=&a[2];则(*p)++的值是【】p=&a[2];则++(*p)的值是【】若p=a; 则*(p+1)的值是【】2.执行以下程序后,a的值为【】,b的值为【】main(){ int a,b,k=4,m=6, *p1=&k, *p2=&m;a=p1==&m;b=(-*p1)/(*p2)+7;cout<<“a=”<<a<<endl;cout<<“b=”<<b<<endl;}4.下列程序将数组a中的数据按逆序存放,请填空。

#include<iostream>using namespace std;#define M 8main(){ int a[M],i,j,t;cout<<"\nInput 8 numbers:\n";for (i=0; i<M; i++) cin>>a+i;i=0; j=M-1;while (i<j){ t=*(a+i);【】;*(【】)=t;i++; j--;}for (i=0; i<M; i++)cout<<*(a+i);}三、编程题1.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。

写三个函数:1)输入10个数,2)进行处理,3)输出10个数。

2.将n个数按输入时顺序的逆序排列,用函数和指针实现。

3.用选择法对10个整数排序。

(用函数和指针实现)。

相关主题