1. #include<stdio.h>
  2.  
  3. struct student{
  4. char name[];
  5. int No;
  6. int sub[];
  7. int sum;
  8. };
  9.  
  10. int strcmp(char *s, char *t)
  11. {
  12. int i;
  13.  
  14. for(i = ; s[i] == t[i]; i ++)
  15. if(s[i] == '\0')
  16. return ;
  17. return s[i] - t[i];
  18. }
  19.  
  20. int main()
  21. {
  22. struct student stu[];
  23. struct student sort_byname[], sort_byNo[], sort_bysum[];
  24. int i, j, a, b, c;
  25. int last_three;
  26.  
  27. // open file
  28. FILE *fp;
  29. fp = fopen("info.dat" , "r");
  30.  
  31. // operate file
  32. i = a = b = c = ;
  33. while(!feof(fp)){
  34. fscanf(fp, "%s %d %d %d %d %d", &stu[i].name, &stu[i].No, &stu[i].sub[], &stu[i].sub[], &stu[i].sub[], &stu[i].sub[]);
  35. // printf("%s %d %d %d %d %d\n", stu[i].name, stu[i].No, stu[i].sub[0], stu[i].sub[1], stu[i].sub[2], stu[i].sub[3]);
  36. last_three = stu[i].No % ;
  37. // printf("%d\n", last_three);
  38. if(last_three% == )
  39. sort_byname[a++] = stu[i];
  40. else if(last_three% == )
  41. sort_byNo[b++] = stu[i];
  42. else if(last_three% == )
  43. sort_bysum[c++] = stu[i];
  44. i++;
  45. }
  46.  
  47. for(int k = ; k < i; k++)
  48. for(int l = ; l < ; l++)
  49. stu[k].sum += stu[k].sub[l];
  50.  
  51. //printf("%s\n", sort_byname[1].name);
  52. // printf("x = %d\n", strcmp("abcd" , "zabcd"));
  53. // close file
  54. fclose(fp);
  55.  
  56. struct student temp;
  57. for(i = ; i < a; i++)
  58. for(j = ; j < a-i-; j++)
  59. if(strcmp(sort_byname[j].name , sort_byname[j+].name) > ){
  60. temp = sort_byname[j];
  61. sort_byname[j] = sort_byname[j+];
  62. sort_byname[j+] = temp;
  63. }
  64.  
  65. for(i = ; i < b; i++)
  66. for(j = ; j < b-i-; j++)
  67. if(sort_byNo[j].No > sort_byNo[j].No){
  68. temp = sort_byname[j];
  69. sort_byname[j] = sort_byname[j+];
  70. sort_byname[j+] = temp;
  71. }
  72.  
  73. for(i = ; i < c; i++)
  74. for(j = ; j < c-i-; j++)
  75. if(sort_bysum[j].sum > sort_bysum[j].sum){
  76. temp = sort_byname[j];
  77. sort_byname[j] = sort_byname[j+];
  78. sort_byname[j+] = temp;
  79. }
  80.  
  81. // open file
  82. FILE *fp2;
  83. fp2 = fopen("infosort.dat" , "w");
  84.  
  85. // operate file
  86. fprintf(fp2, "sort_byname:\n");
  87. for(i = ; i < a; i++)
  88. fprintf(fp2, "%s %d %d %d %d %d\n", sort_byname[i].name, sort_byname[i].No, sort_byname[i].sub[], sort_byname[i].sub[], sort_byname[i].sub[], sort_byname[i].sub[]);
  89.  
  90. fprintf(fp2, "sort_byNo:\n");
  91. for(i = ; i < b; i++)
  92. fprintf(fp2, "%s %d %d %d %d %d\n", sort_byNo[i].name, sort_byNo[i].No, sort_byNo[i].sub[], sort_byNo[i].sub[], sort_byNo[i].sub[], sort_byNo[i].sub[]);
  93.  
  94. fprintf(fp2, "sort_bysum:\n");
  95. for(i = ; i < c; i++)
  96. fprintf(fp2, "%s %d %d %d %d %d\n", sort_bysum[i].name, sort_bysum[i].No, sort_bysum[i].sub[], sort_bysum[i].sub[], sort_bysum[i].sub[], sort_bysum[i].sub[]);
  97.  
  98. // close file
  99. fclose(fp2);
  100. return ;
  101. }

注释是在写的中途的测试

以下是由于没写测试写崩的代码(没有正确结果):

  1. #include<stdio.h>
  2. #define MAX 100
  3.  
  4. struct student{
  5. char name[];
  6. int num;
  7. int score[];
  8. int sum;
  9. };
  10.  
  11. int main()
  12. {
  13. struct student stu[MAX];
  14. int i, j, k;
  15. struct student sort_byname[MAX], sort_bynum[MAX], sort_bysum[MAX];
  16. int a, b, c; // 统计各类学生的数目
  17.  
  18. // 1-从文件info.dat读入数据并分类
  19. FILE *fp;
  20. fp = fopen("info.dat" , "r");
  21.  
  22. i = a = b = c = ;
  23. while(!feof){
  24. fscanf(fp , "%s", &stu[i].name);
  25. fscanf(fp , "%d", &stu[i].num);
  26. for(k = ; k < ; k++){
  27. fscanf(fp, "%d", &stu[i].score[k]);
  28. stu[i].sum += stu[i].score[k]; // 统计总分
  29. }
  30. // 分类
  31. if(stu[i].num% == )
  32. sort_byname[a++] = stu[i];
  33. if(stu[i].num% == )
  34. sort_bynum[b++] = stu[i];
  35. if(stu[i].num% == )
  36. sort_bysum[c++] = stu[i];
  37. i++;
  38. }
  39.  
  40. fclose(fp);
  41.  
  42. // 2-对数据进行排序
  43. int strcmp(char *s, char *t);
  44. void swap(struct student *s, struct student *t);
  45.  
  46. for(i = ; i < a; i ++)
  47. for(j = ; j < a-i-; j ++)
  48. if(strcmp(sort_byname[j].name , sort_byname[j+].name) > )
  49. swap(&sort_byname[j] , &sort_byname[j+]);
  50.  
  51. for(i = ; i < b; i ++)
  52. for(j = ; j < b-i-; j ++)
  53. if(sort_bynum[j].num > sort_bynum[j+].num)
  54. swap(&sort_bynum[j] , &sort_bynum[j+]);
  55.  
  56. for(i = ; i < c; i ++)
  57. for(j = ; j < c-i-; j ++)
  58. if(sort_bynum[j].sum > sort_bynum[j+].sum)
  59. swap(&sort_bysum[j] , &sort_bysum[j+]);
  60.  
  61. // 3-将数据写入 infosort.dat 以下可以用函数实现。。。。。。
  62. fp = fopen("infosort.dat" , "w");
  63.  
  64. fprintf(fp, "sort_byname:\n");
  65. for(i = ; i < a; i ++){
  66. fprintf(fp , "%s ", sort_byname[i].name);
  67. fprintf(fp , "%d ", sort_byname[i].num);
  68. for(k = ; k < ; k++)
  69. fprintf(fp, "%d ", sort_byname[i].score[k]);
  70. }
  71. fprintf(fp, "sort_bynum:\n");
  72. for(i = ; i < b; i ++){
  73. fprintf(fp , "%s ", sort_bynum[i].name);
  74. fprintf(fp , "%d ", sort_bynum[i].num);
  75. for(k = ; k < ; k++)
  76. fprintf(fp, "%d ", sort_bynum[i].score[k]);
  77. }
  78. fprintf(fp, "sort_bysum:\n");
  79. for(i = ; i < c; i ++){
  80. fprintf(fp , "%s ", sort_bysum[i].name);
  81. fprintf(fp , "%d ", sort_bysum[i].num);
  82. for(k = ; k < ; k++)
  83. fprintf(fp, "%d ", sort_bysum[i].score[k]);
  84. }
  85.  
  86. fclose(fp);
  87. return ;
  88. }
  89.  
  90. int strcmp(char *s, char *t)
  91. {
  92. int i;
  93.  
  94. for(i = ; s[i] == t[i]; i ++)
  95. if(s[i] == '\0')
  96. return ;
  97. return s[i] - t[i];
  98. }
  99.  
  100. void swap(struct student *s, struct student *t)
  101. {
  102. struct student temp;
  103.  
  104. temp = *s;
  105. *s = *t;
  106. *t = temp;
  107. }

测试文件:

  1. wang 67.5 78.9 88.0 99.2
  2. zhang 89.7 45.6 78.8 85.7
  3. tang 56.6 77.7 89.9 85.7
  4. li 56.6 45.6 56.6 85.7
  5. ren 99.9 77.7 89.9 85.7
  6. fa 44.4 55.5 56.6 85.7
  7. compu 56.6 77.7 89.9 85.7

c语言练习的更多相关文章

  1. C语言 · 高精度加法

    问题描述 输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储.对于这种问题,一般使用数组来处理. 定义一个数组A ...

  2. Windows server 2012 添加中文语言包(英文转为中文)(离线)

    Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...

  3. iOS开发系列--Swift语言

    概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...

  4. C语言 · Anagrams问题

    问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的.例如,"Unclear"和"Nuclear ...

  5. C语言 · 字符转对比

    问题描述 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一: 1:两个字符串长度不等.比如 Beijing 和 Hebei 2:两个字符串不仅长度相 ...

  6. JAVA语言中的修饰符

    JAVA语言中的修饰符 -----------------------------------------------01--------------------------------------- ...

  7. Atitit 项目语言的选择 java c#.net  php??

    Atitit 项目语言的选择 java c#.net  php?? 1.1. 编程语言与技术,应该使用开放式的目前流行的语言趋势1 1.2. 从个人职业生涯考虑,java优先1 1.3. 从项目实际来 ...

  8. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

    说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...

  9. InstallShield 脚本语言学习笔记

    InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加.     一.基本语法规则      ...

  10. 用C语言封装OC对象(耐心阅读,非常重要)

    用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...

随机推荐

  1. WebSocket///////////////////////z

    作者:Ovear链接:http://www.zhihu.com/question/20215561/answer/40316953来源:知乎著作权归作者所有,转载请联系作者获得授权. 一.WebSoc ...

  2. c#-SimHash匹配相似-算法

    使用场景:Google 的 simhash 算法 //通过大量测试,simhash用于比较大文本,比如500字以上效果都还蛮好,距离小于3的基本都是相似,误判率也比较低. //从我的经验,如果我们假定 ...

  3. leetcode:1-5题代码整理

    以下是这段时间抽时间刷的前5题,都是自己想的解法,或许不是最优解,只是整理下,方便日后优化提升 1. Two Sum: class Solution: # @return a tuple, (inde ...

  4. BigInteger和BigDecimal大数操作

    有时候可能会碰到需要计算非常大的数,比如7777777777777777777777777*3333333333333333333333333333,这样的计算需要显然不能用之前的方式来进行.我们不能 ...

  5. myfocus官方网站已经挂掉,相关下载已经从googlecode转到网盘

    首先说,我跟作者没有任何关系,只是偶然发现这个东西,努力了1个多小时才有下载,现在友情提供出来. 其次,我找到的是v2.0.4 MS这个是最新的版本,更新日期是2012年10月. 再次,本文原本是准备 ...

  6. Ajax.BeginForm()实现ajax无刷新提交

    1. 同时安装 Microsoft jQuery Unobtrusive ajax 和 jQuery Unobtrusive Ajax,如下图 安装完成之后多了如下的js库 2. 引用该js库 lay ...

  7. sqlalchemy ORM

    本节内容       ORM介绍     sqlalchemy安装     sqlalchemy基本使用     多外键关联     多对多关系   1. ORM介绍   orm英文全称object ...

  8. struts.xml配置详解 内部资料 请勿转载 谢谢合作

    1.<include> 利用include标签,可以将一个struts.xml配置文件分割成多个配置文件,然后在struts.xml中使用<include>标签引入其他配置文件 ...

  9. flag+文件操作

    flag标志位,标识位,在其他语言中可能叫开关,个人觉得当作开关更容易理解.下面我们来利用这个开关来控制文件操作的流程,从而优雅的修改配置文件. global log 127.0.0.1 local2 ...

  10. Unity LightmapParameters的使用

    Unity5的烘培十分不好用,今天看官方demo时发现可以用LightmapParameters对模型的GI配置进行单独覆写,介绍一下 LightmapParameters可以把全局光照的配置做成预设 ...