初始C语言第三篇:常用操作符与关键字

一.操作符

1.算数操作符

内容:

加号+
减号-
*
/
模(取余数)%

注意:与数学中的运算规则相同0不能做被除数!
重点1:%的左右两端只能放整数否则会报错。
重点2:/在进行小数的除法时,左右两端至少有一端带有小数,如3/4.0,且数据类型为float或者double,以%f或%lf进行打印。

思考:求圆的面积,π估计为3.14,输入半径r,如果光打印小数点后有效数字的部分,该怎么打印呢?
举例1:输入1,输出3.14,
举例2:输入10,输出314

答案:

#include<stdio.h>
int main()
{
//求圆的面积,π估计为3.14
 	float pai  = 3.14f;//后缀f表明是float,否则编译器会认为是double类型
  	float r = 0;//
	scanf("%f %f",&a,&b);
	printf("%g",3.14*r*r);
	return 0;
}

说明:这里用到的%g为格式化数据,也就是说只会把有效数据打印出来。

2.赋值操作符

内容:

赋值=
加赋值+=
减赋值-=
乘赋值*=
除赋值/=
int main()
{
    int a = 0;
    
    a += 1;
    a = a+1;//这两句的意思一样,都是将a加上1再赋给a,结果为1,不过第一句更为简便而已。
   
    a*=1;
    a=a*1;//同理
    
	return 0;
}

注意:要区分=在计算机中与数学中的意思,在计算机中等号为==。

3.单目操作符

内容:

+正值
-负值
逻辑反操作
&取地址
sizeof操作数的类型长度
前置,后置
++前置,后置
()强制类型转换

注意:+与-这里为符号位,不用于计算,在signed的类型中,二进制的最高位用于存储符号位。
重点1:sizeof不为函数,为操作符也为关键字,在求数据类型的长度时必须加上括号,这是语法规定。

#include<stdio.h>
int main()
{
	
	int a = 0;
	printf("%d\n",sizeof(int));//注意sizeof的括号不可省去
	printf("%d\n",sizeof(a));
	printf("%d\n",sizeof a);//此句代码可验证sizeof为操作符,且这三行的意思相同。
	
	//所有打印的结果为int——数据类型的字节大小:4
  return 0;
}
思考:下面代码的打印结果是?这里的sizeof的值是?
#include <stdio.h>
void test1(int arr[])//指针类型不代表指针的大小,指针的大小跟计算机的位数有关
//64位————8/x86————4(单位字节)
{
 printf("%d\n", sizeof(arr));//(2)这里的arr是指针
}
void test2(char ch[])
{
 printf("%d\n", sizeof(ch));//(4)这里的ch是指针
}
int main()
{
 int arr[10] = {0};
 char ch[10] = {0};
 printf("%d\n", sizeof(arr));//(1)这里传的是整个数组的大小相当于int[10]
 printf("%d\n", sizeof(ch));//(3)这里相当于char[10]
 test1(arr);
 test2(ch);
 return 0;
}

思考:下列代码的结果?
补充,编译的四个阶段:
1.预处理(扩展各个宏与文件)
2.编译(得到汇编代码)
3.汇编(得到机器码)
4.链接(得到可执行文件)

int main()
{
 char c = 1;
 printf("%d\n", sizeof(c=c+1));//这里的转化在编译阶段已经被处理成1不会再进行计算
 return 0;
}
思考:下面代码的打印结果是?
#include<stdio.h>
int main()
{
	int a = 0;
	int b = a++;//将a赋给b后再加1
	printf("%d %d\n",a,b);
	b = ++ a;
	printf("%d %d\n",a,b);
	return 0;
}

提示:前置先使用,后置后使用。
答案:第一个printf:0 1。第二个:2 2

4.关系操作符与逻辑操作符

内容:

关系操作符
>大于
>=大于等于
<小于
<=小于等于
!=不相等
==相等
逻辑操作符
&&逻辑与
ll逻辑或

说明:这里为了打出 ||,用了小写字母 l。
这里先引出一个分支语句:if ();else; —— 意思是如果if括号里的条件成立就执行 if 反之执行else的语句,先作为了解后面补充。
重点:括号里面的表达式如果为真,则其结果为非0,执行语句,如果为假,则其结果为0。!的作用将非0与0互换,真转假,假转真。

思考下列代码输入1的结果为?

#include<stdio.h>
int main()
{
   int a = 0;
   sacmf("%d",&a);
   if(a>1)
   {
   printf("hehe\n");
   }
   else
   {
   printf("haha\n");
   }
   if(!a)//!1将真转假
   {
      printf("hehe\n");
   }
   if(a)//非0为真
   {
   printf("haha\n");
   }
   if(a==1)
   {
   printf("haha\n");
   }
   
	return 0;
}

拓展: 思考下面代码的运行结果

#include<stdio.h>
int main()
{
    int i = 0,j=0,m=0,n=0,a=0,b=1,d=4;
    i = a++ && ++b && d++;
    printf("a = %d\n b = %d\n d = %d\n i=%d\n", a, b, c, d, i);
    a=0,b=1,d=4
    j = ++a && b++ && d++
    printf("a = %d\n b = %d\n d = %d\n i=%d\n", a, b, c, d, j);
    a=0,b=1,d=4
    m = a++||++b||d++;
    printf("a = %d\n b = %d\n d = %d\n i=%d\n", a, b, c, d, m);
    a=0,b=1,d=4
    n = a++||--b||d--;
    printf("a = %d\n b = %d\n d = %d\n i=%d\n", a, b, c, d, n);
    return 0;
}

提示:&&一假就为假(遇到假的后面不执行),全真才为真,||一真就为真(遇到真的后面不执行),全假才为假。

5.条件操作符与逗号表达式

内容

条件操作符exp1?exp2:exp3
逗号表达式exp1,exp2 ,exp3…

重点1:条件操作符在比较两个数大小时,或两种情况的返回值时比较方便。
重点2:逗号表达式的结果为最后一个表达式的执行结果
思考如下代码,并试着判断打印结果。

#include<stdio.h>
int main()
{
  int a =2;
  int b =3;
  if(a>b)
  {
  printf("%d\n",a);
  }
  else
  {
  printf("%d\n",b);
  }
  
  int ret = a > b?a : b;
  printf("%d\n",ret);//这两种的打印结果相同,可以根据第一种的代码推出第二种代码的逻辑
  int c =a,b;
  printf("%d\n",c);
  return 0;
}

二:关键字

1.类型重命名

英文名:typedef——全名:typedefine
顾名思义,就是重新换个名字,所谓换汤不换药,就是这个意思。
注意:这里的类型是数据类型,命名需放在主函数的上面,这是因为编译器扫描从上往下扫描,而且别忘了,这还是一条语句。
举例:

typedef  signed long long sll;//这是一条语句要跟define区别开
int main()
{
 signed long long a = 0;
 sll b = 0;//这里就将数据类型重命名了,具有化繁为简的效果。
 return 0;
}

2.static

内容:修饰静态变量和函数的关键字。
重点1:改变外部链接属性为内部链接属性
重点2:改变内存位置,将变量或函数存放位置由栈区改为静态区。
重点3:改变生命周期,不改变作用域。


概念引出:

1.电脑如何处理数据?

图解:在这里插入图片描述
概念解释:1. CPU是中央处理器(Central Processing Unit)的缩写。中央处理器是一块超大规模的集成电路,是一台计算机的运算核心和控制核心。它的功能主要是解释计算机指令以及处理计算机软件中的数据。
2.寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。

2.C语言内存的位置在哪?

图解:
在这里插入图片描述
概念解释:
静态区(static):全局变量存储,在程序的整个生命周期都存在

栈区(stack):局部变量存储(自动,连续的内存)

堆区(heap):动态存储(非常大的内存池,非连续分配)

3.链接属性

外部链接属性:可以在不同的源文件进行使用。
如:在这里插入图片描述
这里两个源文件,一个源文件命名一个全局变量,另一个函数声明一下便可使用,像这样的就称之为其有外部链接属性。

内部链接属性:只能在自己源文件内使用,则具有外部链接属性。
如图:在这里插入图片描述
这里在一个源文件中定义全局变量时,前面加上static,这样就将外部链接属性改为内部链接属性,且在另一个源文件中不能使用!

4.生命周期的改变

思考:在add函数中,int a 前加static与不加static有什么区别吗?改变了什么,没改变什么?

void add()
{
int a = 0;
a++;
printf("%d",a);
}
int main()
{
  int i=10;
  while(i)
  {
   add()
   i--;
  }
  return 0:
}

解析:有,在没加之前,变量a在栈区,出去大括号被销毁,进大括号创立, 加static后变量a被移到静态区,直到程序结束时,a才会被销毁,而没变的是作用域。

在这里插入图片描述

序言:希望大家,学有所成,思有所得,得有所就!如果有误,请委婉一点指出,如果觉得文章不错,请留下您的点赞与评论,小编会继续加油!
在这里插入图片描述

  • 20
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值