演習 12-4

#include <stdio.h>
#include <string.h>

#define NAME_LEN 64

typedef struct{
    char name[NAME_LEN];
    int height;
    float weight;
    long schols;
} Student;

void swap_Student(Student *x, Student *y){
    Student tmp = *x;
    *x = *y;
    *y = tmp;
}

void sort_by_height(Student a[], int n){

    int i, j;

    for(i = 0; i < n; i++){
        for(j = n - 1; j > i; j--){
            if(a[j - 1].height > a[j].height) swap_Student(&a[j - 1], &a[j]);
        }
    }
}

void sort_by_name(Student a[], int n){
   
    int i, j;

    for(i = 0; i < n; i++){
        for(j = n - 1; j > i; j--){
            if(strcmp(a[j - 1].name, a[j].name) > 0) swap_Student(&a[j - 1], &a[j]);
        }
    }
}

int main(){

    int i, n;

    Student std[256];

    printf("何人の情報を入力しますか?");    scanf("%d", &n);

    for(i = 0; i < n; i++){
        printf("氏名 : "); scanf("%s", std[i].name);
        printf("身長 : "); scanf("%d", &std[i].height);
        printf("体重 : "); scanf("%f", &std[i].weight);
        printf("奨学金 : "); scanf("%ld", &std[i].schols);
    }

    printf("身長を昇順にソート:1, 名前を昇順にソート:2 -> "); scanf("%d", &i);

    if(i == 1){
        sort_by_height(std, n);
        printf("身長順にソートしました\n");
    }
    else if(i == 2){
        sort_by_name(std, n);
        printf("名前順にソートしました\n");
    }

    for(i = 0; i < n; i++){
        printf("%-8s %6d%6.1f%7ld\n", std[i].name, std[i].height, std[i].weight, std[i].schols);
    }

    return 0;
}

0 件のコメント:

コメントを投稿