//
// main.c
// Day4
//
P60-61.算术运算和算术表达式。
1.算术运算符,是来做算术运算的。
+ 求数学和
- 求数学差
* 求数学积
/ 求数学商
% 求模运算符(求余数)
2.算术表达式
由算术运算符链接起来的式子,就叫算术表达式。
int num = 10 + 10;
先声明int类型的变量num,然后再计算10+10这个表达式的结果,然后将这个表达式的结果赋值给num变量。
3.分解每一种算术运算符:
3.1 + 加法运算符 作用:求左右两边的数据的数学和。
参与算术表达式的数据叫做操作数,操作数可以是变量。
3.2 - 减法运算符
3.3 * 乘法运算符
3.4 / 除法运算符
int res = 10 / 4 记住:这个算术表达式的操作数都是int类型的,所以这个表达式的结果是2,不是2.5 所以正确的方式l应该是使用int变量来保存结果
double res = 10 / 4 先声明double类型的变量res也不对,因为int的10除以int的4 结果还是整数型的2 他讲结果赋值给res 会自动转换成2.0 不是2.5
如果要得到正确结果。
a.将任1操作数的类型声明成double。
double num1 = 10;
int num2 = 4;
double res = num1 / num2;
b.将左侧操作数乘以1.0变为double
int num1 = 10;
int num2 = 4;
double res = num1 * 1.0 / num2;
3.5 % 求模运算符(求余数)
10 % 3 的结果就是10除以3的余数
int num1 = 10;
int num2 = 3;
printf("%d\n",num1 % num2);
应用场景比较多,能做的事情也很多
a. 可以判断1个数是不是另外1个数的倍数。
b. 可以判断1个数是不是能被另外1个数整除。
注意:
a.求模运算.实型数据无法参与求模运算,因为没有意义。
b.m % n 的结果一定是在 0 至(n-1)之间的.
4.算术表达式的结果的类型。
1.算术表达式都有一个结果,一般处理方式是声明1个变量将这个表达式的结果储存起来。
用来存储表达式的结果的变量应该声明对应类型的变量。
2.如果参与算术表达式的操作数的类型都是一致的,那么这个算术表达式的结果的类型就是这个类型。
3.如果参与算术表达式的操作数的类型不一致,z那么这个算数表达式的结果的类型就是范围最大的那个数。
int < float < double
小练习:
某超市衣服120.88一件,裤子89.9一条。 让顾客输入自己买的衣服数量和裤子数量,
1). 显示他应该付款多少钱。
2). 如果商家打88折 再显示打折以后应该付款多少钱
做题目做项目都要遵循:
1.先搞清楚需求。
2.分析。
a.先把自己当做普通人,遇到这样的问题该如何解决。
b.写注释,思路和步骤使用中文写出来。
c.再根据思路注释写代码。
#include <stdio.h>
int main(int argc, const char * argv[])
{
double yiFuPrice = 120.88;
double kuZiPrice = 89.9;
int yiFuCount = 0 ,kuZiCount = 0;
printf("请输入要购买的衣服 裤子的数量:");
scanf("%d%d",&yiFuCount,&kuZiCount);
double money = yiFuPrice * yiFuCount + kuZiPrice * kuZiCount;
double youHuiMoney= money * .88;
printf("【总 价】:%.2lf\n",money);
printf("【优惠后总价】:%.2lf\n",youHuiMoney);
}
5.算术运算符的优先级.
先乘除模,再加减,如果同级别,就从左到右依次计算。
使用小括号可以改变运算的优先级。如果有小括号,就先算括号里的。
6.char数据.
char类型的数据可以参与算术运算。
当算术表达式中的操作数是一个char类型的数据的时候,会先将这个char数据的ASCII码取出来代替。然后再参与运算。
所以,如果操作数是一个char类型的,实际它是一个int类型的数据在参与运算。
例:
char ch = 'a'; //a的ascii码=97
int num = 10 ;
int sum = ch + num;
printf("sum = %d\n", sum);
输出结果: sum = 107
要将一个小写char字母转为大写字母,就 - 32 ,如果大写转小写 就 +32 :
int main(int argc, const char * argv[])
{
char ch = 'x';
char ch2 = ch - 32 ; //小写转大写. 大写转小写就是ch+32
printf("ch = %c\n", ch2);
return 0;
}
P64-复合赋值运算符。
1.要将一个变量的值再自身的基础上增加指定的数。
int num = 10;
num = num +2; //num=12
2.让一个变量的值再资深的基础上增加指定的数的简写方式。
使用复合运算符 : +=
int num =10;
num += 2; //完全等价于 num = num + 2
3.其他复合运算符
-= num -= 2 //完全等价于 num = num - 2
*= num *= 2 //完全等价于 num = num * 2
/= num /= 2 //完全等价于 num = num / 2
%= num %= 2 //完全等价于 num = num % 2
4.如果以后你要改变1个变量的值,是在资深的基础之上做改变 那么久可以使用复合赋值运算符
P65-自增自减运算符。
1.自增运算符。
++
2.自增表达式。
2.1 前自增表达式
int num = 1;
++num;
2.2 后自增表达式
int num = 1;
num++;
3.3.无论是前自增表达式,还是后自增表达式,都是将自身的值+1.
3.自增表达式是1个表达式,既然是表达式,那么必然就有一个结果,那么我们就用一个变量吧这个表达式的结果存储起来。
3.1 后自增表达式的结果的计算方式:
先将自身的值取出来,作为后自增表达式的结果,然后再讲自身的值+1;
int i = 1;
int j = i++; //j = 1 先赋值1,然后再将i的值+1
3.2 前自增表达式的结果的计算方式:
先将自身的值+1,然后在将自身的值取出来作为表达式的结果。
int i = 1;
int j = ++i; //j = 2 先将i的值+1 然后再赋值。
4.自增运算符的优先级比算术运算符的优先级要高。
int i = 1;
int j = 2;
int k =i++ + ++j + i++;
1/2 + 3/3 + 2/3
1 + 3 + 2
printf("i = %d\n", i); //3
printf("j = %d\n", j); //3
printf("k = %d\n", k); //6
return 0;
int i = 1;
int j = i++ + ++i + i++ + ++i + i++;
// 1/2 + 3/3 + 3/4 +5/5 + 5/6
printf("i = %d\n", i); //i=6
printf("j = %d\n", j); //j=17
5.自减如是。
P66 - 逗号表达式:
1.逗号在C语言中也是1个运算符。
2.逗号表达式:
就是有逗号连接起来的1个式子。
用逗号将其他的表达式连起来,就叫逗号表达式。
语法格式:
表达式1,表达式2,表达式3,表达式4,......表达式n;
3.逗号表达式的执行步骤和结果。
从头到尾去执行每个表达式,最后1个子表达式的结果就是整个逗号表达式的结果,
int i = 0,j = 1,k = 2;
int num =( i + 3 , j + 3, k + 3, i + k );
printf("i = %d\n", i);//i = 0
printf("j = %d\n", j);//j = 1
printf("k = %d\n", k);//K = 2
printf("num = %d\n",num);//num = 2
4.逗号表达式的目的,并不是想要前面表达式的结果,只是让前面表达式去执行,要最后一个表达式的结果。
前面的表达式只是想要其执行,不关心结果,因为前面的表达式一旦执行就会影响最后一个表达式的结果。
而我们关心的时候,前面的表达式执行完后,最后一个表达式的结果是多少。
int i = 0,j = 1,k = 2;
int num =( i++ , j++ , k++ , i + j + k );
// 0->1 1->2 2->3
printf("i = %d\n", i);//i = 1
printf("j = %d\n", j);//j = 2
printf("k = %d\n", k);//K = 3
printf("num = %d\n",num);//num = 6
int num =( i++ , j++ , k++ , i + j + k );
效果等效:
i++;
j++;
k++;
int num = i + j + k;