自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(160)
  • 资源 (3)
  • 问答 (2)
  • 收藏
  • 关注

原创 牛客网刷题总结

近期在牛客网刷了一些题,总结了一些容易犯的错误,现在来一一列举出来。1.要清楚什么是传递地址,什么事传递值。 2.输出“%s”时,遇到‘\0’就会停止, 3.对于左对齐要加-, %-30.4f, printf函数打印一个double类型的数据,要求:输出为10进制,输出左对齐30个字符,4位精度。 4. ||逻辑运算符只要前面为真,后面就不用再进行判断了。 设x、y、t均为int型变量,则执

2016-04-24 11:45:18 6952

原创 长度受限的字符串函数的实现

1.strncat()函数 首先要说的是strncat函数 函数原型: char *strncat(char *dest,const char *src,size_t len); strncat就是把src中的最多len个字符复制到目标数组的后面,但是,strncat总是在结果的字符加一个NUL字节。//实现strncat函数#include<stdio.h>#include<stdli

2016-04-23 21:46:45 956 1

原创 冒泡排序

关于冒泡排序,是一个经典的排序算法,大一学习老谭的C时就开始接触它,这个排序因为可读性强,所以算是最好理解的排序算法了。 这个算法的原理就是两个相近的元素进行比较,他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 算法的原理: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最

2016-04-23 20:29:56 888 1

原创 链式栈的实现

链式栈: 链式栈的结构与链表类似,如所示,其中,top为栈顶指针,始终指向栈顶元素,栈顶元素的指针指向下一个元素,依此类推,直到栈底,栈底元素的指针区域为空如果top为空,表示该栈是个空栈。我使用了三个文件实现了链式栈,首先是linked_stack.h,包含了我的结构体和函数声明#ifndef __LINKED_STACK_H__#define __LINKED_STACK_H__#defin

2016-04-23 18:54:38 646

原创 顺序栈的实现

顺序栈 利用一组连续的内存单元依次存放自栈底到栈顶的数据,同时,用一个指针top只是栈顶的位置,在C语言中,这可用数组来实现,一般是先开辟一块区域,在编程中可根据需要再对此区域进行调整。在这里,我依然使用三个文件来实现顺序栈。 首先,是我的Sequence_stack.h头文件,里面封装了我的顺序栈还有我的函数声明#define _CRT_SECURE_NO_WARNINGS 1#ifndef

2016-04-23 17:09:49 884

原创 双向链表的实现

双向链表,双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。 代码如下://double_link_list.h头文件#ifndef __DOUBLE_LINK_LIST_H__#define __DOUBLE_LINK_LIST_H__#i

2016-04-20 18:15:04 819

原创 单循环链表的实现

对于单循环链表: 它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。//circular_linked_list .h 头文件#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>typedef struct round{ int data; struct round *pN

2016-04-17 16:57:35 1258

原创 递归函数

对于递归,递归函数直接或者间接地调用自身,函数每一次调用必须进一步的靠近目标,当达到目标时,递归函数就不再调用自身了。阅读递归函数,只要简单的认为递归函数将会执行它的预定任务即可。 尾递归:如果递归调用是函数所执行的最后一项任务,我们把它叫做尾递归。 对于尾递归,我们可以很方便地转换成一个简单循环,完成相同的任务,这就是我们所说的迭代。 如:阶乘和斐波那契数列的问题,用迭代来解决问题,效率就会

2016-04-16 17:57:57 481

原创 浮点数的问题

float %f 4个字节 double %lf 8个字节 long double %Lf 8个字节(某些平台下为16个字节)浮点数会有一定的误差,智能精确到具体位之内。三种类型的范围#include<stdio.h>#include<stdlib.h>#include<float.h>int main(){ //输出三种浮点数的范围。 pri

2016-04-16 17:29:01 622

原创 判断字符串包含的问题

在判断字符串包含的问题时,我们会有一种思路,就是原字符串与子字符串进行比较,然后把子字符串中的每一个元素和原字符串进行依次的比较,这样下去,最终得到结果。这样最终虽然能够得到结果,但是效率太低了,所以这里需要一种新的思路。 在这,我们提供一种新的思路: 如下题://判断一个字符串是否为另外一个字符串旋转之后的字符串。//例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1 =

2016-04-16 16:34:54 476

原创 剑指offer—旋转字符串

2.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA#define _CRT_SECURE_NO_WARNINGS 1//2.实现一个函数,可以左旋字符串中的k个字符。//AABCD左旋一个字符得到ABCDA//AABCD左旋两个字符得到BCDAA#include<string.h>#include<stdio.h>

2016-04-16 15:59:53 457

原创 字符串常量和字符数组的区分

首先我们来看个程序,这个程序说的是字符串函数strcat()函数的实现:#include<stdlib.h>#include<assert.h>#include<stdio.h>#define MAX 20char *my_strcat(char *dest, const char *src){ char * ret = dest; assert(dest); as

2016-04-16 12:53:29 2621 1

原创 关于C函数的调用过程-栈帧

关于栈帧,从逻辑上讲,栈帧就是一个函数执行的环境:函数参数、函数的局部变量、函数执行完后返回到哪里等等。 首先应该明白,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),我们称为栈底指针,寄存器esp指向当前的栈帧的顶部(低地址),我们称为栈顶指针。 注意:EBP指向当前位于系统栈最上边一个栈帧

2016-04-15 20:52:45 2214

原创 浅析进程地址空间

在linux下,当我们对我们所写好的程序.c文件进行gcc编译过程时,会出现一个a.out可执行文件,这个文件中到底包含什么呢,接下来我们来看一看。 在UNIX下可使用size命令查看可执行文件的段大小信息。如size a.out。 接下来,我进行测试的演示: 这个是我写好的测试程序。 首先我们来测试这个程序的段大小信息。 我们在这,可以知道,a.out中含有 text(文本段),

2016-04-15 20:27:52 439

原创 可变参数列表

在函数原型中,列出了函数期望接受的参数,但原型只能显示固定数目的参数。让一个函数在不同的时候接受不同数目的参数是不是可以呢?答案是肯定的,但存在一些限制。#include<stdio.h>#include<stdlib.h>#include<stdarg.h>//利用可变参数列表实现加法。int add(int num, ...){ int i = 0; int sum =

2016-04-13 00:21:50 1173

原创 字符串函数的实现

1.strcat函数的实现原型声明:char strcpy(char dest, const char *src); 头文件:#include #include<stdlib.h>#include<assert.h>#include<stdio.h>char *my_strcpy(char *dest, const char *src){ char *ret = dest;

2016-04-09 19:21:43 642

原创 关于字符串逆置的小题

//5.有一个字符数组的内容为:”student a am i”,请 //你将数组的内容改为”i am a student”. //要求: //不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。 在这里我们所采用的方法简单说就是先将 student a am i变成i ma a tenduts,然后,再进行对每个单词进行逆置。最终变成 i am a student。#inc

2016-04-09 14:27:29 480

原创 单链表的增删排序求长度的实现。

对于链表,我们可以知道他和算法会有相关。我们至少通过两组结构来存储:数组和链表。 接下来,我们来进行单链表的实现 在这里,我们可以进行增加,删除,求长度,排序。#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<stdbool.h>//定义了一个链表节点的数据类型//在这里你要清楚什么

2016-04-09 13:41:57 1073

原创 预处理中的“#”运算符和“##”运算符

“#”和“##”这两个运算符都是预处理,在这里,对他的使用是一个关键,接下来我们通过一段程序来认识一下://#//###include<stdio.h>#include<stdlib.h>#define PRINT( n ) printf( "token" #n " = %d", game##n )int main(){ int game9 = 99; PRINT(9);/

2016-04-06 11:24:05 1093 1

原创 折半查找的实现

关于折半查找的程序与大家分享://折半查找的方法#include<stdio.h>#include<stdlib.h>int bin_search(int ch, int arr[], int len){ int left=0; int right=len-1; int mid; while (left <= right) { mid

2016-04-05 21:40:37 607

原创 宏的全解

宏的概念:C++ 宏定义将一个标识符定义为一个字符串,源程序中的该标识符均以指定的字符串来代替。宏书写形式:#define <宏名>(<参数表>) <宏体>定义的几个宏:C语言中定义了几个宏:__LINE__ 编译文件的行号 __FILE__ 编译文件的名字__DATE__ 编译时刻的日期__TIME__ 编译时刻的时间__STDC__ 判断该文件是不是定义成标准C程序#includ

2016-04-05 21:00:58 1170

原创 让人分不清的sizeof和strlen

接下来我们来说说sizeof和strlen。1.sizeof函数or关键字?对于sizeof,第一点我们要清楚的是,它是一个关键字,并不是一个函数。正因为sizeof不是函数,因此我们不把它所要求得长度的对象叫做参数,这也是sizeof不能求得void类型的长度 你无法求出sizeof(void),其实你是无法声明出void的一个变量的,void指的是一个空类型,空类型你是无法知道变量内存空间

2016-04-04 15:52:39 515

原创 C语言一些关于位操作符的小练习

1.编程实现: 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同? 输入例子: 1999 2299 输出例子:7#include<stdio.h>#include<stdlib.h>int Different_bits(const int num1, const int num2){ int a = num1; int b = num2;

2016-04-04 14:31:27 903

原创 C-main函数剖析。

对于main函数,我想任何一个接触到C语言的都不会陌生,但是说起main()函数有参数,你可能会产生很多疑问了。 首先,我们来看下msdn,这个里面对main()函数有详细的说明。在这里,我们可以看到main()函数其实是含有三个参数的,分别是int argc, char *argv[ ], char *envp[ ]这三个参数其实就是main函数的参数。在c的编译器中,一般是允许main函数是没

2016-04-03 15:17:45 1058

原创 关于linux新手常用命令

这些命令是最先看linux时常用的,现在来汇总下:1.切换用户 当使用su你可以在当前用户模式下切换到root模式,而你想要退出root时,输入exit命令即可。 2.显示日期的指令 当我们在命令行模式下,需要知道日期时,只需要键入命令 date 3.显示日历 在linux下,我们也可以用命令 cal 来查看日历。默认我们输出的是某一个月的。 4.计算器 采用命令 bc 我们可

2016-04-03 12:32:35 618

原创 关于源程序到可执行程序的过程

源程序,是指未经编译的,按照一定的程序设计语言规范书写的,人类可读的文本文件,我们通常理解为源程序就是我们所写好的代码。 可执行程序,我们常说的.exe程序,可以执行程序,完成计算机功能。在C语言中,.c文件就是所谓的源文件,接下来,我们剖析一下,源程序到可执行程序的过程。在这个过程中,会发生如下的变化:.c文件生成.obj文件的过程,我们称为编译,.obj文件生成到.exe文件的过程,我们称为链

2016-04-02 13:43:18 10269 1

原创 c语言小程序之三子棋小游戏的实现

在这里我们要写出一个三子棋的小游戏,能够实现所需要的三字连珠的功能,并且可以使得游戏让玩家进行选择是否继续的功能。#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<time.h>#define ROW 3#define COL 3void init_board(char arr[ROW]

2016-03-30 18:06:05 6698 2

原创 C语言之两矩阵乘法的实现

首先我们要清楚矩阵乘法实现需要满足的条件, 矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义[1] 。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。//关于任意两个矩阵的乘法运算//关于任意两个矩阵的乘法运算#include<stdio.h>#include<stdlib.

2016-03-26 20:56:46 19454 4

原创 C语言之清空缓存区

在C语言中,我们常常需要去清空缓存区,对于缓存区清空的重要性,接下来我们进行具体的说明。 首先我们先解释一下缓存区。1.缓存区C语言中的缓冲区又称为缓存,它是内存空间的一部分。   也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。     C语缓冲区分为三种类型:1、全缓冲 2、行缓冲 3、不带缓冲。   缓冲区根据其对应的是输

2016-03-19 22:33:11 89496 21

原创 C语言小编程之判断一个数是否是2的n次方的巧妙方法

今天我来分享一个判断一个数是否是二的倍数的巧妙方法: 代码如下:#include<stdio.h>int main(){ int num; scanf("%d", &num); while (num) { if (((num) & (num - 1)) == 0) printf("%d", num); bre

2016-03-17 22:30:57 9617 3

原创 C语言之谈谈存储类、链接。

C语言学习的一大难区就是内存管理,存储类,链接,我认识是对内存管理操作之前所必须要掌握的。 在我们大一学习C语言的时候,曾经碰见过一些关键字:static,extern,以及在单片机编程时遇到的register。 其实当我们对存储类,链接有了了解之后, 这些疑惑都会解决。 1.存储类 首先我们讨论存储类,存储类: 变量与函数的可访问性(即作用域范围scope)与生存期(life time)。

2016-03-16 20:30:21 1341

原创 C语言之动态分配内存

首先,我们应该知道,所有的程序都必须留出足够的内存空间来存储所使用的数据,所以我们经常会预先给程序开辟好内存空间,然后进行操作,但其实还有一种选择,能够让内存分配自动进行下去。对于传统数组,会遇到这样的问题:int arr[5] ;对这个数组我们在定义的时候必须给提前开辟好空间,并且在程序执行的过程中,这个开辟的内存空间是一直存在的,除非等到这个函数执行完毕,才会将空间释放。还有一个问题就是这个数组

2016-03-16 12:26:09 11193 2

原创 C语言编程之计算二进制数中1的个数

首先我们利用第一种方法,在这我们可以知道,我们从二进制最小位依次往上看。 例如:5的二进制是101,如果它的二进制最小位上是有数值得,这样我们就对他++,否则,我们就进行移位操作,这部操作当然也可以用除二来代替。 代码如下://写一个函数返回参数的二进制中1的个数#include<stdio.h>#include<stdlib.h>int count_one_bits(unsigned i

2016-03-15 22:30:46 11637 1

原创 C语言小编程之不创建临时变量,交换两个数的值

在这里我们既然不需要使用中间变量,那么我们就要对这里面进行一系列的思考,我们可以通过两个数的和和差进行判断。 例:比如我们给出两个数,num1=8和num2=7,首先对num1赋值num1=num1-num2,然后num2=num1-num2. 最后得出num1=num1-num2 代码如下://不创建临时变量,交换两个数的值#include<stdio.h>#include<stdlib

2016-03-14 22:58:43 1368

原创 C语言小编程之素数算法剖析

首先,我们在这里的问题是确定100-200之间的素数。 关于素数的分析: 首先我们先要明确一个概念,什么是素数,素数就是只能被1和它本身整除的数,在这,我们先要进行的就是提取出100-200的数,然后对这些数进行判断,如果是只有1和它本身可以整除,那么就输出,否则不输出。 代码如下:#include<stdio.h>#include<stdlib.h>int main(){ in

2016-03-13 22:13:26 1331

原创 C语言小编程之九九乘法表

在初学C语言中,我们会遇到很多九九乘法表的问题,在这我们进行一系列的分析。 九九乘法表的格式是x*x=x的格式。 接下来,我们要做的是利用循环结构,使得数量发生变化。在最后,要对乘法表的形状进行限定。 首先我们先进行,对 两个乘数进行循环。然后求积,最后输出,我们要打印传统的乘法表,那么我们就要对每一行进行切行,并且对所循环的进行限定。 代码如下://九九乘法表;#include<stdi

2016-03-13 20:40:57 77421 10

原创 C语言小编程之闰年判断

关于闰年的判断问题,首先我们要明确,什么称为闰年, 闰年的判断条件为: 1.能够被4整除却不能被100整除的数。 2能够被400整除的数。 所以我们可以将这两个条件作为if条件;然后轻易地判断出一个年份是不是闰年。 代码如下://3.判断1000年到2000年之间的闰年;#include<stdio.h>#include<stdlib.h>#include<assert.h>int

2016-03-13 19:38:43 16807 2

原创 浅谈大端小端

首先,关于这个问题,咱们先来探讨下什么是大端?什么是小端?关于大端:所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;关于小端:所谓的小端模式,是指数据的高位保存在内存的低地址当中,而数据的低位,保存在内存的高地址当中首先,我们要理解在内存中的地址是由低地址到高地址在这张图我们可以清楚的知道所谓的大小端问题,是大端还

2016-03-07 23:09:42 847

原创 3月6日C Primer Plus 读书笔记(第十章:指针)

向函数传递数组信息的方法:第一种是使用一个指针参量来确定数组的开始点,使用一个整数参量来指明数组的元素个数。第二种是传递两个指针,第一个指针指明数组的起始地址,第二个指针指明数组的结束位置。指向数组之后的第一个位置的指针也是有效的。但是如果超出了这个范围,后果是未知的。一元运算符*和++具有相等的优先级,但它在结合时时从右向左进行的。例:total+=*star

2016-03-07 12:56:01 696

原创 关于C语言中进制问题以及简单的浅谈进制转化问题。

对于一般学习中,最常见的就是4种,二进制,八进制,十进制以及十六进制。在大一的C语言学习当中,学校粗略的说了一下这些,最后导致好多人无法流畅的进行进制之间的转化,以及使用。在大一接触单片机以后更加发进制之间转化的一些规律等,现在来谈一下。1.关于十进制与二进制之间的转化。在这四种进制当中,最常用的就是十进制了,从我们开始学数学开始,一直用的就是十进制。二进制,就是0和1,这是机器能够读懂的

2016-02-05 10:52:45 3288 1

技术之瞳 阿里巴巴技术笔试心得 高清完整.pdf版下载

从别处花钱买来

2017-02-13

计算机科学导论

《计算机科学导论》是2009年机械工业出版社出版的图书,由佛罗赞编写。

2015-12-28

业余者用VC(MFC)编写串口调试助手

利用VC++6.0MFC做的串口助手,教程都在这里面。

2015-12-06

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除