功能:手動輸入學生個數,然後錄入各項資料後,排序後按分數由小到大輸出資料。
#include <stdio.h>
#include <malloc.h>
struct Student
{
char name[20];
int num;
float score;
};
int main(void)
{
void input(struct Student *p, int n1);
void sort(struct Student *s, int m);
void output(struct Student *q, int n2);
int len;
struct Student *stu; //定義結構體指針變量
stu = (struct Student *)malloc(len * sizeof(struct Student)); //動态構造一維數組
printf("請輸入學生個數len = ");
scanf("%d", &len);
printf("請輸入學生資訊:\n\n");
input(stu, len);
sort(stu, len);
printf("\n");
output(stu, len);
free(stu); //釋放記憶體
return 0;
}
void input(struct Student *p, int n1) //資料錄入
{
int i;
for (i = 0; i < n1; i++)
{
printf("請輸入第%d個學生的資訊\n", i+1);
printf("請輸入學生姓名:\n");
printf("name = ");
scanf("%s", p[i].name); //name 是數組名,本省就是首元素位址,不能再加&
printf("請輸入學生學号:\n");
printf("number = ");
scanf("%d", &p[i].num);
printf("請輸入學生分數:\n");
printf("score = ");
scanf("%f", &p[i].score);
printf("\n");
}
}
void output(struct Student *q, int n2) //資料輸出
{
int i;
for (i = 0; i < n2; i++)
{
printf("排序後第%d個學生的資訊是:\n", i+1);
printf("name = %s\n", q[i].name);
printf("number = %d\n", q[i].num);
printf("score = %.1f\n", q[i].score);
printf("\n");
}
}
void sort(struct Student *s, int m) //冒泡排序,按學生成績升序排序
{
int i, j;
struct Student temp;
for (i = 0; i < m-1; i++)
{
for(j = 0; j < m-1-i; j++)
{
if (s[j].score > s[j+1].score) //注意:比較的是分數,但交換的是結構體變量
{
temp = s[j];
s[j] = s[j+1];
s[j+1] = temp;
}
}
}
}
運作結果
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPn1EerpWTxMmeNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zROBlLzUTO4ITMzYTM1EzMwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)