练习6-指针与一维数组ans
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
练习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
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
void main( )
{int a,b,*p1=&a,*p2=&b,t;
printf("input a and b:");
scanf("%d %d",&a,&b);
if(a
{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
#include
#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
#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
#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
#include
#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 scanf("%d",a+i); pmin=pmax=a;