这个c语言题怎么做?
2个回答
展开全部
题中代码错在:结构变量是传值不是传址。
在sort中形参是结构变量,因此传递时只是传递了原变量的值。形参和实参两个结构变量地址不同。当sort实现排序,只是改变了形参stu2。而main中的stu未改变。
所以,方法1:sort将stu2的值返回,main中接收返回值。
方法2:sort形参改成指针,传地址。
代码参考如下:
void sort(struct stu_type *stu2)
{
int i,j,k,score;
for(i=0;i<2;i++)
{
k=i;
for(j=i+1;j<3;j++)
if(stu2->score[k]<stu2->score[j])
k=j;
if(k!=i)
{
score=stu2->score[i];
stu2->score[i]=stu2->score[k];
stu2->score[k]=score;
}
}
}
struct stu_type sort2(struct stu_type stu2)
{
int i,j,k,score;
for(i=0;i<2;i++)
{
k=i;
for(j=i+1;j<3;j++)
if(stu2.score[k]<stu2.score[j])
k=j;
if(k!=i)
{
score=stu2.score[i];
stu2.score[i]=stu2.score[k];
stu2.score[k]=score;
}
}
return stu2;
}
//两种方法在main中调用:
sort(&stu);
stu=sort2(stu);
在sort中形参是结构变量,因此传递时只是传递了原变量的值。形参和实参两个结构变量地址不同。当sort实现排序,只是改变了形参stu2。而main中的stu未改变。
所以,方法1:sort将stu2的值返回,main中接收返回值。
方法2:sort形参改成指针,传地址。
代码参考如下:
void sort(struct stu_type *stu2)
{
int i,j,k,score;
for(i=0;i<2;i++)
{
k=i;
for(j=i+1;j<3;j++)
if(stu2->score[k]<stu2->score[j])
k=j;
if(k!=i)
{
score=stu2->score[i];
stu2->score[i]=stu2->score[k];
stu2->score[k]=score;
}
}
}
struct stu_type sort2(struct stu_type stu2)
{
int i,j,k,score;
for(i=0;i<2;i++)
{
k=i;
for(j=i+1;j<3;j++)
if(stu2.score[k]<stu2.score[j])
k=j;
if(k!=i)
{
score=stu2.score[i];
stu2.score[i]=stu2.score[k];
stu2.score[k]=score;
}
}
return stu2;
}
//两种方法在main中调用:
sort(&stu);
stu=sort2(stu);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询