C语言初阶
文章平均质量分 76
Nicn
c/c++方向一位努力学习的前行者。目前专栏开设了:《编程tool》分享一些常用编程软件的安装配置和使用。《C语言初阶》《C语言进阶》由浅入深的分享了C语言的知识,《linux》分享关于操作系统的知识,《数据结构与算法》主要分享关于C语言数据结构的知识和学习经验,此外还穿插了人工智能,云计算虚拟技术和算法的相关知识。喜欢和大家交流学习,希望能得到大家的多多指教
展开
-
【C语言】函数栈帧---函数的创建于销毁过程剖析(一览无遗)
学习这么久以来,可能有很多疑问:局部变量怎么创建的?为什么局部变量的值是随机的?函数是怎么传参的?传参的顺序是怎么样的?形参和实参是什么样的关系?函数调用是怎么做的?函数调用结束后是怎么返回的?那么本篇博文就来一一讲解一下。环境:vs2021,大家也可以使用更低版本的编译器更容易观察出现象。(推荐vc6.0)在不同的编译器下面,函数调用的过程中栈帧的创建是稍有差异的,大体逻辑是一样的具体差异的细节取决于编译器的实现。原创 2024-03-16 15:34:21 · 816 阅读 · 0 评论 -
C语言扫雷小游戏实现解析--一看到底
扫雷游戏作为一种老少咸宜的益智游戏,它的游戏目标十分简单,就是要求玩家在最短的时间内,根据点击格子之后所出现的数字来找出所有没有炸弹的格子,同时在找的时候要避免点到炸弹,一旦踩到炸弹则游戏结束。即玩家需要找到雷区中所有不是地雷的方格,同时避免踩到地雷。原创 2023-11-18 15:22:30 · 265 阅读 · 1 评论 -
C语言初阶-指针
指针:1.指针是内存中一个最小单元的编号,也就是地址2.平时口语中的指针说的是指针变量,是用来存放地址的变量。原创 2023-11-13 17:14:35 · 233 阅读 · 0 评论 -
表达式求值(操作符详解章节补充内容)
表达式求值的顺序一部风是由操作符的优先级和结合性决定的。同样,有些表达式的操作数在求值的过程中有可能要转换为其他类型两个理解:1.表达式在求值过程中,有那些类型转换整型提升还是算术转换2.类型转换后,表达式的求值顺序是怎么样的。原创 2023-11-11 22:41:17 · 168 阅读 · 1 评论 -
关于如何不创建第三个零时变量,实现两个数的交换(位操作符的应用)解析
当a和b是两个很大的值的时候,两个数相加就会发生溢出截断,导致a里面保存的不是两个数的和。相比之下更为推荐创建变量办法。以上就是本期内容,欢迎大家的指正。用两个变量其中一个保存两个数的和,然后通过减法实现两个数的交换。虽然创建了第三个变量但是代码可读性高,效率快。^ 按位异或,二进制位相同为0,不同就为1。虽然实现了交换,但是代码可读性不高。创建第三个变量进行交换。我们来看一下实现过程。原创 2023-11-06 19:08:33 · 48 阅读 · 0 评论 -
C语言初阶—操作符详解
在计算机中,整形数据被存储在内存中的连续的字节区域中。整型变量的大小取决于它的数据类型。通常,整型数据类型的大小可以是1个字节、2个字节、4个字节或8个字节。在内存中存储整型数据时,使用的是二进制表示法。例如,一个8位的二进制数可以表示0到255之间的整数值。对于一个给定的整型变量,它在内存中的存储方式是按照字节顺序存储的。即整型变量中的最低字节存储在最低的地址处,最高字节存储在最高的地址处。这种方式称为小端存储方式。在大端存储方式下,整型变量中的最高字节存储在最低的地址处,最低字节存储在最高的地址处。原创 2023-11-06 17:08:41 · 204 阅读 · 0 评论 -
C语言详解冒泡排序(针对一组无序的数据)
核心思想:两两相邻的元素相比较。原创 2023-11-05 23:24:36 · 2181 阅读 · 0 评论 -
C语言初阶-函数
有的时候,我们自己想要实现的功能没有库函数的时候,但是多个文件中又要使用到。那么我们就可以把自己的这个功能模块封装成一个函数。自己随时取用就行。自定义函数的形式是什么样的呢?statement://语句项ret_type 返回类型fun_name 函数名para1 函数参数举个例子,我们要实现一个加法函数,实现两个数相加ret_type 返回类型 我们如果想要返回一个结果,两个数相加的结果是整型,那么返回值就是int。原创 2023-11-01 01:09:52 · 115 阅读 · 1 评论 -
C语言求最大公约数(辗转相除法介绍图解)+判断闰年
最大公约数:即两个数据中公共约数的最大者。如何求两个数的最大公约数呢?比如 24 18 18 和 6思考:两个数的最大公约数,是不是最大就应该是,两个数之中的较小值,比如 24和18之中的18,或者18和6的最大公约数就是6;24和18之中的18作为较小者不是24的因数,那么就可以遍历18-1,找到的第一个24和18的公共因数是不是就是我们的最大公约数了。这种方法是最容易想到但是是最暴力的,接下来介绍第二种方法。原创 2023-10-31 09:14:19 · 357 阅读 · 3 评论 -
C语言初阶猜数字游戏解析
又发现问题,由于srand参数类型是无符号整型,所以第一次我传入1,第二次我传入2,但是我们发现这样rand每次产生的数都是一样的,这是因为我传入srand函数里面的值如果是固定的值,那么初始化生成器就是固定的,导致rand函数每次产生一个固定的值。这个变化的值从哪里去获取呢,我们注意到计算机上的时间是时刻变化的,刚好符合我们的变化值所需要的要求。那这个就是一个bug,伪随机。(这里不是我没清理解决方案导致的错误,是因为rand函数用法错误,大家1可以试一下源码,接下来让我们看看rand函数的用法)原创 2023-10-31 09:13:24 · 220 阅读 · 3 评论 -
C语言初学素数的求解方法
素数就是质数,有无限个。,比如2=1×2;5=1×5;23=1×23;……所以2、5和23就是素数。值得注意的是,0 与 1 既不是素数,也不是合数。原创 2023-10-31 00:12:43 · 100 阅读 · 1 评论 -
strcmp函数使用初阶
如图:strcmp函数比较两个字符串的大小不是比较两个字符串的长度,而是比较两个字符串对应位置上字符的ACSII码值 如果相同,就比较下一对,直到不同或者都遇到'\0'。这样的判断来比较两个字符串大小时,程序没有报错,但是功能实现确是不对的。< 0 表示第二个字符串大于第一个字符串。思路:比较原来密码和用户输入密码两个字符串是否一样,一样就密码正确。我们需要用户输入密码,并判断用户输入密码是否正确,有三次机会。返回值:>0,表示 ,第一个字符串大于第二个字符串。附上源码大家可以体验效果。原创 2023-10-30 11:45:48 · 165 阅读 · 1 评论 -
在一个有序数列中查找一个数(二分查找的讲解)
在一个有序数组中查找元素,找到了就返回下标,没有找到就提示没有找到。原创 2023-10-30 11:11:40 · 507 阅读 · 1 评论 -
C语言scanf 和 getchar函数详解
函数作用:从缓冲区读取一个字符返回值:int类型读取成功,返回字符的ACSII码值读取失败,返回EOF (end of file 文件结束的标志 -1)因为getchar每次只读取一个字符,所以,只打印a,如果要都打印要使用循环。这里也可以看出get插入是会读取空格和回车的。原创 2023-10-29 14:19:44 · 622 阅读 · 1 评论 -
C语言中的break和continue初阶
在循环中break的作用是:1.当break处于单层循环的时候,break的作用效果是直接结束循环执行循环后面的代码。2.当break处于多层循环,break的作用就是跳出单层循环,不影响外一层循环。for(;;){// Afor(;;// 只跳出B的for循环大家可以看出,第二行后面就是因为break跳出来内层循环导致,大家也可以用源码试试效果。原创 2023-10-26 20:21:05 · 211 阅读 · 0 评论 -
C语言关键字static详解(图解)
static 在C语言中是用来修饰变量和函数的。原创 2023-10-24 20:37:35 · 238 阅读 · 0 评论 -
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19输入:1729,输出:19
【代码】写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19输入:1729,输出:19。原创 2023-10-17 16:15:11 · 218 阅读 · 0 评论 -
C语言使用递归实现n的k次方
这里类型是double,是因为指数为负的时候,打印的是小数。原创 2023-10-17 15:31:48 · 157 阅读 · 0 评论 -
C语言基础九九乘法表
所以两层循环,第一层循环是1-9,第二层循环是,第一层循环的数乘以1到这个数本身。例如,%*.*f 表示输出浮点数,宽度和精度由后面带两个 int 类型的参数动态传入。%g 或 %G:用于输出浮点数,根据数值大小自动选择使用 %f 或 %e。%% 格式控制符:用来输出百分号 %,在输出时需要使用两个百分号连在一起。%lld 或 %I64d:用于输出有符号长长整型。%llu 或 %I64u:用于输出无符号长长整型。%e 或 %E:用于输出指数形式的浮点数。%x 或 %X:用于输出十六进制。原创 2023-10-17 15:02:53 · 766 阅读 · 0 评论 -
C语言简易三子棋游戏实现
本次游戏我分三个文件来写,一个游戏测试文件test.c ,用于游戏测试,主函数所在文件一个游戏函数实现或者封存到这个文件,负责具体游戏代码的实现:game.c一个头文件,包含函数和公用头文件:game.h.接下来一步一步来实现三子棋游戏版吧。原创 2023-10-11 14:20:54 · 212 阅读 · 2 评论 -
C语言初级——分支和循环语句
C语言语句可以分为5类//一个分号隔开可以理解为一个语句1.表达式语句:3+5;2.函数调用语句:printf("haha");3.控制语句控制语句用于执行程序的执行流程,用于实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),由特殊的语义定义符组成。C语言有9种控制语句分为三类a.条件判断语句也叫分支语句:if语句、switch语句b.循环执行语句:do while语句、while 语句、for语句。原创 2023-10-29 17:27:45 · 230 阅读 · 7 评论 -
C语言基础 -数组
b. int arr[3][4] = {1,2,3,4,5,6,7,8,6,7,8,9} 这种初始化方式它会首先一行一行的放满再放下一行 不完全初始化,不够后面补0,单独一行括起来,够就走下一行,不够就补0。c.int arr[3][4] = {{1,2,3}4,5,6,7,8,6,7,8,9} 这种第一行就补0,不建议,要括就都括。a. int arr[3][4] = {{3,4,5,7},{5, 6, 7, 6} ,{1,2,3,5}} 一行一个大括号区分。c99标准中引入了变长数组的概念。原创 2023-10-09 10:44:56 · 291 阅读 · 1 评论