C语言——文件操作考核仨题

文件

什么是文件
文件是数据源的一种,他最主要的作用就是保存数据。作为计算机不可或缺的一部分,文件可以储存很多不同种类的信息。
文件(file)通常是在磁盘或固态硬盘上的一段已命名的存储区。例如在c语言中常出现的stdio.h就是一个文件的名称,该文件中包含的就是头文件内的相关信息。
文件的分类
在C语言中,程序提供了两种文件模式:文本模式和二进制模式。
文本模式:文本文件只能存储char型字符变量。它通过文本编辑器就能对其中的数据进行修改。文本文件实质上也是一种特殊的二进制文件,因为它在磁盘上的存储方式也是二进制形式。
二进制模式:在二进制文件格式中,文件内的所有内容都以二进制形式(0或1)存储。所以它存储的类型是多样的。对于不同类型的二进制文件,如果想要准确的得到它所存储的信息,那就必须需要特别的解码器。
那么这两种类型的文件有什么优缺点呢?文本文件存储的都是字符类型,所以每个字符所占的位置都是相同的,因而在对这段字符进行译码操作时,就会相对来说比较方便。而二进制文件的存储利用率更加高。例如一个高位数字,你用文本文件来存放,就会需要相应长度的空间。而二进制文件只需要一个int或long类型的空间就行了,所占的内存就会相对来说更小点。
如何打开文件?
如果我们要对文件进行操作,那我们必须建立起和文件之间的连接。先向大家介绍文件的打开函数。那么在C语言中,存储在中的fopen( )函数就可以打开文件。
那么我们来具体看fopen这个函数:FILE * fopen(char * filenname,char * mode);
filename是这个文件的名称(包括文件路径),而mode则问打开方式。
然后我们返回一个FILE类型的指针。FILE类型是一个结构体,它是用来保存文件信息的。

FILE * fp;
fp = fopen(char *str1, "str2");
FILE * fp;
fp = fopen("D:\\学生管理系统\\jiaoshizhanghao.txt","a");

在这里插入图片描述
如何关闭文件?
文件一旦使用完毕,我们就应该对文件进行关闭,以释放掉相关资源。这可以保证空间不会被乱利用,而导致文件发生丢失。
int fclose ( FILE * fp);

FILE * fp;
fp = fopen("D:\\学生管理系统\\jiaoshizhanghao.txt","a");
fclose(fp);

文件打开阶段的操作
了解完这两部分,让我们来简单动手操作下文件的相关操作,以此加深我们的印象:
1.

#include
#include
int main(void) {FILE* fp = fopen("D:\\c语言\\新建文本文档.txt", "r");if (fp == NULL) {puts("文件打开失败");}char str[25];while (fgets(str, 24, fp)!=NULL) {//读取文件信息并打印printf("%s", str);}fclose(fp);return 0;
}

结果:
在这里插入图片描述
出现这个问题的原因是文件本身编码出现问题,把文件类型改为ANSI即可。
在这里插入图片描述
更改后输出结果:
在这里插入图片描述
2.提取文件信息到链表里:

struct zhanghu *tiqu(const char name[]) {//提取文件信息 FILE *fp = fopen(name, "r");if (fp == NULL) {printf("未找到文件%s\n", name);exit(0);}struct zhanghu *head = (struct zhanghu * )malloc(sizeof(struct zhanghu));head->next = NULL;while (!feof(fp)) {struct zhanghu *p = (struct zhanghu * )malloc(sizeof(struct zhanghu));fscanf(fp, "%s %s %s\n", p->zhanghao, p->mima, p->classnum);p->next = head->next;head->next = p;}fclose(fp);return head;
}

考核后仨道题:
在这里插入图片描述

bool findNumberIn2DArray(int** matrix, int matrixSize, int* matrixColSize, int target) {if (matrix == NULL || matrixSize == 0 || *matrixColSize == 0 ) {return false;}int i, j; for (i = 0, j = *matrixColSize - 1; i < matrixSize && j >= 0;) {if (target < matrix[i][j]) {//越左->越小j--;//向左移动寻找小于等于target的数} else if (target > matrix[i][j]) {//越下->越大i++;//向下移动寻找大于等于target的数} else {//不大不小->刚刚好return true;}}return false;
}

在这里插入图片描述

int translateNum(int num) {if (num < 10) {return 1;}int arr = 0, i;int n = num;while (n > 0) {n = n / 10;arr++;}int nums[100] = {0};for (i = arr - 1; i >= 0; i--) {nums[i] = num % 10;num = num / 10;}int a[100];a[0] = 1;if (nums[0] * 10 + nums[1] <= 25) {a[1] = 2;} else {a[1] = 1;}for (i = 2; i < arr; i++) {if (nums[i] + nums[i - 1] * 10 <= 25 && nums[i] + nums[i - 1] * 10 > 9) {a[i] = a[i - 1] + a[i - 2];} else {a[i] = a[i - 1];}}return a[arr - 1];
}

在这里插入图片描述

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){struct ListNode * head = (struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode * p = head;while (list1 && list2) {if (list1->val < list2->val) {head->next = list1;list1 = list1->next;head = head->next;} else {head->next = list2;list2 = list2->next;head = head->next;}}if (list1 == NULL) {head->next = list2;} else {head->next = list1;}return p->next;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部