使用字符数组和实型数组分别储存学生姓名和成绩,并通过读学生成绩的排序,按照名词输出字符数组中对应的学生姓名。
#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;
}
谢谢,用二维数组看明白了,但是用指针可以吗,用我上面的应该怎么改呢?
追答很少有人用你这个方法的,一般都用结构体处理,把有关联的成员都放到结构体中,让其他人便于理解它们两者的关系,也方便处理。