自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 打印星号三角行

把要输出的三角行可以分成如下六个部分,每行分别输出每部分的内容,如下图所示:第一部分空格的循环范围,即空格个数: 1~n-i第二部分*的循环范围,即星号个数:1~2*i-1第三部分空格的循环范围,即空格个数:1~(n-i)*2第四部分*的循环范围,即星号个数:1~2*i-1第五部分空格的循环范围,即空格个数:1~(n-i)*2第六部分*的循环范围,即星号个数:1~2*i-1for (int i = 1; i <= n; i++) { for (int j = 1

2022-05-26 20:25:36 623

原创 空心六边形

可以将要输出的图形存在一个char类型的二维数组中,要先分析出图形的行数和列数行数=2n-1列数=n+2(n-1) int a = n + 2 * (n - 1); //列数 int b = 2 * n - 1; //行数根据图形的行数和列数,在二维数组中开辟一个行数×列数的空白区域(空白用空格来代替) //根据图形行数和列数,在二维数组中开一个行数×列数的空格区域 for (int i = 1; i <= b; i++) //遍历行 { for (int j = 1; j &

2022-05-26 18:52:10 1130

原创 求回文数个数

题目说明一个正整数,正读和反读都相同的数为回文数。例如22,131,2442,37073,6,…所有1位数都是回文数。给出一个正整数n(1≤n≤10000),求出1,2,…,n之中(包括1和n)的回文数的个数。输入格式任意给定一个正整数n(0 < n <= 10000 )输出格式一个正整数,表示[1,n]之间的回文数的个数。样例输入数据1325输出数据141思路n的范围是1到10000,10000不是回文数,所以用for循环判断从1~n每个数字按一位数、两位数

2022-05-26 14:19:41 3245

原创 输出m和n范围内的完全数(完美数)

题目说明任何一个自然数的约数中都有1和它本身,我们把小于它本身的因数叫做这个自然数的真约数。 如6的所有真约数是1、2、3,而且6=1+2+3。像这样,一个数所有真约数的和正好等于这个数,通常把这个数叫做完美数。 古希腊人非常重视完美数。毕达哥拉斯发现它之后,人们就开始了对完美数的研究。 现在要求输出所有在m和n范围内的完美数。输入格式输入只有一行,是两个整数,(2<=m<=n<=32767),中间用空格隔开。输出格式输出范围内的所有完全数,数与数之间用空格隔开。样例输入数

2022-05-20 20:29:41 1683

原创 求阶乘之和

题目如下说明N!=1 * 2 *… * N例5!=1 * 2 * 3 * 4 * 5=120编程求1!+2!+3!+…+N!输入格式输入一行,只有一个整数n(1<=n<=10)输出格式输出只有一行(这意味着末尾有一个回车符号),包括1个整数。样例输入数据13输出数据19思路首先要明白什么是阶乘,如:5的阶乘为:5!=1×2×3×4×5=1203的阶乘为:3!=1×2×3=6则N的阶乘为:N!=1×2×…×(N-1)×NN的阶乘求法:可以从for循环让变量

2022-05-20 16:28:39 204

原创 详解Condition的await和signal等待/通知机制

Object的wait、notify与Condition的区别?从整体上看,Object的wait、notify是与对象监视器配合完成线程间的等待/通知机制,是java底层级别的;而Condition是与Lock配合完成等待通知机制,是语言级别的,具有更高的可控制性和扩展性。(1)Condition能够支持不响应中断,而Object提供的wait方法不支持;(2)Condition支持多...

2020-02-26 17:12:29 1491

原创 深入理解Java多线程AQS及其底层实现

首先,为什么要理解AQS???因为同步组件(这里不仅仅指锁,还包括CountDownLatch等)的实现依赖于同步器AQS,即AQS是同步组件实现的核心部分。那么,AQS到底是什么呢???AQS(AbstractQueuedSynchronizer),简称同步器,是用来构建锁和其它同步组件的基础框架。AQS的组成可以理解如下图:要想掌握AQS的底层实现,我们就要学习这些模板方法,首先我们就...

2020-02-19 19:43:42 459

原创 【java】String类及其练习

一、String类字符串实例化直接赋值String str = "Hello Bit";传统方法(构造法)String str = new String("Hello Bit");这两种方法存在差异:直接赋值:只会开辟一块堆内存空间,并且该字符串对象可以自动保存在对象池中以供下次使用。构造方法:会开辟两块堆内存空间,其中一块成为垃圾空间,不会自动保存在对象池中,可以使用 i...

2018-12-27 17:17:44 310

原创 【java】面试题:请解释String类中两种对象实例化的区别

在叙述String类知识点的博客中提到了String实例化有如下两种方式:直接赋值String str = "Hello Bit";传统方法(构造法)String str = new String("Hello Bit");接下来将对这两种方法进行分析:1.直接赋值法请写出下述代码的输出: String str1 = "Hello"; String str2 = "Hell...

2018-12-27 16:45:33 428

原创 【java】字符串比较分析

在叙述String类知识点的博客中提到了字符串比较有如下两种方式:== 和 .equals()前者是比较变量所指向的值在堆空间上的内存地址值。后者是比较字符串的值。接下来将对上述两种方式进行分析:使用“==”比较字符串:有如下代码: String str1 = "Hello" ; String str = new String("Hello") ; System.out.pri...

2018-12-27 15:49:44 137

原创 【java】抽象类与接口小结

一、抽象类抽象类的定义与使用定义:抽象类只是在普通类的基础上扩充了一些抽象方法而已,所谓的抽象方法指的是只声明而未实现的方法(即没有方 法体)。所有抽象方法要求使用abstract关键字来定义,并且抽象方法所在的类也一定要使用abstract关键字来 定义,表示抽象类。定义一个抽象类:abstract class Person{ private String name ; // ...

2018-12-27 11:31:42 130

原创 阿里java校招笔试题——代码块中语句的执行顺序

下面是阿里java校招的一道笔试题,代码如下:public class HelloA { //构造方法 public HelloA(){ System.out.println(&amp;quot;Hello A!父类构造方法&amp;quot;); } //非静态代码块 { System.out.println(&amp;quot;i'm A class...

2018-12-26 18:09:56 811

原创 【java】面向对象编程——类与对象的继承和多态

一、代码块代码块定义:使用 {} 定义的一段代码。根据代码块定义的位置以及关键字,又可分为以下四种:普通代码块(定义在方法中,调试)构造块(定义在类中的(不加修饰符))静态块同步代码块构造块构造块在每次产生一个新的对象就调用一次构造块。构造块在构造方法前执行。静态块静态块优先于构造块执行。无论产生多少实例化对象,静态块都只执行一次。静态块的主要作用是对static...

2018-12-26 17:18:31 194

原创 在杨氏矩阵中查找一个数(C语言实现)

 分析:杨氏矩阵的特点是:这个矩阵中的数字从左到右是递增的,从上到下也是递增的。知道了这个特点就好写程序了。如有以下矩阵:  2 3 4 3 4 5  4 5 6   或没有对角线规律的杨氏矩阵:3  6   8  5  9  108 13 15  思路:输入要查找的数n,用n和这个矩阵的右上角元素比较,如果大于右上角...

2018-12-25 17:26:04 291

原创 C语言:输出乘法口诀表

 分析:要输出一个下三角形的乘法口诀表,如下图所示:要先定义两个变量 i、j,这里 i 作为乘数,j 作为被乘数,i 控制行输出,j 控制列输出,通过在输出函数printf中对结果进行设置来使列对齐。  代码如下:#include&lt;stdio.h&gt;int main(){ int i,j,k; for(i=1;i&lt;10;i++) { for(...

2018-12-25 17:25:41 7606 1

原创 【java】面向对象编程——类与对象的封装

Java比C更方便的地方在于Java是面向对象的。面向对象的特征:1、封装 ; 2、继承 ; 3、多态;以下对面向对象的封装特征进行简述:一、类与对象的定义与使用类是指共性的概念,对象是一个具体的、可以使用的事物。首先产生类,而后才可以产生对象。类的组成: 1. 方法(操作的行为) 2. 属性(变量,描述每个对象的具体特点)类的定义:class 类名称 { 属性1;...

2018-12-24 17:30:24 248

原创 【java】数组及相关练习

一、一维数组1、动态初始化声明并初始化数组:数据类型[ ] 数组名称 = new 数据类型 [长度] ; 如:int [ ] intArray = new int [ 3 ]; 分步进行数据初始化:int[ ] intArray = null; intArray = new int [ 3 ];数组开辟空间后,可进行如下操作:数组的访问通过索引来完成。同C数组...

2018-12-21 21:37:50 138

原创 用java实现基于字符的简易收银台系统

从整体上来说,这个简易系统分为以下四个部分:店主、顾客、关于、退出。各部分应该实现的功能如下图:整体框架代码public static Scanner reader = new Scanner(System.in);public static void main(String[] args) { Boolean condi = true; GoodsCenter.ini...

2018-12-04 21:26:03 1719

原创 【Linux】常用基本命令

文章目录一、基本命令二、文件操作命令三、压缩解压缩操作四、时间操作命令五、查找匹配操作命令六、其他命令在熟悉Linux常用基本命令之前,首先要掌握一些知识要点:Linux中以“ . ”开头的文件是隐藏文件。Linux下一切皆文件,而且Linux下并不以文件后缀名区分文件。Linux操作系统是一个多用户、多任务操作系统。Linux下的目录结构,是一个树形结构,最上层目录是根目录。绝对路...

2018-11-13 21:49:41 212

原创 【数据结构】双向带头结点循环链表

在之前我们写了不带头结点的单链表,但它在数据操作时也有繁琐之处,而双向带头结点循环链表则优化了单链表的操作,使链表更加方便。双向带头结点循环链表在单链表的基础上增加了以下几点:(1)在数据结构上附加一个域,使它存放指向前一个结点的指针;(2)增加了一个头结点,前驱指向链表的最后一个结点;(3)链表的最后一个结点指向头结点,使它构成一个循环链表。数据类型的定义typedef int Da...

2018-09-25 23:04:31 1455 1

原创 【数据结构】链表面试题升级版

1、复杂链表的复制复杂链表一个链表的每个结点,有一个next指针指向下一个结点,还有一个random指针指向这个链表中的随机一个结点或者NULL。现在要求复制这个链表,并返回复制后的新链表。思路如下:复杂链表的数据类型:typedef struct ComplexNode{ int data; ComplexNode *next; ComplexNode *...

2018-09-23 21:18:50 143

原创 【数据结构】链表面试题

1、倒序打印链表(1)非递归方式代码如下:void ReversePrint(ListNode **pFirst){ ListNode *last = NULL; ListNode *cur = NULL; assert(*pFirst != NULL); while(last != *pFirst) { cur = *pFirst; while(cur != NULL...

2018-09-20 14:51:49 166

原创 【数据结构】链表操作C实现

数据类型的定义typedef int DataType; typedef struct ListNode{ DataType data; struct ListNode *next; } ListNode;链表的初始化和销毁链表的初始化—–&gt;构造一条空链表 链表的销毁—–&gt;销毁每个结点//初始化void ListInit(Li...

2018-09-13 14:02:53 453

原创 【数据结构】静态、动态顺序表

静态顺序表顺序表的初始化和销毁打印顺序表查找二分查找增加数据尾插头插在指定位置插入删除数据尾删头删指定位置删除(下标删除)指定元素删除(数据删除)删除所有指定元素顺序表属性排序冒泡排序选择排序动态顺序表顺序表的初始化和销毁顺序表的打印增加数据静态与动态的比较静态顺序表数据类型的定义...

2018-09-11 18:54:17 507

原创 C代码实现扫雷小游戏

分析同三子棋小游戏一样,扫雷小游戏也分为如下思路: 头文件#ifndef __GAME_H__#define __GAME_H__#include &lt;stdlib.h&gt;#include &lt;time.h&gt;#include &lt;string.h&gt;#define ROW 9 //实际打印棋盘行数#define COL 9 //实际打...

2018-09-08 20:40:59 309

原创 C语言自定义类型:结构体、枚举、联合

结构体结构体的声明结构体的自引用结构体变量的定义和初始化结构体成员的访问结构体内存对齐修改默认对齐数结构体传参位段枚举联合(共用体)大小端问题联合和结构体巧妙使用结构体结构是一些值的集合,这些值成为成员变量。结构的每个成员可以是不同类型的变量。结构体的声明struct tag //结构体类型名{ mem...

2018-08-09 22:04:51 301

原创 模拟实现strncpy、strncat、strncmp长度受限制的字符串函数

模拟实现strncpy函数 char* my_strncpy(char *dest, const char *src,int num) my_strncpy函数有三个参数: dest类型为char*,用于接收目标字符串的首地址; src类型为const char*,用于接收源字符串的首地址; num类型为int,用于接收要改变的字符的个数。 函数返回类型为ch...

2018-08-08 22:16:22 278

原创 模拟实现strlen、strcpy、strcat、strcmp长度不受限制的字符串函数

模拟实现strlen函数模拟实现strcpy函数模拟实现strcat函数模拟实现strcmp函数模拟实现strlen函数实现strlen函数有三种方法:递归实现、非递归实现、指针-指针实现。 int my_strlen(const char *str) my_strlen函数有一个参数类型为const char*的形参,作为接收要计算的...

2018-08-08 21:59:09 876

原创 模拟实现qsort函数

回调函数在模拟实现qsort函数之前,我们先来了解一下回调函数。 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。C语言的库函数中的qsort函数就是使用回调函数实现的。让我们通过一段代码来了解一下qsort函数应该如何使用:#include &lt;stdio.h&gt;#incl...

2018-08-07 23:21:00 443

原创 用状态机实现C注释到C++注释的转换

分析:在进行从C注释向C++注释转换的过程中,我们应进行一下的分析: 首先,一个C源文件的内容应该包括四个部分:正常代码、C注释状态、C++注释状态、文件结束。其次,我们就可以对这四种状态下的遇到的情况进行进一步分析:正常代码:在程序执行起来时,我们会在文件中遇到正常代码,这些代码不需要做处理,直接写进输出文件中。但在这个过程中,如果遇到 “ / * ” 说明接下来的这部分内容是C注...

2018-08-07 19:52:51 380

原创 深入理解指针和数组、指针和函数

指针数组指针和数组的区别指针数组数组指针函数指针函数指针数组转移表指向函数指针数组的指针指针在了解了指针之后,可以得出,指针就是一个变量,用来存放地址的变量。地址就相当于门牌号,而指针就是存放它的变量,对指针进行解引用(*)则相当于拿一把钥匙去开对应的门牌号的门,打开门,访问其中的变量。指针的大小在32位平台上是4个字节,在64位平...

2018-08-03 22:30:14 210

原创 可变参数列表解析及模拟实现printf函数

可变参数列表解析及应用举例可变参数列表使用过程及注意事项模拟实现printf函数可变参数列表解析及应用举例可变参数列表可以通过将函数实现为可变参数的形式,可以使函数可以接收1个以上的任意多个参数且参数个数不固定。 我们可以通过一个求几个数的平均数的代码来了解:#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;stdarg.h&amp;gt;int...

2018-07-29 12:04:35 216

原创 函数栈帧

函数栈帧一些程序在完成它的功能时会或多或少调用一些函数,每一次函数调用都是一个过程,称之为函数的调用过程,在调用的过程中要在栈上为函数开辟空间,空间中存放着所需要的各种信息,这个空间称之为函数栈帧。 可以通过一段简单的代码深入了解函数栈帧:#include &amp;lt;stdio.h&amp;gt;int Add(int x, int y){ int z = 0; z = x ...

2018-07-28 21:06:04 302

原创 C语言实现在随机杨氏矩阵中查找一个数

分析:整体思路主要分为如下两部分: 主函数:int main(){ int arr[N][N] = {0}; int num = 0; int ret = 0; int sz = sizeof(arr)/sizeof(arr[0][0]); srand((unsigned int)time(NULL)); InitArr(...

2018-07-24 19:06:23 324

原创 三子棋、五子棋自定义棋盘的C代码实现

分析:整体思路如下:头文件#define __GAME_H__#define ROW 9//棋盘行数#define COL 9//棋盘列数#define NUM 5//五子棋void InitBoard(char board[ROW][COL],int row,int col);void PrintBoard(char board[ROW][COL],...

2018-07-11 23:40:42 1731 4

原创 scanf、getchar 和缓冲区在程序中如何执行

scanf、getchar 和缓冲区在程序中如何执行很多人在写完代码后执行程序时会遇到弹出黑框界面后又迅速消失的现象,解决这种问题的办法就是在代码结束部分加上 system(“pause”);这条语句,或者加上一句getchar();接下来从scanf、getchar、缓冲区来说明原因。首先,我们引入一个例子: 输入一串字符为密码,如果密码正确,确认密码,如果不正确,放弃确认。...

2018-06-08 23:20:26 735 2

原创 用欧几里得算法与Stein算法计算最大公约数

题目:求两个数的最大公约数分析:求最大公约数有两种普遍的方法:欧几里得算法与Stein算法。欧几里得算法:欧几里得算法即辗转相除法,它的方法是用较大的数去除以较小的数,上面的较小的数字和所得的余数构成新的一对数,接着继续用较大的数除以较小的数,继续上面的步骤,直到出现能够整除的两个数,其中较小的数(即被除数)就是要求的最大公约数。以求288和123的最大公约数为例,操作如下:     288÷12...

2018-05-31 23:14:46 657

原创 用冒泡法实现C的排序问题

题目:将一组数字按从大到小的顺序排序分析:要想对一串数字进行排序,就先要为它们创建一个空间来存放它们,我们可以创建一个数组来实现,如数组a[5]中存放了5个数字:38 57 20 89 18 它们在数组中的存储如图所示:用冒泡法来解决的思想是:先用a[0]和a[1]比较,如果a[1]比a[0]大, 就将a[0]和a[1]中的值交换,再用a[0]和a[2]、a[3]、a[4]依次比较,用同样的方法找...

2018-05-31 18:14:00 1322 1

空空如也

空空如也

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

TA关注的人

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