C语言实验八指针程序设计详解.docx
《C语言实验八指针程序设计详解.docx》由会员分享,可在线阅读,更多相关《C语言实验八指针程序设计详解.docx(8页珍藏版)》请在冰豆网上搜索。
C语言实验八指针程序设计详解
实验八指针的应用
一、实验目的
1.掌握指针变量的定义和引用。
2.掌握指针与变量的程序设计方法
3.掌握指针与数组的程序设计方法
4.掌握指针与字符串的程序设计方法
5.掌握指针与函数的程序设计方法
二、实验内容
1.[目的]访问变量的地址。
[题目内容]已知,chara;intx;floatp,q;而且a=’A’;x=125;p=10.25;q=18.75;编写程序显示变量a,x,p,q的值及其地址。
[输入]无
[输出]变量a,x,p,q的值及其地址
[提示]使用运算符&,地址输出采用%u格式(因为内存地址是无符号的整数)。
#include
voidmain()
{
chara;intx;floatp,q;
a='A';x=125;p=10.25;q=18.75;
printf("%cisstoredataddr%u.\n",a,&a);
printf("%disstoredataddr%u.\n",x,&x);
printf("%fisstoredataddr%u.\n",p,&p);
printf("%fisstoredataddr%u.\n",q,&q);
}
Aisstoredataddr1245052.
125isstoredataddr1245048.
10.250000isstoredataddr1245044.
18.750000isstoredataddr1245040.
Pressanykeytocontinue
2.[目的]通过指针访问变量。
[题目内容]已知,intx,y;int*ptr;而且x=10;ptr=&x;y=*ptr;,运行下列程序,使用运算符*来访问指针所指的值。
[输入]无
[输出]x,&x、*&x,&x、*ptr,ptr、y,&*ptr、ptr,&ptr、y,&y。
[提示]地址输出采用%u格式
#include
voidmain()
{
intx,y;
int*ptr;
x=10;
ptr=&x;
y=*ptr;
printf("%disstoredataddr%u.\n",x,&x);
printf("%disstoredataddr%u.\n",*&x,&x);
printf("%disstoredataddr%u.\n",*ptr,ptr);
printf("%disstoredataddr%u.\n",y,&*ptr);
printf("%disstoredataddr%u.\n",ptr,&ptr);
printf("%disstoredataddr%u.\n",y,&y);
*ptr=25;
printf("\nNowx=%d\n",x);
}
3.[目的]练习指针表达式。
[题目内容]已知,intx,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
voidmain()
{
intx,y,a,b;
int*ptr1,*ptr2;
x=12;y=4;
ptr1=&x;
ptr2=&y;
a=*ptr1**ptr2-6;
b=(4*(-*ptr2))/(*ptr1)+10;
printf("%disstoredataddr%u.\n",x,&x);
printf("%disstoredataddr%u.\n",y,&y);
printf("%disstoredataddr%u.\n",*ptr1,ptr1);
printf("%disstoredataddr%u.\n",*ptr2,ptr2);
printf("a=%d\n",a);
printf("b=%d\n",b);
}
4.[目的]指针与数组
[题目内容]已知,int*p,sum,i;intx[5]={5,9,6,3,7};,编写程序,使用指针来计算数组中所有元素的总和。
[输入]无
[输出]
ElementValueAddress
x[0]51245024
x[1]91245028
x[2]61245032
x[3]31245036
x[4]71245040
sum=30
[提示]关键语句:
sum=sum+*p;以及p++;
#include
voidmain()
{
int*p,sum=0,i;
intx[5]={5,9,6,3,7};
p=x;
printf("ElementValueAddress\n\n");
for(i=0;i<5;i++)
{
printf("x[%d]%d%u\n",i,*p,p);
sum=sum+*p;
p++;
}
printf("sum=%d\n",sum);
}
5.[目的]指针与数组
[题目内容]编写一个函数,用于对作为参数的数组中的元素求平均值,函数以指针方式进行处理。
平均值为函数的返回值。
[输入]10个实数
[输出]平均值
[提示]函数原型floataverage(intx[],intn);关键语句:
float*p;
p=x;
for(i=0;isum=sum+*p;
#include
voidmain()
{
floataverage(floatx[],intn);
inti;
floata[10],ave;
printf("Enter10numbers:
");
for(i=0;i<10;i++)
scanf("%f",&a[i]);
ave=average(a,10);
printf("ave=%f\n",ave);
}
floataverage(floatx[],intn)
{
floatave1,sum=0.0;
inti;
float*p;
p=x;
for(i=0;isum=sum+*p;
ave1=sum/n;
returnave1;
}
6.[目的]指针与字符串
[题目内容]已知,charname[20]="DELHIk";intlength;char*cptr=name;
,编写程序,使用指针来确定字符串的长度。
[输入]无
[输出]字符串的长度
[提示]关键语句:
while(*cptr!
='\0')cptr++;length=cptr-name;先将指针定位于字符串开始处,利用循环结构将指针移动到字符串尾部,length=cptr-name;即为字符串长度。
#include
voidmain()
{
charname[20]="DELHIk";
intlength;
char*cptr=name;
printf("%s\n",name);
while(*cptr!
='\0')
{
printf("%c%u\n",*cptr,cptr);
cptr++;
}
length=cptr-name;
printf("length=%d\n",length);
}
7.[目的]指针与函数
[题目内容]使用指针作函数参数,编写用于交换两个参数值的函数。
调用该函数用于对从键盘输入的两个整数进行交换。
[输入]x=100,y=200
[输出]x=200,y=100
[提示]用于交换两个参数值的函数原型为:
exchange(int*a,int*b);
#include
voidmain()
{
voidexchange(int*a,int*b);
intx,y;
printf("Entertwointegers:
");
scanf("%d%d",&x,&y);
printf("x=%dy=%d\n",x,y);
exchange(&x,&y);
printf("x=%dy=%d\n",x,y);
}
voidexchange(int*a,int*b)
{
intt;
t=*a;
*a=*b;
*b=t;
}
8.[目的]函数返回指针
[题目内容]有函数:
int*larger(int*a,int*b)
{
if(*a>*b)
returna;
else
returnb;
}
和主函数:
#include
voidmain()
{
int*larger(int*a,int*b);
intx=10,y=20;
int*p;
p=larger(&x,&y);
printf("%d\n",*p);
}
运行程序,给出运行结果,并说明此程序的功能。
9.[目的]指针综合应用
[题目内容]假设已有函数:
voidswap(int*p1,int*p2)
{
inttemp;
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
voidmain()
{
voidswap(int*p1,int*p2);
inta,b,c;
int*p1,*p2,*p3;
printf("Enter3numbers:
");
scanf("%d%d%d",&a,&b,&c);
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",a,b,c);
}
voidswap(int*p1,int*p2)
{
inttemp;
temp=*p1;*p1=*p2;*p2=temp;
}