- 博客(51)
- 收藏
- 关注
原创 (c++)函数的引用语法、使用、函数调用作左值
需要注意的是,代码中的test2()函数经过执行后,再次调用就可以将test2()这个函数当成s_a这个变量了。//引用的用途:可以利用引用用形参修饰实参,引用的语法比指针操作地址更加简单易懂。//1.不要返回局部的引用 2.如果函数返回的是引用,则这个函数调用可以作为左值。
2024-10-22 12:42:47 191
原创 (c++)在堆区创建一个数组并且访问与释放
/new int[10]代表在堆区开辟一段10个长度的整型数组并且返回这个数组的首地址。//int* arr=new int[10] 代表创建一个指针来指向这个首地址。在堆区创建一个数组,然后利用一个指针指向这个数组的首地址,通过这个指针来访问这个数组。在堆区创建数组的语法:对应的变量类型* 指针名=new 变量类型[数组长度]释放堆区中的数组的语法:delete[] 指针名。点击任意键后开始重新手动给这个数组赋值。2.利用循环结构(和1原理一样)1.直接利用数组访问赋值。赋值中........
2024-10-01 00:53:47 281
原创 (c++)内存四区:1.代码区2.全局区(静态区)3.栈区4.堆区
/ 在栈区的有:1.局部的(变量或常量) 注:1.函数形参也是局部的 2.main()函数内创建的变量也是局部变量 3.不要返回局部变量的地址,函数结束后,局部变量的空间就自动释放了,没有权限再操作这块内存空间。// 放在全局区的有:1.全局的(变量或常量) 2.静态的(变量或常量) 3.字符串常量。在创建各种变量、常量、局部的、全局的、静态的,然后访问他们的内存地址。显然只要是带“全局”或者“静态”的都在一起,还有字符串常量也是。只要是带“局部”的也都放在一起。//放在代码区的有:写的代码。
2024-09-30 23:05:36 329
原创 (c++)结构体数组的创建和元素访问(指针访问和.访问)
代码创建了结构体student,可以理解为定义了一个自己使用的“关键字”student。然后创建了s1[ ]这个结构体数组,s2这个结构体变量,分别通过.访问(变量名访问)和->访问(指针访问)来介绍结构体变量和结构体数组的赋值和访问。结构体就是自己定义的数据类型,和int double char 的区别就是后者是这种语言自带的,而结构体是我们自己定义的,使用方法上和后者没什么大的区别。
2024-09-23 19:32:38 256
原创 (c++)线程的创建、互斥锁的使用、线程数组
但是线程可能在cpu分配的一个时间片中做不完10万次+1的操作,这时候cpu会被其他线程抢占,由于num1++不是一个原子操作(操作过程中可能会发生中断),导致++其实没有做完,所以num1的最终结果会小于100万。2.创建10个线程,每个线程都做10万次全局变量num2++操作,与前者不同的是,这次对num2++操作加入互斥锁,也就是让num2++成为一个“原子操作”(操作过程不会被中断),所以结果符合预期为100万。
2024-09-20 20:43:57 291
原创 (c++)函数的分文件编写
3、如果需要在main函数里面调用自己写的函数,需要在main()函数的那个cpp文件里面包含#include"_func.h" (注意这里是双引号而不是尖括号,双引号代表是自己写的头文件),相当于告诉编译器我用的函数在这里面,然后就可以正常调用自己写的函数了。2、在源文件里面创建一个.cpp文件来写函数的定义,也就是函数的具体是实现,但是要将函数的具体实现和“1、”里面的函数声明联系起来,需要在这个.cpp文件中包含头文件#include"_func.h"以下是_func.h文件中的内容。
2024-09-16 16:14:54 373
原创 (c++)break和continue的功能介绍
break跳出循环语句或者switch语句,continue用于循环语句中,continue后循环中的代码不执行而是直接跳转到下一次循环。
2024-09-16 02:18:18 117
原创 (批处理)设置延时+设置关机倒计时
如果想要解除关机可以win+R,打开cmd,输入shutdown -a 回车,然后就解除关机了。使用方式:建立一个文本文件夹,将文件扩展名改为.bat,右键单击后编辑,将代码复制进去。建议尝试时候保存其他未保存的文件,防止出错没有解除自动关机。到达这里之后再点击任意按键就会提示还有1分钟关机。文件建立和上面第一个一样。按下任意键便可以解除。
2024-09-16 02:00:03 306
原创 (批处理)无限弹窗cmd
echo off 作用是让执行的代码不显示,这个不是注释,这是一个开关,差不多意思是关掉代码显示。文件扩展名不会改的自己百度,有些电脑的文件扩展名是默认隐藏了的,需要在文件加打开(自己百度,很好搜)本来加了pause是有“按任意键继续的”,但是在pause后面加了 >nul,就会将这个文本提示隐藏。我并没有继续下去,因为再点击就会一直无限弹窗,没法关掉,除非自己强制电脑关机(物理)。rem 这个是注释,这个后面接的就会被编译器忽略,但这个是单行注释。建议尝试之前保存好当前的工作进度。
2024-09-16 01:33:03 401
原创 (c++)用取模符%、除运算判断是否是某个数的倍数,判断个位十位是否有某个数
if (num % 10 == 7)//并且个位上有7。结果易懂,但凡和7有关,都输出相应的关系。关系分为三种,7的倍数,十位是7,个位是7。if (num / 10 == 7)//并且70-79。else if (num % 10 == 7)//个位上有7。cout
2024-09-16 00:50:21 257
原创 (c++)猜数字(含根据当前时间生成伪随机数代码)
*用srand((unsigned int)time(NULL));要包含这个头文件,如果没有这两个,rand()函数会一直生成42这个伪随机数。//种子,获取当前时间。cout
2024-09-16 00:18:03 216
原创 (C语言)利率计算
本文章是自己过年期间闲来无事想分析下如果每个月定投到基金中500块钱,年利率按照3%来计算,十年后本息一共是多少,赚取的利息是多少。并且与如果一开始就存入500x10x12=6万块钱,那么十年后利息是多少。根据以上想法,写出的如下程序#include<stdio.h>#include<math.h>//假设利息按照一个月一个月算//如果按月定投double func(double capital,int month,double rate){ double mont
2022-02-21 19:43:42 2390
原创 (C语言)变量在栈中的位置
为何以下代码会死循环?却为何以下这段代码不会死循环?分析:由于变量i和数组arr创建的变量顺序发生改变,所以他们在栈区的相对位置也发生了改变。第一段代码死循环的原因:栈区的使用默认是先使用高地址,再使用低地址。并且数组随着下标增加地址也在增加,所以变量i和数组arr在内存中的布局大概是如此。代码中访问越界,对arr[10],arr[11],arr[12]的访问都是非法的,而且如果这三个非法访问的地址恰好有一个是i的地址,就会导致i被赋值成0,最终导致死循环。..
2022-01-13 18:25:58 568
原创 (C语言)不同类型指针能够操纵的空间
各位看官可以将这段程序看成三个c语言题目,注释相当于就是解题过程了,可以自行运行下面源代码。#include<stdio.h>int main(){ int a=0x11223344;//十六进制数赋值,共8个数,每个数4位,正好32位,四个字节,一个int的大小。 char* p1=(char*)&a;//将a的地址从int* 强制类型转化成 char*,然后保存在p1中。 *p1=0;//给*p1赋值 /* 十六进制数打印,结果应该为11223300,因为c
2021-12-31 16:28:28 371
原创 (C语言)八、十、十六进制的输入输出格式、赋值
简单易懂。直接上代码#include<stdio.h>//已知,十进制数16的八进制表示为:20,16进制数表示为:10int main(){ int a=16; printf("%d ",a);//十进制输出decimal printf("%o ",a);//八进制输出octal printf("%x ",a);//十六进制输出hexadecimal return 0; }...
2021-12-31 15:41:17 3349
原创 (C语言)交换两个等长数组的值
和交换元素类似,本文章权当笔记。#include<stdio.h>void print_arr(int* arr,int len){ int i=0; for(i=0;i<len;i++) (i!=0 && i%10==0)?printf("%-2d \n",arr[i]):printf("%-2d ",arr[i]); printf("\n");}void swap_arr(int* arr1,int* arr2,int len){ int
2021-12-31 14:34:14 289
原创 (C语言)字符数组初始化与sizeof()与strlen()
权当笔记。看官能看懂最好,看不懂的话可以拿源码去运行下。#include<stdio.h>#include<string.h>/*"he"看着只有两个字符,但是只用2个字节是没法存下去的。如果是ch3[2]="he",这样会报错。因为没有给\0留地方得用ch3[3]="he";ch2[]={'h','e'};这种定义方法相当于就是放了一个'h'和一个'e'在ch2后面没有主动放\0,所以空间占用两个字节但是strlen()是读到\0才终止的,然后计算\0之
2021-12-31 14:32:59 498
原创 (C语言)翻转数组与翻转子数组
翻转数组:例如:arr[5]={1,2,3,4,5};经过reverse_arr(arr,5);之后数组变为:arr[5]={5,4,3,2,1};翻转子数组:例如:arr[10]={1,2,3,4,5,6,7,8,9,10};经过reverse_partArr(arr,0,4);数组变为:arr[10]={5,4,3,2,1,6,7,8,9,10};也就是下标从0到4的子数组翻转了。以下提供可运行的源代码:#include<stdio.h>/
2021-12-31 14:09:03 854
原创 (C语言)归并排序
自行了解原理,我这里提供可以运行的c语言代码。代码注释比较详细,了解递归和归并排序原理的话稍微琢磨还是能看懂的。先上主要实现代码,然后上可以运行的完整代码。编译器是G++,如果是GCC编译器,这一条三目运算符汇报错 while(i<=mid && j<=right) //将较小的首元素放进temp数组 arr[i]<arr[j]?temp[k++]=arr[i++]:temp[k++]=arr[j++];如果报错改成if-else判断就行了。具
2021-12-28 11:23:05 577
原创 (C语言)插入排序
插入排序原理我就不介绍了,bilibili或者百度上面都有演示,他们的演示比我讲的好得多。我主要提供一下主要代码。以下代码可以直接运行:#include<stdio.h>#include<stdlib.h>//srand(),rand()#include<time.h>//timevoid print_arr(int* arr,int len){ for(int i=0;i<len;i++) (i!=0 && i%10==0
2021-12-26 00:08:16 263
原创 (C语言)力扣第26题,删除有序素组中的重复项
暴力法:int removeDuplicates(int* nums, int numsSize){ for(int i=0;i<numsSize;)//遍历 { if(nums[i]==nums[i+1])//如果发现这个值与后面一个值相等 { for(int j=i;j<numsSize-1;j++)//那么就将这个值后面的值全部前移一位 { nums[j]=n
2021-12-15 03:59:56 1324
原创 (C语言)力扣第27题,移除元素
int removeElement(int* nums, int numsSize, int val){ for(int i=0;i<numsSize;)//遍历数组 { if(nums[i]==val)//如果发现等于val的值 { for(int j=i;j<numsSize-1;j++) { nums[j]=nums[j+1];//然后将右边一个值赋给左边
2021-12-15 03:51:34 1289
原创 (C语言)clock()函数的基本使用
先简单介绍下clock()函数:1.直接去这个网址看,写的很全面而且c语言标准库函数他都有clock - C++ Reference网址主页:www.cpluspluc.com2.我口头介绍下需要包含头文件 <time.h>clock()函数的返回值就是你程序当前运行的时间(毫秒为单位),类型是长整型,如果你想求某一个函数或者代码段运行的时间,那么可以设置两个变量分别在代码段的前面和代码段的后面(这两个变量可以用 clock_t类型来创建,但本质上clock_t就是一个t
2021-12-06 18:26:03 18600 3
原创 (C语言)递归版二分查找
需求:输入一个升序数组,然后键入一个值,程序将会去查找数组中是否有这个值。如果找到了返回下标,如果没找到返回-1;#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<windows.h>//目的:输入一个有序数组,查找里面是否有某个值。如果有,返回下标//数组名,数组长void input_arr(int arr[], int len){ int i = 0; int input = 0;
2021-12-05 17:48:00 994
原创 (C语言)整数在内存中的存储
在这里写一个函数,用于求一个整数在内存中存放时用了多少个1.目的:输入一个数字,然后返回它再内存中存储时所用数字1 的个数。//知识点:整数在内存中都是以补码形式存在//正整数的补码反码原码都一样//负整数的原码反码补码转化规则如下://反码=原码按二进制位取反(符号位除外)//补码=反码+1//特别的,0在内存中的存储就是0x00000000。//假设为+0,那么补码(正数原码反码补码一样)为00000000 00000000 00000000 00000000 //四个字节//
2021-12-05 17:09:41 564
原创 (C语言)判断数组中是否有重复值
给一个数组,判断数组里面是否有重复的数,如果有返回1,如果没有返回0现在写的是蛮力法,时间效率为O(n^2);目前想到的更好的办法是先排序,然后比较相邻元素是否有相等的。这个的时间效率就取决于排序算法了,因为比较是一个线性时间内可以完成的。如果选择一个比较好的排序算法,应该是可以达到O(nlogn)级别。但如果用的排序算法是冒泡这种,那么还不如蛮力法。还有更好的,算法老师讲了,但是没怎么听明白,学一下然后再发出来。本篇只写蛮力的;#include<stdio.h>#inc
2021-12-04 21:13:35 7124
原创 (C语言)峰值数组寻找峰值下标
这个题目来源于本校,算法课某一年的期末考试中的一个题目。我就不下定义了,给大家几个例子意会一下什么是峰值数组。我这里定义的峰值数组要么只有一个元素,要么至少有三个元素。比如:1 2 3 4 8 9 16 37 22 15 13 7 3 1 -2 //其中峰值为3723 43 72 97 100 34 18 7 5//其中峰值为10054 //也认为是峰值数组,其中峰值为54峰值左边的子数组递增,峰值右边的数组递减,并且仅有一个最大值。目的:手动输入一个峰值数组,返回它..
2021-12-04 20:43:10 1288
原创 (C语言)冒泡排序的优化
优化的原理是,在优化的某一轮如果发现没有发生相邻两个元素的交换,那么说明整个数组已经是有序的了。如果能加入一个判断,如果某轮比较后没有发生元素的交换,那么就说明数组已经有序了,可以停止比较了。这种优化做出后能够显著提升那种大部分数据已经是有序的,只有很少部分的数据是在不正确的位置上的数据排序。以下我使用100个元素的数组,分别用随机赋值的方式初始化和顺序初始化,再比较两种情况下,相邻两个元素比较次数的多少。1.随机值初始化+未做优化:#include<stdio.h>#i
2021-12-03 13:36:46 419
原创 (C语言)实现井字棋
利用代码实验井字棋,考验对函数传参的应用以及字符型数组的基本使用方法。因为在此之前,都是整型数组用的多,字符型数组的一些输入输出赋值之类的操作运用并不是很熟练,导致代码最开始出现了非常多bug。比如,有一部分map[][]数组被定义为char类型,有一部分被定义为int类型,还有就是赋值的时候本该用单引号,但是错误使用双引号。原来空格也是一个字符,并且char[][]一次只能对一个字符赋值等等等。以下是代码:#define _CRT_SECURE_NO_WARNINGS 1#include&
2021-12-02 11:04:46 602 1
原创 (C语言)生命游戏
生命游戏规则:(写一段伪代码,可能更好理解)if(细胞是活的) 1.若周围细胞数>3,这个细胞会死亡//人太多了,饿死的 2.若周围细胞数=2或者3,细胞还是活的//周围的人数刚刚好,不多不少 3.若周围细胞数=0或者1,细胞会死//周围细胞太少,抑郁死的else//细胞是死的 1. 若周围细胞数=3,这个细胞会活过来...
2021-11-28 22:09:33 4983
原创 (C语言)字符串的两种输出方式
#include<stdio.h>#include<windows.h>//使用system()#include<string.h>//使用strlen(),%s;int main(){ char ch[]= "tmh真是个大帅比"; //输出方式1,利用%s printf("%s\n", ch); //输出方式2,利用for循环 for (int i = 0; i < strlen(ch); i++) { printf("%c",ch.
2021-11-28 20:01:44 2536
原创 (C语言)冒泡排序
这个冒泡排序没什么特别的,相当于是自己的一个笔记罢了,留作日后翻阅。#include<stdio.h>#include<windows.h>使用sytem()#include<stdlib.h>//使用srand()#include<time.h>//使用timevoid init_arr(int arr[],int len){ for (int i = 0; i < len; i++) { arr[i] = 1+rand()
2021-11-28 19:52:49 314
原创 (C语言)快速排序
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<windows.h>#include<time.h>void rand_init(int* arr, int len){ for (int i = 0; i < len; i++) { arr[i] = 1+rand() % 1000; }}void quick_sort(int arr[], int left, i.
2021-11-25 23:00:17 165
原创 (C语言)汉诺塔与受限汉诺塔
如果了解递归的话,看注释应该是能明白的。建议复制代码跑一下程序,从汉诺塔盘子只有1个和2个开始分析,那么很快能分析出递归的逻辑的。#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<windows.h>//n个盘子的汉诺塔需要移动的最小步数的通项为:2^n-1(2的n次方-1)//n个盘子的受限汉诺塔需要移动的最小步数的递推关系式为:a[n]=3*a[n-1]+2;void hanoi(int n,in
2021-11-25 16:46:38 647
原创 (c语言)不同初始化方式之间的比较
代码中注释比较多,望耐心阅读。#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<windows.h>#include<string.h>//sizeof()是一个操作符,不是库函数,使用的时候不需要包含头文件,计算的是变量等所占的空间大小//strlen()是包含在string.h文件下的库函数,计算字符的个数,字符串末尾的\0不会被计入!int main(){ char arr
2021-11-24 23:38:11 268
原创 (C语言)递归练习:递归输出一个数的各个位上的数字
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>//一个整数对10取余,得到个位//一个整数对100取余,得到十位和个位//...//由于打印操作是在调用print_num()之后,所以会打印最后算出的n%10,也就是最高位void print_num1(int n){ if (n > 9) print_num1(n / 10); printf("%d ", n % 10);}//由于打印操作是在调用pr.
2021-11-24 23:35:11 1897
原创 (c语言)循环求斐波那契数
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int fibo(int n){ int a = 0; int b = 1; int c = 0; if (n == 1) return a; else if (n == 2) return b; else { //abc三个数,将b-->a,然后b就空出来了,再c-->b;然后c就空出来了,c=a+b;循环。 for (int i = 2; .
2021-11-24 17:26:24 380
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人