主题:求助,C語言結構體問題
什么鬼的
[专家分:0] 发布于 2012-05-08 16:00:00
【习题9.023】结构体类型定义如下:
struct date{int year; int month; int day;}; //定义日期结构体类型
struct student
{ char name[20];
struct date birth; //出生日期
};
结构体数组s存储了n个人的名字和出生日期。写一函数,求这n个人中年龄最大
(即出生日期最小)者的姓名。
char *oldest(student s[], int n)
{
}
就這個,我看了書也不是很明白到底結構體的賦值還有比較是什麽回事,我知道結構體相同才能賦值,找到最小級別才能比較,可是實際寫出來不斷報錯,這個煩死我了,希望大神解救,就這個題目,可以有答案和解析最好,能據例也行,萬分感謝!!
回复列表 (共7个回复)
沙发
bruceteen [专家分:42660] 发布于 2012-05-09 08:17:00
随手写的,没测试,但大体意思就是这样
[code=c]
char *oldest(student s[], int n)
{
if( n<=0 )
return NULL;
int index = 0;
for( int i=1; i<n; ++i )
{
if( s[i].birth.year < s[index].birth.year
|| (s[i].birth.year==s[index].birth.year && s[i].birth.month<s[index].birth.month)
|| (s[i].birth.year==s[index].birth.year && s[i].birth.month==s[index].birth.month && s[i].birth.day<s[index].birth.day)
{
index = i;
}
}
return s[index].name;
}
[/code]
板凳
什么鬼的 [专家分:0] 发布于 2012-05-16 17:40:00
我想問一下,這道題,怎麼將結構體用鏈錶連接?我試了好久都不行,可以解答一下么?謝謝了
日期和结构体类型定义如下:
struct date{int year; int month; int day;}; //日期结构体类型
struct student //结构体类型
{ char name[10]; //人名
struct date birth; //出生日期
};
结构体数组s存储了n个人的名字和出生日期。写一函数,由数组s中n个人
的信息及其顺序构造相应的链表。链表的结点的结构体类型定义如下:
struct studentNode //结构体类型
{ char name[10]; //人名
struct date birth; //出生日期
struct studentNode *next
};
struct studentNode *CreateLinkList(struct student s[], int n)
{
}
3 楼
fragileeye [专家分:1990] 发布于 2012-05-16 23:09:00
lz的问题就是怎么新建一个链表么?
4 楼
什么鬼的 [专家分:0] 发布于 2012-05-16 23:39:00
對的,我不明白他的意思,用循環开辟空间然后把结构体的地址赋给链表的结点,我自己这么想的,可是不对
5 楼
fragileeye [专家分:1990] 发布于 2012-05-17 11:03:00
bruceteen大哥的意思是找到一个索引,这个索引中是n个人中年龄最大的一个。然后返回姓名。
用的是结构体数组存储的,如果用链表,就得创建链表。比较的方法还是这样的。有空再留代码。
6 楼
fragileeye [专家分:1990] 发布于 2012-05-18 12:29:00
还有就是不太明白这个struct studentNode *CreateLinkList(struct student s[], int n)
struct student s[]。这个结构数组都有了,还建立链表干么额?
7 楼
fragileeye [专家分:1990] 发布于 2012-05-18 13:03:00
[code=c]
struct studentNode *CreateLinkList( struct student s[], int n )
{
int i = 0;
struct studentNode *head, *temp_p, *temp_q ;
head = temp_p = temp_q = NULL;
temp_p = head = (struct studentNode *)malloc( sizeof( struct studentNode ) );
memset( head, 0, sizeof(struct studentNode) );
for( i = 0; i < n; ++i )
{
temp_q = ( struct studentNode * )malloc( sizeof( struct studentNode ) );
strcpy( temp_q->name, s[i].name );
temp_q->birth = s[i].birth;
temp_p->next = temp_q;
temp_p = temp_q;
}
temp_p->next = NULL;
return head;
}
/*char *oldest( student s[], int n )*/ //建立链表了就不需要这么传递参数了,如果非要用链表来做
char *oldest( struct studentNode *head )
{
struct student stu_node = {
{ 0 },
{ 2012, 12, 31 }
};
struct studentNode *temp, *rec;
temp = rec = NULL;
if( head == NULL )
{
return NULL;
}
temp = head->next;
while( temp != NULL )
{
if( temp->birth.year < stu_node.birth.year \
|| (temp->birth.year==stu_node.birth.year && temp->birth.month<stu_node.birth.month) \
|| (temp->birth.year==stu_node.birth.year && temp->birth.month==stu_node.birth.month && temp->birth.day<stu_node.birth.day ))
{
stu_node.birth = temp->birth;
rec = temp;
}
temp = temp->next;
}
return rec->name;
}
[/code]
我来回复