- 博客(70)
- 收藏
- 关注
原创 Linux下的延迟函数sleep()
Linux下c语言中的延迟函数sleep()的用法#include <stdio.h>int main(){ printf("hello\n"); sleep(1); //延迟1秒 printf("world\n"); return 0;}windows下 sleep(1000) 代表延迟1秒,因为sleep的参数为毫秒, 而在Linux下 sleep的参
2017-06-05 11:22:37 77059 4
转载 C语言趣味程序设计编程百例精解
C/C++语言经典、实用、趣味程序设计编程百例精解(1) 1.绘制余弦曲线 在屏幕上用“*”显示0~360度的余弦函数cos(x)曲线 *问题分析与算法设计如果在程序中使用数组,这个问题十分简单。但若规定不能使用数组,问题就变得不容易了。关键在于余弦曲线在0~360度的区间内,一行中要显示两个点,而对一般的显示器来说,只能按行输出,即:输出第一行信息后,只能向下一行输出,不能再返回到上一行
2017-05-28 22:47:20 21125 3
原创 C++编程规范(参考华为编程规范)
第八章新增8、类型转换使用C++风格的类型转换,而不是C语言的类型转换8.1、static_cast 和C风格转换相似可做值的强制转换。 上行转换(把派生类的指针或引用转换为基类的指针或引用),该转换经常用于消除多重继承带来的类型歧义,是相对安全的。 下行转换(把基类的指针或引用转换为派生类的指针和引用),由于没有动态类型检查,是不安全的。8.2、dy...
2019-08-30 11:43:42 3436
原创 用C++编写的在Vs 2010上开发的项目:银行管理系统(一)
这几天一直在构思银行管理系统的项目,这个项目是基于C++开发的,其主要功能有以下几点:登录界面:职员登录,退出 主菜单中包括:1、客户开户 2、存款 3、取款 4、转账 5、查看账单明细及转账记录 6、修改密码 7、销户 8、退出等。由于这是在Windows下开发的项目,其中涉及到Windows下的网络通信和线程的知识,所以首先我对此做了一些了解,相比于Linux下的网络编程,Windo
2017-08-13 23:41:05 4728 2
转载 C++标准库中sstream与strstream的区别详细解析
C++的sstream标准库介绍 接下来我们继续看一下C++风格的串流控制 ,C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件。istringstream类用于执行C++风格的串流的输入操作。 ostringstream类用于执行C风格的串流的输出操作。 strstream类同时可以支持C
2017-08-10 23:23:06 5673
原创 C++中的函数
一、函数声明 1、函数返回值 在C中,函数没有返回值,可不指定,C编译器会自动指定为int类型。C++中必须明确指定返回值类型,没有返回值用void表示,同时声明函数时可以省略参数名。如:void fun(int,float); 2、函数参数 C++中,函数没有参数可以不写,但建议把参数写为void。如:void fun(void); 3、函数的定义 C++中,任
2017-08-02 17:42:57 520
原创 C++基本知识整理(2)
1、构造函数 C++中定义了一种特殊的初始化函数,称为构造函数;当对象被调用时,构造函数自动调用;构造函数名字与类名相同,也没有返回类型和返回值;对象在生成过程中通常需要初始化变量或分配动态内存,用构造函数。 程序中可以没有构造函数,这时会执行一个空的构造函数。 下面来看构造函数实例:#include <iostream>using namespace std;clas
2017-07-16 19:52:13 381
原创 Linux下TCP协议的C/S架构实现
首先自定义一个头文件,其中包括一些API函数和宏定义。#ifndef _MYHEAD_H_#define _MYHEAD_H_#include <stdio.h>#include <fcntl.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/so
2017-07-09 22:48:35 490
原创 C++基本知识整理(1)
**在C++编程中using namespace std;这条语句很常见,其中,namespace就是命名空间,而using是声明,std是命名空间名。 命名空间就是为了解决C++中函数变量的命名冲突所采取的一种措施,能够解决多模块协同开发出现变量函数命名的冲突问题。** 1、using声明及作用域 using namespace name::name; 一旦使用using声明,就可以直接
2017-07-06 22:35:53 378
原创 数据库存储通讯录,实现“增删改查”
/************************************************************************* > File Name: addressbook.c > Author: hhp > Created Time: 2017年07月04日 星期二 14时34分43秒 ******************************
2017-07-04 19:22:40 491
原创 利用递归求n的阶乘
#include <stdio.h>unsigned func(unsigned i)//定义阶乘函数是无符号型的,带一个无符号型的参数。{ if (0 == i || 1 == i) { return 1; } else { return i * func(i - 1);//此处为递归调用,调用自身。 }}int
2017-07-03 20:59:47 1502
原创 C/C++面试题:自定义字符串函数strlen()
/*************************************************************************> File Name: mystrlen.c > Author: hhp> Created Time: 2017年06月30日 星期五 17时31分33秒 ********************************
2017-07-02 21:34:13 400
转载 linux下的几种进程间通信方式的特点
linux上面的IPC大多都是从UNIX上面继承而来。 最初Unix IPC包括:管道、FIFO、信号。System V IPC包括:System V消息队列、System V信号灯、System V共享内存区。由于Unix版本的多样性,电子电气工程协会(IEEE)开发了一个独立的Unix标准,这个新的ANSI Unix标准被称为计算机环境的可移植性操作系统界面(PSOIX)。现有大部
2017-06-25 19:54:41 537
转载 Linux下网络编程实现UDP
一、引言 UDP是TCP/IP协议中的传输层协议的一种,本文介绍了在Linux下编写基于UDP协议的Client/Server模型的程序的方法,并给出了一个echo Client/Server例子程序。 二、UDP协议简介 UDP是一种简单的传输层协议,在RFC768中有详细描述。UDP协议是一种非连接的、不可靠的数据报文协议,完全不同于提供面向连接的、可靠的
2017-06-24 23:10:21 659
转载 Linux下的静态库与动态库
库在windows和Linux下都存在着大量的库,库是什么呢?本质上来说,库时一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有什么用呢?我们通常将一些公用函数写成函数库,所以库是别人写好的,现有的,成熟的,可以服用的代码,你可以使用但要必须得遵守许可协议。在我们现实开发过程中,不可能每一份代码都从头编写,当我们拥有库时,我们就可以直接将我们所需要的文件链接到我们的程序中。可以为我们节省
2017-06-23 22:03:37 343
转载 TCP和UDP的区别
TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信!TCP/IP协议是一个协议簇。里面包括很多协议的。UDP只是其中的一个。之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了。TCP/IP协议集包括应用层,传输层,
2017-06-22 20:46:23 264
转载 TCP/IP协议基本概念
为什么会有TCP/IP协议在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别。就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样。计算机使用者意识到,计算机只是单兵作战并不会发挥太大的作用。只有把它们联合起来,电脑才会发挥出它最大的潜力。于是人们就想方设法的用电线把电脑连接到了一起。但是简单的连到一起是远远不够的,就好像语言不同的
2017-06-21 22:33:06 2081
转载 ubuntu中安装man手册查看函数原型
前几天看书,看到用man命令可以查看C语言库函数的函数原型,就今天试了试。可是不行。提示没有我要查找的那个条目。上网搜解决方案。原来ubuntu中man的手册默认没有装。用下面几条命令就行了: sudo apt-get install manpages sudo apt-get install manpages-de sudo apt-
2017-06-20 12:56:56 775
转载 生产者/消费者模式(阻塞队列)
生产者/消费者模式(阻塞队列) 生产消费者模式 貌似也是阻塞的问题 花了一些时间终于弄明白这个鸟东东,以前还以为是不复杂的一个东西的,以前一直以为和观察者模式差不多(其实也是差不多的,呵呵),生产消费者模式应该是可以通过观察者模式来实现的,对于在什么环境下使用现在想的还不是特别清楚,主要是在实际中还没使用过这个。 需要使用到同步,以及线程,属于多并发行列,和观察者模式的差异也就在于此吧,所以实现起来
2017-06-19 21:27:39 231
转载 SQL数据库基本操作
一、数据库及数据库表定义 1、创建基本表 create table <表名> (<列名><数据类型>[列级完整性约束条件] [,<列名><数据类型>[列级完整性约束条件] ………
2017-06-18 22:53:47 287
原创 各种变量与零值的比较
1、布尔(bool)变量与零值比较 不可将布尔变量直接与TRUE、FALSE或者1、0进行比较。 根据布尔类型的定义,零值为“假”(记为FALSE),任何非零值都是“真”(记为TRUE)。TRUE的值是什么并没有统一标准。例如,Visual C++将TRUE定义为1,而Visual Basic则将TRUE定义为-1。 假设布尔变量名字为flag,它与零值比较的标准if语句为
2017-06-17 16:42:31 786
原创 枚举变量enum的大小
我们可以通过下面一个小程序来判断枚举变量的大小。#include <stdio.h>int main(){ enum color { GREEN = 1, RED, BLUE, GREEN_RED = 10, GREEN_BLUE }colorval; printf("%d %d %d\n
2017-06-16 18:44:51 3485
转载 Linux进程间通信方式之信号(signal)
信号是Linux所使用的进程间通信的最古老的方式。它是在软件层次上对中断机制的一种模拟,是一种异步通信的方式 。一个完整的信号周期包括三个部分,信号的产生,信号在进程中的注册,信号在进程中的注销,执行信号处理函数。如下图所示:注意:这里信号的产生,注册,注销时信号的内部机制,而不是信号的函数实现。对信号的响应由三种方式:1、忽略信号,即对信号不做任何的处理。处SIGKILL和SIGSTOP除外。
2017-06-15 22:28:30 806
转载 进程间通信
程序员必须让拥有依赖关系的进程集协调,这样才能达到进程的共同目标。可以使用两种技术来达到协调。第一种技术在具有通信依赖关系的两个进程间传递信息。这种技术称做进程间通信(interprocess communication)。第二种技术是同步,当进程间相互具有合作依赖时使用。这两种类型的依赖关系可以同时存在。一般而言,进程有单独的地址空间。我们可以了解下可执行程序被装载到内存后建立的一系列映射等理解这
2017-06-13 22:57:20 198
转载 Ubuntu设置屏幕分辨率
在ubuntu14.04虚拟机上修改自定义大小的桌面屏幕分辨率,使用的命令:cvt,xrandr0、首先查看下当前已经提供的分辨率设置:xrandr -qroot@xxx:/home/xxx/Desktop# xrandr -qScreen 0: minimum 1 x 1, current 1504 x 768, maximum 8192 x 8192Virtual1 connected p
2017-06-12 22:25:59 1376
转载 Linux文件操作
文件是Linux中的一个重要概念。在linux中,一切(几乎一切)都是文件。简单的说,C中基本的的printf()函数,scanf()函数,其实都属于文件操作。对于文件操作,虽然都是通过函数调用的方式实现,却还是能分为两类:系统调用和库函数。这篇文章将先介绍linux中文件的概念,系统调用和库函数的概念 ,然后具体的讨论两种方式下的文件操作。博文的主要内容如下:Linux 中的文件文件访问-库函数文
2017-06-11 20:04:32 192
原创 无名管道pipe的使用
有名管道pipe函数:int pipe(int filedes[2]); 下面程序通过创建进程,父进程写入数据,子进程读取数据,从管道中读取数据。#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <string.h>int main(){ int fd[2]
2017-06-10 22:10:36 498
转载 进程与线程的区别关系
1.定义进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.2.关系一个线程可以创建和撤销另一个线程;
2017-06-09 22:06:42 181
转载 进程与线程
【描述】线程和进程是一个老生常谈的话题,线程和进程的区别和优缺点有哪些?线程最多可以开多少个?【解析】1 区别 线程是CPU调度的最小单位,进程是资源分配的最小单位。进程是线程的容器,真正完成代码执行的是线程,而进程则作为线程的执行环境。在32位的Windows操作系统中,系统要为每一个进程分配私有的232=4GB的虚拟地址空间。但实际上只有2GB的空间被用户分区使用,另外2GB空间被用于内核代码、
2017-06-08 23:14:56 206
转载 进程控制
进程的控制大概包括进程创建、进程执行和进程终止,附加有进程的属性。进程标识符每个进程都有一个唯一的ID,它是一个非负整数。进程ID可以重用,当进程终止后,UNIX一般通过延迟重用算法,使得赋予新进程的ID不同于最近终止进程的ID。系统中有些专用ID。ID为0的通常是调度进程,也被称为交换进程(swapper),它是内核的一部分,不执行磁盘上的任何程序,也被称为系统进程。ID为1的通常是init进程
2017-06-07 22:25:09 177
转载 二叉树遍历非递归实现
一. 前序遍历: 前序遍历按照“根结点-左孩子-右孩子”的顺序进行访问。 递归实现: [cpp] view plain copy //递归实现前序遍历 void pre_order_traversal(BTreeNode* root) { if(NULL != root) { printf(”%c, ”, ((Node*)root)-
2017-06-06 20:56:02 303
原创 Linux系统调用实现文件复制
#include <stdio.h>#include <fcntl.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>int main(int argc, char *argv[]){ int fd1, fd2; int count, count2; char buffer[1024] =
2017-06-04 22:35:18 2597
原创 库函数实现文件复制
#include <stdio.h>#include <string.h>int main(int argc, char *argv[]){ char *ptr; if (argc != 3) { printf("Usage: %s file1 file2\n", argv[0]); return 1; } FILE* fp1
2017-06-03 23:21:03 656
转载 C语言单链表的3种排序算法,插入排序,冒泡排序,选择排序
//插入排序stu *view_sort_math(stu *head) { struct student *first; struct student *t; struct student *p; struct student *q; first = head->next; head->next = NULL;
2017-06-02 14:32:53 3952 1
转载 数据结构(栈--两个队列实现)
当看到用两个栈实现队列以后,大家有没有兴趣用两个队列实现一个栈呢,呵呵!现在就来介绍用两个队列实现一个栈。 如图这里介绍队列的常用操作:l 创建栈l 销毁栈l 清空栈l 压栈l 出栈l 返回栈顶元素l 返回栈的大小代码总分为三个文件:QStack.h : 放置功能函数的声明,以及表的声明 QStack.c : 放置功能函数的定义,以及表的定义Main.c : 主函数
2017-06-01 22:47:24 277
转载 数据结构(队列--两个栈实现)
单纯的用线性表或者单链表实现队列已经不足为奇,现在给大家介绍个有特色的,用两个栈实现队列。 如图 这里介绍队列的常用操作:l 创建队列l 销毁队列l 清空队列l 入队l 出队l 返回队首元素l 返回队的大小代码总分为三个文件:SQueue.h : 放置功能函数的声明,以及表的声明 SQueue.c : 放置功能函数的定义,以及表的定义Main.c : 主函数,使用功能函数完成各种需
2017-05-31 22:26:37 208
转载 二叉树遍历
今天来介绍下二叉树的4种遍历方式,如果对二叉树不熟悉的话,请先去本系列二叉树的介绍中先学习。 遍历:单链表的遍历是指从第一个结点开始(下标为0的结点),按照某种次序依次访问每一个结点。 二叉树的遍历是指从根结点开始,按照某种次序依次访问二叉树中的所有结点。 OK,下面就分别介绍前序遍历,中序遍历,后序遍历,层次遍历 代码:[cpp] view plain copy void
2017-05-30 22:33:44 218
转载 高快省的快速排序
高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比基准数
2017-05-29 21:47:52 472
转载 数据结构之二叉树
既然树已经熟悉了,那我们就来学习学习二叉树吧,二叉树是由n(n>=0)个结点组成的有限集合,该集合或者为空,或者是由一个根结点加上两棵分别称为左子树和右子树的﹑互不相交的二叉树组成。 如图 有两个定义需要大家知道下:1.满二叉树 如果二叉树中所有分支结点的度数都为2,且叶子结点都在同一层次上,则称这类二叉树为满二叉树。2.完全二叉树 如果一棵
2017-05-27 22:29:30 245
原创 尼科彻斯定理
验证尼科彻斯定理,即:任何一个整数的立方都可以写成一串连续奇数的和。*问题分析与算法设计本题是一个定理,我们先来证明它是成立的。对于任一正整数a,不论a是奇数还是偶数,整数(a×a-a+1)必然为奇数。a×a-a+1 = (a-1)xa + 1;奇数乘偶数必为偶数,在加上1,就是奇数了。构造一个等差数列,等差数列前n项和Sn = na1 + n(n-1)d/2数列的首项为(
2017-05-26 21:07:42 3405
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人