
C/C++
文章平均质量分 67
皓皓松
与坚持梦想者同行!
展开
-
【C语言/C++】算术移位和逻辑移位以及一道移位的题目
最近下了个牛客APP,在上面做了几道题。在做题的过程中呢。我发现了一道比较有意思的题目老规矩,直接上代码int main(){ int a = 1; int b = 32; printf("%d %d\n", a << b, 1 << 32); return 0;}乍一看,咦,结果一定输出的是 两个相同的数字 吧如果你说是,那么,恭喜你,你看我的这篇文章是有意义的原创 2016-11-22 15:44:34 · 7140 阅读 · 4 评论 -
【C/C++】判断一个数是不是闰年
生活中,我们都知道如何判断某一年是不是闰年我们都知道,能被4整除并且不能被100整除的是闰年能被400整除的也是闰年根据算法,我们写出下面程序#define _CRT_SECURE_NO_WARNINGS 1#include#includeint IsLeapYear(int y){ return (y%100!=0&&y%4==0)||(y%40原创 2016-08-31 16:47:40 · 25252 阅读 · 0 评论 -
【C/C++】将字符串中间的空格替换为"%20"
一、字符串按二、原创 2016-07-22 08:42:05 · 5634 阅读 · 0 评论 -
【C/C++】用回调函数实现计算器
一、问题概述用C语言实现一个简易计算器,可以用来实现加减乘除的功能二、问题分析这个问题大可用switch,case语句实现但是这里我们用一种比较高大上的方法函数指针和指针数组中 回调函数 三、代码实现#includevoid Add(int x,int y){ printf("%d\n",x+y);}void Sub(int x,int y){原创 2016-08-03 15:07:27 · 1568 阅读 · 1 评论 -
【C和指针】第八章(1)-->一维数组
一、数组基本概念数组是用来存储一组数据类型的构造数据类型特点:只能存放一种类型的数据,数组里的数据成为元素二、数组和指针的不同之处说到数组,基本都会和指针扯上关系。但是数组和指针是截然不同的通过下面这张图片,我们应该知道数组名其实是一个指针常量(不可被改变)三、数组元素的两种访问方法:下标访问和间接访问(1)下标访问(2)间接访问用间接访问的方法实现杨辉原创 2016-07-08 10:49:43 · 546 阅读 · 0 评论 -
【C/C++】模拟实现strcpy的N种境界
一、什么是strcpy?所谓的strcpy,是C语言中用来进行字符串拷贝的函数函数原型:char* strcpy(char* strDestination,const char* strSource);头文件:string.h 简单用法:#include#includeint main(){ char str[35] = {0}; char* p = "welc原创 2016-07-19 09:37:49 · 508 阅读 · 0 评论 -
【C/C++】strcpy,strncpy和strchr
一、strcpy与strncpy的不同之处这两个函数都有拷贝字符串的功能函数原型:char *strcpy( char *str1, const char *str2);//str1是要复制到的字符串,str2是被复制的字符串char *strncpy( char *str1, const char *str2, size_t count );//这里多了一个元素count原创 2016-06-21 22:12:05 · 730 阅读 · 0 评论 -
【C/C++】命令行参数
一、命令行参数main( int argc, char *argv[ ], char *envp[ ] ){ program-statements}argc代表命令行参数的个数argv是存着这些命令行参数的首地址的数组二、代码实现:#include#includeint main(int argc, char* argv[])原创 2016-07-28 16:51:15 · 2727 阅读 · 0 评论 -
【C/C++】解密杨辉三角
一、杨辉三角所谓杨辉三角,就是下面这个图形通过找规律可以发现,除了每一行的第一个和最后一个是1以外其余的数都是通过上一行的两个数相加得到的二、程序分析①定义一个二维数组。并向里面按照规律赋元素,最后打印输出②需要利用for循环进行复制 除了1之外 其余赋值方法用 a[i][j] = a[i-1][j-1]+a[i-1][j]; //i为行数,j为列数原创 2016-07-05 10:12:37 · 2145 阅读 · 0 评论 -
【C/C++】二维数组之简易三子棋
一、三子棋五子棋,五个棋子不论是横着,竖着,斜着,只要能连成一条直线,就赢了三子棋(简易版)也是如此。二、思路分析①棋的类型棋类的C语言实现方法主要看棋的类型一种是像象棋那种,需要选择棋子,进行的是棋子移动的棋另一种,就是像三子棋,五子棋一样。放置棋子的棋②要点(1)数组棋盘可以用一个二维数组来表示并用0表示某一点无棋子的情况用1代表黑棋用2代表原创 2016-07-18 09:46:34 · 2237 阅读 · 2 评论 -
【C/C++】深入位运算之比赛顺序
一、问题描述有5个人参加比赛,有人让他们预测比赛结果A选手说:B第一,我第三。B选手说:我第二,E第四。C选手说:我第一,D第二。D选手说:C最后,我第三。E选手说:我第四,A第一。比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。二、问题分析(1)设置A,B,C,D,E五个选手定义五个变量A,B,C,D,E,分别代表五个选手的名次;(2)循环嵌套原创 2016-07-06 22:50:21 · 1194 阅读 · 0 评论 -
【C/C++】用递归实现字符串逆序
一、递归的使用条件(1)有条件限制,并每次递归之后条件逼近(2)每次都将一个大问题化成两个子问题二、代码+分析代码块:#include#includevoid reverse(char* str){ char tmp = *str;//用tmp存入 字符串的第一个字符 int len = strlen(str);//求当前字符串的长度 ps:每次递归,长度都会变化原创 2016-07-27 16:03:05 · 10336 阅读 · 2 评论 -
【C/C++】用递归实现n的k次方
一、递归使用三要素(1)条件限制用if条件进行限制,在某一状态下进行递归调用自身(2)条件逼近通过一步步的递归调用,应该向if判断条件的方向逼近以停止递归(找到递归的重点)(3)将大化小每次递归的都要将一个大的问题划分成子问题 二、思路原创 2016-08-01 15:45:58 · 5405 阅读 · 1 评论 -
【数据结构】C语言实现单链表
用C语言实现基础单链表结构体首先,我们定义一个结构体Nodetypedef int DataType;typedef struct Node{ int data; struct Node* next;}Node,*PNode;Node这个结构体中,包含一个数据元素,和一个指向下一个节点的指针初始化链表void InitList(PNode* pHead){原创 2016-10-19 09:18:21 · 824 阅读 · 0 评论 -
【项目】模拟实现磁盘调度算法--扫描算法
磁盘调度算法一、实验内容 模拟电梯调度算法,实现对磁盘的驱动调度。 二、实验目的磁盘是一种高速、大量旋转型、可直接存取的存储设备。它作为计算机系统的辅助存储器,负担着繁重的输入输出任务,在多道程序设计系统中,往往同时会有若干个要求访问磁盘的输入输出请示等待处理。系统可采用一种策略,尽可能按最佳次序执行要求访问磁盘的诸输入输出请求,这就叫驱动调度,使用的算法称驱动调度算法。驱动调度能降低为若干个原创 2016-06-05 14:53:23 · 10865 阅读 · 3 评论 -
【网络】UDP服务器的实现
UDP服务器实现的基本步骤(1)利用socket函数创建套接字(2)服务器用bind进行IP和端口号的绑定(3)不需要设置监听状态(4)绑定后直接读写相关函数recvfrom作用用来数据的接收头文件#include#include函数原型int recvfrom(int sockfd, void* buf, ssize_t len, int fl原创 2017-07-11 17:17:48 · 2015 阅读 · 0 评论 -
【C语言】实现一个变色的进度条
实现一个如上的进度条要求1、依次多打印一个'#'2、并后面标注百分比3、还可以进行变色实现进度条(未变色)strip.c#include#include#define M 100int main(){ char ch = '#'; char str[M] = {0}; int i = 0; char symbol[4] = {'|','/','-',原创 2017-03-31 20:39:30 · 2426 阅读 · 0 评论 -
【C/C++】回溯经典算法之-->八皇后问题
一、八皇后问题八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。原创 2016-07-09 21:04:45 · 54169 阅读 · 5 评论 -
【面试题】剑指Offer-16-反转链表
题目概述解决思路定义指针【pCur】和【pPrev】并定义【pReverseHead】来保存返回后的头结点当【pCur】不为空的时候,进行循环先求出pCur】的下一个节点【pNext】节点,并判断其是否为空(判断【pCur】是否为最后一个节点)如果是,则需要对【pReverseHead】进行赋值否则,将【pCur】的下一个节点的指针指向pPrev】并将【pP原创 2017-04-05 11:38:17 · 497 阅读 · 0 评论 -
【面试题】剑指Offer-15-求倒数第K个节点
题目概述解决方法用两个指针pSlow和pFastpFast先走上K步然后pSlow和pFast一块走当pFast走到末尾时,pSlow所指向的节点就是倒数第k个节点注意事项注意特殊情况以及临界情况的判断当传入的链表指针为空的情况,以及当传入的K小于链表的长度的情况代码实现原创 2017-04-05 11:30:19 · 499 阅读 · 0 评论 -
【面试题】剑指Offer-11-模拟实现Pow
题目要求实现一个函数,输入基数和指数,就该基数的指数次方注意点处理0的非正数幂的情况处理,可以抛异常,这里用的断言实现原理比如求2的16次方,则先求2的8次方,然后平方即可得到16次方的值用递归的方法求解代码实现#includeusing namespace std;#includedouble PowerWithUnsignedExponent(doubl原创 2017-03-31 22:40:37 · 1087 阅读 · 0 评论 -
【C语言】如何判断出现内存泄漏
如何判断出现了内存泄漏?VS下的调试器CRT库提供了方法,其原理是在申请和释放的时候做下标记通过标记来判断是否出现内存泄漏#includeusing namespace std;void TestMemoryLeak(){ int* p = (int*)malloc(sizeof(int)* 10); if (p == NULL) cout << "内存不足!" << e原创 2017-03-23 14:31:34 · 2857 阅读 · 0 评论 -
【面试题】剑指Offer-28-字符串的全排列
题目概述昨天做了一套CVTE的面试题,最后一个题目就是字符串的全排列。做过剑指Offer的童鞋一眼就可以看出这是剑指Offer-28题原题目,一点都没变题目解法把字符串看成两个部分,第一个部分为第一个字符,剩下的是后面的字符首先将所有可能出现在第一个位置的字符,将这些字符在每次循环的时候和第一个字符交换、先固定一个字符,求后面字符的排列然后将后面的字符按照前面的原创 2017-03-19 21:35:42 · 752 阅读 · 0 评论 -
【C/C++】深入预处理
一、预处理指令(1)预处理指令的功能预处理指令提供按条件跳过源文件中的节、报告错误和警告条件,以及描绘源代码的不同区域的能力。(2)预处理器的作用预处理器的主要作用就是把通过预处理的内建功能对一个资源进行等价替换 二、预处理包含的方面预处理包括:①文件包含(#include)②条件编译(#if、#indef、#ifdef、#endif、#undef 等)③布局控原创 2016-06-15 20:09:56 · 974 阅读 · 0 评论 -
【C语言/C++】关键字
本篇博文旨在分别介绍C语言/C++的关键字;C语言关键字按四大类分,C++关键字按首字母大小排序;主要用于关键字的快速查看,回忆C语言关键字C语言有32个关键字,这些关键字可以分为下面几个类别数据类型关键字 (1)int 整形 (2)char 字符型 (3)float 单精度浮点数 (4)double 双精度浮点 (5)signed 有符号数原创 2017-03-01 13:54:06 · 1106 阅读 · 0 评论 -
【C++】二分查找的递归形式和非递归形式
二分查找二分查找,又名折半查找,在有序数组中查找元素的效率很高;缺点就是只能查询有序表,因此适用于不用频繁插入删除的有序表如果没有二分查找,通过遍历来查询表中元素的时间复杂度为O(N)而二分查找时间复杂度为O(lgN)以非递归的形式实现二分查找//二分查找的非递归形式 int BinaryResearchNonR(int *arr,int left, int righ原创 2017-01-04 20:26:34 · 2230 阅读 · 1 评论 -
【C/C++】利用可变参数模拟实现printf
一、printf功能printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。原型int printf( const char* format , [argument] ... ); //定义在stdio.h中 更多printf详解请看链接:printf()函数详解http://gaoxiaodiao.com/p/1.html 二、如何模拟原创 2016-07-27 15:45:02 · 3409 阅读 · 0 评论 -
【C】printf的返回值
#includeint main(){printf("%d",printf("%d",printf("%d",43)));return 0;}原创 2016-05-26 09:18:45 · 12597 阅读 · 2 评论 -
【C】斐波那契数列(非递归)
有一道编程思考题叫做 小青蛙跳台阶小青蛙可以一次跳一个台阶,也可以一次跳两次台阶。那么,假如有N个台阶,小青蛙有多少种跳法呢?原创 2016-06-05 09:46:17 · 1139 阅读 · 0 评论 -
【C】斐波那契数列(递归算法)
#include#includeint fib(int n){ if(n==1||n==2) return 1; else return fib(n-1)+fib(n-2);}int main(){ int n = 0; printf("请输入需要的斐波那契数列的个数:"); scanf("%d",&n); for(int i = 1;i<=n;i++)原创 2016-06-05 14:13:06 · 1686 阅读 · 0 评论 -
【C】排序算法之——插入排序(直接插入排序)
#includevoid Insert(int *a,int *b)//插入排序,插入排序前面是最小的 { int j; for(int i=0;a[i]!='\0';i++) { if(a[i]<b[0])//若新插入的元素比第一个还小,则插到第一个 { for(int j=i;j>=0;j--) b[j+1]=b[j];//全部后移 b[0]=原创 2016-06-04 20:08:12 · 2183 阅读 · 0 评论 -
【C/C++】深入预处理之line
一、#line是什么它是众多预处理语句之一 二、#line有什么作用可以用来改变编译器,用来指出清高和错误信息的文件号和行号三、具体代码比较首先,我们要知道用__LINE__检测行号未修改行号:#includeint main(){ printf("当前行号为:%d",__LINE__); return 0;} 运行结果修改原创 2016-06-24 13:33:47 · 1574 阅读 · 0 评论 -
【C】万年历
用C语言实现万年历#includeint TheFirstDay(int y) //计算1月1日星期几{ int m = 13,d = 1; int w; y--; w = d+2*m+3*(m+1)/5+y+y/4-y/100+y/400; w=w%7+1; printf("w = %d",w); return w;}int IsLeapYear(原创 2016-06-02 12:42:23 · 1766 阅读 · 0 评论 -
【C/C++】Sleep函数的用法
Sleep函数功能: 执行挂起一段时间,也就是等待一段时间在继续执行用法:Sleep(时间)头文件:Windows下为--> windows.h Linux 下为 --> unistd.h注意:(1)Sleep是区分大小写的,有的编译器是大写,有的是小写。 (2)Sleep括号里的时间,在windows下是已毫秒为单位,而Linux是以秒为单位#includ原创 2016-06-08 20:22:35 · 239035 阅读 · 10 评论 -
【数据结构】单链表的基本操作
一、单链表基本概念单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。二、单链表的基础用法这里我们先讲一些简单的、基础的用法如初始化,销毁,插入元素,求链表长度,打印链表以及链表的销毁除此之外,链表还可以有查找元素,指定位置插入,指定位置删除等用法三、代码块各部分的单独代码块:结构体:typedef struct Node{ Da原创 2016-06-22 17:54:36 · 4843 阅读 · 1 评论 -
【课设】模拟优先数调度算法-非抢占式
优先数调度算法分为抢占式和非抢占式。非抢占式:进程按优先数大小进行排列,优先数高的程序先运行。直到发生某种情况或运行完成才结束。抢占式:进程按优先数大小进行排列,优先数高的程序先运行。每运行一次(优先数-1),即重新判断进程序列的优先数大小。只要有优先数更大的,便进行新的最大的优先数的进程原创 2016-06-02 12:48:01 · 3015 阅读 · 0 评论 -
【课设】模拟实现动态内存分配—首次适应算法
动态分区分配算法一、实验内容编写一个内存动态分区分配模拟程序,模拟内存的分配和回收的完整过程。二、实验目的一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储原创 2016-06-03 20:56:49 · 23087 阅读 · 1 评论 -
【C】溢出问题
溢出问题#includeint main(){ int i=0; int a[10]; for(;i<=10;i++) { printf("这是一行文字\n"); a[i]=0; } return 0;}我们先猜测一下,i从0到10,应该输出11次文字然而··(在Dev-c 的原创 2016-05-28 22:31:19 · 775 阅读 · 0 评论 -
【C/C++】const在C和C++下的区别
比如一句 const int a = 0;在C编译器下解释为: a并不是一个常量,只是一个变量具有了常属性。在C++编译器下解释为: a就是一个常量验证方法:#include#includeint main(){ const int a = 1; int str[a];//由于数组括号里只能写常量 ,可以根据编译器是否允许成功来判断 是否是常量 system("p原创 2016-06-09 10:07:17 · 1326 阅读 · 2 评论 -
【C/C++】将字符串按空格逆置
一、题目要求有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student".要求:不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。二、题目分析初级理解:乍一看,这是一个字符串逆置可是真的有这么简单吗?具体分析:如上图所示首先先将整体的字符串进行逆置然后对各个单词逆置就可以得到我们想要的原创 2016-07-22 15:42:50 · 1935 阅读 · 0 评论