#include <stdio.h>
#include<string.h>
typedef struct student{
char name[10];
long sno;
float score;
}STU;
int main()
{
STU a={"zhangsan",2001,95},b={"Shangxian",2002,90},
c={"Anhua",2003,95},d,*p=&d;
d=a;
if(strcmp(a.name,b.name)>0)
d=b;
if(strcmp(c.name,d.name)>0)
d=c;
printf("%1d%s",d.sno,p->name);
return(0);
}
(1)strcmp从字符串首字母开始比较,a.name的首字母“z”大于b.name的首字母"S",所以strcmp返回值>0,因此执行d=b;
(2)比较c和d的name,因为“A”小于“S”。所以d=c不执行,所以d={"Shangxian",2002,90},按照printf的输出顺序,输出就是2002Shangxian
下面是我的理解,供参考:
p结构指针首先指向结构变量d,然后第一步结构d赋值为a。
接着执行第一个if判断,判断结构a的字符串name-“zhangsan”和结构b的字符串name-“Shangxian”,
因为strcmp比较字符串的大小是逐个比较字符串的ASCII码大小,因为小写字母的ASCII码比大写字母的ASCII码都大,所以第一个if比较的结果是真,所以结构d被赋值为结构b.
然后执行第二个if判断,即执行strcmp("Anhua","Shangxian"),字符A的ASCII码是比字符S的ASCII码小的,所以第二个if判断的结果为假,不执行里面的d=c。
所以最后打印d结构的信息,因为d被赋值为结构b,所以就打印出2002Shangxian。