C语言
一个菜鸟学习编程之路
吾日叁問
雷达信号处理
展开
-
【Linux C】数据类型和存储才是C语言的精髓
目录变量的本质数据类型和类型转换有符号数和无符号数、数据溢出定义和声明的区别程序、程序文件模块和函数之间的关系局部变量、全局变量、外部变量、静态变量、作用域、生命周期内存中的段(section)变量的本质这里要说的变量既有普通变量,也有指针变量(被我们常常简称为指针)。先说普通变量:int a = 10;如定义一个整型的变量a,初始值为10。这句话给出了三个信息,分别是变量类型、变量名和变量值,这三个信息分别和存储大小、存储地址和存储内容一一对应。变量名的.原创 2022-04-08 21:19:41 · 888 阅读 · 0 评论 -
【Linux C】内存管理,结构体,枚举,字符串和字符数组
目录1. 内存管理方式2. 字符串和字符数组3. 结构体struct4. 共用体union5. 大小端模式6. 枚举enum1. 内存管理方式在C语言程序中,存放数据所能使用的内存空间大概分为四种情况:栈stack、堆heap、数据区【也被成为静态数据区,静态区】(.data和.bss区,限定为数据,所以无.text)和常量区(.ro.data)。.data和.bss无本质区别,.data存放的是显示初始化为非0的静态数据,.bss存放的是显示初始化为0或未显示初始化的静原创 2020-12-27 15:59:33 · 303 阅读 · 0 评论 -
【Linux C】编译链接过程
我们平时说的编译器实质上指的是编译工具链。预处理用预处理器,汇编用汇编器,链接用链接器,这几个工具再加上其他一些额外会用到的工具,合起来叫编译工具链。GCC就是一个编译工具链。写一个C源代码hello.c预处理:预处理器将#include<stdio.h>在原地展开,所以头文件包含一般放在程序文件的最前面部分。 编译:编译器将hello.i翻译成hello.s汇编文件,汇编程序是一条条通用的机器语言指令。 汇编:汇编器将hello.s翻译成机器语言指令,将这些指令打包成为***..原创 2020-12-27 16:00:35 · 180 阅读 · 0 评论 -
【Linux C】存储类相关的关键字
目录1. 存储类相关的关键字2. 链接属性1. 存储类相关的关键字auto用来修饰局部变量,表示这个局部变量是自动局部变量,分配在栈上,如果不初始化,值就是随机的。 平时定义局部变量时就是定义auto的,只是省略了auto关键字而已。static用法一:修饰局部变量,形成静态局部变量。静态局部变量分配在data或bss段上。 用法二:修饰全局变量,形成静态全局变量。修饰函数,函数和全局变量的作用范围就被锁定在了本文件中,其他文件在链接时无法使用这些函数和全局变量,这就是内链接问原创 2020-12-27 17:12:08 · 1034 阅读 · 0 评论 -
【Linux C】指针和数组
目录1. 为什么需要数组?2. 深刻理解数组3. 一维数组中几个关键符号的理解4. 数组的访问方式5. 指针变量数据类型的强制转换6. 指针,数组和sizeof7. 数组的传参8. 指针数组和数组指针9. 二维数组1. 为什么需要数组?原因显而易见,比如要录入100个学生的成绩,如果没有数组就必须定义100个变量,就很麻烦,为此C语言引入了数组。也可以参考这个例子,计算用户输入的数字的平均数,并输出所有大于平均数的数。2. 深刻理解数组从编译器角度来说,.原创 2020-12-29 13:41:42 · 475 阅读 · 0 评论 -
Ubuntu18.04 安装Eclipse搭建C语言开发环境
第1步:磁盘划分50G用来安装虚拟机,划分的步骤参考链接http://www.coozhi.com/youxishuma/diannao/77881.html第2步:安装虚拟机工具VMWare第3步:安装Ubuntu18.04.4版本的系统,因为用的多,遇到问题容易找到解决办法。最新的版本是20.04.x.x.Ubuntu系统和VMWare安装包直接放在硬盘里,方便下次安装。第4步:使用命令行搭建C语言开发环境,参考博客https://blog.csdn.net/woosky_92/ar原创 2021-07-08 22:33:23 · 957 阅读 · 2 评论 -
【查找算法】二分查找
#include <stdio.h>int Bsearch(int *p, int n, int x);int main(){ int a[10] = {1,2,3,4,5,6,7,8,9,10}; int x, m; printf("Enter x: "); scanf("%d", &x); m = Bsearch(a,10,x); if(m>=0) printf("index is %d\n", m); else printf("Not...原创 2021-04-17 13:40:05 · 190 阅读 · 0 评论 -
【排序算法】冒泡排序
题目:输入n个正整数,将它们从小到大排序后输出,使用冒泡排序算法。#include <stdio.h>void bubble(int a[], int n);int main(){ int n,i; int a[10] = {0}; //Input printf("Enter n(n≤10): ");//输入n scanf("%d", &n); printf("Enter %d integers: ", n);//输入n个数 for(i = 0; i原创 2021-04-14 22:47:33 · 461 阅读 · 1 评论 -
【排序算法】选择排序
题目:选择排序法。输入一个正整数n(1<n≤10),再输入n个整数,用选择选排序法将他们从小到大排序后输出。#include <stdio.h>int main(){ int n,i,k,index,temp; int a[10] = {0}; //Input printf("Enter n: ");//输入n scanf("%d", &n); printf("Enter %d integers: ", n);//输入n个数 for(i = 0;原创 2021-04-14 21:56:21 · 2654 阅读 · 0 评论 -
【C语言】指针进阶(一)
目录1.指针数组的概念2.二级指针、二维数组的指针形式、指针数组和二级指针2.1 二级指针:指向指针的指针2.2 二维数组的指针形式2.3 指针数组和二级指针3. 用指针数组处理多个字符串3.1 指针数组和二维数组3.2 指针数组操作多个字符串3.3 动态输入多个字符串1.指针数组的概念char *color[5];//指针数组定义int a[100];int *p = a; //定义一个整型指针,指向数组score的首地址int *p = &...原创 2020-12-21 22:03:13 · 488 阅读 · 0 评论 -
【C语言】程序结构
目录1. 嵌套调用2. 递归调用3 编译预处理指令3.1 宏定义(#define)3.2 文件包含(#include)3.3 条件编译1. 嵌套调用2. 递归调用关键点:递归出口:就是递归的结束条件 递归式子:递归的表达式递归是一种常用的手段,但递归程序设计的技巧性要求比较高,有时很难归纳出递归式子。区分程序书写和程序执行/* 计算n! */#include <stdio.h>double fact(int n); /*函数声明*/i原创 2020-12-17 18:40:13 · 350 阅读 · 0 评论 -
【C语言】结构
目录1. 结构变量2. 结构数组3. 结构指针1. 结构变量关键字struct和它后面的结构名一起组成一个新的数据类型名,如struct student是一个数据类型。结构的定义以封号结束,这因为C语言中把结构的定义看做一条语句。 结构成员运算符的优先级属最高级别,一般情况下都是有限执行。 只有相同结构类型的变量之间才可以直接赋值。/* 输出平均分最高的学生信息 */ #include <stdio.h>struct student{//struct stude原创 2020-12-17 11:47:01 · 990 阅读 · 0 评论 -
【C语言】指针基础
目录1. 直接访问和间接访问2. 指针变量的定义3. 指针的基本运算4. 指针变量的初始化5. 指针作为函数的参数(主角是指针,和函数的关系)6. 指针、数组和地址的关系7. 数组名作为函数的参数(数组名是个指针常量,本质上也等同于指针作为函数参数)8. 字符串和字符指针9. 常用的字符串处理函数1. 直接访问和间接访问直接通过变量名访问(直接访问)不挺好吗,为什么还要间接访问(指针)呢,是不是多此一举?解释:通过指针,程序能访问的内存区域就不仅限于变量所占据原创 2020-12-15 20:03:08 · 1114 阅读 · 0 评论 -
【C语言】数组和函数
目录1. 数组1.1 由例子引入数组1.2 数组的定义1.3 数组举例1.4 二维数组2. 函数2.1 由例子引入函数2.2 函数的定义和使用2.3 函数的参数和变量2.3.1 函数声明2.3.2 参数传递2.3.3本地变量/局部变量/自动变量(作用域和声明周期)2.4 其他细节这个课程内容的安排真的是很有条理,由易到难,由浅入深。比如讲解函数和数组之前,先通过例子说明为什么要引入它们,是为了方便解决某些问题的。而不是开篇就是数组是怎么定...原创 2020-11-26 17:29:09 · 6498 阅读 · 0 评论 -
【C语言】循环
1 while循环-- 判断一个正整数是几位数条件不满足,可能一次都不执行。2 do-while循环先执行一次。3 for循环-- 计算log2(x)循环本身语法并不难,编程难在哪?难在想问题,怎么把问题变成程序。循环值怎么取?例子3.1 求平均数3.2 猜数游戏3.3 整数分解4 多重循环4.1 break和continue的区别-- 判断是否一个数是否是素数引出break:如果输入的数对2取余等于0,那就可以直接判定这个数不是素数,就不需要进行下面的循环了原创 2020-11-18 11:11:50 · 843 阅读 · 0 评论 -
【C语言】判断
目录1. if语句-- 比较数的大小2. if-else语句-- 比较都两个数的大小3. 嵌套if-else-- 比较三个数的大小4. 级联if-else if-else-- 计算分段函数5. switch-case-- 对级联if-else if-else的改进5.1 成绩转换5.2 输出对应的月份视频只能起到穿针引线的作用,真正提升还是要不断的自己写代码,不断的学习“错误”才能进步。所以陈姥姥强调了看完视频要把书本对应的章节再看一遍,然后做对应章节的测验。学习顺序就是听课原创 2020-11-18 00:21:32 · 3980 阅读 · 0 评论 -
【C语言实用知识】字符
1. 基本概念字符和整数没有本质的区别 char 变量在内存中存储的是字符对应的 ASCII 码值。如果以 %c 输出,会根据 ASCII 码表转换成对应的字符,如果以 %d 输出,那么还是整数。int 变量在内存中存储的是整数本身,如果以 %c 输出时,也会根据 ASCII 码表转换成对应的字符。 ASCII 码表将整数和字符关联起来了2. 必须掌握的库函数int i...原创 2019-09-07 17:54:01 · 156 阅读 · 0 评论 -
编程准备工作
目录1. 集成开发环境(IDE)选择2. C++学习路线3. 适合初学者的开源项目4. 自学编程的误区5. oj(online judge)平台6. 学习建议了解学习路线之后,不会轻易迷路。了解编程的误区,能避免自己少踩坑,别人踩过的,我们就没有必要再去浪费时间。1. 集成开发环境(IDE)选择Visual Studio 2019(√)微软自带的MS编译器,太大,启动速度比较慢,公司里用的比较多。VS2019的安装教程参考链接 CodeBlocks Dev C++..原创 2020-11-22 19:48:21 · 327 阅读 · 0 评论 -
怎样提高编程能力
对基础知识的学习,不要纠结,不要恋战,快速的过一遍,大概理解即可,然后快速的进入实际框架的学习中。 在自学编程的过程中,一定要记学习笔记,一定要收集Demo 实践。我觉得学习编程第一步应该是要搞清楚学习编程有哪些必备的网站?我们是如何查资料的?我们是如何解决问题的?国内外有哪些技术社区比较好?......学习编程不是参加应试考试常见的学习编程网站:中国大学MOOC、慕课网、哔哩哔哩、LeetCode、极客时间 技术社区:Github、Stackoverflow、v2ex、掘金、csdn、segm原创 2020-12-05 13:47:59 · 316 阅读 · 0 评论 -
学习新技术之前要弄清楚下面的几个问题
学习一门新技术之前弄清楚几个问题为什么要学习它?也就是学习的目的是什么,为了干什么才去学习它的?知道学了之后有什么用,会给自己带来什么帮助,这样学起来才会更有动力。学习流程/路线。弄清楚学习这个新技术的框架,尽可能避免在学习中期的迷茫。学习过程中,要知道自己处于哪个阶段,接下来该干什么事,这样干起事来才更高效。比如学git的使用,掌握了基本的命令之后,知道如何从GitHu...原创 2019-08-26 16:41:46 · 396 阅读 · 0 评论 -
C语言概述
整体的内容:程序的结构,数据类型,常量与变量,运算符,流程控制,数组,函数,指针。变量在定义时最好初始化,这是一个编程的好习惯 建议程序员少用short,慎用int,多用long,内存不是问题,程序的稳定高于一切 选择和循环结构的本质就是跳转(汇编) char 变量在内存中存储的是字符对应的 ASCII 码值。如果以 %c 输出,会根据 ASCII 码表转换成对应的字符,如果以 %d...原创 2019-09-07 17:22:33 · 149 阅读 · 0 评论 -
C语言重点知识
C语言的重点知识流程控制(for循环) 函数 (结构化设计基础) 参数个数的选择,函数功能尽量单一独立(多写,多看优秀代码,多总结) 指针、动态内存分配 (很重要) 结构体、枚举、联合体循环for和while的应用场景 嵌套循环打印图案:外层循环控制行(行数和换行),内层循环控制列(列数和列的图形)数组定义:长度可以为常量或者变量(C99) 赋初值:定义时直接赋初值或者循环动态赋初值 操作一维数组 动态从键盘录入信息并赋值 求max,min并返回下标 数组中奇...原创 2020-11-28 16:49:37 · 165 阅读 · 0 评论 -
【C语言实用知识】浮点数
1. 基本概念float只能表达6-7位的有效数字,不能用“==”判断两个数字是否相等。 double能表达15-16位有效的数字,可以用“==”判断两个数字是否相等。 long double和double的特征相同。在实际开发中,建议弃用float,只采用double就可以,long double暂时没有必要。浮点数采用%lf输出,完整的输出格式是%m.nlf...原创 2019-09-07 17:48:03 · 573 阅读 · 0 评论 -
第三章练习题和习题错误合集
目录练习3-3统计学生平均成绩与及格人数练习3-5输出闰年习题3-5三角形判断到这里,也只是做完了《C语言程序设计(第3版)》题目集中第三章的练习题和习题,主要是对选择结构的练习。下面几点是个人在这些天的一些想法。对任何的一个小错误都要通过调试或者搜索去解决它,这不仅会培养自己的搜索能力,同时让自己熟悉debug。 刚开始做题肯定慢,一定要耐住性子,做的多自然就快了。 对于一个题目,如果看了十分钟还没有思路,可以直接看参考答案,看看别人是怎么解决的。做题的目的之一不就是见多识...原创 2020-11-20 11:33:44 · 243 阅读 · 0 评论 -
对两天编程课的小结
目录知识理解深度技术学习理念个人评估表知识理解深度对知识点的理解深度不一样,提升了我的认知,开拓了眼界。比如声明和定义,从C源码的编译和链接这个角度去讲解,声明作用于编译阶段,没有定义编译一样能通过;而定义作用于链接阶段。从如何调用第三方库去讲解,静态链接库提供的是定义,头文件提供的是声明。声明和定义分开是工程上的一种编码规范。比如通过讲解实例说明宏定义的功能只是简单替换,条件式编译的功能只是简单的代码裁剪。给我的启发就是在接下来的学习过程中,要注意对概念的深层次理解。【你永远不知道你不原创 2020-09-27 21:28:14 · 374 阅读 · 0 评论 -
编程第二课
预备知识之宏定义预处理命令家族都是以#号开头的,最早接触的是#include。宏定义是#define开头,代表的意思就是“简单替换”。下面就通过3个例子来加深对宏定义功能(简单替换)的理解。定义符号常量#define PI 3.1415926gcc -E 是对语言文件进行预处理的命令。输出的结果是正确的,并查看待编译源码,这里也没什么问题。定义一个表达式#define S(a,b) a * b问题出现怎么办?当然不能做盲人工程师,查看它的待编译源码就完事了。下面是原创 2020-09-27 21:07:57 · 124 阅读 · 0 评论 -
编程第一课
目录重视基础技术学习理念如何调用第三方模块重视基础结论是:不推荐初学者将C++作为第一门语言学习。正确的学习顺序应该是先学习C语言,然后学习编程基础4大件(主要是数据结构和算法(在牛客网或者leetcode上会刷题并不代表有数据结构和算法思维,但是这是需要必经的过程)、计算机网络、操作系统、设计模式,Linux系统编程和网络编程。基础并不代表简单,越是基础的东西可能越难,一定要重视基础学习。会进行app的开发并不能说明你基础好,两者之间没什么逻辑关系。),等到基础夯实之后再去学习C.原创 2020-09-26 13:24:09 · 608 阅读 · 0 评论