
C语言
文章平均质量分 60
又秃又弱
博客主要记录和分享本人学习,请斟酌帖子,勿一味的输入知识
展开
-
程序编译链接过程 | 源文件如何生成可执行文件进行执行的?
预编译(预处理) .c->.i (中间文件Intermediate file)编译 .i->.s (汇编代码文件Assembly file)汇编 .s->.o (目标文件Object file)链接 .o->可执行文件(Linux: .out,windows:.exe)原创 2023-07-21 17:21:24 · 1195 阅读 · 0 评论 -
头文件中string、string.h和cstring的区别
但是string和string.h没有这样的关系,string.h是c处理c字符串的函数库,而string是c++的字符串类的头文件,二者没有任何关系。“string.h”和ctring都是用来定义处理字符数组char*函数的头文件,后者只不过是C++语言为了统一标准命名空间管理而建立另一个管理函数的头文件,内容都差不多,稍有改进。在c++标准化的过程中,为了表示头文件来源于c,有时也在前面加上c,比如cmath就来源于math.h。.h后缀都是c的头文件,与其相对应的不加.h的都是c++的头文件。原创 2023-05-07 09:15:40 · 675 阅读 · 1 评论 -
前++与后++的区别?反汇编底层刨析
单独++不和其他运算符结合时,前置和后置一样当和其他运算符结合时前置++是先++后赋值,a=1;i=++a;//a=2,i=2;后置++是先赋值再++ ,a=1;i=a++;//a=2,i=1;前置++可以做左值,后置不可以前置可以取地址&,后置不可以。原创 2023-04-22 13:01:01 · 3846 阅读 · 1 评论 -
什么是二分查找(折半查找)?C语言怎么实现?递归如何实现?
二分查找(折半查找)算法效率分析:时间复杂度、空间复杂度平均时间复杂度:O(n);空间复杂度:O(1);前提:数组元素有序代码实现:1,main函数内实现:intmain(){intarray[MAX] = { 1,2,3,5,6,7,8,9,10,11,12 };intlength = sizeof(array) / sizeof(array[0])-1;//减1!!intright = array[l...原创 2021-12-11 19:21:50 · 437 阅读 · 0 评论 -
C语言实现哈夫曼编码
一般地,设需要编码的字符集为{ d,_,.",dn }, 各个字符在电文中出现的次数或频率集合为{ W1,W2,..,Wn},以{d1,d2..,dn}作为叶子结点,以W1,W2...,Wn作为相应叶子结点的权值来构造一棵赫夫曼树。规定赫夫曼树的左分支代表0,右分支代表1,则从根结点到叶子结点所经过的路径分支组成的0和1的序列便为该结点对应字符的编码,这就是。编码中非0即1,长短不等的话其实是很容易混淆的,所以若要设计长短不等的编码,则必须是任一字符的编码都不是另一个 字符的编码的前缀,这种编码称做。原创 2022-11-22 20:42:49 · 199 阅读 · 0 评论 -
【C】文件操作fopen与fclose
常用的用法是把文件和一个标准流(stdin,stdout或sterr)相关联。在关闭了先前的(通过命令行重定向或者之前的freopen函数调用)与stdout相关联的所有文件之后,freopen函数将打开foo,并将其与stdout相关联。作用:为打开的流附加一个不同的文件。原创 2022-11-22 20:42:09 · 993 阅读 · 0 评论 -
【顺序表】不定长代码实现
不定长即为当顺序表长度length与当前顺序表总容量listsize相等时,可以对顺序表进行,增加顺序表的总容量。原创 2022-11-01 21:34:10 · 159 阅读 · 0 评论 -
【C】退出break,return,exit,goto
用于break作用:1.在一个判断时退出。例如,if(...)..break;2.在嵌套循环时从最内层的循环退出(只退出一层),例如在while循环内嵌套switch..break语句,break可以从switch语句中转移出来,但不能跳出while循环。:return后面没有break语句,紧跟在return语句后的break永远不会被执行,许多编译器还会因此提示警告消息。原创 2022-10-30 11:32:29 · 3404 阅读 · 0 评论 -
八大排序之冒泡排序
思想:依次遍历数组确定下来最大的数字放到最后一位,总共需要遍历n趟,确定下来每一趟里面的最大数均放置到末尾。代码:voidBubbleSort(int* arr, intlen) {boolflag = true;//用于判断是否进入到交换的循环内for(inti = 0; i < len; i++) {for(intj = 0; j < len- i; j++) {if(arr[j] &g.........原创 2021-12-16 20:21:21 · 833 阅读 · 0 评论 -
实现从字符串中删除某个字符操作
思想:依次遍历,找到需要删除的字母,将该字母后面的序列依次前移,覆盖该值,并且该序列最后一个字符赋值为‘\0’(如果最后一个不覆盖的话会导致最后一个字符重复啦eg:abcd->bcdd)代码实现:#include<stdio.h>#include<assert.h>#include<string.h>voidRemoveChar(char* arr,chark){assert(arr!=NULL);......原创 2021-12-02 11:12:17 · 2073 阅读 · 0 评论 -
ASCII 码对照表
百度上找的图有码 非原创原创 2021-12-02 11:31:27 · 124 阅读 · 0 评论 -
【指针】一级指针&二级指针知识点梳理
/此时,三个均为指针变量,等价于Int*p1,*p2,*p2;定义Fun(p)函数,在内部对p置空,调用Fun(p),再输出printf(“%d”,*p)//此时,仅第一个为指针变量,等价于Int*p1,p2,p2;//fun函数未被执行,想要通过另一个修改其值,必须传指针,函数内部解引用(加*)*p是对a解引用,得到a格子内的值,也就是a的值,令*p=100,(6)定义指针p,将p指向b,并通过p将b的值改为20。//p指向a,*p = 30修改了a的值。//pp指向p,(pp格子内)保存p的地址。原创 2021-12-02 13:01:35 · 7048 阅读 · 6 评论 -
结构体struct与内存对齐
结构体数组:访问:成员访问:变量名称.结构体变量 ‘.’成员访问符例如:Student"李四",14};Studentstudent1;//如果是局部变量(写在函数内部)->未初始化,成员内容为随机值,编译会报错;如果是全局变量(写在函数外部)->未初始化,编译器给成员列表默认值初始化int,short那些都是0,char类型为\0,编译不会报错例题求解:structStudenta;//利用struct Student数据类型定义一个变量a;struct。原创 2021-12-06 12:24:11 · 524 阅读 · 0 评论 -
【const】与指针、数组、结构体的使用
但如果用const修饰性别时(const char sex),可以将s1.sex=‘女’修改指向。//此时,const修饰p变量,p只能指向a,也可修改a(当前仅当a是变量),但是p不可以任意指向。第二行定义指针p指向a可修改a,但第一行定义a为常量不允许被修改,自相矛盾,所以编译器提醒错误。//const char *src,表示函数strcpy不会修改 src指向的内容。//允许p指向a,但是不可修改a,p可以任意指向。name,指明姓名不能被修改,这样的用法是正确。//a为常变量,不可修改。原创 2021-12-06 12:28:31 · 1906 阅读 · 0 评论 -
atoi超强解析
函数说明:库内自带函数,需要引用头文件#include<stdlib.h>将字符串123转换成整型数字123(一百二十三)特点:输入123输出->123 //直接转换 输入123.5输出->123 //int类型转换(也可以理解为直接把.看作字符处理) 输入-123输出->-123 //需识别字符‘-’,转换成-(负号) 输入+123输出->123 输入 (空格)123输出->123 //如有空格,直接前移覆盖空格 输入12 (空格)...原创 2021-12-10 10:38:44 · 564 阅读 · 0 评论 -
递归调用知识点-包含例题求解二分查找、青蛙跳台阶、逆序输出、阶乘、斐波那契、汉诺塔。
欲将n个盘子从A处挪到C处,则需先将n-1个盘子从A处挪到B处,最后将最大的盘子n从A处挪到C。n个台阶,先跳1个和前面(n-1)个的跳法+跳2个和(n-2)个的跳法,其实就是斐波那契数列。一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题求解。/*问题描述n个盘子由大到小的堆在一起,从X处通过其余位置挪到Y。(3)问题规模逐渐缩小,直至最小问题规模(形参控制问题规模)/*青蛙跳台阶问题一只青蛙可以跳一级台阶或者2级,*/跳法1235。//已知1,求前5的和。......原创 2021-12-11 17:06:09 · 686 阅读 · 0 评论 -
杨辉三角代码实现
1 1 11 2 11 3 3 11 4 6 4 11 5 10 5 1. . . . . . . . . .规律:1.第一行以及主对角线均为12.当前值=上一行前一列+上一行同列二维数组实现:思路解析:1.第一行以及主对角线均为1arr[0][n]=0;arr[i][i]=02.当前值=上一行前一列+上一行同列arr[i][j]=a......原创 2022-01-04 10:24:26 · 1529 阅读 · 0 评论 -
重排数列练习题
题目:数列异或操作[异或,循环],给你两个整数,n和start,其中n为数据的数量,start为第一个数据。当前数据定义为:num = start + 2*i(i表示从第几个数据,从0开始)。请返回数列中所有数据按位异或(XOR)得到的结果eg:[2,5,1,3,4,7] i j输出:[2,3,5,4,1,7](输出一个i,i++,输出一个j,j++)n=5,start=0; 输出8;原因:(0^2^4^6^8)= 8解析:^异或符号的求解:......原创 2022-01-04 14:01:51 · 280 阅读 · 0 评论 -
C语言求解一维数组前缀和
题意:1 2 3 4 5输出:1 1+2=3 3+3=6 6+4=10 10+5=15(输出的为前几个数之和)代码求解:#include<stdio.h> int main(){ //法一:重新扩展了内存result int arr[]={1,2,3,4,5}; int len=sizeof(arr)/sizeof(arr[0]); int result=0; for(int i=0;i<len;i++) { ...原创 2022-01-04 14:38:06 · 150 阅读 · 0 评论 -
C实现好数对的求解
题意:数字一样的对eg:[1,2,3,1,1,3]1-11-13-31-1输出4对代码实现:#include<stdio.h>int ArrPairs(int arr[],int len){ int count=0; for(int i=0;i<len;i++) { for(int j=i+1;j<len;j++) { if(arr[i]==arr[j])原创 2022-01-04 14:48:30 · 203 阅读 · 0 评论 -
数据类型的分类有哪些?字节大小为?有符号和无符号整型是什么?怎么计算?
最大32位整数是0111 1111 1111 1111 1111 1111 1111 1111=2147483647=默认的整数是有符号的,也就是左边位保留符号位。最大16位整数的二进制表示形式为0111 1111 1111 1111=32767=无符号:最左边一位是数值的一部分,而不是符号位。如果>127的数字截取其二进制的后8位,并带入其符号位。加上符号位(默认第一位为符号位):1->负数‘-’有符号:第1位一定是用来存储符号,标记正负号。最终结果:-1000 0000->‘-128’原创 2022-02-13 19:26:03 · 1618 阅读 · 0 评论 -
C中宏定义define&typedef
define:使用方法:在预编译阶段进行字符串(宏)替换#defineINITSIZE10//含义:INITSIZE=10,在编译阶段使用INITSIZE就是使用10注意:无‘ ; ’说明:如果多个定义#defineINT int*INT a b;//a:int* b:int如果定义相同类型的多个变量,用typedef typedefint* INT;(如下讲解)typedef:使用方法:在预编译阶段进行类型重定义typedefunsigne......原创 2022-02-13 20:20:14 · 404 阅读 · 0 评论 -
指针数组和数组指针
指针数组:指向指针的数组,落脚点在数组上。eg:constchar* arr[2] = { "hello","world"};//字符串为常量,不允许修改数组内的值//数组的优先级要高,[]的优先级高于*数组指针:指向数组的指针,落脚点在指针上。定义:intarr[10] = { 1,2 };//定义指针(指向一维数组的指针)int(* p)[10]=&arr;//落脚点在指针,指针的优先级要高。此时的p为指向数组arr的指针。使用:eg函数指针:int...原创 2022-02-15 18:27:42 · 490 阅读 · 0 评论 -
用函数指针实现+-×/运算
函数设计:operate(int(*pointer)(int,int),int a,int b);//operate为函数名,参数分别为返回值为整型的函数指针,以及返回值为整型的a,b两个参数。代码:#include<stdio.h>//声明函数 int add(int a, int b);//+int sub(int a, int b);//-int mul(int a, int b);//*int exc(int a, int b);// /int oper..原创 2022-02-18 19:41:11 · 254 阅读 · 0 评论 -
内含结构体实现成绩排序
题目要求:对学生成绩由大到小排名,成绩相同的按照年龄降序排序代码:#include <stdio.h>typedef struct Student{ char name[20];//姓名 int age;//年龄 int stu_id; //学号 int score;//成绩}Stu,*Pstu;void BubbleSort(Pstu arr, int len){ for (int i = 0; i < len; i++.原创 2022-02-19 19:11:35 · 248 阅读 · 0 评论 -
字符串内部函数strcpy代码实现
函数功能:复制字符串代码思想: 功能函数内进行循环逐个字符串赋值,主函数内调用。函数设计:void my_strcpy(char* str, const char* src) :将src内容复制到str内,src内容固定因此用const,指针是因为要带回多个返回值。函数内malloc的代码实现过程:如果将malloc写在my_strcpy函数内,则会发现无法在该函数内free,因为一旦free,就相当于没写,可是不fr......原创 2022-02-24 16:47:24 · 859 阅读 · 0 评论 -
动态存储分配 | malloc realloc calloc的使用
前言动态存储分配适用于所有类型的数据,但主要用于字符串、数组和结构。数组局部变量栈在windows中的默认大小为1M,Linux中默认大小为10M,因此在堆heap中进行内存申请——动态内存的开辟。原创 2022-02-24 17:47:23 · 2082 阅读 · 0 评论 -
C语言实现约瑟夫环代码
题意:对n个人员进行1 2 3 1 2 3...的编号,报数3的人退出,将退出的人设为-1。问最后剩余一个人的编号是什么?题意解析:假设n=10,每次都是123编号人: 1 2 3 4 5 6 7 8 9 10编号:1 2 3 1 2 3 1 2 3 1 1 2 -1 1 2 -1 1 2 -1 1 //报数3的人设为-1 2 -1 -1 1 2 -1 -1 1 -1 2 //这块儿最后一个直接接到......原创 2022-02-25 23:22:22 · 2858 阅读 · 0 评论 -
c语言/C++实现KMP算法以及代码实现
终止条件: brr[i] == '\0' &&arr[i] == '\0',必须要同时满足,因为如果只满足了一个,当子串已经被完全匹配了,而母串没到最后一个位置,就要进入死循环了。",匹配前3个字母时一致,后面不匹配,但是直接从后面继续查找就不可能匹配成功了,必须返回前面查找,返回的位置是:当前主串下标-当前子串下标+1:i-j+1。匹配不成功:查找主串到最后一个位置也没找到:arr[i] == '\0'匹配成功:匹配到了子串的最后一个位置: brr[j] == '\0';acbc",子串 "原创 2022-02-26 14:27:05 · 1457 阅读 · 0 评论 -
C语言中文件的知识点以及fwrite fopen等的使用说明
什么是文件:文件指存储在外部介质上的数据的集合。文件的使用:(1)文件是一种保存数据的形式,存放在外部介质上的(2)操作系统是以文件为单位对数据进行管理(3)想找存放在外部介质上的数据,先按文件名找到所指定的文件,然后再对文件读数据(4)要向外部介质上存储数据,也必须先建立一个文件(以文件名作为标志)流: 流是输入输出的数据传送的过程,数据如流水一样从一处流到另一处,因此常将输入输出形象地称为流(stream),即数据流。流表示......原创 2022-03-16 17:22:31 · 1432 阅读 · 0 评论 -
字符串基本功能说明
strcmp() 比较函数返回值:=0说明相等>0 前者大于后者<0 前者小使用:printf(“%d”,strcmp(“ab”,”cd”));结果:返回值为-1,因为a<cstrncmy() 比较函数使用:printf(“%d”,strncmp(“abcd”,”cd”,2));......原创 2022-03-16 19:48:11 · 321 阅读 · 0 评论 -
【C语言】一维数组和二维数组怎么定义?怎么使用?sizeof在数组中的使用?数组和指针的结合?
例如,如果“arr”是一个有10个元素的整数数组,那么sizeof (arr)将返回该数组的总大小(以字节为单位)(这将取决于特定s系统中整数的大小),而sizeof(arr[0])将返回单个整数元素的大小。sizeof(brr[0][0]) ->单元格类型所占字节数与一维数组arr[0]含义一致,单个元素的大小。*数组名 = 首元素的值 => *brr = brr[0][0] //访问第1行第1个元素的值。,它的工作原理是将数组的总大小(以字节为单位)除以单个元素的大小(也以字节为单位)。原创 2022-03-18 11:18:22 · 1829 阅读 · 0 评论 -
项目1:C中实现ATM功能
功能说明:1.完成登录功能:输入账号和密码登录2.完成注册功能:输入账号和密码注册代码解析:1.完成登录功能:输入账号和密码登录先查找是否有该账号,如果查找不到账号或者密码输入错误,打印“登陆失败”。 查找到该账号并且密码匹配,打印“登陆成功”。2.完成注册功能:输入账号和密码注册先检查该账号和密码是否已经注册过,如已注.........原创 2022-03-20 00:33:16 · 509 阅读 · 0 评论 -
C项目2:实现五子棋功能
黑棋与白棋进行博弈,先连满5个与自己颜色相同的棋子获胜。函数要求:1.棋子能够正常输入到棋盘中2.能够正确判断棋子成功嬴棋:(1)横向连满5个与自己颜色相同的棋子为获胜(2)纵向连满5个与自己颜色相同的棋子为获胜(3)正斜向连满5个与自己颜色相同的棋子为获胜(4)负斜向连满5个与自己颜色相同的棋子为获胜3.嬴棋了还可以再开一局代码实现://这个是自己写的不规范代码#define _CRT_SECURE_NO_WARNINGS#include &l...原创 2022-03-24 17:07:14 · 614 阅读 · 0 评论