实验7 指针及其运算

合集下载

C语言实验-第七章-第九章2

C语言实验-第七章-第九章2

实验七:指针的应用【实验目的】1.掌握指针和指针变量,内存单元和地址、变量与地址、数组与地址的关系;2.掌握指针变量的定义和初始化,指针变量的引用方式;3.能正确使用数组的指针和指向数组的指针变量;【实验内容】1.填空题输入一个字符串,将其中的大写字母转换成小写字母,然后输出本程序主要是比较scanf()输入和gets()输入的区别#include <stdio.h>void main(){ char s[20];char *p=s;scanf(“%s”,p); /*注意用scanf()输入和gets()输入的区别*/while( 1 ){if( 2 ) *p=*p+ (‘a’-‘A’);p++ ;}puts ( 3 );}答案:1、*p!=’\0’2、(*p>='A')&&(*p<='Z')3、s运行结果:输入:Program输出:program输入:This is Program输出:this提示:scanf ()输入时遇到空格认为字符串结束,用gets()输入时只有遇到回车才认为字符串结束。

如键入any boy并回车,则2。

补充程序题输入15个整数存入一维数组,再按逆序重新调整该数组中元素的顺序然后再输出。

下面给出部分程序的内容,请将程序补充完整,然后上机调试。

部分程序清单如下:#include <stdio.h>void main(){ int a[15],*p1,*p2,x;for(p1=a;p1<a+15;p1++)scanf("%d",p1);for(p1=a,p2=a+14;p1<a+7;p1++,p2--){ x=*p1;*p1=*p2;*p2=x;}……}答案:for(p1=a;p1!=a+15;p1++)printf("%d ",*p1); // %d后面有一个空格运行结果:输入:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15输出:15 14 13 12 11 10 9 8 7 6 5 4 3 2 1提示:(1)在整型数组中,没有结束标志,必须依靠数组中数据元素的个数控制循环次数。

C语言实验程序、总结实验七指针

C语言实验程序、总结实验七指针

C语⾔实验程序、总结实验七指针实验七指针⼀实验⽬的 1 了解指针的概念,学会定义和使⽤指针变量。

2 掌握指针、变量和数组的关系及使⽤⽅法。

3 学会使⽤指向函数的指针变量。

⼆实验内容1 编写函数fun(float *sn,int n),其功能是:根据以下公式计算s ,计算结果通过形参sn 传回;n 通过实参传⼊,n 的值⼤于等于0。

上机运⾏并记录输⼊输出(主函数已给出)。

1217151311+?+-+-=n s fun(float *sn,int n){ 定义变量:和s,通项w ,符号f ,循环控制变量i ; /* 其中s 、f 要初始化 */ 循环求累加和s{ 改变符号; /* 由负变正或由正变负 */求通项w;累加:s+=w;}形参指针变量sn 赋值; /* 通过形参sn 传回累加和s */}main(){ float s; int n;printf("n="); scanf("%d ",&n);fun(&s,n);printf("s=%f\n ",s);}完整程序如下:#includevoid fun(float *sn,int n){ float s=0.0,w,f=-1.0;int i=0;for (i=0;i<=n;i++);{ f=(-1)*f;w=f/(2*i+1);s+=w;}*sn =s;}main(){ float s; int n;printf("n="); scanf("%d",&n);fun(&s,n);printf("s=%f\n",s);}输出结果如下图:2 想使指针变量pt1指向a和b中的⼤者,pt2指向⼩者,以下程序能否实现此⽬的?swap(int *p1,int *p2) { int *p;p=p1;p1=p2;p2=p}main(){ int a,b; int *pt1,*pt2 ;scanf("%d,%d",&a,&b);pt1=&a pt2=&b ;if(aprintf("%d,%d \n",*pt1,*pt2) ;}上机调试此程序。

c语言指针运算

c语言指针运算

c语言指针运算
C语言中的指针是一种非常重要的数据类型,它可以用来在程序中访问和操作内存地址。

指针变量存储的是内存地址,而不是具体的数值。

指针变量可以通过运算来实现对内存地址的访问和操作。

指针运算包括两种基本运算:取地址运算和指针解引用运算。

取地址运算使用&符号,它可以用来获取变量的内存地址。

指针解引用运算使用*符号,它可以用来获取指针变量所指向的内存地址上的数值。

除了这两种基本运算,C语言中还有指针加法和指针减法运算。

指针加法运算可以将指针变量加上一个整数值,以便访问指针所指向的内存地址上的下一个或前一个元素。

指针减法运算则可以将指针变量减去一个整数值,以便访问指针所指向的内存地址上的前一个或下一个元素。

指针运算在C语言中非常常见,并且被广泛应用于各种编程场景中,例如数组遍历、字符串操作、动态内存分配等。

了解指针运算的基本概念和用法,可以帮助程序员更好地理解和应用指针,提高程序的效率和可读性。

- 1 -。

C语言教材第七章指针实验

C语言教材第七章指针实验

C语⾔教材第七章指针实验第七章指针第⼀部分知识训练【知识要点】1. 地址与指针指针变量的概念:⽤⼀个变量专门来存放另⼀个变量的地址。

2. 指向变量的指针变量指针变量的形式:基类型 *指针变量名;&: 取地址运算符;*:指针运算符。

3. 指针与数组引⽤⼀个数组元素可以⽤下标法和指针法;可以⽤数组名作函数的参数。

4.指针与函数函数指针变量定义的⼀般形式为:类型说明符 (*指针变量名)();⼀个函数的返回值可以是⼀个函数。

【典型习题与解析】5. char * const p;char const * pconst char *p上述三个有什么区别?【解析】char * const p; //常量指针,p的值不可以修改;char const * p;//指向常量的指针,指向的常量值不可以改;const char *p; //和char const *p。

6. main(){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));}输出结果是什么?【解析】答案:输出:2,5*(a+1)就是a[1],*(ptr-1)就是a[4],执⾏结果是2,5。

&a+1不是⾸地址+1,系统会认为加⼀个a数组的偏移,是偏移了⼀个数组的⼤⼩(本例是5个int)。

1)&a是数组指针,其类型为 int (*)[5];⽽指针加1要根据指针类型加上⼀定的值,不同类型的指针+1之后增加的⼤⼩不同。

2)a是长度为5的int数组指针,所以要加 5*sizeof(int),所以ptr实际是a[5],但是prt与(&a+1)类型是不⼀样的(这点很重要),所以prt-1只会减去sizeof(int*) a,&a的地址是⼀样的,但意思不⼀样。

3)a是数组⾸地址,也就是a[0]的地址,&a是对象(数组)⾸地址,a+1是数组下⼀元素的地址,即a[1],&a+1是下⼀个对象的地址,即a[5]。

C语言程序设计实验报告 实验7 指针.doc

C语言程序设计实验报告 实验7 指针.doc
void e(int*m,int*n);
void main()
{
int m,n;
printf("please inputm,n\n");
scanf("%d,%d",&m,&n);
e(&m,&n);
printf("%d,%d",m,n);
}
void e(int*a,int*b)
{
int p;
p=*a;
*a=*b;
*b=p;
}
(2)运行结果
【实验7-2】用指针以及函数实现字符串的倒序输出。
(1)程序代码
#include<stdio.h>
#include<string.h>
void main()
{
char ch[100];
char *p;
int x;
gets(ch);
x=strlen(ch);
p=&ch[x-1];
void e(int a[])
{
int i,j,temp;
for(i=1;i<10;i++)
{
for(j=0;j<10-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j&#
}
void main()
{
int a[10];
int i;
printf("请输入数组元素");
for(i=0;i<10;i++)
{

实验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.输入三个整数,按由小到大的顺序输出。

C语言_实验七、指针程序设计

C语言_实验七、指针程序设计

实验七指针的应用一、实验目的1.掌握指针变量的定义和引用。

2.掌握指针与变量的程序设计方法3.掌握指针与数组的程序设计方法4.掌握指针与字符串的程序设计方法5.掌握指针与函数的程序设计方法二、实验内容1.[目的]访问变量的地址。

[题目内容]已知,char a;int x;float p,q; 而且a=’A’;x=125;p=10.25;q=18.75;编写程序显示变量a,x,p,q的值及其地址。

[输入]无[输出]变量a,x,p,q的值及其地址[提示]使用运算符&,地址输出采用%u格式(因为内存地址是无符号的整数)。

2.[目的]通过指针访问变量。

[题目内容]已知,int x,y;int *ptr; 而且x=10;ptr=&x;y=*ptr;,运行下列程序,使用运算符*来访问指针所指的值。

[输入]无[输出] x,&x、*&x,&x、*ptr,ptr、y,&*ptr、ptr,&ptr、y,&y。

[提示]地址输出采用%u格式3.[目的]练习指针表达式。

[题目内容]已知,int x,y,a,b;int *ptr1,*ptr2; 而且x=12;y=4;ptr=&x;ptr2=&y;,编写程序,当执行表达式:a=*ptr1**ptr2-6;以及:b=(4*(-*ptr2))/(*ptr1)+10;后,各变量的值分别为多少?[输入]无[输出]各变量的值。

[提示]地址输出采用%u格式4.[目的]指针与数组[题目内容]已知,int *p,sum,i; int x[5]={5,9,6,3,7};,编写程序,使用指针来计算数组中所有元素的总和。

[输入]无[输出]Element Value Addressx[0] 5 1245024x[1] 9 1245028x[2] 6 1245032x[3] 3 1245036x[4] 7 1245040sum=30[提示]关键语句:sum=sum+*p;以及p++;5.[目的]指针与数组[题目内容]编写一个函数,用于对作为参数的数组中的元素求平均值,函数以指针方式进行处理。

淮阴工学院c++实验报告实验七 指针与引用

淮阴工学院c++实验报告实验七    指针与引用

实验七指针与引用一、实验目的和要求1.掌握指针、指针变量、指针常量的基本概念;2.掌握指针与数组、指针与函数的关系及应用。

3.初步掌握引用的概念及简单应用。

二.相关知识点1.指针变量的定义,由数据类型后跟星号,再跟指针变量名组成。

2.引用值是引自所指向的实体。

3.指针与数组都可以作为参数。

三.实验内容1.题目:下面的程序中,调用了findmax()函数,该函数寻找数组中的最大元素,将该元素的下标通过参数返回,并返回其地址值,编程实现findmax()函数。

1.思路分析:2.编程如下:# include < iostream.h >int * findmax(int * array, int size, int * index);void main ( ){int a[10] = {33,91,54,67,82,37,85,63,19,68};int * maxaddr;int idx;maxaddr = findmax(a, sizeof(a)/sizeof( * a), &idx);cout<<idx<<endl<<maxaddr << endl<<a[idx] << endl;}int * findmax(int * array, int size, int * index){ int i,max;int *p;p=array;max=*array;for(i=0;i<size;i++)if(*(array+i)>max){ max=*(array+i);p=array+i;*index=i;}return p;}}3.实验结果:}2.读下列程序,将其改写为传递引用参数;将findmax()函数改写成非递归函数(重新考虑参数个数)。

# include < iostream.h>const size= 10;void findmax(int* a, int n, int i, int * pk); void main ( ){int a[size];int n = 0;cout << "请输入" << size << "个数据:";for(int i=0; i< size; i++)cin >> a[i];findmax(a, size,0, &n);cout <<"最大值为:" << a[n] << endl<<"其下标为:" << n << endl;}void findmax(int * a, int n, int i, int * pk) {if(i<n){if(a[i] >a[*pk])*pk= i;findmax(a,n,i+1,&(*pk));}}1.思路分析:2.编程如下:# include < iostream.h> const size= 10;//void findmax(int* a, int n, int i, int * pk); void findmax(int *a,int n,int i,int &pk); void main ( ){int a[size];int n=0;cout << "请输入" << size << "个数据:"; for(int i=0; i< size; i++)cin >> a[i];// findmax(a, size,0, &n);findmax(a,size,0,n);cout <<"最大值为:" << a[n] << endl<<"其下标为:" << n << endl;}/*void findmax(int * a, int n, int i, int * pk) {if(i<n){if(a[i] >a[*pk])*pk= i;findmax(a,n,i+1,&(*pk));}}*/void findmax(int *a,int n,int i,int &pk) {for(;i<n;i++)if(a[i]>a[pk])pk=i;}3.实验结果3.编制程序,将输入的一行字符加密和解密。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

要点提示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个整数排序。

(用函数和指针实现)。

相关文档
最新文档