1.C语言配置详情
Vscode下载地址
https://code.visualstudio.com/https://code.visualstudio.com/vsCode 全称 Visual Studio Code,是微软出的一款轻量级代码编辑器, 免费、开源而且功能强大。它支持几乎所有主流的程序语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比Diff、版本管理GIT等特性,支持插件扩展,并针对网页开发和云端应用开发做了优化。软件跨平台支持 Win、Mac 以及 Linux。
vsCode打开大文件启动特别快,几乎跟纯编辑器无异,这种丝滑感是vsCode登顶全球编程类工具顶流的重要原因,它受欢迎的另一个杀手锏是其无比丰富的插件库,vsCode本质上是个框,一个大大的框,什么都能往里装,我们能想到的几乎任何功能,都能找到vsCode支持的插件,可以完全定制我们自己喜欢的功能。
安装部署cygwin
Cygwin是一个在windows平台上运行的类 UNIX 模拟环境,是cygnus solutions公司开发的自由软件。它对于学习UNIX/Linux操作环境,或者从UNIX到Windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用GNU工具集在Windows上进行嵌入式系统开发,非常有用。
下载
cygwin64https://www.weiyun.com/disk/folder/d32dc02d1f91051951134e0f014d251a
解压
获取cygwin64解压之后得到的bin文件夹的路径(不能含有中文),例 如:
设置环境变量
将上述路径设置到系统环境变量当中。依次点击“我的电脑”
“属性”,“高级系统设置”,弹出一下窗口后,点击“环境变量”
在弹出的窗口中,选择系统变量中的 Path 环境变量,点击编
辑、新建一个路径,将 cygwin\bin 所在的路径(不能含中文)
加到 Path 环境变量中,如下图所示:
注意,在 Windows7 以前的老系统中,点击环境变量 Path 的编辑按钮后弹出的输入框比较小,而且里面的各个路径是用英文分号分开,将 cygwin/bin 所在路径加入变量值即可,如下图所示:
Windows-7 的配置环境变量的界面
-
测试 按win+r打开运行窗口,输入cmd打开命令终端,输入gcc -v测试配置是否生效:
安装C/C++插件
vsCode的所有插件,都可以在左侧栏的“Extension(扩展)”中直接安装,如下图所示:
在插件库中输入C/C++,就可以看到所需安装的插件,C/C++插件主要提供命令推理、自动补齐、语法高亮等功能,如下图所示:
在vsCode插件库中找到C/C++插件
一般而言,直接点击“Install”并重启 vsCode 即可,但有些时候可能会因为网络问题而导致无法自动下载,使得安装失败,比如出现如下情况:
插件下载卡顿
这时可以通过离线的插件包到本地电脑安装:
-
点击下载C/C++离线插件包:cpptools-win32.vsix
-
按 ctrl+shift+p 打开 vsCode 命令面板,输入
install
,点击 “扩展:从 VSIX 安装:
离线安装 C/C++ 插件
安装 Code Runner 插件
为了更加方便地使用 vsCode,安装 Code Runner 插件可以一键编译和运行,在 vsCode 的扩展侧栏中输入 run
即可看到该插件,如下图所示:
安装 Code Runner 插件
注意: Code Runner默认没有在终端输入输出,这可能会在需要使用终端输入输出的程序中产生一些不必要的困扰,为了方便,一般可配置该插件输入输出为终端:
配置 Code Runner
使用vsCode
在部署好了 cygwin、C/C++、Code Runner 等增强插件之后,就可以在 vsCode 中愉快地编辑编译C语言程序了,具体步骤如下:
启动
启动 vsCode 并打开新窗口,点击打开文件夹。或者可以直接将文件夹拖进 vsCode。
直接将文件夹拖进 vsCode 即可开始编程
创建源代码
点击左侧栏的新建文件,开始编程程序:
新建文件
编译程序
由于已经安装了 Code Runner 插件,因此可以点击编辑框右上角的三角形来一键编译和运行:
一键运行
运行程序时自动展开的是终端调试窗,可以通过快捷键 ctrl +
` 来打开和关闭。另外,除了一键编译运行之外,也可以在终端中使用命令来分开控制编译和运行,在终端中使用如下指令来进行操作:
# 编译程序
gcc example.c -o example
# 运行程序
./example
用命令的方式编译和运行程序
由于前面过于简单故我们开始从数据类型开始讲
2.数据类型
数据类型是什么 为什么会有数据类型?
数据类型的分类
1.整型(短整型,整型,长整型,长长整型,无符号短整型,无符号整型,无符号长整形,无符号长长整型)
2.字符
3.浮点
4.字符串
什么是数据?
被称为有用的信息则被称为数据.
数据则是如何存入到内存中的呢?
cpu 不认识c语言只认识0or1 如:数字10 要存入到cpu中则需要转成二进制1010才能存入
故cpu只认二进制
字节(byte B):计算机存储容量的一种单位
比特位(bit) :二进制数,cpu计算的基本单位
-
二进制数 0 1
-
1字节 = 8位
-
1个千字节(KB) = 1024字节
-
1M = 1024KB
-
1G = 1024M
-
1T = 1024G
-
2.1整型
说白了整型就是整数 我们如何来存入呢?
我们需要输入关键字int 然后进行定义一个变量a or 其他你喜欢的字母来进行存储你给a存入的整数.我们定义的变量a其实就是在内存中开辟了一块空间而这块空间则是int型则为四个字节,故这四个字节有一定的取值范围为-2147483648~2147483647,如果超过这个范围则为内存泄漏也就是越界
int有四个修饰符如:short long longlong unsigned
short:用来缩短整型变量的尺寸,减少取值范围并节省内存,称为整型。
long:用来增长整型变量的尺寸,增大取值范围并占用更多的内存,称为长整型
long long:用来增长整型变量的尺寸,增大取值范围并占用更多的内存,称为长长整型
unsigned:用来去除整型变量的符号位,使得整型变量只能表达非负整数
short int a; // 短整型 %hd half
long int b; // 长整型 %ld
long long int c; // 长长整型 %lldunsigned int e; // 无符号整型 %u
unsigned short int f; // 无符号短整型 %hu
unsigned long int g; // 无符号长整型 %lu
unsigned long long int h; // 无符号长长整型 %llu如用了修饰符则关键字就可省略
格式控制符
int 整型:%d
short整型:%hd,h代表half,即一半的存储字节
long整型:%ld
long long整型:%lld
显示不同进制的前缀 : %#o、%#x
符号位:
有符号的整型数据,首位为符号位,0表示正数,1表示负数。
无符号的整型数据,没有符号位
数据类型的取值范围
unsigned char 0~255(1111 1111)
char -128... + 127(0111 1111)short -32768~32767
unsigned short 0~65535(1111 1111 1111 1111) 2^16-1
unsigned int 0... 2^32-1 4294967295
2.2编码形式
原码 :则是一个数的二进制 如:10 0000 1010 -10 1000 1010
反码:正数的反码和原码相同但负数的反码则数除符号位其他位取反 什么是符号位
符号位则是二进制的最高位 左高右低 如:-10 1111 0101
补码:正数的补码和原码相同不变但负数的补码则是在反码的基础上加一 如:-10 1111 0111
1.当编译器以整型输出的时候%d,是以补码还原的方式解读
2.当cpu将数据进行运算的时候,直接以内存中存放的方式来运行,也就是以补码 的方式参与运算
3.%u输出的时候,值区域范围:0-4294967295(有符号转为无符号的时候)
4.%hhu方式打印,值域范围:0-255(1) unsigned char a = 255;// 0 - 255 char b = 255; // -128 - +127 printf("%d , %u\n",a,a);// 255 255 printf("%d , %u\n",b,b);// -1 4294967295 (2) unsigned short a = -1;// 0-65535 int b = a; printf("a = %d\n",a);//65535 printf("b = %u\n",b);//65535 (3) unsigned char a = -1;// 0-255 unsigned int b = -1; // 0-4294967295 printf("a = %d,b = %u\n",a,b);//255,4294967295
溢出:就是超出数据能表达的最大值
2.3浮点型
概念:用来表达实数(有理数和无理数)的数据类型
分类:
单精度浮点型(float),典型尺寸是4字节
双精度浮点型(double),典型尺寸是8字节
长双精度浮点型(long double),典型尺寸是16字节
占用内存越多,能表达的精度越高
2.4 字符
char ch1 = 'a'; // 'a'是字符常量,代表字母a
char ch2 = '\n'; // '\n'是不可见字符常量,代表回车计算机中存储都是1和0,因此各种字符都必须被映射位某个数字才能存储到计算机中,这种映射关系形成的表称为ASCII码表。主要记a97 A65 0 48
char a = 'a';// 存储在内存中是97
char b = '1';// 存储在内存中是49
char c1 = 20;
char c2 = c1 + 'a'; // 等价于char c2 = 20+97;printf("%c\n",c2); // 以字符形式输出117,即 'u'
printf("%d\n",c2); // 以整型形式输出117// 小写字符转大写字符 ' ' = 32
char a7 = 'b'- ' ';
printf("%c\n",a7);
转义字符
转义字符,所有的ASCII码都可以用\加数字(一般是8进制数)来表示,而在C中
定义了一些字母前加\来表示常见的哪些不能显示ASCII字符,如\0,\t,\n称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思
当编译器遇到转义字符的时候,会用特殊的方式进行处理,'\n'表示换行
'\b' : 表示退格符
printf("abcd\b");
printf("bcde\n");
'\a': 表示告警,主板蜂鸣器
'\t': tab键'\ddd' ddd 表示八进制数,打印出来的是该数字对应的ascii码
格式为'\'后面又三个数,每个数的范围在 0 - 7
printf("%c\n",'\102');// 八进制'\xhh'hh 表示十六进制 打印出来的是该数字对应的ascii码
printf("%c\n",'\41');//A
字符串
// 字符串的定义方式有两种:指针和数组
char *s1 = "abcd"; // 使用字符指针来表示字符串
char s2[]= "abcd"; // 使用字符数组来表示字符串// 注意,使用数组来定义字符串时,方括号[]里面的数字可以省略
// 不省略也可以,但必须必字符串实际占用的内存字节数要大,比如:
char s3[] = "apple";
布尔
bool a = 1; // 逻辑真,此处1可以取其他任何非零数值
bool b = 0; // 逻辑假 c
常量与变量
int a = 100; // a是变量,而100是常量
float f = 3.14; // f是变量,而3.14是常量
char s[] = "abcd"; // s是变量,"abcd"是常量
输入
scanf(); // 格式化输入函数
fgets(); // 字符串输入函数int a;
float f;
scanf("%d", &a); // 从键盘输入一个整型,放入指定的内存地址 &a 中
scanf("%f", &f); // 从键盘输入一个浮点数,放入指定的内存地址 &f 中
// 从键盘依次输入一个整型和一个浮点型数据,用空白符隔开
scanf("%d%f", &a, &f);char c;
char s[10];
// 从键盘输入一个字符,放入指定的内存地址 &f 中
scanf("%c", &c);
// 从键盘输入一个单词,放入指定的数组 s 中(注意不是&s)
scanf("%s", s );fgets(s, 10, stdin); // 从键盘输入一行字符串,放入数组 s 中
注意:
// 此处输入时必须带逗号
scanf("%d,%d", &a, &b);// 此处必须先输入a=,然后才能输入整数
scanf("a=%d", &a);// 此处结束输入时按下的回车符将被scanf()误以为格式控制符,无法正常结束输入
scanf("%d\n", &a);