C操作符详解,深入探索操作符与字符串处理
C语言往期系列文章目录
往期回顾:
- C语言是什么?编程界的‘常青树’,它的辉煌你不可不知
- VS 2022 社区版C语言的安装教程,不要再卡在下载0B/s啦
- C语言入门:解锁基础概念,动手实现首个C程序
- C语言概念之旅:解锁关键字,字符,字符串的秘密,揭秘语句和注释,程序员的宝藏
- C语言基础入门:数据类型、变量声明与创建详解
文章目录
前言
在上一篇,我们深入探讨了C语言中的数据类型和变量声明与创建,从丰富的数据类型到变量的创建、初始化和分类,这些知识为我们进一步学习C语言奠定了坚实的基础。现在,我们已经站在了C语言世界的门口,窥见了其内部的无限可能。接下来的博客,我们将继续深入C语言的精髓,一起迈向更深层次的编程之旅。
一、如何求字符串长度?
上期学完数据结构类型后,我们这期从如何求字符串长度开始?
假设有一个字符“abc”,那我们如何求出这个字符串长度呢?其实,在我们的C语言库中,有一个函数叫做strlen函数。
strlen - string length
代码演示:
#include <stdio.h>
#include <string.h>int main()
{int len = strlen("abc");//abc\0printf("%d\n", len);return 0;
}
但我们运行起来在vs中会看到报错。
其实我们还有个叫sizeof的函数,它返回的数据类型就是size_t。size_t就是unsigned int。
我们想要计算路径长度呢?
int len = strlen("F:\Users\YunShanRuo\Desktop\1.docx");printf("%d\n", len);
这时候我们会发现出了问题,
可以看到结果是30。这里是因为转义字符出了问题。通过这个例子重点是学会能够看出转义字符的作用。
二、算术操作符:+,-,*,/,%
写代码我们一定会涉及到算数,那为了计算,C语言提供了一些操作符。操作符呢也被称为运算符,不同的人对它的翻译是不一样的。有人叫他操作符,也有人叫它运算符,那其中有一组操作符叫:算术操作符。分别是: +、 - 、*、\ 、% ,都是双目操作符。
2.1 双目操作符
5 + 6
这个+号的左边是一个操作数,右边也是一个操作数,位于操作符两端的就是它们的操作数,我们把这样的操作符,叫做双目操作符。
2.1.1 + 和 -
运算符‘+’ 和 ‘-’ 是用来完成加法和减法的,它们都有两个操作数,位于操作符的两端就是它的操作数。
代码演示:
int main()
{int num1 = 3 + 7;printf("%d\n", num1);int num2 = 3 - 7;printf("%d\n", num2);return 0;
}
除此之外,变量还可以相加。
//10 -4int sum = num1 + num2;printf("%d\n", sum);
2.1.2 *
运算符 * ⽤来完成乘法。
int main()
{int n = 5;printf("%d\n", n * n);return 0;
}
2.1.3 /
运算符 / ⽤来完成除法。但是在C语言中又分整数除法和浮点数除法。除号的两端如果是整数,执⾏的是整数除法,得到的结果也是整数。
代码演示:
7 / 2 得到整数3 余数 1,这个是整数除法。
int main()
{int a = 7 / 2;//7/2=3...1printf("a = %f\n", a);printf("a = %d\n", a);return 0;
}
在屏幕上运行打印的结果,一个是3.000000,一个是3,无法得到我们想要的3.5.这时候我们就要执行浮点数除法了。
除号的两端,两个运算数必须至少有⼀个浮点数,这时C语言执行的是浮点数除法,得到的结果就是浮点数。
int main()
{float a = 7.0f / 2.0f;//7/2=3...1printf("a = %f\n", a);return 0;
}
练习题:
这段代码的结果是什么?
#include <stdio.h>int main()
{int score = 5;score = (score / 20) * 100;return 0;
}
结果是0.
如果我们改成20.0,那么这段代码的运行结果就变成了25.
#include <stdio.h>int main()
{int score = 5;score = (score / 20.0) * 100;printf("%f\n",score);return 0;
}
2.1.4 %
运算符 % 表示求模运算,即返回两个整数相除的余值。这个运算符只能用于整数,不能用于浮点数。
我们如何理解呢?其实说白了,这个就是在求余数。
int a = 7 / 2;//商int b = 7 % 2;//%取模(取余)得到是是整除后的余数printf("a=%d\n", a);printf("b=%d\n", b);
注意:取余没有浮点数的取法。也就是说取余最终操作的还是整数。
负数取余
负数求模的规则是,结果的正负号由第一个运算数的正负号决定。
#include <stdio.h>int main()
{printf("%d\n", 11 % -5); // 1printf("%d\n",-11 % -5); // -1printf("%d\n",-11 % 5); // -1return 0;
}
我们可以看到,最终结果的正负号,都是由第一个数的正负号决定的。
三、赋值操作符:=和复合赋值
在变量创建的时候给一个初始值叫初始化,在变量创建好后,再给一个值,这叫赋值。
int a = 0;//初始化a = 20;//赋值,= 赋值操作符
3.1 连续赋值
赋值操作符也可以连续赋值,如:
int a = 3;int b = 5;int c = 0;c = b = a + 3;//连续赋值,从右向左依次赋值的。
C语言虽然支持这种连续赋值,但是写出的代码不容易理解,也不方便调试,建议还是拆开来写,这样方便观察代码的执行细节。
b = a + 3;c = b;
3.2 复合赋值
在写代码时,我们经常可能对一个数进行自增、自减的操作,如下代码:
比如现在有个a,然后我们想让它增加10
int a = 3;a = a + 10;
像这样的过程我们可以简化,简化成+=,或者说是-=。像这样的复合赋值操作符有+=、-=、*=、/=、%=……
int a = 3;a = a + 10;a += 10;//复合赋值a = a - 4;a -= 4;//复合赋值
还有这些也是复合赋值运算符。
4. 单目操作符:++,-- ,+,-
我们回过头来想一下,前面我们学的双目操作符,是因为他有两个操作数,而现在我们介绍的单目操作符,是不是意味着它只有一个操作数。而,++、–、+(正)、-(负) 就是单目操作符的。
4.1 ++ 和 –
++分前置++和后置++,- - 也分前置 - - 和后置 - - 。++ 就是自增1 的运算。
a = a + 1a += 1a++ / ++a
前置和后置的区别是什么呢?我们得放在表达式中才能观察。
4.1.1 前置++和后置++
对于前置++的计算,我们有一个计算口诀:先++,后使用。
int a = 5;int b = ++a;//a=a+1;b=a;printf("a=%d\n", a);//6printf("b=%d\n", b);//6
对比一下后置呢?我们同样有一个计算口诀。后置++,它的计算口诀:先使用,再++。
int a = 5;int b = a++;//b=a;a=a+1;printf("a=%d\n", a);//6printf("b=%d\n", b);//5
4.1.2 前置- -和后置 - -
前置- - 和后置- -的各自计算同样有自己对应的口诀。前置- -计算口诀:先 - -,后使用,后置是:先使用,再 - -
//前置--int a = 5;int b = --a;//a=a-1;b=a;printf("a=%d\n", a);//4printf("b=%d\n", b);//4
//后置--int a = 5;int b = a--;//b=a, a=a-1printf("a=%d\n", a);//4printf("b=%d\n", b);//5
4.2 +(正)和 -(负)
这里的+是正号,-是负号,都是单目操作符。
运算符 + 对正负值没有影响,是一个完全可以省略的运算符,但是写了也不会报错。
+号加上不影响原先的值,也就是原先是负数后面还是负数。而-会改变原先值的正负号。
int main()
{int a = -10;int b = a;printf("%d\n", b);return 0;
}
运算符 – 用来改变一个值的正负号,负数的前面加上 - 就会得到正数,正数的前面加上 - 会得到负数。
5.强制类型转换
对于强制类型转换,不推荐大家频繁的用,我们之前在接触数据类型的时候看过,我们说可以把double的浮点数加一个’f’,从而变成float。
而这种就是强制类型转换,它的语法很简单,就是在括号中放类型。
int main()
{int a = (int)3.14;//doubleprintf("%d\n", a);return 0;
}
这时候只会打印,3,所以能不用强转就不用强转,强制类型转换也是个转换符。但其实操作符还没有讲完,之后还会进行详解。
总结
我们探讨了C语言中的字符串长度计算(strlen与sizeof)、算术操作符(+、-、*、/、%)、赋值操作符(=、+=等)及单目操作符(++、–、+、-)。同时,介绍了强制类型转换的注意事项。下期我们将介绍输入输出和分支循环。