1、C概述
1.1、什么是C语言
自然语言:
- 一提到语言这个词,自然会想到像英语、汉语等这样的自然语言
- 自然语言是人和人交换信息不可缺少的工具
C语言:
- C语言就是人和计算机交流的一种语言
自然语言和C语言的区别:
- 自然语言是人和人交流,C语言是人和机器交流
- 人可以不听另一个人说话,但是计算机必须无条件服从反馈信息
- C语言有独特的语法规则和定义,双方必须遵循这些规则和定义才能实现真正的交流
1.2、语言发展历史
- 机器语言
- 汇编语言
- 高级语言
1.3、C语言的特点
优点:
1、功能强大
操作系统、嵌入式、动态库(dll和lib文件)、服务器、应用程序、外挂、其他语言等
2、执行效率高
C语言描述问题比汇编语言简练,而代码质量与汇编语言差不多
3、可移植性强
一个环境上用C语言编写的程序,不改动或者稍加改动,就可以移植到另一个完全不同的环境中进行运行
缺点:
1、与C++相比,面向过程的封装性不好
2、语法限制不太严谨,过于自由
1.4、编写C程序
1.4.1、环境搭建
1、下载软件
在百度搜索Visual Studio,选择如下图中的选项(2017,2019,2022版本都可以。
安装步骤同下)
进入Visual Studio官网后,选择下载Windows版(根据电脑系统安装对应的版本),并选择Community 2022社区版本进行下载(别的收费,这个免费)
保存软件到电脑中
2、安装软件
双击运行下载的安装文件,弹出安装界面
选择使用C++的桌面开发这一选项,如需其他,自行勾选
点击安装按钮
开始安装
安装成功后提示重启,点击重启,完成剩余配置
重启后,在开始菜单中就可以找到Visual Studio进行开发了
1.4.2、第一个C程序
编写一个C程序总共分为4个步骤:
- 创建项目
- 创建文件
- 编写代码
- 运行程序
1、创建项目
Visual Studio是我们用来编写C程序的主要工具,先将它打开
2、创建文件
右键源文件,选择添加->新建项
给C文件起个名称,然后点击添加即可
3、编写程序
#include<stdio.h> #include<stdlib.h> int main() { printf("Hello World!\n"); system("pause"); return 0; }
4、运行程序
1.4.3、程序的注释
作用:在代码中加一些说明和解释,方便自己或其他程序员阅读代码
两种格式:
1、单行注释://描述信息
- 通常放在一行代码的上方,或者一条语句的末尾,对该行代码进行说明
2、多行注释:/*描述信息*/
- 通常放在一段代码的上方,对该段代码做整体说明
提示:编译器在编译代码时,会忽略注释的内容
1.4.4、程序框架介绍
//导入一个文件 stdio.h std是一个标准库 i input o output 标准输入输出库 .h表示头文件 #include<stdio.h> //int 数据类型 整型 如果出现在函数中表示函数的返回值 //main 程序的主函数 程序有且只有一个主函数 ()里表示函数的参数 函数的参数可以有零个,一个或多个,如果有多个,中间用逗号分隔 int main() { //{} 函数体 代码体 程序体 实现的内容 //printf是stdio.h中系统提供的函数 表示在标准输出设备上打印字符串 //""称为字符串:里边存放想要输出的内容 printf("Hello World!\n"); //\n是一个转义字符,表示换行 //return 如果出现在其他函数中表示函数结束 如果出现在main函数中表示程序结束 //0表示函数的返回值 要和函数返回值类型对应 //有些程序返回值是EXIT_SUCCESS,含义和返回值0是一样的 return 0; }
1、include头文件包含
- #include的意思是头文件包含,#include<stdio.h>代表包含stdio.h这个头文件
- 使用C语言库函数需要提前包含库函数对应的头文件,如上方这段代码中使用了printf()函数,需要包含stdio.h头文件
2、main函数
- 一个完整的C语言程序,有且仅有一个main()函数(又称主函数)
- 其他若干个函数结合而成(可选)
- main函数是C语言程序的入口,程序是从main函数开始执行的
3、{}括号,程序体和代码块
- { }叫代码块,一个代码块内部可以有一条或多条语句
- C语言每句可执行代码都是;(英文半角分号)结尾
- 所有的#开头的行,都代表预编译指令,预编译指令行结尾是没有分号的
- 所有的可执行语句必须是在代码块里面
4、printf函数
- printf是C语言库函数,功能是向标准输出设备输出一个字符串
- 写法:printf(“Hello World\n”); \n的意思是回车换行
5、return语句
- return代表函数执行完毕,返回return代表函数的终止
- 如果main定义的时候前面是int,那么return后面就需要写一个整数
- 在main函数中return 0代表程序执行成功,return后接其他整数都算执行失败。
1.5、system函数
功能:在已经运行的程序中执行另外一个外部程序
示例:
#include<stdlib.h> int main() { //cmd命令 calc计算器 notepad记事本 mspaint画图板 //system可以打开一个外部的应用程序 如果带路径 需要使用\\或者/ system("calc"); /* int value; value = system("C:/Desktop/EVCapture.exe") printf("%d\n",value); */ //%d是一个占位符,表示输出一个整型数据 //成功返回0,失败返回任意一个数 return 0; }
1.6、常用快捷键
Ctrl+(C、V、S、A)这些你们都懂,就不一一列举了
1.7、C4996错误警告
VS建议采用带_s的函数,如scanf_s,strcpy_s,sprintf_s,但这些并不是标准C函数
#include<stdio.h> int main() { int i; scanf("%d", &i); printf("%d", i); return 0; }
使用标准C函数的时候,会出现C4996的错误提示,类似如下
解决方法:
- #define _CRT_SECURE_NO_WARNINGS(加在代码最上方)
- #pragma warning(disable 4996) (加在代码最上方)
- 项目右击->属性->C/C++->预处理器->预处理定义->编辑->加入宏定义_CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { int i; scanf("%d", &i); printf("%d", i); return 0; }
2、数据类型
2.1、变量
变量就是在程序运行期间可以改变的量
作用:给一段指定的内存空间起名,方便操作这段内存
语法:数据类型 变量名 = 初始值
#include<stdio.h> int main() { //int 数据类型 a,b 变量名 3,4 变量值 int a = 3; int b = 4; //c是变量名 a+b是变量值 //注:程序需提前给a,b赋值,否则报错 int c = a + b; printf("%d\n", c); return 0; }
变量的定义与声明:
2.2、常量
作用:用于记录程序中不可更改的数据
C语言中的常量大概有以下五种表现形式:
1、数值常量(整数型常量(整数,如:1,2,3)、实数型常量(小数,如3,14))
2、字符常量:’a’,’b’,’\n’
3、字符串常量:”hello world”
4、(重点)#define宏常量:#define 变量名 常量值
通常在文件上方定义,表示一个常量
5、(重点)const修饰的变量:const 数据类型 常量名 = 常量值
通常在变量定义前加关键字const,修饰该变量为常量,不可更改
示例:
注:%.2f表示只保留小数点后2位,区分%2f,%2f是整数位和小数位都保留2位
#include<stdio.h> /* 第二种定义方式 宏定义常量(注意:没有=,也没;) #define 常量名 值 */ #define PI 3.141592 //圆的面积: s = pi * r * r; //圆的周长: l = 2 * pi * r; void main() { //常量pi /* 第一种定义方式 const 数据类型 常量名 = 值 const float pi = 3.141592; */ //在定义局部变量可以在数据类型前加修饰auto,也可以不加 auto float r = 2; float s = PI * r * r; float l = 2 * PI * r; //占位符%f:表示输出一个浮点型float,默认保留六位小数,可四舍五入 printf("圆的面积为:%.2f\n", s); printf("圆的周长为:%f\n", l); }
2.3、关键字
作用:关键字是C中预先保留的单词(标识符)
- 在定义变量或者常量时,不能使用关键字
C关键字如下:
提示:在给变量或者常量起名的时候,不要用其中的关键字,否则会产生歧义
2.4、标识符命名规则
作用:C语言规定给标识符(变量、常量)命名时,有一套自己的规则
- 标识符不能是关键字
- 标识符只能由字母、数字、下划线组成
- 第一个字符必须为字母或下划线
- 标识符中字母区分大小写
建议:给标识符命名时,争取做到见名知意的效果,方便自己和他人阅读
2.5、整型
C语言规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存
作用:整型变量表示的是整数类型的数据
C语言中能够表示整型的类型有以下几种方式,区别在于所占内存空间不同:
示例:
1、
//整型变量 int a = 10; //短整型变量 short b = 20; //长整型变量 long c = 30; //长长整型变量 long long d = 40; //占位符%d:表示输出一个整型数据 printf("%d\n", a); //占位符%hd:表示输出一个短整型数据 printf("%hd\n", b); //占位符%ld:表示输出一个长整型数据 printf("%ld\n", c); //占位符%lld:表示输出一个长长整型数据 printf("%lld\n", d);
2、
//数据类型 标识符 = 值 //无符号 unsigned 有符号 signed(可以省略) signed int b = -10; printf("%d\n", b); //%u:占位符,表示输出一个无符号十进制整型数据 unsigned int a = -10; printf("%u\n", a);
无符号整数,输入一个负数,导致数字溢出,出现乱码
3、
//进制数转换 //二进制0-1.八进制0-7.十六进制0-9.10-15(a-f,A-F) int a = 10; printf("%d\n", a); //%o:占位符,表示输出一个八进制整型 printf("%o\n", a); //%x:占位符,表示输出一个十六进制整型 printf("%x\n", a); printf("%X\n", a); //定义八进制数据,以0开头 int b = 0123; printf("%d\n", b); printf("%o\n", b); printf("%x\n", b); printf("%X\n", b); //定义十六进制数据,以0x开头 int c = 0xabc; printf("%d\n", c); printf("%o\n", c); printf("%x\n", c); printf("%X\n", c);
2.6、sizeof关键字
作用:利用sizeof关键字可以统计数据类型所占内存大小
语法:sizeof(数据类型/变量)
示例:
//整型变量 int a = 10; //短整型变量 short b = 20; //长整型变量 long c = 30; //长长整型变量 long long d = 40; //sizeof:计算数据类型在内存中占的字节(Byte)大小 //sizeof(数据类型) sizeof(变量名) sizeof 变量名【不推荐这种】 printf("整型:%d\n", sizeof(a)); printf("短整型:%d\n", sizeof(b)); printf("长整型:%d\n", sizeof(c)); printf("长长整型:%d\n", sizeof(d));
2.7、字符型
作用:字符型变量用于显示单个的字符
语法:char ch = ‘a’
注意1:在显示字符型变量时,用单引号将字符括起来,不要用双引号
注意2:单引号内只能有一个字符,不可以是字符串
- C语言中字符型变量只占用1个字节
- 字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入到存储单元(ASCII码表百度自行搜索)
ASCII码大致由以下两部分组成:
- ASCII非打印控制字符:ASCII表上的数字0-31分配给了控制字符,用于控制像打印机等一些外围设备
- ASCII打印字符:数字32-126分配给了能在键盘上找到的字符,当查看或打印文档时就会出现
示例:
1、
//字符型变量 char ch = 'a'; //打印字符变量 printf("%c\n", ch); //unsigned int len = sizeof(ch) 别勿把%d当成%c printf("字符型大小为:%d\n", sizeof(ch));
2、
char ch1 = 'a'; char ch2 = 'A'; //转换成整型来进行字符型的相加减(字符型对应的数是ASCII码) printf("%d\n", ch1 - ch2);
3、
char ch; scanf("%c", &ch); printf("%c\n", ch - 32);
2.8、浮点型
作用:用于表示小数
浮点型变量分为两种:1、单精度float 2、双精度double
两者的区别在于表示的有效数字范围不同:
示例:
1、
float a = 3.14; double b = 3.14; //默认保留小数点后6位,不足位数补0 printf("%f\n", a); //.2表示保留小数点后2位 printf("%.2f\n", a); printf("%lf\n", b); //浮点型数据:存储在内存中的格式分为符号位,指数位,小数位 printf("%d\n", sizeof(a)); printf("%d\n", sizeof(b));
2、
float a, b, c; //科学计数法 a = 3.2e3f;//3.2*10^3=3200,e可以写成E printf("a=%f\n", a); b = 100e-3f;//100*10^-3=0.1 printf("b=%f\n", b); c = 3.1415926f;//结果为3.141593(%f默认保留小数点后6位) printf("c=%f\n", c);
注:默认小数是double数据类型,在小数后加入f变为float数据类型
2.9、字符串
作用:用于表示一串字符
示例:
//双引号引起来的内容,称为字符串常量 printf("%s\n", "hello world");//双引号引起来的内容中会带着字符串的结束标志 \0 //双引号会返回字符串首字母的地址编号,从0开始,意思是第一个字符的位置其实是地址0 printf("sizeof = %d\n", sizeof("hello world"));//为什么占了12位?hello占5位,空格占1位,world占5位,\0占1位 printf("%s\n", "hello\0world"); printf("%s\n", "\0hello world");
2.10、数据的输入
作用:用于从键盘获取数据
语法:scanf(“格式化占位符”,输入数据地址);
注:取地址符:&
示例:
1、
int number; printf("请输入一个数:"); scanf("%d", &number); printf("这个数是:%d\n", number);
2、
char number; printf("请输入一个字符:"); scanf("%c", &number); printf("这个数是:%c\n", number);
3、
float number1; printf("请输入一个小数:"); scanf("%f", &number1); printf("这个数是:%f\n", number1); getchar();//从缓冲区获得一个字符 double number2; printf("请输入一个小数:"); scanf("%lf", &number2); printf("这个数是:%lf\n", number2);
注:假如不输入getchar()函数,当输入第一个数以后,敲下回车,回车会被默认送入到第二个需要输入的数当中,这样就会导致输入错误,而getchar()就相当于把回车给获取,存入到函数里边,这样就可以输入第二个数了。
4、字符串后续会继续声明,在这稍作了解即可
char a[100]=""; printf("请输入一个字符串:"); scanf("%s", a);//""本身返回的就是字符串首字母的地址,说明a在这本身就是个地址,所以不需要取地址符 printf("这个数是:%s\n", a);
3、运算符
作用:用于执行代码的运算
3.1、算术运算符
作用:用于处理四则运算
算术运算符包括以下符号:
3.1.1、加减乘除
示例:
int a = 10; int b = 8; printf("a + b = %d\n", a + b);//18 printf("a - b = %d\n", a - b);//2 printf("a * b = %d\n", a * b);//80 printf("a / b = %d\n", a / b);//1 两个整型数据相除,结果依然是整型数据 int a1 = 10; int b1 = 20; printf("a1 / b1 = %d\n", a1 / b1);//0 //两个小数之间可以做除法运算 double a2 = 0.5; double b2 = 0.25; printf("a2 / b2 = %.0f\n", a2 / b2);//2 小数点后保留0位 //错误案例 //int a3 = 10; //int b3 = 0; //printf("a3 / b3 = %d\n", a3 / b3);//error 被除数不能为0
3.1.2、取模运算
示例:
int i1 = 10; int i2 = 20; printf("i1 %% i2 = %d\n", i1 % i2);//C语言中取余的表现形式是%%,运算是%,区别表示形式和做取余运算 int i3 = 10; int i4 = 3; printf("i3 %% i4 = %d\n", i3 % i4); /* int i5 = 10; int i6 = 0; printf("i5 %% i6 = %d\n", i5 % i6);//被除数不能为0 */ /* double d1 = 0.25; double d2 = 0.2; printf("d1 %% d2 = %f\n", d1 % d2);//error:表达式必须包含整型 */
3.1.3、 递增递减运算符
示例:
//后置递增 int a = 10; a++; printf("%d\n", a); //前置递增 int b = 10; ++b; printf("%d\n", b);
作为独立语句,前置和后置没有区别,但是当进行混合运算时,既能看出前置和后置加减的区别,接下来用代码演示区别。
区别:
//前置++:先对变量进行++,在计算表达式 int a1 = 10; int b1 = ++a1 * 10; //算法思想:先计算a1 = a1 + 1,再计算b1 = a1 * 10 printf("a1 = %d\n", a1); printf("b1 = %d\n", b1); //后置++:先计算表达式,在对变量进行++ int a2 = 10; int b2 = a2++ * 10; //算法思想:先计算b2 = a2 * 10, 再计算a2 = a2 + 1 printf("a2 = %d\n", a2); printf("b2 = %d\n", b2);
递减的用法和递增完全一样。
示例:
//后置递减 int a = 10; a--; printf("%d\n", a); //前置递增 int b = 10; --b; printf("%d\n", b); //前置--:先对变量进行--,在计算表达式 int a1 = 10; int b1 = --a1 * 10; //算法思想:先计算a1 = a1 - 1,再计算b1 = a1 * 10 printf("a1 = %d\n", a1); printf("b1 = %d\n", b1); //后置--:先计算表达式,在对变量进行-- int a2 = 10; int b2 = a2-- * 10; //算法思想:先计算b2 = a2 * 10, 再计算a2 = a2 - 1 printf("a2 = %d\n", a2); printf("b2 = %d\n", b2);
3.2、赋值运算符
作用:用于将表达式的值赋给变量
赋值运算符包括以下几个符号:
//赋值运算:将等号右边的值,赋值给等号左边的变量 int a = 10;//初始化 a = 100;//赋值运算 printf("a = %d\n", a); // += a = 0; a += 2;//相当于a = a + 2 printf("a = %d\n", a); // -= a = 5; a -= 3;//相当于a = a - 3 printf("a = %d\n", a); // *= a = 2; a *= 2;//相当于a = a * 2 printf("a = %d\n", a); // /= a = 4; a /= 2;//相当于a = a / 2 printf("a = %d\n", a); // %= a = 3; a %= 2;//相当于a = a % 2 printf("a = %d\n", a);
注意事项:在做如上的几种赋值运算时,等号右边的表达式一定要看成一个整体
示例:
int num = 10; num *= 3 + 5;//相当于num = num * (3 + 5) printf("num = %d\n", num);
3.3、比较运算符
作用:用于表达式的比较,并返回一个真值或假值
比较运算符有以下符号:
示例:
int a = 3; int b = 4; printf("a == b %d\n", a == b);//区分:等号是赋值,两个等号是比较 printf("a != b %d\n", a != b); printf("a < b %d\n", a < b); printf("a > b %d\n", a > b); printf("a <= b %d\n", a <= b); printf("a >= b %d\n", a >= b);
注意:C语言的比较运算符中,“真”用数字“1”来表示,“假”用数字“0”来表示。
3.4、逻辑运算符
作用:用于根据表达式的值返回真值或假值
逻辑运算符有以下符号:
3.4.1、逻辑非
逻辑非用一句话概括就是真变假,假变真。
切记非零都为真!!!
示例:
int a = 10; printf("!a = %d\n", !a); printf("!!a = %d\n", !!a); printf("%d\n", !100); printf("%d\n", !!100); printf("%d\n", !-100);
3.4.2、逻辑与
八字真言:同真为真,其余为假
示例:
int a = 10; int b = 20; printf("a && b = %d\n", a && b); a = 10; b = 0; printf("a && b = %d\n", a && b); a = 0; b = 10; printf("a && b = %d\n", a && b); a = 0; b = 0; printf("a && b = %d\n", a && b);
重要知识点:
//注意:短路特性:只有表达式1为真,才会去判断表达式2 3 > 4 && printf("hello1"); 3 < 4 && printf("hello2");
3.4.3、逻辑或
八字真言:同假为假,其余为真
示例:
int a = 10; int b = 20; printf("a || b = %d\n", a || b); a = 10; b = 0; printf("a || b = %d\n", a || b); a = 0; b = 10; printf("a || b = %d\n", a || b); a = 0; b = 0; printf("a || b = %d\n", a || b);
重要知识点:
//注意:短路特性:只有表达式1为假,才会去判断表达式2 3 > 4 || printf("hello1"); 3 < 4 || printf("hello2");
3.5、运算符优先级
在一些表达式中,可能会出现多个运算符同时出现,此时运算符的优先级尤为重要
下图中是C语言运算符的优先级:
- 表中优先级号越小,优先级越高
- 同一优先级中,看结合性
说明:
同一优先级的运算符,运算次序由结合方向所决定。简单记就是:!> 算术运算符 > 关系(比较)运算符 > && > || > 赋值运算符
示例:
int a = 10; printf("%d\n",++a * 10);//递增递减运算符的优先级高于乘
int a = 10; printf("%d\n", a = 23 > 24);//比较运算符优先级大于赋值运算符,所以先判断23是否大于24,在将结果赋值给a
printf("%d\n", 1 || 1 && 0);//逻辑与的优先级高于逻辑或
int a = 10; //同一级别的运算符,要看结合性,结合方向从右向左 a += a -= a *= a /= 5;// a = a/5 = 10/5 = 2;a = a*2 = 2*2 = 4;a = a-4 = 4-4 = 0;a = a+0 = 0+0 = 0 printf("a = %d\n", a);
int num = 0; num = 1, 2, 3, 4; printf("num = %d\n", num);//赋值运算符高于逗号运算符,num赋值给1,逗号后边的数就没有意义 num = (1, 2, 3, 4); printf("num = %d\n", num);//括号的优先级高于赋值,所以先看括号内,逗号运算符的结合方向是从左向右,返回右边最后一个数
4、 程序流程结构
C语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构
- 顺序结构:程序按顺序执行,不发生跳转
- 选择结构:依据条件是否满足,有选择的执行相应功能
- 循环结构:依据条件是否满足,循环多次执行某段代码
4.1、选择结构
4.1.1、if语句
作用:执行满足条件的语句
if语句的三种形式:
- 单行格式if语句
- 多行格式if语句
- 多条件的if语句
1、单行格式if语句:if(条件){条件满足执行的语句}
示例:如果输入的数据大于600,说明考上了一本院校,进行输出。
int score = 0; printf("请输入你的分数:"); scanf("%d", &score); printf("你的分数为%d\n", score); if (score > 600) { printf("恭喜你,考上了一本院校!"); }
注意:if条件表达式后不要加分号
2、多行格式if语句:if(条件){条件满足执行的语句}else{条件不满足执行的语句}
示例:如果输入的数据大于600,说明考上了一本院校,进行输出。否则说明没有考上一本院校。
int score = 0; printf("请输入你的分数:"); scanf("%d", &score); printf("你的分数为:%d\n", score); if (score > 600) { printf("恭喜你,考上了一本院校!\n"); } else { printf("不好意思,没有考上。\n"); }
3、多条件的if语句:if(条件1){条件1满足执行的语句}else if(条件2){条件2满足执行的语句}…else{都不满足执行的语句}
示例:如果分数大于600分,说明考上了一本院校,如果大于500分但是低于600分,说明考上了二本院校,如果大于400分但是低于500分,说明考上了三本院校,如果小于等于400分,说明没有考上。
int score = 0; printf("请输入你的分数:"); scanf("%d", &score); printf("你的分数为:%d\n", score); if (score > 600) { printf("恭喜你,考上了一本院校!\n"); } else if (score > 500) { printf("恭喜你,考上了二本院校!\n"); } else if (score > 400) { printf("恭喜你,考上了三本院校!\n"); } else { printf("不好意思,没有考上。\n"); }
嵌套if语句:在if语句中,可以嵌套使用if语句,达到更精确的条件判断
案例需求:
- 提示用户输入一个高考考试分数,根据分数做如下判断
- 分数如果大于600分视为考上一本,大于500分考上二本,大于400分考上三本,其余视为未考上本科
- 在一本分数中,如果大于700分,考入北大;大于650分,考入清华;大于600分,考入人大。
示例:
int score = 0; printf("请输入你的分数:"); scanf("%d", &score); printf("你输入的分数为:%d\n", score); if (score > 600) { printf("恭喜你,考上了一本院校\n"); if (score > 700) { printf("考入北大\n"); } else if (score > 650) { printf("考入清华\n"); } else { printf("考入人大\n"); } } else if (score > 500) { printf("恭喜你,考上了二本院校\n"); } else if (score > 400) { printf("恭喜你,考上了三本院校\n"); } else { printf("不好意思,你没有考上本科\n"); }
if语句的注意事项:
1、不要在if语句后面加分号
区别:
//第一种情况:不带分号 int a = 10; int b = 20; if (a > b) { printf("a > b"); } //第二种情况:带分号 int a = 10; int b = 20; if (a > b); { printf("a > b"); }
可以看出,不加分号的时候,if语句正常执行,只有a大于b,才会输出;但是在if语句后面加了分号,就会导致,不管a大于b这个判断是否成立,下边的语句都会执行。
2、if语句实现体中如果不加{},只能识别最近的一行代码
int a = 10; int b = 20; if (a > b) printf("a > b\n"); printf("a > b a > b\n");
可以看出,距离if语句最近的是输出a>b,但是条件不成立,所以不输出;但是最后一行的printf不归if语句所掌控,它自己输出出来,其实相当于下面这行代码:
int a = 10; int b = 20; if (a > b) printf("a > b\n"); printf("a > b a > b\n");
接下来,做个比较:
int a = 10; int b = 20; if (a < b) printf("a < b\n"); printf("a > b a > b\n");
这回可以看出,if条件成立的情况下,打印输出最近的一条语句,即a<b;同理,最后一行不归if语句管,所以自行输出。
3、对比的时候,不要写成=,应该是==(这个需要特别