实验八 指针的应用
一、实验目的
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;i #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;i 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; } 精彩文档 因篇幅问题不能全部显示,请点此查看更多更全内容