基础知识(下篇)
1.算术操作符(+ - * / %)
C语言中为了方便运算 ,提供了一系列操作符,其中有一组操作符叫做:算术操作符。写代码时一定会涉及到运算,操作符也叫做运算符。
1.1 +和-
- + 和 - 用来完成加法和减法
- + 和 - 都是有两个操作符,位于操作符两端的就是它们的操作数,这种操作符也叫做双目操作符。
#include <stdio.h>
int main()
{
int x = 1 + 2;
int y = 2 - 1;
printf("%d\n" , x );
printf("%d\n" , y );
return 0;
}
1.2 *
运算符 * 用来完成乘法。
#include <stdio.h>
int main()
{
int x = 2;
printf("%d\n" , x * x);//输出4
return 0;
}
1.3 /
运算符 / 用来完成乘法。
除法的两端如果是整数,执行的是整数除法,得到的结果也是整数。
#include <stdio.h>
int main()
{
float x = 6 / 4;
int y = 6 / 4;
printf("%f\n" , x );//输出1.000000
printf("%d\n" , y );//输出1
return 0;
}
上面示例中,尽管变量x的类型是float(浮点型),但是 6 / 4 得到的结果是1.0,而不是1.5。原因在于C语言里面的整数除法是整数,只会返回整数的部分,丢弃小数的部分。
如果希望得到浮点数的结果,两个运算数必须至少有一个浮点数,这时C语言就会进行浮点数除法。
示例一:
#include <stdio.h>
int main()
{
int x = 5;
x = ( x / 20) * 100;
return 0;
}
上面代码最后会得到一个整数0,如果要得到预想中的结果25,可以将除数20改成20.0,让整除变成浮点数的除法:
#include <stdio.h>
int main()
{
int x = 5;
x = ( x / 20.0) * 100;
return 0;
}
1.4 %
运算符 % 表示求模运算,即返回两个整数相除的余值。这个运算符只能用于整数,不能用于浮点数。
#include <stdio.h>
int main()
{
int x = 6 % 4;
printf("%d\n" , x );//输出2
return 0;
}
负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定。
#include <stdio.h>
int main()
{
printf("%d\n", 11 % -5); //输出1
printf("%d\n",-11 % -5); //输出-1
printf("%d\n",-11 % 5); //输出-1
return 0;
}
1.6 赋值操作符:=和复合赋值
在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给一个值,这叫赋值。
1.6.1 连续赋值
赋值操作符也可以连续赋值,如:
int a = 3;
int b = 5;
int c = 0;
c = b = a+3;//连续赋值,从右向左依次赋值的
1.6.2 复合赋值符
在写代码时,我们经常可能对⼀个数进行自增、自减的操作,如下代码:
int a = 10;
a = a+3;
a = a-2;
这样代码C语言给提供了更加方便的写法:
int a = 10;
a += 3;
a -= 2;
C语言中提供了复合赋值符,方便我们编写代码,这些赋值符有:
- += -=
2.*= /= %=
3.>>= <<=
4.&= |= ^=
1.7 单目操作符:++、–、+、-
前面介绍的操作符都是双目操作符,有2个操作数的。C语言中还有⼀些操作符只有⼀个操作数,被称
为单目操作符。 ++、–、+(正)、-(负) 就是单目操作符的。
1.7.1 ++和–
++是⼀种自增的操作符,又分为前置++和后置++,–是⼀种自减的操作符,也分为前置–和后置–。
前置++:
int a = 10;
int b = ++a;//++的操作数是a,是放在a的前⾯的,就是前置++
printf("a=%d b=%d\n",a , b);
计算口诀:先+1,后使用;
a原来是10,先+1,后a变成了11,再使用就是赋值给b,b得到的也是11,所以计算结束后,a和b都是11,相当于这样的代码:
int a = 10;
a = a+1;
b = a;
printf("a=%d b=%d\n",a , b);
后置++:
int a = 10;
int b = a++;//++的操作数是a,是放在a的后⾯的,就是后置++
printf("a=%d b=%d\n",a , b);
计算口诀:先使用,后+1
a原来是10,先使⽤,就是先赋值给b,b得到了10,然后再+1,然后a变成了11,所以直接结束后a是
11,b是10,相当于这样的代码:
int a = 10;
int b = a;
a = a+1;
printf("a=%d b=%d\n",a , b);
前置–:
计算口诀:先-1,后使用
int a = 10;
int b = --a;//--的操作数是a,是放在a的前⾯的,就是前置--
printf("a=%d b=%d\n",a , b);//输出的结果是:99
后置–:
计算口诀:先使用,后-1
int a = 10;
int b = a--;//--的操作数是a,是放在a的后⾯的,就是后置--
printf("a=%d b=%d\n",a , b);//输出的结果是:9 10
1.7.2 +和-
+ 和 - 这里的 + 是正号,- 是负号,都是单目操作符。
运算符 + 对正负值没有影响,是⼀个完全可以省略的运算符,但是写了也不会报错。
int a = +10; //等价于 int a = 10;
运算符 - ⽤来改变⼀个值的正负号,负数的前⾯加上 - 就会得到正数,正数的前⾯加上 - 会得到负数。
int a = -10;
2.强制类型转换
当a的是int类型, 3.14是double类型,两边的类型不⼀致,编译器会报警告
int a = 3.14;
为了消除这个警告,我们可以使用强制类型转换:
int a = (int)3.14;
俗话说,强扭的瓜不甜,我们使⽤强制类型转换都是万不得已的时候使⽤,如果不需要强制类型转化就能实现代码,这样自然更好的。
3.scanf和printf介绍
3.1 printf
基本用法:printf() 的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format (格式化),表示可以定制输出文本的格式。
#include <stdio.h>
int main()
{
printf("Hello World");
return 0;
}
上⾯命令会在屏幕上输出一行文字“Hello World”。
printf() 不会在行尾自动添加换行符,运⾏结束后,光标就停留在输出结束的地方,不会自动换
行。
为了让光标移到下一行的开头,可以在输出文本的结尾,添加一个换行符 \n 。
3.1.1 占位符
printf() 可以在输出文本中指定占位符。
所谓 “占位符”,就是这个位置可以用其他值代入。
- %a :⼗六进制浮点数,字⺟输出为⼩写。
- %A :⼗六进制浮点数,字⺟输出为⼤写。
- %c :字符。
- %d :⼗进制整数。
- %e :使⽤科学计数法的浮点数,指数部分的 e 为⼩写。
- %E :使⽤科学计数法的浮点数,指数部分的 E 为⼤写。
- %i :整数,基本等同于 %d 。
- %f :⼩数(包含 float 类型和 double 类型)。
- %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 long 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 类型。
- %% :输出⼀个百分号。
3.1.2 限定宽度
printf() 允许限定占位符的最小宽度。
#include <stdio.h>
int main()
{
printf("%5d\n", 123); // 输出为 " 123"
return 0;
}
上面示例中, %5d 表示这个占位符的宽度至少为5位。如果不满5位,对应的值的前面会添加空格。
输出的值默认是右对齐,即输出内容前面会有空格;如果希望改成左对齐,在输出内容后面添加空
格,可以在占位符的 % 的后⾯插入⼀个 - 号。
3.1.3 限定小数位数
输出小数时,有时希望限定小数的位数。举例来说,希望小数点后⾯只保留两位,占位符可以写成 %.2f 。
// 输出 Number is 0.50
#include <stdio.h>
int main()
{
printf("Number is %.2f\n", 0.5);
return 0;
}
3.1.4 输出部分字符串
%s 占位符用来输出字符串,默认是全部输出。如果只想输出开头的部分,可以⽤ %.[m]s 指定输出
的⻓度,其中 [m] 代表⼀个数字,表示所要输出的长度。
// 输出 hello
#include <stdio.h>
int main()
{
printf("%.5s\n", "hello world");
return 0;
}
4.scanf
scanf() 函数用于读取用户的键盘输入。程序运行到这个语句时,会停下来,等待用户从键盘输入。用户输入数据、按下回车键后, scanf() 就会处理用户的输入,将其存入变量。它的原型定义在头文件 stdio.h 。scanf() 的语法跟 printf() 类似。
scanf("%d", &i);
读入多个变量
scanf("%d%d%f%f", &i, &j, &x, &y);
有错误欢迎指出~