- 博客(31)
- 收藏
- 关注
原创 解决使用gets(getchar)函数无法输入字符(字符串)和scanf_s函数显示缺少“scanf_s”整型参数的问题
该函数就是读取字符串,遇到空格不会停止,直到遇到换行字符,但是也会读取最后的换行字符(这也就是我在写代码的时候遇到的一个问题)和gets函数类似,但是只读取一个字符,也会有读取换行字符的效果。二.缓存区在说明这个问题之前不得不说明一下内存中缓存区的问题,如下图:所以基于上述理论,在使用gets和getchar的时候要万分小心 换行字符(回车键)。三.具体使用先看下面的一串代码:这样看似乎是没有问题的,警告也只是因为没有加终止字符,但是请看下图!!!嘶,这里则么会出现警告呢?
2024-06-04 19:59:36
557
2
原创 初学者都能掌握的操作符(下)
学了这些操作符之后,当面对一些比较复杂的表达式计算的时候,了解他们的结合规律和优先级是必要的1 圆括号,下标引用[ ] ,. ,->2 非 !、按位取反 ~ 、自增自减 ++,-- 、负号 - 、类型转换 (类型)、指针 * 、取地址 & 、计算字节长度 sizeof3 乘、除、取余4 加、减5 左移、右移6 大于 、小于、大于等于、小于等于7 等于、不等于8 按位与&9 按位异或^10 按位或|11 逻辑与&&12 逻辑或||13 条件运算符(? :)14 赋值运算符15 逗号表达式(优先级由高到
2024-05-27 11:11:57
571
原创 初学者都能掌握的操作符(中)
在&&左边的表达式为假的时候(也就是计算出数值为0)将不在执行后面的语句,整体的表达式值为0(假);在 || 左边的表达式为真的时候(也就是计算出数值大于0)将不在执行后面的语句,整体的表达式值为1(真)如:int a = (int)3.14;这里原本定义的类型是int型的,但赋值是浮点型,但是使用(int)就是将3.14。,具体的原理与上述 & 一致,规则为(前置++:也就是先使用后自加。后置++:也就是先自加后使用。(有0则0,1&1得1)按照 “与” 的算法。按照 “或” 的算法。
2024-05-25 19:22:42
1412
原创 初学者都能掌握的操作符(上)
正数的原码,反码,补码都是相同的,但是负数的原码,反码,补码就要遵循上图的规则了。(1)当要相除的两个数均为int型的时候,那么相除之后仍然为int型,具体比如,有了上述概念之后我们就能很好的理解
2024-05-20 23:47:31
634
原创 如何实现程序的模块化执行(创建一个简易的计算器为例)
这里可能有人会疑问写起来比在一个源文件中的要复杂,但是一般在开发一个软件或者写一个比较复杂的程序的时候会有好几个人一同负责,printf("这两个数的相乘的结果是:%.2f\n", i * j);printf("这两个数的相除的结果是:%f\n", m);printf("*******1是加法******\n");printf("*******2是减法******\n");printf("*******3是乘法******\n");printf("*******4是除法******\n");
2024-05-17 20:10:51
1433
原创 如何使用函数去处理字符串
/指的是将两个字符串从左到右的每一个字符比较ASCII码值,知道出现'\0'或者不相等为止。//需要保证str1的长度足够大,其真实的含义是:将str2中的字符串内容(包含‘\0’)复制到到str1中,返回的是str1的地址值。//在连接的时候arr1会自动覆盖arr2后面的‘\0’//值得注意的是,使用gets函数的时候可以输入任意的字符,需要注意的是,在输入字符串的时候,空格和回车都相当于字符串的分隔符,不能被读入。(2)整个字符串的输入,输出:可以使用 %s 来输入。函数,gets 函数的。
2024-05-15 20:58:04
630
原创 使用函数来实现冒泡排序
也是一次外循环的演示,五个数的排序。不难看出,就是 刚开始为 5 1 23 11 40,然后用5和1比较之后变为1 5,再继续1和23比较位置不变,再1和11比较位置不变,再1和40比较位置不变。原本为 3 8 7 5 9,一次循环后为 3 7 5 8 9;同理再比一次之后就是3 5 7 8 9...可以看出只需要比较两次就可以,但是按照上述代码还得继续运行,这就需要我们想办法来改进了。五个数一次比较的结果,可以看出就是每次两个相邻的数比较,比较完之后大的在后面,小的放在前面。
2024-05-09 20:56:37
838
原创 普通人也能理解的数组作为函数参数
但是当数组名称作为函数参数时,所使用的形参数组实际上是不存在的,所以也就不占有空间。这是因为数组名称作为函数参数的时候实际上就是数组首元素的地址,所以。(本质上是一样的,就是指针所指向的数组地址)具体如下。由于数组元素就是带下标的变量,与普通变量无区别,所以将其作为函数实参本质上与变量是完全相同的。如下:设计一个函数,判别一个整形数组中各元素的值,若大于0输出该值,如果小于等于0,则输出0值。(1)数组名称作为函数参数的时候,必须要求形参和对应的实参数组是相同类型的数组。作为实参的数组元素的值传送给形参。
2024-05-07 20:58:26
503
原创 一维和二维数组
(1)可以分行对数组内的所有元素进行初始化,如:int a[3][3] = { {1,2,3},{3,4,5},{4,5,6} };(2)按照上述赋初值,可以省略常量表达式,如:int a[] = { 1,2,3 };),如:int a[][3] = { {1,2,3},{3,4,5},{4,5,6} };(1)可以对数组内的所有元素进行初始化,如:int a[3] = { 1,2,3 };其中,常量表达式可以包含数据常量和符号常量,且C语言不允许对数组的大小进行动态定义。int a[n];
2024-05-02 11:24:29
451
1
原创 递归的思想来求解“兔子数列”
具体如下:可以看出仅仅第20个3就被计算了上千次,所以效率是不高的,可以自己试一试,输入n=40~50,会需要一定的时间才会出结果。也就是定义a,b,c,初始化a=1,b=1,c=a+b。然后使用循环交换a,b,c的值。两个方法的选择:应该择优而选,总的来说各有优势。比如使用迭代会简化代码的数量,但是。可以看出此代码的缺点很明显,就是进行了大量的重复计算。会加大计算,迭代计算效率会高很多。如下求斐波那契数列的第n项数。如求”hello”的长度。,具体可以加一些代码来验证。
2024-04-28 21:41:36
558
原创 函数递归和练习
所以上述代码所描述的意思就是,首先最里面的printf函数打印出43,两个字符所以返回值为2;再到n=12,调用print函数之后打印出1后执行12%10打印出2;当n=1234进入print函数之后会再一次以n=123进入一次print函数,之后又以n=12进入一次print函数,最后n=1进入一次print函数。思考:printf(“%d”,printf(“%d”,printf(“%d”,43)));练习一:输入无符号1234,依次打印1,2,3,4。1.函数是不可以嵌套定义的,但是可以嵌套调用。
2024-04-27 10:19:22
534
原创 函数调用以及声明
一般当我们写简单的代码的时候都是从上往下写,那么自定义的执行体函数也就一般写在主函数的上面,所以在执行程序的时候就可以直接调用执行体函数。在实际应用中,一个复杂的程序一般都是一个团队来完成的,如果按照上述声明效率就会很低。将函数实参的值传给形参,但实参和形参分别占有不同的内存块,对形参进行修改不会影响实参。一般都是先在主函数中确定需要执行体函数返回值的类型然后在确定执行体函数的类型和返回数值。步骤一:为自己的函数取一个响亮的名字,比如判断素数就写成 is_prime。步骤二:在函数中写上执行该功能的语句。
2024-04-24 21:40:41
616
原创 初学函数之后“变量交换函数”的一个坑
所以有了上述概念之后我们就能清楚的知道,在自定义的函数中进行变量的数值交换的时候就是将两个变量的地址交换。定义的函数就会有形参(int x,y),也会在计算机中开辟一块空间作为形参x和y的地址分别为&x和&y。主函数中定义变量的时(比如定义上述的int a,b )就会。实际参数:在主函数中的参数,可以为常量,变量,表达式甚至函数。形式参数:在自定义的函数里面的参数,在不使用该函数的时候不占内存空间。此时当我们在主函数中调用的时候就会发现无法交换函数值,如下。,并且函数没有返回值,主函数的。
2024-04-23 21:42:40
548
原创 函数的概念和自定义一个函数
输入和输出函数(printf,scanf...);字符串操作函数(strcpy...);字符操作函数(toupper...);内存操作函数(memcpy...);时间/日期函数(time...);数学函数(sqrt...)等其它函数。函数是C语言的功能单位,实现一个功能可以封装一个函数来实现。定义函数的时候一切以功能为目的,根据功能去定函数的参数和返回值。ret_tupe fun_name (paral) //从前往后分别代表。statement;strcpy函数:常用于交换两个数组中的数据。
2024-04-21 19:38:21
645
原创 while(n++)和while(++n)的区别 以及二分查找。
tip:二分查找就是在一个一直序列的数组中找出一个特定的值 k,原理就是先取出中间的与k比较,如果中间值偏大那么k就在数组的左边(反之就在右边),从而缩小范围,然后再一次取出左边的中间数与k再一次比较...如此循环几次过后就能将范围缩到很小。n++)类似,但不同的是for是在执行完循环体后才进行n++的。while(n++) , while(1)等 都是合法的表达。第一步判断n是否满足循环条件,第二步是让n进行一次自加 ,第三步执行循环体中的语句。2.while(n++)和while(++n)的区别。
2024-04-17 20:49:06
431
原创 初学者也能会的金字塔打印
4.使用for循环来打印一些特殊的图形如下代码:比如金字塔,漏斗,菱形。2. for(表达式1;表达式3)//表达式2省略代表。菱形与漏斗差异不大,此处不再赘述。表达式1一般是给变量赋值。等同于while(1)
2024-04-14 21:11:55
309
原创 循环语句while
在C语言中,一般可以通过 scanf 和 getchar 来输入数据,但 scanf 和 getchar 并不是直接从键盘获取字符的。当键盘输入字符的时候,先会存储到缓冲区,然后被 scanf 和 getchar 提取。上述代码如果没有while循环去清理缓冲区,那当用户输入一串密码并且回车后,缓冲区就会保留回车键并将其当作一个字符存储下来,然后就会被后面的getchar直接提取,从而无论用户输入什么密码只要回车就会打印出失败。2.continue语句则是跳过之后的语句再一次从开始执行while语句。
2024-04-09 20:50:50
301
原创 switch语句
(2)default语句的作用是用来提示用户输入的格式不对,如果上述代码没有default语句,那么当用户输入8或者不是1~7的数字,当运行程序时什么都不会打印,但程序仍能进行。简单的来讲,就是对于上述代码,如果没添加break语句,比如用户输入4,那么执行结果就是星期四到星期天。(1) 上述代码中出现了break语句,其作用就是在执行完之前的语句后,其后的语句将不在执行。switch语句在执行的时候如果没有break的限制是从选择开始的某条语句开始执行以下所有的语句。(case 常量表达式:语句:)
2024-04-05 20:22:01
240
原创 分支语句之 if 语句
注意:在使用if语句的时候,可以添加一个大括号将所需要执行的语句括起来,如果没有大括号,那就会默认只执行if后的一条语句。//表达式1如果为真就执行语句1,如果为假,就判断表达式2,为真执行语句2,否则执行语句3。(tip:上述代码中年纪小于26,大于16的写法与数学中的表达式有所差异,需注意)if(表达式)//表达式为真就执行下面的语句,表达式为假不执行。if(表达式) //表达式为真就执行语句1,否则就执行语句2。//注意,这个代表的是一个空语句。(2).if分支语句(选择结构)
2024-03-31 21:02:03
288
原创 初始指针和结构体
其中pa就是自定义的指针变量名,* 是指针标识符,前面的int是指指针的内型,&a是指访问变量a的在内存中的地址。在了解指针之前我们首先需要去了解计算机中内存到底是如何存储数据的。1. 32位计算机就代表该计算机有32根地址线,该地址线是一种。综上所述,指针的本质就是内存的地址,指针变量就是专门存储地址的变量。排序如下:每一个方格代表一个内存存储单元(左侧),编号(右侧)如下,我们以32位计算机为例来说明内存的存储形式。这样,我们就可以了解内存单元是如何编号的了。2. 一个内存单元的大小是一个。
2024-03-27 20:29:48
131
原创 初步认识几个常见的关键字
static的作用就是将这个全局变量限制在所处的源文件中运行,无法被其他的源文件引用。也就是static会保留局部变量a,让其在范围之外不会销毁,而是随着程序一直进行。3.函数:函数在通过static的修饰后,和上述所讲的局部变量一样。上图表述的是如何去将一个源文件中的全局变量引用在别的源文件中。寄存器>高速缓存>内存>硬盘>网盘。1.修饰局部变量,如下。2.修饰全局变量,如下。
2024-03-23 10:53:35
238
原创 初步认识“选择语句”,“循环语句”,“函数”和“数组”
数组访问时应该是下标来访问:例如arr[0]代表第一个元素。当{}中的元素总量与[]中不一样的数组称为“利用函数来进行两个数的求和。2.while 循环语句。如下计算1到100的求和。,[10]代表数组中有。”,其余元素为默认为0。
2024-03-16 17:19:38
154
原创 初识c语言及变量求和
小技巧:在VS中,可以使用快捷键先Ctrl+k再Ctrl+c的方式来屏蔽掉选中的已写代码。也可在菜单中找到“对所选行进行注释”如果在上图所示的xuexi.c中定义一个全局变量,那么该如何在hg.c中使用?局部变量的作用域也就是在主函数的{}之内;全局变量的作用域就是整个工程。这样就可以在hg.c中使用xuexi.c中的变量a。变量具体可分为:整型变量,实型变量和字符型变量。1.作用域:也就是变量起作用的范围。1.变量可分为局部变量和全局变量。全局变量从整个工程开始到结束。注:局部变量优先于全局变量。
2024-03-10 09:49:50
328
原创 c语言数据类型
2.区分数据的原因:是根据需要,节约内存,如果都统一起来,会浪费内存,毕竟每个变量分配的内存是不一样的,也就是字节数。1.从语言数据类型大致可分为基本类型,构造类型,指针类型,空类型四种。1.基本数据类型分为三类:整数型(定点型)、实数型(浮点型)和字符型。如何去区分数据的类型,为什么要区分数据的类型?如图,可以通过sizeof来计算所占空间的大小。而如何去计算每个类型所占空间的大小?作为初学者,首先要掌握基本类型数据。
2024-03-06 21:37:53
182
原创 C语言开发环境的选择
作为一个初学着,什么样的C语言开发软件才更适合呢?十年前就已经停止更新,编写的代码不好看。太过老套,兼容性不太好。1.是一个集成开发环境。
2024-03-02 19:32:46
206
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人