算法训练 P1102  
时间限制:1.0s   内存限制:256.0MB
    
  定义一个学生结构体类型student,包括4个字段,姓名、性别、年龄和成绩。然后在主函数中定义一个结构体数组(长度不超过1000),并输入每个元素的值,程序使用冒泡排序法将学生按照成绩从小到大的顺序排序,然后输出排序的结果。
  输入格式:第一行是一个整数N(N<1000),表示元素个数;接下来N行每行描述一个元素,姓名、性别都是长度不超过20的字符串,年龄和成绩都是整型。
  输出格式:按成绩从小到大输出所有元素,若多个学生成绩相同则成绩相同的同学之间保留原来的输入顺序。
输入:
  3
  Alice female 18 98
  Bob male 19 90
  Miller male 17 92

输出:
  Bob male 19 90
  Miller male 17 92
  Alice female 18 98

 
作者注释:自从学会了用结构体排序的方法,这种题目都蛮容易搞定的。
代码一:
 #include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<ctype.h>
/*定义一个结构体*/
typedef struct Stu{
char name[];
char sex[];
int age;
int score;
}stu;
/* 定义排序(回调)函数cmp:
返回类型必须是int;
两个参数的类型必须都是const void *;
如果是升序,那么就是如果a比b大返回一个正值,小则负值,相等返回0;
*/
int cmp(const void *a,const void *b){
/* *(stu*)a是因为:a是个void *类型,要先
用(stu*)将它转成stu*类型,然后再用*取值,
变成stu类型,才能比较大小。*/
stu c=*(stu*)a;
stu d=*(stu*)b;
//按成绩升序排序
return c.score-d.score;
}
main(){
int n;
stu sz[];
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%s %s %d %d",&sz[i].name,&sz[i].sex,&sz[i].age,&sz[i].score);
}
/*
qsort函数参数:
1 待排序数组首地址;
2 数组中待排序元素数量;
3 各元素的占用空间大小,推荐使用sizeof(s[0])这样,特别是对结构体 ;
4 指向函数的指针,用于确定排序的顺序.
注意:如果要对数组进行部分排序,比如对一个s[n]的数组排列其从s[i]开始的m个元素,只需要
在第一个和第二个参数上进行一些修改:qsort(&s[i],m,sizeof(s[i]),cmp);
*/
qsort(sz,n,sizeof(sz[]),cmp);
for(int i=;i<n;i++){
printf("%s %s %d %d\n",sz[i].name,sz[i].sex,sz[i].age,sz[i].score);
}
}

代码二:

 #include<stdio.h>
#include<string.h>
//结构体
struct student
{
char name[];
char sex[];
int age;
int score;
};
int main()
{
int n;
scanf("%d",&n);
student stu[];
for(int i=;i<n;i++)
{
scanf("%s %s %d %d",&stu[i].name,&stu[i].sex,&stu[i].age,&stu[i].score);
}
for(int i=;i<n-;i++)
{
int j=i+;
if(stu[i].score>stu[j].score)
{
char str[];
strcpy(str,stu[i].name);
strcpy(stu[i].name,stu[j].name);
strcpy(stu[j].name,str); strcpy(str,stu[i].sex);
strcpy(stu[i].sex,stu[j].sex);
strcpy(stu[j].sex,str); int t;
t=stu[i].score;
stu[i].score=stu[j].score;
stu[j].score=t; t=stu[i].age;
stu[i].age=stu[j].age;
stu[j].age=t;
i=-;//如果进行了排序那么前面的可能还需排序。
}
}
for(int i=;i<n;i++)
{
printf("%s %s %d %d\n",stu[i].name,stu[i].sex,stu[i].age,stu[i].score);
}
return ;
}
 
 

C语言 · 学生信息(P1102)的更多相关文章

  1. c语言学生信息管理系统-学习结构体

    #include<stdio.h> #include<stdlib.h> //结构体可以存放的学生信息最大个数,不可变变量 ; //学生信息结构体数组,最多可以存放100个学生 ...

  2. C语言学生信息管理系统项目源码

    #include   //包含printf().scanf().gets().puts().getchar()函数 #include   //包含malloc()函数 #include   //包含s ...

  3. C语言练习-学生信息管理系统

    题目要求: 学生信息管理系统struct studentInfo{ int id; char name[128]; int age; char sex; int c_score; int cpp_sc ...

  4. 使用C语言协助办公_02批量修改学生信息

    最新录制了一个使用C语言批量修改学生信息的视频,主要是讲了如何处理文件路径以及批量修改的思路.灵感来源于需要将整个17级社保照片按规格改名字.具体见:https://chuanke.baidu.com ...

  5. 【转载】C语言综合实验1—学生信息管理系统

    http://www.cnblogs.com/Anker/archive/2013/05/06/3063436.html 实验题目:学生信息管理系统 实验要求:用户可以选择1-7可以分别进行学生信息的 ...

  6. C语言小练习之学生信息管理系统

    C语言小练习之学生信息管理系统 main.c文件   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2 ...

  7. 数据结构(c语言)之学生信息管理系统

    程序思维导图 代码表示(代码参考:长春大学-牛言涛老师) 如有错误请指出欢迎交流 #include<stdio.h> #include<malloc.h>//动态存储分配函数头 ...

  8. 大一C语言结课设计之《学生信息管理系统》

    第一次写这么长的程序,代码仅供參考,有问题请留言. /* ** 学生信息管理系统 ** IDE:Dev-Cpp 4.9.9.2 ** 2014-6-15 */ #include <stdio.h ...

  9. 学生信息管理系统(c语言)

    ①注意: 程序中使用了sleep()函数.system()函数 关于 sleep() 函数 sleep() 函数的头文件和用法会因环境的不同而有所不同. 具体见-sleep()函数功能及用法 关于sy ...

随机推荐

  1. Java API 各个包的内容解释

    java.applet 提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类. java.awt 包含用于创建用户界面和绘制图形图像的所有类. java.awt. ...

  2. PHP中的一些安全配置

    PHP中的配置至关重要,包含php.ini的配置,还有系统权限的配置,一下是我总结的一些配置 一.PHP的模块 ./configure \ --with-libdir=lib64 \ --prefix ...

  3. HDUOJ----A Computer Graphics Problem

    A Computer Graphics Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  4. js 对象操作 对象原型操作 把一个对象A赋值给另一个对象B 并且对象B 修改 不会影响 A对象

    我最近在做一个vue + element-UI + vue-resource + vuex项目的时候,遇到了一个对象的问题. 当我们在项目需要 复制一个对象到另一个对象并且  被复制的对象不能受复制后 ...

  5. Linux中断 - ARM中断处理过程

    一.前言 本文主要以ARM体系结构下的中断处理为例,讲述整个中断处理过程中的硬件行为和软件动作.具体整个处理过程分成三个步骤来描述: 1.第二章描述了中断处理的准备过程 2.第三章描述了当发生中的时候 ...

  6. C#趣味程序---车牌号推断

    甲说前两位同样,乙说后两位同样,丙说四位的车牌号刚好是一个数的平方.这个车牌号是多少? using System; namespace ConsoleApplication1 { class Prog ...

  7. Python2 字典 cmp() 函数

    描述 Python 字典的 cmp() 函数用于比较两个字典元素,如果 dict1 < dict2 返回 -1, 如果 dict1 == dict2 返回 0, 如果 dict1 > di ...

  8. ArraySegmentSample

    class Program { static void Main() { , , , , , }; , , , , , , }; ] { , ), , ) }; var sum = SumOfSegm ...

  9. ubuntu16安装squid代理服务器

    如果有一台电脑可以上网,想让其他电脑通过代理上网.可以使用这种方法. 1 安装squid sudo apt-get update sudo apt-get install squid 2 修改配置文件 ...

  10. Spring事务管理实现方式之编程式事务与声明式事务详解(转)

    原文:https://blog.csdn.net/liaohaojian/article/details/70139151 编程式事务 编码方式实现事务管理(代码演示为JDBC事务管理) Spring ...