【算法】系统和文件操作


小续

对于数据结构和算法,都只是思想层面的东西,而在实际运用当中,多数是与系统和文件相联系的,所以对于学习数据结构与算法,可以参照操作系统中一些代码的实现,毕竟那都是经过大牛再三修改得出来的精华。

但据我了解,很多人都一味地去“研究”算法本身去了,算法主要是用来解决问题的,当它们遇到问题时,知道怎么解决,但却不知道从哪里入手,这是很悲剧的一件事情,而实际应用中,大多数操作都和文件相当,所以我这里列了两个文件相关的实例,主要是提醒大家不要忘了学算法的目的,希望能帮助到大家


文件连接

编程:实现将命令行中指定的第一个文本文件的内容追加到第二个文件之后。

实例解析:

该实例要求从命令行指定两个文件名,故需要定义带参数的main()函数。

程序代码:

#include <stdio.h>
int main(int argc, char* argv[])
{
    FILE *fp1,*fp2;
    int ch;
    if(argc != 3)
    {
        printf(“参数个数不对!”);
        exit(0);
    }
    if((fp1 = fopen(argv[1], ”r”)) == NULL)
    {
        printf(“打开文件:%s失败\n”, argv[1]);
        exit(1);
    }
    if((fp2 = fopen(argv[2], ”a”)) == NULL)
    {
        printf(“打开文件:%s失败\n”, argv[2]);
        exit(1);
    }   
    while((ch = fgetc(fp1)) != EOF)
        fputc(ch,fp2);
    fclose(fp1);
    fclose(fp2);
    return 0;
}


文件读写操作

文件student.dat用于存储学生信息(每人存储姓名,数学、物理、化学三科成绩,总分)。写一个函数,可由键盘输入10个学生的三科成绩并存入文件,再写一个函数,读取这些分数、计算总分并将总分写入文件。

实例解析:

由于每人有五项数据需要存储,所以先定义一个结构体如下:

typedef  struct
{
    char name[10];
    int score[3];
    int sum;
}STU;

第一个函数用来写文件,需要用“wb”或“w”方式打开,第二个文件需要“读写”文件,用“rb+”或“r+”方式打开。

两个函数的代码如下:

void  input()
{
    FILE *fp;
    int i;
    STU s;
    if((fp = fopen(“student.dat”, “wb”)) == NULL)
    {
           printf(“打开文件失败\n”);
           exit(0);
    }
    for(i = 0; i <= 9; i++)
    {
        scanf(“%s”, s.name);
        scanf(“%d%d%d”, &s.score[0],&s.score[1],&s.score[2]);
    fwrite(&s, sizeof(STU), 1, fp);
    }
    fclose(fp);
}
void  calculate()
{
    FILE *fp;
    int i;
    STU s;
    if((fp = fopen("student.dat", "r+")) == NULL)
    {
        printf("打开文件失败\n");
        exit(0);
    }
    for(i = 0; i <= 9; i++)
    {
        fseek(fp, sizeof(STU)*i, 0);
        fread(&s, sizeof(STU), 1, fp);
        s.sum = s.score[0] + s.score[1] + s.score[2];
        fseek(fp, -2, 1);
        fwrite(&s.sum, 2, 1, fp);
    }
    fclose(fp);
}

本文出自 “成鹏致远” 博客,请务必保留此出处http://infohacker.blog.51cto.com/6751239/1171369

优质内容筛选与推荐>>
1、程序员 续
2、Linux学习
3、【bzoj5018】[Snoi2017]英雄联盟 背包dp
4、部属解决方案时,一直显示deploying的解决方法。(价值5个小时的经验)
5、DataSet DataTable操作


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号