C语言基础结构体问题!跪求!!!

某歌星大奖赛四进三,选手有赵青、钱花、孙瓷、陈毅四人。编写程序淘汰得分最低选手,输出剩余前三选手的姓名和得分。要求用结构体表示选手信息(姓名,得分,晋级状态)
下面这个程序如何修改成 信息都是自己从 键盘输入的???
#include<string.h>
#include<stdio.h>
struct Singer
{

char name[20];
float score;
};
int main()
{
struct Singer s[5]={{"zhao",100},{"li",90},{"sun",80},{"chen",70}};
struct Singer temp;
const int n=5;
int i,j,k;
printf("晋级的三位为:\n");
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(s[j].score>s[k].score)
k=j;
temp=s[k];s[k]=s[i];s[i]=temp;
}
for(i=0;i<3;i++)
printf("%s %f\n",s[i].name,s[i].score);

return 0;
}

#include<stdio.h>
#include<string.h>
struct People
{
char name[20];
int point;
int ispromotion;
};
int main()
{
People p[4];
char *n[4]={"赵青","钱花","孙瓷","陈毅"};
int i,temp,k;
for(i=0;i<4;i++)
{
strcpy(p[i].name,n[i]);
printf("请输入%s的分数:",p[i].name);
scanf("%d",&p[i].point);
}
for(i=1,k=0,temp=p[0].point;i<4;i++)
{
if(p[i].point<temp)
{
k=i;
}
}
for(i=0;i<4;i++)
{
if(k==i)
{
p[i].ispromotion=0;
}
else
{
p[i].ispromotion=1;
printf("%s得分为%d,是否晋级:%s\n",p[i].name,p[i].point,"是");
}
}
return 0;
}

追问

strcpy 这个是什么作用??整句话呢???

追答

strcpy(a,b)是把字符串b的内容复制到字符串a中,a,b都是指针,strcpy(p[i].name,n[i]);是把指针数组n[i]中存的名字,赋值给定义的结构体p中的name这个变量,就相当于赋值一样。

追问

就是把后面的赋予前面的是吗?

Temp在程序中的作用?

追答#include<stdio.h>
#include<string.h>
struct People
{
    char name[20];
    int point;
    int ispromotion;
};
int main()
{
    People p[4];
    char *n[4]={"赵青","钱花","孙瓷","陈毅"};
    int i,temp,k;
    for(i=0;i<4;i++)
    {
        strcpy(p[i].name,n[i]);
        printf("请输入%s的分数:",p[i].name);
        scanf("%d",&p[i].point);
    }
    for(i=1,k=0,temp=p[0].point;i<4;i++)
    {
        if(p[i].point<temp)
        {
            temp=p[i].point;
k=i;
        }
    }
    for(i=0;i<4;i++)
    {
        if(k==i)
        {
            p[i].ispromotion=0;
        }
        else
        {
            p[i].ispromotion=1;
            printf("%s得分为%d,是否晋级:%s\n",p[i].name,p[i].point,"是");
        }
    }
    return 0;
}

strcpy就是把后面的赋值给前面的.

temp就是先存储第一个人的分数,加入后面有人比这个人分数低,就用temp存储低分数这个人,然后用k存储低分数这个人的索引。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-27
typedef struct PLAYER{
char name[32];

double score;

int status;

}player;

定义这样的结构体,给结构体变量赋值,根据比分计算最低的,将其排除,将其余三人的信息输出即可。例如:
player a[4];

strcpy(a[0].name, "赵青");
a[0].score=80;
a[0].status=0;

strcpy(a[1].name,"钱花");

a[1].score=90;.....以下类似

随后搞个数组记录一下4个人的得分顺序
int i = 0,j = 0;
player temp;
for (; i< 4; i++) {
for (j=i;j<4-i - 1;j++) {

if (a[i].scoure <a[i+1].score) {

temp=a[i];

a[i]=a[i+1];

a[i+1]=temp;

}
}
}

排好序,将最后一个的状态置为1
a[3].status=1;
随后输出前三的状态
for(i=0;i<3;i++)
{
printf("第%d名:名字=%s,得分%4.2f,晋级\n", a[i].name,a[i].score);
}追问

看不懂!

本回答被网友采纳
第2个回答  2014-11-27
选手信息是自己输入的?追问

对 要求C语言啊

追答#include<stdio.h>
struct Player
{
char name[15];
int score;
char promt;//晋级状态
};
int main()
{
Player player[4],min,temp;
int i;
printf("请输入四位选手信息:姓名 得分\n");
for(i=0;i<4;i++)
{
scanf("%s%d",player[i].name,&player[i].score);
}
min=player[0];
player[0].promt='n';
for(i=1;i<4;i++)
{
if(player[i].score<min.score)
{
min.promt='y';
player[i].promt='n';
temp=min;
min=player[i];
player[i]=temp;
}
else
{
player[i].promt='y';
}
}
printf("晋级选手是:\n");
for(i=0;i<4;i++)
{
if(player[i].promt=='y')
{
printf("%s  %d\n",player[i].name,player[i].score);
}

}
return 0;
}

追问

min=player[0];
player[0].promt='n';
这两句话啥 意思

追答

初始化min为第一位选手,后面是根据结构体的promt属性来输出的,n是没有晋级,y是晋级

追问

初始化min为第一位选手 为什么要这样初始化???

追答

初始化使得min有一个值,然后再把其他选手的成绩与min的比较,如果小于min的话,就把该位选手作为min

追问

1、在输入语句的那边 为什么第一个没有取地址符号而第二个有取地址符号?
2、min在循环体中是不是不断地被赋值?从[0]到[3]都会被赋予一遍?

追答

第一个输入是字符串,char name[15],name就是输入字符串的首地址,所以不需要再取地址,二第二个输入是整型数字,需要取地址将输入保存到内存地址中
min在循环中只有当存在选手player[i]的score分数比min小时才会被重新赋值,保持min是数组中的最小分数情况

追问

这个Temp的作用是什么?

到Else之前麻烦大神解释下 谢谢!

亲。

追答

从第二位选手开始每一位与min比较,当有选手的分数小于min时,把min与该位选手进行交换,并且把min的状态改为晋级,该位选手的状态改为未晋级

追问

Temp的作用

第3个回答  2014-11-27
typedef struct player_s {
#define MAX_PLAYER_NAME 256
char name[MAX_PLAYER_NAME];
int score;
#define PASS 1
#define NOT_PASS 0
int status;
}player_t;

#define MAX_PLAYER_NUMBER 4
player_t players[MAX_PLAYER_NUMBER] = {
{"赵青",0,NOT_PASS},
{"钱花",0,NOT_PASS},
{"孙瓷",0,NOT_PASS},
{"陈毅",0,NOT_PASS},
};追问

请用数据结构简单的C语言 谢谢!

相似回答