零基础学习C语言
文章平均质量分 78
C语言是一门经典而强大的编程语言,它为许多其他高级编程语言提供了基础,并在操作系统、嵌入式系统、游戏开发、系统编程等领域广泛应用。掌握C语言不仅能够让你理解计算机底层工作原理,还能为你打开编程世界的大门。
小夕Coding
大厂程序员,阿里P9
展开
-
C语言修佛成仙学习教程
有人问我怎么学习C语言,我来答复了原创 2021-03-19 21:49:05 · 658 阅读 · 0 评论 -
专栏简介:零基础学习C语言
本专栏将覆盖C语言编程的基础知识,从最简单的概念和语法开始,逐步深入,直至掌握更高级的编程技巧。第1部分:C 语言基础C语言介绍:了解C语言的历史、发展和在计算机编程中的重要性。开始使用C语言:安装C语言编译器,编写你的第一个C程序(Hello World)。数据类型和变量:学习C语言的基本数据类型、声明和初始化变量的方法。运算符和表达式:掌握C语言中的算术、关系和逻辑运算符。控制流程:学习if-else条件语句、switch-case语句和循环结构。原创 2023-07-22 22:57:20 · 49 阅读 · 0 评论 -
C 多维数组
从这个意义上来说,数组a中的每个元素都由a[i][j]形式的元素名称标识,其中’a’是数组的名称,'i’和’j’是索引唯一标识或显示’a’中的每个元素。你可以说编译器将知道有两个“维度”,但是,你必须需要a[y]值,编译器虽然很聪明,但它不知道你在维度中使用了多少个整数,字符,浮点数。我们看到的数组都是一维的,但C可以创建和使用多维数组。下面是一个包含3行的数组,每行有4列。要声明一个大小为[x][y]的二维整数数组,你会写这样的东西-通过使用下标(即,数组的行索引和列索引)来访问二维数组中的元素。原创 2022-09-04 15:21:36 · 152 阅读 · 0 评论 -
Pointers
括号运算符 - 例如,访问数组的第一项。由于我们知道内存是顺序的,我们可以假设如果我们在内存中向前移动到下一个字符,我们将收到字符串中的下一个字母,直到我们到达字符串的末尾,标记为空终止符(序数值为0的字符,标记为\0)。如果我们尝试将name变量作为数组访问,它将起作用,并将返回字符的序数值J,因为name变量实际上指向字符串的开头。创建一个指向所n调用的局部变量的指针pointer_to_n,并使用它将n的值增加1。指针本质上是一个简单的整数变量,它保存一个指向值的内存地址,而不是保存实际值本身。原创 2022-09-04 10:34:05 · 291 阅读 · 0 评论 -
C 变量和类型
A的char范围仅为-128到127,而a的long范围可以从-2147483648到2147483647(long其他数字数据类型可能在不同计算机上有另一个范围,例如 -从64为计算机上的-9223372036854775808到9223372036854775807)。对于数字,我们通常会使用类型int,这是一个“字”大小的整数,是编译程序的机器默认数字大小。foo可以使用变量,但由于我们没有初始化它,我们不知道它里面有什么。在接下来的练习中,您将需要创建一个程序,它打印出数字的总和a, b和c。原创 2022-09-04 10:20:14 · 130 阅读 · 0 评论 -
C中的字符串
我们需要添加一个的原因,虽然字符串John Smith长度正好是10个字符,但是用于字符串终止:一个特殊字符(等于0),表示字符串的结尾。函数’strncat’将src字符串字符串的前n个字符追加到目标字符串,其中n是min(n,length(src));传递的参数是目标字符串,源字符串和n - 要追加的最大字符数。这种表示法是不同的,因为它分配了一个数组变量,所以我们可以操纵它。请注意,在打印字符串时,我们必须添加换行符(\n)字符,以便我们的下一个printf语句将以新行打印。原创 2022-09-04 10:19:37 · 60 阅读 · 0 评论 -
C中的字符串
我们需要添加一个的原因,虽然字符串John Smith长度正好是10个字符,但是用于字符串终止:一个特殊字符(等于0),表示字符串的结尾。函数’strncat’将src字符串字符串的前n个字符追加到目标字符串,其中n是min(n,length(src));传递的参数是目标字符串,源字符串和n - 要追加的最大字符数。这种表示法是不同的,因为它分配了一个数组变量,所以我们可以操纵它。请注意,在打印字符串时,我们必须添加换行符(\n)字符,以便我们的下一个printf语句将以新行打印。原创 2022-09-04 10:18:54 · 145 阅读 · 0 评论 -
static关键字
默认情况下,变量是定义它们的作用域的本地变量。变量可以声明为static,以将其范围增加到包含它们的文件。因此,可以在文件内的任何位置访问这些变量。在本练习中,尝试使用static关键字查找某些数字的总和。虽然静态变量在包含它们的文件上具有范围,使得它们只能在给定文件内访问,但全局变量也可以在文件外部访问。默认情况下,函数在C中是全局的。如果我们声明一个函数static,该函数的范围将减少到包含它的文件。我们将看到它count没有更新,因为它在函数完成后立即从内存中删除。它可以与变量和函数一起使用。原创 2022-09-04 10:18:15 · 81 阅读 · 0 评论 -
LinkedLists
让我们构建一个打印出列表中所有项目的函数。在打印节点的值之后,我们将current 指针设置为下一个节点,然后再次打印,直到我们到达列表的末尾(下一个节点为NULL)。要从列表中删除特定项目,无论是通过列表开头的索引还是通过其值,我们都需要检查所有项目,不断向前看,看看我们是否已经到达项目之前的节点我们希望删除。这意味着我们必须从列表的开头开始,计算我们在列表中前进的次数,直到我们到达所需的项目。我们将其设置为从头部开始,然后在每个步骤中,我们将指针前进到列表中的下一个项目,直到我们到达最后一个项目。原创 2022-09-04 10:17:15 · 128 阅读 · 0 评论 -
BinaryTrees
二叉树是一种数据结构,其中每个节点最多有两个子节点(左子节点和右子节点)。二叉树是K-ary树的特例,其中k是2.二叉树的常见操作包括插入,删除和遍历。如果树是平衡的,并且节点是叶节点还是分支节点,则执行这些操作的难度会有所不同。这是从根到叶的节点的度量,其中root为0,后续节点为(1,2…这可以用log 2(n)的整数部分表示,其中n是树中节点的数量。深度优先搜索(DFS)是用于遍历或搜索树或图数据结构的算法。深度优先搜索遍历有三种类型:预订访问,左,右,有序左,访问,右,后订单左,右,访问。原创 2022-09-03 22:37:41 · 92 阅读 · 0 评论 -
Unions
C Unions与C Structures基本相同,不同之处在于Union不允许包含多个变量,每个变量都有自己的内存,而Union允许同一个变量使用多个名称。这些名称可以将内存视为不同的类型(并且联合的大小将是最大类型的大小,+编译器可能决定给它的任何填充)创建一个存储21个字符和6个整数的数组的联合(6个自21/4 == 5,但5 * 4 == 20,因此本练习需要1个以上),您将整数设置为6给定值,然后将字符数组打印为一系列字符和字符串。在那个例子中,你可以看到有一个结构包含美国的四个(普通)硬币。原创 2022-09-03 22:37:00 · 195 阅读 · 0 评论 -
Structures
Typedef允许我们定义具有不同名称的类型 - 在处理结构和指针时可以派上用场。在这种情况下,我们想要摆脱点结构的长定义。现在,让我们定义一个新点,然后使用它。结构也可以保存指针 - 这允许它们保持字符串,或指向其他结构的指针 - 这是它们的真正力量。定义一个名为“person”的新数据结构,其中包含一个调用的字符串(指向char的指针)name和一个名为的整数age。由于品牌是char指针,因此车辆类型可以包含字符串(在这种情况下,表示车辆的品牌)。要访问点的变量,我们使用点.运算符。原创 2022-09-03 22:36:24 · 152 阅读 · 0 评论 -
C动态分配
该myperson变量仍然指向内存的某个地方-但打完电话后myperson,我们不允许再访问该地区。在我们使用它分配新数据之前,我们不能再使用该指针。要动态分配一块内存,我们必须准备一个指针来存储新分配的内存的位置。我们可以使用相同的指针访问分配给我们的内存,一旦我们完成使用它,我们就可以使用该指针再次释放内存。请注意,这sizeof不是一个实际的函数,因为编译器会解释它并将其转换为person结构的实际内存大小。这告诉编译器我们想要动态分配足以在内存中保存person结构,然后返回指向新分配数据的指针。原创 2022-09-03 22:35:52 · 219 阅读 · 0 评论 -
C指针运算
你可能想知道为什么?答案很简单:因为我们的指针是一个int指针,并且int变量的大小是4个字节,所以内存可以移位4个块。在我们的代码中,我们将2(加上+2)移动到初始地址,这样就使它们成为2 x 4字节= 8。在我们的例子中,变量是一个指针,因此当我们增加它的值时,我们增加了指针所指向的内存中的地址。就像在前面的例子中一样,我们使用++运算符将指针的指向地址增加了一个,我们可以使用减量运算符( - )减少指向的地址。将intarray的最后三个地址复制到parray中,这是一个指向int的指针数组。原创 2022-09-03 22:35:17 · 92 阅读 · 0 评论 -
数组和指针
此外,由于这是一个字符数组,每个元素占用一个字节,因此连续的存储器地址被一个字节分开。此外,和返回相同的事情-的地址我个数组的元素。但是,请记住,pvowels实际上它是一个指针,并且如指针和数组中所指出的,指针和数组通常不是一回事。不应分配额外的内存。但是,您已经熟悉可以在连续分配的内存块中保存相同数据类型的多个值的数组。与我们使用指针的一维数组不同,在这种情况下,我们需要一个指向指针的指针,如下所示。在之前的Pointers教程中,您了解到指向给定数据类型的指针可以存储该特定数据类型的任何变量的地址。原创 2022-09-03 22:34:38 · 96 阅读 · 0 评论 -
C Arrays
使用相同的语法从数组中访问数字。请注意,C中的数组是从零开始的,这意味着如果我们定义了一个大小为10的数组,则定义了数组单元格0到9(包括)。numbers[10]数组只能有一种类型的变量,因为它们是作为计算机内存中的一系列值实现的。因此,访问特定的阵列单元非常有效。数组是特殊变量,可以在同一个变量名下保存多个值,并使用索引进行组织。原创 2022-09-03 22:34:09 · 107 阅读 · 0 评论 -
C 中的 fgetc() 和 fputc()
fgetc()fgetc() 用于一次从文件中获取单个字符的输入。该函数返回函数读取的字符的 ASCII 码。它返回文件指针指示的位置处的字符。读完字符后,文件指针前进到下一个字符。如果指针位于文件末尾或发生错误,则此函数返回 EOF 文件。句法:int fgetc(FILE *pointer)pointer: pointer to a FILE object that identifies the stream on which the operation is to be performed.原创 2022-05-27 20:38:11 · 248 阅读 · 0 评论 -
C++ 面试题
惯例,这笔试题也是一个读者朋友发给我的,简单看了下,并不觉得这是一个非常困难的题目,最近是校招准备的时候,很多人给我说发面试题对大家有帮助。这个题目面试官强调了这个跑在64位系统下。代码如下: #define mal(x,y) (x*y)int main(){ int i = 3; int a; char **b[5][6]; a = mal(i++, sizeof(b) + 5); printf("%d", a); return 0;}怎么确定指针大小原创 2022-02-20 14:53:51 · 204 阅读 · 0 评论 -
一些经典的嵌入式C面试题汇总
#error的作用是什么?#error指令让预处理器发出一条错误信息,并且会中断编译过程。下面我们从Linux代码中抽取出来一小段代码并做修改得到示例代码:这段示例代码很简单,当RX_BUF_IDX宏的值不为0~3时,在预处理阶段就会通过#error指令输出一条错误提示信息:"Invalid configuration for 8139_RXBUF_IDX"下面编译看一看结果:推荐文章:认识认识#pragma、#error指令位操作的基本使用给一个32bit...原创 2022-02-20 14:15:42 · 186 阅读 · 0 评论 -
C/C++面试题,看这一篇就可以了
C和C++的区别1、C是一个面向过程的结构化语言,考虑如何通过一个过程对输入进行处理得到输出;C++是面向对象的语言,包含:封装、继承和多态特征。封装隐藏了实现细节,使得代码模块化;派生类可以继承父类的数据和方法,扩展了已经存在的模块,实现了代码重用;多态则是“一个接口,多种实现”,通过派生类重写父类的虚函数,实现了接口的重用。2、C和C++动态管理内存的方法不一样,C是使用malloc/free,而C++除此之外还有new/delete关键字。3、C++支持函数重载,C不支持函数重载4原创 2022-02-20 14:18:07 · 395 阅读 · 0 评论 -
c语言经典面试题(附答案)
1.嵌入式系统中经常要用到无限循环,如何用C编写死循环答:while(1){}或者for(;;)2.程序的局部变量存在于哪里,全局变量存在于哪里,动态申请数据存在于哪里。答:程序的局部变量存在于栈区;全局变量存在于静态区;动态申请数据存在于堆区。3.关键字const有什么含义?答:1)只读。2)使用关键字const也许能产生更紧凑的代码。3)使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。4.请问以下代码有什么问题:in原创 2022-01-30 23:47:37 · 4906 阅读 · 4 评论 -
一文讲解C语言编译过程
每个 C 程序都必须有一个main函数,是因为main函数是一个程序执行的起点,如下所示。//main.c#include<stdio.h>intmain(){/*创建指向字符的指针来指向字符串常量,并在控制台输出*/char*str="HelloWorld!";//输出字符串常量strprintf("%s\n",str);return0;}编译如上所示,上面的m...原创 2022-01-25 18:45:25 · 167 阅读 · 0 评论 -
一文讲解C语言发展史
C 语言是一门功能强大的专业化编程语言,具有高级语言和汇编语言两者的特点,深受专业人员与业余爱好者的喜欢。C 语言作为一种计算机语言,可以开发很多靠近底层的应用。C语言的起源1971 年,丹尼尔·里奇(D.M.Ritchie)想玩肯·汤普森(Ken Thrompson)使用本人发明的 B语言编写的 Space Travel 游戏,就与肯·汤普森合作开发了 UNIX,主要工作是改进 B 语言。于是,1972 年,改进的B语言,被称为C语言。1973 年,C语言主体完成后,使用它重写了 UNIX。至原创 2022-01-25 18:44:27 · 546 阅读 · 0 评论 -
一文讲解C语言的文件流IO
I/O 操作是每个编程语言不可或缺的功能,用于不同设备之间的字节进行移进移出,这种字节流动的方式被称为流stream。流被分为文本流text stream和二进制流binary stream两种。 文本流,指的是由文本行组成的序列,在不同系统中可能不同。如文本行的最大长度和结束方式。 二进制流,指的是未处理的字节序列,不作修改,可直接传送。 文件文件file通常是磁盘或硬盘上的一段已命名的存储区。如 C 语言定义了结构体FILE,用于抽象的表示文件,并且也提供...原创 2022-01-25 18:43:11 · 1309 阅读 · 0 评论 -
一文讲解C语言存储类型
在 C 语言中,存储类型storage class是指存储变量的内存类型。存储类型决定了变量的创建、销毁和保存的生命周期,称为存储期。存储类型分为自动存储类型、外部存储类型、静态存储类型和寄存器存储类型四种类型。C 语言使用auto、extern、static和register四个关键字来标识变量所在的存储类型。auto使用关键字auto定义的变量属于自动存储类型,称为自动变量,具有自动存储期、块作用域、无链接,存储于堆栈中。自动存储期指的是程序执行到声明自动变量的代...原创 2022-01-25 18:42:19 · 1073 阅读 · 0 评论 -
一文讲解C语言语句
语句statement是 C 程序的基本构建块,以分号;结尾。一条语句相当于一条完整的计算机指令。C 语言的语句类型如下图所示。空语句C 中最简单的语句就是空语句,本身只包含一个分号。;//空语句空语句本身并不执行任何任务,但有时还是有用。它所适用的场合就是语法要求出现一条完整的语句,但并不需要它执行任何任务。表达式语句表达式expression由运算符和运算对象组成,每个表达式都有一个值,一些表达式也可由子表达式组成。2+3a=6+(c...原创 2022-01-25 18:41:06 · 925 阅读 · 0 评论 -
一文讲解C语言数据类型
C 语言中有四种数据类型——整型、浮点型、指针和聚合类型。所有其他的类型都是从这四种类型的某种组合派生而来。整型整型包括字符、短整型、整型和长整型,使用有符号signed和无符号unsigned两个关键字标记整型,其中signed为C90标准添加的关键字。规定整型值相互之间大小的规则为长整型至少应该和整型一样大,而整型至少应该和短整型一样长。C 语言针对不同情况,提供了不同的整数类型。特别是,C 语言中的整数类型可表示不同的取值范围和正负值。一般情况使用 int 类型即可。...原创 2022-01-25 18:39:58 · 191 阅读 · 0 评论 -
C语言中scanf函数的3种常见问题与应对技巧
在写代码时难免对一些知识点不熟悉,导致犯错,今天分享几点小知识给大家。空白符问题#include<stdio.h>int main(void){ int a; printf("input the data "); scanf("%d ",&a); //这里多了一个回车符 printf("%d",a); return 0;}结果要输入两个数程序才结束,而不是预期的一个。why?原因:用空白符结尾时,scanf会跳过空白符去读下一个字符,所以你必须再输原创 2022-01-25 18:37:28 · 353 阅读 · 0 评论 -
C语言杂记
C语言杂记初学者学习过程中认为的一些有趣的东西素数有关判断素数#include<stdio.h>#include<math.h>#include<stdbool.h>//素数判断,是素数返回true否则返回falseboolisPrime(intnum){boolret=true;//如果是偶数返回false//否则遍历至sqrt(num)if(num%2==0){...原创 2022-01-25 18:33:53 · 110 阅读 · 0 评论 -
C语言中内存四区的本质分析
1.1数据类型本质分析1.1.1数据类型的概念●“类型”是对数据的抽象●类型相同的数据有相同的表示形式、存储格式以及相关的操作●程序中使用的所有数据都必定属于某一种数据类型1.1.2数据类型的本质●数据类型可理解为创建变量的模具:是固定内存大小的别名。●数据类型的作用:编译器预算对象(变量)分配的内存空间大小。●注意:数据类型只是模具,编译器并没有分酤空间,只有根据类型(模具)创建变量(实物),编译器才会分配空间。1.2变量的本质分析1.2.1变量的概念概念:原创 2022-01-25 18:32:51 · 69 阅读 · 0 评论 -
C 语言那些漂亮的宏定义
怎么才能做好嵌入式开发?学好C语言吧!今天就来推荐一篇大佬写的嵌入式C语言知识点总结。C语言中的关键字 C语言中的关键字按照功能分为: 数据类型(常用char, short, int, long, unsigned, float, double) 运算和表达式(=, +, -, *, while, do-while, if, goto, switch-case) 数据存储(auto, static, extern,const, register,volatile,r...原创 2022-01-25 18:31:40 · 122 阅读 · 0 评论 -
C语言学习- 函数
构成C程序的基本单元是函数。函数中包含程序的可执行代码。每个C程序的入口和出口都位于main函数之中。编写程序时,并不是将所有内容 都放在主函数main中。为了方便规划、组织、编写和调试,一般的做法是将一个程 序划分成若干个程序模块,每一个程序模块都完成一部分功能。主函数可以调用其他函数,其他函数也可以相互调用。在main函数 中调用其他函数,这些函数执行完毕之后又返回到main函数中。通常把这些被调用 的函数称为下层函数。函数调用发生时,立即执行被调用的函数,而调用者则进入 等待的状态,直到被调用原创 2022-01-22 19:58:52 · 1125 阅读 · 0 评论 -
C语言结构体完全笔记,收藏
本次分享一篇关于结构体的入门、提高的笔记,文章比较长,前面部分是结构体基础,已经掌握的童鞋可以跳过,直接看看后半部分的提高实例。有的时候,我们所遇到的数据结构,不仅仅是一群数字或者是字符串那么简单。比如我们每一个人的学籍信息,学号是一个长整数,名字却是字符;甚至有更复杂的情况,这种问题在现实生活中并不少见。我们之前学过一种叫数组的数据结构,它可以允许我们把很多同类型的数据集中在一起处理。相对于之前,这已经是一次极大的进步。但是,新的问题,往往又会出现,这个时候,我们就得上更高端的装备——结构体。相比原创 2022-01-22 19:57:34 · 185 阅读 · 0 评论 -
一文讲解C语言操作符
C 语言提供了非常丰富的操作符,根据不同的语义选取不同的操作符,在程序中使用。根据操作符功能或使用方式对它们进行如下分类。算术操作符C 提供了以下几种算术操作符:+-*/% +、-、*、/既适用于浮点类型又适用于整数类型。/操作符的两个操作数都是整数时,执行整除运算,其他情况下执行浮点数除法。 %操作符为取模操作符,接受两个整型操作数,把左操作数除以右操作数,返回的值是余数而不是商。 移位操作符C 提供了以下移位操作符:...原创 2022-01-22 19:55:24 · 420 阅读 · 0 评论 -
一文讲解C语言字符串
字符串是一种重要的数据类型,但是 C 语言并未提供显式的字符串数据类型,而是用字符串常量或者字符数组来表示字符串。字符串表示字符串是一个或多个字符,并以空字符'\0'作为终止符。charstr[14]={'H','e','l','l','o',',','','W','o','r','l','d','!'};上述字符数组声明了 14 个字符,但初始化中只有 13 个字符,那是因为最后一个字符会自动加上'\0'终止符结束,当然,也可以手动加上。...原创 2022-01-22 19:53:27 · 460 阅读 · 0 评论 -
基于C语言的进度条实现
进度条的应用在软件中无处不在,拷贝一个文件需要一个进度条,加载一个文件也需要一个进度条,来标志完成与否。那么 ,一个进度条有哪些元素呢: 一个不断向右生长的容器(直观的看出当前的进度) 一个数据化反映进度的百分比。 一个标志(这个标志反映这个进度条是否在工作,还是卡死 首先我们需要将[ ]固定在左右两边,中间预留下空间,然后用“=”进行填充。这里printf("[%-101s]\r",str); 格式化输出,‘-’表示左对齐,100表示固定列宽,然后‘\r’ 表示回车..原创 2022-01-22 19:50:44 · 2093 阅读 · 0 评论 -
C语言关键字应用技巧
1、volatilevolatile修饰表示变量是易变的,编译器中的优化器在用到这个变量时必须每次都小心地从内存中重新读取这个变量的值,而不是使用保存在寄存器里的备份,有效的防止编译器自动优化,从而与软件设计相符合。中断服务与主程序共享变量://volatileuint8_tflag=1;uint8_tflag=1;voidtest(void){while(flag){//dosomething}}//interrupt...原创 2022-01-28 00:27:49 · 123 阅读 · 0 评论 -
30分钟玩转C语言指针
说到指针,估计还是有很多小伙伴都还是云里雾里的,有点“知其然,而不知其所以然”。但是,不得不说,学了指针,C语言才能算是入门了。指针是C语言的「精华」,可以说,对对指针的掌握程度,「直接决定」了你C语言的编程能力。在讲指针之前,我们先来了解下变量在「内存」中是如何存放的。在程序中定义一个变量,那么在程序编译的过程中,系统会根据你定义变量的类型来分配「相应尺寸」的内存空间。那么如果要使用这个变量,只需要用变量名去访问即可。通过变量名来访问变量,是一种「相对安全」的方式。因为只有你定义了它,你才能够原创 2022-01-22 19:47:24 · 167 阅读 · 0 评论 -
两道腾讯 C/C++ 面试题及答案
1、C和C++的特点与区别?C语言特点:作为一种面向过程的结构化语言,易于调试和维护;表现能力和处理能力极强,可以直接访问内存的物理地址。C语言实现了对硬件的编程操作,也适合于应用软件的开发;C语言还具有效率高,可移植性强等特点。C++语言特点:在C语言的基础上进行扩充和完善,使C++兼容了C语言的面向过程特点,又成为了一种面向对象的程序设计语言。可以使用抽象数据类型进行基于对象的编程。可以使用多继承、多态进行面向对象的编程;可以担负起以模版为特征的泛型化编程原创 2022-01-22 19:46:11 · 216 阅读 · 0 评论 -
C语言实现跳动的圣诞树,圣诞节表白去
这道理放在C语言学习上也一并受用。在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历的是日积月累的学习。那么如何学习呢?当然是每天都练习一道C语言题目!!白天搬砖,晚上做梦。我有故事,你有酒么?经典:如何用C语言画一个“圣诞树”,我使用了左右镜像的Sierpinski triangle,每层减去上方一小块,再用符号点缀。可生成不同层数的「圣诞树」源代码演示:#include<math.h>#include&..转载 2022-01-22 19:45:23 · 1716 阅读 · 0 评论