1.选择语句与循环语句
这两个我们在高中阶段就有初步的认识,便不多赘述,毕竟只是初步了解一下。
放两个例子
选择语句
循环语句
2.函数
函数我们接触到的很多,我们做题时就用的f(x) 便是一个函数,我们在编程时,可以使用函数来减少代码量,防止代码冗余。
倘若我们要使用函数,我们要先给函数一个参数,等我们之后要使用时,只需要将数据代入参数即可。
这是一个简单的加法计算,我们用这几行代码就可以实现,现在我们引入函数,使用函数来计算。
如图,这样我们就用函数解决了我们的问题。唉?这代码的行数明明变长了,还不如我之前那一个呢,为什么还要用函数呢?
之前已经提到,函数可以防止代码冗余,一旦我们在前面引入了一个函数,那么如果后面我们还要用这个的话,直接使用这个函数就可以,不必再引各种变量来计算了。
3.数组
之前的文章已经提到过数组,数组就是一组相同类型的元素集合,
我们引入数组时,使用的语法是
类型 数组名[常数]={元素}
比如
int arr[10]={1,2,3,4,5,6,7}
char ch[3]={'a','b','c'}
中括号是下标引用操作符,后面会讲到的,中括号里面的数字是下标,表示该数组的元素数目,上面的那个数组中元素并没有10个,这种情况称为不完全初始化,后面多出来的默认为0。
数组是通过下标来访问的
比如arr[6],就是访问该数组的第六个元素。
4.操作符(划重点)
算术操作符
就是我们进行计算时所用的运算符号,不过因为人类语言与计算机语言不同,两者之间有一定差别。
+,-,*,/,%
+就是加,-就是减,有差别的是乘除。
我们用*表示乘号,用/表示除号
对于除号的使用
int a=10/4;
printf("%d\n",a)
此时输出的结果是什么?
显然是2,无法输出我们想要的2.5,那是因为整型与浮点型选择的原因吗?
仍旧是2,这是因为默认的,如果/两端的数字都是整型,那么他就进行整型除法 ,只要有一个是小数,就进行浮点型除法,我们把4改为4.0
这样就得到我们想要的结果了。
这里的%是取模,也叫取余,就像上面的计算一样,我们使用%,最后输出的结果是10除以4的余数。
移位操作符
<<这叫左移操作符,箭头指儿就向哪里移
>>右移操作符
移位操作符移动的是二进制位,且移动的是整个二进制数序列
int a=2;
int b=a<<1;
printf("%d\n",b);
return 0;
如上代码段,最终输出的会是多少?
是4,为什么呢?
前面已经说过,移位移动的是二进制位,2的二进制是10,整型有4个字节共32个比特位,也就是说,00000000000000000000000000000010这才是2的真正的二进制序列,整体向左移位,最左边多出来一个0,放在最右边空出来的,于是序列就成了
00000000000000000000000000000100
也就是4
位操作符
位操作符有&,|,^三种,分别叫做按位与,按位或,按位异或
赋值操作符
赋值操作符有
= += -= *= /= &= ^= |= >>= <<=
如何使用?
举个例子
int a=2;
a=a+6;
int a=2;
a+=6;
这两段代码是等价的。
单目操作符
首先我们了解一下什么是单目。
我们常见的2+3,+两边有两个操作数,于是加号就是双目操作符,以此类推,有一个操作数的就是单目操作符。
!的作用是让逻辑反操作
我们要知道,0为假,非零为真,而!就可以让假成真,真成假,
此时输出的是零,2为真,逻辑反操作之后就变成了0,那么如果a=0时,结果如何?
结果是1,1为真,真的有很多,1235478,都是真,这里只输出一个1知道是真即可。
但这个不是!的真正用法,
if(a)//如果a为真,做事
{
}
if(!a)//如果a为假,做事
{
}
往往是这么用的。
-为负值,+为正值
&取地址
sizeof这个我们之前也讲过,用于计算类型或变量的长度,单位字节
注意,sizeof不是函数,而是操作符,函数后面的括号不能去掉,而他后面的括号在某些情况下可以去,
int a=10;
printf("%d\n",sizeof(int))
printf("%d\n",sizeof a )
两个打印函数输出的结果是一样的,这就说明了sizeof是操作符而不是函数。
~是对一个数的二进制按位取反
按位取反就是让整个二进制序列所有的1和0互换,1变成0,0变成1,
int a=0;
printf("%d\n",~a);
这段代码最终输出的结果是-1.
0对应的二进制序列是
00000000000000000000000000000000
按位取反后就成了
1111111111111111111111111111111111111
此时对应的数就是-1,
首位是1,对应负号,后面的是1,所以是-1。
整数在内存中存储的是补码。
什么是补码?
一个整数的二进制表示有三种
原码:就是这个数所对应的二进制序列
反码:符号位不变,也就是首位不变,其余是有效位,全部取反
补码:反码加一
比如说-1
他的原码是10000000000000000000000000000001
反码是除了符号位,其他取反,就是11111111111111111111111111111110
补码是反码再加1,就是11111111111111111111111111111111
--前置减,后置减
++前置加,后置加
前置与后置的运算不一样
int a=10;
int b=++a;
printf("%d\n",a);
printf("%d\n",b);
int a=10;
int b=a++;
printf("%d\n",a);
printf("%d\n",b);
两者输出的结果不一样,前置是先++,后使用,后置是先使用,后++
比如第一个,b=++a,先++,a变成11,再使用,将a的值赋给b,此时a=b=11,
第二个,b=a++,先使用,a赋值给b,再++,a变成11。
*是间接访问操作符(解引用操作符)
(类型)强制类型转换
int a=6.1;
printf("%d\n",a);
如上,这是错误的,无法运行,a为浮点型,而int为整型,此时我们可以用强制转换类型,
此时就强制a变为整型了。
关系操作符
<
>
<=
>=
!=测试不相等
==测试相等
同样的,因为计算机语言的不同,这些符号与我们平常用的不同。
逻辑操作符
&&逻辑与(并且)
||逻辑或(或者)
用于描述是否满足条件的真假
他们与我们高中学习的q且p,q或p一样。
条件操作符
又可称为三目操作符。
形式为
exp1 ? exp2 : exp3
这里的exp为表达式的缩写
条件操作符的运算方式为
若exp1成立,则计算exp2,且整个式子最终结果就是exp2的结果
若exp1不成立,则计算exp3,且最终结果就是exp3的结果
如图,我们要选出a,b之间较大的数,这样写很繁杂,如果使用条件操作符的话会好很多。
int main()
{
int a=6,b=7,max;
a>b ? max=a :max=b;
printf("%d\n",max)
return 0;
}
如上,同样也能获得较大值,并且代码行数不多,不显繁杂。
逗号操作符
其实就是用逗号隔开的若干个表达式
运算逻辑是从左向右依次计算,最终的结果就是最后一个算式的结果。
下标引用,函数调用和结构成员
[ ]数组的中括号就是这个
( )我们所有使用的函数都要加一个括号,就是这个函数调用操作符
.
→
=========================================================================
第五天的笔记。
谨以纪念逝去的今天。