admin 管理员组

文章数量: 887018


2024年2月26日发(作者:methodinfo在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 Address

x[0] 5 1245024

x[1] 9 1245028

x[2] 6 1245032

x[3] 3 1245036

x[4] 7 1245040

sum=30

[提示] 关键语句:sum=sum+*p;以及p++;

5.[目的]指针与数组

[题目内容] 编写一个函数,用于对作为参数的数组中的元素求平均值,函数以指针方式进行处理。平均值为函数的返回值。

[输入]10个实数

[输出] 平均值

[提示] 函数原型 float average(int x[],int n);关键语句:float *p;

p=x;

for(i=0;i

sum=sum+*p;

6.[目的]指针与字符串

[题目内容] 已知,char name[20]="DELHIk"; int length; char *cptr=name;

,编写程序,使用指针来确定字符串的长度。

[输入] 无

[输出] 字符串的长度

[提示]关键语句: while(*cptr!='0') cptr++; length=cptr-name;先将指针定位于字符串开始处,利用循环结构将指针移动到字符串尾部,length=cptr-name;即为字符串长度。

三、课后作业(写实验报告)

1.[目的]指针与函数

[题目内容] 使用指针作函数参数,编写用于交换两个参数值的函数。调用该函数用于对从键盘输入的两个整数进行交换。

[输入] x=100,y=200

[输出] x=200,y=100

[提示] 用于交换两个参数值的函数原型为:exchange(int *a,int *b);

2.[目的]函数返回指针

[题目内容] 有函数:int *larger(int *a,int *b)

{

if(*a>*b)

return a;

else

return b;

}

和主函数:

#include

int main()

{

int *larger(int *a,int *b);

int x=10,y=20;

int *p;

p=larger(&x,&y);

printf("%dn",*p);

return 0 ;

}

运行程序,给出运行结果,并说明此程序的功能。

3.[目的]指针综合应用

[题目内容] 假设已有函数:

void swap(int *p1,int*p2)

{

int temp;

temp=*p1;*p1=*p2;*p2=temp;

}

编写程序,输入3个整数,调用swap函数,完成将3个整数按从小到大顺序输出的功能。

[输入] 3个数

[输出] 从小到大顺序输出

[提示]关键语句:

if(a>b) swap(p1,p2);

if(a>c) swap(p1,p3);

if(b>c) swap(p2,p3);

4.[目的]指针综合应用

[题目内容]一个数组中的15个值已经按升序排列存放,输入一个数,编程查找是否有该数,有显示其所在的位置,没有,显示“No Found”,通过指针实现。

5、完成程序

要求:依据题目要求,分析已给出的语句,填写空白。但是不要增行或删行,改动程序的结构。

1.以下程序通过指针实现求a数组中各元素的和,请在____________填写正确○内容。

#include

int main()

{ int a[6]={2,4,6,8,10,12};

int s, i,*p ;

s=0;

p=a;

for (i=0;i<6;i++)

_____________________//求各元素的和。

printf(“s=%dn”,s);

return 0;

}

2.下面程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输○出该字符串。

#include

int main()

{ char str[61],*p;

int i;

for (i=0;i<60;i++)

{ str[i]=getchar();

if(str[i]=='n') break;

}

str[i]='0';

p=str;

while(*p)

putchar(____________);//输出p指向单元的内容,并使得p指针指向下一下单元。

return 0;

}

3.编写一个程序,实现将任意输入的两个字符串,连接成一个字符串,在子函○数中实现连接,形参用字符指针变量,在____________填写正确内容。

#include

void mystrcat(char *pa,char *pb)

{

while(*pa!='0')pa++;//pa指向第一个字符串的尾部

while(*pb!='0')

{ }//把pb指向单元的内容

//连接在pa之后,可用一句或多句实现

*pa='0';

}

int main()

{ char a[90],b[30];

gets(a);

gets(b);

//调用函数,实现两个字符串的连接。

printf("n链接后的字符串是:%sn",a);

return 0;

}

6、调试程序

要求:分析下列程序是否正确,如有错,错在哪儿?应如何改正?如正确,运行

结果如何?上机调试之。

1.行号 #include

1. int main()

2. { int a , b ;

3. int *p ,*q ;

4. printf("请输入两个整数:");

5. scanf("%d,%d", p ,q);

6. printf("%d,%dn",a ,b);

7. printf("%d,%dn",*p,*q);

8. return 0;

9. }

2.以下程序实现求数组中的元素的和。

行号#include

int main()

1 { int a[10]={1,2,3,4,5,6,7,8,9,0};

2 int sum ,*p ;

3 sum=0;

4 p=&a;

5 while( p

6 s + = *p;

7 printf(“sum=%dn”,sum);

8 return 0;

9 }

3.以下程序的功能是:输入三个字符串,按由小到大的顺序输出;

行号#include

1 int main()

2 {

3 char str1[20],str2[20],str3[20];

4 void swap();

5 printf("Please enter three string:n");

6 gets(str1); gets(str2);gets(str3);

7 if (strcmp(str1,str2)>0) swap(str1,str2);

8 if (strcmp(str1,str3)>0) swap(str1,str3);

9 if (strcmp(str2,str3)>0) swap(str2,str3);

10 printf("n");

11 printf("%sn%sn%sn",str1,str2,str3);

12 return 0;

13 }

14 void swap(char *p1,char *p2)

15 {

17 }

char *p;

16 p=p1;p1=p2;p2=p;


本文标签: 指针 函数 字符串 程序 内容