哈尔滨理工大学

软件与微电子学院

实 验 报 告

(2018-2019第一学期)

课程名称:结构化程序设计(C)
班 级:软件18- 1 班
学 号:1814010130
姓 名:张立辉

哈尔滨理工大学软件与微电子学院


实验名称:指针程序设计专 业软件工程
姓 名张立辉学 号1814010130班 级软件18-1

一、 实验目的:

掌握指针的概念,会定义和使用指针变量;
能正确使用指向数组的指针变量;
能正确使用指针作函数的参数,返回正确结果。
能正确使用指向字符串的指针变量;

二、实验内容:

上机录入书上例题、调试并执行程序:
a)教材P242-244 例8.9
b)教材P252-255 例8.14 8.15
c)教材P259-260 例8.20
教材P291 习题1-11

三、实验设备及软件环境:

计算机,Windows系统,CodeBlocks;

四、实验过程及结果:

a)教材P242-244 例8.9

#include<stdio.h>
int main()
{
    void inv(int *x,int n);
    int i,arr[10],*p=arr;
    printf("The original array:\n");
    for(i=0;i<10;i++,p++)
        scanf("%d",p);
    printf("\n");
    p=arr;
    inv(p,10);
    printf("The array has been inverted:\n");
    for(p=arr;p<arr+10;p++)
        printf(" %d",*p);
    printf("\n");
    return 0;
}

void inv(int *x,int n)
{
int *p,m,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;
}

b)教材P252-255 例8.14 8.15

#include<stdio.h>
int main()
{
    void average(float *p,int n);
    void search(float (*p)[4],int n);
    float score[3][4]={{65,67,70,60},{80,87,90,81},{90,99,100,98}};
    average(*score,12);
    search(score,2);
    return 0;
}

void average(float *p,int n)
{
    float *p_end;
    float sum=0,aver;
    p_end=p+n-1;
    for(;p<=p_end;p++)
        sum=sum+(*p);
    aver=sum/n;
    printf("average=%5.2f\n",aver);
}

void search(float (*p)[4],int n)
{
    int i;
    printf("The score of No.%d are:\n",n);
    for(i=0;i<4;i++)
        printf("%5.2f ",*(*(p+n)+i));
    printf("\n");
}

#include <stdio.h>
#include <stdlib.h>

int main()
{
    void search(float (*p)[4],int n);
    float score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
    search(score,3);
    return 0;
}
void search(float (*p)[4],int n)
{
    int i,j,flag;
    for(j=0;j<n;j++)
    {
        flag=0;
        for(i=0;i<4;i++)
            if(*(*(p+j)+i)<60) flag=1;
        if(flag==1)
        {
            printf("No.%d fails,his scores are:\n",j+1);
            for(i=0;i<4;i++)
                printf("%5.1f",*(*(p+j)+i));
            printf("\n");
        }
    }
}

教材P259-260 例8.20

#include <stdio.h>
#include <stdlib.h>

int main()
{
    void copy_string(char from[],char to[]);
    char a[]="I an a teacher.";
    char b[]="You are a student.";
    printf("string a =%s\nstring b =%s\n",a,b);
    printf("copy string a to string b:\n");
    copy_string(a,b);
    printf("\nstring a=%s\n string b=%s\n",a,b);
    return 0;
}
 void copy_string(char from[],char to[])
 {
     int i=0;
     while(from[i]!='\0')
     {
         to[i]=from[i];
         i++;
     }
     to[i]='\0';
 }

教材P291 习题1-11
1.

#include <stdio.h>
int main()
{ void swapper(int *p1,int *p2);
 int n1,n2,n3;
 int *p1,*p2,*p3;
 printf("请输入三个数:");
 scanf("%d%d%d",&n1,&n2,&n3);
 p1=&n1;
 p2=&n2;
 p3=&n3;
 if(n1>n2) swapper(p1,p2);
 if(n1>n3) swapper(p1,p3);
 if(n2>n3) swapper(p2,p3);
 printf("排序后为%d %d %d\n",n1,n2,n3);
 return 0;
 }

 void swapper(int *p1,int *p2)
  {int p;
   p=*p1; *p1=*p2; *p2=p;
  }
#include <stdio.h>
#include <string.h>
int main()
{void swapper(char *,char *);
 char str1[20],str2[20],str3[20];
 printf("请输入三个字符串:\n");
 gets(str1);
 gets(str2);
 gets(str3);
 if(strcmp(str1,str2)>0)  swapper(str1,str2);
 if(strcmp(str1,str3)>0)  swapper(str1,str3);
 if(strcmp(str2,str3)>0)  swapper(str2,str3);
 printf("排序后字符串为:\n");
 printf("%s\n%s\n%s\n",str1,str2,str3);
 return 0;
 }

 void swapper(char *p1,char *p2)
 {char p[20];
  strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);
 }
#include <stdio.h>
int main()
 { void input(int *);
   void max_min_value(int *);
   void output(int *);
   int number[10];
   input(number);
   max_min_value(number);
   output(number);
   return 0;
 }

 void input(int *number)
 {int i;
  printf("请输入10个数:");
  for (i=0;i<10;i++)
    scanf("%d",&number[i]);
  }

 void max_min_value(int *number)
 { int *max,*min,*p,temp;
   max=min=number;
   for (p=number+1;p<number+10;p++)
     if (*p>*max) max=p;
     else if (*p<*min) min=p;
   temp=number[0];number[0]=*min;*min=temp;
   if(max==number) max=min;
   temp=number[9];number[9]=*max;*max=temp;
  }

void output(int *number)
  {int *p;
   printf("排序后10个数:");
   for (p=number;p<number+10;p++)
      printf("%d ",*p);
   printf("\n");
   }
#include<stdio.h>
int main()
{
    printf("Hello Word!");
    return 0;
}
#include <stdio.h>
int main()
{
    int i,k,m,n,num[50],*p;
    printf("\n有?人n=");
    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号\n",*p);
    return 0;
}
#include <stdio.h>
int main()
{
    int length(char *p);
    int len;
    char str[20];
    printf("输入一个字符串");
    scanf("%s",str);
    len=length(str);
    printf("字符串长度为%d.\n",len);
    return 0;
}

int length(char *p)
{
    int n;
    n=0;
    while (*p!='\0')
    {
        n++;
        p++;
    }
    return(n);
}
#include <stdio.h>
#include <string.h>
int main()
{
    void copystr(char *,char *,int);
    int m;
    char str1[20],str2[20];
    printf("输入一个字符串");
    gets(str1);
    printf("从?开始复制");
    scanf("%d",&m);
    if (strlen(str1)<m)
        printf("输入一个字符串");
    else
    {
        copystr(str1,str2,m);
        printf("新的字符串%s\n",str2);
    }
 return 0;
}

void copystr(char *p1,char *p2,int m)
{
    int n;
    n=0;
    while (n<m-1)
    {
        n++;
        p1++;
    }
    while (*p1!='\0')
    {
        *p2=*p1;
        p1++;
        p2++;
    }
    *p2='\0';
}
#include <stdio.h>
int main()
{
    int upper=0,lower=0,digit=0,space=0,other=0,i=0;
    char *p,s[20];
    printf("输入一个字符串");
    while ((s[i]=getchar())!='\n') i++;
    p=&s[0];
    while (*p!='\n')
    {
        if (('A'<=*p) && (*p<='Z'))
            ++upper;
        else if (('a'<=*p) && (*p<='z'))
            ++lower;
        else if (*p==' ')
            ++space;
        else if ((*p<='9') && (*p>='0'))
            ++digit;
        else
            ++other;
            p++;
    }
    printf("大写字母%d\n小写字母%d\n空格%d\n数字%d\n其他%d\n",upper,lower,space,digit,other);
    return 0;
}
#include <stdio.h>
int main()
{
    void move(int *pointer);
    int a[3][3],*p,i;
    printf("输入一个矩阵\n");
    for (i=0;i<3;i++)
        scanf("%d %d %d",&a[i][0],&a[i][1],&a[i][2]);
    p=&a[0][0];
    move(p);
    printf("新的矩阵\n");
    for (i=0;i<3;i++)
        printf("%d %d %d\n",a[i][0],a[i][1],a[i][2]);
    return 0;
}

void move(int *pointer)
{
    int i,j,t;
    for (i=0;i<3;i++)
        for (j=i;j<3;j++)
        {
            t=*(pointer+3*i+j);
            *(pointer+3*i+j)=*(pointer+3*j+i);
            *(pointer+3*j+i)=t;
        }
}
#include<stdio.h>
int main()
{
    printf("Hello Word!");
    return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{
    void sort(char s[][6]);
    int i;
    char str[10][6];
    printf("输入10个字符串\n");
    for (i=0;i<10;i++)
        scanf("%s",str[i]);
    sort(str);
    printf("排序后\n");
    for (i=0;i<10;i++)
        printf("%s\n",str[i]);
    return 0;
}

void sort(char s[10][6])
{
    int i,j;
    char *p,temp[10];
    p=temp;
    for (i=0;i<9;i++)
        for (j=0;j<9-i;j++)
        if (strcmp(s[j],s[j+1])>0)
        {
            strcpy(p,s[j]);
            strcpy(s[j],s[+j+1]);
            strcpy(s[j+1],p);
        }
}

代码均构建并运行成功并测试多次;

四、总结:

经过本次实验,充分的认识到了自己的不足之处,以及有待改进的地方,今后会着重对该地方进行重点练习

实验成绩: 指导教师:

最后修改:2021 年 05 月 11 日
如果觉得我的文章对你有用,请随意赞赏