#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语言练习的更多相关文章

  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. 在Eclipse 中使用tomcat8

    最新版本的Eclipse让人不支持 Tomcat 8,该方法让Eclipse能使用Tomcat8 第一步:下载最新版本Eclipse for Java EE 第二步:到WTP downloads pa ...

  2. sql语句把字段中的某个字符去掉

    sql语句把字段中的某个字符去掉 )),'http://demo.m-school.net','') 例如: )),'http://192.168.2.180','') )),'http://zpzx ...

  3. VMWare虚拟机下为Ubuntu 12.04.1配置静态IP(NAT连接方式)

    背景 在虚拟机下运行操作系统,尤其是Linux系统已经是非常常见的做法.有时你想在虚拟机下搭建一个(模拟)服务器来供主机访问,比如搭建一个telnet/ssh.此时你会发现,每次启动虚拟机,VMWar ...

  4. 将webservice封装成dll

    生成dll文件的步骤如下:1.发布完成后,在浏览器中打开WebService文件,如:http://localhost/WebSer/WebService1.asmx,可以看到WebService1. ...

  5. app加固

    为什么要加固APP? 答:因为黑客通过反编译APK得到源码后,会在应用中插入代码,获取利益,比如添加广告,盗取用户账号.密码,后台定制活动等.   反编译的方法? 反编译是指apk文件通过反编译工具( ...

  6. Java图形化用户界面(GUI)笔记(一)介绍

    一.布局 1.组件 以图形化的方式显示在屏幕上的,和用户进行交互的对象,就叫做组件. 组件包括:菜单.标签.文本框(密码框).滚动条.单选.复选.按钮等等. 2.容器 组件不能独立的显示出来,只能将组 ...

  7. 关于APK签名的一些东西

    什么是APK 了解APK签名之前,首先要知道什么是apk文件:APK是AndroidPackage的缩写,即Android安装包(apk),APK文件其实就是zip格式的文件,只是后缀被改为了apk, ...

  8. JBOSS服务器的安装及配置

    1 安装jdk(jdk-1_5_0_05-windows-i586-p.exe)2 配置jdk环境 安装完成后还需要配置运行时环境:右键点击"我的电脑"->"属性& ...

  9. wex5 实战 用户点评与提交设计技巧

    最近遇到很多同学做毕业设计,其中有一项是用户点评与提交.功能并不复杂,同学们又不会,做为一个完整的功能,如果用wex5来设计开发,事半功倍.今天就以景区实战来向大家展示wex5的高效与强大.半天可以设 ...

  10. 脚本调用脚本时.与bash的差别

    在做项目时,发现脚本调用脚本时,会意外退出任务. 下面的脚本是父脚本: #!/bin/bash . ./data/child.sh echo 123sds echo "45gfdg" ...