自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++ 智能指针——简单实现以及循环引用问题

1:智能指针的发展历史? 2:auto_ptr/scoped_ptr/shared_pr/weak_ptr的设计思想、缺陷? 3:模拟实现auto_ptr/scoped_ptr/shared_pr/weak_ptr 4:分析循环引用及解决方案。一.智能指针及其发展史什么是智能指针呢?       现阶段的智能指针(smart pointer)的一种通用实现技术,是使

2017-08-03 19:58:57 933

原创 C++ 中为什么模板不支持分离编译?

1:分析为什么模板不支持分离编译?

2017-08-03 08:27:53 404

原创 多态&多态对象模型

一.什么多态? 1.定义:    多态按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。   多态性在Object Pascal和C++中都是通过虚函数实

2017-07-26 16:53:27 421

原创 C++中的 菱形继承

1:分析菱形继承的问题。 2:剖析虚继承是怎么解决二义性和数据冗余的。首先,我们介绍什么是菱形继承:

2017-07-20 20:15:36 386

原创 (String)引用计数写的拷贝

1、(怎么引入的)概念:因为浅拷贝的缺陷,所以在这个时候我们就引入了引用计数的拷贝。     【说明】:引用计数的拷贝是用来解决浅拷贝存在的问题的,所以它也是一种浅拷贝2、如何实现:我们为每个内存的字符数组添加一个引用计数pcount,即就是在构造函数申请空间的时候多申请出来4个字节。表示有多少个对象使用这块内存,有多少个对象使用,就让pcount值加1,当对象被析构的时候,让pcou

2017-07-12 12:43:55 342

原创 关于C++对传参和传返回值时的优化处理

1.先总结C++对传参合传返回值时构造的优化处理。 2.再完成下面的题目。 Test1中调用了___次AA的拷贝构造函数,___次AA的赋值运算符函数的重载。 Test2中调用了___次AA的拷贝构造函数,___次AA的赋值运算符函数的重载。 Test3中调用了___次AA的拷贝构造函数,___次AA的赋值运算符函数的重载。 class AA {}; AA f (AA

2017-07-03 00:38:21 424

原创 关于malloc/free && new/delete

point of division1:总结并剖析malloc/free和new/delete之间关系和差异。 2:剖析new/delete、new[]/delete[]到底做了些什么事情。 3:实现NEW_ARRAY/DELETE_ARRAY宏,模拟new[]/delete[]申请和释放数组。                                             

2017-07-02 23:02:48 391

原创 类和对象(四个默认成员函数+运算符重载)

point of division   1.类和对象的基础知识,如类的定义,访问限定符,面向对象封装性,对象的大小计算等等   2.四个默认成员函数及运算符重载相关知识    3.隐含的this指针等等,及对运算符重载背后做的事情1.类和对象的基础知识①类的定义:    类是对某种类型的对象变量和方法的原型。类是从一些具有相同属性或功能的具体实例,抽象出共有的一些属

2017-06-24 19:55:51 768

原创 C++ 入门知识

知识点:1.命名空间 2.C++基本的输入输出流(简单介绍一下就行) 3.重载(C++为什么支持重载?) 4.C++缺省参数 5.指针和引用(概念、使用方法、做参数、做返回值的作用,指针和引用的区别)1.命名空间 : namespace    namespace,即“命名空间”,也称“名字空间”。VS.NET中的各种语言使用的一种代码组织的形式通过名称空间来分类

2017-06-18 16:44:06 387

原创 关于C单链表的面试题(进阶题)

1.判断单链表是否带环?若带环,求环的长度?求环的入口点?并计算每个算法的时间复杂度&空间复杂度。 2.判断两个链表是否相交,若相交,求交点。(假设链表不带环) 3.判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】 4.复杂链表的复制。一个链表的每个节点,有一个指向next指针指向下一个节点,还有一个random指针指向这个链表中的一个随机节点或者NULL,现在要求

2017-06-18 11:59:01 328

原创 关于C单链表的面试题(基础篇)

question:1.比较顺序表和链表的优缺点,说说它们分别在什么场景下使用? 2.从尾到头打印单链表 3.删除一个无头单链表的非尾节点 4.在无头单链表的一个节点前插入一个节点 5.单链表实现约瑟夫环 6.逆置/反转单链表 7.单链表排序(冒泡排序&快速排序) 8.合并两个有序链表,合并后依然有序 9.查找单链表的中间节点,要求只能遍历一次链表 10.查找

2017-06-09 20:37:46 321

原创 写一个宏可以将一个数字的奇数位和偶数位交换

如何交换一个数字的奇数比特位和偶数比特位呢?1.首先,要想办法得出奇数为和偶数位由 与(&) 的特性可知:任何数 &1等于它本身,0&任何数都为0。所以要得出奇数位 :给奇数位都&1,偶数位都&0                         即 :num&0101 0101 0101 0101 0101 0101 0101 0101             

2017-04-13 13:39:58 918

原创 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同

两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同? 输入例子:1999 2299输出例子:7 解决这个问题,需要两个知识点:(1)异或:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。(2)一个数和这个数减一,按位与(&),可以去掉二进制中最右面的"1"。    即,     十进制          二

2017-04-10 12:32:20 915 1

原创 创建一个数组, 并实现函数 init(),empty(), reverse()

创建一个数组并实现函数:        init()初始化数组        empty()清空数组        reverse()完成数组元素的逆置#include void init(int a[],int sz){ int i = 0; for (i=1; i<=sz; i++) { a[i] = i; printf("%d ",a[i]); }}

2017-04-08 16:44:27 1279

原创 扫雷

Magical experience !!!用C语言编写小游戏——扫雷整体思路:程序主要通过两个大小相同的二维字符数组完成,其一为布雷数组(mine[ ][ ]),其二为显示数组(show[ ][ ])。(1)布雷数组:                    在此数组内,字符('0')代表没有雷,字符('1')代表有雷,这样便于后面对雷区分布的统计。先用字符('0'

2017-04-07 18:22:49 591 1

原创 数组相关的运算(sizeof,strlen)

sizeof  strlensizeof():简单的说其作用就是返回一个对象或者类型所占的内存字节数。strlen():用来计算指定的字符串s 的长度,不包括结束字符"\0"。1)一维数组int main(){ int a[] = {1,2,3,4};  printf("%d\n",sizeof(a));      //16 整个数组大小 printf(

2017-04-04 22:37:24 391

原创 冒泡排序

冒泡排序其基本思想就是不断比较相邻的两个数,让较大的元素不断地往后移。经过一轮比较,就选出最大的数;经过第2轮比较,就选出次大的数,以此类推。#include #include #define N 8void bubble_sort(int a[],int n){ int i = 0; int j = 0; for(i=0; i<n-1; i++) { for

2017-04-04 01:53:29 389

原创 三子棋

用C语言实现,三子棋。整个程序大体由三部分组成,分别是game.h , game.c , test.c game.h

2017-04-03 23:47:18 448

原创 推理日本谋杀案的问题

日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。A说:不是我。B说:是C。C说:是D。D说:C在胡说已知3个人说了真话,1个人说的是假话。现在请根据这些信息,写一个程序来确定到底谁是凶手。程序如下:#include int main() { int sup = 0; for (sup =

2017-04-02 23:32:07 411

原创 5位运动员参加了10米台跳水比赛的问题

5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果A选手说:B第一,我第三。B选手说:我第二,E第四。C选手说:我第一,D第二。D选手说:C最后,我第三。E选手说:我第四,A第一。比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。首先,由分析知,这五位选手一定存在并列名次。其次,关于名次的颁排,应该服从一,二,三...这样连续排列名次。程序如下:

2017-04-02 23:12:10 446

原创 编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现

#include int main(){ int count = 0; int ch = 0; while((ch=getchar()) != EOF) { if(ch == '{') { count++; } else if(ch == '}') { if(count > 0) count--; else if(count == 0)

2017-03-31 20:31:44 355

原创 求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字

#include int main() { int a = 0; int n = 0; int sum = 0; int i = 0; int ret = 0; printf("请输入a的值与相加相的个数n的值 :\n"); scanf("%d",&a); scanf("%d",&n); for(i=0; i<n; i++) { ret = re

2017-03-31 20:25:06 638

原创 求出所有“水仙花数”并输出

#include #include int main(){ int i = 0; int sz = 0; printf("请输入查询的范围,即最大值 sz = "); scanf("%d",&sz); for(i=1; i<=sz; i++) { int count = 0; int tmp = i; int sum = 0; while(tmp) {

2017-03-31 20:11:21 690

原创 在屏幕上用"*"输出菱形图案

方法一:先计算菱形中最长"*"的个数,通过交换字符的方法来输出图案。void step1(int left,int right){ char arr1[] ="*************"; char arr2[] =" "; while((left>1)&&(right<12)) { arr2[left] = arr1[left]; arr2[rig

2017-03-31 19:50:31 1301

原创 折半查找

#include int binary_search(int arr[], int key){ int mid = 0; int left = 0; int right = 0; scanf("%d%d",&left,&right); while(left<=right) { mid = left-(left-right)/2; if(arr[mid]>key)

2017-03-26 11:13:28 319

原创 猜数字游戏

#include #include #include void menu(){ printf("##############################\n"); printf("####### 1.play 0.exit #######\n"); printf("##############################\n");}void game(){ in

2017-03-26 11:11:25 462

原创 编写程序数一下 1到 100 的所有整数中出现多少次数字9

#include int main(){ int i = 0; int k = 0; for(i = 1; i < 100; i++) { if(i%10 == 9) { k++; } if(i/10 == 9) { k++; } } printf("%d\n",k); return 0;}

2017-03-25 19:06:56 2547

原创 输出一个整数的每一位

#include #include int main(){ int i = 0; int num = 0; scanf("%d",&num); while(num != 0) { i = abs(num%10); printf("%d ",i); num = num/10; } return 0;}

2017-03-25 19:01:24 302

原创 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值

#include #include int main(){ double i = 0; double sum = 0; for(i = 1; i <= 100; i++) { sum = sum + 1/i * pow(-1,i-1); } printf("%lf\n",sum); return 0;}

2017-03-25 18:58:57 1155

原创 编写一个程序,可以一直接收键盘字符,如果是小写字符就输出对应的大写字符,如果接收的是大写字符,就输出对应的小写字符,如果是数字不输出

#include int main(){ int ch = 0; while((ch = getchar())!= EOF) { if(ch >= 'a' && ch <= 'z') { printf("%c\n",ch - 32); } if(ch >= 'A' && ch <= 'Z') { printf("%c\n",ch + 32); } e

2017-03-25 18:56:05 395

原创 编写代码模拟三次密码输入的场景

#include int main(){ int i = 0; int password[] = {0}; for(i = 1; i <= 3; i++) { scanf("%s",password); if(strcmp(password,"123456") == 0) { break; } else { printf("密码错误,请重新输入\n")

2017-03-24 19:57:46 81

原创 求两个数的最大公约数

#include int main(){ int x = 0; int y = 0; int num1, num2, temp; printf("请输入两个正整数:\n"); scanf("%d %d", &num1, &num2); if(num1 < num2) { temp = num1;

2017-03-24 16:33:18 193

原创 将三个数按从大到小输出

#include void Swap(int* px, int* py){ int tmp = *px; *px = *py; *py = tmp;}int main(){ int a = 0; int b = 0; int c = 0; int t = 0; scanf("%d%d%d",&a,&b,&c); if(a<b) { Swap(&a, &b);

2017-03-24 16:25:24 390

原创 获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列

#include int main(){ int num = 0; int i = 0; scanf("%d",&num); printf("奇数位:"); for(i = 30; i >= 0; i -= 2) { printf("%d ",(num >> i)&1); } printf("\n偶数位:"); for(i = 31; i >= 1;

2017-03-24 16:20:36 229

原创 将数组A中的内容和数组B中的内容进行交换(数组一样大)

#include int main(){ int arr1[5]={0, 1, 2, 3, 4}; int arr2[5]={5, 6, 7, 8, 9}; int i = 0; for(i = 0; i < sizeof(arr1)/sizeof(arr1[0]); i++) { arr1[i] = arr1[i] ^ arr2[i]; arr2[i] = arr1[i] ^

2017-03-24 15:54:49 297

转载 C语言中printf格式详解

printf的格式控制的完整格式: % - 0 m.n l或h 格式字符 下面对组成格式说明的各项加以说明: ①%:表示格式说明的起始符号,不可缺少。 ②-:有-表示左对齐输出,如省略表示右对齐输出。 ③0:有0表示指定空位填0,如省略表示指定空位不填。 ④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。对数值型的来说,未

2017-03-21 18:28:40 764

转载 按位与、或、异或等运算方法

按位与运算符(&)参加运算的两个数据,按二进制位进行“与”运算。运算规则:0&0=0;   0&1=0;    1&0=0;     1&1=1;       即:两位同时为“1”,结果才为“1”,否则为0例如:3&5  即 0000 0011& 0000 0101 = 0000 0001   因此,3&5的值得1。 另,负数按补码形式参加按位与运算。“与运算”的特殊用

2017-03-21 18:25:34 427

原创 写一个函数返回参数二进制中 1 的个数

写一个函数返回参数二进制中 1 的个数#include int count_one_bits(unsigned int value){ int count = 0; while(value) { if(value%2 == 1) { count++; } value = value/2; } return count; } int ma

2017-03-20 22:02:48 365

原创 求10 个整数中最大值

求10 个整数中最大值#include int main(){ int arr[10]; int i, j, max; for(i = 0; i < 10; i++) { scanf("%d",&arr[i]); } max = arr[0]; for(j = 1; j < sizeof(arr)/sizeof(arr[0]); j++) { if(arr[j] > m

2017-03-20 21:36:33 401

原创 不允许创建临时变量,交换两个数的内容

不允许创建临时变量,交换两个数的内容#include int main(){ int a = 10; int b = 20; a = a ^ b; b = a ^ b; a = a ^ b; printf("a= %d b = %d\n", a,b); return 0;}

2017-03-20 21:32:55 328

空空如也

空空如也

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

TA关注的人

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