实用数据结构
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

实验1 复习数组、指针、结构体

1.实验目的

(1)复习C语言数组的用法。

(2)复习C语言指针的用法。

(3)复习C语言结构体的用法。

(4)理解算法时间复杂度分析的基本方法。

(5)通过实验程序,分析它们的时间复杂度。

2.实验内容

(1)设计一个函数fun的功能是:有N×N矩阵,根据给定的m(m<N)值,将每行元素中的值均右移m个位置,左边置为0。

例如,N=3,m=2,有下列矩阵:当输入m的值为2时,程序执行结果为:

1 2 3 0 0 1

4 5 6 0 0 4

7 8 9 0 0 7

(2)使用指针设计一个函数fun的功能是:把主函数中输入的3个数,最大的放在a中,最小的放在c中。例如,输入的数为:55 12 34 ,输出结果应当是:a=55.0,b=34.0,c=12.0。

(3)学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入a结构体数组中,编写一个函数fun,它的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。

3.参考程序

(1)参考程序如下:

1   #include  <stdio.h>
2   #define  N  4
3   void fun(int (*t)[N], int m)
4   {  int i, j;
5      for(i=0; i<N; i++)    /*将矩阵左面各列向右移动m列*/
6      {  for(j=N-1-m; j>=0; j--)
7             t[i][j+m]=t[i][j];
8         for(j=0; j<m; j++)   /*将矩阵左面m列各元素设为0*/
9             t[i][j]=0;
10     }
11  }
12  main()
13  {
14  int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j,m;
15    printf("\n原始矩阵为:\n");
16    for(i=0; i<N; i++)
17    {  for(j=0; j<N; j++)
18         printf("%2d ",t[i][j]);
19      printf("\n");
20    }
21    printf("请输入要右移的位数m (m<=%d): ",N);
22    scanf("%d",&m);
23    fun(t,m);
24    printf("\n右移后的矩阵为:\n");
25    for(i=0; i<N; i++)
26    {  for(j=0; j<N; j++)
27          printf("%2d ",t[i][j]);
28       printf("\n");
29    }
30  }

(2)参考程序如下:

1   #include <stdio.h>
2   void fun(float *p,float *q,float *s)
3   {
4      float k;
5      if (*p<*q)
6      {  k=*p;*p=*q;*q=k;}
7      if (*p<*s)
8      {  k=*s;*s=*p;*p=k;}
9      if (*q<*s)
10     {  k=*q;*q=*s;*s=k;}
11  }
12  main()
13  {   float a,b,c;
14      printf("请输入三个小数 a、b和c:");
15      scanf("%f%f%f",&a,&b,&c);
16      printf("这三个数分别为:");
17      printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,c);
18      fun(&a,&b,&c);
19      printf("按从大到小排序后这三个数分别为:");
20      printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,c);
21  }

(3)参考程序如下:

1   #include <stdio.h>
2   #include <string.h>
3   #define N 10
4   typedef struct ss
5   {   char num[10];
6       int s;
7   }STU;
8
9   fun(STU a[],STU *s)
10  {
11    int i;
12    strcpy(s->num,a[0].num);
13    s->s=a[0].s;
14    for(i=0;i<N;i++)
15    {
16      if(s->s>a[i].s)
17      {
18         strcpy(s->num,a[i].num);
19         s->s=a[i].s;
20      }
21    }
22  }
23
24  main()
25  {  STU a[N]={{"A01",81},{"A02",89},{"A03",66},
26               {"A04",87},{"A05",77},{"A06",90},
27               {"A07",79},{"A08",61},{"A09",80},
28               {"A10",71}},m;
29     int i;
30     printf("********* 原始数据为 **********\n");
31     for(i=0;i<N;i++)
32          printf("学号=%s 成绩=%d\n",a[i].num,a[i].s);
33     fun(a,&m);
34     printf("*********** 结果为 ***********\n");
35     printf("最低分学生学号为:%s,成绩为%d\n",m.num,m.s);
36  }

4.参考运行结果

(1)程序运行的结果为:

(2)程序运行的结果为:

(3)程序运行的结果为: