![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 66
小一!
小小程序员
展开
-
Linux中进程的六种状态
Linxu中进程的六种状态目录R运行状态(running)S睡眠状态(sleeping)D磁盘休眠状态(Disk sleep)T停止状态(stopped)Z僵尸状态(Zombies)僵尸进程是什么为什么要有僵尸进程僵尸进程的危害X死亡状态(dead)为了弄明白正在运行的进程是什么意思,我们需要知道进程的不同状态。一个进程可以有几个状态(在Linux内核里,进程有时候也叫做任务)。R运行状态(running)并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列S睡眠状态(sleep原创 2021-09-15 23:30:03 · 15526 阅读 · 8 评论 -
冯诺依曼体系结构与操作系统(OS)详解
冯诺依曼体系结构与操作系统(OS)详解目录冯诺依曼体系结构图冯诺依曼体系结构详解从硬件上来看两台电脑如何通信操作系统(OS)冯诺依曼体系结构图我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。截至目前,我们所认识的计算机,都是由一个个的硬件组件组成输入单元:包括键盘, 鼠标,扫描仪, 写板等中央处理器(CPU):含有运算器和控制器等输出单元:显示器,打印机等关于冯诺依曼,必须强调几点:这里的存储器指的是内存不考虑缓存情况,这里的CPU能且只能对内存进行原创 2021-08-15 17:51:31 · 1260 阅读 · 2 评论 -
C/C++内存区域划分详解
C/C++内存管理详解目录C/C++内存分布C语言中动态内存管理方式C++中动态内存管理C/C++内存分布C语言中动态内存管理方式C++中动态内存管理原创 2021-06-24 20:39:53 · 1751 阅读 · 11 评论 -
“手把手”教你C语言八大排序
C语言八大排序详解目录排序的概念及其应用常见的八大排序算法直接插入排序直接插入排序代码实现直接插入排序算法时间复杂度及稳定性分析希尔排序希尔排序代码实现希尔排序算法时间复杂度及稳定性分析选择排序选择排序代码实现选择排序算法时间复杂度及稳定性分析排序的概念及其应用排序的概念及其运用1、排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原原创 2021-06-02 22:16:00 · 1292 阅读 · 22 评论 -
小白可以理解的递归函数
目录什么是递归递归的两个必要条件递归举例什么是递归递归就是某个函数直接或间接调用自身的问题求解过程。通过将自身问题划分成相同性质的子问题的求解过程,这些小问题的求解过程较容易,小问题的解就构成了原问题的解例:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四原创 2021-04-27 20:47:35 · 149 阅读 · 0 评论 -
C语言实现栈和队列
C语言实现栈和队列目录栈队列栈和队列完整代码实现栈1.栈1.1栈的概念及结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在顶。1.2栈的实现栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小原创 2021-04-22 16:55:21 · 800 阅读 · 0 评论 -
时间复杂度和空间复杂度详解
时间复杂度和空间复杂度详解目录1.算法效率2.时间复杂度3.空间复杂度1.算法效率算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。2.时间复杂度1.时间复杂原创 2021-03-29 16:54:21 · 14043 阅读 · 0 评论 -
预处理指令#define详解
预处理指令#define目录#define定义标识符#define定义宏#define替换规则#define定义标识符语法:#define name stuff举例:#define MAX 1000 //用MAX替换1000#define reg register //为 register这个关键字,创建一个简短的名字提问:在define定义标识符的时候,要不要在最后加上用分号(;)?例:#define MAX 1000;#define MAX 100原创 2021-03-23 15:16:29 · 1220 阅读 · 0 评论 -
动态内存详解
动态内存管理目录一、为什么存在动态内存分配二、动态内存函数的介绍1.malloc2.free3.calloc4.realloc三、常见的动态内存错误一、为什么存在动态内存分配二、动态内存函数的介绍1.malloc2.free3.calloc4.realloc三、常见的动态内存错误正文为什么存在动态内存分配一般的内存开辟方式有:但是上述的开辟空间的方式有两个特点:空间开辟大小是固定的。数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。但是对于空间的需求,不原创 2021-03-19 16:17:09 · 1264 阅读 · 0 评论 -
小白可以看懂的C代码通讯录
小白可以看懂的C代码通讯录目录显示通讯录标题目录增、删、查、改、排序联系人信息逐一分析各项功能代码演示成果显示通讯录标题目录增、删、查、改、排序联系人信息逐一分析各项功能代码演示成果具体要求描述写一个通讯录,里面存放个人信息名字年龄性别电话地址主要功能:1.增加一个人的信息2.删除一个指定联系人3.查找一个指定联系人4.修改一个指定联系人5.显示通讯录中所有人信息6.排序0.退出可以将每个人的信息保存到文件中,不至于丢失下面将每个功能模块进行封装,逐一详细讲解1原创 2021-03-18 15:27:56 · 398 阅读 · 1 评论 -
青蛙跳台阶问题(C语言)
青蛙跳台阶问题 用c语言实现题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题目分析分析思路:青蛙对每级台阶可选择过或者不过换个角度来看,题目的问题等价于,青蛙现在在起点n=0处。目标是n=n处。那么经过序号1,2,3…n-1层台阶。对于每一层台阶,都可以随意选择通过,或者不通过。数学归纳法证明下面是严格的数学归纳法证明:我们设青蛙需要跳上的台阶级数为n,f(n)代表一个青蛙跳上n级台阶的跳法数目。类似于之前的普通青蛙跳原创 2021-03-17 16:03:34 · 1072 阅读 · 0 评论 -
求最小公倍数的三种方法(C语言)
求最小公倍数的三种方法1.常规暴力求解法2.辗转相除法3.迭乘法1.//1.常规暴力求解法 #include <stdio.h> int main() { int a = 0; int b = 0; scanf("%d %d", &a, &b); int max = a > b ? a : b; while (max % a != 0 || max % b != 0) { max++; } printf("%d", max); return原创 2021-03-08 10:34:42 · 45153 阅读 · 7 评论 -
什么是结构体内存对齐,有什么好处
什么是结构体内存对齐,有什么好处下面先看一个例子:#include<stdio.h>int main(){ struct S1 { char c1; int i; char c2; }; struct S2 { char c1; char c2; int i; }; printf("%d\n", sizeof(struct S1)); printf("%d\n", sizeof(struct S2)); return 0;}由运行结果可知原创 2021-03-07 20:53:18 · 1391 阅读 · 0 评论 -
C语言标准库函数模拟实现之memcpy()
C语言库函数模拟实现之memcpy()memcpy是内存拷贝函数,之前学过字符串拷贝函数strcpy,只能拷贝字符串,不能对内存进行拷贝memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝count个字节到目标dest所指的内存地址的起始位置中。是以字节为单位拷贝的。#include<stdio.h>#include<assert.h>#include<string.h>char* my_memcpy(void* dest, const vo原创 2021-02-26 14:24:23 · 410 阅读 · 0 评论 -
C语言标准库函数模拟实现之--strcmp
C语言标准库函数strcmpstrcmp(str1,str2)是用来比较两个字符串的,设这两个字符串为str1,str2,若str1=str2,则返回零;若str1< str2,则返回负数;若str1>str2,则返回正数。例如:abcd>abcc。思路:把两个字符串一个一个进行比较,当两个字符串不一样时,直接减,当两个字符串相等时,直接输出0。#include <stdio.h>#include <assert.h>int my_strcmp(cons原创 2021-02-26 11:57:21 · 729 阅读 · 0 评论 -
C语言模拟实现标准库函数之strcpy()
C语言模拟实现库函数之strcpy()strcpy是一种C语言的标准库函数,用来字符串的拷贝,strcpy把从源src地址开始且含有’\0’结束符的字符串复制到以目的dest开始的地址空间,并以’\0’结束,返回值的类型为char*。拷贝时,不会改变源空间里的内容,所以用const修饰,比较严谨。代码:#include <stdio.h>#include <assert.h>char* my_strcpy(char* dest, const char* src){原创 2021-02-26 11:17:07 · 317 阅读 · 0 评论 -
C语言标准库函数模拟实现之strcat
C语言库函数模拟实现strcat()strcat是字符串追加函数,从源地址Source追加到目的地址Destination注意 :源字符串必须以’\0’结束。目标空间必须足够大能容纳源字符串的内容。目标空间必须可以修改如何在目的地址追加字符串呢?例:char arr1[20] = “hello”;char arr2[] = “world”;在arr1后面追加arr2的内容,最后结果为 hellowold.步骤:要找到arr1中最后一个元素的地址,即==’\0’的地址,将arr2中原创 2021-02-26 10:54:06 · 509 阅读 · 0 评论 -
C语言标准库函数的模拟实现之--strlen()
模拟实现库函数strlen模拟实现库函数strlen要想模拟实现strlen函数,我们首先要知道strlen函数的作用是什么?它的函数原型是什么?strlen函数的作用仅仅是一个计数器的工作,求字符串的个数,它从内存的某个位置(可以是字符串的开头,中间某个位置,甚至是某个不确定的内存区域)开始计数,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值(长度不包含’\0’)。这里给出三种求strlen的方法方法一:用计数器的方式求字符串的查长度#include <stdio.h>原创 2021-02-26 09:41:31 · 221 阅读 · 0 评论 -
C语言判断当前机器是大端还是小端
C语言判断当前机器是大端还是小端目录大小端概念为什么有大端和小端代码实现什么是大小端:**大端(存储)模式:**是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。**小端(存储)模式:**是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。为什么要有大端和小端之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的l原创 2021-02-10 10:54:57 · 1695 阅读 · 0 评论 -
C语言实现猜数字游戏
目录前言一、猜数字游戏内容:方法:代码实现:二、生成随机数的方法总结前言C生万物,想要学好编程,就要多敲代码。对于C中小白来说,学习了控制语句之后(顺序、选择和循环),写一个小游戏来练手还是很有必要的。一、猜数字游戏内容:顾名思义,猜数字游戏就是让系统随机生成一个数字,由玩家来猜,之后系统反馈信息,猜大了还是猜小了,逐一减少默认数字的范围之后,最终锁定目标。方法:1、生成游戏菜单 1. play(进入游戏) 0. exit (退出游戏)2、使用循环语句,构建游戏框架,使原创 2021-01-29 09:56:44 · 25642 阅读 · 5 评论 -
手把手教你实现C语言三子棋
目录一、三子棋游戏介绍二、c语言实现三子棋三、演示游戏流程四、完整c代码一三子棋游戏介绍:三子棋是一种民间传统游戏,又叫九宫棋、井字棋、一条龙等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。先手:正中间,对面如果走边中间位置,就落子在紧贴对方棋子的角位置。对方必定堵你,然后你就落子在刚才自己角位置棋子的旁边(边中间位置),必赢。如果对方也会玩,就会先落子在角位置,基本最后就是和棋。后手:对方中间,你就角位置,然后堵对方就行。只要对方不原创 2021-01-26 13:46:48 · 359 阅读 · 0 评论 -
统计一个数中二进制里1的个数
#define _CRT_SECURE_NO_WARNINGS// 统计一个数中二进制里1的个数//注意:求的是补码。#include <stdio.h>int count_bit_one(unsigned int n)//用unsigned int 接收是因为可能输入负数{//可以用模2除2的方法,得到每一位int count = 0;while (n){ if (n % 2 == 1) { count++; } n = n /原创 2020-12-07 09:22:58 · 393 阅读 · 1 评论 -
整形溢出后的值是怎么计算出来的
整形溢出后的值是怎么计算出来的原创 2020-12-03 09:53:42 · 1056 阅读 · 0 评论 -
杨氏矩阵
// 杨氏矩阵//内容:有一个数字矩阵,矩阵的每行从左到右都是递增的,矩阵从上到下都是递增的//请编写程序在这样的矩阵中,查找某个数字是否存在//要求:时间复杂度小于O(N)#include <stdio.h>int FindNum(int arr[3][3], int k, int *px, int *py){int x = 0; //第0行,最后一列int y = *py - 1; //即是一行中的最大数,又是一列中的最小数while (x.原创 2020-12-03 09:10:02 · 145 阅读 · 0 评论 -
实现两个数组的交换
对两个数组内容进行交换#include<stdio.h>void Print(int arr[], int sz){int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);}printf("\n");}int main(){int arr1[] = { 1,3,5,7,9 };int arr2[] = { 2,4,6,8,0 };int tem = 0;int i = 0;int sz = si原创 2020-12-02 09:02:02 · 1297 阅读 · 0 评论 -
实现数组的逆序
对数组实现逆序方法一:#include <stdio.h>void Init(int arr[], int sz){int i = 0;for (i = 0; i < sz; i++){arr[i] = 0;}}void Print(int arr[], int sz){int i = 0;for (i = 0; i < sz; i++){printf("%d “, arr[i]);}printf(”\n");}void Reverse(int原创 2020-12-02 08:52:57 · 4471 阅读 · 0 评论 -
找到1000-2000年之间的闰年
找到1000-2000年之间的闰年方法一:函数法#include <stdio.h>int is_leap_year(int y){if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)){return 1;}elsereturn 0;}int main(){int year = 0;int count = 0;for (year = 1000; year <= 2000; year++){/原创 2020-11-30 20:39:44 · 235 阅读 · 0 评论 -
求S=a+aa+aaa+aaaa+...的和
求S=a+aa+aaa+aaaa+…的和#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main(){int a = 0;int n = 0;scanf("%d%d", &a, &n);//2,5int sum = 0;int i = 0;int ret = 0;//2 22 222 2222 22222for (i = 0; i < n; i++){ret = ret * 10 + a;原创 2020-11-30 20:35:15 · 138 阅读 · 0 评论 -
求水仙花数(C语言)
求100000以内的水仙花数**什么是水仙花数:**水仙花数也被称为超完全数字不变数、自恋数、自幂数、水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。#include <stdio.h>int main(){int i = 0;for (i = 0; i <= 100000; i++){//判断i是否为水仙花数(字幂数)//1.计算i的位数-n位数int n = 1;int tmp = i;i原创 2020-11-30 20:33:07 · 756 阅读 · 0 评论 -
将三个数从大到小输出
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main(){int a=0, b=0,c=0,t=0;printf(“请输入三个数:a,b,c\n”);scanf("%d%d%d", &a, &b, &c);if (a < b){t = a;a = b;b = t;}else if (a < c){t = a;a = c;c = t;}else if (b <原创 2020-11-25 18:36:40 · 133 阅读 · 0 评论 -
用二分法 找出有序序列中的数(C语言)
方法一#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main(){char arr[] = { 1,2,3,4,5,6,7,8,9 };int sz = sizeof(arr) / sizeof(arr[0]);int left = 0;int right = sz - 1;int k = 12;while (left<=right){int mid = (left + right) / 2;if (ar原创 2020-11-25 18:33:12 · 212 阅读 · 0 评论 -
整形在内存中如何存储及原、反、补码、大小端概念介绍
**整形在内存中的存储**变量的创建是要在内存中开辟空间的,空间的大小是根据类型的不同而确定的,那接下来我们谈谈整形数据在内存中是如何存储的。例如:int a=20;int b=-10;我们知道为a分配了4个字节的空间,那如何存储?想要知道整形在内存中如何存储,首先我们要了解下面的概念。原码、反码、补码计算机中有符号数有三种表示方法,即原码、反码、补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示正,用1表示负,而数值为三种表示方法各不相同。原码直接将二进制按照正负数的形原创 2020-11-24 14:17:57 · 541 阅读 · 0 评论 -
C语言求n的阶乘(n!)的3种方法
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int Fac2(int n){if (n <= 1)return 1;elsereturn n * Fac2(n - 1);return 0;}int main(){//求n 的阶乘int n = 0;int ret = 0;scanf("%d", &n);ret = Fac2(n);//循环的方式printf("%d\n", ret);...原创 2020-11-24 10:27:48 · 37435 阅读 · 6 评论