实验十一 指针(二)

u    实验目的

1、通过实验进一步掌握指针的概念,会定义和使用指针变量。

2、能正确使用数组的指针和指向数组的指针变量。

3、能正确使用字符串的指针和指向字符串的指针变量。

4、能正确使用指向函数的指针变量。

5、了解指向指针的指针的概念及其使用方法。

u    预习内容

见教材第十章

u    实验重点

1、通过实验进一步掌握指针的概念,会定义和使用指针变量。

2、能正确使用数组的指针和指向数组的指针变量。

3、能正确使用字符串的指针和指向字符串的指针变量。

4、能正确使用指向函数的指针变量。

u    实验难点

1、能正确使用数组的指针和指向数组的指针变量。

2、能正确使用字符串的指针和指向字符串的指针变量。

u    实验内容

编程序并上机调试运行程序,要求都用指针实现:

1、用一个函数实现两个字符串的比较,即自己写一个strcmp函数。

2、用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。

u    参考例题

【例】将数组a中的n个整数按相反顺序存放。

算法为:将a[0]a[n-1]对换,再a[1]a[n-2] 对换……,直到将a[(n-1/2)]a[n-int((n-1)/2)]对换。今用循环处理此问题,设两个位置指示变量”iji的初值为0j的初值为n-1。将a[i]a[j]交换,然后使i的值加1j的值减1,再将a[i]a[j]交换,直到i=(n-1)/2为止,如图所示。

程序如下:

void inv(int x[],int n)   /*形参x是数组名*/

{

 int temp,i,j,m=(n-1)/2;

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

{j=n-1-i;

     temp=x[i];x[i]=x[j];x[j]=temp;}

   return;

}

main()

{int i,a[10]={3,7,9,11,0,6,7,5,4,2};

   printf("The original array:\n");

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

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

   printf("\n");

   inv(a,10);

   printf("The array has benn inverted:\n");

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

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

   printf("\n");

}

对此程序可以作一些改动。将函数inv中的形参x改成指针变量。

【例】对上例可以作一些改动。将函数inv中的形参x改成指针变量。

程序如下:

void inv(int *x,int n)   /*形参x为指针变量*/

{

   int *p,temp,*i,*j,m=(n-1)/2;

   i=x;j=x+n-1;p=x+m;

   for(;i<=p;i++,j--)

{temp=*i;*i=*j;*j=temp;}

   return;

}

main()

{int i,a[10]={3,7,9,11,0,6,7,5,4,2};

 printf("The original array:\n");

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

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

   printf("\n");

 inv(a,10);

   printf("The array has benn inverted:\n");

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

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

   printf("\n");

}

运行情况与前一程序相同。

公告通知
教学日历
疑难留言
同学你好!对本课程有哪些建议?