实验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)程序运行的结果为: