时间:2024.11.4
一、学习内容
1、算数运算符(加、减、乘、除法和取余)
通用细节:
1.整数计算,结果一定是一个整数
2.小数计算,结果一定是一个小数
3.整数和小数计算,结果一定是一个小数
4.小数直接参与计算,结果有可能不精确
除法的细节:
不能除以0
取余的细节:
1.取余运算的数据必须全部是整数
2.获取余数的正负,是与第一个数字保持一致的
3.不能除以0
#include<stdio.h>
int main() {
//数字直接计算printf("%d\n", 3 + 2);printf("%d\n", 3 - 2);printf("%d\n", 3 * 2);printf("%.2lf\n", 1.1 + 1.01);printf("%.2lf\n", 1.1 - 1.01);printf("%.2lf\n", 1.1 * 1.01);//变量进行运算int a = 3, b = 2;printf("%d\n", a + b);printf("%d\n", a - b);printf("%d\n", a * b);
//除法(/) printf("%d\n", 10/2);
//取余(%)printf("%d\n", 10 % 2);
/*通用细节:1.整数计算,结果一定是一个整数2.小数计算,结果一定是一个小数3.整数和小数计算,结果一定是一个小数4.小数直接参与计算,结果有可能不精确除法的细节:不能除以0取余的细节:1.取余运算的数据必须全部是整数2.获取余数的正负,是与第一个数字保持一致的3.不能除以0 */printf("%d\n", 10 / 3); //3printf("%lf\n", 10 / 3); //0.00000printf("%lf\n", 10.0+3.0);printf("%lf\n", 10/ 3.0);printf("%d\n", 10 / 3.0); //-1431655765,出错printf("%lf\n", 3.333333333333333+6.666666666666666); //10.000000printf("%.20lf\n", 10.0 / 3.0); //3.33333333333333348136printf("%d\n", -10 % 3); //-1printf("%d\n", 10 % -3); //1return 0;
}
2、隐式转换
数字相加,数据类型不一样不能直接运算,需要转成一样的,才能运算
隐式转换(程序自动帮我们完成的):
把一个取值范围小的,转换成取值范围大的(程序自动在前面补0)
short a=10;
int b=a;
short a=10;
short b=20;
c=a+b;//c为int类型
3、强制转换
把一个取值范围大的,赋值给取值范围小的,就需要强制转换,有可能会导致数据发生错误
格式:目标数据类型 变量名=(目标数据类型)被强转的数据;
int b=10;
short i=(short)b;
//错误代码
short s1=10;
short s2=20;
short result =s1+s2;//正确代码
short s1=10;
short s2=20;
short result =(short)(s1+s2);
要求:凡是强制转换,需要自己手动书写
4、字符相加
char c='a';
int i=c+1;
char c=97;
printf("%d\n",c); //97
printf("%c\n",c); //a
ASCII码如果忘记,可以在VS中用代码算
printf("%d\n",'a');
5、算术运算符小结
6、自增自减运算符
int a=10;
a++;
printf("%d\n",a);//11int a=10;
++a;
printf("%d\n",a);//11
7、自增自减运算符扩展
int a=10;
int b=a++; //先用再加,b=10int a=10;
int b=++a; //先加后用,b=11
int a=10;
int b=a++;//b=10
int c=++a;//c=12
printf("%d\n",a);
printf("%d\n",b);
printf("%d\n",c);int i=10;
int j=5;
int k=i++ + ++i - --j - i--;
// 11 + 11 - 4 - 11 = 7 windows
// 10 + 12 - 4 - 12 =6 mac
printf("%d\n",k);//windows:7
前缀优先于后缀
前缀统一自增/自减,再把结果拿出来用
12 +12=24
//后缀统一先用,等整个表达式中变量用完了,再进行自增//mac、Linux:6
//前缀和后缀的优先级是一样的
//从左到右依次计算
//每一个前缀和后缀都是一个独立的个体
int a=10;
int k1= a++ + a++ +a; //10+10+10,a=12
int k2= ++a + ++a +a; //14+14+14,a=14
int k3= ++a + a++ +a; //15+15+15,a=16
int k4= a++ + ++a +a; //17+17+17,a=18printf("%d\n",k1);//30
printf("%d\n",k2);//42
printf("%d\n",k3);//45
printf("%d\n",k4);//51
8、赋值运算符
//+=
//把左边和右边进行相加,结果赋值给左边,对右边没有任何影响
int a=10;
int b=20;
a+=b;
printf("%d\n",a);//30
printf("%d\n",b);//20
9、关系运算符
int a=10;
int b=20;printf("%d\n",a==b); //0
printf("%d\n",a!=b); //1
printf("%d\n",a>b); //0
printf("%d\n",a>=b); //0
printf("%d\n",a<b); //1
printf("%d\n",a<=b); //1
10、逻辑运算符
//1:成立 0:不成立
//&&(与):并且
printf("%d\n",1&&1);//1
printf("%d\n",0&&0);//0
printf("%d\n",1&&0);//0
printf("%d\n",0&&1);//0//||(或):或者
printf("%d\n",1||1);//1
printf("%d\n",0||0);//0
printf("%d\n",1||0);//1
printf("%d\n",0||1);//1//取反!
printf("%d\n",!1);//0
printf("%d\n",!0);//1
11、逻辑运算符的短路效果
int a=0;
printf("%d\n",a>1&&a<10);//0
//只比较了a>1int b=10;
printf("%d\n",b==10||b==20);//1
//只比较了b==10
12、三元运算符
//三目运算符、三目表达式、问号冒号运算符
//格式:关系表达式?表达式1:表达式2;//练习1:获取两个变量的较大值
int a=10;
int b=20;
int c=a>b?a:b;
printf("%d\n",c);//获取三个变量的最大值
int a=10;
int b=30;
int c=20;
int d=a>b?a:b;
int f=c>d?c:d;
printf("%d\n",f);
13、逗号运算符(分隔符)
int a=1,b=2,c=3;
printf("%d %d %d\n",a,b,c);//逗号运算符(分隔符)
int i;
i=3,++i,i++,i+5; //i=10
printf("%d\n",i);//printf("%d\n",3,++i,i++,i+5);错误写法,格式字符串里传递的参数太多
//等价于printf("%d\n",(i=3,++i,i++,i+5));
#include<stdio.h>
int main(){int n;
int a,b,c;
scanf("%d\n",&n);
a=n>=0?n:(-1*n);
b=a%3; //a%=3;
c=b*10; //a*=10;
printf("%d\n",c); //printf("%d\n",a);return 0;
}//用逗号运算符
a=n>=0?n:(-1*n),a%=3,a*=10;
14、运算符的优先级
//练习1
int w=4,x=3,y=2,z=1;
int number=w<x?w:z<y?z:x; //1
printf("%d\n",number);//练习2
int a=3,b=2,c=1;
int max =a>b?(a>c?a:c):(b>c?b:c);
printf("max=%d\n",max);//3//练习3
int x=10,y=20,z=30,h=40,w=50;
int number=x>h?z>w?x>z?x>y?x:y:z:w:w>h?w:h;
//int number=x>h?(z>w?x>z?x>y?x:y:z:w):w>h?w:h;
//int number=x>h?(z>w?x>z?x>y?x:y:z:w):w>h?w:h;//50
printf("%d\n",number);
二、练习
1、练习1-数值拆分
需求:键盘录入一个三位数,将其拆分为个位、十位、百位后,打印在控制台。
#include<stdio.h>
int main() {//数值拆分//键盘录入+数值拆分+输出打印int n, a, b, c;scanf("%d", &n);a = n / 100;b = n / 10 % 10;c = n % 10;printf("%d\n", a);printf("%d\n", b);printf("%d\n", c);return 0;
}
2、练习2-逻辑运算
1)x<=0
2)a!=0
1.
int n;
int a,b;
scanf("%d\n",&n);
a=n/10;
b=n%10;
int c=(a!=7)&&(b!=7);
printf("%d\n",c);2.
int n;
int a,b;
scanf("%d\n",&n);
a=n/10;
b=n%10;
int c=(a!=7)&&(b!=7)&&(n%7!=0);
printf("%d\n",c);