C语言
Coding_Fly_
满招损,谦得益
展开
-
C语言新写法
>为转义符号,意思为大于& 意思为&< 意思为小于原创 2020-09-08 15:20:20 · 121 阅读 · 0 评论 -
利用短路运算实现递归
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)递归实现:但是递归会有出口,这个出口一般是使用if语句进行判断实现。使用短路运算实现这个递归出口class Solution {public: int Sum_Solution(int n) { int sum=n; sum && (sum+=Sum_Solution(n-1)); retur原创 2020-09-05 07:36:51 · 388 阅读 · 0 评论 -
文件定位函数
void rewind(FILE *stream);rewind() 用来将位置指针移动到文件开头int fseek(FILE *stream, long offset, int whence);offset 为偏移量,也就是要移动的字节数。之所以为 long 类型,是希望移动的范围更大,能处理的文件更大。offset 为正时,向后移动;offset 为负时,向前移动。whence 为起始位置,也就是从何处开始计算偏移量。C语言规定的起始位置有三种,分别为文件开头、当前位置和文件末尾,每个.原创 2020-08-31 23:44:27 · 328 阅读 · 0 评论 -
指针数组退化成多级指针问题
char const * str[3] = { "stra","strb","strc" }; char const *p = str[0]; int i = 0; i = 0; while (i < 3) { printf("%s\n", p++); ++i; }打印出来stratrara如果我们想打印出来stra strb strc怎么打印呢法1:int i = 0; i = 0; while (i < 3) { printf("%s\..原创 2020-08-08 14:46:16 · 269 阅读 · 0 评论 -
字符串常量常量字符串 指针常量常量指针问题
C/C++一大玄学 指针常量字符串指针指针字符串,在使用的时候总是各种问题百出,到底是什么因素导致呢?1:死记硬背;2:运用场景不多;3:不同人看法一致,说法不同,导致记忆没有重叠。我们来看官方的说法:字符串常量常量字符串定义:用双引号(“”)括起来的0个或者多个字符组成的序列;存储:每个字符串尾自动加一个 ‘\0’ 作为字符串结束标志;其重点在于常量 ,常量的内容是个字符串。没区别指针常量和常量指针,加了指针就有区别了指针常量:这个常量是指针类型的也就是说,这个指针是一个常指原创 2020-08-08 14:10:44 · 947 阅读 · 0 评论 -
C语言中输出格式问题
笔试中经常会出现很多输出格式问题%m.ne输出数据共占m列,n位小数,数值长度如果小于m则左边补空格%m.ns输出m列,只取字符串左端n个字符,若这n个字符输出在m列右侧,左补空格。官方解释很难理解,问题本身在于字符串的长度int main(){ char s[20]; strcpy(s, "Hello,World"); printf("s[]=%6.9s\n", s); system("pause"); return 0;}很明显输出了9位,继续看int main()原创 2020-08-08 11:39:02 · 1906 阅读 · 0 评论 -
图的遍历
在图的遍历中,如何选取遍历的起始顶点可以对图的顶点进行编号,从编号小的顶点开始。非全连通图怎么处理遍历?多次调用从某顶点出发遍历图的算法图中可能出现回路,如何避免遍历不会因回路陷入死循环加一个数组visited[n] n是顶点个数。如果访问了该顶点,将visited[i]中的值设置为1。深度优先遍历 DFS1:先访问顶点v;2:从v未被访问的邻接点中选取一个顶点w,从w出发进行深度优先遍历;3:重复上述两个步骤,知道图中所有和v有路径想通的顶点被访问到。深度优先涉及..原创 2020-06-14 01:46:32 · 233 阅读 · 0 评论 -
如何向面试官讲清楚程序编译过程
源文件到产生效果是个很复杂的过程大体步骤分为编译和链接你如果只是背,这四点千万不要忽略预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。首先是个大的过程,编译。编译分为预编译和编译加汇编预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。接着调用cc1进行编译,这个阶段根据输入文件生成以.i为后缀的目标文件。汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲原创 2020-06-10 00:06:12 · 238 阅读 · 0 评论 -
C语言中文件操作
我们经常见到的文件写入和读取。#include<iostream>using namespace std;typedef struct{ char no[10]; char name[10]; double foreign; double spec1; double spec2; double total;}StudentType;void WriteToFile();void ReadFromFile();int main(){ int select; do原创 2020-05-24 10:22:15 · 411 阅读 · 0 评论 -
桶排
我们经常在学校学习阶段听到木桶原理这个词,意思就是说这个木桶所能装载的水的量是由最短的那个木板决定的,随着我们认知的增加,又有个新的木桶原理:如果将木桶倾斜,这个木桶所能装载水的量就是由长木板决定的。是不是感觉被生活欺骗了,不管是啥情况好像都有个解释。就像这个不完美的通,总有各种解释来把它包装的花里胡哨。在我们计算机领域,这个桶能用来干什么呢?在虚拟的环境下,你想让桶装啥它就装啥,只不过我们...原创 2020-04-24 01:25:26 · 422 阅读 · 0 评论 -
浅谈计算机中cpu位数和指针
在刷题的时候看到了腾讯笔试题的这个问题先解释最后的强转:赋值操作的本质是传送数据,而数据类型则是告诉CPU数据传送的数量是多少。强制类型转换,就是当传输的源数据和目的数据数量不一样的时候,就需要告诉CPU如果数据太多的话哪些数据需要截断,如果数据不够的话需要填充什么信息(是全1还是全0或者别的东西)。解决这个面试问题核心就是一个指针的长度等价于这段代码如果还是不太清除,直接调试看看...原创 2020-04-15 18:57:47 · 1079 阅读 · 1 评论 -
你真的了解前置++和后置++吗?
标语:人一定是能生存下去的,怎么样生存看你自己对生活质量的追求。我们来看个阿里的笔试题看到这样的问题很多老铁就会大喜,这个我初阶学C的时候就会了,前置加加,先自加再运算,后置加加,先运算后加加。写的时候就发现好像并不是那么容易了。当然,这个和环境没关系,没有多个++连一起用,所以不存在环境不同结果不同。我们来看结果如果你有疑惑来看下面的解释:·printf的操作是从右到左计算表达式...原创 2020-04-14 22:25:30 · 451 阅读 · 0 评论 -
数据结构——堆
对于接触编程的人员来说,堆这个词经常会听到,经常和一群名次混合堆区,栈区,静态区等等,面试的时候可能经常也会遇到一个算法,堆排,今天小编主要和大家一起来看看堆这个数据结构。学习堆要有两个前提 1:你学过二叉树,不需要很精通,但是基本的结构你要知道 2:你学过线型表,随便一种(链表 顺序表)都可以,为了理解容量这个概念。堆实际上是在满二叉树基础上做的一个延拓,我们来看看满二叉树如果你第一次接...原创 2020-04-06 15:35:30 · 243 阅读 · 0 评论 -
数据结构中的二叉树
标语:学习就是个不断搬砖和不断复习的过程,少数强者可以创新,多数人逐渐将其遗忘。小编带大家学习数据结构中的二叉树,我们这里的实现主要是用C语言去实现的,当然也有C++的语法,用基础的语言有助于我们更好理解数据结构。首先我们要知道数据结构中二叉树是个非线性结构,我们了解过数组,顺序表,链表等线性结构,对于计算机而言,只用线性结构存储数据是远远不够的,我们还需要非线性结构来保存,今天所说二叉树就是...原创 2020-04-02 21:12:08 · 357 阅读 · 2 评论 -
自行车管理系统
在大家学完C语言后,经常会被学校要求做很多管理系统,主流做法当选链表,但是很多问题就来了,在学习阶段写过最多基本上就是50行代码左右了,一下子做个小型管理系统问题就比较多。小编当然也是在学完初阶C语言之后过了半年才完整做出来。所以分享一下经验。 1:首先数据结构:链表要会,而且要熟练掌握其增删查改; 2:调试代码要会,很多代码一行一行的看到最后真的是很让人头大,不会调试和监控变量是个很痛苦的...原创 2020-03-05 09:10:19 · 2024 阅读 · 2 评论 -
如何删除字符串中重复元素
1.将字符串中所有的重复元素的字符删除,只留下出现一次的字符C语言是实现这个算法的过程有很多,比如说暴力拆解,新申请数组等等今天小编给大家主要说说如何新申请数组简单理解这个算法首先这个数组长度是不确定的,并且中每个元素出现的次数很多很乱,如果但纯的遍历一遍数组就像排序一样,很容易出错,小编暴力拆解这个数组的时候首先数组移动真的是很麻烦而且这个元素重复出现基数次和偶数次是不一样的,所以说我就换...原创 2020-03-03 17:55:52 · 1761 阅读 · 0 评论 -
有关斐波拉契数列的拓展延申
放假了很久没有写博客了,把前面所学的知识又拿出来温习一遍。1**. 斐波拉契数列(递归形式求第n项数)**int fib(int x){ if (x <= 2) return 1; return fib(x - 1) + fib(x - 2);}int main(){ int num; int ret; scanf("%d", &num); ret ...原创 2020-02-10 15:27:29 · 177 阅读 · 0 评论 -
队列的实现以及利用队列解决基本问题
我们来看数据结构中的队列结构现在我们看到的线性结构基本上就有2最终实现方案,一种是顺序实现,另一种就是链式实现。首先我们来看顺序队列的实现方案。还是定义结构体,首先就是结构体成员的分析,队列结构是先进先出式的结构,和栈结构恰恰相反。比栈结构稍微复杂的一点就是队列结构不但需要记录头部,还要记录尾部。所以我们相对于栈也就自然多了一个成员,就是记录尾部的指针(**这里的指针是所谓的广义上的指针,不...原创 2019-12-01 21:41:20 · 884 阅读 · 0 评论 -
数据结构中栈解决简单问题
将十进制整数转换成n进制数(要求:将转换后的数正序输出)在学习完C语言初级阶段后,不知道大家有没有和我一样的想法,用C语言实现一个进制转换器,想着可能就几十行代码,但是真正上手操作后发现难度极大。首先考虑的就是正数负数原码补码问题,还有就是小数进制转换问题。但是最大的问题就是无法将转换出来的数正序输出。在了解到栈后才知道原来缺少了这么多东西。首先在之前进行了顺序栈和链栈的基本操作后,我们现...原创 2019-11-28 19:26:27 · 560 阅读 · 0 评论 -
指针进阶部分
关乎指针好像问题层出不穷,到了二叉树的时候小编才发现问题真的是多的不得了,所以赶忙回去重新看了下指针。指针数组问题首先来看下面一段代码int arr[10] = { 0 }; printf("%p\n", arr); printf("%p\n", &arr); 这里面发现打印出来的地址是一样的,但是真的是所有的都完全一样吗?并非如此,打开监视窗口调试一下就可以看到arr类...原创 2019-11-23 10:39:16 · 110 阅读 · 0 评论 -
数据结构中的栈
在刚学习完C语言后,我设计了个程序实现10进制向n进制转换,我发现只能将其最终结果逆序输出。想正序输出一直没有实现。但是当我了解到了栈结构的时候豁然开朗。什么是栈结构?我的理解就是它就像是一个没盖子的瓶子,只能从一端进出。所以就有了先进去的后出来,后进去的先出来的说法。栈 分为 顺序栈 和 链栈:1. 顺序栈和顺序表一样,这个线性结构实质上就是一段线型空间。只不过对这段线性空间进行了限制,而...原创 2019-11-17 22:09:26 · 253 阅读 · 0 评论 -
由单链表向后续链表的延伸
单项循环链表单项循环链表和单链表相差不大,只不过是将尾指针的后继指向了头,区别在于链表初始化的时候修改last指针的指向,last的后继指针不再指向NULL,而是指向头结点的位置,注意就是在创建时用的头插法和尾插法最后需要修改last指针的指向。在显示函数的时候不再是遇到空访问停止,而是遇到头结点访问停止。来看一下主要创建链表的核心代码void ListInit(SLIST* psl)...原创 2019-11-17 14:15:08 · 284 阅读 · 0 评论 -
如何将链表断开
今天我们来看一个链表的操作问题,题目要求编写一个函数,将链表分成奇数链和偶数链,每个链中的数据从小到大排列。程序中不得使用malloc申请空间审题:首先不能使用malloc申请新的空间就是说不能申请新的链表来放奇数偶数链表。因此就需要在原来链表的基础上进行操作。但是进行操作时需要考虑,先排序还是先判断奇偶性。如果先判断奇偶性再排序会造成和排序函数在两个链表中调用2次。因此我们选择先排序在进行选择...原创 2019-11-14 20:25:55 · 1377 阅读 · 0 评论 -
C语言最容易被忽视的简单问题
很多时候难住我们的并不是复杂问题,而是很简单的简单问题。基本上都不会被任注意的那种小问题。小编最近就深刻感受到原来简单问题的盲点还是因为不会。 问题1:C语言程序的执行过程。 首先从小编接触C语言,编译好程序后直接点击运行,有问题调试,然后得出想要的结果就好了,从来没有在意过怎么执行的,只是将概念过来一遍就认为完成想要的操作。但是正式这些很不起眼的点反映出了学东西的不牢固。 就比如说**#...原创 2019-11-12 21:11:01 · 203 阅读 · 0 评论 -
带头节点单链表及其基本操作
我们继续看单链表的原创 2019-10-30 22:19:41 · 1395 阅读 · 0 评论 -
顺序表基本操作
前面已经介绍了顺序表基本成员的建立,今天我们看下顺序表基本操作的实现。typedef struct Seqlist{ int* base; size_t capacity; size_t size; }Seqlist;首先将顺序表的框架做出来,下面的所有操作都是建立在这个基本操作之上。我们先来看怎么将数据在线型表上存储,也就是先将数据存放到这个线型表上。我们来写出他的函数。...原创 2019-10-29 22:52:41 · 265 阅读 · 0 评论 -
指针字符串面试题
面试的时候会发现,其实面试题给出的不是几百行上千行代码让你去找Bug,相反给的却是简短的一二十行代码让你去找问题。这不仅仅是考验基本功,因为有的题,你没见过还真的不会做来看下面一道题#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<Windows.h>int main(){ int a...原创 2019-10-26 17:56:02 · 493 阅读 · 0 评论 -
算法数列
首先我们来看这个题要求输入数列An, Bi = (A1*A2…An) / Ai,要求输出B的序列,1:不能使用除法,2:不能使用栈,3:空间复杂度为O(n),即只能使用单重循环;4:O(1)即不能定义循环外的变量。...原创 2019-10-24 09:24:44 · 217 阅读 · 0 评论 -
数据结构 顺序表及其功能的实现
小编在正式讲解知识的时候不得不吐槽一下这个C语言的链表了,真的还是很有难度的,在开始链表之前还是先来看下顺序表吧。一起来看首先我们要了解顺序表是一种线性的存储结构,这就够了。。。。什么是表?就是多个成员构成的具有一定联系的集合,表中最重要的是具有一定的集合,还要注意各自之间的联系。首先看到成员,我们不得不联想到C语言的结构体,在结构体里面定义成员,我们使用的表具有某种联系,而且都是相同类型,...原创 2019-10-18 16:02:07 · 253 阅读 · 1 评论 -
链表
C语言的精髓就是链表,在实际应用中,存储数据不会是线性存储的,这就需要一个更加重要的数据结构:链表链表每一个块由2部分构成,一部分用来存放自身数据,另一部分用来存放下一块地址。链表的实现和结构体指针密切相关,而且是其高度综合,一起来看。首先我们来看定义结构体的时候能不能直接在结构体里面定义自身呢?typedef struct Node{ int data; struct Node n...原创 2019-10-12 17:12:40 · 165 阅读 · 0 评论 -
公司怎么实现分工写代码
我们在学习的时候代码基本上都是自己一个人完成,但是在公司里代码是由很多人一起协作完成的,如果每个人写一部分,然后粘贴到一个文件中去,会导致错乱,那么怎么实现明确分工又不会造成程序混乱呢?首先会是编译器的选择,很多大公司会使用内部编译器来完成,在这里我介绍一款比较新的编译器VS2017在创建文件夹后点击头文件注意是**.h**文件添加编辑头文件写各自的模块谁要用直接调用就行,如果不调用头文...原创 2019-09-28 12:39:59 · 1371 阅读 · 2 评论 -
如何用函数实现数组元素的逆置
要求:编写一个函数实现数组元素的逆置;再编写一个函数实现数组元素的打印。我们要注意这类问题意思要弄明白,数组元素的逆置是要求将数组元素的首尾交换,但是此时并没有要求打印出来,因此在编写的函数中坚决不能将逆置后的数组打印出来。在之前博客中提到,在数组传参是数组元素个数不能少,因此我们函数实际参数就能确定出来,需要注意的是在函数内部实现后数组元素的交换时需要定义一个中间变量去实现交换,输出数组元...原创 2019-09-28 11:52:55 · 4833 阅读 · 0 评论 -
函数解决混合运算问题
今天看到了个实验室面试题分享给大家看一下要求用C语言实现(1+1!)/2+(2+2!)/3+(3+3!)/4…(n+n!)/(n+1),要求保留2位小数;其实要解决的困难就是阶乘在程序中怎么去算,还有就是需要考虑数据类型,因为除法的结果是会产生数据类型的更改,所以在定义变量的时候注意,不要全部定义成为整型。这时候难点不在于怎么把这个表达式写出来,真正的难点在于怎么把数据正确赋值给主函数很...原创 2019-09-27 19:18:35 · 426 阅读 · 0 评论 -
如何打印菱形图案(C语言)
这里的打印当然不是只用printf堆叠而成的打印首先你需要看到菱形图案里面隐藏的东西菱形图案是由行列组成的,而且每一行中有2种字符,在观察的时候很容易忽视空格字符,而是只注意到*字符,但是我们发现只注意到字符个数远远不够,还得需要观察字符数和行列的关系,这样才能完成一个完整的程序。#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>...原创 2019-09-26 19:17:00 · 3133 阅读 · 0 评论 -
使用函数实现数组元素的赋值
要求:首先要实现函数的赋初值首先函数实现数组赋初值的时候,首先要看需要哪几个实参1:数组2:你赋值的数但是元素个数需不需实参返回给函数呢?来看下一段代码#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<Windows.h>int Init(int array[],int set){...原创 2019-09-25 21:00:07 · 6259 阅读 · 2 评论 -
VS2017怎么调试
最近刚从VC6.0转向VS2017,换了个编译器,发现我不会调试了,专门研究了下,菜鸟和你一起看代码调试。首先看一个经典例题#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<Windows.h>int Change(int x, int y){ int temp; temp = x; ...原创 2019-09-25 19:40:53 · 973 阅读 · 0 评论 -
用函数实现打印乘法口诀表
首先乘法口诀表需要几个参数?这是函数首要考虑的点,考虑清楚函数首要参数,当在程序完成相同效果是当然是参数越少越好,计算机的效率会明显增加。我们可以确定,每一行都是从快开始乘,最终的值取决于用户自定义的值,所以说只需要一个参数即可,就是用户需要打印到多少的参数值。由于要确定个数所以需要进行二次for循环。但是需要注意 第一个数是从1开始的。下面奉献上代码#define _CRT_SECU...原创 2019-09-23 23:33:22 · 198 阅读 · 0 评论 -
函数递归
递归:程序或者函数自己调用自己的方法,递归的思考方式在于把大事化小。栈溢出:这个是递归中经常出现的错误,因此要特别注意递归结束的条件写递归时需要注意:1:递归函数存在限制条件,当满足这个限制条件的时候,递归不再进行;2:每次递归执行后更接近这个限制条件。当然,并不是满足这两个条件的递归程序都是正确的,例如`#define _CRT_SECURE_NO_WARNINGS#includ...原创 2019-09-28 20:04:03 · 233 阅读 · 0 评论 -
C语言 位操作符
1:按位与 &2:按位或 |3:按位异或 ^注意:操作数必须是整数1:按位与(按二进制进行相与)#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<Windows.h>int main(){ int a = -1; int b = 1; int c = a & b;...原创 2019-10-02 12:20:29 · 175 阅读 · 0 评论 -
结构体的传参为什么优先选择传地址?
结构体与函数结合结构体传参数时有两种传参数方式,传值 传地址我们在编写程序时优先考虑哪一种呢?我们来看下面一个例子#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<Windows.h>struct Change{ int x; int y;};struct Student{ ...原创 2019-10-03 10:40:48 · 964 阅读 · 0 评论