导图社区 C语言运算符
这是一张有关于C语言中运算符的思维导图,要与python语言后续做对比,能够更使你更快深层次的学习C语言,抓紧收藏吧!
编辑于2021-07-28 17:33:28C语言运算符
算术运算符
x + y
:将 x 与 y 相加
x - y
:将 x 与 y 相减
x * y
:将 x 与 y 相乘
x / y
:x 除以 y
x % y
:求 x 除以 y 的余数
% 运算符要求参加运算的对象为整数,结果也是整数。
报错问题
#include<stdio.h> int main(){ int a =22; int b = 3; float c = 1.0; printf("a/b: %d\n", a/b); printf("a/b: %f\n", a/b); printf("a/b: %f\n", float(a/b)); // printf("a\%c: %d\n", a%c); return 0; }
自增、自减运算符
# include<stdio.h> int main(){ int a = 5; printf("%d\n",a++); printf("%d\n",++a); return 0; }
不同数据之间的混合运算
在程序中经常会遇到不同类型的数据进行运算,比如 7*3.5。如果一个运算符的两侧数据类型不同,则先进行类型的转换,使两者具有同一种类型,然后进行运算。因此整型、浮点型、字符型数据之间可以进行混合运算
转换优先级
#include<stdio.h> int main(){ int i = 3; float f = 4.3; double d = 7.5; double sum; sum = 10 + 'a' + i * f - d/3; printf("%lf\n", sum); return 0; }
格式声明为 "%lf",表示输入的是双精度型实数
强制类型转换
#include<stdio.h> int main(){ int a =22; int b = 3; float c = 1.0; printf("a/b: %d\n", a/b); printf("a/b: %f\n", a/b); printf("a/b: %f\n", (float)(a/b)); // printf("a\%c: %d\n", a%c); return 0; }
结果为: a/b: 7 a/b: 0.000000 a/b: 7.000000
这是为什么呢?
python好像就可以
(类型名)(表达式)
(double)a //将 a 转换成为 double 型 (int)(x + y) //将 x+y 的值转换成为 int 类型
注意
在强制类型转换时,得到一个所需类型的中间数据,而原来变量的类型未发生变化。例如 a = (int)x。
如果已经定义了 x 为 float 型变量,a 为整型变量,进行强制类型运算 (int)x 后得到一个 int 类型的临时值,它的值等于 x 的整数部分,把它赋值给 a,注意 x 的值和类型都未变化,仍为 float 型,该临时值在赋值后就不再存在了。
数据的输入和输出
scanf()
printf()
putchar()
用 putchar() 函数输出一个字符
功能:输出变量 c 所代表的一个字符;
说明:c 为字符型变量或整型变量。
例子
#include<stdio.h> void main(){ char a, b, c; a = 'o'; b = 'K'; c = '\n'; putchar(a); putchar(b); putchar(c); printf("%c", a); }
通过此例我们可以看到:用 putchar() 函数既可以输出能在显示器屏幕上显示的字符, 也可以输出屏幕控制字符,如 \n 的作用就是输出一个换行符,使输出的当前位置移到下一行的开头。
getchar()
一般形式:getchar();
功能:要求用户从终端(键盘)输入单个字符
说明:返回值为从输入设备上得到的字符。
例子
#include <stdio.h> int main(){ char c; printf("Input an uppercase letter:\n"); c = getchar(); putchar(c + 32); return 0; }
举例
求 ax^2+bx+c=0 方程的根。a,b,c 由键盘输入,设 b^2-4ac>0。
#include<stdio.h> #include<math.h> //程序中要调用求平方根函数 sqrt int main(){ double a,b,c,disc,x1,x2,p,q; printf("请输入三个系数a,b,c:"); scanf("%lf%lf%lf",&a,&b,&c); disc = b * b - 4 * a * c; p = -b / (2.0 * a); q = sqrt(disc) / (2.0 * a); x1 = p + q; x2 = p - q; printf("x1=%7.2f\nx2=%7.2f\n",x1,x2); /*7表示宽度*/ return 0; }
编译时需要注意,在 Linux 系统下,C 源文件若调用了 math 库里的函数, 则编译时要加上 -lm (是字母 l ,不是数字 1),表示链接到 math 库。
这里我们说明一下:因为数学函数位于 libm.so 库文件中(这些库文件通常位于 /lib 目录下),-lm 选项告诉编译器,我们程序中用到的数学函数要到这个库文件里找。而 printf 为什么不需要呢?这是因为它位于 libc.so 库文件中,使用 libc.so 中的库函数在编译时不需要加 -lc 选项,当然加了也不会错,因为这个选项是 gcc 的默认选项。
gcc -o 5-5 5-5.c -lm
输入 “1 3 2” 时,两个数字之间是用空格或Enter分开,如果用其他符号(如逗号)会出错。我们输入的 “1 3 2” 虽然是整数,但是由于指定了用 %lf 的格式输入,因此系统会先把这 3 个整数装换成为实数 1.0,3.0,2.0,然后赋值给变量 a,b,c。
在 printf 函数中,不是简单地用 "%f" 格式声明,而是在格式符 "f" 的前面加了 “7.2”。 表示的意思是在输出 x1,x2 时,指定数据占 7 列,其中小数占 2 列。这样做有两个好处。
可以根据实际需求来输出小数的位数,因为并不是任何时候都需要 6 位小数的。
如果输出多个数据各占一行,用同一个格式输出,即使输出的数据整数部分不同,但输出时上下行必然按小数点对齐,使输出数据整齐美观。
格式字符
注意点
在输入函数时,用 %c 格式声明输入字符时,空格字符和转义字符都是作为有效字符输入,例如:scanf("%c%c%c",&c1,&c2,&c3); 在执行这个程序时,需要我们连续输入 3 个字符,中间不要有空格,如下: abc 下面插入空格的形式是错误的: a b c
这种形式第一个字符 'a' 送给 c1,第二个字符是空格字符' '送给了 c2,第三个字符 'b' 送给了 c3。
在使用 %d 输出时,我们可以指定输出的宽度。
%d:按照整型数据的实际长度输出。 %md:以 m 为指定的最小字段宽度输出,右对齐。 %ld:输出长整型数据。 %mld:输出指定宽度的长整型数据。