实验五

一.

1. 在屏幕上是否输出图书信息(如下图所示)。 2. 在当前路径下是否生成一个数据文件data1.txt。尝试用文本编辑器打开,观察、验证其内容是否如 下图所示。

是,是

2.scanf 函数的参数需要指针型,x.num,x.score[]这些都是普通变量,前面需要加指针符&转化成对应的指针。而x.name为字符数组,name就是该数组第一个数组的指针位置,所以不需要加&。

task1_1.c程序源码,和,运行测试截图

#define _CRT_SECURE_NO_WARNINGS 

#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;
}

 

 task1_2.c程序源码,和,运行测试截图

 

#define _CRT_SECURE_NO_WARNINGS 

#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的数据文件。 2. 尝试用文本编辑器打开,查看其内容,是否直观可见?

是,是

task2_1.c源代码

#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;
}

task2_2.c源代码,及运行测试截图

#define _CRT_SECURE_NO_WARNINGS 

#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;
}

 

 

 三.

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
int main()
{
    FILE* fin, * fout;
    int c=0;
    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");
    // 如果打开失败,输出提示信息并返回
    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);
        if (ch != ' ' && ch!='\t'&&ch!='\n')c += 1;
        printf("%c", ch);
    }

    printf("data_3.txt共包含字符数:%d", c-1);
    fclose(fin);
    fclose(fout);
    return 0;
}

 

 五.

int i = 0,j;
    float leva = n / 10,levb=n/2;
    STU c;
    for (i = 0; i < n; i++) {
        s[i].sum = s[i].objective + s[i].subjective;        
    }
    for (i=0;i<n;i++)
        for ( j = i; j < n; j++)
        {
            if (s[i].sum < s[j].sum) {
                c = s[i];
                s[i] = s[j];
                s[j] = c;
            }
        }    
    for (i = 0; i < n; i++) {
        if (i<leva)strcpy(s[i].level, "优秀");
        else if (i < levb)strcpy(s[i].level, "合格");
        else strcpy(s[i].level, "不合格");
    }
    

 

 六.

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
#include<vector>
#include<string>
using namespace std;
const int N = 1e3 + 10;
int sum, n, a, b, m, v;
char s[N];


int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int a, i = 0, repeat[80], cf = 0;
    char st[80][50];
    FILE* f = fopen("list.txt", "r");
    FILE* fp = fopen("lucky.txt", "w");
    srand((unsigned)time(NULL));
    memset(repeat, 0, sizeof(repeat));
    while (!feof(f))
        fgets(st[i++], 50, f);

    for (int j = 0; j < 5; j++) {
        a = rand() % 80;
        if (repeat[a] != 0) {
            j -= 1;
            cf += 1;
            continue;
        }
        repeat[a] += 1;
        cout << st[a];
        fputs(st[a], fp);
        if (a == 79)cout << '\n',fputc('\n',fp);

    }

}

 

 

 

 

 

posted @ 2022-05-31 14:14  picapicac  阅读(58)  评论(4编辑  收藏  举报