结构推理 指针
   1.实验目的
   ①通过实验进一步掌握指针的概念,会定义和使用指针变量。
   ②能正确使用数组的指针和指向数组的指针变量。
   ③能正确使用字符串的指针和指向字符串的指针变量。
   ④能正确使用指向函数的指针变量。
   ⑤了解指向指针的概念及其使用方法。
   2.实验内容
   编程序并上机调试运行程序(都要求用指针处理)。
   ①输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
   ②有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。
   ③有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
   ④编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数求1/1+1/3+…+1/n(利用指针函数)。
【正确答案】实验内容
   ①main()
   {
   int nurnber[10];
   input(number);
   max_min(number);
   output(number);
   }
   input(number)
   int number[10];
   {inti;
   for(i=0;i<9;i++)
     scanf("/%d,",&number[i]);
     scanf("/%d",&number[9]);
   }
   max_min(array)
   int array[10];
   {int*max,*min,k,1;
   int*p,*art_end;
   art end=array+10;
   max=min=array;
   for(p=array+1;p<arr_end;p++)
     if(*p>*max)max=p;
     else if(*p<*min)min=p;
     k=*max;
     l=*min;
     *p=array[0];array[0]=l;l=*p;
     *p=array[9];array[9]=k;k=*p;
     return;
   }
   output(array)
   int array[10];
   { int*p;
   for(p=array;p<array+9;p++)
     printf("/%d,",*p);
   printf("/%d\n",array[9]);
   }
   ②main()
   {
   int number[20],n,m,i;
   printf("the total numbers is:");
   scanf("/%d",&n);
   printf("back m:");
   scanf("/%d",&m);
   for(i=0:i<n-1:i++)
     scanf("/%d,",&number[i]);
   scanf("/%d",&number[n-1]);
   move(number,n,m);
   for(i=0;i<n-1;i十+)
     printf("/%d,",number[i]);
   printf("/%d",number[n-1]);
   }
   move(array,n,m)
   int n,m,array[20];
   {
   int*p,array_end;
   array_end=*(array+n-1);
   for(p=array+n-1;p>array;p--)
     *p=*(p-1);
     *array=array_end
     m--;
     if(m>0)move(array,n,m);
   }
   ③#define nmax 50
   main()
   {
   int i,k,m,n,num[nmax],*p;
   printf("please input the total of numbers:");
   scanf("/%d",&n);
   p=num;
   for(i=0;i<n;i++)
     *(p+i)=i+1;
     i=0;
     k=0;
     m=0;
     while(m<n-1)
     {
     if(*(p+i)!=0)k++;
     if(k==3)
     {*(p+i)=0;
     k=0;
     m++;
     }
   i++;
   if(i==n)i=0;
   }
   while(*p=0)p++;
   printf("/%d is left\n",*p);
   }
   ④#include"stdio.h"
   main()
   {
   floatpeven(),podd(),dcall();
   float sum;
   intn;
   while(1)
   {
     scanf("/%d",&n);
     if(n>1)
       break;
   }
   if(n/%2==0)
   {
     printf("Even=");
     sum=dcall(peven,n);
   }
   Else
   {
     printf("Odd=");
     sum=dcall(podd,n);
   }
   printf("/%f",sum);
   }
   floatpeven(int n)
   {
   float s;
   int i;
   s=0;
   for(i=2;i<=n;i+=2)
     s+=1/(float)i;
   return(s);
   }
   floatpodd(n)
   int n;
   {
   float s;
   int i;
   s=0;
   for(i=1;i<=n;i+=2)
     s+=1/(float)i;
   return(s);
   }
   float dcall(fp,n)
   float(*fp)();
   int n;
   {
   float s;
   s=(*fp)(n);
   return(s){
   }
【答案解析】