文章目录
🧠思维导图
📒前言
C语言的语法结构就如同人的思维历程,熟知语法结构是每一个C语言初学者的必修课。一旦学会了语法结构,你会发现写代码更流畅了,逻辑更清晰了,甚至以往一筹莫展的题也有了新的思路,说到这里,是不是有很多老铁已经开始期待了?
那就马上打开编译器,创建新项目,我们马上出发!
一、🔍语法结构
C语⾔是结构化的程序设计语⾔,这里的结构指的是顺序结构、选择结构、循环结构
为了帮助大家理解三种结构的概念,我们可以把一个程序比作一条奔腾的河流,那么就可以将以上三种结构类比为河流奔腾的三种不同方式:
顺序结构是河流直流而下,一去不复返,走到尽头的。
选择结构是河流在中途各奔东西,变为了几条走向不同的支流,奔向不同的终点。
循环结构是河流奔腾入海后又随着大气环流回到起点,如此不停循环往复,直到循环中止。
由于顺序结构较易理解并且结构清晰,本篇只会介绍较为复杂的选择结构和循环结构。
我们可以使⽤ if, switch实现选择(分支)结构,使⽤for, while, do while实现循环结构。
但是在了解两种结构之前,我们必须明白它们的判断条件,那么我们在本章内容就要先了解几种常用的操作符与运算符。
二、🔍操作符与运算符
1、概念
-
操作符是嵌在每一条指令中的,换句话说,指令系统的每一条指令都有一个操作符。我理解是计算机系统中的术语。 如=(赋值),==(判断相当)等等。
-
运算符是数学中的术语。主要是指数之间的运算方式。如 + - * / %,但不包括 = (赋值)这样的操作符
操作符主要分为算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式、下标引用函数调用和结构成员操作符等。
运算符主要分为算术运算符(+、-、*、/、%)、关系运算符(> < >= <= == != )、逻辑运算符(&& , || , !)、赋值运算符(=和复合赋值)、条件运算符(三目运算符)、逗号运算符、指针运算符、求字节运算符、强制类型转换运算符、分量运算符、下标运算符等。
作为初学者,本章我们只需掌握关系操作符、条件操作符、逻辑操作符。
2、关系操作符
C 语言用于比较的表达式,称为 “关系表达式”,里面使用的运算符就称 为“关系运算符”,主要有下⾯6个。
• > ⼤于运算符
• < ⼩于运算符
• >= ⼤于等于运算符
• <= ⼩于等于运算符
• == 相等运算符(注意:“=”表示赋值,“==”表示相等)
• != 不相等运算符
关系表达式返回值通常为 1 或 0 ,分别表示真和假
例如以下代码:
#include <stdio.h>
int main()
{
printf("%d",1+1>=2);
return 0;
}
在编译器上运行后我们会发现打印1表示“1+1==2”为真。当然,如果把表达式换为“作者很帅”也会返回同样的值。
当然,如果我们把代码替换为:
#include <stdio.h>
int main()
{
printf("%d",1+1>2);
return 0;
}
如果抛开某些哲学角度上的分析,则会发现打印结果为0,表示表达式为假。
在使用关系操作符的时候,应特别注意:关系操作符不宜连用。例如在中学阶段我们常使用“1<x<2”的表示方法表示x的范围。但在C语言中,这种写法是不妥当的,应当改为“x>1&&x<2"("&&"是逻辑操作符,表示“并且”,在“逻辑操作符”一节中会讲到)
举个栗子:
#include <stdio.h>
int main()
{
printf("%d", 1 < 3 <2);
return 0;
}
在编译器上运行后我们会发现返回值为1,表示表达式是正确的,这显然与事实不符。
应将代码改为:
#include <stdio.h>
int main()
{
printf("%d", 1 <3 && 3 < 2 );
return 0;
}
此时返回值变为0,表示假。
3、条件操作符
条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:
exp1 ? exp2 : exp3
它包含的逻辑是:判断表达式exp1,若正确,则计算表达式exp2并输出结果;若错误,则计算表达式exp3并输出结果。
举个栗子:
#include <stdio.h>
int main()
{
printf("%d", 2 > 3 ? 1+1 : 2+2);
return 0 ;
}
运行后发现打印结果为4。因为计算机判断表达式“2>3”显然不成立,则执行是表达式“2+2”。
4、逻辑运算符
在“关系运算符”一节内容中,我们提及过表示“并且”的逻辑运算符“&&”。在本节内容中,我们将更深入了解逻辑运算符。
在形式逻辑中,逻辑运算符或逻辑联结词把语句连接成更复杂的复杂语句。逻辑运算符用来表示日常交流中的“并且”,“或者”,“除非”等思想。
逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有下面三个运算符:
• ! :逻辑取反运算符(改变单个表达式的真假)。
• && :与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
• || :或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。
4.1、逻辑取反运算符
逻辑取反运算符可以简单理解为改变变量的真假性
#include <stdio.h>
int main()
{
int zuozhehaoshuai = 0;
if (!zuozhehaoshuai)
{
printf("我要变帅\n");
}
return 0;
}
如果“作者好帅”为真, “!作者好帅”就是假,如果“作者好帅”为假,“!作者好帅”就是真,所以上⾯的代码的意思若“作者好帅”为假,执行if语句中的代码,输出“我要变帅”(由于C语言中变量名由字母、数字、下划线组成,并且不能以数字开头,所以这里用拼音表示)
4.2、与运算符
&& 就是与运算符,也是并且的意思, && 是⼀个双目操作符,使用的方式是 a&&b , && 两边的表达 式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。
可以类比于高中数学教材中“p∧q”,表示“且”。
举个栗子:
#include <stdio.h>
int main()
{
int IQ = 0;
scanf("%d", &IQ);
if(IQ >= 100 && IQ <= 150)
{
printf("有点聪明\n");
}
return 0;
}
当我们输入120时,则会打印结果“有点聪明”。这是因为120同时满足“>=100”和“<=150”两个条件。
若我们输入180时,则不会打印结果,因为计算机也知道IQ=180不只是“有点聪明”那么简单了。
4.3、或运算符
|| 就是或运算符,也就是或者的意思, || 也是⼀个双⽬操作符,使⽤的⽅式是 a || b , || 两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,整个表达式才为假。
可以类比于高中数学教材中“pvq”,表示“或”。
举个栗子,我们可以改写一下上一个例子的代码:
#include <stdio.h>
int main()
{
int IQ = 0;
scanf("%d", &IQ);
if (IQ <= 0 || IQ >= 250)
{
printf("智商已超出正常人范围\n");
}
return 0;
}
当我们输入300时,则会打印结果“智商已超出正常人范围”。这是因为300满足“>=250”一个条件则表达式为真。
4.4、短路
当然,对于C语言,它的顺序是从左向右计算,如果左边的表达式满足逻辑运算符的条件,就不再计算右边的表达式,于是便有了类似于电路中的“短路”现象。
在运用“与运算符”“&&”时,若有从左向右一旦有表达式为假(返回值为0),就不再执行后续表达式。
在运用“或运算符”“||”时,若有从左向右一旦有表达式为真(返回值为非0),就不再执行后续表达式。
举个栗子:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age <= 12 && age >= 6)
printf("太好了!儿童节可以放假!\n");
return 0;
}
当我们输入18时,未显示打印结果,这是因为计算机判断“age<=12”时,就已经判断表达式为假,不再执行后续表达式。
📝总结
本篇内容我们初步了解了C语言的三种结构,并且深入了解了操作符与运算符。
可以说操作符与运算符就像钟表里的小齿轮,虽然表述简单但对整个程序的运行都起到了至关重要的作用。其实我们的生活也是由这一个个操作符构成的,例如事情的正确与否,人的兼收并蓄等等,当我们的大脑在凭借逻辑进行判断时,也用到了这一个个操作符。
下一篇内容我们将深入讲解使用 if, switch语句来实现选择(分支)结构。
由于作者时间有限,每篇内容也需花费较多时间撰写,后续内容将不定期更新,记得关注哦~
如果发现文章中表述存在错误或有疑问,欢迎私信作者或者在评论区留言~