c语言练习
- #include<stdio.h>
- struct student{
- char name[];
- int No;
- int sub[];
- int sum;
- };
- int strcmp(char *s, char *t)
- {
- int i;
- for(i = ; s[i] == t[i]; i ++)
- if(s[i] == '\0')
- return ;
- return s[i] - t[i];
- }
- int main()
- {
- struct student stu[];
- struct student sort_byname[], sort_byNo[], sort_bysum[];
- int i, j, a, b, c;
- int last_three;
- // open file
- FILE *fp;
- fp = fopen("info.dat" , "r");
- // operate file
- i = a = b = c = ;
- while(!feof(fp)){
- 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[]);
- // 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]);
- last_three = stu[i].No % ;
- // printf("%d\n", last_three);
- if(last_three% == )
- sort_byname[a++] = stu[i];
- else if(last_three% == )
- sort_byNo[b++] = stu[i];
- else if(last_three% == )
- sort_bysum[c++] = stu[i];
- i++;
- }
- for(int k = ; k < i; k++)
- for(int l = ; l < ; l++)
- stu[k].sum += stu[k].sub[l];
- //printf("%s\n", sort_byname[1].name);
- // printf("x = %d\n", strcmp("abcd" , "zabcd"));
- // close file
- fclose(fp);
- struct student temp;
- for(i = ; i < a; i++)
- for(j = ; j < a-i-; j++)
- if(strcmp(sort_byname[j].name , sort_byname[j+].name) > ){
- temp = sort_byname[j];
- sort_byname[j] = sort_byname[j+];
- sort_byname[j+] = temp;
- }
- for(i = ; i < b; i++)
- for(j = ; j < b-i-; j++)
- if(sort_byNo[j].No > sort_byNo[j].No){
- temp = sort_byname[j];
- sort_byname[j] = sort_byname[j+];
- sort_byname[j+] = temp;
- }
- for(i = ; i < c; i++)
- for(j = ; j < c-i-; j++)
- if(sort_bysum[j].sum > sort_bysum[j].sum){
- temp = sort_byname[j];
- sort_byname[j] = sort_byname[j+];
- sort_byname[j+] = temp;
- }
- // open file
- FILE *fp2;
- fp2 = fopen("infosort.dat" , "w");
- // operate file
- fprintf(fp2, "sort_byname:\n");
- for(i = ; i < a; i++)
- 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[]);
- fprintf(fp2, "sort_byNo:\n");
- for(i = ; i < b; i++)
- 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[]);
- fprintf(fp2, "sort_bysum:\n");
- for(i = ; i < c; i++)
- 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[]);
- // close file
- fclose(fp2);
- return ;
- }
注释是在写的中途的测试
以下是由于没写测试写崩的代码(没有正确结果):
- #include<stdio.h>
- #define MAX 100
- struct student{
- char name[];
- int num;
- int score[];
- int sum;
- };
- int main()
- {
- struct student stu[MAX];
- int i, j, k;
- struct student sort_byname[MAX], sort_bynum[MAX], sort_bysum[MAX];
- int a, b, c; // 统计各类学生的数目
- // 1-从文件info.dat读入数据并分类
- FILE *fp;
- fp = fopen("info.dat" , "r");
- i = a = b = c = ;
- while(!feof){
- fscanf(fp , "%s", &stu[i].name);
- fscanf(fp , "%d", &stu[i].num);
- for(k = ; k < ; k++){
- fscanf(fp, "%d", &stu[i].score[k]);
- stu[i].sum += stu[i].score[k]; // 统计总分
- }
- // 分类
- if(stu[i].num% == )
- sort_byname[a++] = stu[i];
- if(stu[i].num% == )
- sort_bynum[b++] = stu[i];
- if(stu[i].num% == )
- sort_bysum[c++] = stu[i];
- i++;
- }
- fclose(fp);
- // 2-对数据进行排序
- int strcmp(char *s, char *t);
- void swap(struct student *s, struct student *t);
- for(i = ; i < a; i ++)
- for(j = ; j < a-i-; j ++)
- if(strcmp(sort_byname[j].name , sort_byname[j+].name) > )
- swap(&sort_byname[j] , &sort_byname[j+]);
- for(i = ; i < b; i ++)
- for(j = ; j < b-i-; j ++)
- if(sort_bynum[j].num > sort_bynum[j+].num)
- swap(&sort_bynum[j] , &sort_bynum[j+]);
- for(i = ; i < c; i ++)
- for(j = ; j < c-i-; j ++)
- if(sort_bynum[j].sum > sort_bynum[j+].sum)
- swap(&sort_bysum[j] , &sort_bysum[j+]);
- // 3-将数据写入 infosort.dat 以下可以用函数实现。。。。。。
- fp = fopen("infosort.dat" , "w");
- fprintf(fp, "sort_byname:\n");
- for(i = ; i < a; i ++){
- fprintf(fp , "%s ", sort_byname[i].name);
- fprintf(fp , "%d ", sort_byname[i].num);
- for(k = ; k < ; k++)
- fprintf(fp, "%d ", sort_byname[i].score[k]);
- }
- fprintf(fp, "sort_bynum:\n");
- for(i = ; i < b; i ++){
- fprintf(fp , "%s ", sort_bynum[i].name);
- fprintf(fp , "%d ", sort_bynum[i].num);
- for(k = ; k < ; k++)
- fprintf(fp, "%d ", sort_bynum[i].score[k]);
- }
- fprintf(fp, "sort_bysum:\n");
- for(i = ; i < c; i ++){
- fprintf(fp , "%s ", sort_bysum[i].name);
- fprintf(fp , "%d ", sort_bysum[i].num);
- for(k = ; k < ; k++)
- fprintf(fp, "%d ", sort_bysum[i].score[k]);
- }
- fclose(fp);
- return ;
- }
- int strcmp(char *s, char *t)
- {
- int i;
- for(i = ; s[i] == t[i]; i ++)
- if(s[i] == '\0')
- return ;
- return s[i] - t[i];
- }
- void swap(struct student *s, struct student *t)
- {
- struct student temp;
- temp = *s;
- *s = *t;
- *t = temp;
- }
测试文件:
- wang 67.5 78.9 88.0 99.2
- zhang 89.7 45.6 78.8 85.7
- tang 56.6 77.7 89.9 85.7
- li 56.6 45.6 56.6 85.7
- ren 99.9 77.7 89.9 85.7
- fa 44.4 55.5 56.6 85.7
- compu 56.6 77.7 89.9 85.7
c语言练习的更多相关文章
- C语言 · 高精度加法
问题描述 输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储.对于这种问题,一般使用数组来处理. 定义一个数组A ...
- Windows server 2012 添加中文语言包(英文转为中文)(离线)
Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...
- iOS开发系列--Swift语言
概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...
- C语言 · Anagrams问题
问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的.例如,"Unclear"和"Nuclear ...
- C语言 · 字符转对比
问题描述 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一: 1:两个字符串长度不等.比如 Beijing 和 Hebei 2:两个字符串不仅长度相 ...
- JAVA语言中的修饰符
JAVA语言中的修饰符 -----------------------------------------------01--------------------------------------- ...
- Atitit 项目语言的选择 java c#.net php??
Atitit 项目语言的选择 java c#.net php?? 1.1. 编程语言与技术,应该使用开放式的目前流行的语言趋势1 1.2. 从个人职业生涯考虑,java优先1 1.3. 从项目实际来 ...
- 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...
- InstallShield 脚本语言学习笔记
InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加. 一.基本语法规则 ...
- 用C语言封装OC对象(耐心阅读,非常重要)
用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...
随机推荐
- WebSocket///////////////////////z
作者:Ovear链接:http://www.zhihu.com/question/20215561/answer/40316953来源:知乎著作权归作者所有,转载请联系作者获得授权. 一.WebSoc ...
- c#-SimHash匹配相似-算法
使用场景:Google 的 simhash 算法 //通过大量测试,simhash用于比较大文本,比如500字以上效果都还蛮好,距离小于3的基本都是相似,误判率也比较低. //从我的经验,如果我们假定 ...
- leetcode:1-5题代码整理
以下是这段时间抽时间刷的前5题,都是自己想的解法,或许不是最优解,只是整理下,方便日后优化提升 1. Two Sum: class Solution: # @return a tuple, (inde ...
- BigInteger和BigDecimal大数操作
有时候可能会碰到需要计算非常大的数,比如7777777777777777777777777*3333333333333333333333333333,这样的计算需要显然不能用之前的方式来进行.我们不能 ...
- myfocus官方网站已经挂掉,相关下载已经从googlecode转到网盘
首先说,我跟作者没有任何关系,只是偶然发现这个东西,努力了1个多小时才有下载,现在友情提供出来. 其次,我找到的是v2.0.4 MS这个是最新的版本,更新日期是2012年10月. 再次,本文原本是准备 ...
- Ajax.BeginForm()实现ajax无刷新提交
1. 同时安装 Microsoft jQuery Unobtrusive ajax 和 jQuery Unobtrusive Ajax,如下图 安装完成之后多了如下的js库 2. 引用该js库 lay ...
- sqlalchemy ORM
本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 1. ORM介绍 orm英文全称object ...
- struts.xml配置详解 内部资料 请勿转载 谢谢合作
1.<include> 利用include标签,可以将一个struts.xml配置文件分割成多个配置文件,然后在struts.xml中使用<include>标签引入其他配置文件 ...
- flag+文件操作
flag标志位,标识位,在其他语言中可能叫开关,个人觉得当作开关更容易理解.下面我们来利用这个开关来控制文件操作的流程,从而优雅的修改配置文件. global log 127.0.0.1 local2 ...
- Unity LightmapParameters的使用
Unity5的烘培十分不好用,今天看官方demo时发现可以用LightmapParameters对模型的GI配置进行单独覆写,介绍一下 LightmapParameters可以把全局光照的配置做成预设 ...