对学生进行信息填入和排序冒泡
排序,用三个函数来表示对10个学生的排序以及信息填写
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
struct Student {
int id;
char name[20];
float score;
};
int sort(struct Student stu[])
{
int i, j;
for (i = 0;i < 10-1;i++) {
for (j = 0;j < 10-i-1;j++)
{
if (stu[j].score < stu[j + 1].score)
{
struct Student temp = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = temp;
}
}
}
}
void initStudent(struct Student* p)
{
int i;
for (i = 0;i < 10;i++)
{
printf("输入第%d学生信息:\n", i + 1);
scanf("%d %s %f", &p->id, p->name, &p->score);
p++;
}
}
int main()
{
//{ {10101,"Zhang",78},{10103,"Wang",98.5},{10106,"Li",86},{10108,"Ling",73.5},{10110,"Fun",100}};
int i;
struct Student arry[20] = {0};
initStudent(arry);
sort(arry);
printf("排序后:\n");
for (i = 0; i < 10; i++)
{
printf("%d %s %.2f\n", arry[i].id, arry[i].name, arry[i].score);
}
return 0;
}
解答如下
#include<stdio.h>
struct stu
{
int num;
char name[10];
int score;
};
void input(struct stu t[],int n)
{
int i;
for(i=0; i<n; i++)
{
scanf("%d",&t[i].num);
getchar();
scanf("%s",t[i].name);
scanf("%d",&t[i].score);
}
}
void sort(struct stu t[],int n)
{
int i,j;
for(i=0; i<n-1; i++)
for(j=0; j<n-1-i; j++)
if(t[j].score<t[j+1].score)
{
struct stu tem=t[j];
t[j]=t[j+1];
t[j+1]=tem;
}
}
void put(struct stu t[],int n)
{
int i;
for(i=0; i<n; i++)
{
printf("学号:%d 姓名:%s 成绩:%d\n",t[i].num,t[i].name,t[i].score);
}
}
int main()
{
struct stu t[10];
input(t,10);
sort(t,10);
put(t,10);
return 0;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 2
struct STU {
int id;
char name[20];
char sex;
int score;
};
void show_stu(struct STU *s, int n)
{
int i;
for (i = 0; i < n; i++)
printf("%d\t%s\t%c\t%d\n", s[i].id, s[i].name, s[i].sex, s[i].score);
}
void write_stu(struct STU *s, int n, FILE *fp)
{
//fwrite
int i;
for (i = 0; i < n; i++)
fwrite(&s[i], sizeof(*s), 1, fp);
}
struct STU *read_stu(FILE *fp, int *n)
{
int i, res, m = 10;
struct STU *s = (struct STU *)malloc(sizeof(struct STU) * m);
for (i = 0; ; i++) {
if (i == m) {
m *= 2;
s = realloc(s, sizeof(struct STU) * m);
}
if (!fread(&s[i], sizeof(struct STU), 1, fp))
break;
}
*n = i;
return s;
}
void sort_stu(struct STU *s, int n)
{
int i, j;
struct STU tmp;
for (i = 0; i < n-1; i++)
for (j = 1; j < n-i; j++)
if (s[j-1].score < s[j].score) {
tmp = s[j-1];
s[j-1] = s[j];
s[j] = tmp;
}
}
int main(void)
{
struct STU *student;
FILE *fp, *fp_sort;
int n = 0;
fp = fopen("stu.txt", "r");
if (!fp) {
printf("fopen stu.txt err\n");
return 1;
}
fp_sort = fopen("stu_sort.txt", "w");
if (!fp_sort) {
printf("fopen stu_sort.txt err\n");
return 1;
}
student = read_stu(fp, &n);
//show_stu(student, n);
sort_stu(student, n);
//printf("******\n");
show_stu(student, n);
write_stu(student ,n, fp_sort);
free(student);
fclose(fp);
fclose(fp_sort);
return 0;
}