实验五
一.
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); } }