实验八,指针报告(第二次)

实验二、指针与数组

一、实验目的

1、 理解指针和数组间的关系。

2、 掌握通过指针操作数组元素的方法。

3、 掌握数组名作为函数参数的编程方式。

二、实验内容

1、 完成教材实验八剩余部分。

2、 用指针实现数组元素的逆序存放。

三、实验程序

二、基础编程题

1、

#include<stdio.h>
int main(void)
{
    void sum_diff(float op1,float op2,float *psum,float *pdiff);
    float psum,pdiff;
    float op1,op2;
    scanf("%f%f",&op1,&op2);
    sum_diff(op1,op2,&psum,&pdiff);
    printf("The sum is %.0f,The diff is %.0f",psum,pdiff);
    return 0;
}
void sum_diff(float op1,float op2,float *psum,float *pdiff)
{
    *psum=op1+op2;
    *pdiff=op1-op2;
}

2、

#include <stdio.h>
int main(void)
{
    double x,fracpart;
    int intpart;
    void splitfloat (double x, int *intpart, double *fracpart);
    scanf("%lf", &x);
    splitfloat(x, &intpart, &fracpart);
    printf("The intpart is: %d\t\n",intpart);
    printf("The fracpart is:%lf\t ",fracpart);
    return 0;
}
void splitfloat (double x, int *intpart, double *fracpart)
{
    *intpart=(int)x;
    *fracpart=x-*intpart;
}

3、

#include <stdio.h>

void sort(int a[],int n)

{

    int k,t,i,j;

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

    {

        k=i;

        for(j=i+1;j<n;j++)

            if(a[k]>a[j])

            k=j;

           t=*(a+k);

           *(a+k)=*(a+i);

           *(a+i)=t;

    }

}

int main()

{

     int n,a[100],i;

     scanf("%d",&n);

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

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

        sort(a,n);

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

        printf("%d ",*(a+i));

}

4、

#include<stdio.h>

int search(int * ,int,int);

int main(void)

{

 int n,x,a[10],i;

 scanf("%d",&n);

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

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

 scanf("%d",&x);

 search(a,n,x);

 if(search(a,n,x)!=-1)

  printf("%d\n",search(a,n,x));

 else

  printf("Not found\n");

 return 0;

}

int search(int *list,int n,int x)

{

 int i;

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

  if(x==list[i])

   return i;

  return -1;

}

5、

#include<stdio.h>

#include<string.h>

void str(char *s)

{

    char temp;

    char *end = s + strlen(s) - 1;

    while (end > s)

    {

        temp = *s;

        *s = *end;

        *end = temp;

        --end;

        ++s;

    }

}

int main()

{

    char s[1000];

    gets(s);

    str(s);

    puts(s);

    return 0;

}

三、改错题

#include<stdio.h>

void mov(int *x,int n,int m);

int main()

{

    int a[80],i,m,n,*p;

    scanf("%d%d",&n,&m);

    for(p=a,i=0;i<n;i++)

        scanf("%d",p++);

    mov(a,n,m);

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

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

        return 0;

 

}

void mov(int *x,int n,int m)

{

    int i,j,k;

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

    {

        k=x[n-1];

        for(j=n-1;j>0;j--)

            x[j]=x[j-1];

            x[0]=k;

    }

}

四、拓展编程题

(1)

#include<stdio.h>

int main()

{

    int i,k,m,n,num[1000],*p;

    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("Last Number is %d\n",*p);

}

(2)

#include<stdio.h>

#include<stdlib.h>

int main()

{

    int n,i,max,min;

    float sum,ave;

    float *p;

    scanf("%d",&n);

    p=(float*)malloc(n*sizeof(float));

    for(sum=0,i=0; i<n; i++)

    {

        scanf("%f",p+i);

        sum+=*(p+i);

    }

    ave=sum/n;

    max=min=*p;

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

    {

        if(max<*(p+i))

            max=*(p+i);

        if(min>*(p+i))

            min=*(p+i);

    }

    printf("average score is :%.2f\n",ave);

    printf("maximum score :%d\n",max);

    printf("minimum scare :%d\n",min);

    free(p);

    return 0;

}

猜你喜欢

转载自blog.csdn.net/qq_40721948/article/details/79980377