C
文章平均质量分 74
小小孩~
永远奔赴在热爱的征程上
展开
-
【C++】每日小练---指针
指针 牛客题原创 2023-03-02 19:52:13 · 140 阅读 · 0 评论 -
二叉树基本操作
二叉树的操作原创 2022-10-26 16:28:19 · 957 阅读 · 0 评论 -
【Linux】文件基础 IO 操作
文件的基本操作、基础 IO、库文件原创 2022-10-25 22:05:40 · 1319 阅读 · 0 评论 -
使用交换函数来实现变量的修改以及指针指向的修改
指针 , 交换函数,传址,传值原创 2022-09-27 22:00:46 · 203 阅读 · 0 评论 -
字符串的逆转
字符串逆置字符串的普通逆置描述思路字符串的单词逆置描述思路字符串的普通逆置描述输入一个字符串,要求输出它逆置之后的新的字符串例如:输入 I like beijing.输出 .gnijieb ekil i思路找出需要逆置字符串的首 start 、尾 end 位置进行标记,然后交换首尾空间内容,然后修改首尾变量void Reverse(char* str, int start, int end){ end--; //[) 左闭右开 while (start < end) {原创 2022-05-21 21:20:06 · 455 阅读 · 0 评论 -
求最小公倍数
最小公倍数题目简介解题思路法一法二题目简介给定两个正整数 A,B ,要求输出他们的最小公倍数例如:输入 5 7输出 35解题思路法一首先找出两个数中最大的哪个数,确定两者是否存在倍数关系,然后对最大的数进行自增找最小公倍数:int main(){ int a, b; scanf("%d %d", &a, &b); if (a > 0 && b > 0) { int max = a > b ? a : b; //原创 2022-05-21 21:09:45 · 172 阅读 · 0 评论 -
使用 const 注意点
const一、const int*二、int const*三、int* const四、const int* const使用 const 主要看它修饰的是谁!!!一、const int*int main(){ int a = 10; const int*p = &a; //说明 *p 被封锁为常量}此时 *p 被封锁为常量,因此不能通过 *p 来修改 a 变量的值:但是 a 的值可以修改:但是 p 的值可以修改,因为 p 存放的是地址:二、int const*i原创 2022-05-15 20:29:16 · 197 阅读 · 0 评论 -
【思维逻辑】---- 分沙堆
辨别出十堆沙子中哪堆沙子溶解会变色?题目描述分析与解法题目描述假如现只有四个杯子和十堆沙子,沙子的外观一致,但是其中有一堆沙子溶解在水中会变色,溶解需要两分钟。如何快速辨别 出十堆沙子中是哪一堆沙子溶解会变色?分析与解法...原创 2022-05-11 22:12:26 · 205 阅读 · 0 评论 -
函数的链式调用 VS 函数递归调用
链式调用 VS 递归调用函数链式调用链式调用定义函数递归调用递归定义介绍函数链式调用链式调用定义将一个函数的返回值作为另一个函数的参数最简单的示例://函数链式调用int main(){ char arr[] = "abcdef"; printf("len = %d\n", strlen(arr)); return 0;}示例二:int fun(int n){ return 5;}int main(){ printf("result = %d\n", fun(5原创 2022-04-22 23:09:16 · 378 阅读 · 0 评论 -
交换函数的不同实现方法
交换函数Swap一、C 语言中 Swap二、Swap 函数的实现方法一:指针交换:交换的是a,b对应空间内的值方法二、加减实现方法三:引用类型方法四:异或实现编写一个 Swap 函数,能够实现两个变量值的交换,通常我们需要借助第三方变量来进行实现一、C 语言中 Swapvoid Swap(int a, int b){ int tmp = a; //借助 tmp 来实现交换 a = b; b = tmp;}int main(){ int a = 10; int b = 20;原创 2022-04-16 15:47:11 · 1197 阅读 · 0 评论 -
数组的基本注意点
数组一维数组一维数组的初始化定义一维数组的物理地址数组名数组的打印二维数组二维数组初始化定义二维数组的物理存储数组名数组的打印一维数组一维数组的初始化定义int main(){ int arr1[10] = { 0 }; int arr2[] = { 0,1,2,3,4,5 }; int arr3[5] = { 1,2,3 }; return 0;}一维数组的物理地址数组的物理存放地址是连续的数组名大多数情况下,数组名代表数组的首元素地址:数组的打印int main原创 2022-03-01 17:29:56 · 538 阅读 · 0 评论 -
sizeof 与 strlen
sizeof 与 strlensizeofstrlen对比sizeof计算一个类型或变量所占字节数的大小 printf("%d\n", sizeof(int)); printf("%d\n", sizeof(char)); printf("%d\n", sizeof(double)); printf("%d\n", sizeof(float)); printf("%d\n", sizeof(long));strlen计算一个指定字符的长度,直到遇到字符串结束标志 \0 停止计算。对原创 2022-02-18 14:00:44 · 604 阅读 · 0 评论 -
字符串逆序
将字符串逆序例如:abcdef 经过逆序之后得到 fedcba(1)正常情况下 --------------- 分析:可以将第一个元素与最后一个元素进行交换,第二个与倒数第二个交换…类推void reverse_string(char arr[]){ int left = 0; int right = strlen(arr) - 1; while (left < right) { char tem = arr[left]; arr[left] = arr[right];原创 2022-01-22 01:57:18 · 853 阅读 · 0 评论 -
函数及递归--练习题
部分练习例一、分数求和例二、求十个整数的最大值例三、打印乘法口诀表例四、整形有序数组中实现二分查找例一、分数求和1/1 - 1/2 + 1/3 - 1/4 … + 1/99 - 1/100分析,首先可以先求出 1/1 ---- 1/100 的和,不关注符号:定义一个 i ,用以表示分母的变化int i = 1;float sum = 0.0; //分数和值为小数,不可能大于 1//sum 表示和,则sum 值变化表示为:sum += 1.0 / i;则增加上符号之后可以表示为:i原创 2022-01-22 01:04:11 · 919 阅读 · 0 评论 -
函数递归调用
函数递归递归定义递归的两个必要条件递归相关练习例一、接受一个整型值(无符号),按顺序打印它的每一位。例如:输入 1234,输出 1 2 3 4例二、编写函数不允许创建临时变量,求字符串长度递归定义递归就是程序调用自身的编程技巧,递归作为一种算法在程序设计语言中应用广泛,一个过程或函数在其定义或说明中有直接或间接调用自身的一种方式,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来进行求解,递归策略只需少量的程序就可以描述出解题过程所需要的多次重复计算,大大减少了程序的代码量。递归主要原创 2022-01-15 22:25:15 · 343 阅读 · 0 评论 -
分支与循环
一、分支(一)if 分支1、if 单分支2、if 多分支if 分支的注意点Question1:下列代码打印结果是什么??结果是 hehe ?还是 haha ?int main(){ int a = 1; int b = 2; if (a == 0) if (b == 2) printf("hehe\n"); else printf("haha\n"); return 0;}其实结果都不对,如下:这是因为 else 会对应于离当前 else 语句最近的一个原创 2022-01-08 16:54:26 · 688 阅读 · 0 评论 -
C 语言中一些重要关键字
c语言中的一些关键字一、auto二、const三、enum四、extern五、register六、signed 与 unsigned七、static一、auto局部变量一般是在使用时自动创建,使用结束自动销毁,因此 auto 关键字一般是省略的(局部变量即自动变量)int main(){ if (1) { int a = 10; // auto int a = 10; //与上一句代码相同 } return 10;}这段代码中的 a 变量就是局部变量,它的作用范围即 if原创 2022-01-07 23:45:00 · 1179 阅读 · 1 评论 -
#define 的练习
写一个宏,交换奇偶数#define Jiaohuanjiou(x)(((x*0x55555555)<<1)||((x*0xaaaaaaaa)>>1))实现过程int main(){ int x = 5; printf("%d\n", Jiaohuanjiou(x)); system("pause"); return 0;}写一些宏,计算结构体中变量相对于首地址的偏移量 — offsetof#define offsetof(StructType, Member原创 2020-07-16 12:17:31 · 341 阅读 · 0 评论 -
模拟 atoi
atio 介绍int atoi(const char * str)将字符串转换为整数模拟实现int status = 0;int my_atoi(const char *str){ assert(str); int flag = 1; long long result = 0; int i = 0; while (isspace(str[i])) { i++; } if (str[i] == '-') { flag = -flag; i++; } wh原创 2020-07-16 12:13:20 · 134 阅读 · 0 评论 -
寻找单身狗
一个数组中只有两个数字是出现一次,其他数字都出现了两次,找只出现一次的两个数思路:1、整体异或,最终结果:(1)一定不为0;(2)一定是两个不同数据,异或的结果;(3)一定不为0,将结果看作32个比特位,其中一定有比特位为1 ---- 两个不同数据对应的比特位不同2、找到不同比特位的位置3、根据不同比特位的位置,进行数据划分 – 两部分(1)不同数字一定被划分到不同的组(2)相同数据一定被划分到同一组,具体在哪一组不重要void FindTwoSingle(int a[], int num原创 2020-07-16 12:10:46 · 126 阅读 · 0 评论 -
模拟qsort
qsort 排序int int_cmp(const void*p1, const void*p2){ return (*(int*)p1 - *(int*)p2);}void _swap(void *p1, void *p2, int size){ int i = 0; for (i = 0; i < size; i++) { char temp = *((char*)p1 + i); *((char *)p1 + i) = *((char *)p2 + i); *((ch原创 2020-07-16 12:08:39 · 111 阅读 · 0 评论 -
C之杨氏矩阵
有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。int Find(int a[][5], int row, int col, int target){ int i = 0; int j = col - 1; while (i < row && j >= 0) { if (target < a[i][j]) { j--; } else if (target > a[i][j])原创 2020-07-16 12:06:50 · 121 阅读 · 0 评论 -
mem***系列函数
内存操作函数:memcpymenmovememsetmemcmp一、memcpy – #include<string.h>void * memcpy ( void * destination, const void * source, size_t num )任意类型字符拷贝,将num个字节的值从source指向的位置直接复制到destination指向的存储块;函数遇到’ \0 '不会自动停止;模拟实现void *memcpy(void *dest, const v原创 2020-07-16 12:04:04 · 612 阅读 · 0 评论 -
字符函数与字符串函数
**一、函数介绍**1、求字符串长度:strlen2、长度不受限制的字符串函数:strcpy、strcat、strcmp3、长度受限制的字符串函数:strncpy、strncat、strncmp4、字符串查找:strstr、strtok5、错误信息报告:strerror**二、详细介绍**(一)strlen – #include<string.h>1、函数简介size_t strlen ( const char * str )返回C字符串str的长度字符串以’原创 2020-07-16 11:48:37 · 279 阅读 · 0 评论 -
结构体中的内存对齐问题、位段、枚举联合的区分
结构体1、结构体结构体的类型是否一致:取决于是否是同一个结构体定义的变量,即使两个结构体完全相同结构体允许初始化但不允许赋值2、结构体的自引用 (typedef 重命名)typedef struct node{int data;struct node *next; //结构体自引用}Node;3、结构体的大小 ----- 内存对齐结构体内部是存在内存对齐情况的,内存对齐问题会影响结构体大小结构体传参不会发生降维问题(硬拷贝),但是采用指针效率高内存对齐规则:(1)原创 2020-07-08 12:27:51 · 267 阅读 · 0 评论 -
C语言中的内存是如何分配
内存分配简化(手绘)动态内存分配1、数组在栈上开辟空间,数组的下标必须是常量,也就是确定值。数组的大小在编译过程中就已经确定了,使用内存时只有在运行中才能确定需要多少。2、(1)空间在不同需求下,可能需要不断调整空间大小,导致代码的可扩展性下降;(2)有可能因为空间划分不合理可能导致空间浪费;(3)一般在栈上,能有一次有效分配的空间是有限的;所以我们需要“动态内存管理”:(1)让我们能够在程序运行期间来决定开辟空间的大小;(2)有效使用空间,满足不同需求;(3)堆空间大于栈空间。3、原创 2020-07-08 11:43:12 · 2707 阅读 · 0 评论 -
文件的不同理解---C
文件文件类型文件一般有两种:程序文件、数据文件程序文件:包含源程序文件(后缀为 .c),目标文件(windows环境后缀为 .obj),可执行程序(windows 环境后缀为 .exe);数据文件:文件的内容不一定是程序,而是程序运行时读写的数据,例如程序运行需要从中读取数据的文件,或者输出内容的文件。文件名一个文件需要有一个唯一的标识便于我们查找使用文件名一般包含:文件路径+文件名+文件后缀eg: c:\vs.code\code\wenjian.txtC程序在启动的时候,由系统默认给我们原创 2020-07-08 11:14:07 · 1119 阅读 · 0 评论 -
通讯录的增删减改保存问题
一、题面要求实现一个通讯录:可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址。提供方法:1、添加联系人信息2、删除指定联系人信息3、查找指定联系人信息4、修改指定联系人信息5、显示所有联系人信息6、清空所有联系人7、以名字排序所有联系人二、问题分析1、内存分配题目要求可以存储1000个人信息,因此开辟空间可以使用静态内存分配也可以使用malloc动态内存分配,相比较而言动态内存分配更好一点,它可以根据实际需要而进行空间大小的自动选择分配,不会存在内存不够或原创 2020-07-08 10:38:06 · 727 阅读 · 0 评论 -
二进制数的三种形式-----原反补
原反补的基本概念:1、原码:一个十进制数字直接转化成的二进制序列反码:将原码按位取反(无符号型)补码:补码=反码+12、数据范围:无符号数 (int 类型) 0~255有符号数 (char类型) -128~1271 (7个01组合) 0 (7个01组合)0000 0000(+0) vs 1000 0000 (-0)3、二进制序列:(数据在内存中以 补码 形式存储)正数(二进制最高位0):原码=反码=补码负数(二进制最高位1):原码----反码 ----- 补原创 2020-05-27 18:07:49 · 4547 阅读 · 3 评论 -
到底谁是凶手?
一、猜凶手:要求:找凶手,凶手是四个嫌疑犯之一a说:不是我b说:是cc说:是dd说:c在说谎已知四个人中有三个人说的是真话一个假话,请找出真凶!void FindKiller(){ char killer = 'A'; //假设凶手是‘A’ for(;killer<='D';killer++){ if ((killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D') == 3) { /原创 2020-05-27 16:59:33 · 284 阅读 · 0 评论 -
打印小技巧
想要打印一个菱形块,还要用C 程序代码???这啥子问题喇嘛??不过,新手小白今天学到了一招哈哈哈(新手的快乐,勿喷)code 1可以先借助度娘寻求一张菱形块的图片哦!嗯哼----来咯!接下来呢,就要自个数数了,哈哈,数一下对应的 * 号以及它前边空格的位数,寻找相应的规律然后进行代码计算,其中 i 表示对应的行,j 表示对应的列void Show(int n){ // 菱形的上半部分int i = 0; for (; i < n; i++) { int j = 0; f原创 2020-05-13 22:38:39 · 100 阅读 · 0 评论 -
奇特的数学数字-------水仙花数
一、什么是水仙花数?“水仙花数”是指一个n位数,其各位数字的n次方之和恰好等于该数本身(如:153=1 ^ 3+5 ^ 3+3 ^ 3,则153是一个“水仙花数”)二、代码实现求出0~100000之间的所有“水仙花数”并输出#include<math.h>#include<stdio.h>#include<windows.h>int Count(int x) //用来计算数字 x 是几位数字{ int count = 0; while (x)原创 2020-05-13 22:02:29 · 721 阅读 · 0 评论 -
动动脑,排排雷
一、扫雷游戏分析制作扫雷游戏代码:**1、**首先展示游戏面板:一个 1212矩阵(其中真正所能输入的位置为 1010 个),矩阵内部所有空格全部初始化为 “ * ” ,通过两个选项:play or exit 确定玩游戏 or 退出游戏,玩游戏时 由用户输入一对有序数对 <x , y> 来确定所排雷的位置,如果输入的位置超出所给的10*10 范围,提醒输入错误信号;如果...原创 2020-04-23 14:18:56 · 219 阅读 · 0 评论 -
C----三子棋
一、分析1、首先分析游戏流程:建立一个3*3 的九宫格,红棋白棋双方依次交错在此九宫格中下棋,若有其中一方先达到三子一线则赢,否则为输,若整个棋盘下满棋子但依旧没有任何一方达到三子连线状态在表示平局重新来。2、步骤:a、首先,创建棋盘面板 ShowBoard 展线棋盘形式;b、其次,开始下棋,由黑子方首先输入’x’ ,用一对有序数列表示所下黑棋的位置,再由白字方(电脑控制)确定下子位置(所...原创 2020-04-20 12:34:08 · 347 阅读 · 0 评论 -
猜猜猜小游戏
一、编写代码实现模拟用户登录情景,并且只能输入三次密码,如果密码输入正确则提示登录成功,如果三次均输入错误则退出程序#include<stdio.h>#include<string.h>#include<stdlib.h>#include<time.h>#include<math.h>#include<windows.h...原创 2020-04-10 22:27:11 · 201 阅读 · 0 评论 -
C------公约数
方法一:穷举法int GreatestCommonDivisor(int x, int y){ int top = x > y ? y : x; int i = top; for (; i >=2 ; i--) { if ((x % i == 0) && (y % i == 0)) { return i; } } return 1;}...原创 2020-04-10 22:18:41 · 289 阅读 · 0 评论 -
你了解标点符吗?
常见操作符1、+ — * / << >> (移位操作符)2、按位与: & 1&1=1 0&1=0 1&0=0 0&0=0 同真为真3、按位或: | 1|1=1 0|1=1 1|0=1 0|0=0 一个为真结果为真4、异或: ^ 相同为0不同为15、逻辑反:! 数据前加~ 表示取反6、自增自减:i...原创 2020-03-31 21:24:57 · 152 阅读 · 0 评论 -
奇妙的语言
初识C语言第一次接触这门新的课程,可能大多数人接触到的第一个程序都是:(对于我来说第一个代码是这个_ 不过,,因人而异嘛)int main(){ printf("hello world!\n"); system("pause"); return 0;}简简单单的几行代码便可以编译出“hello world!”这样一句话来,想想都感觉神奇更别说是亲手试试了。开始的我十分好奇这...原创 2020-03-27 23:33:02 · 151 阅读 · 0 评论 -
C之起始篇
过博客来记录一些学习日常。在目前大学期间想要熟练掌握一些编程语言,努力学习写代码,努力提升个人能力。想要学好编程,首先要勤于思考、勤于动手操作,通过查阅资料以及学校的课程来学习基本的编程语言知识是关键,其次就是要自己动手写代码,只有自己动手动脑去尝试才能有所收获。因此,新手第一天先了解基本的C语言常识,接下来就是“学习”与“写”相结合,要保证每一个星期都有足够的空余时间来动手写代码,不仅要学会书...原创 2020-03-26 16:35:10 · 148 阅读 · 0 评论