自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 问答 (1)
  • 收藏
  • 关注

原创 彩虹形成原理

彩虹形成原理本文摘自书籍《有趣的透镜》对于彩虹形成原理的探索,先从折射引起的散射开始吧!最先解释了彩虹发生的基本原理的是,前面提到的笛卡儿和牛顿。笛卡儿–光的折射笛卡儿提到了光的折射,在笛卡儿·斯涅尔定律中提到:入射角的正弦值和折射角的正弦值之比,是一个定值,且和入射角的大小无关。如下图,牛顿–光的色散牛顿提到了光的色散,他发现无色的太阳光通过三棱镜后,出现从红到紫连续变化的光的彩带现象。笛卡儿根据光的折射定律,从太阳光射入盛满水的球形玻璃这一实验入手,研究了彩虹的

2021-04-15 11:53:20 5889

原创 白平衡详解

了解不平衡一、背景在数码相机拍摄过程中,很多初学者会发现荧光灯的光在人眼看起来是白色的,但是用数码相机拍摄出来却有点偏蓝。同样,如果是在白炽灯下,拍出来的图像的色彩就会明显偏黄。人类的眼睛之所以把它们看成白色的,是因为人眼进行了修正。如果能够使相机拍摄出来的图像和人眼所看到的色彩完全一致就好了。这就涉及到数码相机的白平衡问题。二、概念白平衡,英文名称为White Balance。物体颜色会...

2019-09-16 18:12:41 6956

转载 贪吃蛇源代码

#include <stdio.h>#include <windows.h>#include <conio.h>#include <time.h>#define FrameX 4 //游戏窗口左上角的X轴坐标#define FrameY 4 //游戏窗口左上角的Y轴坐标#define Frame_height 20 //游戏...

2018-09-02 11:03:00 9945

转载 进程控制

进程创建 进程创建被定义为通过父进程创建子进程的过程。fork函数初识在Linux中fork函数是非常重要的函数,它从已经存在的进程中创建一个新的进程。新进程为子进程,而原进程为父进程。具体代码如下:#include<unistd.h>pid_t fork(void);#include<unistd.h>#include<stdlib....

2018-08-08 10:03:52 251

转载 Linux进程控制复习

进程控制1.进程创建进程创建是操作系统执行程序的需要或者用户或进程要求创建一个新的进程。一个父进程希望赋值自己,是父子进程同时执行不同的代码段。一个进程要执行一个不同的程序。1.1进程创建时机: 进程创建,是指操作系统创建一个新的进程。UNIX系统用fork()系统调用,而windows系统用CreatProcess()。(1)系统初始化。 系统的调度进程创...

2018-08-02 23:25:31 221

转载 进程间通信的几种方式复习

 进程间通信1. 进程间通信目的数据传输:一个进程将它的数据传给另一个进程 资源共享:多个进程共享同样的资源 通知事件:一个进程需要向另一个进程或进程组发送消息 进程控制:有些进程希望完全控制另一个进程的执行,此时控制进程希望能够拦截另一个进程所有的陷入和异常,并能够及时知道它的状态消息。 IPC对象数据结构 `struct ipc_perm{ key_...

2018-08-01 23:25:02 525

原创 进程间关系和守护进程复习

进程间关系和守护进程进程间关系 进程组 1.一个或多个进程的集合2.可以接受终端的各种信号,信号发送给进程组就等于发送给进程组中所有的进程3.每个进程组有一个唯一的进程组ID,组长进程的ID就是进程组的ID,进程组的创建从组长进程加入开始4.进程组的消亡要等到组中所有的进程结束5.kill -9 -进程组号 杀死进程组6.自动接收终端信号的组成为前台进程组7.除非是默...

2018-07-30 22:55:22 192

原创 各种排序算法复习

直接插入排序:(1)插入排序的基本方法是:每步将一个待排序的元素,按其排序码大小插入到前面已经排好序的一组元素的适当位置上去,直到元素全部插入为止。 (2)可以选择不同的方法在已经排好序的有序数据表中寻找插入位置,依据查找方法的不同,有多种插入排序方法。希尔排序:希尔排序(shell sort)这个排序方法又称为缩小增量排序。该方法的基本思想是:设待排序元素序列有n个元素,首先取一个...

2018-07-29 15:57:45 204

转载 GET和POST的区别???

GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。当你在面试中被问到这个问题,你的内心充满了自信和喜悦。你轻轻松松的给出了一个“...

2018-07-25 23:24:19 186

原创 socket API的基本用法和TCP协议通讯流程

socket APIint socket(int domain,int type,int protocol);       domain表示协议族:有AF_INET,AF_INET6,AF_LOCAL/AF_UNIX,AF_ROUTE       type表示套接字类型:有SOCK_STREAM(提供有序,可靠,双向,基于连接的字节流),SOCK_DGRAM(支持无连接          ...

2018-07-21 10:42:07 371

原创 浅谈HTTP协议和ARP协议

HTTP协议HTTP协议:属于应用层协议        1.格式:首行(方法+URL+版本号)+ Header(请求的属性,以冒号分割的键值对,遇到空行表示结束)+body(header中的conten_length标识其长度)        2. 方法:GET/HEAD:安全方法,因为他们的http请求不会产生什么动作,也就是说不会修改信息                      ...

2018-07-20 11:54:14 1359

原创 C++ 之 继承

 继承就像儿子遗传爸爸一样,爸爸有的很多特点,儿子会继承下来,在生物学上来讲,这部分是基因决定的。然后儿子还会增加一些自己的特点,这些特点是爸爸没有的,这些特点又可以遗传给自己的儿子,。在生物学上来讲,这部分是由环境决定的。所以一个人的性状是由先天的基因和后天的环境共同决定。C++里的继承和以上理论如出一辙,不能说完全相同,但是与很多相似点,也就是说,一个派生类的内容是由它的基类和本类的内...

2018-05-14 16:43:11 225

转载 C++动态内存管理

内存    谈到C语言动态内存管理,我们先要知道什么是内存,它的大概布局是什么样子。    BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。 BSS节不包含任何数据,只是简单的维护开始和结束的地址,即总大小,以便内存区能在运行时分配并...

2018-05-06 10:59:00 219

转载 运算符重载和友元

运算符重载之前介绍过函数重载,所谓重载,就是重新赋予新的含义。函数重载就是对一个已有函数赋予新的含义,使之实现新的功能。运算符也可以重载,实际上,我们已经不知不觉使用了运算符重载。例如,大家都已经习惯用加法运算符“+”对整数、单精度数和双精度数进行加法操作,由于C++中对运算符“+”进行了重载,使“+”能适用于int,float,doouble类型的不同的运算。对运算符重载的函数有两种处理...

2018-05-01 18:12:10 1462 1

转载 引用,this指针,构造与析构

引用:曾经,我们把引用这个词作为一般意义上的动词使用,如“引用一个变量”,它的含义相当于“使用”或者“调用”。而我们这里说的引用不是一个动词,而是c++中一个专名名词,有特定的含义。 对一个数据可以建立一个“引用”,它的作用是为一个变量其一个别名。这是C++对c的一个重要扩展。加入有一个变量a,想给他起一个别名b,就可以这样写:int a;//定义a的整型变量int &b...

2018-05-01 17:15:12 260

原创 C++:简单说说类和对象

类与对象的概念程序设计所面对的问题域——客观世界,是由许多事物构成的,这些事物既可以是有形的(比如一辆汽车),也可以是无形的(比如一次会议)。把客观世界中的事物映射到面向对象的程序设计中就是对象。对象是面向对象程序设计中用来描述客观事物的程序单位。客观世界中的许多对象,无论其属性还是其行为常常有许多共同性,抽象出这些对象的共同性便可以构成类。所以,类是对象的抽象和归纳,对象是类的实例。C结构体...

2018-04-12 22:52:43 191

转载 popen&system

popen进程I/O函数,与pclose配合使用。函数说明 popen() 函数通过创建一个管道,调用 fork 产生一个子进程,执行一个 shell 以运行命令来开启一个进程函数原型FILE* popen ( const char* command, const char* type );int pclose ( FILE* stream )参数说明 type 参数只能是读或者写中的一种,得到...

2018-04-06 14:43:53 223

原创 Linux基础6--封装fork函数

#include<stdio.h>#include<sys/types.h>#include<unistd.h>int process_create(int(*func)(),const char *file,char *argv[]){ int ret = 0; pid_t pid = fork(); ...

2018-04-06 13:58:08 243

原创 Linux基础6--MyShell

#include<stdio.h>#include<stdlib.h>#include<sys/wait.h>#include<string.h>#include<ctype.h>#include<unistd.h>void do_shell(int argc,char *argv[]){ p...

2018-04-06 11:48:55 217

原创 Linux基础6--进程控制

1.进程的创建,等待,终止 创建:fork()函数从已存在的进程中,创建一个具有独立地址空间的新的进程。新进程被称为子进程,而原进程为父进程。函数原型:pid_t fork(void);返回值:fork有两个返回值,子进程中返回0,父进程返回子进程id;出错返回-1。fork之后,父进程与子进程共享代码,但数据各自私有一份。fork常规用法: 1.父进程创建子进程,父子进程同时执行不同的代码段。所...

2018-04-06 11:25:26 200

原创 Linux基础5--环境变量

基本概念    环境变量 一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:我们在编写c/c++代码时,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量在帮助编译器进行查找,环境变量通常具有某些特殊用途,还有在系统中通常具有全局特性常见环境变量    PATH*:指定命令的搜索路径    HOME*:指定用户的主工作目录...

2018-04-05 13:09:26 165

原创 Linux基础4--进程概念

1.进程的调度算法: 1.FCFS(first come first served):先来先服务,在它执行过程中,不会被中断。 2.轮转(Round_Robin):以一个周期性间隔产生时钟中断,当前正在运行的进程被置于就绪队列,基于FCFS选择下一个就绪进程运行。每个进程被分配一个时间段,按照在队列中的顺序交替执行;不利于处理紧急作业。 3.SPN/SJF:最短进程优先,对预计时间短的进程优先分配...

2018-04-02 17:14:48 205

原创 函数重载&缺省参数

一.函数重载&缺省参数1.重载函数     首先我们来看一段非常简单的代码:  #include<iostream>using namespace std;版本较老的编译器,头文件会加上.h,我这里因为编译器的不同,没有加.h。为了能够使用标准库,我们还需要加上using namespace std; int Add(int a,int b){ ...

2018-03-31 23:16:12 763

转载 Linux基础3

1.调研Linux下软件安装的几种方式(源码安装, rpm安装, yum安装).(1)源码安装几乎所有的开源软件都支持在Linux下运行,而这些软件一般都以源码形式发放,只需要Linux安装了gcc、make、automake、autoconf都支持源码安装。①源码安装的方式1、cd 源码所在目录 2、./configure [opts] 3、make 4、make install②源码安装...

2018-03-28 22:31:39 130

转载 linux基础2

1.除了vim, 还有哪些常用的牛逼的编辑器, 并能够横向对比编辑器之间的区别和优缺点. 1.gedit   gedit无需多言,Linux各个发行版默认都有的编辑器,类似于Windows的记事本,不过可以根据代码类型着色,这点可比记事本牛逼多了,不过我一直没有搜索到如何配置gedit才能让他显示行号和改变tab为4个空格,所以不是迫不得已不会用gedit编辑正式文件。2.Light...

2018-03-28 22:03:26 152

转载 Linux基础

Linux基础:1.进入目录需要哪些权限,在目录中进行增删改查(cd,touch,rm,mv等)改文件动作,需要哪些权限。 1)基本权限    1.读(r/4):read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览(cd)该目录信息的权限    2.写(w/2):write对文件而言,具有修改文件内容的权限;对目录来说,具有移动删除(touch,rm,mv)目录内文件的权限    3....

2018-03-24 12:26:58 169

转载 结构体、位段、枚举、联合

结构体,是一个包含不同类型元素的集合。它和数组很像,数组是相同类型元素的集合。1.结构体的声明 例如描述一个学生:struct stu{ char name[20]; int age; char sex[3]; char id[20];};//分号不能丢特殊的声明: 在声明结构的时候,可以不完全声明。struct{ int a; char b

2017-11-25 21:50:51 282

原创 高级指针

1.指针数组int *p[10];这就是指针数组,首先它是一个数组,这个数组里面装了10个指针。2.数组指针 int (*p)[10]; 这是数组指针,它是一个指针,一个指向数组首元素的指针。区别和理解: 很多初学者对这两个东西的概念弄的不是很清楚,要是学了一阵子又很久不学,下次再看见,又不知道哪个是所以哪个了,所以要想真正记住他们,我们还必须理解记忆。这两个表达式中,唯一的不同就是数组指针多

2017-11-19 13:15:09 203

原创 函数的可变参数列表

在C语言编程中,有时候会遇到一些参数个数可变的函数,例如printf()函数,其函数原型为: int printf(const char* format,...); 它除了有一个参数format固定以外,后面的参数的个数和类型都是可变的(用三个点“…”做参数占位符),实际调用时可以有以下的形式:printf("%d",i);printf("%s",s);printf("the number

2017-11-11 13:21:53 692

原创 函数的调用过程(栈帧)

我们研究一下函数的调用过程,首先看一段简单的代码:#include<stdio.h>int add(int x,int y){ int z = 0; z = x + y; return z;}int main(){ int a = 10; int b = 20; int ret = add(a,b); printf("ret = %d\n

2017-11-01 23:17:19 409

原创 调整数组使奇数全部都位于偶数前面

输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。对于一个数组,要调换它的奇数位和偶数位的话,我们有很多种方法,我这里呢想到了两种简单易懂的方法,也是让初学者易于接受的方法。我着重描述第二种方法吧。有什么不合理的地方呢,还请大家受累指教! 方法1. 在给出了一个已知的数组后,我们再 定义一个新的数组,用来存

2017-10-28 18:02:43 677

原创 扫雷

扫雷总体上,我们需要5个函数来实现这个游戏,初始化函数、显示函数、设雷函数、雷数目函数、扫雷函数。 1.初始化函数void init_board(char mine[ROW][COL], char show[ROW][COL]){ int i = 0; int j = 0; for (i = 1; i < ROW - 1; i++) { for (

2017-10-23 17:24:38 483

原创 三子棋

三子棋 在这个程序里面总共包含了5个子函数,和一个main函数。接下来逐个分析一下每个函数的构建思路。 1.初始化函数。 该部分函数主要对棋盘内的9个空格进行赋值,一般情况下我们把它们设为空格,这里我把它设为‘0’,不是空格也无大碍。这是很简单的一部分,只需要些两个for循环就可以把初始化完成。 对于传参这部分,需要把数组board传进去,因为我们要用数组对棋盘进行初

2017-10-23 16:55:45 565 1

原创 数组的小结

数组总结一.定义在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序列排列的同类型数据元素的集合称为数组。也就是说,数组是有序数据的集合。二.分类1.一维数组(1)定义:    一维数组通常指只有一个下标的数组元素所组成的数组    其中:    1)数据类型可以是任何基本类型。    2)数组名定名规则和变量名相同

2017-10-14 23:11:01 328

原创 写一个函数,实现数组的赋值 清空 和逆置

1.要求写一个函数,要实现一个数组的赋值 清空和逆置。2.思路:1)赋值如果要用函数实现,我们可以用一个循环,依次将若干数输入到一个数组中,这样子就实现了赋值2)清空这里我不太清楚是不是将数组里的数变成0,还是将其清空到什么也没有,如果是什么也没有,也可以用循环,循环内部执行的命令就是输出一串空格,如果是变成0,利用1)中的原理赋值为0即可3)逆置要从数组的

2017-10-11 21:22:54 713

原创 写一个函数,判断素数

1.要求:实现一个函数,判断它是不是素数2.思路:素数就是除了2和它本身,其他数都不能整除这个数。可以写一个循环,让该数除以2到该数的算术平方根,为什么要用算术平方根呢,这里是为了减少那些含有相同因数的数造成的重复运算,接下来,如果能被整除,直接跳出循环,输出不是素数,如果一直除到算术平方根,都不能整除,那这个数就是素数,输出是素数!3.代码#include

2017-10-11 20:41:17 7637

原创 分享:实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定

要打印一个表,那么首先要清楚一个表包含行和列,这里就很容易想到用两个循环,依次打印出行和列的值。现在,我们要求用一个函数将它封装起来,让我们可以对任意一个数,进行若干行列的口诀表打印。我们可以用下面的代码:#include#includevoid mean(){printf("**************\n");printf("输出口诀表\n");printf

2017-10-11 18:30:01 783

原创 操作符小结

一 定义操作运算符就是一个命令编译器对一个或多个操作数执行某种运算的符号。二 分类C语言的操作符非常丰富,在C语言中运算符的数量之多也是很少见的,正是丰富的运算符使C语言功能十分完善,这也是C语言的主要特点之一。它们不仅有不同的优先级,而且具有结合性。在表达式中,各运算量参与运算的顺序不仅要遵守操作符优先级别的规定,还要受运算符结合性的制约,以便确定是自左向右运算还是自右向左运

2017-10-06 15:04:15 348

原创 在有序数组中,找一个数字

#includeint main(){    int arr[]={1,2,5,7,9,12,13,45,55,60};int key=12;int left=0;int right=sizeof(arr)/sizeof(arr[0])-1;while(left{int mid=left+(right-left)/2;if(arr[mid]==key){

2017-09-27 14:00:04 352

原创 非常简单的猜数字游戏

#include//#include void game(){   int i=50;while(1){   int gue;   printf("please enter your number:\n");        scanf("%d",&gue);if(gue{printf("猜小了。\n");}else if(gue>i){

2017-09-27 13:57:59 824

空空如也

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

TA关注的人

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