
C语言 基础
C语言 入门知识
程序员萌芽
夜半荧屏映月华,
指尖飞舞写天涯。
代码千行凝智慧,
bug除尽见朝霞。
展开
-
C++实现求解质数
质数又称素数,一个大于1的自然数,除了1和它自身外,不能被其他自然数整除。对于一个数,如果它不能被 2 到其平方根之间的任何数整除,则它是质数。不是质数的自然数称为合数(规定1既不是质数也不是合数)即,质数不能表示为除了1和本身外其他自然数的乘积。从 2 开始逐个检查每个数是否为质数。方法二:埃拉托斯特尼筛法。原创 2025-03-24 15:33:55 · 278 阅读 · 0 评论 -
C++实现求解最大公约数
如果a大于b,那么a%b的结果就是a除以b的余数,否则结果就是a,所以当a小于b时,递归传参可以交换a和b。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数。整数除法可以通过减法计算,显然效率不如辗转相除,当a和b相差大时需要多次计算。两个整数的最大公约数是能够同时整除它们的最大的正整数。函数,直接调用即可,内部实现应该是欧几里得。方法二:欧几里得 辗转相除法。原创 2025-03-24 15:04:00 · 148 阅读 · 0 评论 -
使用C语言的strtok函数来分割字符串
在第一次调用时,需要将str指向待分割的字符串,后续调用传入NULL即可,每次调用该函数会返回分割后的下一个子串,如果没有子串则返回NULL。C语言中的strtok函数可以用来将一个C风格字符串按指定的分隔符进行分割,返回分割后的子串。其中,str是要分割的字符串,delim是分割符号。原创 2024-01-01 03:04:28 · 532 阅读 · 1 评论 -
反色(顺序)C C++
基础语法原创 2022-10-22 00:08:16 · 1861 阅读 · 0 评论 -
浅说万能头<bits/stdc++.h>
#include包含了C和C++的绝大多数头文件,像iostream、cmath、algorithm、iomanip、string之类的,这意味着我们不再需要打一大堆文件包括,这玩意被称为万能头。优点很明显,你只需要写这么个东西完事。缺点今天个人体会到了,一是每次编译都要读取分析它包含的每个头文件,这会大大增加编译时间,特别是在代码很短的情况下,非常明显;二是,标识名需要特别留意,因为这个东西包含了太多东西,很多名称已经被用来作为函数名和类名之类的。...原创 2022-06-07 20:07:49 · 3314 阅读 · 2 评论 -
计算两个日期之间的天数
咋一看题目好像不难啊,实际上还是有点麻烦的,有很多情况需要考虑到啊。首先是每个月的天数不一样,然后闰年的也不一样,然后是……仔细想想就傻眼了吧。原创 2022-05-18 11:35:30 · 1597 阅读 · 0 评论 -
O0 O1 O2 O3优化原理
在C++中,优化(Optimization)是指通过改进代码的执行效率和性能,以实现更高效的程序运行。O优化(O Optimization)是指编译器对代码进行优化的一种级别,其中包括了多个不同的优化技术和策略。在C++编译器中,通常有多个优化级别可供选择,比如O0、O1、O2、O3等。这些优化级别表示编译器在生成可执行文件时所应用的优化策略的程度。较低级别的优化会减少编译时间,但可能会影响程序的性能;而较高级别的优化则可能增加编译时间,但可以更好地优化程序的执行速度。原创 2022-04-22 18:48:48 · 10678 阅读 · 1 评论 -
键盘输入流的缓冲效应 I/O流 缓冲I/O
有时候,你会发现,你的程序老是读不进某个值,但是反反复复看代码,又感觉自己代码真的没有问题。原创 2022-04-07 19:47:40 · 483 阅读 · 0 评论 -
C C++ Python等语言通用的打开文件的方式字符
C C++ Python等语言通用的打开文件的方式字符原创 2022-04-05 11:52:01 · 1296 阅读 · 0 评论 -
复杂数据类型 枚举类型
复杂数据类型 枚举类型原创 2022-03-29 10:48:14 · 369 阅读 · 0 评论 -
复杂数据类型 结构体和联合体
复杂数据类型:结构体 联合体原创 2022-03-28 22:34:09 · 778 阅读 · 0 评论 -
简单的线性单向链表
链表,其实很简单原创 2022-03-23 11:04:24 · 1326 阅读 · 0 评论 -
带参数的main函数
为了说明带参数的main函数,我们首先来学习一下有关命令行的概念。命令行在操作系统状态下,为执行某个程序而键入的一行字符称为命令行。命令行的一般形式为:命令名 参数1 参数2 参数3 ··· 参数n参数之间以一个或多个空格隔开。例如:C:\>copy[.exe] source.cpp c:\bak\prg.cpp这个表示有三个字符串的命令行。copy是DOS下的拷贝命令,是执行文件名,其功能就是将C盘根目录下的文件source.cpp拷贝到C盘bak子目录下,并改名原创 2022-03-19 12:14:46 · 800 阅读 · 0 评论 -
预处理命令 条件编译
目录预处理命令条件编译1.#if···#endif2.#ifdef···#endif3.#ifndef···#endif预处理命令源程序中以#开头的行称为预处理指令。预处理指令并不是C语言的语法成分,而是传给编译程序的指令。包括:宏定义#define#undef文件包含#include条件编译#if#ifdef#else#elif#endif其他#line#error#pragma我们在之前的文章写过宏定原创 2022-03-19 11:41:38 · 303 阅读 · 0 评论 -
C语言的/t到底有什么用
先看代码懵逼一下:#include<stdio.h>int main(){ printf("abc\tabcd\tabcde\tabcdef\tabcdefg\tabcdefgh\t666\n12345678123456781234567812345678123456781234567812345678");}看输出:涨知识:其中的\t到底是什么功能,之前一直以为是输出四个空格,实际上并不是,而是补全前面字符串的位数到8的整数倍,比如前面有3个字符,就补上5个空..原创 2022-03-18 11:57:55 · 21094 阅读 · 1 评论 -
C的预处理命令 include 文件包括
预处理命令源程序中以#开头的行称为预处理指令。预处理指令并不是C语言的语法成分,而是传给编译程序的指令。包括:宏定义#define#undef文件包含#include条件编译#if#ifdef#else#elif#endif其他#line#error#pragma我们在之前的文章写过宏定义的笔记,现在在这里我们浅谈一下文件包含。文件包含文件包含是指源程序通过#include命令将另一个文件的内容包含进来。比如说,我们经常原创 2022-03-17 08:47:59 · 613 阅读 · 0 评论 -
引用 C C++
引用引用是一个别名,它的作用就是作为目标的别名而使用,对这个引用的改动,就是对目标的改动。定义例如引用一个整型变量:int a=666;int &ra=a;引用运算符&与地址操作符使用相同的符号,虽然它们显然是彼此相关的,但它们又是不一样的。和指针类似,下面的引用定义是等价的:int& ra=a;int &ra=a;int & ra=a;引用必须在定义的时候就进行初始化。而且必须在申明引用之前其引用的目标已经有申明或定义。原创 2022-03-10 12:42:46 · 212 阅读 · 0 评论 -
const 指针 常量指针 指针常量 常量指针常量
常量指针:指向常量的指针在指针定义语句的类型前加const,表示该指针指向一个常量。const int a=666;const int * p=&a;常量a只能被访问而不能被改写,但指向常量a的常量指针可以改写。指针常量在指针定义语句的指针名前加const,表示该指针是常量。int a;int * const p=&a;指针常量在定义时必须初始化,且不允许修改,但其指向的地址的值可以修改,即p不可改写而*p可以改写。常量指针常量:指向常量的指针常量原创 2022-03-09 09:34:23 · 316 阅读 · 0 评论 -
二分查找 递归
碎碎念念假设我们要在一个升序排序的整型数组中查找某个特定的整数,如果找到了,返回该整数在数组中的索引号,如果没有找到,则返回-1。我们首先看要找的数和数组中间的数的大小关系,如果相等,那么说明找到了,如果要找的数小于数组中间的数,那么我们再在数组的前半部分继续查找,如果大于,那么我们再在数组的后半部分继续查找,每次查找都将范围缩小一半,称为二分查找。代码#include<stdio.h>int binary_search(int line[],int target,int b原创 2022-03-03 07:55:34 · 303 阅读 · 0 评论 -
预处理命令 宏定义 #define #undef
宏定义#define指令定义一个标识符来代表一个字符串,这种标识符称为宏名,在源程序中发现该标识符时,都用该字符串替换,这种操作叫做宏替换,是在预编译的时候进行的。不带参数的宏定义直接看代码体会一下。#include <iostream>#define a cout<<r*r*3.14<<" "<<2*3.14*rusing namespace std;int main(void){ int r; cin>>r; a原创 2022-03-01 12:02:41 · 659 阅读 · 0 评论 -
C语言进阶 内存四区:栈区 堆区 全局数据区 代码区
内存四区系统在执行程序的时候会将所给予的内存分成四块,即栈区(stack)、堆区(heap)、全局数据区和代码区。栈区由编译器自动分配并释放,存放函数的局部变量、形式参数和函数返回值。其操作方式类似于数据结构的栈,只能往低地址增长,函数调用次数过多,可能会出现栈溢出。堆区由程序员调用函数指定分配,并需要程序员用free函数释放,和数据结构的堆没有什么关系。全局区数据区,静态区都是它。存放常量和全局变量。代码区相信大家都能理解,就是放代码,放二进制的机器指令。...原创 2022-02-28 08:43:50 · 2120 阅读 · 0 评论 -
变量的存储类型 auto register extern static
说明在C语言中,变量和函数都有数据类型和存储类型两个属性。数据类型规定了取值范围和运算。存储类型规定了占用内存的方式。变量的存储类型可分为静态存储和动态存储。静态存储生命周期为程序的运行时间。动态存储动态分配内存,用完就放。内存的区域划分操作系统等 系统区 程序区 用户区 静态存储区 动态存储区 ...原创 2022-02-27 15:17:49 · 464 阅读 · 0 评论 -
指针数组——元素为指针的数组
说明指针数组就是一个数组,这个数组的数组单元都是指针型数据。定义int a[6]={1,2,3,4,5,6};int *p[6];数据类型符 *变量名 [ 常量表达式 ] ;用法for(i=0;i<6;i++)p[i]=&a[i];就是一个元素为指针的数组。注意 指针数组 二维数组指针 变量定义 int *p[6]; int (*p)[6]; 变量性质 p是数组名,p不可赋值 p是指针变量,p...原创 2022-02-27 11:12:48 · 361 阅读 · 0 评论 -
数组指针 行指针 列指针
概念我们把指向数组的指针叫做数组指针,后面还会学到指针数组,这两个是不一样的,根据中学语文偏正词组的知识可以知道,前者是指针,后者是数组。一般指针变量int a[2][3]={{1,2,3},{4,5,6}};int *P=&a[0][0];//int *p=a[0];数组在内存中的存储都是连续的,并且是先存放好第一行的元素,再放第二行的元素,因此,p[0]和*p就是a[0][0],p[5]和*(p+5)就是a[1][2]。int a[m][n];即,a[i][j]可用*(p原创 2022-02-26 21:17:04 · 3160 阅读 · 0 评论 -
数组指针 一维
概念我们把指向数组的指针叫做数组指针,后面还会学到指针数组,这两个是不一样的,根据中学语文偏正词组的知识可以知道,前者是指针,后者是数组。数组的指针其实就是数组在内存的起始地址。先看一个例子。int a[6],i;那么a[i]和*(a+i)是一样的。再看一个例子。int a[6],*p;p=a;//p=&a[0];我们知道数组名其实就是数组的起始地址,所以a和p都指向a[0],但要注意的是,a和p并不完全一样,a是数组名,是不可更改的,p是指针变量,是可以改变的原创 2022-02-26 09:17:31 · 193 阅读 · 0 评论 -
C语言函数传参顺序带来的结果的不确定性
对于看到这个标题一脸茫然的同学,我们先来看一个代码#include <stdio.h>int main(){ int a=0; printf("%d %d %d %d %d",a++,a++,a++,a++,a++); }你觉得输出结果是什么?……上截图好玩吧!_cdecl_cdecl(C declaration,即C声明)是源起C语言的一种调用约定,它规定,在C语言中,函数实参在线程栈上按照从右至左的顺序依次压栈。...原创 2022-02-24 18:26:48 · 8909 阅读 · 1 评论 -
指针 *p++ 与 (*p)++ 的区别
指针C语言的指针(pointer),是内存中存储单元的存储地址,指针变量就是专门用来存储其他变量的地址的变量。用指针要小心,搞不好会死机。&是地址运算符,用来表示变量的地址,*是类型说明符,用来说明其后的变量是个指针,如果*在表达式中出现,那么就表示该指针变量所指向的变量。上代码int a,*p;p=&a;那么*p就是a了。那么*p++与(*p)++和a++有什么关系?根据括号运算符的最高优先级,我们可以肯定,(*p)++和a++应该是等价的。那*p+原创 2022-02-24 13:39:28 · 7433 阅读 · 0 评论 -
入门浅谈C语言
目录入门体会版入门知识简单经典应用排序经典应用打印图案入门体会版hello world C C++ Python_腾班小怪的博客-优快云博客两个数的和 入门简单版 C C++ Python_腾班小怪的博客-优快云博客入门知识C语言的关键字_腾班小怪的博客-优快云博客C语言 格式转换字符_腾班小怪的博客-优快云博客常用的转义字符 C语言_腾班小怪的博客-优快云博客C语言 运算符与表达式_腾班小怪的博客-优快云博客C语言 ...原创 2022-02-23 17:16:59 · 319 阅读 · 0 评论 -
常用的转义字符 C语言
转义字符转义字符是一种特殊的字符常量。以反斜线"\"开头,后跟字符。具有特定的含义,不同于字符原有的含义,故称“转义”字符。上表转义字符 含义 \n 回车换行,光标移到下一行的行首。 \r 回车,光标移到当前行的行首,把当前行前面全部删掉 \t 制表符,即Tap键,光标右移一个制表位,即四个空格 \b 退格,删掉前面一个字符 \a 鸣铃 \' 输出一个单引号 ‘ \" 输出一个双引号 “ \\ 输出一个反斜线原创 2022-02-23 16:51:30 · 864 阅读 · 0 评论 -
C语言 条件运算符 ?: 唯一的一个三目运算符
符号: ?:C语言唯一的一个三目运算符。条件表达式的一般形式:表达式1 ? 表达式2 : 表达式3如果表达式1的值为真,即非0,那么以表达式2的值作为整个条件表达式的值,否则以表达式3的值作为整个条件表达式的值。例子:max=a>b?a:b;这个就是把a和b之间的较大者赋值给max。灵活使用 ?:可以达到意想不到的的效果。...原创 2022-02-22 12:40:49 · 1701 阅读 · 0 评论 -
C语言 运算符的优先级与结合性
说明根据运算符所带的操作数的数量进行划分,C语言的运算符有三种类别:单目运算符:只带一个操作数的运算符。如:++运算符。双目运算符:带两个操作数的运算符。如:+、-、*、/、%运算符。三目运算符:带三个操作数的运算符。如:?:运算符。一般是,单目运算符的优先级高于双目运算符,双目运算符的优先级高于三目运算符。上表格优先级 运算符 含义 运算类型 结合性 1 ( ) 圆括号、函数参数表 单目运算符 自左向右 [ ] 数组原创 2022-02-21 18:49:53 · 2618 阅读 · 0 评论 -
C语言 运算符与表达式
目录前言赋值运算符、赋值表达式1.赋值运算符2.赋值表达式3.赋值语句4.用法强制类型转换符1.自动转换2.强制转换算术运算符、算术表达式1.算术运算符2.算术表达式自增自减运算符sizeof运算符复合赋值运算符前言运算符是用来处理数据的。用运算符将变量和常量连接起来的符合C语言语法规则的式子称为表达式。单个常量、变量或函数是简单表达式。根据运算符所带的操作数的数量进行划分,C语言的运算符有三种类别:单目运算符:只带一个操作数的原创 2022-02-21 11:32:27 · 1970 阅读 · 0 评论 -
图灵机 X+1 C语言
碎碎念念首先把它变成二进制,由于在原码上变换,所以正负分开算,负数就最高位放1,然后减一,正数直接加一。8位 代码可算:-127~127#include<stdio.h>void output(int num[])//输出函数 { int i; for(i=0;i<8;i++) printf("%d",num[i]); printf("\n"); }void minus(int number)//负数操作 { int i=8,num[8]; numb原创 2022-02-20 16:30:10 · 1619 阅读 · 0 评论 -
C语言 格式转换字符
格式转换符 含义 对应的表达式数据类型 %d、%i 以十进制形式输出一个整型数据 有符号整型(int) %lld 以十进制形式输出一个长长整型数据 有符号长长整型(long long) %f 以十进制形式输出一个单精度浮点型数据 浮点型(float) %lf 以十进制形式输出一个双精度浮点型数据 浮点型(double) %c 输出一个字符型数据 字符型(char) %o 以八进制形式输出一个无符号整型数据原创 2022-02-19 09:19:28 · 1351 阅读 · 0 评论 -
汉诺塔 详解 C C++ Python
碎碎念念我们把第一个柱子叫做A,第二个柱子叫做B,第三个柱子叫做C。如果只有一块,那么直接从A搬到C。如果有两块,我们应该先把最下面那块搬到C,那么要把最下面那块搬到C,就必须先把它上面的那块移开,也就是先放在B,这样才能把最下面的那块搬走,最后再把B上面的那块搬到C。如果有n块呢,这里就要用到递归的思想,无论有多少块,我们都要先考虑把最下面的那一块搬到C,那么要把最下面那一块搬到C,就必须先把它上面的全部移开,也就是先放在B,那么问题就变成了如何把这n-1块从A搬到B,你看问题的规模是不是原创 2022-02-18 12:30:49 · 346 阅读 · 0 评论 -
百钱买白鸡 C C++ Python
C#include <stdio.h>int main(){ int cock,hen; for(cock=0;cock<=20;cock++) for(hen=0;hen<=33;hen++) if(5*cock+3*hen+(100-cock-hen)*1.0/3==100) printf("cock=%d hen=%d chick=%d\n",cock,hen,100-cock-hen);}C++#include <iostream>原创 2022-02-17 19:29:07 · 429 阅读 · 0 评论 -
判断素数 C C++两个版本
题目输入一个数,判断是否是素数。C代码#include<stdio.h>#include<math.h>int judge(int num) { int i; if(num<2) return 0; for(i=2;i<=sqrt(num);i++) if(num%i==0) break; if(i>sqrt(num)) return 1; return 0;} int main(){ int num; scanf(.原创 2022-02-13 22:43:33 · 300 阅读 · 0 评论 -
希尔排序 C语言
碎碎念念希尔排序是插入排序的一种,是直接插入排序的改进版。我们首先来看直接插入排序,其基本思路是,一般先孤立这堆数字的第一个数,那么它自己一个就是有序了,再拿后面的数和它比较,找到大小位置合适的插进去,完了之后这一小堆还是有序的,再拿后面的来和前面的比较,找到合适的位置插进去,直到全部插完。直接插入排序的优势从直接插入排序的思想可以知道,如果这堆数原本就比较有序了,那么直接插入排序是非常高效的,因为交换次数会少很多。直接插入排序的劣势但有一种情况是,假设是从小到大排序,前面已经排好了原创 2022-02-13 13:02:57 · 774 阅读 · 1 评论 -
C语言的关键字
说明以下关键字顺序已按学习先后顺序编排。关键字 用途 void int short long long long float double signed unsigned char while do for break continue if else switch cas..原创 2022-02-13 04:00:00 · 907 阅读 · 0 评论 -
大数模拟之加法 高精度 C语言
碎碎念念由于int只能存大约10位的整数,long long也只能存大约19位的整数,超过19位的数处理都要用字符串来一位一位人工运算。大数加法应该是加减乘除里面最简单的,当然,是相对而已。废话不多说,上代码。代码#include<stdio.h>#include<string.h>#define max 1000//max即能处理的最大数位,可修改。 int main(){ int i,j,tag=0; char plus1[max],plus2[原创 2022-02-12 16:32:08 · 547 阅读 · 0 评论