文档库

最新最全的文档下载
当前位置:文档库 > C语言实验七

C语言实验七

实验7 指针

一、实验目的和要求

1.掌握指针和指针变量。

2.掌握指针与变量的关系。

3.掌握指针与数组的关系。

4.掌握指针运算。

5.掌握指向数组的指针变量的使用。

二、实验内容和步骤

1.下面的程序通过指针变量改变所指变量的值。

main()

{

int a,b,*pa,*pb,*p;

/*pa指向a*/

/*pb指向b*/

scanf("%d,%d",pa,pb);

if(*pa>*pb)

{ }/*pa和pb交换指向*/

printf("%d<=%d\n",*pa,*pb);

}

(1)该程序的主要功能是什么?

(2)分析并把程序补充完整。

(3)写出程序的运行结果。

(4)如果不改变指针指向,如何交换a、b的值,请写出程序的代码。

2.有程序如下:

#include

main()

{

int a[10];

int *p1,*p2,x,i;

for(i=0,p1=a;i<10;i++)

scanf("%d",p1+i);

for(i=0;i<10;i++)

printf("%4d",a[i]);

printf("\n");

for(p1=a,p2=a+9;p1

{

x=*p1;

*p1=*p2;

*p2=x;

}

for(i=0;i<10;i++)

printf("%4d",a[i]);

printf("\n");

}

(1)写出该程序的主要功能。

(2)指针变量的主要作用是什么?

(3)分析指针与数组的关系。

(4)写出程序的运行结果。

3.要使指针变量pt1指向a和b中的大者,pt2指向小者,以下程序能否实现此目的?swap(int *p1,int *p2)

{

int *p;

p=p1;p1=p2;p2=p;

}

main()

{

int a,b;

scanf("%d,%d",&a,&b);

pt1=&a;pt2=&b;

if(a

swap(pt1,pt2);

printf("%d,%d\n",*pt1,*pt2);

}

上机调试此程序。如果不能实现题目要求,指出原因,并修改之。

4.分析下面程序。

#include

#include

main()

{

char *p;

char ch;

printf("capital or uncapital( c )?:");

ch=getchar();

if(ch=='c')

strcpy(p,"COMPUTER");

else

strcpy(p,"computer");

puts(p);

}

调试程序,指出错误并改正。

5.分析下面程序,并写出其主要功能。

#include

void main()

{

char *str[]={"ENGLISH","MATH","MUSIC","PHYSICS","CHEMISTRY"}; char **q;

int num;

q=str;

for(num=0;num<5;num++)

printf("%s\n",*(q++));

}

6.分析下面程序。

#include

int*findmax(int *s,int t,int *k)

{

int i,*p;

p=s;

for(i=1;i

if(*p

{

}

return p;

}

main()

{

int a[10]={10,25,34,40,55,68,78,99,100,20},k,*add;

add=findmax(a,10,&k);

printf("%d,%d,%x\n",a[k],k,add);

}

(1)分析程序,写出程序的主要功能。

(2)把程序补充完整。

(3)写出指针作为函数的参数的作用。

7.编写一个函数s(a,n),其中a是一个一维整型数组,n是数组长度,通过指针求数组中的平均数。

8.利用指针编写程序,求字符串的长度。

9.输入10个实数,利用指针求其中的最大值和平均值。

10.输入10个数,将其从大到小排序。

11.假如本程序文件名为lab711,使用命令“lab711 book this hello”执行下面程序,输出结果是什么?

#include

#include

main(int argc,char *argv[])

{

void sort(char *s[],int n);

char **p;

sort(argv+1,argc-1);

for(p=argv+1;argc--;p++)

printf("%s\n",*p);

}

void sort(char *w[],int n)

{

int i,j;

char word[20];

for(i=0;i

for(j=i+1;j

if(strcmp(w[i],w[j])>0)

{

strcpy(word,w[i]);

strcpy(w[i],w[j]);

strcpy(w[j],word);

}

}

对应答案:实验7 指针

1.参考答案

(1)程序的主要功能是:从键盘上输入两个数据,并从小到大输出。

(2)补充程序如下。

main()

{

int a,b,*pa,*pb,*p;

pa=&a; /*pa指向a*/

pb=&b; /*pb指向b*/

scanf("%d,%d",pa,pb);

if(*pa>*pb)

{p=pa;pa=pb;pb=p;} /*pa和pb交换指向*/

printf("%d<=%d\n",*pa,*pb);

}

(3)运行结果

7,4↙

4<=7

(4)先定义一个临时变量temp:

int temp;

temp=*pa;*pa=*pb;*pb=temp;

2.参考答案

(1)程序的主要功能:从键盘上输入10个数据存放到一维数组中,逆序后输出。

(2)指针变量的主要作用:快速的访问数组的数据元素。

(3)分析指针与数组的关系:用指针变量指向数组,通过对指针变量的操作,来改变数组元素,方便、快捷。

(4)运行结果

1 3 56 7 8 45

2 4 5 67↙

1 3 56 7 8 45

2 4 5 67

67 5 4 2 45 8 7 56 3 1

3.参考答案

不能实现此目的。原因是因为在swap()中,只改变了指针指向,并没有对数据内容发生改变。可以将swap()函数改为:

void swap(int *p1,int *p2)

{

int temp;

temp=*p1;

*p1=*p2;

*p2=temp;

}

4.参考答案

程序的错误在于:p指针在赋值以前,没有为其分配内存空间。应该改为:

#include

#include

main()

{

char *p,array[20];

char ch;

p=array;

printf("capital or uncapital( c )?:");

ch=getchar();

if(ch=='c')

strcpy(p,"COMPUTER");

else

strcpy(p,"computer");

puts(p);

}

5.参考答案

程序的主要功能是:用字符指针数组存放5个字符串,然后用指向指针的指针p一一访问该数组,并输出所指向的字符串。

6.参考答案

(1)程序的主要功能:该程序的主要功能为从一个数组中查找出最大值,并把其在数组中的位置(从零开始)和内存地址显示出来。

(2)完整的程序如下。

#include

int *findmax(int *s,int t,int *k)

{

int i,*p;

p=s;

for(i=1;i

if(*p

{

p=s+i;

*k=i;

}

return p;

}

main()

{

int a[10]={10,25,34,40,55,68,78,99,100,20},k,*add;

add=findmax(a,10,&k);

printf("%d,%d,%x\n",a[k],k,add);

}

(3)指针作为函数的参数的作用:指针作为函数参数,可以使实参和形参有一个共同指向,对形参改变的同时也能影响实参值。

7.参考程序

float ave(int a[],int n)

{

int s=0,i;

for(i=0,p=a;i

{

s+=*p;

}

return (float)s/n;

}

8.参考程序

int strlen(char *s)

{

int d=0;

while(*s!='\0')

{

d++;

s++;

}

return d;

}

9.参考程序

#include

void find_maxave(double arr[],double *max,double *ave,int n)

{

int i;

double *p,sum=0.0;

p=arr;

for(i=0;i

{

sum+=arr[i];

if(*p

p=arr+i;

}

*max=*p;

*ave=sum/n;

}

main()

{

double a[10]={10,25,34,40,55,68,78,99,100,20},m,av;

find_maxave(a,&m,&av,10);

printf("%.2lf,%.2lf\n",m,av);

}

10.参考程序

#include

main()

{

int arr[10],i;

void sort(int a[],int n);

printf("Please enter 10 datas:"); for(i=0;i<10;i++)

scanf("%d",&arr[i]);

printf("before sorted:");

for(i=0;i<10;i++)

printf("%4d",arr[i]);

printf("\n");

sort(arr,10);

printf("after sorted:");

for(i=0;i<10;i++)

printf("%4d",arr[i]);

printf("\n");

}

void sort(int a[],int n)

{

int i,j,temp;

for(i=1;i

{

for(j=0;j

{

if(a[j]>a[j+1])

{

temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}

}

}

}

11.运行结果

book

hello

this