文章目录
1.算术操作符 +,-,*,/,%
算术操作符是双目操作符
操作符也被叫做运算符,意思一样
1.1 +
和-
+和-用来完成加法和减法
+和-都是有两个操作数的,位于操作符两段就是它们的操作数,这种操作符也叫双目操作符
int main()
{
int a = 2;
int b = 3;
int c = a + b;//2+3 = 5
int d = b - a;//3-2 = 1
printf("%d\n", c);//5
printf("%d\n", d);//1
return 0;
}
1.2 *
运算符*
用来完成乘法
int main()
{
int num = 5;
printf("%d\n", num * num);//25
return 0;
}
1.3/
运算符/
用来完成除法
除号的两端如果是整数,执行的是整数除法,得到的结果也是整数
int main()
{
float x = 6 / 4;
int y = 6 / 4;
printf("%f\n", x);//1.000000
printf("%d\n", y);//1
return 0;
}
c语言里的整数除法是整数,只会返回整数部分,丢弃小数部分但是6/4的最终结果是1.5,那么我们想要得到1.5这个结果,就要使用浮点数除法
浮点数整除法
两个运算数至少有一个浮点数
int main()
{
float x = 6.0 / 4;
printf("%f\n", x);//1.500000
return 0;
}
1.4 %
**运算符%
表示求模(余)运算,即返回两个整数相除的余数,这个运算符只能用于整数,不能用于浮点数
int main()
{
int x = 6 % 4;//6整除4后得1余2
printf("%d\n", x);//2
return 0;
}
1.4.1负数求模
负数求模的规则是,结果的正负号由第一个运算符的正负号决定
int main()
{
printf("%d\n", 11 % 5);//1
printf("%d\n", -11 % 5);//-1
printf("%d\n", 11 % -5);//1
return 0;
}
1.5赋值操作符:=和复合赋值
在变量创建的时候给一个初始值叫初始化,在变量创建好后,再给一个值,这叫赋值
int a = 10;//初始化
a = 20;//赋值,这里使用的=就是赋值操作符
赋值操作符=
是一个随时可以给变量赋值的操作符
1.6连续赋值
赋值操作符也可以连续赋值
int main()
{
int a = 3;
int b = 5;
int c = 0;
c = b = a + 3;//连续赋值,从右向左一次赋值的
//先把a+3赋给b 再把b赋给c
return 0;
}
C语言虽然支持这种连续赋值,但是写出的代码不容易理解,建议还是拆开来写,这样方便观察代码的执行细节
1.7复合赋值符 +=
-=
写代码时,我们经常可能对一个数进行自增,自减的操作
int main()
{
int a = 10;
a = a + 3;
a = a - 2;
//可以写成
a += 3;
a -= 2;
return 0;
}
c语言中的复合赋值符有:
+=
, -=
,*=
,/=
,%=
,>>=
,<<=
,&=
,|=
,^=
2.单目操作符
单目操作符只有一个操作数,++,–,+(正),-(负)都是单目操作符
2.1 ++和–
++是自增操作符,又分为前置++和后置++;–是自减操作符,也分为前置–和后置–
2.1.1前置++
计算口诀,先+1,再使用
int main()
{
int a = 10;
int b = ++a;//前置++,先执行a+1再使用a的值
printf("%d\n", b);//11
return 0;
}
2.1.2后置++
计算口诀:先使用,再+1
int main()
{
int a = 10;
int b = a++;//后置++,先使用a的值,把10赋值给b,再a+1,a变成11
printf("%d\n", b);//10
return 0;
}
2.1.3前置–\
计算口诀:先使用,再-1
int main()
{
int a = 10;
int b = --a;//先把执行a-1,再赋值给b
printf("%d\n", b);//9
return 0;
}
2.1.4后置–
计算口诀:先-1,再使用
int main()
{
int a = 10;
int b = a--;//先把a的值10赋值给b,再执行a-1
printf("%d\n", b);//10
printf("%d\n", a);//9
return 0;
}
2.2+和-
- 运算符
+
对正负值没有影响,是一个完全可以省略的运算符,但是写了也不会报错 - 运算符
-
用来改变一个值的正负号,负数的前面加上-
就会得到正数,正数的前面加上-
会得到负数。
3.强制类型转换
int main()
{
//int a = 3.14;//a是int类型,3.14是double类型,两边类型不一致,编译器去报警告
//为了消除警告,可以进行强制类型转换
int a = (int)3.14;//将3.14强制类型转换为int类型,这种强制类型转换只取整数部分
return 0;
}
尽量减少使用强制类型转换的代码,如果不用强制类型转换就尽量不用
4.占位符
%a
:十六进制浮点数,字母输出为小写%A
:十六进制浮点数,字母输出为大写%c
:字符%d
:十进制整数。//int%e
:使用科学计数法的浮点数,指数部分的e为小写%E
:使用科学计数法的浮点数,指数部分的E为大写%i
:整数,基本等同于%d%f
:小数(包含float类型和double 类型)。//float%fdouble-%lf%g
:6个有效数字的浮点数。整数部分一旦超过6位,就会自动转为科学计数法,指数部分的e
为小写。%G
:等同于%g,唯一的区别是指数部分的E为大写%hd
:十进制short int 类型%ho
:八进制short int类型%hx
:十六进行short int类型%hu
:unsigned short int 类型%ld
:十进制long int类型%lo
:八进制long int类型%lx
:十六进制long int类型%lu
:unsigned long int类型%lld
:十六进制long ling int类型%llo
:八进制的long long int类型%llx
:十六进制long long int类型%llu
:unsigned long long int类型%le
:科学计数法表示的long double类型浮点数%Lf
:long double 类型浮点数%n
:已输出的字符串数量,该占位符本身不输出,只讲值粗存在指定变量之中%o
:八进制整数%p
:指针(用来打印地址)%s
:字符串%u
:无符号整数(unsigned int)%x
:十六进制整数%zd
:size_t类型%%
:输出一个百分号
5.输出格式
5.1限定宽度
int main()
{
printf("%5d\n", 123);//( 123)默认右对齐,凑齐五个长度
return 0;
}
在示例代码中,%5d表示这个占位符的宽度至少为5位,如果不满5位,对应的值前面会添加空格,输出的值默认是右对齐,如果希望改成左对齐,即在输出内容后面添空格可以在占位符%
的后面插入一个符号
左对齐
5.2限定小数位数
输出小数时,有时希望限定小数的位数
例,希望保留小数点后两位,占位符可以写成%.2f
int main()
{
printf("%.2f", 0.5);//0.50
return 0;
}
5.3总是显示正负号
在默认情况下下,printf()不对正数显示+
号,只对负数显示-
号。如果想让正数也输出+
号,可
以在占位符的%后面加一个+
。
例:
int main()
{
printf("%+d\n", 12);//+12
printf("%+d\n", -12);//-12
return 0;
}
%+d
可以确保输出的数值,总是带有正负号
5.4限制宽度和限制小数位数结合使用
int main()
{
printf("%*.*f\n", 5, 2, 0.5);//打印宽度为5,余两位小数的结果
//相当于printf("%6.2f\n",0.5);
return 0;
}
上面示例中,%* .*
f的两个星号通过printf()的两个参数 6和 2传入
5.5输出部分字符串
int main()
{
printf("%.5s\n", "helloworld");//只输出长度为5的字符串
//打印结果为hello
return 0;
}
上面示例中,占位符%.5s
表示只输出字符串"hello world"的前五个字符,即"hello"
6.scanf函数
6.1scanf的基本用法
- scanf()函数用于读取用户的键盘输入。
- 程序运行到这个语句时,会停下来,等待用户从键盘输入。
- 用户输入数据、按下回车键后,Scanf()就会处理用户的输入,将其存入变量。
- 它的原型定义在头文件stdio.h
- scanf()的语法跟printf()类似。
6.2scanf的返回值
- scanf()的返回值是一个整数,表示成功读取的变量个数
- 如果没有读取任何项,或者匹配失败,则返回0
- 如果在成功读取任何数据之前,发生了读取错误或者遇到读取到文件结尾,则返回常量EOF(-1)。EOF-endoffile文件结束标志
在vs环境中按三次ctrl+z强制结束输入