![](https://img-blog.csdnimg.cn/20210725172519717.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
《C语言基础》
初始C语言的相关知识总结和简单的应用
小羊教你来编程
有山川草木,纵横纸上,虫鱼鸟兽,飞动毫端。水到渠成,风来帆速,廿四中书考不难。
展开
-
对于动态内存管理的实现!!!(函数详细解释!!!)
动态内存管理关于动态内存管理,重点就是!!动态!!,这两个字,我们在之前学习了简单的内存开辟int arr[10]={0}; //开辟了40个静态字节char A='d'; //开辟了一个字节这都是我们之前所用到的,也是最简单的.但是它所开辟的字节数是固定的,不能随着内部数据增加,而是这个内存变大,在会解决一些比较大的项目的时候就出先了比较大的BUG,所以我们就需要用到这里要说的动态内存,我们这里有四个函数需要进行理解,如下:malloc函数向内存申请一段连续的动态内存,并且返回对应原创 2021-01-24 21:45:13 · 165 阅读 · 0 评论 -
对于C语言中的自定义类型的详细解释(干货!!!!)
自定义类型这一小节叫做自定义类型,所以定义出来的类型不能进行直接的赋值,!!!位段对于位段,我们有两个要求:1.必须是int / unsigned int / signed int 三种类型的2.在每一个成员的后面必须含有冒号和数字只有具有了这两个条件,才能被称之为位段,如下面例题:struct A{ int _a : 2; int _b : 5; int _c : 10; int _d : 30;};这就是一个简单的位段,只要满足上面这两个要求,我们都可以称之为位原创 2021-01-24 20:30:19 · 178 阅读 · 0 评论 -
C语言实现通讯录代码!!!!(干货!!!详细!!!)
结构体-通讯录代码这篇博客专门讲一个用结构体创建通讯录,用C语言实现代码.我们首先要做的就是理清思路,用自己的语言来架构一个框架,能够帮助我们更好的写代码,分步骤写,1.首先你要创建一个能储存数据的结构体,让数据存储进去://上面这个是一个结构体,只包含姓名和电话typedef struct Person{ char name[1024]; char tel[1024];}Person;#define MAX_PERSON 1024 //宏定义,定义最大人数typedef stru原创 2021-01-16 19:55:47 · 1406 阅读 · 0 评论 -
让你熟练掌握内存对齐规则!!!(详细!!!!!)一定要看!!!
内存对齐规则结构体内存对齐是一个比较重要的考点,就是给出一个结构体,你要清楚地说出它利用了多少的内存,因为作为一个cpp程序员,我们对内存的应用应该掌握到极致,能清楚的进行利用,来降低公司的成本.下面是一个比较正式的规则说明:第一个成员在与结构体变量偏移量为0的地址处。其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小是所有最大对齐数(含.原创 2021-03-23 16:31:04 · 259 阅读 · 0 评论 -
关于结构体的自引用和初始化实现(干货!!!!)
结构体相关内容不多,主要是对于内存的理解,只要理解了,就不难结构体的自引用如何让创建一个简单的结构体,也就是对于结构体的声明,其实很简单,看一个例题就会了.如下面例题:struct Student{ char name[1024]; //这就是一个简单的结构体创建的规则,保持同样的格式就行. int age; char sex[5]; char id[20];};注意:在结构体进行自引用的时候,应该用指针的方式,不能对其直接进行自引用,如下:struct Student ne原创 2021-01-14 22:19:39 · 278 阅读 · 0 评论 -
怎样实现一个青蛙跳台阶问题?
青蛙跳台问题青蛙跳台阶问题也是一个很简单的题目,主要不要把其思想理解错误就行,我就在这里被一个问题困扰了半天!!如图:这个问题我给出5个台阶时候的表示方法,通过5阶来具体理解这个题目的思想,如图:如果你能看清楚我上面的5阶所写的8种答案,我们就可以直接通过代码来理解了,不需要再说啥了.如下面例题:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>//====青蛙跳台阶问题int .原创 2021-03-23 16:23:11 · 128 阅读 · 0 评论 -
怎样实现一个汉诺塔问题
基础例题回顾(利用递归)汉诺塔问题汉诺塔问题算是一个经典的例题,我直接通过图,简要的来介绍这个题目的意思,如图:根据我上面的解释,我们可以很容易的就能知道,是借助2这个柱子来进行这个问题的实现,因为这个n是一个不固定的值,我们需要利用递归的思想来进行处理问题,题目了解了,直接通过代码来实现!如下面例题:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>//====汉诺塔的应用int原创 2020-12-06 19:02:57 · 107 阅读 · 0 评论 -
strstr函数的具体实现(详细!!!!)干货 !!!!
strstr函数在另外一个字符串里面寻找和原代码中相同的部分,并输出后面所有的值如下面例题:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include <assert.h>//====strstr函数实例(查找)char* my_strstr(const char* dest, const char* src) /.原创 2021-03-23 00:03:17 · 784 阅读 · 0 评论 -
strcmp函数的具体实现(详细!!!)
strcmp函数主要就是比较两个字符串的大小,如图理解如下面例题:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include <assert.h>//====strcmp函数实例(比较大小)int strcmp(const char* str1, const char* str2){ //当字符相同,则继续向后.原创 2021-03-22 17:29:41 · 1163 阅读 · 0 评论 -
strcat函数的原理实现(详细!!!!)
字符串函数接上一篇博客strcat函数这个函数的主要作用就是将两个字符串内的数据进行连接,形成一个新的字符串,直接看代码.如下面例题:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include <assert.h>//====strcat函数实例(连接)char* strcat(char* dest, const原创 2020-12-01 17:37:24 · 5573 阅读 · 5 评论 -
strcpy函数的自我实现(具体!!!)
strcpy函数合法性校验是防止用户输入了一个不在范围内的值,直接结束,防止代码过长而耗费时间.自定义一个函数,在合法性校验合格的时候进行1对1的传值就可以了.如下面例题:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include <assert.h>//====strcpy函数实例(复制)char* strcp.原创 2021-03-22 17:22:07 · 366 阅读 · 0 评论 -
strlen函数的简单内部实现(详细!!!干货!!!!)
字符串函数关于字符串有好多常用的函数需要我们理解,掌握这些对于我们对于字符串的利用有着很大的帮助,一起来看看吧!strlen函数主要是求字符串的长度,代码简单,也好理解,直接从例题进行理解.如下面例题:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include <assert.h>//====strlen函数实例(长原创 2020-12-01 16:54:04 · 542 阅读 · 0 评论 -
判断字符串旋转后是否相等
旋转后是否相等还是主要运用调用函数,判断相等输出1,否则输出0即可,在这个代码里面调用了strlen ;strstr;strncat;的字符串函数,主要还是要对这些函数有一定的熟练度就可以.如下面例题:#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>#include <stdio..原创 2021-03-22 17:18:11 · 245 阅读 · 0 评论 -
实现对一个字符串进行逆旋
字符串函数理解字符串逆旋以后像这种题目的理解,就是要利用调用函数的方式将一个功能区域封装在一个函数内,这样也能比较好理解,看起来也比较美观.将简单的依次置换封装在一个函数里面,你需要将几个字母逆旋输入就可以,然后在主函数里面进行多次调用即可,这就是这个题目的思路.如下面例题:#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>#include<stdlib.h>#include<assert.h>#includ原创 2020-12-01 16:36:42 · 119 阅读 · 0 评论 -
memcpy函数的实现(干货!!!!!!)
memcpy函数编写相对于来说,这个memcpy函数就行对于来说简单一点,!!将一个数组内部的内容复制到另外一个有足够储存空间的数组内!!,这个简单,直接通过例题来理解.如下面例题:#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>#include<stdlib.h>#include<assert.h>//====memcpy函数实现void* memcpy(void* dest, const void*.原创 2021-03-22 17:11:51 · 1417 阅读 · 1 评论 -
memmove函数的实现与应用(详细!!!)
字符串函数应用今天主要涉及的是对一些功能性函数的理解,感觉在C语言中一个比较重要的部分就是关于内存的用法,只要掌握了这一部分,对C语言的提升有很大的帮助.memmove函数编写这个函数主要被用作拷贝函数,将另一个字节的值拷贝到这个字节里面,主要的就是他可以对所在的字符串进行覆盖,将其中的值发生变化.不单单是对函数的拷贝,还可以直接覆盖!!如下面例题:#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>#include<stdl原创 2020-11-29 11:02:25 · 382 阅读 · 0 评论 -
C语言实现猜名词的题目(详细!!!!)
猜名次题目:A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。和上面那个例题一致,只不过这个题目表达的是每个人都说对了一半,这里我们就需要将两个值+起来,等于1即可,就能表达出每个人都说对了一般这句话,其他的和上面的题基本一致,多理解就行如下面例题:void swapArgs(int * a, int * b) { //一个简单的交换函数 int.原创 2021-03-22 16:55:27 · 352 阅读 · 0 评论 -
实现一个猜凶手的应用题解决.
首先:在我看来这种应用题目的解决方式就是将所描述的文字运用逻辑符号用0和1的表达方式进行表达出来,没有别的方法,还是要多对逻辑符号进行运用,熟练熟练,就能准确的写出这种题目.猜凶手题目:A说:不是我。B说:是C。C说:是D。D说:C在胡说已知3个人说了真话,1个人说的是假话。这个题的代码思路很简单,主要就是运用逻辑表达的方式将这个题目表达出来,利用if语句,将ABCD说的话包含进去即可,如下面例题:#include<stdio.h>#include<stdlib.h.原创 2021-03-22 16:51:07 · 90 阅读 · 0 评论 -
怎样实现杨辉三角?
1.打印杨辉三角2.应用题解决猜凶手题目:A说:不是我。B说:是C。C说:是D。D说:C在胡说已知3个人说了真话,1个人说的是假话。猜名次题目:A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。...原创 2020-11-17 12:55:02 · 266 阅读 · 0 评论 -
怎样实现一个简单的前n项和?
将一个函数的表达式进行表达例题:Sn=2+22+222+2222+…(运用代码将这个函数表达出来)对于这个例题,主要就是我们要将后面的进行分解出来如22=2+20;222=200+20+2;这样的方式就可以很明显的看出,第二个数就是将第一个数*10再加上同样的数即可不难理解,知道了这个关键点,我们就能理清思路,进行编程.如下面例题:#include<stdio.h>#include<stdlib.h>int main(){ int i = 0; //定义4.原创 2021-03-22 16:40:01 · 189 阅读 · 0 评论 -
怎样实现一个字符串逆序交换?
指针的初等运用字符串逆序交换字符串和我上一篇写过的大体类似,就是将一些变量变成指针,来进行运用,没有太大的差异,如果有同学有疑问,希望去看看上一篇代码.链接: 点此处即可.因为这个代码我之前总结过,我这里就不细说了,我们从例题直接解释:如下面例题:#include<stdio.h>#include<stdlib.h>void reverse_string(char* arr){ int len = strlen(arr); char p = *arr;原创 2020-11-08 17:39:24 · 237 阅读 · 0 评论 -
怎样运用指针打印一个简单的数组?
指针基础基础例题如下面例题:(求出所打印的结果)#include <stdio.h>int main(){ int a = 0x11223344; //定义一个整型的数组,里面并存储在4个空间里面 char *pc = (char*)&a; //将整个储存空间赋予这个*pc,也就是将这个储存空间的最后一位赋给 *pc = 0; //这个*pc=0也就是将最后一个数组转为0 printf("%x\n", a); //打印出来 return 0;}原创 2020-11-08 17:12:54 · 749 阅读 · 0 评论 -
实现将一个数的每一位进行求和
求将一个数每一位的数字和对于这个题,我们还是需要运用递归的方式来进行思路:1.当这个数小于10的时候,我们就不需要在进行递归,直接输出就行,2.故我们需要在这个地方用一个if语句进行筛选,3.在大于9的情况下再进行递归.并且再次进行循环的时候要/10,这样就能自动切换到下一位.如下面例题:int DigitSum(int n){ //自定义函数 if (n > 9) return DigitSum(n / 10) + n % 10;.原创 2021-03-18 18:38:25 · 862 阅读 · 0 评论 -
实现斐波那契数列(干货!!!!)
斐波那契数这个数就是后面的一个数等于前两个数之和,一直循环下去,变得越来越大,所以我们就用递归进行,在return 语句上加上上一个表达出来的函数.如下面例题:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>int fib(int n){ //自定义函数 if (n == 1){ //因为这个数列在最开始的两个值都为1,所以直接用if语句表示 retu.原创 2021-03-18 00:43:50 · 240 阅读 · 0 评论 -
利用递归和非递归的方式实现求字符串长度
字符串相关例题求字符串的长度(递归+非递归)因为在每一个字符串里面都存在’\0’,所以这种题的思路就是当==最后这个\0时,输出这个结果,即可.如下面例题:下面这个题目定义了两个一样的函数,其方法一样,主要是递归和非递归的方法区别#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>//=======================================非递归求长度int str原创 2020-11-07 18:16:08 · 136 阅读 · 0 评论 -
输入一个数,打印出其二进制形式有多少个1
输入一个数,求出二进制数位,并合计有多少个1思路:1.调用函数,二进制打印出来2.用这个数的二进制与二进制的1进行依次左移<<一位进行&,相同为1.则count++;并打印出结果,就可以了如下面例题:#define _CRT_SECURE_NO_WARNINGS #include <stdio.h>#include <stdlib.h>int stat(int num){ //创建一个函数 int count = 0;.原创 2021-03-17 17:13:05 · 117 阅读 · 0 评论 -
将输入的数以二进制分奇偶进行分别打印.
输入一个数,将其以二级制并分奇偶数打印出来对于这个题,也是运用主函数调用一个函数的样子,就可以得出分奇偶打印出来的样子.思想:1.把32个字节依次减2就为偶数,2.当第31个字节依次减2所有的则都为奇数,3.我们再用两个for语句将其进行输出如下面例题:#define _CRT_SECURE_NO_WARNINGS #include <stdio.h>#include <stdlib.h>void Printbit(int num){ //自定义.原创 2021-03-17 17:03:54 · 129 阅读 · 0 评论 -
输入两个数,判断其二进制的不同位数
运算符相关例题输入两个数,判断二进制不同位数我们还是运用常规的主函数调用一个函数的做法,在主函数中输入两个数,并赋予地址,再调用一个可以求出位数不一样个数的自定义函数,就可以完美的解决本题,这里主要的还是对运算符的理解.如下面例题:#define _CRT_SECURE_NO_WARNINGS #include <stdio.h>#include <stdlib.h>int countOneBit(int num){ /原创 2020-11-05 14:54:22 · 542 阅读 · 0 评论 -
bit位具体左右移区别+对短路求值的理解-C语言(干货!!!小知识点)
对于bit位左右移的具体分析在图上列除了两个不同的二进制数组(具体的自己理解我的过程)整理得:1.<< 左移去掉最高位,低位+02.>> 右移去掉最低位,高位补与原来位置相同的数3.左移存在一个二倍的关系如图:短路求值的理解短路求值看来是一个很小的知识点,但还是有好多人在这里弄不懂,我也是.哈哈,先看下面的短路特性,再根据你理解的完成上面的例题.第三个难理解点,多看看(这个就不总结了,理解就好.没什么总结的)如图:理解了就继续敲代码哈!...原创 2020-11-04 20:56:44 · 959 阅读 · 0 评论 -
C语言中怎样使用阶乘? --循环/递归
两种阶乘的类型循环阶乘循环结成就是让用户输入一个数,然后以for循环的样子将小于这个数的数进行循环相乘,然后得到的数据就是这个数的阶乘. n!=n*(n-1)*(n-2)…如下面例题:#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>#include<stdlib.h>int main(){ int sum = 1; int n; printf("please enter number:\n"); sc原创 2020-11-03 14:57:59 · 1744 阅读 · 0 评论 -
怎样将一个数进行分别打印出来?
分别打印这个数的每一个数字这个例题也是主函数调用一个函数,以后这种例题我们会经常见到,而且像学生管理系统这种之类的题型就是由一个主函数调用了多个函数.这个题主要分析这个自己定义的函数.如下面例题:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>void print(unsigned int n) //自己定义{ if (n>9) .原创 2021-03-17 16:46:15 · 399 阅读 · 0 评论 -
打印n阶的乘法口诀表
例题理解-C语言交换两数值其实很多题型都是类似的,都是由主函数调用一个写好的函数进行使用,我觉得调用函数,不把他们写在一起就是为了你的构建框架能更加清晰,能更好的写出代码.你完全可以从这个题理解我想阐述的这种思路.如下面例题:#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>#include<stdlib.h>void Swap(int *pa, int *pb) //自己写的一个交换值位置的函数{原创 2020-11-02 21:05:43 · 376 阅读 · 0 评论 -
怎样用C语言实现一个猜数字游戏
猜数字游戏猜数字游戏就是系统会自己设定一个数字,然后你去依次去猜,直到猜对为止,是一个很easy的基础C语言游戏,它只需要在一个主函数上调用两个函数即可1.创建一个可视化菜单2.让玩家输入数字3.看是否与设定数字相同(不同,就继续循环)4.猜对时,游戏结束,玩家胜利如下面例题:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<time.h>void g原创 2020-11-01 18:26:48 · 325 阅读 · 0 评论 -
怎样用C语言实现一个扫雷的游戏?
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<time.h>#define MAX_COL 9#define MAX_ROW 9#define DEFAULT_MINE_COUNT 10//扫雷游戏//1.创建两个二维数组并进行初始化//2.打印一张地图//3.玩家输入要读取的坐标,并对玩家输入的坐标进行校验//4.判断输入的坐标是否有地雷,如果原创 2020-11-01 14:56:14 · 155 阅读 · 0 评论 -
怎样用C语言实现一个三子棋的游戏?
三子棋游戏像这种游戏,我们如果要写一个,最开始,我们就是应该把我们的思路理顺,写出一个最基本的步骤来,以便于让我们一步一步将这个代码进行编写.1.首先我们应该创建一个棋盘并对其进行初始化(运用二维数组)2.我们把棋盘打印出来,让玩家能够看见3.玩家先落子(这里我们让玩家输入二维数组的坐标进行填充)4.判断胜负(因为当玩家如果连成一条线了,棋盘还没有满,我们就应该马上让系统结束游戏)5.电脑落子(让电脑运用随机函数在棋盘内随机找个位置下棋)6.判断胜负(最终结束游戏,并判断胜负)#define原创 2020-11-01 10:57:02 · 148 阅读 · 0 评论 -
怎样实现一个二分查找的代码?(干货!!!!详细!!!)
二分查找二分搜索法是一个经典的例题,很多面试也会用到,可以用来减少对时间的消耗,更加高效的利用起来.二分搜索就是在规定的数组里面寻找出要找的数值对应得下标.对于二分查找的理解就是每次都从数组的中间开始查找,如果没找见,便删去一般,从剩下的一半重新开始进行二分查找,直到找到对应的数为止.如果数过大,则输出找不到即可.题目:编写代码在一个整形有序数组中查找具体的某个数如下面例题:#include<stdio.h>#include<stdlib.h>int main(){ i原创 2020-10-30 19:06:35 · 464 阅读 · 0 评论 -
怎样实现将分数进行相加的操作?
分数相加操作题目:计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果这个题目看到是分数,一眼看起来很难.其实只要多加分析,就很容易了思路:1.for循环列出1-1002.加一个数就是让这个数除1,在进行相乘即可3.每隔一个数乘-14. 再每一个数上面加上一个1,让它成为分数.如下面例题:#include<stdio.h>#include<stdlib.h>int main(){ int i=0; doubl.原创 2021-03-17 16:14:44 · 1405 阅读 · 1 评论 -
寻找在1-100中一共有多少个9?
寻找9的数量题目:寻找1-100内出现了多少个9这个题目最主要的重点就是用两个不同的if语句查找十位和个位上出现了几个9,主要是要掌握你对C语言中运算符的熟练度和理解…思路:1.使用if语句看十位上有多少个92.使用if语句看个位上有多少个93.相加如下面例题:#include<stdio.h>#include<stdlib.h>int main(){ int i=0; int count=0; for(i=1;i<101;i++){ //.原创 2021-03-17 16:09:35 · 286 阅读 · 0 评论 -
怎样解决一个素数的问题?
例题理解-C语言素数问题(求一定范围内的)这个题求的是100-200范围内所有的素数,并将其打印出来.素数: 顾名思义就是除了1和它本身的数,无法被其他数整除的数就叫做素数这个题按照我的思路可以分成两步走.**一.**用for循环先将100-200找出来,二.再用if语句将其进行筛选,然后进行打印.如下面例题:#include<stdio.h>int main(){ int i=0; int count=0; //这个count用来计算一共有原创 2020-10-30 18:29:26 · 158 阅读 · 1 评论 -
怎样求一定范围内的闰年?
闰年(一定区间内)求范围在1000-2000之间的闰年.闰年闰年,四年一闰,我们可以先用一个for循环列出区间内所有的数,再用if语句进行依次除4看是否有余数就行,这个题目就解开了.如下面例题:思路:1.首先进行循环对应范围内所有的数2.挑选出可以进行整除的3.挑选出大于等于1000的进行输出#include<stdio.h>#include<stdlib.h>int main(){ int i; for(i=1;i<=2000;i++){ .原创 2021-03-17 15:19:48 · 1407 阅读 · 0 评论