您的位置:首页 > 其它

struct的使用

2015-08-27 19:26 330 查看
编写一个学生struct,成员有学号(id)、姓名(name)、成绩(5门课程),随机生成多个学生的学号、姓名和成绩存储到结构体数组。再根据总分进行排名并输出学生的信息和总分。

stu.h

#ifndef STU_H
#define STU_H

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define LEN 3
#define NUM 5

typedef struct Student
{
int id;
char name[LEN];
int score[NUM];
}STU;

//初始化
void id_init(int *val);
void name_init(char *name, int len);
void score_init(int *array, int num);
void stuArray_init(STU *stuArray, int num);

//打印学生数组信息
void printArray(STU *stuArray, int num);
//求一个学生的成绩总分
int sum(STU stu, int num);
//比较操作
int cmp(const void* left, const void* right);

#endif


stu.c

#include "stu.h"

//初始化
void id_init(int *val)
{
*val = 2000 + rand() % 1000;
}

void name_init(char *name, int len)
{
int i;
for(i = 0; i < len; i++)
{
if(i == 0)
name[i] = 'A' + rand() % 26;
else
name[i] = 'a' + rand() % 26;
}
name[i] = '\0';
}

void score_init(int *array, int num)
{
int i;
for(i = 0; i < num; i++)
array[i] = rand() % 100 + 1;
}

void stuArray_init(STU *stuArray, int num)
{
int i;
for(i = 0; i < num; i++)
{
id_init(&stuArray[i].id);
name_init(stuArray[i].name,LEN);
score_init(stuArray[i].score,NUM);
}
}

//求一个学生的成绩总分
int sum(STU stu, int num)
{
int total = 0;
int i;
for(i = 0; i < num; i++)
total += stu.score[i];
return total;
}

//打印学生数组信息
void printArray(STU *stuArray, int num)
{
int i;
for(i = 0; i < num; i++)
printf("%5d\t %s\t %3d %3d %3d %3d %3d %4d\n",stuArray[i].id,stuArray[i].name,stuArray[i].score[0],stuArray[i].score[1],stuArray[i].score[2],stuArray[i].score[3],stuArray[i].score[4],sum(stuArray[i],NUM));
}

//比较操作
int cmp(const void* left, const void* right)
{
int sum_left, sum_right;
STU *stu_left = (STU*)left;
STU *stu_right = (STU*)right;

sum_left = sum(*stu_left,NUM);
sum_right = sum(*stu_right,NUM);

if(sum_left < sum_right)
return 1;
else if(sum_left == sum_right)
return 0;
else
return -1;
}


main.c

#include "stu.h"

int main()
{
STU array[5];
srand(time(NULL));
stuArray_init(array,5);
printArray(array,5);
printf("\n--------------------排序后------------------\n\n");
qsort(array,5,sizeof(STU),&cmp);
printArray(array,5);
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: