导图社区 运算符与表达式
包含C运算符、不同类型数据间的混合运算、预处理(#include指令)、C语句、数据的输入与输出等相关内容。超详细的,干货满满,非常实用,现在不收藏,还在等什么呢。
编辑于2025-02-24 20:47:00运算符与表达式
C运算符
(1)算术运算符:+ - * / % (取整) ++(自增) --(自减)
自增(++),自减(--)
++i(在使用i之前,先使i的值加1) - - i(在使用i之后,使i的值加1)
算术运算符是自左到右(左结合性)
(2)关系运算符:> < == >= <= !=
(3)逻辑运算符:!(not ) &&(逻辑与) ||(逻辑或)
(4)位运算符:<<(左移) >>(右移) ~ |(按位或) ^(按位异或) &(按位与)
(5)赋值运算符:=及其拓展赋值运算符
赋值运算符是自右到左(右结合性)
复合的赋值运算符
eg: a+=3 等价于 a=a+3 x*=y+8 等价于 x=x*(y+8) x%=3 等价于 x=x%3
凡是二元(二目)运算符,都可以与赋值符一起组成复合赋值运算符。
赋值表达式
形式:变量 赋值运算符 表达式
运算符左边为左值,左值应当为存储空间且可以被赋值
赋值过程中的类型转换(若赋值运算符两侧类型不一,但均为基本类型则可以进行转换)
规则
float型赋给整型时,先取整,再存储
整型赋给float或者double时数值不变,显示变为小数形式,变为float或者double存储
double赋给float,依旧正常转换,精度取六到七位小数,但是double数的数值不能超float的范围
字符型赋给整型,则是赋予ASCII码值
当将一个字节多的整型赋给一个字节少的整型或者字符变量,则只将其低字节原封不动赋给变量(即发生截断)
eg: int a= 32767 //四个字节 short b; //两个字节 b=a+1 这个输出是b=-32768 a中是00000000 00000000 | 01111111 11111111 而b存的是10000000 00000000
(6)条件运算符:? :
(7)逗号运算符:,
(8)指针运算符:*和&
(9)求字节数运算符:sizeof
(10)强制类型转换运算符:(类型)
eg:(double) a //将a强制转换为double型
两类类型转换
不必用户干预
强制类型转换
自动类型转换不能实现目的时。
eg:%运算符要求两侧均为整型量,所以对于非整型量必须强制转换
(11)成员运算符:. ->
(12)下标运算符:[ ]
(13)其他:函数调用运算符等
不同类型数据间的混合运算
如果一个运算符两侧的数据类型不同,则先自动进行类型转换使两者成为同一类型。
整型、实型、字符型数据间可以进行混合运算
规律
+、-、*、/运算的两个数中有一个为float型或者double型则结果为double型(所有的float型均会转换为double型计算)
int型与float或者double计算则先变为double,结果为double
char型数据与整型数据运算,即把ASCII代码与整型整数进行运算。char和实型数据运算则ASCII先变为double
%c输出字符,%d输出ASCII代码
预处理(#include指令)
两种形式
#include<>
这种为标准形式,直接从存放C编译系统的子目录中寻找
#include""
从用户当前目录开始寻找
实在不行可以加上路径 eg:#include"C:\temp\filel.h"
C语句
一个函数包含声明部分和执行部分,执行部分是由语句组成的,语句的作用是向计算机系统发出操作指令,要求执行相应操作。
C程序结构
一个表达式中可以包含一个或多个赋值表达式,但不可以包含一个赋值语句。
C语句
一共分为以下五类
控制语句 用于完成一定的控制功能,C语言一共只有九种控制语句
if ( ) ··· else ··· (条件语句)
for ( ) ··· (循环语句)
while ( ) ··· (循环语句)
do ··· while ( ) (循环语句)
continue (结束本次循环语句)
break (中止执行switch或循环语句)
switch (多分支选择语句)
return (从函数返回语句)
goto (转向语句,在结构化程序中基本不用的goto语句)
()中表示判别条件,···表示内嵌语句
函数调用语句
由一个函数调用加一个分号构成,例如 :printf("This is a C statement"); //加上分号才构成语句
表达式语句 有一个表达式加一个分号构成
eg:“a=1“是一个赋值表达式,而”a=1;“是一个赋值语句
空语句
eg:; //这即为一个空语句
作用
作为流程的转向点(流程从其他地方转向此语句)
作为循环语句的循环体(循环体为空语句,表示循环体什么也不做)
复合语句(语句块)
可以用{ }把一些语句和声明括起来成为复合语句
eg: { float pi=3.14159 ,r=2.5, area; //定义变量(声明部分) area=pi*r*r; printf("area=%f",area); }
常用作if语句或者循环语句中,此时程序需要连续执行一组语句。
数据的输入与输出
C语言函数库提供的标准输入输出函数
printf函数
一般格式:printf(格式控制,输出表列)
“格式控制”是用双撇号括起来的一个字符串,称为格式控制字符串,其中包含两个信息。
格式声明:由%和格式字符组成,将输出的数据转换为指定格式后输出。输出“%”使用“%%”
格式字符
d:输出有符号的十进制整数。而%5d表示输出数据占五列,若为长整型则为%ld
c:用来输出一个字符,可指定域宽(占几列),若数据为整型则转换为ASCII码,过大数据会发生截断。
s:用来输出一个字符串,后续内容以就用双引号 eg: printf("%c","CHINA") //输出不会有双引号
f:输出实数(单、双、长双),可指定域宽和小数位数采用eg:%8.2f 。占八列,小数两位。输出数据项左对齐在域宽前加一个负号。
e:以指数形式输出实数。不指定域宽和数字部分小数位数,则默认小数位六位,指数位五位。 eg:输出123.456 为1.234560(六位)|e+002(五位,含符号)
其他拓展: o:以八进制整数形式输出。不带符号,会把符号位一起当数据进行换算 x:以十六进制整型输出。可以指定域宽,“lx”为长整型 u:输出无符号型,十进制 g:浮点数,选择f或者e的形式,取长度短者,不显示无意义的0
普通字符:原样输出
注:还可包含转义字符
eg: printf("x1=%7.2f\nx2=%7.2f",x1,x2); //%7.2f表示使用float形式声明数据,并且采用七列显示数据,其中两列显示小数 输出结果: x1= -1.00 x2= -2.00吧
scanf函数
一般形式:scanf(格式控制,地址表列)
注:在格式控制字符串中除格式声明外还有其它字符,在输入数据时应当在对应位置上输入相同字符
格式控制参考printf,地址表列为 “&+变量名”如:&a
附加符号列表:
格式字符与printf的无区别
eg: scanf("%lf,%lf,%lf",&a,&b,&c) 输入三个数据,并将三个数据分别送至&a&b&c三个存储地址,以双精度型实数存储 运行结果:1 3 2 //以空格间隔不能采用其他符号间隔会报错 a=1.0;b=3.0;c=2.0
注意:
putchar(输出字符)
形式:putchar( )
getchar(输入字符)
同上
puts(输出字符串)
gets(输入字符串)