【2023.3.1】c语言复习笔记

【2023.3.1】C语言复习笔记

0-说明

C语言笔记

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

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

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

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

全局变量:作用域全局

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

//静态变量示例:
#include<stdio.h>
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;
}

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;

菜鸟教程:文件读写

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

主要是windows中有区别。

(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);//文件指针回到开头
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值