1
查找。
对于以某一项为关键字进行查找时,比如在结构体中有int型的成员a,要查找a为100的结构体变量,这时需要遍历每个结构体(数组、链表、或者其它任意形式),对每个元素的成员a值进行比较,符合的则表示查找成功。
对于结构体中元素较多,同时要对整个结构体每个元素都匹配才算查找到的特殊情况,可以使用memcmp的方式,整体进行比较,以减少代码量。不过这种情况较为少见,不过多描述。
2
输出。
对于结构体的输出,其实就是对其每一项,或者若干项成员变量的输出。
所以可以使用基本的输出函数,对每一项单独输出,输出中为了方便阅读,可以加一些说明文字。
如果对结构体输出有多处调用的需求,可以在将该功能封装为函数,供各个需要的函数调用。这样的好处是,当结构体的成员出现变化,或者结构体输出要求更改时,修改一处代码即可完成所有的输出修改,实现易于维护的效果。
trans(node) //改成trans(node)void trans(struct linknode node[8])
{int o,i,m
for(o=0o<8o++)
{for(i=0i<2i++)
{m=node[o].near[i]
for(i=0i<8i++)
{if((node[m].dtc[i]+node[o].dtc[m])<=node[o].dtc[i])
{node[o].dtc[i]=(node[m].dtc[i]+node[o].dtc[m])
node[o].path[i]=m
}
}
}
}
}
改动如下:#include <stdio.h>
#include<string.h>
enum gender
{
male,famale
}
typedef struct course
{
char coursename[10]
int coursescore
}STC
typedef struct student
{
long studentnumber
char name[20]
int age
enum gender sex
STC coursescore[3]
struct student *next
void (*ptooutput)(struct student*)// 改动1:改成指针,与output函数匹配
}STD
void output(struct student *p)
{
int i
printf("学生%s:\n",p->name)
printf("他的学号是%ld\n",p->studentnumber)// 改动2:学号
printf("他的年龄是%d\n",p->age)// 改动3:年龄
if(p->sex==0)
{printf("他的性别是男\n")}
else
{printf("他的性别是女\n")}
for(i=0i<3i++)
{
printf("他的%s",p->coursescore[i].coursename)
printf("成绩是%d\n",p->coursescore[i].coursescore)
}
}
main()
{
STD a
a.studentnumber=1011110201
strcpy(a.name,"叶超")
a.age=19
a.sex=male
strcpy(a.coursescore[0].coursename,"数学")
a.coursescore[0].coursescore=87
strcpy(a.coursescore[1].coursename,"英语")
a.coursescore[1].coursescore=72
strcpy(a.coursescore[2].coursename,"C语言")
a.coursescore[2].coursescore=66
a.ptooutput = output// 改动4:设置打印函数指针
a.ptooutput(&a)// 改动5:输入参数为指针
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)