精华内容
下载资源
问答
  • 2019-11-29 16:40:29

    对结构体数组进行排序

    题目:对结构体数组进行排序。

    题目描述:
    struct Person{
      int no;
      int age;
      int height;
    }
    实现sort方法对结构体数组进行排序。
    void sort(Person * array,int n);

    根据no从小到大排序;如果no相同则根据age排序;如果age相同,则根据height排序。

    注意:
    遇到异常情况,输出"error";否则不要随意输出,会视为错误。

    代码:
    #include <stdio.h>
    #include <string.h>

    struct Person{
    int no;
    int age;
    int height;
    }temp;

    void sort(struct Person * array,int n)
    {
    int i = 0;
    int j = 0;
    if(n > 0 && array != NULL)
    {
    for (i = 0; i < n - 1; i++)
    {
    for (j = 0; j < n - 1 -i; j++)
    {
    if (array[j].no > array[j+1].no)
    {
    temp = array[j];
    array[j] = array[j+1];
    array[j+1] = temp;
    }
    else if (array[j].no == array[j+1].no && array[j].age > array[j+1].age)
    {
    temp = array[j];
    array[j] = array[j+1];
    array[j+1] = temp;
    }
    else if ((array[j].no == array[j+1].no) && (array[j].age == array[j+1].age)
    && (array[j].height > array[j+1].height))
    {
    temp = array[j];
    array[j] = array[j+1];
    array[j+1] = temp;
    }
    }
    }
    }
    else {
    printf(“error”);
    }
    }

    这次的代码和我以前写的冒泡排序差不多,都很容易理解,还有一个更简单的写法就是在if里面把我上述的三个if里面的条件用||合起来,只需要写一个转换代码就可以了。

    更多相关内容
  • C语言 结构体数组按字段排序

    千次阅读 2020-10-27 10:13:21
    先按照课程编号从小到大排序,再按照成绩从高到底的顺序进行排序.

    前言

    先按照课程编号从小到大排序,再按照成绩从高到底的顺序进行排序.

    整体来说还是使用了冒泡排序,只不过比较的规则变了。

    C语言示例代码

    /**
    	C语言 结构体数组 先按照课程编号从小到大排序,再按照成绩从高到底的顺序进行排序
    **/
    #include <stdio.h>
    typedef struct student{
        long id; // 学号 
        long course_id; //课程编号 
      	float score; //分数 
    }Stu;
    void print(Stu stuArray[],int len)
    {	
    	printf("\n");
    	printf("\n");
    	int i;
    	for(i=0;i<len;i++)
    	{
    		printf("%ld %ld %f\n",stuArray[i].id,stuArray[i].course_id,stuArray[i].score);
    	}
    } 
    int main(){
    	Stu stuArray[20],temp;
        int i,j,k,n;
        for(i=0;i<3;i++){      
            scanf("%ld %ld %f",&stuArray[i].id,&stuArray[i].course_id,&stuArray[i].score);
        }
    	
        for(j=0;j<i-1;j++) //冒泡排序需要n-1次 
    	{ 
    		int flag = 0; //标记本趟冒泡排序是否有变换,如果没有移动,代表已经全部有序                
    		for(k=i-1;k>j;k--) // 每趟冒泡排序都能确定一个元素的位置,所以不用每次都比较遍历整个数组 
    		{
    			// 先按照课程编号从小到大排序,再按照成绩从高到底的顺序进行排序
    			if(stuArray[k].course_id<stuArray[k-1].course_id
    			 || (stuArray[k].course_id==stuArray[k-1].course_id && stuArray[k].score>stuArray[k-1].score))
    			{
    				temp = stuArray[k];
    				stuArray[k] = stuArray[k-1];
    				stuArray[k-1] = temp;
    				flag = 1;
    			}
    		}
    		if(!flag)
    		{
    			break; 
    		} 
        }
        print(stuArray,i);
        
        return 0;
    }
    

    测试结果

    第一列:学号
    第二列:课程编号
    第三列: 成绩

    测试按照课程编号由小到大排序。

    在这里插入图片描述
    测试当课程编号相同,成绩由高到低排序。

    在这里插入图片描述

    展开全文
  • 匿名用户 1级 2014-08-31 回答 ... 追问: 代码是纯c的,编译通过能运行,不排序输出数组每个元素的字符串正常。 以上您的代码没有任何问题。问题出在我这样分配不对,修改后正确了。 非常感谢这么晚了,帮我解答问题。

    匿名用户

    1级

    2014-08-31 回答

    ■可能的一个原因是compare 里给a、b赋值的时候,后面强制类型转换应为(struct record *)而非(record *)。

    ■可能另一个原因是你的源文件名后缀(DECVPP据此判断是C程序还是C++程序),如果是纯C的,就用.c;如果是C++的,用.cpp。

    ■还有可能是你没有包含必要的头文件?

    我根据你的代码做了个简单的测试,在VC6下运行正常(由大到小按point排)。

    #include

    #include

    struct record

    {

    char name[35];

    int point;

    int match[3];

    int goal[2];

    } ;

    int compare(const void *p1,const void *p2);

    void input(struct record s[], int n);

    void output(struct record s[], int n);

    int main()

    {

    struct record team[35];

    int teams = 35;

    input(team, 5);

    qsort(team,teams,sizeof(team[0]),compare);

    output(team, 5);

    return 0;

    }

    int compare(const void *p1,const void *p2)

    {

    struct record *a= (struct record *)p1;

    struct record *b= (struct record *)p2;

    int result=0;

    if(a->point > b->point)

    return -1;

    else if(a->point< b->point)

    return 1;

    else

    return 0;

    }

    void output(struct record s[], int n)

    {

    int i=0;

    while(i

    {

    printf("%d ",s[i].point);

    i++;

    }

    return;

    }

    void input(struct record s[], int n)

    {

    int i=0;

    while(i

    {

    scanf("%d",&(s[i].point));

    i++;

    }

    return;

    }

    是否可以解决您的问题?

    追问:

    代码是纯c的,编译通过能运行,不排序输出数组每个元素的字符串正常。

    以上您的代码没有任何问题。问题出在我这样分配不对,修改后正确了。

    非常感谢这么晚了,帮我解答问题。

    展开全文
  • C语言第11题:结构体数组的定义与使用 + 结构体数组排序C语言第11题:结构体数组的定义与使用 + 结构体数组排序注意:一下赋值是不能使用的但是在结构体中是可以直接进行赋值操作的st[1] = st[2];printf(“姓名 = %s...

    C语言第11题:结构体数组的定义与使用 + 结构体数组排序

    C语言第11题:结构体数组的定义与使用 + 结构体数组排序

    注意:

    一下赋值是不能使用的

    00b255b7dd40bb7f5d8c03ac0fc1f0d3.png

    但是在结构体中是可以直接进行赋值操作的

    st[1] = st[2];

    printf(“姓名 = %s, 年龄 = %d, 班级 = %s, 成绩 = %d\n”,st[1].name,st[1].age,st[1].classes,st[1].score);

    结构体使可以进行互相赋值的

    struct A a1 = { “hello” };

    struct A a2 = {“c”};

    a2 = a1;

    #include

    struct E

    {

    char a1 : 1; //定义一个char类型 位字段实现

    char a2 : 1;

    char a3 : 1;

    char a4 : 1;

    char a5 : 1;

    char a6 : 1;

    char a7 : 1;

    char a8 : 1;

    };

    struct F

    {

    int i : 2;

    char c : 2; // char c : 10;不能超过8bit数据,

    };

    struct student

    {

    char name[16]; //姓名

    unsigned char age; //年龄

    char classes[100]; //班级

    unsigned char score; //分数

    };

    struct A

    {

    char array[10];

    };

    int main()

    {

    printf("%d\n", sizeof(struct F));

    struct student st[5] = { {"周",50,"java",90},{ "翟",25,"C++",97 } ,{ "催",25,"python",92 } };

    int i;

    for (i = 0; i < 3; i++)

    {

    printf("姓名=%s, 年龄=%d, 班级=%s, 成绩=%d\n", st[i].name, st[i].age, st[i].classes, st[i].score);

    }

    printf("------------------------------------------------");

    printf("\n");

    st[1] = st[2];

    printf("姓名 = %s, 年龄 = %d, 班级 = %s, 成绩 = %d\n", st[1].name, st[1].age, st[1].classes, st[1].score);

    struct A a1 = { "hello" };

    struct A a2 = {"c"};

    a2 = a1;

    system("pause");

    return 0;

    }

    使用结构体交换数据所在的地址

    #include

    struct E

    {

    char a1 : 1; //定义一个char类型 位字段实现

    char a2 : 1;

    char a3 : 1;

    char a4 : 1;

    char a5 : 1;

    char a6 : 1;

    char a7 : 1;

    char a8 : 1;

    };

    struct F

    {

    int i : 2;

    char c : 2; // char c : 10;不能超过8bit数据,

    };

    struct student

    {

    char name[16]; //姓名

    unsigned char age; //年龄

    char classes[100]; //班级

    unsigned char score; //分数

    };

    struct A

    {

    char array[10];

    };

    void swap(struct student *a, struct student *b)

    {

    struct student tmp = *a;

    *a = *b;

    *b = tmp;

    }

    int main()

    {

    struct student st[3] = { { "周",50,"java",90 },{ "翟",25,"C++",97 } ,{ "催",25,"python",92 } };

    int i;

    int j;

    for (i = 0; i < 3; i++)

    {

    for (j = 1; j < 3 - i; j++)

    {

    if (st[j].age < st[j - 1].age)

    {

    swap(&st[j], &st[j - 1]);

    }

    }

    }

    for (i = 0; i < 3; i++)

    {

    printf("姓名=%s, 年龄=%d, 班级=%s, 成绩=%d\n", st[i].name, st[i].age, st[i].classes, st[i].score);

    }

    system("pause");

    return 0;

    }

    fd26cb07a161a567cc50dc68a92e981e.png

    cf4a77a7969c4d3a76d56cd890b4bdd5.png

    这里补充一个知识点

    首先用malloc申请一块地址

    char *p = malloc(10);

    char *array = p;

    p ++;

    free§;

    这里如果释放的是p,由于p的值是从第二个开始的, 然后往后数10个,那么有一个问题就是,少释放一个应该释放的,而多释放了一个没有使用的。

    因为p的地址往后移动了一个,但是,使用array的话,就没有这样的问题了,因为,使用char a8rray = p;但是地址还是从第一个开始的,因此释放的时候应该使用的是释放arra有,如果想使用free§;那么应当先将p的地址指向初始位置,这样的话就不会出现释放出现问题的情况呢。

    这里在补充一个

    #include

    #include

    #pragma warning(disable:4996) //注意这一句的使用,可以解决C语言中出现的一些兼容性问题

    struct C

    {

    char name[100];

    int age;

    };

    int main()

    {

    struct C stu;

    stu.age = 20;

    strcpy(stu.name, "刘德华");

    printf("%s,%d\n",stu.name,stu.age);

    system("pause");

    return 0;

    }

    从上面的代码可以看出,就是使用struct定义了一个结构体类型,然后里面放的有姓名和年龄。

    然后又使用了一个strcmp进行赋值操作

    这里再说一种情况,假设我使用的是指针,那么该如何操作了。

    67bc98670d0d9c5d67df069940937ecd.png

    这个我们也容易理解,对于一个指针变量,一般是指向NULL。

    7729a4c4ca2c54dc86f86948ee3d74f0.png

    那到底是为什么?

    因为指针指向了null,也就是没有分配地址空间,那么在使用strcpy(stu1.name1, “刘德华”);的时候,当然不可以,不能进行赋值操作,毕竟连空间都没有开辟,肯定写不进去。

    于是我们需要进行一个空间开辟,使得其可以接收写入的值(这里指的是开辟空间地址);

    27663972474a63419e958ae5426f7d04.png

    最后注意释放内存

    完整代码:

    struct D

    {

    char *name1;

    int age1;

    };

    int main()

    {

    struct D stu1 = { NULL,0 };

    stu1.age1 = 20;

    stu1.name1 = malloc(100);

    strcpy(stu1.name1, "刘德华");

    printf("%s,%d\n", stu1.name1, stu1.age1);

    free(stu1.name1);

    system("pause");

    return 0;

    }

    (完!)

    C语言第11题:结构体数组的定义与使用 + 结构体数组排序相关教程

    大二数据结构学习3(栈和队列)

    大二数据结构学习3(栈和队列) 栈和队列 栈 一 定义 二 代码结构 【1】静态分布 【2】动态分布 【3】初始化 【4】入栈 【5】出栈 【6】建立完整栈,实现入栈出栈 链栈 一 定义 二 结构代码 【1】建立结构 【2】初始化 【3】入栈 【4】出栈 【5】总体建立,实

    Java语言基础

    Java语言基础 Java语言基础 文章目录 Java语言基础 1、Java概述 2、Java基础语法 2.1 数据类型 2.2 访问修饰符 2.3 常用关键字 2.4 流程控制语句 3、面向对象 4、IO流 4.1 IO流分类 4.2 Java I/O使用的设计模式 4.3 BIO、NIO、AIO区别 5、反射 6、常用类 6.1

    【数据结构】详解多路查找树之2-3树

    【数据结构】详解多路查找树之2-3树 文章目录 概念 2-3树 2-3树的插入实现 2-3树的删除实现 测试代码 我们之前学习的树,都是一个结点可以有多个孩子,但是自身只存储一个元素。二叉树的限制会更多,节点最多只能有两个孩子。 一个结点只能存储一个元素,在元

    一元稀疏多项式计算器 c语言 数据结构OJ题

    一元稀疏多项式计算器 c语言 数据结构OJ题 标题 一元稀疏多项式计算器 时间限制 2S 内存限制 10000 Kb 问题描述 见习题集P81 问题输入 每组数据有3行构成,第1行为3个正整数n,m,t, n表示第一个多项式的项数,m表示第二个多项式的项数,t表示运算类型,0为

    树的存储结构

    树的存储结构 提到存储结构,可以很自然的想到顺序存储结构和链式存储结构两种。树这种数据结构类型,它是由结点和联接结点的边构成。这些边,联接了树中的任意两个结点,从计算机内存中的存储方式来看,其实,就是通过指针保存了地址,从而实现了两个结点间

    线性表的链式存储结构

    线性表的链式存储结构 线性表从物理结构上分,有顺序存储结构和链式存储结构两种。既然有了顺序存储结构,又何必再有一个链式存储结构呢?原因就在于,顺序存储结构在存储大量的元素,对这些元素进行插入或这删除操作时,会浪费大量的时间。因为,采用顺序存

    PTA|6-1 一元多项式加法(30分)【数据结构】

    PTA|6-1 一元多项式加法(30分)【数据结构】 输入格式: 输入数据为两行,分别表示两个多项式。 每行多项式首先输入一个n,代表多项式的项数,接着是n对整数,每对整数的第一个是系数,第二个是指数。每个多项式不超过100项,整数间用空格隔开。 输出格式: 输

    Java语言基础

    Java语言基础 基础语法 Java有哪些数据类型 定义:Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间。 基本数据类型 数值型 整数类型(byte,short,int,long) 浮点类型(float,double) 字符型(char) 布尔型

    展开全文
  • 1.首先定义结构体数组:typedef struct BleAndTspRmtCmd{char terminal[3];char note[3];char rmtCmd[10];char cmdPropt[24];};BleAndTspRmtCmd为结构体名,可以通过这个结构体名定义其他结构体变量,...
  • qsort用于结构体数组排序

    千次阅读 2020-12-20 12:49:25
    用模拟的qsort进行解释结构体数组排序 typedef struct Stu{ char name[100]; char sex[10]; }stu; void Swap(void *_x, void *_y,int size) { char *x = (char *)_x; char *y = (char *)_y; char temp = 0; ...
  • 1.按照结构体数组的某一项排序,那么一个结构体包含的其他元素仍保持不变。也就是说只能选择其中一项作为指标进行排序,相应的其他值对应不变化。 2.排序后仍然是它们的组合,只是顺序变了而已 3.如果希望升序排序,...
  • C语言结构体数组

    千次阅读 2021-11-15 21:23:29
    结构体数组的概念 结构体数组是个数组,由若干个相同类型的结构体变量构成的集合 struct 结构体类型名 数组名[元素个数]; struct stu{ int num; char name[20]; char sex; }; struct stu edu[3]; ...
  • C语言结构体数组冒泡排序

    千次阅读 2021-12-07 23:03:25
    #include<stdio.h> #define N 3 int main() { struct Book{ char num[10]; char name[10];... char writer[10];... scanf("%s%s%s%f",books[i].num,books[i].name,books[i].writer,&...
  • C语言结构体数组:学生成绩排序 #include<stdio.h> struct student { double xuehao; char xingming[100]; int nian,yue,ri; }s1[100]; void paixu(struct student s1[],int n) { struct student...
  • 结构体数组实现学生管理系统,有添加、输出、查找、排序、删除、修改的功能。 #include<stdio.h> #include<string.h> #include<stdlib.h> int n=0; struct student { int num; char name[20...
  • sort函数对结构体数组排序 #include<iostream> #include<algorithm> using namespace std; struct st { int a1; int b1; }arr[100]; //首先 &是取地址运算符 在cmp中 把结构体的地址赋值给了 x ,y...
  • C语言,使用qsort函数对自定义结构体数组进行排序
  • 主函数使用下面结构体定义和函数,从控制台输入n(n<=40)各学生信息,按平均成绩降序后...3.编写函数copy(),将所有女生信息复制到另一个结构数组中,并按平均成绩的降序排序; 输入样例: 5 2021001 zhangsan
  • 在主函数中定义结构体数组,struct student stutable[10]; struct student { int stunum;//学号 char name[20];//姓名 float examscore;//考试成绩 float labscore;//实验成绩 float totalmark;//总评成绩 }...
  • c语言结构体数组排序问题?输入学生成绩按平均分排名。我平均分求出来了。但是对结构体数组的排序一直没搞懂。#include#includestruct liebiao{int hao;char name[20];float fen1;float fen2;float fen3;float ...
  • include<...1.第一种定义结构体的方法 struct student { char name[10]; char idnumber[10]; int score; }; typedef struct studet; 2.第二种定义结构体的方法 typedef struct student { ch...
  • 结构体数组作为函数参数,编程实现如下菜单驱动的学生成绩管理系统。(1) 录入每个学生的学号、姓名和各科考试成绩。(2) 计算每门课程的总分和平均分。(3) 计算每个学生的总分和平均分。(4) 按每个学生的总...
  • //使每个指针指向一个结构体数组元素 for(i=0;i;i++) { p[i]=&stu[i]; } struct student *temp; //用冒泡排序排序(从大到小) for(i=0;i;i++) {//遍历sum_stu-1轮 for(j=0;j;j++) {//...
  • 根据结构体数组中某一数据项对结构体数组排序

    万次阅读 多人点赞 2018-08-17 17:46:06
    /* ...*All rights reserved. ...*问题描述:输入结构体数组,并根据结构体中的某一数据项对整个结构体数组进行排序 *输入描述:; *程序输出: */ #include<stdio.h> #include<string.h> struc...
  • 1_对结构体数组进行排序 通过课程进入 题 号: 41 1_对结构体数组进行排序 语言要求: C++ 对结构体数组进行排序。 题目描述: struct Person{  int no;  int age;  int height; } 实现sort方法对结构体数组进行...
  • C语言sizeof求结构体数组长度

    千次阅读 2021-05-19 11:36:57
    C语言sizeof求结构体数组长度C语言sizeof求结构体数组长度#include typedef struct ss{char a;//偏移量为0,大小为1,0能被1整除,=1short b;//偏移量为1,大小为2,1不能被2整除,=1+1+2=4int c;//偏移量为4,大小为4...
  • ·c结构体数组排序

    2019-08-04 00:29:00
    #include "stdio.h" #include "string.h" struct Student{ int num; char name[20]; float score; }; int main(){ struct Student stu[5] = {{1,"gan",90},{2,"li",98},{3,"zhao",80},{4,"chen",86...
  • C语言数组排序(冒泡法排序)

    千次阅读 2021-11-08 19:51:45
    冒泡法排序指的是在排序时,每次比较数组中相邻的两个数组元素的值,将较大的数(从小到大排列)排在较小的数后面。 以数字9、6、15、4、2为例 元素[0] 元素[1] 元素[2] 元素[3] 元素[4] 起始值 ...
  • C语言结构体冒泡排序

    2021-02-23 22:36:32
    个人学习过程:C语言结构体代码 #include <stdio.h> #include <stdlib.h> #include <string.h> struct stu { int num; char name[32]; int age; }; int main(void) { struct stu arr[3];...
  • 写一个函数交换两个结构体变量Change stu1={"ningning",1,98};Change stu2={"huanhuan",3,90};Change stus[2]={stu1,stu2};Change *p=stus;// for (int i=0; i<2; i++) {// printf("name=%s,num=%d,score=%f\n",...
  • #41 对结构体数组进行排序

    千次阅读 2021-11-16 09:54:49
    结构体数组进行排序。 题目描述: struct Person{  int no;  int age;  int height; } 实现sort方法对结构体数组进行排序。 void sort(Person * array,int n); 根据no从小到大排序;如果no相同则根据age排序...
  • 1.软件:Dev-C++ 2.测试页面及结构体信息见我专栏《资源》下的《C语言系统资源测试》 3.代码一64行,功能有输入、排序、浏览 4.代码排版有序,注释多,易于新手下载学习 ...6.采用结构体数组(顺序表)实现
  • C语言结构体数组【定义一个存储5个员工信息(包含编号,姓名,工资)的结构体数组

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,744
精华内容 7,497
关键字:

c语言结构体数组排序