C语言小白教程第四讲-运算符

说明:写这个专栏主要是为了巩固C语言基础知识。本模块是与全国计算机等级考试——二级C语言接轨。具有重基础、概念、系统、全面的特点。适合没有语言基础的小白同学参考。若有大佬不小心点进此专栏,请移步,不然您会见笑的(哈哈哈哈哈)。

目录

 

1.算术运算符

 2.关系运算符(比较运算符)

3.逻辑运算符

4.赋值运算符

5.位运算符

6.三元运算符

7.运算符优先级

 8.标识符

9.关键字

10.键盘输入语句



1.算术运算符

介绍

算术运算符是对数值类型的变量进行运算的。

算术运算符一览表

运算符运算范例结果
+正号+33
_负号b=4;-b-4
+5+510
_6-42
*3*412
/5/51
%取模7%52

++

++

自增(前):先运算后取值

自增(后):先取值后运算

a=2;b=++a;

a=2;b=a++;

a=3,b=3;

a=3,b=2

--

--

自减(前):先运算后取值

自减(后):先取值后运算

a=2;b=--a

a=2;b=a--

a=1;b=1

a=1;b=2

案例演示 

#include<stdio.h>
void main(){
//处理的流程10/4=2.5==截取整数==>2=>2.00000
double d1=10/4;//
doubled2=10.0/4;
//如果希望保留小数,参与运算数必须有浮点数
//给大家一个取模的公式
//a%b=a-a/b*b
int res1=10%3;//求10/3的余数1
int res2=-10%3;//=-10-(-10)/3*3=-10-(-3)*3=-10+9=-1
int res3=10%-3;//10-10/(-3)*(-3)=10-9=1
int res4=-10%-3;//?-1//++的使用
int i=10;
int j=i++;//运算规则等价是int j=i;i=i+1;==>j=10,i=11 
int k=++i;//运算规则等价i=i+1;int k=i;===>i=12,k=12
printf("\ni=%d j=%d",i,j);
//i=12 j=10
printf("\ni=%d k=%d",i,k);//i=12k=12
printf("\nd1=%f d2=%f res1=%d res2=%d res3=%d res4=%d",d1,d2,res1,res2,res3,res4);
//++或者--还可以独立使用,就相当于自增
//k++等价于k=k+1//++k等价于k=k+1//如果独立使用++k和k++完全等价k++;//k=13
++k;//k=14
printf("\nk=%d",k);//k=14
getchar();}

细节说明 

1)对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。例如:int x=10/3,结果是3

2)当对一个数取模时,可以等价a%b=a-a/b*b,这样我们可以看到取模的一个本质运算。

3)当自增当做一个独立语言使用时,不管是++i;还是i++;都是一样的,等价

4)当自增当做一个表达式使用时j=++i等价i=i+1;j=i;

5)当自增当做一个表达式使用时j=i++等价j=i;i=i+1;

 2.关系运算符(比较运算符)

介绍:

1)关系运算符的结果要么是真(非0表示),要么是假(0表示)

2)关系表达式经常用在if结构的条件中或循环结构的条件中

关系运算符一览表

运算符运算范例结果
==相等于4==3false 0
!=不等于4!=3true 非0
<小于4<3false 0
>大于4>3true 非0
<=小于等于4<=3false 0
>=大于等于4>=3true 非0

案例演示

#include <stdio.h>

int main() {
    int a=1;
    int b=2;
    printf("\n a>b=%d",a>b);//0
    printf("\n a>=b=%d",a>=b);//0
    printf("\n a<b=%d",a<b);//1
    printf("\n a<=b=%d",a<=b);//1
    printf("\n a==b=%d",a==b);//0
    printf("\n a!=b=%d",a!=b);//1
    //结论:比较运算符的结果如果为0,则为假;如果为1,则为真
    return 0;
}

细节说明

1)关系运算符的结果要么是真(非0表示,默认使用1),要么是假(0表示)

2)关系运算符组成的表达式,我们称为关系表达式。a>b

3)比较运算符"=="(关系运算符)不能误写成"="(赋值)

3.逻辑运算符

介绍:

用于连接多个条件(一般来讲就是关系表达式),最终的结果要么是真(非0表示),要么是假(0表示)

逻辑运算符一览表

下表显示了C语言支持的所有逻辑运算符。假设变量A的值为1,变量B的值为0,则

运算符描述实例
&&称为逻辑与运算符。如果两个操作数都为非零(真),则条件为真,否则结果为0(假)(A&&B)为假
||称为逻辑或运算符。如果两个操作数中任意一个非零(真),则条件为真。(A||B)为真
称为逻辑或运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假!(A&&B)为真

案例演示

1)短路逻辑与现象

#include <stdio.h>

int main() {
    double score=70;
    if(score>=60&&score<=80){
        printf("及格");
    }
    int a=10,b=99;
    //说明:
    //(1)在进行 && 操作时,如果第一个条件为false,则后面的条件不在判断
    //(2)该现象成为 短路现象。所以,逻辑与也称为 短路逻辑与
    if( a<2 && ++b>99){
        printf("\nok100");
    }
    printf("b=%d\n",b);
    //由于if语句中的第一个条件为假,由于短路现象++b不会执行,因此b=99
    return 0;
}

2)短路逻辑或现象

#include <stdio.h>

int main() {
    int a=10,b=99;
    //说明:
    //(1)在进行 || 操作时,如果第一个条件为ture,则后面的条件不在执行判断
    //(2)该现象成为 逻辑或短路现象。所以,逻辑或也称为 短路逻辑或
    if( a>2 || ++b>99){
        printf("\nok100");
    }
    printf("\nb=%d",b);
    //由于if语句中的第一个条件为真,由于短路逻辑或++b不会执行,因此b=99
    return 0;
}

4.赋值运算符

介绍:

赋值运算符就是将某个运算后的值,赋给指定的变量

赋值运算符一览表

案例演示

#include <stdio.h>

int main() {
//+=的案例,其它的类似-= *= /= %=
    int c = 12;
    int a2 = 10;
    //有两个变量,a和b,要求将其进行交换,最终打印结果
    int a = 10;
    int b = 20;//思路是通过一个临时变量来实现a,b值的交换
    int temp = a;
    a = b;
    b = temp;
    c += 3;
    //等价c=c+3;//c+=b;//等价c=c+b;a2+=1.7;
    printf("\na=%d b=%d c=%d a2=%d", a, b, c, a2);
    //a=20,b=10 c=15 a2=11
    return 0;
}

赋值运算符特点

1)运算顺序从右往左

2)赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值

3)复合赋值运算符等价于下面的效果比如:a+=3;等价于a=a+3;

4)注意在运算时,可能截断小数点后面的部分

int a=10;

a+=1.7; //a=a+1.7=>11.7=>11

a=11

5.位运算符

介绍

位运算符用于位并逐位执行操作。

位运算符一览表

 位运算比较复杂,放在后面的二进制之后单独说

6.三元运算符

基本语法

条件表达式子 ? 表达式 1,:表达式 2 ;

1)如果条件表达式为非0(真)运算后的结果是表达式1;

2)如果条件表达式为0(假),运算后的表达式2;

案例演示

#include <stdio.h>

int main() {
    int a=10;
    int b=99;
    int res= a>b ? a++ : b--;
    int n1=a>b ? 1.1:2.2;
    printf("\n a=%d b=%d res=%d n1=%d",a,b,res,n1);
    //输出 a=10 b=98 res=99 n1=2
    return 0;
}

7.运算符优先级

运算符优先级一览表

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

 

()

圆括号

(表达式)
函数名(形参表)

 

.

成员选择(对象)

对象.成员名

 

->

成员选择(指针)

对象指针->成员名

 

2

-

负号运算符

-表达式

右到左

单目运算符

(类型)

强制类型转换

(数据类型)表达式

 

++

自增运算符

++变量名
变量名++

单目运算符

--

自减运算符

--变量名
变量名--

单目运算符

*

取值运算符

*指针变量

单目运算符

&

取地址运算符

&变量名

单目运算符

!

逻辑非运算符

!表达式

单目运算符

~

按位取反运算符

~表达式

单目运算符

sizeof

长度运算符

sizeof(表达式)

 

3

/

表达式 / 表达式

左到右

双目运算符

*

表达式*表达式

双目运算符

%

余数(取模)

整型表达式%整型表达式

双目运算符

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

双目运算符

5

<<

左移

变量<<表达式

左到右

双目运算符

>>

右移

变量>>表达式

双目运算符

6

>

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

双目运算符

<

小于

表达式<表达式

双目运算符

<=

小于等于

表达式<=表达式

双目运算符

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

双目运算符

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

13

?:

条件运算符

表达式1? 表达式2: 表达式3

右到左

三目运算符

14

=

赋值运算符

变量=表达式

右到左

 

/=

除后赋值

变量/=表达式

 

*=

乘后赋值

变量*=表达式

 

%=

取模后赋值

变量%=表达式

 

+=

加后赋值

变量+=表达式

 

-=

减后赋值

变量-=表达式

 

<<=

左移后赋值

变量<<=表达式

 

>>=

右移后赋值

变量>>=表达式

 

&=

按位与后赋值

变量&=表达式

 

^=

按位异或后赋值

变量^=表达式

 

|=

按位或后赋值

变量|=表达式

 

15

,

逗号运算符

表达式,表达式,…

左到右

 

运算符优先级小结

1)结合的方向只有三个是从右向左,其余都是从左向右

2)所有的双目运算符中只有赋值运算符的结合方向是从右向左

3)另外两个从右向左的结合运算符,一个是单目运算,还有一个是三目运算()

4)逗号的运算符优先级最低

5)说一下优先级的大概的顺序算术运算符>关系运算符>逻辑运算符(逻辑非!除外)>赋值运算符>逗号运算符

 

运算符优先级注意事项和细节

 8.标识符

标识符

1)C语言对各种变量、函数等命名时使用的字符序列称为标识符

2)凡是自己可以起名字的地方都叫标识符

标识符命名规则

1)由26个英文字母大小写,0-9,_或$组成

2)数字不可以开头。

3)不可以使用关键字和保留字,但能包含关键字和保留字。

4)C语言中严格区分大小写,长度无限制。

5)标识符不能包含空格

判断下列标识符是否合法 

标识符命名规范

1)程序中不得出现仅靠大小写区分的相似的标识符int x,X;变量x与X容易混淆

2)所有宏定义、枚举常数、常量(只读变量)全用大写字母命名,用下划线分隔单词比如:const double TAX_RATE=0.08;//TAX_RATE只读变量#define FILE_PATH "/usr/tmp"

3)定义变量别忘了初始化。定义变量时编译器并不一定清空了这块内存,它的值可能是无效的数据,运行程序,会异常退出.

4)变量名、函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz[驼峰法,小驼峰,比如short stuAge=20;]比如:tankShotGame大驼峰[TankShotGame]

9.关键字

 

10.键盘输入语句

1)include<stdio.h>

2)使用scanf函数

3)使用适当的格式参数接收输入

#include <stdio.h>

void main() {
    //使用字符数组接收名
    char name[10] = "";
    int age = 0;
    double sal = 0.0;
    char gender = ' ';

    //提示用户输入信息
    printf("请输入名字:");
    //scanf("%s", name) 表示接收 一个字符串,存放到 name字符数组
    scanf("%s", name);

    printf("请输入年龄:");
    scanf("%d", &age); // 因为我们将得到输入存放到 age 变量指向地址,因此需要加 & 

    printf("请输入薪水:");
    scanf("%lf", &sal); //接收一个double 时,格式参数 %lf

    printf("请输入性别(m/f):");
    scanf("%c", &gender); //这里是接收到了上面的回车字符
    scanf("%c", &gender); //等待用户输入.
    //输出得到信息
    printf("\nname %s age %d sal %.2f gender %c", name, age, sal, gender);

    getchar();//接收到一个回车
    getchar();//这个getchar() 才会让控制台暂停
}

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

城南皮卡丘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值