数据结构实验报告-c语言结构体与指针.doc
文本预览下载声明
《数据结构:C语言结构体与指针》
实验报告
学生姓名 学生班级 学生学号 指导老师
实验内容:
1) 学生信息的显示,具体要求如下:
???定义一个结构体描述学生信息(学号,姓名,性别,年龄,住址);
???设计一个函数,用于显示单个学生信息,函数的参数为前面定义的结构体类型;
???设计一个主函数,在主函数中输入学生的信息,并调用前面定义的函数进行显示(学生人数不少于5人)。
2) 输入若干个整数作为数组元素值,然后按输入时顺序的就地逆置排序,最后打印出逆置后的元素值。要求用指针和动态内存分配方法实现。例如 输入:10 2 30 4 5,逆置后显示为:5 4 30 2 10。
需求分析
通过结构体和for()来实现学生数据的输入输出,即学号,名字,年龄和性别,并对相关选项判别。
概要设计
本系统通过菜单选项方式,让用户通过选择及简单的输入实现对学生成绩、学生信息的管理。每个版块有对应的功能,在学生信息管理中可以实现对学生各个信息的录入、查询、修改、删除等功能,在学生信息管理中可实现对学生姓名、学号、年龄、地址进行查询、修改、删除等。一共有5个学生的信息,进行查询类时,可以分为两种,一种是全部查询,另一种是查询输入的学号的学生的信息。
详细设计
源代码:#includestdio.h
#define N 20
#define A 30
typedef struct student{
long number;
char name[N];
char sex;
int age;
char adress[A];
}STU;
void xianshi(STU stu[]){
int j;
for(j=0;j5;j++){
printf(第%d个学生信息:\n,j+1);
printf(学号%1d,stu[j].number);
printf(姓名%s,stu[j].name);
printf(性别%c,stu[j].sex);
printf(年龄%d,stu[j].age);
printf(地址%s\n,stu[j].adress);
}
}
void main()
{
int i;
STU stu[N];
printf(请输入学号、姓名、性别、年龄、地址:\n);
for(i=0;i5;i++)
{
printf(请输入第%d个学生信息:\n,i+1);
scanf(%1d,stu[i].number);
scanf(%s,stu[i].name);
scanf(%c,stu[i].sex);
scanf(%d,stu[i].age);
scanf(%s,stu[i].adress);
}
xianshi(stu);
}
截图所示:
第二小问源代码:
#include stdio.h
#define LENGTH 11
int main(void)
{
int a[LENGTH];
/*用来表示当前调换位置的变量*/
int i,j;
/*一个辅助调换的变量*/
int tmp;
printf(逆序前为:);
/*假定初始化一个线性表*/
for(i=0;iLENGTH;i++){
a[i]=i;
printf([%d],a[i]);
}
printf(\n);
i=0;
j=LENGTH-1;
/*对调的终止条件为j比i大1(发生在偶数个元素的时候)
*或者j比i大2(发生在奇数个元素的时候)*/
while(1){
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
if(j-i==1 || j-i==2 || j-i=0){
break;
}
i++;
j--;
}
printf(逆序后为:);
for(i=0;iLENGTH;i++){
printf([%d],a[i]);
}
printf(\n);
return 0;
}
截图所示:
遇到的问题及解决方法
问题:用户不按照正常顺序操作,会出现程序报错;
解决方法:为了防止用户不按照正常的操作流程操作,不进行学生成绩的输入就进行后续操作导致的 系统报错或者弹出错误,在调用函数之前使用while循环增加一段容错代码,如果用户第一次选择的不是输入功能则提示用户选择错误并返回循环重新要求用户选择功能,直到用户输出成绩为止,跳出容错的处理循环进行正常的功能选择循环。
心得体会
在本次实验过程中,使我加深了对文件、指针、结构体等的理解,积累了很多实践经验,增强了动手能力和解决实际问题的能力
显示全部