【2023.3.1】c语言复习笔记
创始人
2024-06-03 08:17:33
0

【2023.3.1】C语言复习笔记

文章目录

  • 【2023.3.1】C语言复习笔记
    • 0-说明
    • 1-局部变量、全局变量、静态变量
    • 2-选择排序、插入排序、冒泡排序
    • 3-联合体、枚举
    • 4-文件读写
      • (1)文本文件读写
      • (2)二进制文件读取

0-说明

C语言笔记

只是记录一些我自己不熟悉的,并没有记录所有C语言知识点。

1-局部变量、全局变量、静态变量

局部变量:生命周期为第一个外部括号{}内,即作用域为第一个外部括号{}内。

若括号{}内的局部变量与{}外部局部变量重名,则{}内部局部变量优先。

全局变量:作用域全局

静态变量:static关键词,生命周期为第一次初始化到程序结束位置。

//静态变量示例:
#include
void func() {static int n = 4;int m = 4;printf("static int n=%d,    int m=%d\n\n", n, m);n++;
}
int main() {func();func();func();return 0;
}
image-20230227202916418

2-选择排序、插入排序、冒泡排序

复杂度都是o(n^2);

选择排序

//每次选择最小的放在左端
//规定升序排序
void SelectionSort(int a[], int size) {for (int i = 0; i < size-1; i++) {int tempMin = i;for (int j = i + 1; j < size; j++) {if (a[j] < a[tempMin])tempMin = j;}int temp = a[i];a[i] = a[tempMin];a[tempMin] = temp;}
}

插入排序

//规定左端有序。
void InsertionSort(int a[], int size) {//规定升序排序for (int i = 1; i < size; i++) {for (int j = 0; j < i; j++) {if (a[j] > a[i]) {int temp = a[i];for (int k = i; k > j; k--) {a[k] = a[k - 1];}a[j] = temp;break;}}}
}

冒泡排序

//规定右端有序
void BubbleSort(int a[], int size) {//规定升序排序for (int i = size - 1; i > 0; i--) {for (int j = 0; j < i; j++) {if (a[j] > a[j + 1]) {int temp = a[j];a[j] = a[j + 1];a[j + 1] = temp;}}}
}

3-联合体、枚举

联合体:union;

枚举:enum;

4-文件读写

FILE* fpOut = fopen("./Out.txt", "w");
fclose(fpOut);
//EOF:End Of File,值为-1;0xffffffff;

菜鸟教程:文件读写:

文本模式与二进制模式差别

image-20230228163606638

主要是windows中有区别。

image-20230228163703734

(1)文本文件读写

按文本格式读取,到内存中是文本字符的数字,而不是ascll码。

读取模式:r、w、a、r+、w+、a+

w:如果已存在同名文件,则原文件丢失,新建同名文件;

a: 打开一个文本文件,以追加模式写入文件,即文件指针指向文件末尾

菜鸟教程:fscanf:从文件指针读取数据,到内存。按照格式

int fscanf(FILE *stream, const char *format, ...);
fscanf(fp, "%s %s %s %d", str1, str2, str3, &year);while (fscanf(fpIn, "%d", a + n) != EOF) {n++;
}
//返回值:如果成功,该函数返回成功匹配和赋值的个数。
//		如果到达文件末尾或发生读错误,则返回 EOF。

菜鸟教程:fprintf:从内存读取数据 写到文件中。按照格式。

int fprintf(FILE *stream, const char *format, ...);
fprintf(fp, "%s %s %s %d", "We", "are", "in", 2014);for (int i = 0; i < n; i++) {fprintf(fpOut, "%d\n", a[i]);
}

菜鸟教程:fgetc:从指定的流 stream 获取下一个字符(ascll码)

int fgetc(FILE *stream);
//返回值:读取字符的ascll码
//如果到达文件末尾或发生读错误,则返回 EOF。//只读取一字节,但返回值必须用int存放。
//读取失败返回EOF,即文件末尾时。

菜鸟教程:fgets:从指定的流 stream 读取一行

char *fgets(char *str, int n, FILE *stream);
//返回值:如果成功,该函数返回相同的 str 参数。
//到达文件行末尾、没有读取到任何字符,则返回NULL

菜鸟教程:futc:把一个(无符号)字符(ascll码)写入到指定的流 stream 中

int fputc(int char, FILE *stream);
//指写入一字节,即int型变量char(4字节)的低8位。

菜鸟教程:fputs:把字符串写入到指定的流 stream 中,但不包括空字符。

int fputs(const char *str, FILE *stream);

(2)二进制文件读取

读取文件存储的数据时,一定要二进制模式,即rb(w+b)

按二进制格式读取,读取到内存中为各个字符的ascll码。

读取模式:rb、wb、ab、r+b、w+b、a+b

菜鸟教程:fread:从给定流 stream 读取数据到指针 ptr 所指向的内存中。

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
//ptr -- 内存指针 这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。//size -- 这是要读取的每个元素的大小,以字节为单位。
//nmemb -- 这是元素的个数,每个元素的大小为 size 字节。
//stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。//返回值:成功读取size个字节的数量,即成功读取多少组size字节。

菜鸟教程:fwrite:把 指针ptr 所指向的内存中的数据写入到给定流 stream

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
//ptr -- 内存指针 这是指向要被写入的元素数组的指针。
//size -- 这是要被写入的每个元素的大小,以字节为单位。
//nmemb -- 这是元素的个数,每个元素的大小为 size 字节。
//stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流。

菜鸟教程:fseek:设置流 stream 的文件位置为给定的偏移 offset

int fseek(FILE *stream, long int offset, int whence);
//offset指偏移
//whence一般三种常量
//	SEEK_SET	文件的开头
//	SEEK_CUR	文件指针的当前位置
//	SEEK_END	文件的末尾

菜鸟教程:ftell: 返回给定流 stream 的当前文件位置。

long int ftell(FILE* stream);
//返回 位置标识符的当前值,即文件指针距离文件头的偏移

fseek和ftell常用于获取文件大小

fseek (pFile, 0, SEEK_END);//文件指针指向文件末尾
int FileSize=ftell (pFile); 
fseek (pFile, 0, SEEK_SET);//文件指针回到开头

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...