编写一个学生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 = + rand() % ;
} void name_init(char *name, int len)
{
int i;
for(i = ; i < len; i++)
{
if(i == )
name[i] = 'A' + rand() % ;
else
name[i] = 'a' + rand() % ;
}
name[i] = '\0';
} void score_init(int *array, int num)
{
int i;
for(i = ; i < num; i++)
array[i] = rand() % + ;
} void stuArray_init(STU *stuArray, int num)
{
int i;
for(i = ; 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 = ;
int i;
for(i = ; i < num; i++)
total += stu.score[i];
return total;
} //打印学生数组信息
void printArray(STU *stuArray, int num)
{
int i;
for(i = ; i < num; i++)
printf("%5d\t %s\t %3d %3d %3d %3d %3d %4d\n",stuArray[i].id,stuArray[i].name,stuArray[i].score[],stuArray[i].score[],stuArray[i].score[],stuArray[i].score[],stuArray[i].score[],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 ;
else if(sum_left == sum_right)
return ;
else
return -;
}

main.c

 #include "stu.h"

 int main()
{
STU array[];
srand(time(NULL));
stuArray_init(array,);
printArray(array,);
printf("\n--------------------排序后------------------\n\n");
qsort(array,,sizeof(STU),&cmp);
printArray(array,);
system("pause");
return ;
}

struct的使用的更多相关文章

  1. 使用struct处理二进制

    有的时候需要用python处理二进制数据,比如,存取文件.socket操作时.这时候,可以使用python的struct模块来完成. struct模块中最重要的三个函数是pack(), unpack( ...

  2. golang struct扩展函数参数命名警告

    今天在使用VSCode编写golang代码时,定义一个struct,扩展几个方法,如下: package storage import ( "fmt" "github.c ...

  3. go-使用 unsafe 修改 struct 中的 field 的值

    以下是方法,不要纠结原理,等东西积累多了,你才有能力纠结原理: 首先,你需要有一个这样的函数,这是在 nsq 的源码里直接抄过来的: func unsafeValueOf(val reflect.Va ...

  4. C语言中struct位域的定义和使用

    位域的定义和使用 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简便,C语言又 ...

  5. C# Struct结构体里数组长度的指定

    typedef struct Point{ unsigned short x; unsigned short y; }mPoint;//点坐标 typedef struct Line{ mPoint ...

  6. C 语言Struct 实现运行类型识别 RTTI

    通过RTTI,能够通过基类的指针或引用来检索其所指对象的实际类型.c++通过下面两个操作符提供RTTI. (1)typeid:返回指针或引用所指对象的实际类型.    (2)dynamic_cast: ...

  7. VC++ : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::basic_string<wchar_t,struct std::char_traits<wchar_t>

    最近学习Google Breakpad,将其用在了自己的项目中,编译的版本为VS2010,没有什么问题.但是为了和之前的程序兼容,需要使用VS2008版本的程序,于是又编译了VS2008版本的代码,但 ...

  8. 字节流与数据类型的相互转换---使用struct模块

    字节流与数据类型的相互转换---使用struct模块 http://blog.csdn.net/Sunboy_2050/article/details/5974029 Python是一门非常简洁的语言 ...

  9. 窥探Swift之别具一格的Struct和Class

    说到结构体和类,还是那句话,只要是接触过编程的小伙伴们对这两者并不陌生.但在Swift中的Struct和Class也有着令人眼前一亮的特性.Struct的功能变得更为强大,Class变的更为灵活.St ...

  10. struct 大小计算

    结构体是一种复合数据类型,通常编译器会自动的进行其成员变量的对齐,已提高数据存取的效率.在默认情况下,编译器为结构体的成员按照自然对齐(natural alignment)条方式分配存储空间,各个成员 ...

随机推荐

  1. 机器学习入门-使用GridSearch进行网格参数搜索GridSeach(RandomRegressor(), param_grid, cv=3)

    1.GridSeach(RandomRegressor(), param_grid, cv=3) GridSearch第一个参数是算法本身, 第二个参数是传入的参数组合, cv表示的是交叉验证的次数 ...

  2. Spring MVC 重定向

    @RequestMapping("/testRedirect") public String testRedirect(){ System.out.println("te ...

  3. 递归实现tree JQuery

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  4. 遍历python字典几种方法

    遍历python字典几种方法 from: http://ghostfromheaven.iteye.com/blog/1549441 aDict = {'key1':'value1', 'key2': ...

  5. Supervisor 进程管理工具

    简介: Supervisor 进程管理工具 一.安装 shell > yum -y install python-pip shell > pip install supervisor # ...

  6. mysql的collation-字符集

    utf8_general_ci               :排序规则 utf8 -- UTF-8 Unicode     :字符集 一.通过my.cnf文件增加(一劳永逸)两个参数:1.在[mysq ...

  7. __builtin__与__builtins__的区别与关系

    在学习Python时,很多人会问到__builtin__.__builtins__和builtins之间有什么关系.百度或Google一下,有很 多答案,但是这些答案要么不准确,要么只说了一点点,并不 ...

  8. java工程中不能存在多个数据库连接jar包

    java工程中不能存在多个数据库连接jar包 比如存在mysql-java-connector.jar的,放入mssqlserver.jar就会产生冲突.只能存在一个类型的jar包.

  9. 从给定字符串中截取n个字节的字符(解决汉字截取乱码问题)

    function GetNBytesChar(s: Ansistring; n: Integer): string;var  aStr: AnsiString;  bStr: WideString;b ...

  10. js 获取字符串的 像素 宽度 ----字符串格式化输出

    function getLenPx(str, font_size) { var str_leng = str.replace(/[^\x00-\xff]/gi, 'aa').length; retur ...