
实验课程名:高级语言程序设计(C)
专业班级: 学号: 姓名:
实验时间: 实验地点: 指导教师:
一、实验目的和要求
1. 通过实验进一步掌握指针的概念,会定义和使用指针变量;
2. 能正确使用数组的指针和指向数组的指针变量;
3. 能正确使用字符串的指针和指向字符串的指针变量;
4. 能正确使用指向函数的指针变量;
| 5. 了解指向指针的指针的概念及其使用方法。 |
| 二、实验内容 1、任务名称 1.上机验证以下c70101.c程序的运行结果 #include void main() { int i,j,*pi,*pj; pi=&i; pj=&j; i=5; j=7; printf("\\n%d\%d\%d\%d",i,j,pi,pj); printf("\\n%d\%d\%d\%d",&i,*&i,&j,*&j); } 运行结果 : 5 7 -34 -32 -34 5 -32 7 运行结果分析:指针的值与指针指向的变量值的区别。在VC环境下,以上运行结果中的负数是另一个值。 2、任务名称 源代码: #include void main() { int i,a[]={1,2,3},*p; p=a; /*将数组a首地址赋给指针p*/ for (i=0;i<3;i++) printf("%d,%d,%d,%d\\n",a[i],p[i],*(p+i),*(a+i)); } 运行结果:(需要截图) 运行结果分析:把数组a[3]的首地址a存入指针变量p,所以a[i]和p[i],*(p+i),*(a+i)表示数组a[3]中的元素。 3、任务名称 源代码: #include void main() { int j,a[12],*p=a; for(j=0;j<12;j++) scanf("%d",p++); p=a; for(j=1;j<=12;j++) { printf("%4d",*p++); if(j%4 == 0) printf("\\n"); } } 运行结果:(需要截图) 运行结果分析: 把数组a[12]的首地址赋给指针变量p,指针p指向数组a的第一个元素。在for循环中依次输入12个数,最后输出数组中的元素。 4、任务名称 源代码: #include void main( ) { int a,b,c,*p=&c; void sum(int ,int ,int *); void swap(int * ,int * ); scanf("%d%d",&a,&b); sum(a,b,p); swap(&a,&b); printf("sum=%d\\n",c); printf("a=%d,b=%d\\n",a,b); } void sum(int a,int b,int *c) { *c=a+b; } void swap(int *a,int *b) { int t; t=*a; *a=*b; *b=t; } 运行结果:(需要截图) 运行结果分析: 输入两个整型数给变量a,b,指针p指向整型变量c,调用函数sum,把实参中的a,b传给形参a和b,实参p和形参c指向同一个变量,把a,b之和赋给p所指的变量c。然后调用swap函数使变量a和b的值交换。 5、任务名称 源代码: #include int table[10]; void lookup(int *t,int *a,int n) { int k; *a=t[0]; for(k=1;k } void main() { int k,min,*p=&min; for (k=0;k<10;k++) scanf("%d",table+k); lookup( table , p ,10); printf("min=%d\\n",min); } 运行结果:(需要截图) 运行结果分析:函数lookup的功能是找到数组t中的最小值并把他赋给指针变量a所指向的变量。在主函数中输入是个整数到数组table[10],调用lookup函数找到最小值,然后输出最小值。 6、任务名称 源代码: #include void main() { int a[5][5]={0},*p[5],i,j; for(i=0;i<5;i++) p[i]= (1) ; for(i=0;i<5;i++) { *(p[i]+ (2) )=1; *(p[i]+5- (3) )=1; } for(i=0;i<5;i++) { for(j=0;j<5;j++) printf("%2d",p[i][j]); (4) ; } } (1) A.&a[i][0] B.&a[i][1] C.&p[i] D.&a[0][i] (2) A.0 B.1 C.i D.(i+1) (3) A.0 B.1 C.i D.(i+1) (4) A.putchar("\\n"); B. putchar('\\n'); C. putchar(\\n); D.printf('\\n'); 答:A,C,D,B 运行结果:(需要截图) 运行结果分析:首先要清楚二维数组与指针的结合运用时,注意指针所指向的是数组的第一个元素的地址;其次要注意数组指针的概念和使用,弄清楚指针指向的是什么,也要清楚指针使用时的规则。 7、任务名称 源代码: #include void main() { void fun(int *,int *,int ); int a[5]={4,6,8,10,12},s=1,*p=&s; fun(a,p,5); printf("%d\\n",s); } void fun(int *a,int *s,int n) { int i; for (i=0;i } 运行结果:(需要截图) 运行结果分析:指针变量p指向变量s,fun函数的功能是求出一个数组所有元素的乘积,并赋给形参s指向的整型变量。这样p所指的变量c的值就是数组a[5]中元素的乘积。最后输出c。 |
| 三、结论 通过本次实验,我进一步掌握指针的概念,会定义和使用指针变量;.学会了使用数组的指针和指向数组的指针变量;掌握了字符串的指针的使用方法以及指向字符串的指针变量和指向函数的指针变量的使用方法了解指向指针的指针的概念及其使用方法。 |
