c语言实验八指针程序设计答案.doc
实验八指针的应用一、实验目的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的值及其地址[提示]使用运算符intx;floatp,q;a= A ;x=125;p=10.25;q=18.75;printf(“%cisstoredataddr%u.\n“,a,printf(“%disstoredataddr%u.\n“,x,printf(“%fisstoredataddr%u.\n“,p,printf(“%fisstoredataddr%u.\n“,q,}Aisstoredataddr1245052.125isstoredataddr1245048.10.250000isstoredataddr1245044.18.750000isstoredataddr1245040.Pressanykeytocontinue2.[目的]通过指针访问变量。[题目内容]已知,intx,y;int*ptr;而且x=10;ptr=,运行下列程序,使用运算符*来访问指针所指的值。[输入]无[输出]x,int*ptr;x=10;ptr=y=*ptr;printf(“%disstoredataddr%u.\n“,x,printf(“%disstoredataddr%u.\n“,*printf(“%disstoredataddr%u.\n“,*ptr,ptr);printf(“%disstoredataddr%u.\n“,y,printf(“%disstoredataddr%u.\n“,ptr,printf(“%disstoredataddr%u.\n“,y,*ptr=25;printf(“\nNowx=%d\n“,x);}3.[目的]练习指针表达式。[题目内容]已知,intx,y,a,b;int*ptr1,*ptr2;而且x=12;y=4;ptr=,编写程序,当执行表达式:a=*ptr1**ptr2-6;以及:b=(4*(-*ptr2))/(*ptr1)+10;后,各变量的值分别为多少?[输入]无[输出]各变量的值。[提示]地址输出采用%u格式#includevoidmain(){intx,y,a,b;int*ptr1,*ptr2;x=12;y=4;ptr1=ptr2=a=*ptr1**ptr2-6;b=(4*(-*ptr2))/(*ptr1)+10;printf(“%disstoredataddr%u.\n“,x,printf(“%disstoredataddr%u.\n“,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};,编写程序,使用指针来计算数组中所有元素的总和。[输入]无[输出]ElementValueAddressx[0]51245024x[1]91245028x[2]61245032x[3]31245036x[4]71245040sum=30[提示]关键语句:sum=sum+*p;以及p++;#includevoidmain(){int*p,sum=0,i;intx[5]={5,9,6,3,7};p=x;printf(“ElementValueAddress\n\n“);for(i=0;ivoidmain(){floataverage(floatx[],intn);inti;floata[10],ave;printf(“Enter10numbers:“);for(i=0;ivoidmain(){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);#includevoidmain(){voidexchange(int*a,int*b);intx,y;printf(“Entertwointegers:“);scanf(“%d%d“,printf(“x=%dy=%d\n“,x,y);exchange(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;elsereturnb;}和主函数:#includevoidmain(){int*larger(int*a,int*b);intx=10,y=20;int*p;p=larger(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);#includevoidmain(){voidswap(int*p1,int*p2);inta,b,c;int*p1,*p2,*p3;printf(“Enter3numbers:“);scanf(“%d%d%d“,p1=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);}