自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 资源 (2)
  • 收藏
  • 关注

原创 C语言计算某一天是星期几

//1970年1月1日星期四#include <stdio.h>//输入年、月、日,返回值为1-7int GetWeek(int year,int month,int day){ int year_num = 0; int leap_year_num = 0; int year_dat_num = 31*7 + 28 + 30*4;//非闰年的总天数 int total_dat_num = 0; for(int i = 1970;i < ye

2021-11-25 20:25:10 3092

原创 C语言解决四人/多人过桥问题

参加笔试的时候遇到一道经典的算法题,四人过桥问题。笔试的时候没写出来????。四人过桥问题:在一个黑夜里,有四个人需要过桥,每次只能通过两人,其中一人必须拿着手电筒;但只有一个手电筒,所以过桥后必须有一个人拿手电筒回来,其他人才能继续过桥。四人过桥的速度分别为:1,2,5,10(分钟);要最慢的那个人过了桥才算真正过桥。求怎样才能最快的全部人都过桥?#include <stdio.h>#include <stdbool.h>int sum = 0;/** * @descr

2021-11-21 17:44:20 6389

转载 C语言实现排序与组合

#include <stdio.h>#include <stdbool.h>/** * @description: 排序 * @param {int} data 待排序数组 * @param {int} data1 排序数组 * @param {bool} flat 标志数组对应位置是否已使用 * @param {int} count 数组长度 * @param {int} n 排序数组的下标 * @return {*} void */void Ar

2021-11-21 11:24:42 231

原创 系统文件IO与标准文件IO

基本概念文件的概念文件本质上都是储存在计算机磁盘(储存设备)中二进制0/1的数据,只不过根据这些二进制数据作用的不同,意义的不同,人为地对着这些数据进行了管理、抽象出一个个不同的文件类型“文件”—抽象的概念—表述磁盘内容的在Linux系统语境下,文件(file)一般有两个基本含义:狭义:指普通的文本文件,或二进制文件。包括日常所见的源代码、word文档、压缩包、图片、视频文件等等。广义:除了狭义上的文件外,几乎所有可操作的设备或接口都可视为文件。包括键盘、鼠标、硬盘、串口、触摸屏、显

2021-11-17 15:58:07 1162

原创 指针、野指针、指针常量、常量指针

指针概念指针是什么?在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。内存地址字节(byte):字节是内容的容量单位,英文称为byte,一个字节有8位,即1byte = 8bits字(word):4byte = 1字 半字:2Byte地址:系统为了便于区分每一个字节而对它们逐一进行

2021-11-16 12:44:09 1189

原创 结构体与其对齐规则

结构体定义格式//基本定义格式struct 结构体类型名{ 成员1类型 成员1名; 成员2类型 成员2名; 成员3类型 成员3名; .... 成员n类型 成员n名;};例如:struct Student_info{ char Name[64]; char ClassID[7]; char Sex; char Age;};//如何使用自定义的结构体类型去定义变量:格式:struct 结构体类型名 结构体变量名;struct Student_info

2021-11-15 12:33:32 851

原创 C语言实现24点游戏算法

纸牌游戏24点,输入4个1到13之间的值,通过加减乘除判断算法可以得到24。#include <stdio.h>#include <string.h>#include <stdbool.h>bool game24(char ch[],char flat,int data[],int num,int sum){ if(num > 1)//记录加减乘除符号,其中\表示将除数和被除数调换位置a\b ==> b/a. ch[num-

2021-11-14 18:25:51 10565 8

原创 C语言递归解决八皇后问题

八皇后问题,任意两个皇后都不能处于同一行、同一列或同一斜线上。在8x8的格子上,我们可以约定每一个皇后都占一行,这样就不会出现行冲突。任何在一次将一个皇后放在一列上,判断是否与前面的皇后有冲突,直到八个皇后都没有冲突,算一次。#include <stdio.h>#define NUM 8int queen[NUM] = {0};//用来存储皇后的列数int Queen(int n){ if(n >= NUM) { return 1;

2021-11-11 18:40:16 1326

原创 C语言实现汉诺塔

以前看到汉诺塔的时候觉得它很难,感觉越看越乱;当真正静下心来分析后才发现,原来汉诺塔这么简单。#include <stdio.h>//将A中除了底层外的其它块移到B中,底层那块移到C中。void hanoi(int num,char A,char B,char C){ if(num == 1) { printf("%c-->%c\n",A,C);//将A柱子最上面的一块移到C柱子最上面 } else { ha

2021-11-11 10:29:35 685

原创 Linux 进程与进程间通信

进程的概念我们编写的代码只是⼀个存储在硬盘的静态⽂件,需要经过编译器的预编译、编译、汇编以及链接形成一份可执行文件,再将它加载到内存中,让CPU逐条执行并做出相应的动作,才形成一个动态的进程。一份可执行文件中,除了包含有数据段、代码段的相关数据,还有ELF头以及其它的辅助信息。ELF文件里大部分的数据是与程序本身的逻辑没有关系的,只是程序被加载到内存中运行时,系统会对这些辅助信息进行处理。而执行时真正被复制到内存中的只有 .data、.rodata、.text、.init段的内容,.bss段放的是未初

2021-11-09 15:03:06 318

原创 后置++与运算符结合型相关的笔试题

A选项:(√)相等符号的结合性是从左到右的,所以要先看*(p++),因为是后置++,所以*(p++)的结果是a,而a++的返回值也是a,执行完后原来的a才变为a+1(这个是不参与判断的),所以a==a是成立的;但如果该选项改为:a++ == *(p++);先看a++的返回值为a,执行完这一句后,原来的a变为了a+1;那么*(p++)的返回值就变为了a+1;B、D选项:(√)C选项:(×)先看(*p)++,*p的返回值是a,(*p)++的结果就是a,执行完该操作后,原来的a变为了a+1;所以右边的.

2021-11-05 18:49:47 104

原创 6种常见的比较类排序算法

排序算法算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。时间复杂度和空间复杂度算法分析是指算法在正确的情况下,对其优劣的分析。一个好的算法通常是指:算法对应的程序所耗时间少–程序效率相对较高算法对应的程序所耗存储空间少—占用计算机空间少算法结构性

2021-11-05 11:06:40 4170

原创 数据结构与算法---栈

栈基本概念栈是一种逻辑结构,是特殊的线性表。特殊在:只能在固定的一端操作只要满足上述条件,那么这种特殊的线性表就会呈现一种“后进先出”的逻辑,这种逻辑就被称为栈。由于约定了只能在线性表固定的一端进行操作,于是给栈这种特殊的线性表的插入删除,起个特殊的名称:栈顶(top of stack):可以进行插入删除的一端栈底:栈顶的对立端入栈:将节点插入栈顶之上,也称为压栈,函数名通常为push()出栈:将节点从栈顶剔除,也称为弹栈,函数名通常为pop()取栈顶:取得栈顶元素,但不出栈,函数

2021-11-04 13:44:28 645

原创 使用有名管道实现简易版的群聊室

在使用有名管道前需要注意有名管道的一些特性。有名管道(FIFO)的特性:1.当从管道文件中读取数据后,该数据也会从文件中消失;2.有名管道可用于非血缘关系的进程中;3.有名管道是存在文件描述符的,也确确实实在磁盘(闪存)中生成文件;4.打开有名管道文件时,使用可读可写权限打开,如果只使用可读或可写打开文件,会出现一些特殊清空。5.有名管道的文件路径不能存在于共享路径中;6.有名管道具有原子性;等。群聊室的相关代码//聊天室#include <stdio.h>#inclu

2021-10-14 10:42:37 128

原创 exec函数簇与system函数

使用fork函数创建出来的子进程,会继承父进程的栈、堆、数据段以及代码段;那么,子进程运行的程序与父进程基本是一模一样的,如果只能这么用,那么fork函数基本是没什么用处的;但存在这么一些函数,能够让你去运行其它的程序文件,比如exec函数簇、system()等。将它们与fork函数搭配起来使用,就能实现让父进程运行程序1、子进程运行程序2,达到多个进程一起运行的效果。exec函数簇exec函数簇指一些的函数,它们的功能基本是一样的。图中可以看到,这六个函数的名字和参数都是比较相似的,在使用之前需要

2021-10-12 17:21:03 271

原创 pause函数的使用及signal函数的返回值

signal函数该函数主要是用来捕获一个指定信号的。例如:这个还是比较容易理解的,主要是返回值部分,成功返回最近一次调用该函数时的第二个参数的值是什么意思呢?看图:1、只调用一次signal函数时:注意:返回值的类型需要自己定义或者声明相关的宏此时得到的返回值sig_ret为NULL,与该函数的第二个参数func没有半毛钱关系2、调用两次signal函数,不过捕获的信号不一样此时得到的返回值与func还是没关系。3、调用两次signal函数,并且捕获相同的信号这次的

2021-10-12 09:11:12 1002

原创 进程的内存分布

Linux-内存分布C进程的内存布局Linux和windows都是支持多任务多用户的高级操作系统**进程(process):**一段程序的执行过程对于一个C程序,在运行过程系统对这个进程的内存资源管理非常重要;任何一个程序,想要正常运行都需要内存资源,用来存放诸如变量、常量、函数代码等等。这些不同的内容,所存储的内存区域是不同的,且不同的区域有不同的特性。因此我们需要研究进程的内存布局,逐个了解不同内存区域的特性。每个C语言进程都拥有一片结构相同的虚拟内存,大小一般为4G,所谓的虚拟内存,就是从

2021-10-11 08:47:21 3665 1

原创 通用链表的实现

通用性链表我们在使用链表时,都需要先自定义链表结点、初始化函数、添加结点函数等等。下次使用时,可能由于结点不同需要对这些函数进行修改甚至重新定义。有点烦!那么我们可以来定义一个适用于各种结点的链表模板,需要时直接定义一个结点就可以直接使用相关函数了。通用性链表结点的设计//DList.h文件//此条件决定了下面通用结构体的具体类型#ifndef DATATYPE //先给结点数据域指定一个初始类型#define DATATYPE int#endiftypedef DATATYPE d

2021-08-20 09:00:34 228

转载 快慢指针/双指针/Floyd 判圈算法介绍及其应用

快慢指针/双指针/Floyd 判圈算法刚学完链表,在力扣上刷题的时候遇到这样一道题:141、环型链表给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。来源:力

2021-08-14 09:09:50 206

原创 cmake工具的基本使用及模板

cmake文章目录cmake简介应用场景Linux的Cmake编写CMakeLists.txtCmake模板Cmake简单查询信息简介CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件。应用场景当你的工程带有强移植性,则会面临一个问题:在不同的平台你要根据不同情况编写makefile文件,每次都需要重新编写,带来了移植上的麻烦,所以,如果能定制一套更上层的规则,规定如何根据不同情况生成不同的make

2021-08-11 12:59:07 537

原创 缓冲区与setvbuf函数

缓冲区该笔记适用于Ubuntu,在Windows或其它平台上可能会存在不同。什么是缓冲?缓冲区又称为缓存,它是内存空间的一部分,用来缓冲输入或输出的数据。为什么要引入缓冲区呢?比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作远快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度。​ 缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来缓存数据。它使得低速的输

2021-08-10 19:14:23 1763 1

原创 makefile

Makefile基础文章目录Makefile基础什么是makefile?makefile的make基本规则makefile基本书写规则makefile注释makefile编写改进什么是makefile?makefile关系到了整个工程的编译规则。一个工程中的源文件可以有很多,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可

2021-08-10 11:04:08 288

原创 特殊函数--变参函数及相关宏

特殊函数-变参函数定义的函数在使用时传入的参数是不定量不定类型—变参函数include <stdarg.h>例子:printf("abc %d def %c g\n",num,ch);其中"abc %d def %c g\n"为固定参数,num,ch为变参列表(...)//需要的几个宏和函数void va_start(va_list ap, last);type va_arg(va_list ap, type);void va_end(va_list ap);void va_

2021-08-07 16:19:10 217

原创 Linux_C阶段小项目

基于C命令行的随机点名器项目描述使用C语言,制作一个在命令行运行的点名程序,该程序运行时可指定班级的花名册文件,运行后在界面上显示随机抽取名字的过程,速度由快到慢,逐渐定格到某一个“幸运儿”上,程序结束。功能要求指定普通文本文件(*.txt)为名单,以行为单位读取学生名字.随机抽取的过程在终端动态展示出来,速度呈慢-快-慢渐变效果.从名单中抽取名字后,将名单中相应的名字去掉.可以一次抽取若干位同学.抽取到最后,当名单上的同学不足以抽取一次时,应当可以选择还原名单(覆盖).思路:

2021-08-04 12:41:37 602

原创 Window和Linux中的文本编码方式

四种文本编码格式ANSIUnicodeUnicode big endianUTF-8如何改变windows上文本的编码格式将txt文件另存为时,在该界面可以选择其它格式来存储。不同编码格式在不同平台的特点Windows平台上,文本格式为UTF_8,用\r\n作为换行符,即占两字节。(下图中,字母A占一个字节,换行符占两个字节)同样方式得到1个中文用3个字节来表示验证了ANSI和UTF_8的格式在这三点上是一样的,这两种格式是比较常用的,其它的可以自己验证。在L

2021-07-25 19:19:43 1136

转载 什么是载入内存?什么是虚拟内存?

如果你的电脑上安装了QQ,你希望和好友聊天,会双击QQ图标,打开QQ软件,输入账号和密码,然后登录就可以了。那么,QQ是怎么运行起来的呢?首先,有一点你要明确,你安装的QQ软件是保存在硬盘中的。双击QQ图标,操作系统就会知道你要运行这个软件,它会在硬盘中找到你安装的QQ软件,将数据(安装的软件本质上就是很多数据的集合)复制到内存。对!就是复制到内存!QQ不是在硬盘中运行的,而是在内存中运行的。为什么呢?因为内存的读写速度比硬盘快很多。对于读写速度,内存 > 固态硬盘 > 机械硬盘。机械

2021-07-25 15:11:51 241

原创 printf()+sprintf()源码解析笔记

printf的Linux C源码解析文章目录printf的Linux C源码解析头文件引用及宏定义strnlen函数__div64_32函数宏- -do_divskip_atoi函数number函数vsprintf函数sprintf函数printf函数该笔记是我看的第一个源码所做的笔记,有些地方的解读可能不是很合理,之后有时间会继续进行优化笔记。头文件引用及宏定义#include <stdarg.h>#include <stddef.h>#include "string.

2021-07-23 16:21:28 4758 2

原创 数据在内存中的存储

数据在内存中的存储文章目录数据在内存中的存储计算机中的数据数据类型类型的基本归类整型在内存中的存储原码、反码、补码大小端介绍浮点型在内存中的存储二进制与十进制的转换计算机中的数据正如大家所看到的,我们所使用的数据在计算机内存中是以二进制位序列的方式存放的;如图中的…0000001000000000000000000000000011001100…;在这些二进制位序里,每一位上的数字,不是0就是1。在计算机中,位(bit)是含有0或1值的一个单位。在物理上,它的值是一个负或正电荷。也就是计算机中可以

2021-07-21 08:59:23 829 1

原创 格式化标准输出函数printf()与格式化标准输入函数scanf()

printf()函数与scanf()函数格式化标准输出函数 ——printf()概念:屏幕是系统的标准输出设备,从屏幕中输出数据被称为标准输出相关函数:printf():格式化标准输出函数函数原型:#include <stdio.h>int printf(const char *format,...);//...表示可变参数,即表示可以只有format这一个参数,也可以表示后面还有其它参数。函数说明:printf系列函数能够对这种不同类型的参数进行格式化编排和输出。f

2021-07-15 10:21:02 780

原创 MarkDown学习笔记

MarkDown学习笔记目录**MarkDown学习笔记**1.标题2.段落3.文字3.1斜体3.2加粗3.3斜体+加粗3.4删除线3.5下划线4.分隔线5.扩展语法的说明6.高亮(需要勾选扩展语法)7.下标(需要勾选扩展语法)8.上标(需要勾选扩展语法)9.常见的公式表达式9.1分数9.2累加9.3累乘9.4开方9.5积分9.6正无穷、负无穷9.7极限9.8关系运算符9.9二元运算符9.9否定关系运算符9.10对数运算符9.11三角运算符9.12箭头9.13省略号9.14行间公式9.15矢量9.16希腊

2021-07-12 15:51:26 792

原创 C语言的杂碎知识点

什么是C语言?C语言是一门通用计算机编程语言(计算机语言),广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。其编译器主要有Cla

2021-07-11 17:40:46 229

通用双向不循环链表模板.zip

该模板仅用于双链不循环链表,使用时需要包含DList_General.h头文件和定义宏DATATYPE,个别链表函数使用需要自定义回调函数来使用。

2021-08-19

基于C语言的随机点名器.zip

使用C语言,制作一个在命令行运行的点名程序,该程序运行时可指定班级的花名册文件,运行后在界面上显示随机抽取名字的过程,速度由快到慢,逐渐定格到某一个“幸运儿”上,程序结束。 这是我第一个小项目,完全按照自己思路来写,并不标准。不喜勿喷。

2021-08-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除