练习6 指针与一维数组参考答案
一、目的
1、掌握指针变量的定义和引用方法;
2、掌握用指向一维数组的指针编写应用程序的一般方法。
二、实验
1.运行程序C6_1r.C(《指导》P38实验3.6-1(1)),验证结果。
运行结果:a=13,b=10
2.运行程序C6_2r.C(《指导》P38实验3.6-1(2)),验证结果。
运行结果:2,2,2
3.运行程序C6_3r.C(《指导》P38实验3.6-1(3)),验证结果。
运行结果:1 2 3 4
4.程序修改:C6_4m.C首先使指针pa指向变量a(初值为10),然后通过pa间接访问a的方法将a的值修改为20。
程序在一对/**/之间有两个错误,请修改。
#include <stdio.h>
void main()
{int a=10,*pa;
/**/
pa=&a; /*将20赋给pa指向变量(即a)*/
*pa=20; /*将20赋给pa指向变量(即a)*/
/**/
printf("%d\n",a);
}
5.运行程序C6_5m.C,输入两个整数,观察程序能否实现功能:使用指针将两个数按降序重新存放。
如果不能实现,请修改程序实现上述要求。
#include <stdio.h>
void main( )
{int a,b,*p1=&a,*p2=&b,t;
printf("input a and b:");
scanf("%d %d",&a,&b);
if(a<b)
{t=*p1; /*应该将p1和p2指针指向的两个变量的值交换*/
*p1=*p2;
*p2=t;}
printf("a=%d,b=%d\n",a,b);
}
6.编写程序C6_6.C:用指针方法实现《指导》P39实验3.6-2(2)(将数组a中的n个数按反序存放)。
要求:
①用首地址偏移量法输入数组,用指针移动法输出数组;
②用某种指针方法实现反序存放。
#include<stdio.h>
#include<conio.h>
#define N 6
void main()
{ int a[N],i,*p=a;
int *q,temp;
/*输入数组,用首地址偏移量法*/
printf("Please input %d integers:\n",N);
for (i=0;i<=N-1;i++)
printf("Output the numbers :\n");
for (p=a;p<=a+N-1;p++) printf("%d ",*p);
printf("\n");
getch();
}
7.[书面作业]编写程序C6_7.C:用指针方法实现《教程》P191习题6.2(5)(输入10个整数存入数组a中,按从小到大的次序输出)。
解1:选择排序,用指针移动法实现
#include<stdio.h>
#define N 6
void main()
{int a[N],*p,*q,temp,*pmin;
printf("Please input %d integers:\n",N);
for(p=a;p<=a+N-1;p++) scanf("%d",p);
for (p=a;p<=a+N-1;p++) printf("%d ",*p);
printf("\n");
}
解2:选择排序,用指针偏移量法实现
#include<stdio.h>
#define N 6
void main()
{int a[N],*p=a,i,j,temp,*pmin;
printf("Please input %d integers:\n",N);
for(i=0;i<=N-1;i++) scanf("%d",p+i);
printf("Output the numbers :\n");
for(i=0;i<=N-1;i++) printf("%d ",*(p+i));
printf("\n");
}
三、编程选做(均要求用指针方法)
8.《教程》P191习题6.2(1)(输出数组元素的平均值)
9.《教程》P191习题6.2(2)(输出数组中的最大值与次最大值)
10.《教程》P191习题6.2(3)(将数组中最大值与最小值的位置互换后输出)#include<stdio.h>
#include<conio.h>
#define N 6
void main()
{ int a[N],i,*p=a;
int *pmin,*pmax,temp;
printf("Please input %d integers:\n",N);
for (i=0;i<N;i++)/
scanf("%d",a+i);
pmin=pmax=a;
for (p=a+1;p<a+N;p++)
if (*p<*pmin) pmin=p;
else if (*p>*pmax) pmax=p;
temp=*pmin;*pmin=*pmax;*pmax=temp;
printf("Output the numbers :\n");
for (p=a;p<a+N;p++)
printf("%d ",*p);
printf("\n");
getch();
}
11.[书面作业]《教程》P191习题6.2(4)(输入x,输出x在数组a中的位置,若数组a中没有值为x的元素,则输出“no found”)
注: 要求找到所有数
12.《教程》P191习题6.1(输入3个整数,按照从小到大的次序输出)
四、基础练习
《指导》P121“第6章指针”之基础练习:选择题1~9。