第12讲 文件 单元作业

发布时间 2023-12-28 08:25:14作者: YANTARES

1. 

编写程序,从键盘输入一串字符,要求将该串字符的倒序串先写入到文件f1.txt中,然后再将原字符串的内容接到该文件的末尾。例如,假设从键盘输入的字符串为“How do you do?”,则文件f1.txt的内容为:

?od uoy od woHHow do you do?

 

yzy's version:

 1 #include "iostream"
 2 #define N 256
 3 using namespace std;
 4 int main()
 5 {
 6     FILE* fp;
 7     char s[N],t[N];
 8     int i;
 9     errno_t err = fopen_s(&fp,"C:\\Users\\pc\\Desktop\\ctest.txt", "w");//只读方式打开file1
10     if (fp == NULL)
11     {
12         cout << "fail to open ctest.txt";
13         exit(1);
14     }
15     cout << "输入字符串:" << endl;
16     gets_s(s);
17     for (i = 0; s[i] != '\0'; i++)
18         t[i] = s[strlen(s) - i - 1];
19     t[i] = '\0';
20     fputs(t, fp);
21     fseek(fp, 0L, 2);
22     fputs(s, fp);
23     fclose(fp);
24     errno_t err1 = fopen_s(&fp,"C:\\Users\\pc\\Desktop\\ctest.txt", "r");
25     if (fp == NULL)
26     {
27         cout << "can't open ctest.txt";
28         exit(1);
29     }
30     while (!feof(fp))//指针指到的地方没结束的话
31     {
32         fgets(s, 31, fp);//每次读取31个字符
33         puts(s);
34     }
35     fclose(fp);
36     system("pause");
37     return 0;
38 }
View Code

 

2. 

用记事本建立一个文本文件f2.txt,在该文件中任意存放一组整数。编写程序统计该文件中正整数、负整数和零的个数。(提示:用fscanf函数读取文件中的数据)

yzy's version:
 1 #include "iostream"
 2 #define N 256
 3 using namespace std;
 4 int main()
 5 {
 6     FILE* fp;
 7     int num = 0, pos = 0, neg = 0, zero = 0;
 8     errno_t err = fopen_s(&fp, "C:\\Users\\pc\\Desktop\\f2.txt", "r");
 9     if (fp == NULL)
10     {
11         cout << "fail to open f2.txt";
12         exit(1);
13     }
14     while (!feof(fp))
15     {
16         fscanf_s(fp, "%d", &num);
17         if (num > 0)
18             pos++;
19         else if (num < 0)
20             neg++;
21         else if (num == 0)
22             zero++;
23     }
24     fclose(fp);
25     cout << "正整数有" << pos << "个,负整数有" << neg << "个,零有" << zero << "个。" << endl;
26     system("pause");
27     return 0;
28 }
View Code

 

3. 将从键盘输入的N个学生的学号和成绩存入到文件student.dat中。再从文件中读取学生的信息,求出最高分、最低分和总分。N可通过符号常量自行定义大小。

 

yzy's version:

 1 #include "iostream"
 2 #define N 5 //N个学生
 3 using namespace std;
 4 struct student
 5 {
 6     char num[8];
 7     double score;
 8 };
 9 int main()
10 {
11     FILE* fp,* fp1;
12     student s[N], t[N];
13     int i;
14     errno_t err = fopen_s(&fp,"student.dat", "wb");
15     if (fp == NULL)
16     {
17         cout << "fail to open student.dat";
18         exit(1);
19     }
20     for (i = 0; i < N; i++)
21     {
22         cout << "输入第" << i+1 << "位学生的学号和成绩:" << endl;
23         cin >> s[i].num >> s[i].score;
24         fwrite(&s[i], sizeof(student), 1, fp);
25     }
26     fclose(fp);
27     errno_t err1 = fopen_s(&fp1, "student.dat", "rb");
28     if (fp1 == NULL)
29     {
30         cout << "fail to open student.dat";
31         exit(1);
32     }
33     double max = 0, min = 999, sum = 0,score;
34     char num[N];
35     fread(t, sizeof(t), 1, fp);
36     for (i = 0; i < N; i++)
37     {
38         sum += t[i].score;
39         if (t[i].score > max)
40             max = t[i].score;
41         if (t[i].score < min)
42             min = t[i].score;
43     }
44     fclose(fp1);
45     cout << "最高分:" << max << "最低分:" << min<< "总分:" << sum<< endl;
46     system("pause");
47     return 0;
48 }
View Code

 

4. 

编写程序,将一存放一行字符串的文本文件中的每一个字符及其所对应的ASCII码输出到屏幕上。例如文件的内容是“I love China”,则输出:

I(73) (32)l(108)o(111)v(118)e(101) (32)C(67)h(104)i(105)n(110)a(97)

注意:空格也是有效字符。

 

yzy's version: