![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 56
C语言的日常生活
sakeww
这个作者很懒,什么都没留下…
展开
-
TicTacToe(三子棋/井字棋)
game.h#define ROW 3#define COL 3#include <stdio.h>#include <stdlib.h>#include <time.h>void InitBoard(char board[ROW][COL], int row, int col);void DisplayBoard(char board[ROW][COL], int row, int col);void PlayerMove(char board[ROW]原创 2021-07-27 16:00:33 · 461 阅读 · 0 评论 -
猜数字游戏
#define _CRT_SECURE_NO_WARNINGS 1//猜数字游戏//1.电脑随机生成一个1-100之间的数字//2.玩家猜数字//3.反复玩#include<stdio.h>#include<stdlib.h>//rand#include<time.h>void menu(){ printf("1.play 0.exit"); return 0;}//时间是一个随时在变的数字//时间戳:据离1970.1.1有多少秒//c语言原创 2021-07-20 17:15:53 · 69 阅读 · 0 评论 -
函数栈帧的创建与销毁(注意:多图警告)
引入:学习函数的时候我们会有许多的疑问例如:局部变量是怎样创建的?为什么据变量的值是随机值?函数是怎么传参的?传参的顺序是怎样的?形参和实参是什么关系?函数调用是怎么做的?函数调用结束后怎么返回的?本文所用环境是vs2013,建议不要使用太高级的编译器,越高级的编译器,越不容易学习和观察,同时在不同的编译器下,函数调用过程中栈帧的创建是略有差异的,具体细节取决于编译器的实现引入概念:1.寄存器有eax ebx ecx edx ebp esp本文(函数栈帧的创建与销毁)主要运用 eb原创 2021-08-15 21:23:23 · 149 阅读 · 0 评论 -
简易扫雷小游戏
test.c#include "game.h"void menu(){ printf("*****************************\n"); printf("***** 1.play ******\n"); printf("***** 0.exit ******\n"); printf("*****************************\n");}void game(){ char mine[ROWS][COLS] = { 0 }; cha原创 2021-07-28 14:59:31 · 91 阅读 · 1 评论 -
数据的存储,如何理解内存中的“0”和“1”
目录:数据类型介绍整形在内存中的存储:原码、反码、补码大小端字节序介绍及判断浮点型在内存中的存储解析1.数据类型介绍char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数1.1基本类型归类1整形charunsigned charsigned charshort原创 2021-08-09 15:43:35 · 2751 阅读 · 0 评论 -
动态内存管理(c语言)相关知识点整理(加上个人理解),新手预习必备
这里写目录标题为什么存在动态内存分配动态内存函数的介绍malloc和freecallocrealloc常见的动态内存错误几个经典的笔试题柔性数组为什么存在动态内存分配我们已经掌握的内存开辟方式有:int val = 20;//在栈空间上开辟四个字节char arr[10] = {0};//在栈空间上开辟10个字节的连续空间但是上述的开辟空间的方式有两个特点:空间开辟大小是固定的。数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。但是对于空间的需求,不仅仅是上述的情况。原创 2021-09-23 18:26:21 · 90 阅读 · 1 评论 -
常见字符函数和部分字符串函数的模拟实现
目录:求字符串长度:strlen长度不受限制的字符串函数:strcpy、strcat、strcmp长度受限制的字符串函数:strncpy、strncat、strncmp字符串查找:strstr strtok错误信息报告:strerror字符操作内存操作函数:memcpy、memmove、memset、memcmpstrlen11111111strlen...原创 2021-09-15 19:24:25 · 71 阅读 · 0 评论 -
qsort的模拟实现和应用----c语言
模拟实现:#include <stdio.h>int int_cmp(const void* p1, const void* p2){ return (*(int*)p1 - *(int*)p2);}void _swap(void* p1, void* p2, int size){ int i = 0; for (i = 0; i < size; i++) { char tmp = *((char*)p1 + i); *((char*)p1 + i) = *((原创 2021-09-05 16:19:36 · 55 阅读 · 0 评论 -
随机数的生成及简易推理过程
随机数的生成:rand()会生成一个随机数缺点:在一个程序中如果多次生成随机数,会生成一个固定的随机数srand(),rand()调用前需要在前面引用这个函数,设置随机数的生成起点如果srand()里面是一个固定值,那么rand生成的也会是一个固定的数字时间是一个随时在变化的数字,那么我们可以用时间来生成一个随机数字推理:我们在srand里面放入有关时间的一个数字那么我们将会得到一个随机数srand((unsigned int)time(NULL));注意:注意rand和srand的位置,如原创 2021-07-20 17:21:02 · 249 阅读 · 0 评论 -
有关二叉树相关知识点总结(数据结构,c语言)
二叉树【目录】1.树概念及结构2.二叉树概念及结构3.二叉树顺序结构及实现4.二叉树链式结构及实现1.树概念及结构1.1树的概念树是一种非线性的数据结构,它是由n(n >= 0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。(1)有一个特殊的结点,称为根结点,根节点没有前驱结点(2)除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1 <= i<= m)原创 2020-09-27 10:34:03 · 3375 阅读 · 0 评论 -
常见类型排序算法的代码实现
test.c#include"Sort.h"int main(){ TestSort(); return 0;}sort.h#pragma once#include"stdio.h"//比较类排序://插入排序void InsertSort(int array[], int size);//希尔排序void ShellSort(int array[], int size);//选择排序void SelectSort(int array[], int size)原创 2020-12-05 14:27:25 · 145 阅读 · 0 评论 -
二叉树前中后序结构遍历代码实现
test.cint main(){ TestBinTree(); return 0;}BinaryTree.c#define _CRT_SECURE_NO_WARNINGS 1#include "BinaryTree.h"BTNode* BUyBinTreeNode(BTNDataType data){ BTNode* newNode = (BTNode*)malloc(sizeof(BTNode)); if (NULL == newNode) { assert(0);原创 2020-09-19 11:38:18 · 174 阅读 · 0 评论 -
堆的代码实现,以及一些创建过程中的问题
test.c#define _CRT_SECURE_NO_WARNINGS 1#include"Heap.h"int main(){ Cmp = Less; Cmp(10, 20); Cmp = Greater; Cmp(10, 20); TestHeap(); return 0;}Heap.c#define _CRT_SECURE_NO_WARNINGS 1 #include "Heap.h"#include <malloc.h>#include &原创 2020-09-12 11:51:10 · 185 阅读 · 0 评论 -
有关排序知识点总结概括
排序【目录】1.排序的概念及其运用2.常见排序算法的实现及排序算法复杂度及稳定性分析1.排序的概念及其运用1.1排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。自我理解:把一组序列,按照关键字之间的大小关系,将其排列成一个递增或者递减的序列 ,将这样的一种操作称之为 排序每一个排序都涉及一个想关性概念 --排序的稳定性稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中原创 2020-12-06 10:44:32 · 1230 阅读 · 0 评论 -
二叉树模拟实现--c
BinaryTree.h#pragma once#include<malloc.h>#include<assert.h>#include<stdio.h>//binary tree node data type二叉树节点数据类型typedef int BTNDataType;typedef struct BTNode{ struct BTNode* left; struct BTNode* right; BTNDataType data;//节原创 2020-09-20 09:17:45 · 292 阅读 · 0 评论 -
一个关于数组名的例题
原题://#include<stdio.h>//int main()//{// int array[] = { 1, 2, 3, 4, 5 };//// int *p1 = (int*)(&array + 1);// int *p2 = (int*)(array + 1);// char *p3 = NULL;//// int a = p1[-2] + *p2 + sizeof(&array) + sizeof(*p3);// printf("%d ", a原创 2020-06-25 10:21:22 · 151 阅读 · 0 评论 -
制作一个简单的通讯录
制作一个简单的通讯录:一.总体方针1.test.c测试2.contact.c实现函数的功能3.contact.h声明函数二.通讯录的主要内容简介1.存放1000个好友信息名字电话性别住址年龄2.增加好友信息3.删除指定名字的好友信息4.查找好友信息5.修改好友信息6.打印好友信息7.排序三.制作1.test.c测试...原创 2020-05-02 09:12:22 · 2090 阅读 · 0 评论 -
学习顺序表相关知识,制作一个简易的“动态顺序表”操作(增删查改)
学习顺序表相关知识,制作一个简易操作(增删查改)//test.c#define _CRT_SECURE_NO_WARNINGS 1#include"SeqList.h"int main(){ TestSeqList(); return 0;}SeqList.c#define _CRT_SECURE_NO_WARNINGS 1#include <assert.h> //assert#include"SeqList.h"#include<malloc.h&原创 2020-06-23 11:45:51 · 270 阅读 · 0 评论 -
队列的模拟实现--c语言
test.c#define _CRT_SECURE_NO_WARNINGS 1#include "queues.h"int main(){ myCircularQueueFree(); return 0;}queues.c#include "queues.h"#include <malloc.h>#include <assert.h>#include <stdio.h>#include <string.h> #include原创 2020-08-30 17:11:30 · 369 阅读 · 0 评论 -
数据结构---前言(引入,后续会发表相关文章)
//1.数据结构?//(1)数据//例如:一个班级的学生信息,或者某个地区人口普查表(记录一个地区的每一个人口的信息),这些信息的集合我们称之为 一组数据// 平常我们的数字(1.2.3.4.5.6.7.8.9.)也是数据–》用以表示数据类型的数据// 网页:中的图片,数字,文字,也是数据,(这些都是网页里面的数据)//(2)结构//引用:高中化学中我们了解到分子结构// 分子结构:分子之间的组织关系// 这种组织关系我们便可以把他当作结构//结构:原创 2020-05-30 10:10:11 · 198 阅读 · 0 评论 -
带头节点循环双向链表
DHCList.h#pragma oncetypedef int DLDataType;typedef struct DHCListNode{ DLDataType data; struct DHCListNode* next;//指向当前节点的下一个节点 struct DHCListNode* prev;//指向当前节点的前一个节点}DHCLNode;DHCLNode* DHCListInit();//初始化void DHCListPushBack(DHCLNode* pHead,原创 2020-08-18 10:16:03 · 959 阅读 · 1 评论 -
枚举相关知识点总结
有关枚举我用例子来进行解释说明一.enum Sex//性别{ MALE, FEMALE, SECRET};enum Color//颜色{ RED, GREEN, BLUE};int main(){ enum Sex s = MALE; enum Color c = RED; return 0;}个人理解:enum Sex s =;后面只能跟 MALE,F...原创 2020-04-28 22:28:33 · 505 阅读 · 0 评论 -
顺序表和链表 相关知识点总结
顺序表和链表【目录】1.线性表2.顺序表3.链表4.顺序表和链表的区别和联系5.顺序表和链表的相关选择题1.线性表线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…延申:什么是数组? 相同类型元素的一个有限集合,里面放的元素和数据,和线性表是一样的数组和线性表的其中一个结构类似线性表相当于在数组的基础之上绑定了一些 增删查改 等其他操作数组只是一种存储数据的一种方式,没有其他原创 2020-08-19 07:45:37 · 2123 阅读 · 0 评论 -
文件操作相关知识总结
一,文件:磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件1.程序文件:包括源程序文件(后缀为.c), 目标文件(windows环境后缀为.obj), 可执行程序(windows环境后缀为.exe)。通俗:你写了一个 .c 文件或者 .h文件 就是程序文件,这些文件可以‘被执行’或‘被编译’产生我们想要的东西程序文件操作数据文件,可以 读 写 数据文件2.数据文件:文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容原创 2020-05-17 10:52:38 · 504 阅读 · 0 评论 -
栈(stack)的模拟实现(代码)
test.c#include "stack.h"int main(){ TestStack(); return 0;}stack.c#include "stack.h"#include <malloc.h>#include <assert.h>#include <stdio.h>#include <string.h> //初始化void StackInit(Stack* ps){ assert(ps); ps->原创 2020-08-20 17:27:59 · 245 阅读 · 0 评论 -
柔性数组-有关知识点总结
有关柔性数组知识点进行总结//柔性数组的特点://1.结构中的柔性数组成员前面必须至少一个其他成员。(即int arr[]上面还要至少有一行代码)//struct S//{// int n;// char c;// int arr[0];//这里的零没有任何意义,只是一种语法形式而已// //此时就可以把arr叫做:柔性数组成员// /...原创 2020-05-08 17:29:56 · 163 阅读 · 0 评论 -
C++入门知识点总结(仅供参考)
目录:C++关键字命名空间C++输入&输出缺省参数函数重载引用内联函数auto关键字(C++11)基于范围的for循环(C++11)指针空值—nullptr(C++11)1.关键字C++关键字(C++98)(C++总计63个关键字,C语言32个关键字)问题:c语言里面有多少关键字?答:在c98环境下,他有32个c++中的63个关键字中包含c语言的32个关键字随口一提:在c语言和c++中,他们需要的源文件格式不一样c语言: .c 文件c++ : .原创 2020-07-30 19:10:33 · 696 阅读 · 0 评论 -
联合体相关知识总结
先用一段代码解释一下什么是联合体一,union Un{ char c; int i;};int main(){ //联合变量的定义 union Un un; //计算连个变量的大小 printf("%d\n", sizeof(un));//4 printf("%d\n", &un); printf("%d\n", &(un.i)); printf("...原创 2020-04-28 22:41:47 · 192 阅读 · 0 评论 -
栈和队列知识点那总结
栈和队列【目录】1.栈2.队列3.栈和队列面试题1.栈1.1栈的概念及结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈 / 压栈 / 入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。延申:线性表里面的元素存储方式,要么存储到数组里面,要么链表里面,总之每一个元素都有唯一的前驱和唯一的后继,然后在这种结构上面绑原创 2020-08-30 17:15:43 · 2025 阅读 · 0 评论 -
改良通讯录——动态通讯录
上一篇博客中的通讯录为静态通讯录,直接就创建了1000个空间,占内存。有时候,我们不需要这么多,那么就会浪费大量空间;有时候,我们需要大量空间(超过1000个)这样不能更好的满足我们。学习了动态内存知识点后,根据其将空间能够合理利用,创造出一个更好的通讯录。——前言一。区别静态通讯录可以存放1000个人的信息动态通讯录默认可以存放3个人的信息当发现当前通讯录满的时候,我们进行扩容,每次...原创 2020-05-08 16:32:44 · 431 阅读 · 0 评论 -
程序的编译(预处理操作)+ 链接 ----知识点总结
我们经常写一个文件test.c他是一个叫做源文件或者源程序的东西这个test.c文件经过一个详细的处理会变成test.exe文件test.exe可执行程序过去我们没有关注这整个过程,我们只是关注这个过程中出现错误我们该怎么办?实际上test.c经过(编译)(链接)才会变成test.exe文件文件预处理就是解释(编译)(链接)这两个过程---------前言(文章内//比较多,文章编译时,有时候需要对齐,还有一些格式,没有//不好弄,给您带来不便,敬请谅解。)延申:test.c—(编译)(链原创 2020-05-23 18:26:28 · 898 阅读 · 0 评论 -
时间-空间复杂度相关知识总结
//引入://int Fib(int N)//{// if (N < 3)// return 0;// return Fib(N - 1) + Fib(N - 2);//}//递归类型的代码,用以 斐波那契数列//如何衡量一个算法的好坏?(速度快,占用内存小)//一个算法的复杂度进行衡量//时间复杂度//空间复杂度//本质:都是求数学表达式–某条基本语句关于问题规模N的数学表达式//1.算法效率//算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为原创 2020-06-18 15:36:54 · 171 阅读 · 0 评论 -
无头+单向+非循环链表增删查改实现(c语言)
SList.c#include"SList.h"#include<malloc.h>#include<assert.h>#include<stdio.h>//申请节点SListNode* BuySListNode(SLDataType data){ SListNode* newNode = (SListNode*)malloc(sizeof(SListNode)); if (NULL == newNode) { assert(0);//调试宏,原创 2020-07-16 18:23:43 · 181 阅读 · 0 评论 -
改良通讯录--能够存储信息
学完文件操作,我们可以把一个结构体的信息写到文件里面 以二进制的形式写,以二进制的形式读取。此时我们可以把通讯录修改成一个文件形式,可以把信息保存起来,下次我们可以以把文件中已经存放的通讯录中的信息加载到通讯录中------前言1.contact.h#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<string.h>#include<stdlib.h>#include<errno.h&g原创 2020-05-16 14:20:00 · 413 阅读 · 0 评论 -
位段相关知识总结
位段的声明和结构是类似的,有两个不同:有关结构体知识,请关注我另外一篇博客https://blog.csdn.net/sakeww/article/details/1058206021.位段的成员必须是 int、unsigned int 或signed int 。2.位段的成员名后边有一个冒号和一个数字。下面我用两道相关类型的题,进行解释一.struct S{ int a : 2;...原创 2020-04-28 22:12:00 · 154 阅读 · 0 评论 -
结构体相关知识总结
结构体传参1.结构体的简单认识struct S{ int a; char c; double d;};int main(){ struct S s; s.a = 100; s.c = 'w'; s.d = 3.14; printf("%d %c %f", s.a,s.c,s.d); return 0;}这是一个最简单的结构体传参,先定义结构体 struct S ...原创 2020-04-28 18:44:49 · 270 阅读 · 0 评论