c语言练习

#include<stdio.h>

struct student{
    char name[20];
    int No;
    int sub[4];
    int sum;
};

int strcmp(char *s, char *t)
{
    int i;

    for(i = 0; s[i] == t[i]; i ++)
        if(s[i] == ‘\0‘)
            return 0;
    return s[i] - t[i];
}

int main()
{
    struct student stu[10];
    struct student sort_byname[10], sort_byNo[10], sort_bysum[10];
    int i, j, a, b, c;
    int last_three;

    // open file
    FILE *fp;
    fp = fopen("info.dat" , "r");

    // operate file
    i = a = b = c = 0;
    while(!feof(fp)){
        fscanf(fp, "%s %d %d %d %d %d", &stu[i].name, &stu[i].No, &stu[i].sub[0], &stu[i].sub[1], &stu[i].sub[2], &stu[i].sub[3]);
        // 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 % 1000;
        // printf("%d\n", last_three);
        if(last_three%3 == 2)
            sort_byname[a++] = stu[i];
        else if(last_three%3 == 1)
            sort_byNo[b++] = stu[i];
        else if(last_three%3 == 0)
            sort_bysum[c++] = stu[i];
        i++;
    }

    for(int k = 0; k < i; k++)
        for(int l = 0; l < 4; 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 = 0; i < a; i++)
        for(j = 0; j < a-i-1; j++)
            if(strcmp(sort_byname[j].name , sort_byname[j+1].name) > 0){
                temp = sort_byname[j];
                sort_byname[j] = sort_byname[j+1];
                sort_byname[j+1] = temp;
            }

    for(i = 0; i < b; i++)
        for(j = 0; j < b-i-1; j++)
            if(sort_byNo[j].No > sort_byNo[j].No){
                temp = sort_byname[j];
                sort_byname[j] = sort_byname[j+1];
                sort_byname[j+1] = temp;
            }

    for(i = 0; i < c; i++)
        for(j = 0; j < c-i-1; j++)
            if(sort_bysum[j].sum > sort_bysum[j].sum){
                temp = sort_byname[j];
                sort_byname[j] = sort_byname[j+1];
                sort_byname[j+1] = temp;
            }

    // open file
    FILE *fp2;
    fp2 = fopen("infosort.dat" , "w");

    // operate file
    fprintf(fp2, "sort_byname:\n");
    for(i = 0; i < a; i++)
        fprintf(fp2, "%s %d %d %d %d %d\n", sort_byname[i].name, sort_byname[i].No, sort_byname[i].sub[0], sort_byname[i].sub[1], sort_byname[i].sub[2], sort_byname[i].sub[3]);

    fprintf(fp2, "sort_byNo:\n");
    for(i = 0; i < b; i++)
        fprintf(fp2, "%s %d %d %d %d %d\n", sort_byNo[i].name, sort_byNo[i].No, sort_byNo[i].sub[0], sort_byNo[i].sub[1], sort_byNo[i].sub[2], sort_byNo[i].sub[3]);

    fprintf(fp2, "sort_bysum:\n");
    for(i = 0; i < c; i++)
        fprintf(fp2, "%s %d %d %d %d %d\n", sort_bysum[i].name, sort_bysum[i].No, sort_bysum[i].sub[0], sort_bysum[i].sub[1], sort_bysum[i].sub[2], sort_bysum[i].sub[3]);

    // close file
    fclose(fp2);
    return 0;
}

注释是在写的中途的测试

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

#include<stdio.h>
#define MAX 100

struct student{
    char name[20];
    int num;
    int score[4];
    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 = 0;
    while(!feof){
        fscanf(fp , "%s", &stu[i].name);
        fscanf(fp , "%d", &stu[i].num);
        for(k = 0; k < 4; k++){
            fscanf(fp, "%d", &stu[i].score[k]);
            stu[i].sum += stu[i].score[k]; // 统计总分
        }
        // 分类
        if(stu[i].num%3 == 2)
            sort_byname[a++] = stu[i];
        if(stu[i].num%3 == 1)
            sort_bynum[b++] = stu[i];
        if(stu[i].num%3 == 0)
            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 = 0; i < a; i ++)
        for(j = 0; j < a-i-1; j ++)
            if(strcmp(sort_byname[j].name , sort_byname[j+1].name) > 0)
                swap(&sort_byname[j] , &sort_byname[j+1]);

    for(i = 0; i < b; i ++)
        for(j = 0; j < b-i-1; j ++)
            if(sort_bynum[j].num > sort_bynum[j+1].num)
                swap(&sort_bynum[j] , &sort_bynum[j+1]);

    for(i = 0; i < c; i ++)
        for(j = 0; j < c-i-1; j ++)
            if(sort_bynum[j].sum > sort_bynum[j+1].sum)
                swap(&sort_bysum[j] , &sort_bysum[j+1]);

    // 3-将数据写入 infosort.dat 以下可以用函数实现。。。。。。
    fp = fopen("infosort.dat" , "w");

    fprintf(fp, "sort_byname:\n");
    for(i = 0; i < a; i ++){
        fprintf(fp , "%s ", sort_byname[i].name);
        fprintf(fp , "%d ", sort_byname[i].num);
        for(k = 0; k < 4; k++)
            fprintf(fp, "%d ", sort_byname[i].score[k]);
    }
    fprintf(fp, "sort_bynum:\n");
    for(i = 0; i < b; i ++){
        fprintf(fp , "%s ", sort_bynum[i].name);
        fprintf(fp , "%d ", sort_bynum[i].num);
        for(k = 0; k < 4; k++)
            fprintf(fp, "%d ", sort_bynum[i].score[k]);
    }
    fprintf(fp, "sort_bysum:\n");
    for(i = 0; i < c; i ++){
        fprintf(fp , "%s ", sort_bysum[i].name);
        fprintf(fp , "%d ", sort_bysum[i].num);
        for(k = 0; k < 4; k++)
            fprintf(fp, "%d ", sort_bysum[i].score[k]);
    }

    fclose(fp);
    return 0;
}

int strcmp(char *s, char *t)
{
    int i;

    for(i = 0; s[i] == t[i]; i ++)
        if(s[i] == ‘\0‘)
            return 0;
    return s[i] - t[i];
}

void swap(struct student *s, struct student *t)
{
    struct student temp;

    temp = *s;
    *s = *t;
    *t = temp;
}

测试文件:

wang 12301 67.5 78.9 88.0 99.2
zhang 12302 89.7 45.6 78.8 85.7
tang 12303 56.6 77.7 89.9 85.7
li 12304 56.6 45.6 56.6 85.7
ren 12305 99.9 77.7 89.9 85.7
fa 12306 44.4 55.5 56.6 85.7
compu 12307 56.6 77.7 89.9 85.7
时间: 2024-09-30 18:17:26

c语言练习的相关文章

使用R语言计算均值,方差等

R语言对于数值计算很方便,最近用到了计算方差,标准差的功能,特记录. 数据准备 height <- c(6.00, 5.92, 5.58, 5.92) 1 计算均值 mean(height) [1] 5.855 2 计算中位数 median(height) [1] 5.92 3 计算标准差 sd(height) [1] 0.1871719 4 计算方差 var(height) [1] 0.03503333 5 计算两个变量之间的相关系数 cor(height,log(height)) [1] 0

GCC在C语言中内嵌汇编 asm __volatile__ 【转】

转自:http://blog.csdn.net/pbymw8iwm/article/details/8227839 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作. 1.简单的内嵌汇编 例: __asm__ __volatile__("hlt"); "__asm__"表示后面的

C语言轻松高效学习方法之:多种方法实现

多种方法实现同一个功能,可以调动你学的所有知识去做,有助于你学的融会贯通. 下面举例来看: 实现功能:求一个整数的位数: 实现语言:C语言: 开发环境:Visual Studio 2017 如:3215是4位数 实现原理: 3215/10 = 321 ----1位数 321/10 = 32 ----又是1位数 32/10 = 3 ----又是1位数 3/10 = 0 ----又是1位数 共4位数,且终止计算条件是/10结果为0的时候: 根据这个原理,先写一个最笨的原始方法: 效果: 这种实现方案

轻松学习C语言编程的秘诀:总结+灵感

目前在准备一套C语言的学习教程,所以我这里就以C语言编程的学习来讲.注意,讲的是"轻松学习",那种不注重方法,拼命玩命的方式也有其效果,但不是我提倡的.我讲究的是在方式方法对头.适合你.减轻你学习负担和心里压力的前提下,才适当的抓紧时间. 因此,探索一种很好的学习方法就是我所研究的主要内容. 众所周知,学习C语言并非易事,要学好它更是难上加难.这和你期末考试背会几个题目的答案考上满分没多大关系,也就是说你考试满分也说明不了你学好.学精通了C语言.那么怎么才算学精通C语言?闭着眼睛对自己

详解go语言的array和slice 【二】

上一篇  详解go语言的array和slice [一]已经讲解过,array和slice的一些基本用法,使用array和slice时需要注意的地方,特别是slice需要注意的地方比较多.上一篇的最后讲解到创建新的slice时使用第三个索引来限制slice的容量,在操作新slice时,如果新slice的容量大于长度时,添加新元素依然后使源的相应元素改变.这一篇里我会讲解到如何避免这些问题,以及迭代.和做为方法参数方面的知识点. slice的长度和容量设置为同一个值 如果在创建新的slice时我们把

自动生成小学四则运算题目(C语言)

这个简易四则运算是我在百度上找的博主叫53余雅诗的一篇c语言代码,网址为http://www.cnblogs.com/ys1101/p/4368103.html,功能是可以选择加减乘除进行简易的四则运算,判断对错.我在VS2017上编译没有bug,因为功能只有整数运算,所以我在此基础上加了真分数的四则运算以及统计得分等,最后成功运行程序.我把我的源代码放在github上,地址为https://github.com/xiaofancheng/helloworld.

PAT 1009 说反话 C语言

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格. 输出格式:每个测试用例的输出占一行,输出倒序后的句子. 输入样例: Hello World Here I Come 输出样例: Come I Here World Hello 1 #include<stdio.h> 2 #

PAT 1006 换个格式输出 C语言

让我们用字母B来表示"百".字母S表示"十",用"12...n"来表示个位数字n(<10),换个格式来输出任一个不超过3位的正整数.例如234应该被输出为BBSSS1234,因为它有2个"百".3个"十".以及个位的4. 输入格式:每个测试输入包含1个测试用例,给出正整数n(<1000). 输出格式:每个测试用例的输出占一行,用规定的格式输出n. 输入样例1: 234 输出样例1: BBSSS1

Go语言 IDE之Gogland配置使用

Gogland 是 JetBrains 公司推出的 Go 语言集成开发环境.Gogland 同样基于 IntelliJ 平台开发,支持 JetBrains 的插件体系.目前正式版尚未发布.官方:https://www.jetbrains.com/go/.关于使用,即将开始咯! 一.安装Golang 1) 首先到https://golang.org/dl/选择适合你系统的安装包,(墙内:http://golangtc.com/download). 2)下载完成安装到指定目录即可.我这里是(D:\G

R语言快速上手入门

R语言快速上手入门 课程学习网址:http://www.xuetuwuyou.com/course/196 课程出自学途无忧网:http://www.xuetuwuyou.com 课程简介 本教程深入浅出地讲解如何使用R语言玩转数据.课程中涵盖R语言编程的方方面面,内容涉及R对象的类型.R的记号体系和环境系统.自定义函数.if else语句.for循环.S3类R的包系统以及调试工具等.本课程还通过示例演示如何进行向量化编程,从而对代码进行提速并尽可能地发挥R的潜能.本课程适合立志成为数据科学家的