实验五

任务一.1   可以输出,可以生成

// 将图书信息写入文本文件data1.txt
#include <stdio.h>
#define N 5
#define M 80
typedef struct
{
char name[M]; // 书名
char author[M]; // 作者
}Book;
int main()
{
Book x[N] = { {"一九八四", "乔治.奥威尔"},
              {"美丽新世界", "赫胥黎"},
              {"昨日的世界", "斯蒂芬.茨威格"},
              {"万历十五年", "黄仁宇"},
              {"一只特立独行的猪", "王小波"}
            };
    int i;
    
    FILE *fp;
    
    // 以写的方式打开文本文件data1.txt
    fp = fopen("data1.txt", "w");
        
    // 如果打开文件失败,输出提示信息并返回
    if(fp == NULL)
    {
       printf("fail to open file\n");
       return 1;
    }
    
    // 将结构体数组x中的图书信息写到fp指向的文件data1.txt
    // 同时也输出到屏幕上
    for(i=0; i<N; ++i)
    {
    fprintf(fp, "%-20s %-20s\n", x[i].name, x[i].author);
    printf("%-20s %-20s\n", x[i].name, x[i].author);
    }
    
    fclose(fp);

    return 0;
}

任务一.2   可以读取

// 从文本文件data1.txt中读取图书信息,并打印输出到屏幕
#include <stdio.h>
#define N 5
#define M 80

typedef struct
{
char name[M]; // 书名
char author[M]; // 作者
}Book;

int main()
{
Book x[N];
int i;
FILE *fp;
// 以读的方式打开文本文件data1.txt
fp = fopen("data1.txt", "r");
// 如果打开文件失败,输出提示信息并返回
if(fp == NULL)
{
printf("fail to open file\n");
return 1;
}
// 从fp指向的文件data1.txt中读取信息到结构体数组x
// 同时,把x的内容输出到屏幕上
for(i=0; i<N; ++i)
{
fscanf(fp, "%s %s\n", x[i].name, x[i].author);
printf("%-20s %-20s\n", x[i].name, x[i].author);
}
fclose(fp);
return 0;
}

任务二.1   有生成,可查看

// 将图书信息以数据块方式写入二进制文件data2.dat
#include <stdio.h>
#define N 5
#define M 80
typedef struct
{
char name[M]; // 书名
char author[M]; // 作者
}Book;
int main()
{
Book x[N] = { {"一九八四", "乔治.奥威尔"},
              {"美丽新世界", "赫胥黎"},
              {"昨日的世界", "斯蒂芬.茨威格"},
              {"万历十五年", "黄仁宇"},
              {"一只特立独行的猪", "王小波"}
};
int i;
FILE *fp;
// 以写的方式打开二进制文件data2.dat
fp = fopen("data2.dat", "wb");
// 如果打开文件失败,输出提示信息并返回
if(fp == NULL)
{
printf("fail to open file\n");
return 1;
}
// 将结构体数组x中的图书信息写以数据块方式写入文件
// 把从地址x处开始sizeof(Book)×N个字节大小的数据块写入fp指向的文件
fwrite(x, sizeof(Book), N, fp);
fclose(fp);

return 0;
}

任务二.2    可生成

// 从二进制文件data2.dat中读取图书信息,并打印输出到屏幕
#include <stdio.h>
#define N 5
#define M 80
typedef struct
{
char name[M]; // 书名
char author[M]; // 作者
}Book;
int main()
{
Book x[N];
int i;
FILE *fp;
// 以读的方式打开二进制文件data2.dat
fp = fopen("data2.dat", "rb");
// 如果打开文件失败,输出提示信息并返回
if(fp == NULL)
{
printf("fail to open file\n");
return 1;
}
// 从fp指向的文件中读取数据块到x对应的地址单元
// 数据块大小为sizeof(Book)×N
fread(x, sizeof(Book), N, fp);
// 在屏幕上输出结构体数组x中保存的数据
for(i=0; i<N; ++i)
printf("%-20s%-20s\n", x[i].name, x[i].author);
fclose(fp);
return 0;
}

任务三.2

// 从文件data3_1.txt读取信息,将小写字母转换成大写后,写入data3_2.txt
#include <stdio.h>
int main()
{
FILE *fin, *fout;
char ch;
// 以只读、文本方式打开文件data3_1.txt
fin = fopen("data3_1.txt", "r");
// 如果打开失败,输出提示信息并返回
if(fin == NULL)
{
printf("fail to open data3_1.txt\n");
return 1;
}
// 以写、文本方式打开文件data3_2.txt
fout = fopen("data3_2.txt", "w");
// 如果打开失败,输出提示信息并返回ta
if(fout == NULL)
{
printf("fail to open data3_2.txt\n");
return 1;
}
// 当fin指向的文件data1_txt没有结束时
while( !feof(fin) )
{
// 从fin指向的文件data1_txt读取单个字符
ch = fgetc(fin);
// 如果ch是小写字母,转换成大写
if(ch >= 'a' && ch <= 'z')
ch -= 32;
// 将字符变量ch中的字符写入fout指向的文件data3_2.txt
fputc(ch, fout);
}
fclose(fin);
fclose(fout);
return 0;
}

任务五

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define N 10

typedef struct
{
    long int id;
    char name[20];
    float objective;
    float subjective;
    float sum;
    char level[10];
}STU;
void input(STU s[],int n);
void output(STU s[],int n);
void process(STU s[],int n);

int main()
{
    STU stu[N];
    printf("从文件读入%d个考生信息:准考证号,姓名,客观题得分(<=40),操作题得分(<=60)\n",N) ;
    input(stu, N);
    
    printf("\n对考生信息进行处理: 计算总分,确定等级\n");
    process(stu, N);
    
    printf("\n打印考生完整信息, 并保存到文件中");
    output(stu, N);
    
    return 0;
 } 
void input(STU s[], int n)
{
  int i;
  FILE *fin;
  
  fin = fopen("examinee.txt", "r");
  if (fin == NULL)
  {
      printf("fail to open file\n");
      exit(0);
  }
  
  while (!feof(fin))
  {
      for (i = 0; i < n; i++)
      fscanf(fin, "%ld %s %f %f", &s[i].id, s[i].name,
&s[i].objective, &s[i].subjective);
  }
  
  fclose(fin);
}

void output(STU s[], int n)
{
    FILE *fout;
    int i;
    
    printf("\n");
    printf("准考证号\t姓名\t客观题得分\t操作题得分\t总分\t\t等级\n");
    for (i = 0; i < n; i++)
    printf("%ld\t\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%s\n", s[i].id,
s[i].name, s[i].objective, s[i].subjective, s[i].sum, s[i].level);

    fout = fopen("result.txt", "w");
    if (!fout)
    {
        printf("fail to open or create result.txt\n");
        exit(0);
    }
    
    fprintf(fout, "准考证号\t\t姓名\t客观题得分\t操作题得分\t总分\t\t等级\n");
    
    for (i = 0; i < n; i++)
    fprintf(fout, "%ld\t\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%s\n", s[i].id,
s[i].name, s[i].objective, s[i].subjective, s[i].sum, s[i].level);

    fclose(fout);
}

void process(STU s[],int n)
{
    for(int i=0;i<n;i++)
    {
        int j;
        STU temp;
        float sum;
        sum=( s[i].objective,+s[i].subjective)/2;
        
        if(sum<90)
        printf("不合格");
        
        else if(90<=sum<=95)
        printf("合格"); 
        
        else if(sum>95)
        printf("优秀");
        
       for(j=0;j<n-i-1;j++)
       {
        if(s[j].sum<s[j+1].sum)
        {
            temp=s[j];
            s[j]=s[j+1];
            s[j+1]=temp;
        }
       }    
    }
 } 

任务六

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define M 80
#define N 5
struct STU 
{
    long int id;
    char name[10];
    char cl[100];
    int flag=1;
};
void input(STU s[]);
void fun(STU s[],STU t[]);
void output(STU t[]);
int main()
{
    STU x[M],y[N];
    input(x);
    fun(x,y);
    output(y);
    return 0;
}
void input(STU s[])
{
    FILE *fin;
    int i;
    fin=fopen("list.txt","r");
    for (i=0;i<M;i++) fscanf(fin,"%ld %s %s",&s[i].id,s[i].name,s[i].cl);
    fclose(fin);
}
void fun(STU s[],STU t[])
{
    int m,i=0;
    srand(time(NULL));
    while(i<5)
    {
        m=rand()%80+1;
        if(s[m].flag)
        {
            t[i]=s[m];
            s[m].flag=0;
            i++;
        }
    }
}
void output(STU t[])
{
    char filename[100];
    time_t tt;
    struct tm *tblock;
    tt=time(NULL);
    tblock=localtime(&tt);
    strftime(filename,sizeof(filename),"%Y-%m-%d %H:%M:%S",tblock);
    FILE *fout;
    int i;
    fout=fopen(filename,"w");
    for(i=0;i<N;i++)
    {
        fprintf(fout,"%ld %s %s\n",&t[i].id,t[i].name,t[i].cl);
        printf("%ld %s %s\n",&t[i].id,t[i].name,t[i].cl);
    }
}

 

posted @ 2022-06-07 12:32  &H  阅读(270)  评论(3)    收藏  举报