今日学习到的内容:
算术运算:
1、取模的正负取决与取模数的正负
2、取模运算符的操作只能是整数
优先级结合方向
int a =(10 * 2) + (3 / 2)
优先级:优先级高的操作符他们两遍操作数优先于这个操作符进行结合成为一个整数并没计算
+ 运算符会先计算左边的表达式
结合方向:当优先级相同时, 从那边开始计算
算术运算符的结合方向是从左到右的。
自动转换类型 (类型提升):当表示范围小的数与表示范围大的类型进行计算时,小类型会自动转换为范围大的类型
当两个数据类型的数进行运算时,他们运算出来的结果还是什么类型
double d = 10 / 4; // 2.000000;
double d = 10 / 4.0; // 2.500000;
double d = (double)10 / 4;强制类型转换 d = (double)a / b;
赋值运算符:
1、把等号右边的数值防盗左边的变量中,同时他做一个表达式本身有值,他的值就是右边的那个数
2、结合方向:右往左
复合复制运算符 += -= *= /= %=
所有赋值运算符的优先级都是小于算术运算符的
赋值运算符在所有运算符中除了逗号运算符以外优先级最低
自增自减运算符
1、无论++在前还是++在后本身都会自增1;
++a // 等价于 a = a +1; a本身是会自增1, 然后它的返回值(结果)是原来的a + 1;
a++ // 等加于 a = a +1; a本身是会自增1, 然后它的返回值(结果)是原来的a的值;
--a // 等价于 a = a -1,a本身都会自减1,他的返回值(结果)是原来的a-1;
a-- // 等价于 a = a -1,a本身都会自减1,他的返回值(结果)是原来的a;
b = a++ + a++;// 2 + 3 = 5;
b = ++a + a++;// 5 + 5 = 10;
b = ++a + ++a;// 7 + 8 = 15;
b = a++ + ++a;// 8 + 10 = 18;
int a = 10;
b = a-- + a--;// 10 + 9 =19;
b = --a + --a;// 7 + 6 = 13;
b = --a + a--;// 5 + 5 = 10;
sizeof运算符:用来计算常量、变量,以及数据类型(指的是这种数据类型的变量或常量)所占用的存储空间。
1、sizeof是运算符不是函数,当它用在常量上面可以省略小括号
sizeof 常量 或sizeof(常量)
2、当sizeof作用在变量上
sizeof(常量)或sizeof常量
3、sizeof作用在数据类型,表示这个中数据类型的常量,或者变量所占用的存储空间
小括号不可以省略、类型本身是不占用空间的,但是这种类型的数据占用空间
逗号运算符
1、在c中所有表达式都有返回值(结果)
2、逗号运算符结合方向是从左到右
3、返回值:最后一个表达式的值
int a = 10;intb = 2; int result = (a += 2, b +4, 4 + a); result = 16;
关系运算符
< > = <= == >=
1、小括号是在所有运算符中最高的
2、当我们不确定某些运算符的优先级时,用()来明确优先级
3、赋值运算优先级 < 比较运算符优先级 < 算术运算符优先级
4、比较运算符的结合性:左到右
逻辑运算符
&&与:
1、只要有一个表达时为假,那么整个表达式结果为假:一假为假
2、如果左边的表达式为假,右边的表达式不参与运算
3、结和性:左到右
逻辑||:
1、只要有一个表达式为真,那么整个表达式结果为真:一真为真
2、如果左边表达式为真,右边的表达式不参与运算
3、优先级高的先结合,不是运算
!非
1、真变假,假变真
2、右到左
3、他的优先级高于比较运算符和算术运算符的优先级
三目运算符
条件表达式:由关系运算符或逻辑表达式构成的表达式
条件表达式 ? 结果1:结果2
求两个数中最大值:num1 > num2 ? num1 : num2;
求三个数的最大值,先求出max,在用max喝num3比较
在c语言总所有数字都有真假性,所有非0的数都为真,只有0为假
&&和||的优先级小于关系运算符,大雨赋值运算符
条件表达式if
if(条件表达式) {
语句;
}
1、当变量与常量进行等于活不等于判断的时候,一般会把常量写在前面
2、只有一个分号的语句时一个空语句,空语句也是语句
3、在if小括号后面不要自己写分号
4、if代码块中定义变量不可以在外面代码块中访问
5、作用域紊乱,如果想要if语句中变量, 那么就必须加大括号
6、if语句必须连接在一起,不可以有无头的if
交换位置的理解
假设num1 雪碧 num2 可乐 temp 空瓶
1、将雪碧倒入空瓶子中
2、把可乐倒入雪碧的瓶子中
3、将空瓶中的雪碧倒入可乐瓶中
switch:
sitch(表达试)
{
case 常量:
语句;
语句;
break;
。。
default;
语句;
break;
1、当switch与一个case匹配了, 那么后面的大括号才会结束
2、case后面职能是一个常量或者常量表达式
3、switch后面的小括号中只能是整形表达式
4、当莫个变量只有及格固定的取值的时候使用switch会跟更加简洁
5、如果是区间的话[-无穷,1],用if
6、在case后面的语句中不能直接定义变量,如果要定义变量,必须在后面加上大括号,来明确定义变量的作用
case 0:
{
int num = 0;
}
在c中获得随机数:
1)arc4Random()比较精确不需要生成随机种子
通过arc4random获取0-(x-1)之间的整数
int value = arc4random() % x;
2)CCRANDOM_0_1 cocos2d中使用,范围是[0, 1];
float random = CCRANDOM_0_1()*5 //[0,5]
3)random()需要初始化时设置种子
srandom((unsigned int)time(time_t *)NULL);// 初始化时,设置下种子就好了
4)arc4random_uniform
在开发ios游戏过程中,一致觉得arc4random产生的随机数有问题,产生的数值不够平衡。惊天终于查到还有一个arc4random_uniform函数,也是c标准库里面的。会产生均衡的随机数。
int random = arc4random_uniform(3);
销售系数的概念
/*
已知某公司员工的工资底薪为500,员工销售的软件金额与提成方式如下:
销售额 ≤2000 没有提成
2000 < 销售额 ≤ 5000 提成8%
5000 < 销售额 ≤ 10000 提成10%
销售额 ≥ 10000 提成12%
利用switch
利用switch使程序更加的简洁 如果用if if else使得程序看起来很重合
*/
int main()
{
double salary = 500;
double sales;
printf("请输入员工的销售额");
scanf("%lf", &sales);
// 计算销售系数
int k;
if (sales % 1000 == 0) {
k = sales / 1000;
} else {
k = sales / 1000 + 1;
}
// 销售软件提成方式
switch (k)
{
case 0:
case 1:
case 2:
break;
case 3:
case 4:
case 5:
salary += sales * 0.8;
break;
case 6:
case 7:
case 8:
case 9:
case 10:
salary += sales * 0.1;
break;
default:
salary += sales * 0.12;
break;
}
printf("员工这个月工资为%.3lf", salary);
return 0;
}