- 博客(40)
- 收藏
- 关注
原创 Sql(sublime text )
数据类型1.整形 tinyint (-127-128) unsigned (0-255) 1-2=-1,会变成bigint型,很大的数 所以不要使用无符号整形 2.bite(M)位字段类型,M指定位数,默认值为1,范围1-64(A)bit类型存储到mysql中默认表示为ASCII显示bit(1)约定数据,只能存放0或1,节省空间 3.float(m,d)[unsigned...
2018-09-21 08:40:33 2792
原创 拍照赚钱APP
背景原因当今时代网络的快速发展使得互联网自主服务成为流行趋势,“拍照赚钱”是移动互联网下的一种自助式服务模式。用户下载APP,注册成为APP的会员,然后从APP上领取需要拍照的任务,赚取APP对任务所标定的酬金。这种基于移动互联网的自助式劳务众包平台,为企业提供各种商业检查和信息搜集,相比传统的市场调查方式可以大大节省调查成本,而且有效地保证了调查数据真实性,缩短了调查的周期。因此APP成为该...
2018-09-17 01:55:09 6689
原创 串
串的实现方法有定长顺序串、堆串和块链串。定长顺序串仅在做串插入、串连接和串置换时会出现串值序列的长度超过MAXSIZE,将丢弃超过MAXSIZE部分的字符序列。 1.串插入三种情况,复杂度O(原有串长度+要插入的串长度) 串的next数组https://blog.csdn.net/iamyvette/article/details/77433991 https://blog.csdn...
2018-09-17 00:55:35 329
原创 排序算法
数据结构复习一—–排序算法 这是数据结构中有的相关的排序算法插入类排序直接插入类排序将第i个记录插入已经排好序的i-1个元素中,每次依次比较和移动,i从2-n(第一个视为已经排好序的元素),保留一个key存放array[i]的数据,以防数据大的元素后移使会覆盖掉要插入的数据。 每次只要找到比要插入的数据大的数据就交换两个元素的位置代码块vo...
2018-09-02 16:42:14 256
原创 继承体系下派生类对象模型(单继承、多继承、菱形继承、虚拟继承、菱形虚拟继承)
一、赋值兼容规则 1.子类对象可以赋值给父类对象。反之则不成立。 这是因为你可以将子类看做父类的一个对象,在通俗点,子类中拥有父类的数据,可以将其赋给父类,可是父类中并不包含子类中拥有的自己的独立数据,所以赋值不了给子类。 2.父类的指针/引用可以指向子类对象 这是因为父类想找一块和自己相似的地址空间,而子类中存在父类中的所有,这是可以指向。而子类想要一块和自己...
2018-08-27 11:40:03 279
原创 Linux下Git-Github构建
血泪经验啊安装gitCentos7 wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpmrpm -ivh epel-release-latest-7.noarch.rpmyum install -y git Centos6.5安装 http://www.cnblogs.com/...
2018-08-26 10:37:55 171
原创 IO
阻塞IO只要内核没有将数据准备好,系统的调用就会一直等待,所有的套接字,都是阻塞方式。 非阻塞式IO如果内核还未将数据准备好, 系统调⽤用仍然会直接返回, 并且返回EWOULDBLOCK错误码. 非阻塞IO往往需要程序员循环的方式反复尝试读写⽂文件描述符, 这个过程称为轮询. 这对CPU来说是较⼤大的浪 费, ⼀一般只有特定场景下才使⽤用. 信号驱动IO利用SIGIO信...
2018-08-02 00:08:40 298 1
原创 基于UDP的服务器和客户端之间的通信
一、socket 网络套接字创建函数原型:int socket(int domain, int type, int protocol);参数说明: domain:协议域,又称协议族(family)。常用的协议族有AF_INET、AF_INET6、AF_LOCAL(或称AF_UNIX,Unix域Socket)、AF_ROUTE等。协议族决定了socket的地址类型,在通信中必须采用对应的地址,如AF...
2018-07-13 14:50:38 18837
原创 类中默认成员函数的继承方法
一、什么是继承? 它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,成为派生类。简单来说,就是父子继承关系,你从你父亲继承了某些东西,而你在你父亲的基础上又扩充了相关的功能特性,构成了你自己。你自己就是一个子类,也就是派生类。 在对派生类做介绍之前,先了解一下继承权限的问题。简单给大家做一个总结。 继承分为三类:公有继承(public)、保护继承(prote...
2018-05-15 21:44:43 3345
原创 用C++封装双向循环链表(class)
#include<iostream>using namespace std;typedef int DataType;struct Node //结点{ Node* _pNext; Node* _pPre; DataType _data; Node(const DataType& data = DataType()) //创造新结点 : _pNext(NULL) , _...
2018-04-26 22:27:51 270
原创 双向循环链表(C语言)
一、seqlist.h#ifndef __SEQLIST__#define __SEQLIST__typedef int DataType;typedef struct DCLNode{ struct DCLNode* _pNext; struct DCLNode* _pPre; DataType _data;}Node, *PNode;void DCLInit(PNode* ppHead); ...
2018-04-26 20:02:08 733
原创 用深拷贝的方法封装动态顺序表(构造、拷贝构造、赋值、析构、尾插/删、任意位置插入/删除、扩容等)
#include<iostream>using namespace std;#include<assert.h>typedef int DataType;class SeqList{public: SeqList(size_t capacity = 10) //给容量一个缺省值10 构造函数 :_array(new DataType[sizeof(D...
2018-04-26 15:35:42 230
原创 String类中浅拷贝、深拷贝普通版/简洁版、引用计数、写时拷贝及相关应用
1.完成一个String类,类中只给构造函数和析构函数,拷贝构造函数和赋值运算符重载在使用编译器提供默认的,当调用拷贝构造函数创建对象,或用对象给对象进行赋值,看看会出现什么问题#include<iostream>using namespace std;#include<string.h>class String{public: String(const char* str...
2018-04-25 23:32:12 167
原创 析构函数为什么不能显示调用?
今天和大家分享一个我在定义类的析构函数时,发现不能显示的调用我定义的析构函数,这是为什么呢??#include<iostream>using namespace std;#include<string.h>class String{public: String(const char* str = "") { if (str == NULL) { _str = new...
2018-04-25 10:09:18 3396 1
原创 动态内存管理(C语言和C++中)
一、 C语言动态内存管理1.堆上开辟空间(malloc,calloc,realloc)首先了解一下三者的函数原型。void *malloc(size_t size); malloc()在内存的动态存储区中分配一块长度为size字节的连续区域。参数size为需要的内存空间的长度,返回该区域的地址。并且没有初始化内存的内容,因此基本上malloc之后,调用函数memset来初始化...
2018-04-24 23:13:47 1188
原创 C++类和对象
在介绍类之前先一下引用得到相关知识。int a=10;int &ra=a;上述的代码即为引用。a和ra的地址相同,可以通过修改ra来修改a的值。特点:1.引用变量必须进行初始化。2.一个变量可以有多个引用(还可以加int &b=a)3.引用一旦引用一个实体,再不能引用其他实体(int c=10; int &ra=c【错】)函数中用引用...
2018-04-13 17:03:02 153
原创 Linux进程控制
一、学习进程创建, 等待, 终止. 使用代码实现. 1.进程的创建的一般过程a. 给进程分配一个标识符(操作系统为每个进程分配一个独一无二的编号,这个编号成为进程标识符),在内核中分配一个PCB(进程是程序的一次动态执行的过程,要对进程的信息进行维护,就需要相应的数据结构,对应着C语言的结构体,这个结构体叫PCB--->Process Control Blcok,,PCB是操作系统感知进程...
2018-04-06 17:07:11 211
原创 linux进程概念
一、 调研进程的调度算法.先来先服务 (FCFS,first come first served) 在所有调度算法中,最简单的是非抢占式的FCFS算法。 算法原理:进程按照它们请求CPU的顺序使用CPU.就像你买东西去排队,谁第一个排,谁就先被执行,在它执行的过程中,不会中断它。当其他人也想进入内存被执行,就要排队等着,如果在执行过程中出现一些事,他现在不想排队了,下一个排队的就补上。此时如果他又...
2018-04-01 09:38:46 367
原创 linux开发工具
一、自行查找资料, 调研除了vim, 还有哪些常用的牛逼的编辑器, 并能够横向对比编辑器之间的区别和优缺点.1.vimVim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。2.eclipseEclipse是一款很酷的开源代码编辑器,同时它也是最受程序员亲睐的代码编辑器之一,它拥有代码...
2018-03-30 17:13:32 482
原创 linux部分指令
一.进入目录需要哪些权限, 在目录中执行增删查(cd, touch, ls, rm, mv等)改文件动作, 需要哪些权限. 1.进入目录需要那些权限 r-------->读权限 w------->写权限 x-------->执行权限其次可以通过chmod来增删权限,其指令如下 chmod u/g/o/a +/- r/w/x创建...
2018-03-30 15:56:31 188
原创 数据结构中静态顺序表的初始化、尾插、尾删、头插、头删、任意位置的插入及删除
(1)test.h中的代码#ifndef _TEST_H_#define _TEST_H_#define MAX_SIZE 10typedef int datetype;typedef struct seqlist{datetype arr[MAX_SIZE];int size;}seqlist,*pseqlist;void initseqlis
2017-12-04 00:19:49 1513
原创 sscanf\sprintf\fread\fwrite
1.sscanf的用法 定义函数int sscanf (const char *str, const char * format.........); 其函数表示会将参数str的字符串根据参数format字符串来转换并格式化数据。转换后的结果相应存在对应的参数中。其应用如下:(1)取指定长度的字符串,例:取长度为3字节的字符串。#define _CRT
2017-11-27 22:58:37 198
原创 自定义类型(结构体、位段、枚举和联合)
结构体常用于数据的大体模板相同,但具体的内容不同。例如:学生的信息都包括学号,姓名,年龄等信息,但是每个学生的信息的内容不同。这时就要用到结构体的创建。1.定义结构体变量(以学生信息为例)struct stu{ char name[20]; int age;}student;也可以用struct stu student;来定义结构体变量。当然也可
2017-11-21 23:11:43 684
原创 关于指针和数组
1.指针数组形如int *arr[10]的类型,指针数组可以简单理解为存放指针变量的数组。2.数组指针形如int (*)arr[10]的类型,数组指针可以简单理解为指向数组的指针。就上面所介绍的两种类型来看,有一种较为简单的记忆方法,看*和[]谁先和arr接触,若是先和*接触,即为数组指针,若是先和[]接触,即为指针数组。3.函数指针形如int (*)cmp(void *,
2017-11-16 23:48:44 146
原创 根据printf函数来讲解可变参数
在C语言中常用printf函数输出各种类型的数值,而且输出的参数可多可少,这就涉及到了可变参数函数的定义。 在此模拟实现printf函数,可完成下面的功能,能完成下面函数的调用。 print("s ccc d.\n","hello",'b','i','t',100); 函数原型: print(char *format, ...) 代码如下:#define _CR
2017-11-08 22:37:27 699
原创 函数的调用过程,栈帧的创建和销毁
在此,主要为大家介绍一下函数调用的过程,以及函数调用与栈帧的关系。以下为在visual c++ 6.0 下实现的函数调用,具体程序如下:进行反汇编,如下图:该过程为形成main函数的栈帧过程,利用call指令指向下一条指令的地址,然后跳转到add函数的地方。如下图;进入add函数,如下图:该过程是在main函数栈帧的基础上,再形成add函数的栈帧,接
2017-11-05 01:22:11 223
原创 宏
1.宏和函数的区别 宏参数只是做简单的字符串替换,而函数是有参数类型的。 宏在编译之前进行,即先用宏体替换宏名,然后再编译的,而函数显然是编译之后,在执行时才调用的。因此,宏占用的是编译的时间,而函数占用的是执行时的时间。 如果是较为短小的宏,在程序中的实现会比函数容易,但如果是较为长的宏,每次调用宏时都要将宏原份做字符串替换,所以会显得重复,这是就显得函数较为好用了
2017-10-26 22:55:54 219
原创 3.熟悉预处理标识符: __LINE__ __FILE__ __DATE__ __TIMRE__
下面为大家简单介绍一下这些表示符__FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义简单在linux环境下编译一下,如下图:执行结果如下图:简单说一下__S
2017-10-26 22:43:16 395
原创 1.2.在linux环境实践,使用vim编写一个程序,然后使用gcc查看【预处理】、【编译】、【汇编】、【链接】各阶段文件的内容。并熟悉相关指令。
在linux环境下简单编写一个输入0-9的小程序,给大家演示一下linux下的【预处理】【编译】【汇编】【链接】首先,在vim的编辑器下写一个简单的小程序,如下图:然后使用预处理选项 gcc -E test.c -o test.i指令,将预处理之后的结果放在test.i中,结果如下图:然后使用gcc -S test.c -o test.s指令将编译之后的结果放在test
2017-10-26 21:07:16 1156
原创 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果 A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二; D选手说:C最后,我第三; E选手说:我第四,A
#define _CRT_SECURE_NO_WARNINGS#include #include #include int main() {int a = 0, b = 0, c = 0, d = 0, e = 0;for (a = 1; a{for (b = 1; b{for (c = 1; c{for (d = 1; d{for
2017-10-14 17:24:52 771 1
原创 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯 的一个。以下为4个嫌疑犯的供词。 A说:不是我。 B说:是C。 C说:是D。 D说:C在胡说 已知3个人说了真话,1个人说
#define _CRT_SECURE_NO_WARNINGS#include #include #includeint main() {int k = 0;for (k = 'A'; k {if ((k != 'A') + (k == 'C') + (k == 'D') + (k != 'D') == 3)printf("凶手是%c\n", k)
2017-10-14 10:09:02 470
原创 用C语言打印杨辉三角
#define _CRT_SECURE_NO_WARNINGS#include #include #includeint main() {int i = 0, j = 0,k=0, arr[10][10] = { 0 };for (i = 0; i for (j = 0; j {arr[i][0] = 1;arr[i][i] = 1;}
2017-10-14 09:24:41 252
原创 完成猜数字游戏。
在这里,给大家简单奉上一个小游戏的程序,无聊的时候可以编一下。#define _CRT_SECURE_NO_WARNINGS#include #include#includevoid menu(){printf("*******欢迎来到猜字游戏*******\n");printf("*******1.play 0.exit*******\n");prin
2017-10-11 22:04:24 1087
原创 实现一个函数判断year是不是闰年。
#define _CRT_SECURE_NO_WARNINGS#include #include int runnian(int i){return(((i % 4 == 0) && (i % 100 != 0)) || (i % 400 == 0));}int main() {int i = 0;printf("请输入要判断的年份");scanf
2017-10-11 22:01:46 899
原创 实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定, 输入9,输出9*9口诀表,输出12,输出12*12的乘法口诀表。
#define _CRT_SECURE_NO_WARNINGS#include #include #includevoid koujuebiao(int x,int y){int i, j;for (i = 1; ix; i++){for (j = 1; jy; j++)printf("%d*%d=%d ", i, j, i*j);printf("\
2017-10-11 21:59:49 678
原创 创建一个数组, 实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置。 要求:自己设计函数的参数,返回值。
#define _CRT_SECURE_NO_WARNINGS#include #include #includevoid init(int a[],int count){int i = 0;printf("数组长度为%d\n",count);printf("请输入初始化的数值\n");for (i = 0; i <count; i++){sca
2017-10-11 21:43:10 229
原创 用函数实现两个数的交换(指针)
#define _CRT_SECURE_NO_WARNINGS#include #include void swap(int *pa,int *pb){int tmp = *pa;*pa= *pb;*pb = tmp; }int main() {int a = 0, b = 0;printf("请输入要交换的两个数\n");scanf(
2017-10-11 21:29:24 10661
原创 C语言整数的二进制偶数位,奇数位和二进制序列的输出
相信大家在学习完位移操作符之后,一定很好奇数据的二进制数据是怎样的呢,今天我便教大家学习用C语言输出整数的二进制数位的偶数位,奇数位和二进制序列。#define _CRT_SECURE_NO_WARNINGS#include #include int main() {int i = 0, j = 0, a[16] = { 0 }, b[16] = { 0 },num=
2017-10-09 15:46:07 642
原创 C语言操作符
在这里,为初学C语言的小伙伴们介绍几种基本的操作符。希望对大家的学习有所帮助! 1.算数操作符 “+(加)”,“-(减)”,“*(乘)”,“/(除)”,“%(取余)”,在此着重介绍“%”取余操作,简单举个实例,12%5=2,但是,要注意符号的两侧必须为整形数据。 2.移位操作符 “>(右移)”,移位针对的是2进制数。其中右移分为两种情况:算数右移和逻辑右移,算数右
2017-10-09 14:18:06 357
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人