**
数组、指针、结构体
**
【实验目的、要求】
(1)熟悉VC++的上机环境,掌握VC++语言的编程过程
(2)指针地址的使用
【实验内容】
书本上P10的实验
【实验环境】(含主要设计设备、器材、软件等)
运行VC++的电脑一台;
【实验步骤、过程】(含原理图、流程图、关键代码,或实验过程中的记录、数据等)
本次实验进行编写了三个不同的小程序。
编写程序的思路由数据结构的三个方面构成:
程序一:
(1)原理
(2)流程图
(3)关键代码
① 定义操作,构造函数fun()实现功能
void fun(int (*t)[N], int m)//使用数组指针建立一个一维数组
{
int i, j;
for (i = 0; i < N; i++)//每一行都需进行以下移步操作
{
for (j = N - 1 - m; j >= 0; j--)
t[i][j + m] = t[i][j];//依照从后往前的顺序依次赋值
for (j = 0; j < m; j++)
t[i][j] = 0;//被移后前面的数为0
}
}
② 录入m的数值时,用scanf_s()代替scanf()
scanf_s("%d", &m);//此处使用了scanf_s代替了scanf,但是scanf()在读取时不检查边界,所以可能会造成内存泄露
③ 打印数值
for (i = 0; i < N; i++)//用嵌套循环打印数组,按行打印
{
for (j = 0; j < N; j++)
printf("%2d", t[i][j]);//打印时每个数据占两个字节,美观
printf("\n");
}
(4)实验过程中的记录
程序二:
(1)原理
(2)流程图
(3)关键代码
1.定义操作,构造函数fun()实现功能
void fun(float* p, float* q, float* s)
{
float k;
if (*p<*q)/*比三次,先最大和做小比,确保*p>*k;*p与*s比,确保*p>*s,*q与*s比确保*q>*s*/
{
k = *p; *p = *q; *q = k;
}
if (*p<*s)
{
k = *p; *p = *s; *s = k;
}
if (*q<*s)
{
k = *q; *q = *s; *s = k;
}
}
(4)实验过程中的记录
程序三:
(1)原理
(2)流程图
(3)关键代码
a.定义结构体
typedef struct ss {
char num[10];
int s;
}SS;//声明和定义相结合的方式,可以省去标识
b.用数组存储结构体,实现教务系统的存储和管理
SS a[N] = { {“A01”,81},{“A02”,83}, {“A03”,41}, {“A04”,53}, {“A05”,97}, {“A06”,55}, {“A07”,87}, {“A08”,58}, {“A09”,80}, {“A010”,70} };
c.构造fun函数实现排序运算
void fun(SS *a[], SS* t)//用t作为媒介,每个数都跟t作比较,较小的传给t
{
int i;
//(1)初始化*t,并且使用strcpy函数将一个num赋给另外一个num
t->s = a[0]->s;
strcpy(t->num, a[0]->num);
//(2)初始化后,用一个for循环进行比较大小
for (i = 0; i < N; i++)
{
if(t->s < a[i]->s)
strcpy(t->num, a[i]->num);//strcpy为复制函数将后一个参数的值传给前一个参数
t->s = a[i]->s;
}
}
【实验结果或总结】(对实验结果进行相应分析,或总结实验的心得体会,并提出实验的改进意见)
实验一:
1.使用数组指针来表示一个NN的数组,方便使用和更改,可以实现在各维度上的多位数组的数据储存,可方便的根据实际需求更改。
2.数组指针和指针数组虽然有很大的便利,但是对于自己目前阶段理解起来仍有困难和阻碍
3.显示数组中的元素时一般使用for循环,多维数组使用嵌套循环打印数组。
实验二:
4.指针是一个内存单元存储着另一个内存单元的地址(一个人家放着别人家的钥匙)
5.在实验过程中多次出错均是因为指针的加与否,多次实验有了如下总结
6.比较大小的时候使用while循环,先最大的与最小的比较,再中中间的q依次比较,这样只需比较3次即可得出结论
实验三:
- 结构体的主要目的是封装,方便再次使用,使用时不必关心这是什么,只要根据定义使用即可。
- 可以使用数组存储多个结构体从而形成系统
指导老师签名:
20 年 月 日
【备注】