这是帮别人做的一个题目,好久没有接触过C语言了。有点发怵,只是似乎找回点当时学C语言,做课程设计的感觉。

题目:定义一个数组(学生结构体数组),里面包括学号、姓名、身份证和三科学生成绩。要求写一个函数,依据学生不论什么一个字段(如学号、姓名、身份证),进行排序。

源代码:

  1. //// stu.cpp : Defines the entry point for the console application.
  2. ////
  3. //
  4. #include "stdafx.h"
  5. //------------------------------------------指针排序-------------------------------------------------------------------------------
  6.  
  7. #include<stdio.h>
  8. #include<stdlib.h>
  9. #include<string.h>
  10.  
  11. #define N 3
  12.  
  13. //学生结构体
  14. struct student{
  15. long stuNum; //学号
  16. char name[20];//姓名
  17. char idCard[18];//身份证
  18. float score[3];//三门成绩
  19. };
  20.  
  21. //依据学生姓名排序
  22. void name_sort(student *stu,int n)
  23. {
  24. student temp;
  25. for(int i=0;i<n-1;i++)
  26. {
  27. for(int j=0;j<n-1-i;j++)
  28. {
  29. if(strcmp(stu[j].name,stu[j+1].name)>0)
  30. {
  31. temp =stu[j+1];
  32. stu[j+1]=stu[j];
  33. stu[j]=temp;
  34.  
  35. }
  36. }
  37. }
  38.  
  39. printf("\n");
  40. printf("*依据学生姓名排序后的学生情况:\n\n");
  41.  
  42. for(int i=0;i<N;i++)
  43. {
  44. printf("第 %d 个学生信息:\n学号:%ld\t姓名:%s\t身份证:%s\t语文:%.2f\t数学:%.2f\t英语:%.2f\n\n",i+1,stu[i].stuNum,stu[i].name,stu[i].idCard,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
  45.  
  46. }
  47. }
  48. //依据身份证进行排序
  49. void idCard_sort(student *stu,int n)
  50. {
  51. student temp;
  52. for(int i=0;i<n-1;i++)
  53. {
  54. for(int j=0;j<n-1-i;j++)
  55. {
  56. if(strcmp(stu[j].idCard,stu[j+1].idCard)>0)
  57. {
  58. temp =stu[j+1];
  59. stu[j+1]=stu[j];
  60. stu[j]=temp;
  61.  
  62. }
  63. }
  64. }
  65.  
  66. printf("\n");
  67. printf("*依据学生身份证排序后的学生情况:\n\n");
  68.  
  69. for(int i=0;i<N;i++)
  70. {
  71. printf("第 %d 个学生信息:\n学号:%ld\t姓名:%s\t身份证:%s\t语文:%.2f\t数学:%.2f\t英语:%.2f\n\n",i+1,stu[i].stuNum,stu[i].name,stu[i].idCard,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
  72.  
  73. }
  74.  
  75. }
  76.  
  77. //依据学号进行排序
  78.  
  79. void stuNum_sort(student *stu,int n)
  80. {
  81.  
  82. student temp;
  83. for(int i=0;i<n-1;i++)
  84. {
  85. for(int j=0;j<n-1-i;j++)
  86. {
  87. if(stu[j].stuNum>stu[j+1].stuNum)
  88. {
  89. temp =stu[j+1];
  90. stu[j+1]=stu[j];
  91. stu[j]=temp;
  92.  
  93. }
  94. }
  95. }
  96.  
  97. printf("\n");
  98. printf("*依据学生学号排序后的学生情况:\n\n");
  99.  
  100. for(int i=0;i<N;i++)
  101. {
  102. printf("第 %d 个学生信息:\n学号:%ld\t姓名:%s\t身份证:%s\t语文:%.2f\t数学:%.2f\t英语:%.2f\n\n",i+1,stu[i].stuNum,stu[i].name,stu[i].idCard,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
  103.  
  104. }
  105.  
  106. }
  107.  
  108. //main函数
  109.  
  110. int main()
  111. {
  112.  
  113. struct student stu[N],*pStu;
  114.  
  115. //控制台屏幕变为蓝色背景
  116. system("color 1f");
  117.  
  118. printf("请依次输入学生的学号,姓名,身份证,三门成绩(空格分开)\n");
  119. for(int i=0;i<N;i++)
  120. {
  121. printf("输入第 %d 个学生的信息\n",i+1);
  122. scanf("%ld%s%s%f%f%f",&stu[i].stuNum,stu[i].name,stu[i].idCard,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
  123.  
  124. }
  125.  
  126. pStu=stu;
  127.  
  128. //清屏
  129. system("cls");
  130.  
  131. printf("\n*** 输入1 依照学生学号排序 ***\n*** 输入2 依照学生姓名排序 ***\n*** 输入3 依照学生身份证排序 ***\n*** 输入0 退出 ***\n\n");
  132.  
  133. printf("请输入:");
  134. int t;
  135. scanf("%d",&t);
  136.  
  137. //循环
  138. do{
  139. //依据用户输入的值选择排序的字段
  140. switch (t)
  141. {
  142. case 1:
  143. stuNum_sort(pStu,N);//学号排序
  144. break;
  145. case 2:
  146. name_sort(pStu,N);//姓名排序
  147. break;
  148.  
  149. case 3:
  150. idCard_sort(pStu,N);//身份证排序
  151. break;
  152.  
  153. default:
  154. name_sort(pStu,N);
  155. }
  156.  
  157. printf("\n请输入:");
  158. scanf("%d",&t);
  159.  
  160. }while(t!=0);
  161.  
  162. return 1;
  163. }
  164.  
  165. //------------------没有指针--------------------------------------------------------------------------------------------------
  166.  
  167. //
  168. //#include<stdio.h>
  169. //#include<stdlib.h>
  170. //#include<string.h>
  171. //
  172. //#define N 5
  173. //
  174. ////学生结构体
  175. //struct student{
  176. // long stuNum; //学号
  177. // char name[20];//姓名
  178. // char idCard[18];//身份证
  179. // float score[3];//三门成绩
  180. //};
  181. //
  182. //
  183. ////依据学生姓名排序
  184. //void name_sort(student stu[],int n)
  185. //{
  186. // student temp;
  187. // for(int i=0;i<n-1;i++)
  188. // {
  189. // for(int j=0;j<n-1-i;j++)
  190. // {
  191. // if(strcmp(stu[j].name,stu[j+1].name)>0)
  192. // {
  193. // temp =stu[j+1];
  194. // stu[j+1]=stu[j];
  195. // stu[j]=temp;
  196. //
  197. // }
  198. // }
  199. // }
  200. //
  201. //
  202. // printf("\n");
  203. // printf("*依据学生姓名排序后的学生情况:\n\n");
  204. //
  205. // for(int i=0;i<N;i++)
  206. // {
  207. // printf("第 %d 个学生信息:\n学号:%ld\t姓名:%s\t身份证:%s\t语文:%.2f\t数学:%.2f\t英语:%.2f\n\n",i+1,stu[i].stuNum,stu[i].name,stu[i].idCard,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
  208. //
  209. // }
  210. //
  211. //
  212. //}
  213. ////依据身份证进行排序
  214. //void idCard_sort(student stu[],int n)
  215. //{
  216. // student temp;
  217. // for(int i=0;i<n-1;i++)
  218. // {
  219. // for(int j=0;j<n-1-i;j++)
  220. // {
  221. // if(strcmp(stu[j].idCard,stu[j+1].idCard)>0)
  222. // {
  223. // temp =stu[j+1];
  224. // stu[j+1]=stu[j];
  225. // stu[j]=temp;
  226. //
  227. // }
  228. // }
  229. // }
  230. //
  231. //
  232. // printf("\n");
  233. // printf("*依据学生身份证排序后的学生情况:\n\n");
  234. //
  235. // for(int i=0;i<N;i++)
  236. // {
  237. // printf("第 %d 个学生信息:\n学号:%ld\t姓名:%s\t身份证:%s\t语文:%.2f\t数学:%.2f\t英语:%.2f\n\n",i+1,stu[i].stuNum,stu[i].name,stu[i].idCard,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
  238. //
  239. // }
  240. //
  241. //
  242. //}
  243. //
  244. ////依据学号进行排序
  245. //
  246. //void stuNum_sort(student stu[],int n)
  247. //{
  248. // student temp;
  249. //
  250. // for(int i=0;i<n-1;i++)
  251. // {
  252. // for(int j=0;j<n-1-i;j++)
  253. // {
  254. // if(stu[j].stuNum>stu[j+1].stuNum)
  255. // {
  256. // temp =stu[j+1];
  257. // stu[j+1]=stu[j];
  258. // stu[j]=temp;
  259. //
  260. // }
  261. // }
  262. // }
  263. //
  264. //
  265. // printf("\n");
  266. // printf("*依据学生学号排序后的学生情况:\n\n");
  267. //
  268. // for(int i=0;i<N;i++)
  269. // {
  270. // printf("第 %d 个学生信息:\n学号:%ld\t姓名:%s\t身份证:%s\t语文:%.2f\t数学:%.2f\t英语:%.2f\n\n",i+1,stu[i].stuNum,stu[i].name,stu[i].idCard,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
  271. //
  272. // }
  273. //
  274. //
  275. //}
  276. //
  277. ////main函数
  278. //
  279. //int main()
  280. //{
  281. //
  282. // struct student stu[N];
  283. //
  284. // //控制台屏幕变为蓝色背景
  285. // system("color 1f");
  286. //
  287. // printf("请依次输入学生的学号,姓名,身份证,三门成绩(空格分开)\n");
  288. // for(int i=0;i<N;i++)
  289. // {
  290. // printf("输入第 %d 个学生的信息\n",i+1);
  291. // scanf("%ld%s%s%f%f%f",&stu[i].stuNum,stu[i].name,stu[i].idCard,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
  292. //
  293. // }
  294. //
  295. // //清屏
  296. // system("cls");
  297. //
  298. //
  299. // //printf("*你所输入的学生信息情况:\n");
  300. // //for(i=0;i<N;i++)
  301. // //{
  302. // // printf("第 %d 个学生信息:\n学号:%ld\t姓名:%s\t身份证:%s\t语文:%.2f\t数学:%.2f\t英语:%.2f\n",i+1,stu[i].stuNum,stu[i].name,stu[i].idCard,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
  303. // //
  304. // //}
  305. //
  306. //
  307. // printf("\n*** 输入1 依照学生学号排序 ***\n*** 输入2 依照学生姓名排序 ***\n*** 输入3 依照学生身份证排序 ***\n*** 输入0 退出 ***\n\n");
  308. //
  309. // printf("请输入:");
  310. // int t;
  311. // scanf("%d",&t);
  312. //
  313. // //循环
  314. // do{
  315. // //依据用户输入的值选择排序的字段
  316. // switch (t)
  317. // {
  318. // case 1:
  319. // stuNum_sort(stu,N);//学号排序
  320. // break;
  321. // case 2:
  322. // name_sort(stu,N);//姓名排序
  323. // break;
  324. //
  325. // case 3:
  326. // idCard_sort(stu,N);//身份证排序
  327. // break;
  328. //
  329. // default:
  330. // name_sort(stu,N);
  331. // }
  332. //
  333. //
  334. // printf("\n请输入:");
  335. // scanf("%d",&t);
  336. //
  337. // }while(t!=0);
  338. //
  339. //
  340. // return 1;
  341. //}

首页效果图:

资源下载:

http://download.csdn.net/my/uploads

C语言-对一个结构体中的字段进行排序的更多相关文章

  1. C结构体中数据的内存对齐问题

    转自:http://www.cnblogs.com/qwcbeyond/archive/2012/05/08/2490897.html 32位机一般默认4字节对齐(32位机机器字长4字节),64位机一 ...

  2. Go语言基础之结构体

    Go语言基础之结构体 Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 类型别名和自定义类型 自定义类型 在G ...

  3. Go语言教程之结构体

    Hello,大家好,我是小栈君,最近因为工作的事情延误了一点分享的进度,但是我会尽量抽时间分享关于IT干货知识,还希望大家能够持续关注"IT干货栈"哦. 闲话不多说,今天给大家继续 ...

  4. GO学习-(13) Go语言基础之结构体

    Go语言基础之结构体 Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. ...

  5. matlab学习笔记12_2创建结构体数组,访问标量结构体,访问非标量结构体数组的属性,访问嵌套结构体中的数据,访问非标量结构体数组中多个元素的字段

    一起来学matlab-matlab学习笔记12 12_2 结构体 创建结构体数组,访问标量结构体,访问非标量结构体数组的属性,访问嵌套结构体中的数据,访问非标量结构体数组中多个元素的字段 觉得有用的话 ...

  6. c语言结构体中的一个char数组怎么赋值?

    目录 前景提示 这里的结构体处理的步骤 一.char数组类型的处理 二.char数组指针类型的处理 三.全部代码 1. char数组 2. char数组指针 结语 前景提示 定义一个结构体,结构体中有 ...

  7. C语言 结构体中的成员域偏移量

    //C语言中结构体中的成员域偏移量 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> # ...

  8. C语言结构体中的函数指针

      这篇文章简单的叙述一下函数指针在结构体中的应用,为后面的一系列文章打下基础 本文地址:http://www.cnblogs.com/archimedes/p/function-pointer-in ...

  9. c语言结构体中的冒号的用法

    结构体中常见的冒号的用法是表示位域. 有些信息在存储时,并不需要占用一个完整的字节,   而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1   两种状态,   用一位二进位即可.为了节省 ...

随机推荐

  1. POJ 1160 Post Office(DP+经典预处理)

    题目链接:http://poj.org/problem?id=1160 题目大意:在v个村庄中建立p个邮局,求所有村庄到它最近的邮局的距离和,村庄在一条直线上,邮局建在村庄上. 解题思路:设dp[i] ...

  2. 原生DOM选择器querySelector和querySelectorAll

    在传统的 JavaScript 开发中,查找 DOM 往往是开发人员遇到的第一个头疼的问题,原生的 JavaScript 所提供的 DOM 选择方法并不多,仅仅局限于通过 tag, name, id ...

  3. SGU 202. The Towers of Hanoi Revisited

    多柱汉诺塔问题. 引用自wiki百科 多塔汉诺塔问题 在有3个柱子时,所需步数的公式较简单,但对于4个以上柱子的汉诺塔尚未得到通用公式,但有一递归公式(未得到证明,但目前为止没有找到反例): 令为在有 ...

  4. CentOS7.5删除旧的内核

    [root@localhost ~]# uname -r3.10.0-862.3.2.el7.x86_64 [root@localhost ~]# rpm -qa | grep kernelkerne ...

  5. 排序算法总结(C语言版)

    排序算法总结(C语言版) 1.    插入排序 1.1     直接插入排序 1.2     Shell排序 2.    交换排序 2.1     冒泡排序 2.2     快速排序 3.    选择 ...

  6. spring mvc 表单提交 乱码

    1.在web.xml添加过滤器: <filter> <filter-name>SpringCharacterEncoding</filter-name> <f ...

  7. hdu多校4

    Problem L. Graph Theory Homework 思路:很容易想到一步从 1 走到 n 最优. #include<bits/stdc++.h> #define LL lon ...

  8. lsof恢复进程打开的文件

    工作原理:进程每打开文件都会生成一个文件句柄FD来标识一个文件,进程打开的文件如果没有被释放,可以通过文件句柄FD来恢复删除的文件 注意:适合恢复进程一直在打开一个文件,例如日志文件,如果配置文件进程 ...

  9. win 10 用户上传头像保存的文件夹路径

    win 10 用户上传头像保存的文件夹路径 C:\Users\Administrator(用户名)\AppData\Roaming\Microsoft\Windows\AccountPictures

  10. vmware漏洞之四:简评USE-AFTER-SILENCE: EXPLOITING A QUIETLY PATCHED UAF IN VMWARE

    转:https://www.zerodayinitiative.com/blog/2017/6/26/use-after-silence-exploiting-a-quietly-patched-ua ...