C语言用一维数组,输入学生成绩和姓名,将成绩从高到低排序,对姓名做相应的调整,输出排序后的成绩姓名
C语言用一维数组,输入学生成绩和姓名,将成绩从高到低排序,对姓名做相应的调整,输出排序后的成绩姓名#include<stdio.h>#include<string.h>#...
C语言用一维数组,输入学生成绩和姓名,将成绩从高到低排序,对姓名做相应的调整,输出排序后的成绩姓名#include<stdio.h>
#include<string.h>
#define N 3
void main()
{
int i,j,a[N],t;
char b[N];
for(i=0;i<N;i++)
{
scanf("%d\n",&a[i]);
gets(b[i]);
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
if(a[j]<a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
strcpy(p,b[j]);
strcpy(b[j],b[j+1]);
strcpy(b[j+1],p);
}
}
for(i=0;i<N;i++)
printf("%s%d\n",b+i,a[i]);
}这个哪里错了 展开
#include<string.h>
#define N 3
void main()
{
int i,j,a[N],t;
char b[N];
for(i=0;i<N;i++)
{
scanf("%d\n",&a[i]);
gets(b[i]);
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
if(a[j]<a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
strcpy(p,b[j]);
strcpy(b[j],b[j+1]);
strcpy(b[j+1],p);
}
}
for(i=0;i<N;i++)
printf("%s%d\n",b+i,a[i]);
}这个哪里错了 展开
2个回答
展开全部
一维数组 按你理解应该怎么存储多个名字?
一维char是一个连续的字符串 所以你使用b[i]访问他的时候 只能读取或写入一个字符 而名字是有多个字符组成的。
用一维数组表示字符串是比较麻烦的 你可以先定义一个大的char数组
比如 char b[最大名字个数*10]
然后 再
for(int i=0;i<3;i++){
scanf("%s",&b[i*10]);//每一次循环向后移动10个字符位置
}
然后说一下 你gets(b[i]) 函数应该传char* 也就是字符指针 而不是字符 应该是 &b[i]
再就是没有看到声明p变量
最后查一下排序有没有问题吧
一维char是一个连续的字符串 所以你使用b[i]访问他的时候 只能读取或写入一个字符 而名字是有多个字符组成的。
用一维数组表示字符串是比较麻烦的 你可以先定义一个大的char数组
比如 char b[最大名字个数*10]
然后 再
for(int i=0;i<3;i++){
scanf("%s",&b[i*10]);//每一次循环向后移动10个字符位置
}
然后说一下 你gets(b[i]) 函数应该传char* 也就是字符指针 而不是字符 应该是 &b[i]
再就是没有看到声明p变量
最后查一下排序有没有问题吧
展开全部
#include<stdio.h>
#include<string.h>
#define NUM 5
main()
{
int i,j;
char name[NUM][10],stmp[10];
float score[NUM],tmp;
printf("输入姓名和成绩:\n");
for(i=0;i<NUM;i++)
scanf("%s%f",name[i],&score[i]);
for(i=0;i<NUM-1;i++)
for(j=i+1;j<NUM;j++)
if(score[i]<score[j])
{tmp=score[i];
score[i]=score[j];
score[j]=tmp;
strcpy(stmp,name[i]);
strcpy(name[i],name[j]);
strcpy(name[j],stmp);
}
printf("排序为:\n");
for(i=0;i<NUM;i++)
printf("%.10s%f\n",name[i],score[i]);
}
#include<string.h>
#define NUM 5
main()
{
int i,j;
char name[NUM][10],stmp[10];
float score[NUM],tmp;
printf("输入姓名和成绩:\n");
for(i=0;i<NUM;i++)
scanf("%s%f",name[i],&score[i]);
for(i=0;i<NUM-1;i++)
for(j=i+1;j<NUM;j++)
if(score[i]<score[j])
{tmp=score[i];
score[i]=score[j];
score[j]=tmp;
strcpy(stmp,name[i]);
strcpy(name[i],name[j]);
strcpy(name[j],stmp);
}
printf("排序为:\n");
for(i=0;i<NUM;i++)
printf("%.10s%f\n",name[i],score[i]);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询