(内容为学习笔记,如有错误,还望指正,如有遗漏,还望补充)
1. 运算符
1)条件运算符
结构为 表达式?操作数1:操作数2 ,其中'?'前的表达式的结果决定了这个运算符的返回值,表达式为真,返回操作数1,反之则返回操作数2。如下所示,a>b为真,输出c的值就为a,即10。
int main()
{
int a = 10,b = 1,c = 0;
c = a>b?a:b;
printf("%d\n",c); //输出10,条件运算符中a>b为真,返回a的值赋值给c
return 0;
}
条件运算符的优点非常明显,简单明了地判断表达式的真假并反馈值,不用写if语句进行判断,如下代码。
if(a > b) printf("%d\n",a);
else printf("%d\n",b);
//上下两式就结果来看是没有区别的
printf("%d\n",a>b?a:b);
2)sizeof()运算符
作用: 求变量或者类型占内存空间的大小。
操作对象: 变量名、 类型名
运算结果:整数
内存的大小以字节(byte)为单位,以下是内存单位的关系。其中1位二进制位占用1比特单位,即1bit。举例char类型,即字符型变量,其占用内存位1byte,也就是8bit,如字母a,其asiic码为97,在内存中二进制为0110 0001,占用8个二进制位,1byte。
1byte ==8bit(8个二进制位)
1kb == 1024byte
1mb ==1024kb
1gb ==1024mb
1tb ==1024gb
以下是各种常用变量类型占用内存的大小,单位byte。
字符型 char 1
短整型 short 2
整形 int 4
单精度浮点型 float 4
长整型 long 4
指针类型 4/8 (32位系统中为4,64位系统中位8)
双精度浮点型 double 8
长双精度浮点型 long double 8
3)自增自减运算符
++和--,两者都需要分表达式前和表达式后的用法,以下举例说明。自增自减在变量后时,先进行其他操作,再对变量进行增减操作,自增自减在变量前时,先增减在进行其他操作。
//b=6
printf("%d\n",b++); //输出6,此时b为7
printf("%d\n",b--); //输出7,此时b为6
printf("%d\n",++b); //输出7,此时b为7
printf("%d\n",--b); //输出6,此时b为6
4)赋值运算符
=
5)运算符优先级
6)逗号运算符
#include <stdio.h>
int main()
{
int a = (1,2,3,4,5,6,7,8,9);//(1,2,3,4,5,6,7,8,9)是一个逗号表达式,因为逗号的优先级最低,比赋值运算符更低,所有将逗号表达式用()包含。
printf("%d\n", a);//9
return 0;
}
2.if语句
1)if(判断条件){函数体}
条件判断为真时,执行后方函数体,如下。
//a=10,b=7
if(a > b)
{
printf("%d\n",a);
}//执行输出a的值10
2)if嵌套
if判断为真后执行的函数体中也同样可以包含if,如下,使用时需要注意判断条件中的变量可能在运行过程中发生变化。
//a=10,b=7,c=5
if(a > b)
{
if(b > c)
{
printf("%d\n",c);
}
}//输出c的值5
3)if-else分支选择结构
举例说明如下,非常经典的根据分数判定评级,使用if-else分支选择结构来判断划分,if后的else表示在if判断为假之后需要执行的语句,当然在else后同样可以接if判断语句。
if(a < 0 || a >100) printf("error\n");//范围外的分数报错
else if(a < 60) printf("E \n");
else if(a < 70) printf("D \n");
else if(a < 80) printf("C \n");
else if(a < 90) printf("B \n");
else printf("A \n");
3.switch-case结构
switch-case结构是非常经典的分支选择结构,表达式是判断的对象,case后的值则是表达式可能存在的值,以及出现这个值之后需要执行的操作。
注意case的执行语句后没有break的话,会一直往下执行下方所有case的执行语句直到执行完所有语句或遇到break为止。
switch ( 表达式 )//表达式的运算结果必须是整数 char short int都可以
{//{}结构部分
case 值1://case后面的值必须是整型常量或者字符型常量,这个值是上面表达式可能产生的一个结果
//注意case后面是 :
//case的作用,当表达式的运行结果匹配到case后面的常量时,会从这个case的位置开始执行代码
//case可以写无数个,不能有值相同的case
//可以理解为:case就是switch结构中代码执行的起点!
语句1;
case 值2:
语句2;
break;//使用break可以中断执行
default://default当表达式的结果没有匹配到任何case的值时,从default开始执行代码,default可以根据实 //际的逻辑需求省略。
语句3;
}
小知识:
1)sizeof()求出的字符串长度包含'\0'
2)尝试理解“a+++b+++c++”,其含义是(a++)+(b++)+(c++),若a,b,c分别为1,2,3,则式子运算结果为1+2+3=6,a,b,c的值各自增1为2,3,4。自增自减需要注意其结果和对变量本身值的改变。