零基础学C语言(攻克常用运算符与关键字)

一、运算符

1.算数运算符

2.赋值运算符

3.单目运算符

4.关系运算符与逻辑运算符

5.条件表达式与逗号表达式

二、关键字

1.常见关键字

2.关键字static

(1)修饰局部变量

3.关键字register

三、其他要点

1.预处理指令#define(define不是关键字)

(1)define定义标识符常量

2.const常量

—————————————————————————————————————
一、运算符
1.算术运算符:

运算符 符号
加号 +
减号 -
乘号 *
除号 /
模(取余数) %

注意:
1.C语言中的运算规则大致相同,0不能做被除数。
2.取余数时,只能是整数型常量或变量,否则编译器会报错。
3.在进行除法时,如果结果要求位小数,除号左右两端至少有一端带小数,如3/4.0,且数据类型只能为float或double,在输出时用%f%lf进行输出。

2.赋值运算符

操作符 符号
赋值 =
加法赋值 +=
减法赋值 -=
乘法赋值 *=
除法赋值 /=
#include<stdio.h>
int main()
{
    
    
	int a=0;
	a+=1;
	a=a+1;
	//上方两个语句的意思是相同的,都是将a加上1后再赋值给a,之后a的结果变为1。
	//只不过第一个语句更加简便。
	a*=2;
	a=a*2//同理
	return 0;
}	

注意:
=在C语言中的意思是赋值,而不是数学中的判断是否相等,C语言中的判断相等的符号是==,一定要区分清楚!

3.单目运算符

符号 含义
+ 正值
- 负值
逻辑反操作
& 取地址
sizeof 操作符的类型长度
自减符
++ 自增符
() 强制类型转换

注意:
1.+与-在这里是符号位,不用于计算。
2.sizeof不是函数,既是操作符也是关键字,在求数据类型的长度时必须加上括号,这是语法规定。
3.++和–,既有前置,也有后置。前置时,如++a,是先将变量a的值加1,再使用变量a的值;后置时,如a++,是先使用变量a的值,再将变量a的值加1。且自增和自减符只能加1或者减1。

#include<stdio.h>
int main()
{
    
    
	int a=0;
	printf("%d\n",sizeof(int));//sizeof的括号不能省略
	printf("%d\n",sizeof(a));
	//所有输出结果都为int类型——数据类型的大小为4
	return 0;
}

输出结果
思考下面一段代码,计算最后的结果:

#include<stdio.h>
int main()
{
    
    
	int a=0,b;
	b=a++;
	printf("%d %d",a,b);
	b=++a;
	printf("%d %d",a,b);
	return 0;
}

第一次运算后,a=1,b=0;第二次运算后,a=2,b=2。
提示:++a是先使用,a++是后使用。

4.关系运算符与逻辑运算符
关系运算符:

扫描二维码关注公众号,回复: 15280952 查看本文章
运算符 符号
小于 <
小于等于 <=
大于 >
大于等于 >=
等于 ==
不等于 !=

注意:
1.关系运算符的优先级低于算数运算符,在关系运算符中,前四个运算符的级别比后两个的优先级高
2.含有关系运算符的运算结果只有两个:1(true)或0(false)。因次,关系运算的结果是整型数据。如果关系成立,结果为1;如果关系不成立,结果为0。
3.虽然关系运算符的结果是整型数据,但是关系运算符可以用于比较整形和浮点数,也允许比较混合类型的操作数。

逻辑运算符:

运算符 符号
&& 逻辑与
|| 逻辑或
逻辑非

逻辑与运算的特点:仅当两个操作数都为真时结果才为真,其他情况都为假。当需要两个条件同时为真时,使用逻辑与运算符&&把两个条件连接起来。
逻辑或运算的特点:仅当两个操作数都为假时结果才为假,其他情况都为真。因此,当需要表示两个条件只要有一个成立时,可使用逻辑或来连接这两个条件。例如,判断某人的年龄属于60以上或12以下的范围,所对应的表达式为:age>60||age<12.
逻辑非运算符用于反转一个条件的值。逻辑非运算符只需要一个操作数,若操作数为真,则该逻辑表达式为假;若操作数为假,则该逻辑表达式为真。
注意:逻辑表达式的值,即逻辑运算的结果只有真和假两个值,C语言没有提供布尔类型,当运算结果为真时用1表示,为假时用0表示。但是在判断一个数值表达式(不一定是逻辑表达式)真假时,由于任意一个数值表达式的值不局限于0和1两种情况,因此根据表达式的值为0还是非0来判断其真假,如果表达式为非0(负数也可以)时为真,否则为假。
优先级:一元运算符(单目运算符)>算术运算符>关系运算符>大于逻辑运算符(!除外)>赋值运算符
注意:既是逻辑运算符又是单目运算符,所以是最高的。
当然,记不住这些优先级也不必惊慌,”将需要计算的表达式用圆括号括起来“是解决这个问题的灵丹妙药。

5.条件表达式逗号表达式
C语言提供了一种特殊的运算符,用来依据条件选择两个值中的一个。
条件表达式:

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

以上的组合表达式称作条件表达式,这是唯一一个要求三个操作符的运算符,因此,也被称为三元运算符。

使用表达式求两个整数的最大值

#include<stdio.h>
int main()
{
    
    
	int a,b,max;
	svanf("%d %d",a,b);
	max=(a>b)?a:b;
	printf("%d\n",max);
	return 0;
}

在这其中,(a>b)?a:b是一个程序表达式,若条件(a>b)成立,则条件表达式取值a;否则,取值b。

逗号表达式:
逗号表达式就是将两个及其以上的式子联接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。
表示方式:
(表达式1,表达式2,表达式3,… ,表达式n)
注意:
(1) 逗号表达式的运算过程为:从左往右逐个计算表达式。
(2) 逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。
(3) 逗号运算符的优先级别在所有运算符中最低。

二、关键字
1.常见关键字

auto  break   case  char  const   continue  default  do   double else  enum   
extern  float  for   goto  if   int   long  register    return   short  signed
sizeof   static struct  switch  typedef union  unsigned   void  volatile  while

注意:用户不能自己创造关键字。

2.关键字static
(1)修饰局部变量

void  not()
{
    
    
	static int a=1;
	a++;
	printf("%d ",a);
}
int main()
{
    
    
	int i=0;
	while(i<10)
	{
    
    
		not();
		i++;
	}
	return 0;
}

static修饰函数中的局部变量:(局部变量存储位置由堆区移至静态区),使函数中的局部变量不会改变。
生命周期延长:该变量不会随函数的结束而结束。
初始化:只在第一次调用该函数时进行初始化。
记忆性:之后调用时,该变量使用前一次函数调用完成之后保存的值。

3.关键字register(寄存器变量)

int main()
{
    
    
	//寄存器变量
	register  int num=3;//建议将3存放在寄存器里
	return 0;
}

运行速度:寄存器>高速缓存>内存>硬盘
空间:硬盘>内存>高速缓存>寄存器
造价:寄存器>高速缓存>内存>硬盘
由于以上特性,所以不能把大量数据存放至寄存器中,只是建议将register修饰的变量存放在寄存器中。

三、其他要点
1.预处理指令#define(define不是关键字)
(1)define定义标
#define 编译指令的准确含义是,命令编译器将源代码中所有标识符常量替换为替换文本。

#define NUM 100;//NUM就变成100的别名
#define PI  3.1415926;//PI就是3.1415926的别名

根据约定,符号常量名中的字母为大写,这易于将其同变量名区分开
宏常量也有其自身缺点,就是宏常量被替换成替换文本之后,内存中就有同一个替换文件的多份副本。

2.const常量
const常量与变量定义形式类似,加上const 修饰,告诉编译器,它的值是固定的,不能被改变,编译器会帮你检查,监督。

const double PI=3.1415926;

const推出的目的就是为了取代宏常量,消除其缺点,同时继承其优点。
在编译时,由于const定义常量只是给出了对应的内存地址,所以const定义的常量在程序运行过程中只有一份副本。

以上内容是一位计算机菜鸟所写,如果存在错误,还请在评论区指出,我们可以一起交流,讨论。
希望喜欢的我的内容的大大们,为我点点关注,点点赞!!!
请添加图片描述

猜你喜欢

转载自blog.csdn.net/z2004cx/article/details/128170943