岛屿云烟552 2022-05-23 00:14 采纳率: 80%
浏览 20

有关C语言文件的应用

img


我的思路是要写出随机数,然后应该是要用到文件的相关知识,存在文本文件中,然后进行计算。

  • 写回答

1条回答 默认 最新

  • a5156520 2022-05-23 10:48
    关注

    思路大概是:先产生100个商场序号及四个季度的销售额写入文件,然后再读取这个文件,然后计算一年的销售总额读入商场结构数组,再写入文件,malls.txt文件应该是自动生成在编译生成的exe文件的同一个目录下,下面是一个实现,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    struct mall{
        int id;
        double quarterlySales[4];
        double yearSales;
    };
    
    int main(void){
        
        struct mall malls[100];
        FILE * fp=fopen("malls.txt","w+");
        if(fp==NULL){
            printf("打开文件或创建文件失败!\n");
            return 0;
        } 
        
        int i=0;
        int idarr[100];
        for(i=0;i<500;i++){ //初始化500个商场序号,用于后面产生随机数从中取走一个商场序号 
            idarr[i]=i+1;
        }
        
        printf("开始生成销售数据!\n");
        srand(time(0)+rand()); //用当前时间再加随机数做随机数种子,以便让每一次随机不一样 
        i=0;
        int k;
        int num;
        double j;
        while(i<100){
            
            num=rand()%500;  //产生一个下标 ,用于从商场序号数组中取走一个商场序号 
            while(idarr[num]==0){   //如果这个位置的商场序号被取走,则重新再生成一个下标再次取一次序号,直到取到序号 
                num=rand()%500;
            
            }
            
            if(idarr[num]!=0){ //取到序号后写入文件 
            //    malls[i].id=idarr[num];
                fprintf(fp,"%d ",idarr[num]);
                idarr[num]=0;  //商场序号数组当前位置置0,表示这个位置的商场序号已被取走 
            }    
            
            
            for(k=0;k<4;k++){  //产生一个1到10万之间的数,表示每个季度的销售额 
                j=(double)(rand()%100000+1);
            //    malls[i].quarterlySales[k]=j;
                fprintf(fp,"%.2lf ",j);
            }
                
            i++;
        }    
        fclose(fp);
        printf("销售数据已生成!\n"); 
        
        printf("开始写入销售数据!\n"); 
        fp=fopen("malls.txt","r");
        if(fp==NULL){
            printf("打开文件失败!\n");
            return 0;
        } 
        
        i=0;
        while(i<100){  //从文件读取100个商场的序号及其每个季度的销售额,并计算每年的销售总额到 商场结构数组中 
            fscanf(fp,"%d%lf%lf%lf%lf ",&malls[i].id,
            &malls[i].quarterlySales[0],&malls[i].quarterlySales[1],
            &malls[i].quarterlySales[2],&malls[i].quarterlySales[3]);
            malls[i].yearSales=malls[i].quarterlySales[0]+malls[i].quarterlySales[1]+
            malls[i].quarterlySales[2]+malls[i].quarterlySales[3];
            i++;
        }
        fclose(fp);
        printf("销售数据已写入!\n");
        printf("按任意键开始计算并写入一年的销售总额!"); //此时暂停,用于查看和备份malls.txt生成的数据是否正常 
        getchar();
        
        
        printf("开始计算和写入一年的销售总额。\n"); 
        fp=fopen("malls.txt","w");
        if(fp==NULL){
            printf("打开文件失败!\n");
            return 0;
        } 
        
        
        i=0;
        while(i<100){  //加上计算的一年的销售总额,再次写入文件 
            fprintf(fp,"%d %.2lf %.2lf %.2lf %.2lf %.2lf ",malls[i].id,
            malls[i].quarterlySales[0],malls[i].quarterlySales[1],
            malls[i].quarterlySales[2],malls[i].quarterlySales[3]
            ,malls[i].yearSales);
            
            i++;
        }
        fclose(fp);
        printf("一年的销售总额已写入!\n");
        printf("程序退出!\n");
        
        return 0;
        
    }
    
    

    img

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月23日

悬赏问题

  • ¥15 求解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果