c语言数组排序问题

使用字符数组和实型数组分别储存学生姓名和成绩,并通过读学生成绩的排序,按照名词输出字符数组中对应的学生姓名。
#include<stdio.h>
#include<string.h>
main()
{
char *cName[5],**p;
float fScore[5],fMin;
int i,j,iPos;
printf("输入学生的姓名和成绩:\n");
for(i=0;i<5;i++)
{
printf("cName[%d]是:",i);
scanf("%s",&cName[i]);
printf("成绩为:");
scanf("%f",&fScore[i]);
}
for(i=0;i<5;i++)
{ fMin=fScore[i];
iPos=i;
p=cName+i;
for(j=i+1;j<5;j++)
{
if(fScore[j]<fMin)
{
fMin=fScore[j];
iPos=j;
}

}
fScore[iPos]=fScore[i];
fScore[i]=fMin;

cName[i]=cName[iPos];
cName[iPos]=p;

}
printf("成绩由低到高的顺序为:\n");
for(i=0;i<5;i++)
{

printf("%s的成绩为%f\n",cName[i],fScore[i]);
}

}
请问哪里出了问题,为什么输入完数据就执行不了了?

#include
#include
int main(void)
{
char cName[5][10],temp[10];
float fScore[5],ftemp;
int i,j,k;
printf("输入学生的姓名和成绩:\n");
for(i=0;i<5;i++)
{
printf("cName[%d]是:",i);
scanf("%s",cName[i]);
printf("成绩为:");
scanf("%f",&fScore[i]);
}
for(i=0;i<5;i++)
{
k=i;
for(j=i+1;j<5;j++)
if(fScore[k]>fScore[j])
{
k=j;}

if(k!=i)

{ strcpy(temp,cName[i]);
strcpy(cName[i],cName[k]);
strcpy(cName[k],temp);
ftemp=fScore[i];
fScore[i]=fScore[k];
fScore[k]=ftemp;
}
}
printf("成绩由低到高的顺序为:\n");
for(i=0;i<5;i++)
{

printf("%s的成绩为%f\n",cName[i],fScore[i]);
}
return 0;

}

追问

谢谢,用二维数组看明白了,但是用指针可以吗,用我上面的应该怎么改呢?

追答

很少有人用你这个方法的,一般都用结构体处理,把有关联的成员都放到结构体中,让其他人便于理解它们两者的关系,也方便处理。

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-02-23
意思是把你要插入的数跟数组中的元素比较,因为插入前已经排序了,所以要插入的数字直接跟数组从后面开始比较,如果要插入的数比数组中的数要小,则吧数组元素往后移动,直到比数组元素大则插入后面
第2个回答  2019-06-24
1、数组A,B直接读取到C中,然后二分查找;
2、对位替换,构成有序C数组序列;
3、输出
相似回答