您的当前位置:首页正文

C语言实验八、指针程序设计详解

2021-07-08 来源:尚车旅游网
实用标准文案

实验八 指针的应用

一、实验目的

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格式(因为内存地址是无符号的整数)。

精彩文档

实用标准文案

#include

void main()

{

char a;int x;float p,q;

a='A';x=125;p=10.25;q=18.75;

printf(\"%c is stored at addr %u.\\n\

printf(\"%d is stored at addr %u.\\n\

printf(\"%f is stored at addr %u.\\n\

printf(\"%f is stored at addr %u.\\n\

}

A is stored at addr 1245052.

125 is stored at addr 1245048.

10.250000 is stored at addr 1245044.

精彩文档

实用标准文案

18.750000 is stored at addr 1245040.

Press any key to continue

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格式

#include

void main()

{

int x,y;

int *ptr;

x=10;

精彩文档

实用标准文案

ptr=&x;

y=*ptr;

printf(\"%d is stored at addr %u.\\n\

printf(\"%d is stored at addr %u.\\n\

printf(\"%d is stored at addr %u.\\n\

printf(\"%d is stored at addr %u.\\n\

printf(\"%d is stored at addr %u.\\n\

printf(\"%d is stored at addr %u.\\n\

*ptr=25;

printf(\"\\nNow x=%d\\n\

}

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格式

#include

void main()

{

int x,y,a,b;

int *ptr1,*ptr2;

x=12;y=4;

ptr1=&x;

ptr2=&y;

a=*ptr1**ptr2-6;

精彩文档

实用标准文案

b=(4*(-*ptr2))/(*ptr1)+10;

printf(\"%d is stored at addr %u.\\n\

printf(\"%d is stored at addr %u.\\n\

printf(\"%d is stored at addr %u.\\n\

printf(\"%d is stored at addr %u.\\n\

printf(\"a=%d \\n\

printf(\"b=%d \\n\

}

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++;

#include

void main()

{

int *p,sum=0,i;

int x[5]={5,9,6,3,7};

p=x;

精彩文档

实用标准文案

printf(\"Element Value Address\\n\\n\");

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

{

printf(\"x[%d] %d %u\\n\

sum=sum+*p;

p++;

}

printf(\"sum=%d \\n\

}

5.[目的]指针与数组

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

[输入]10个实数

[输出] 平均值

精彩文档

实用标准文案

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

p=x;

for(i=0;isum=sum+*p;

#include

void main()

{

float average(float x[],int n);

int i;

float a[10],ave;

printf(\"Enter 10 numbers: \");

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

scanf(\"%f\

精彩文档

实用标准文案

ave=average(a,10);

printf(\"ave=%f\\n\

}

float average(float x[],int n)

{

float ave1,sum=0.0;

int i;

float *p;

p=x;

for(i=0;isum=sum+*p;

ave1=sum/n;

return ave1;

精彩文档

实用标准文案

}

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

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

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

[输入] 无

[输出] 字符串的长度

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

#include

void main()

{

char name[20]=\"DELHIk\";

int length;

精彩文档

实用标准文案

char *cptr=name;

printf(\"%s\\n\

while(*cptr!='\\0')

{

printf(\"%c %u\\n\

cptr++;

}

length=cptr-name;

printf(\"length=%d \\n\

}

7.[目的]指针与函数

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

[输入] x=100,y=200

精彩文档

实用标准文案

[输出] x=200,y=100

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

#include

void main()

{

void exchange(int *a,int *b);

int x,y;

printf(\"Enter two integers:\");

scanf(\"%d%d\

printf(\"x=%d y=%d\\n\

exchange(&x,&y);

printf(\"x=%d y=%d\\n\

}

精彩文档

实用标准文案

void exchange(int *a,int *b)

{

int t;

t=*a;

*a=*b;

*b=t;

}

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

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

{

if(*a>*b)

return a;

else

精彩文档

实用标准文案

return b;

}

和主函数:

#include

void main()

{

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

int x=10,y=20;

int *p;

p=larger(&x,&y);

printf(\"%d\\n\

}

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

精彩文档

实用标准文案

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

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

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);

#include

void main()

{

void swap(int *p1,int*p2);

int a,b,c;

int *p1,*p2,*p3;

printf(\"Enter 3 numbers: \");

scanf(\"%d%d%d\

p1=&a;p2=&b;p3=&c;

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

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

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

精彩文档

实用标准文案

printf(\"%d %d %d\

}

void swap(int *p1,int*p2)

{

int temp;

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

}

精彩文档

因篇幅问题不能全部显示,请点此查看更多更全内容