上一篇写到了转义字符,这一篇接着往下
目录
选择语句
用于分类的情况,比如你的考试成绩,低于60不及格,60及以上及格
一般使用if语句实现
if语句的语法
if(条件1)
{
语句1;
}
else if(条件2)
{
语句2;
}
else
{
语句3;
}
满足哪个括号的条件就进入对应的语句,语句只有一条时不需要“{}”
例:还是考试成绩
#include<stdio.h>
int main()
{
int a=0;
printf("输入你的成绩\n");
scanf("%d",&a);
if(a<60)
printf("不及格\n");
else
printf("及格\n");
return 0;
}
循环语句
用来执行一些重复的操作,比如求1+2+3+...+100的和
这个时候就需要循环语句来完成,当然你如果要创建100个变量再把他们加起来也没人拦着你
循环语句有三种
- while循环
- for循环
- do...while循环
这里只介绍while循环,其它后续再介绍
while语句的语法
while(条件)
{
语句;
}
满足条件进入循环,不满足不进入循环
例:
函数
C语言中的函数与数学上的函数不同,C语言中的函数指程序中的某部分代码,负责完成某项特定任务,具备相对的独立性。
函数可分为库函数和自定义函数,库函数像strlen、printf等,在使用时需要引用相应的头文件,自定义函数就是自己定义的函数
一般自定义函数包含以下几点:返回值、函数名称、函数形参;通常函数在main()前定义,也可在main()函数后定义,但在前面需要进行声明
数组
数组就是一组相同类型的元素的集合,数组的存在就是用来存放元素过多的数据,这里简单介绍数组的操作
创建数组
int arr[5]={2,6,4,7,9};
int表示数组类型,[5]表示可存放的元素的个数,[]内只能写入常量表达式
访问数组
数组里的每一个元素都有对应的下标,下标从0开始,访问数组就是通过下标来访问
上述数组的下标
数组元素 | 2 | 6 | 4 | 7 | 9 |
下标 | 0 | 1 | 2 | 3 | 4 |
如果打印元素6
printf("%d",arr[1]);
操作符
C语言中有很多操作符,这里也是简单介绍,不过多深入
算数操作符
除四则运算外还有取模操作符“%”
具体取模操作符的用法:5%2,得到的是5/2的余数,结果为1
关于操作符“/”还有一点,我们都知道7/2=3.5,但在C语言中有一点不同
虽然数据类型和打印的格式都没有问题,但结果却是3,为什么?
因为在C语言中操作符“/”要想得到小数,除数和被除数至少要有一个写成小数的形式,所以将7/2改成7.0/2或7/2.0即可,你要愿意也可以两个都改
那现在还有一个问题,打印的结果后面那么多0看着不舒服,我只想打印3.5 怎么办
这个也好办,在lf和%之间插入一个小数即可,小数点前的数字指定变量的总长度,小数点后的数字指定小数位数
移位操作符
位指的是二进制位,信息在计算机中是以二进制储存的,移位操作符可将二级制位进行移动
<<为左移,>>为右移
比如说下面的代码:
int a=1;
int b=a<<1;
int在内存中占4个字节,所以int a在内存的二进制储存:
00000000000000000000000000000001
将a的二进制左移一位后的b:
00000000000000000000000000000010
所以b表示的就是2
位操作符
位同样指二进制位,共三个操作符
&:按位与;二进制相同位都为1时结果为1,其它情况下为0
|:按位或;二进制相同位都为0时结果为0,其它情况下为1
^:按位异或;二进制相同位相同为0,不同为1
以上述的1和2举例:
1的二级制位:00000000000000000000000000000001
2的二进制位:00000000000000000000000000000010
1&2结果为0,1|2结果为3,1^2结果为3
关于异或还有两点:异或操作符满足数学上的交换律和结合律 ;
0^n=n,n^n=0
利用好异或的性质在编程时会有帮助,比如:交换两个变量int a,int b的值
一般的思路是新建一个变量int i,然后使 i=a, a=b, b=i
使用异或的话则完全不需要另外的空间
我们来分析一下程序的运行时a和b各自的值
这样也实现了变量的值的交换
赋值操作符
这类操作符一般都是符合赋值符,如:+=、*=等
以+=为例
a+=1和a=a+1是等效的,其它的赋值操作符同理
逻辑操作符
&&:逻辑与
||:逻辑或
定义就是数学上的逻辑与和逻辑或
单目操作符
!:逻辑反操作
~:按二进制位取反
&:取地址,指针常用
sizeof:求操作数的类型长度(单位:字节)
*:解引用操作符,指针常用
++/--:分前置和后置
(类型):强制转换数据类型
这里需要说明一下++和--的前置和后置
以++为例:
首先,++的作用是使变量结果+1,之所以分前置和后置是因为运算顺序有所不同
简单来说:前置是先进行计算,后使用;后置是先使用,后计算
如图:
a和b的初始值都为5,因为前置++是先进行运算,所以结果为6,后置++ 后进行运算,结果为5
这是二者的区别
关系操作符
一般用于条件判断
>、<、>=、<=、!=(不等于)、==(等于)
条件操作符
条件?语句1:语句2
表达式满足条件执行语句1,不满足时执行语句2,当判断只有两种情况时使用
关键字
C语言有很多关键字,比如:int short char while等
需要注意的是,关键字不能自己创建,也不能做变量名,你如果定义一个变量为int while,程序肯定会报错。还有,在常量提过的#define不是关键字,define是预处理指令
这里介绍几个一下的关键字
typedef
类型重命名
简单来讲就是将数据类型另外定一个别名,在后续使用时就可以使用这个别名
static
用来修饰局部变量、全局变量和函数
- 修饰局部变量
之前在介绍局部变量时有提过局部变量的生命周期
图中a是局部变量,所以a的生命周期在出函数时销毁,如果static修饰局部变量
直观上看a的生命周期延长了,上一次循环的a被保留了下来。static是如何实现的?这要从内存说起
内存上有三个区,栈区、堆区和静态区,如下图
a开始是在栈区储存,而static修饰后,a就变成了静态变量,此时a存储的地方发生变化,所以生命周期变长
- 修饰全局变量和函数
修饰全局变量和函数都会使其作用域变小。
之前介绍全局变量的时候说过全局变量的作用域是整个工程,那是因为全局变量具有外部链接属性,所以在源文件a中使用源文件b的全局变量时只需在a中使用extern声明即可,函数同样具有外部链接属性。但static修饰后,外部链接属性变成内部链接属性,这时全局变量和函数便只能在其所在的源文件内使用,其它源文件即使使用extern声明也无法使用
结尾
本篇文章就介绍到此,文笔有限,不足之处欢迎指正