用c语言数组编写程序有n个学生,每个学生有考号和总成绩,如果录取m人,确定录取分数线,并输出录取考

用c语言数组编写程序有n个学生,每个学生有考号和总成绩,如果录取m人,确定录取分数线,并输出录取考生的考号和成绩

第1个回答  2014-04-25
#include <stdio.h>

typedef struct student_msg{

int number;
int score;
struct student_msg *next;

}MSG;

void insert_link(MSG **head, MSG *p_new);
void order_link(MSG *head, int m);

int main(int argc, char *argv[])
{
int i, n, m, numer, score;

MSG *head = NULL, *p_new;

printf("请输入这n个学生的考号和成绩:\n");

for(i = 0; i < n; i++)
{
scanf("%d %d", &number, &score);
p_new = (MSG *)malloc(sizeof(MSG));
p_new->number = number;
p_new->score = score;

insert_link(&head, p_new);

}

printf("请输入你要录取的学生个数:\n");
scanf("%d", &m);
if (m > n)
exit(1);
order_link(head, m);

return 0;

}

void insert_link(MSG **head, MSG *p_new)
{
MSG *p_move = *head;

if(*head == NULL)
{
*head = p_new;
p_new->next = NULL;

}
else
{
while(p_move->next != NULL)
p_move = p_move->next;

p_move->next = p_new;
p_new->next = NULL;

}

}

void order_link(MSG *head, int m)
{
MSG *p_save = head, *bp = head->next, *bh;
MSG *p_head = head;
int i = 0;

while(p_save != NULL)
{
bh = bp->next;
if(p_save->score < bp->score)
{
p_save->next = bh;
bp->next = p_save;

}
p_save = p_save->next;
bp = p_save->next;
bh = bp->next;

}
head = p_head;

printf("录取的学生信息为:\n");

whie(i < m)
{
printf("学号:%d\t成绩:%d\n", head->number, head->score);

head = head->next;

}

}

忘了free()了。这个也简单,链表排序那块你可以去别的地方查查,可能有误。
第2个回答  2014-04-30
#include "stdio.h"
#define N 10
struct student
{
char *s;
int score;
} boy[N]={
{"101",45},
{"102",65},
{"103",54},
{"104",76},
{"105",67},
{"106",89},
{"107",61},
{"108",75},
{"109",77},
{"110",79}
};
void change(char **a,char **b)//运用2级指针变量交换1级指针
{char *i;
i=*a;
*a=*b;
*b=i;
}

void main(void)
{int i,j,k;
int t;
int m;

for(i=0;i<N-1;i++)
{ k=i;
for(j=i+1;j<=N-1;j++)
{ if(boy[k].score<boy[j].score)
k=j;
}
if(k!=i)
{t=boy[i].score;
boy[i].score=boy[k].score; //交换分数
boy[k].score=t;

change(&boy[i].s,&boy[k].s); //交换学号
}
}
printf("请输入录取人数m(m在1到10之间):");
scanf("%d",&m);

printf("\n 录取名单为前%d名:\n",m);
for(i=0;i<m;i++)
{
printf("%s %d\n",boy[i].s,boy[i].score);
}
}
/*编译环境为VC,这里为了方便调试,n取常量N,你也可以修改为变量,保证任意性*/
第3个回答  2014-04-26
简单的话就是使用二维数组一个个输入数据,最后输入分数线循环对比.
相似回答