需要记忆的东西
运算符、表达式、语法
文章目录
- C语言笔记(2)
- 一、运算符
- 1.分类
- 2.内容
- 1)算术运算符
- 2)关系运算符
- 3)逻辑运算符
- 4)按位运算符
- 5)赋值运算符
- 6)数据运算符
- 7)杂项运算符
- 二、表达式
- 1.分类
- 1)算术表达式
- 2)赋值表达式
- 4)关系表达式
- 5)逻辑表达式
- 三、语法
- 1.关键字
- 2.语法结构
- 1)if语句
- 2)switch语句
- 3)while循环
- 4)do--while循环
- 5)for循环
- 6)enum
- 7)goto
- 8)return
- 9)typedef
- 10)struct
- 11)union
- 参考资料
一、运算符 1.分类
- 算术运算符
- 关系运算符
- 逻辑运算符
- 按位运算符
- 赋值运算符
- 数据运算符
- 杂项运算符
| 算术运算符 | 描述 |
|---|---|
| + | 加 |
| – | 减 |
| * | 乘 |
| / | 除 |
| % | 取模,整除后的余数 |
| ++ | 自增 |
| – – | 自减 |
关系运算符用于测试等值性
| 关系运算符 | 描述 |
|---|---|
| == | 等于 |
| != | 不等于 |
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
逻辑运算符用于逻辑测试,逻辑三元运算符比较特殊
| 逻辑运算符 | 描述 |
|---|---|
| && | 逻辑与 |
| I I | 逻辑或 |
| ! | 逻辑非 |
| ? : | 条件运算符/逻辑三元运算符 |
三目运算符也叫三元运算符,这个运算符的符号是由一个问号和一个冒号组成。
语法: 表达式1 ? 表达式2 : 表达式3;
语义: 先执行表达式1,如果表达式1的结果如果为真,那么执行表达式2,并且这个整体的运算式的结果是表达式2的结果;如果表达式1的结果如果为假,执行表达式3,运算式的结果是表达式3的结果。
int a,b,c; a=7; b=6; c=(a>b)?a:b;
等同于
if (a>b) c=a; else c=b;
过于复杂的三目运算很难理解。
4)按位运算符按位运算符做的事在现代代码中不常见到。它们会用各种方式改变构成字节和其他数据结构的位。在一些特定类型底层系统中,它们用起来会很顺手。
| 按位运算符 | 描述 |
|---|---|
| & | 按位与 |
| I | 按位或 |
| ^ | 按位异或 |
| ~ | 按位取反 |
| << | 按位左移 |
| >> | 按位右移 |
赋值运算符的作用是将表达式赋给变量。
| 赋值运算符 | 描述 |
|---|---|
| = | 赋值(等) |
| + = | 加后赋值(加等) |
| – = | 减后赋值(减等) |
| * = | 乘后赋值(乘等) |
| / = | 除后赋值(除等) |
| % = | 取模后赋值(取模等) |
| << = | 按位左移后赋值(左移等) |
| >> = | 按位右移后赋值(右移等) |
| & = | 按位与后赋值(与等) |
| ^ = | 按位异或后赋值(异或等) |
| I = | 按位或后赋值(与等) |
数据运算符是处理指针、成员访问,以及C语言的各种数据结构的元素。
| 数据运算符 | 描述 |
|---|---|
| sizeof ( ) | 获取…的大小 |
| [ ] | 数组下标 |
| & | …的地址 |
| * | …的值 |
| – > | 结构体解引用 |
| . | 结构体引用 |
一些杂项符号由于各种原因无法归类,所以一并列在这里
| 杂项运算符 | 描述 |
|---|---|
| , | 逗号 |
| ( ) | 圆括号 |
| { } | 花括号 |
| : | 冒号 |
| / / | 单行注释开始 |
| / * | 多行注释开始 |
| * / | 多行注释结束 |
#include2)赋值表达式int main() { int A = 10; // 定义变量A,赋值10 int B = 2; // 定义变量B,赋值2 printf("A的值是:%dn", A); printf("B的值是:%dn", B); printf("A+B的值是:%dn", A + B);//加 printf("A-B的值是:%dn", A - B);//减 printf("A*B的值是:%dn", A * B);//乘 printf("A/B的值是:%dn", A / B);//除 printf("A除B的余数是:%dn", A % B);//取余 A++; // 自增1 printf("A自增后的值是:%dn", A); B--; // 自减1 printf("B自减后的值是:%dn", B); return 0; }
赋值运算符用于为变量指定值,在C语言中,包括两类赋值运算符,一类是简单赋值运算符,将值直接赋给变量,另一类是复合赋值运算符,变量参与运算同时用运算结果更新变量的值。
#include4)关系表达式int main() { int a = 1; int b = 2; int c = 3; printf("a = %dn", a); a = 5; printf("a = %dn", a); b = a; printf("b = %dn", b); c = 10 * a + b; printf("c = %dn", c); a += 1; printf("a = %dn", a); }
#include5)逻辑表达式int main() { int age = 0; // 定义一个整数变量age,存放用户输入的年龄 printf("请输入您的年龄:");// 提示用户输入 scanf("%d",&age); // 接受从键盘输入的年龄数据 if (age >= 16) { // 如果用户已满16岁,执行这段代码 printf("可以报名,祝您好运!n"); } else { // 如果用户小于16岁,执行这段代码 printf("不好意思哦,等您16岁之后再来吧!n"); } } //c语言技术网(www.freecplus.net)
if (吃了蛋糕 > 5)
{
if ( 吃了奶油蛋糕 > 2 )
{
if (吃了奶油巧克力蛋糕 == 1)
{
printf("胖十斤n");
}
}
}
#include三、语法 1.关键字int main() { int cake = 0; // 蛋糕 int cream_cake = 0; // 奶油蛋糕 int cream_chocolate_cake = 0; // 巧克力奶油蛋糕 printf("请输入蛋糕、奶油蛋糕、巧克力奶油蛋糕数量:"); scanf_s("%d %d %d", &cake, &cream_cake, &cream_chocolate_cake); if (cake > 5) // 蛋糕数量大于5 { if (cream_cake > 2) // 吃了奶油蛋糕大于2 { if (cream_chocolate_cake == 1) // 吃了一个巧克力奶油蛋糕 { printf("胖十斤n"); return 0; } } } printf("没胖n");//虽然有点不符合实际哈哈 }
| 关键字 | 描述 |
|---|---|
| auto | 给局部变量局部寿命 |
| break | 退出复合语句 |
| case | switch 语句的一个分支 |
| char | 数据类型:字符型 |
| const | 创建一个不可修改的变量 |
| continue | 继续从循环顶部运行代码 |
| default | switch 语句的默认分支 |
| do | 开始一个 do-while 循环 |
| double | 数据类型:双精度浮点型 |
| else | if 语句的 else 分支 |
| enum | 定义一组int 常量 |
| extern | 声明一个标识符是外部定义的 |
| float | 数据类型:浮点型 |
| for | 开始一个for 循环 |
| goto | 跳到某个标签 |
| if | if语向的开始 |
| int | 数据类型:整型 |
| long | 数据类型:长整型 |
| register | 声明一个变量,令其存储在 CPJ 寄存器中 |
| return | 从函数中返回 |
| short | 数据类型:短整型 |
| signed | 表示整数类型的有符号修饰符 |
| sizeof | 确定数据的大小 |
| static | 在作用域退出后依然保留变量值 |
| struct | 将多个变量合并到一条记录中 |
| switch | 开始一个switch 语句 |
| typedef | 创建一个新类型 |
| union | 开始一个union 语句 |
| unsigned | 表示整数类型的无符号修饰符 |
| void | 声明数据类型为空 |
| volatile | 声明变量可能会在别处被改动 |
| while | 开始一个while循环 |
语法结构(syntax structure)是一系列符号的模式,用来组成C程序的代码格式,如if语句或者while循环这样的固定结构。
1)if语句if语句是基本逻辑分支控制工具:
if(TEST){
CODE;
}
else if (TEST){
CODE;
}
else{
CODE;
}
2)switch语句
switch 语句和 if 语句类似,但它对简单的整型常量才有效
switch (OPERAND){
case CONSTANT:
CODE;
break:
default:
CODE:
}
3)while循环
while 循环是最基本的循环:
while (TEST){
CODE;
}
你还可以使用 continue 来实现循环。我们暂时就叫它 while-continue 循环:
while (TEST){
if (OTHER_TEST){
continue;
}
CODE;
}
你还可以使用break 退出循环。我们称其为 while-break 循环:
while (TEST){
if (OTHER_TEST) {
break;
}
CODE;
}
4)do–while循环
do-while 循环是whi1。循环的遊转,它会先运行代码,然后再测试条件来看是不是需
要再次运行代码:
do{
CODE;
}while (TEST) ;
它里边也可以有continue 和break,用来控制其运行方式。
5)for循环fo王 循环是一个可控的计数循环,它使用计数器来实现 (期望的)固定次数的迭代:
for (INIT; TEST; POST) {
CODE;
}
6)enum
enum 会创建一组整型常量
enum { CONST1, CONST2, CONST3) NAME;
7)goto
goto会跳到一个标签的位置,只在很少的情识下有用,如镨误检测和退出的时候:
if (ERROR TEST){
goto fail;
}
fail:
CODE ;
8)return
函数是这样定义的:
TYPE NAME (ARG1, ARG2,...) {
CODE;
return VALUE;
}
这个也许不好记,那就来看看下面这个例子,然后你就知道 TYPE、NAME、ARG、 VAIUE
分别是什么了:
int name (arg1,arg2)
{
CODE;
return 0;
}
9)typedef
typedef 用来定义新类型:
typedef DEFINITION IDENTIFIER;
更具体的例子如下:
typedef unsigned char byte;
DEFINITION 对应的是 unsigned char, IDENTIFIER对应的是 byte。
10)structstruct 是由多种数据类型打包在一起形成的一个概念,它在C语言中会大量使用:
struct NAME{
ELEMENTS;
}[VARIABLE_NAME];
[VARIABLE_ NAME]是可选项,除了几个小场景之外,一般选择不使用它。它通常会像下面这样和typedef 组合使用:
typedef struct [SIRUCT_NAME]{
ELEMENTS;
}IDENTIFIER;
11)union
union 会创建类似struct的东西,不过其中的元素会在内存中重叠
union NAME{
ELEMENTS;
}[VARIABLE NAME] ;
参考资料
- C语言-分支语句
- 《“笨办法”学C语言》



