编写一个学生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. python中join()函数、list()函数补充的用法

    ---恢复内容开始--- Python join() 方法用于将序列中的元素(必须是str) 以指定的字符 连接生成一个新的字符串. list=[','a','b','c'] print(''.joi ...

  2. SAP订单状态最详细的解释

    order status description explanation CRTD 建立 生产订单创建时的状态,表明订单处于刚刚创建时点,不允许做后续发料,确认等操作. PREL 部分释放(部分下达) ...

  3. delphi XE3解析JSON数据

    测试数据如下: Memo1.text中的数据: { "date":"周二(今天, 实时:12℃)", "dayPictureUrl":&qu ...

  4. js中的Event对象

    event代表事件的状态,例如触发event对象的元素,鼠标的位置及状态,按下的键等等 event对象只在事件发生的过程中才有效. <!DOCTYPE html><html lang ...

  5. nodejs 与 json

    nodeJs读取文件(readfile) j json 处理: var fileData = fs.readFileSync(file);if (fileData) { var j = {}; cal ...

  6. maven向本地库添加jar包

    mvn install:install-file -DgroupId=com.lowagie -DartifactId=itextasian -Dversion=1.0 -Dpackaging=jar ...

  7. 奇偶数判断1(if,else if语句)

    public class 奇偶数判断 { public static void main(String [] args){ float s = 9f; //取单浮点型变量s,可为任意值 float h ...

  8. Required String parameter ' ' is not present

    Required String parameter ' ' is not present 报错原因: url中的参数错误. 解决方法: 1.修正url中的参数的值. 2.在Controller层中的@ ...

  9. java并发中的锁

    java中的锁,最基本的是Lock接口. Lock接口中的方法,主要是: lock(): 获取锁,lock()方法会对Lock实例对象进行加锁,因此所有对该对象调用lock()方法的线程都会被阻塞,直 ...

  10. java swing:文本框添加滚动条

    有几点要注意: 1.默认的滚动条,仅在输入的文本超过文本框时才会显示..没有超过文本框是不会显示的: 2.设置矩形大小,是在滚动条上设置,而不是在文本框上设置: 示例代码如下: public clas ...