c语言告急

来源:百度知道 编辑:UC知道 时间:2024/06/04 11:02:45
#include<stdio.h>
struct student
{ char name[20];
double num;
float c, math, english, total;
} count[5]={{"snoopy",20071801682.0,85.0,90.0,88.0,0},{"weixiangni",20071
void main()
{ int i,j,k,n=0; struct student *p=count,*b;
for(i=0;i<5;i++)
count[i].total=count[i].c+count[i].math+count[i].english;
for(i=0;i<4;i++)
{k=i;
for(j=i+1;j<5;i++)
if(count[k].total<count[j].total)k=j;
if(k!=i)
{ b=p+i;p+i=p+k;p+k=b;}
}
printf("name\tnum\t\trank\tc\tmath\tenglish\ttotal\n");
for(i=0;i<5;i++,p++)
{ n++;
printf("%s\t%.0f\t\t%d\t%f\t%f\t%f\t%f\n",p->name,p->num,

b,p是结构体指针,结构体进行数据交换是不能这样简单的赋值的
可以把它们的内存中的数据相互复制,而达到交换的目的

可以用下面这3条语句代替那3条交换的语句:
memcpy(&b,p+i,sizeof(struct student));
memcpy(p+i,p+k,sizeof(struct student));
memcpy(p+k,&b,sizeof(struct student));
需要包含头文件:
#include<memory.h>
另外b要声明为结构体变量,而不是指针:
struct student b;

可以写p+k=b吗?
这样的话好像应该倒过来写,要不就改成k=b-p;
其实这句程序只不过是想交换i和k的值,直接{b=i;i=k;k=b}不就行了吗?

p+i=p+k;
p+k=b;
--您想表达啥意思?