编写一个学生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. VB6 如何创建一个标准控制台程序

    打开 VB6 并新建一个标准EXE程序,把窗口删掉,然后再加入一个模块. 在模块中加入AllocConsole.FreeConsole.SetConsoleTitle.Sleep的API声明: Pub ...

  2. 10 并发编程-(线程)-GIL全局解释器锁&死锁与递归锁

    一.GIL全局解释器锁 1.引子 在Cpython解释器中,同一个进程下开启的多线程,同一时刻只能有一个线程执行,无法利用多核优势 首先需要明确的一点是GIL并不是Python的特性,它是在实现Pyt ...

  3. 使用innodb_force_recovery解决MySQL崩溃无法重启问题

    因为日志已经损坏,这里采用非常规手段,首先修改innodb_force_recovery参数,使mysqld跳过恢复步骤,将mysqld 启动,将数据导出来然后重建数据库.innodb_force_r ...

  4. python-条件和循环

    条件 Demo1: if i < 10: print('i<10') elif i == 0: print('i=0 ') else: print('...') Demo1说明了以下几点: ...

  5. bash: ifconfig: command not found 问题解决

    ifconfig使用出现问题了?竟然提示找不到~~于是百度~~ [flymouse@localhost /]$ ifconfig 提示:“bash: ifconfig: command not fou ...

  6. Android中app卡顿原因分析示例

    在知乎回答了一个“为什么微博的app在iPhone比Android上流畅”的问题.后面部分是一个典型的动画卡顿的性能分析过程,因此帖在这里.有编程问题可以在这里交流.知乎链接. =========== ...

  7. XML与HTML

    一.什么是HTML 带着疑问走到这里,一句话:HTML(HyperTextMark-upLanguage)即超文本标记语言,是WWW的描述语言. 如果想了解更多请看以下博客: http://blog. ...

  8. django通过url传递参数(编辑操作页面)

    在做到编辑部分时,想到的办法是在编辑上跳转到页面时给他一个包含唯一标识id的url,然后通过这个url中的id去查询出该条数据,将数据内容显示在编辑页面.   1.编辑按钮 <button on ...

  9. Python locals() 函数

    Python locals() 函数  Python 内置函数 描述 locals() 函数会以字典类型返回当前位置的全部局部变量. 对于函数, 方法, lambda 函式, 类, 以及实现了 __c ...

  10. Hibernate一级缓存(补)

    ------------------siwuxie095                                 什么是缓存         缓存是介于应用程序和永久性数据存储源(如:硬盘上的 ...