C语言基础
(1)算术运算:
+(加)
-(减)
* (乘)//区分数学上符号 和 c语言中的符号
/(除)
注:
1.除数不能为 0
2.两个整型数相除,结果相当于整除
%(取余)
注:
1.操作 2. 不能是 0 //除数不能为 0
eg(一些应用):
1,判断奇数 偶数?
%2 ==> 1 奇数
0 偶数
2,%N
结果 [0,N-1]
3,求余的符号(正负)
取决于 左操作数
(2)强制类型转换:
可以强制转换某些数据的类型
(类型)运算数 //将运算数对应的类型 强转 成 括号中的类型
注意:
强制类型转换,对运算数本身不会产生影响
(3)++: //自增运算 每次加1
++i //先++ ,后用
i++ //先用,后++
注:
1. 先加后用,或者是先用后加,这个规则,只有在参与到别的运算中时,发挥作用。
2. 单独使用时,前置加加 和 后置加加,效果是一样的。
3. 运算数(i),必须是个左值
(const int a;//这里的a本身是左值,但是不能做++a,a++,原因是const修饰后,a成了只读变量)
lvalue //left value --- 左值
左值:
int a;
a = 10; // 能放在 = 左边的值,叫做左值 --- 变量
右值:
只能放在等号右边 --- 常量
lvalue (locationable value) //可定位的 ---可以获取到它的地址
&a //& 表示取地址 ---获取a对应的内存单元的编号(地址)
现在左值 和 右值:
能被定位到的 左值 --- 变量
不能被定位到的右值 --- 常量 及 表达式
(4)运算符优先级和结合性:
1.优先级
一定是先结合的
优先级使用,是在不同级别的运算符混合运算时
i++-3 => (i++)-3
2.结合性
同一优先级
//贪心原则:
从左到右逐个字符扫描,尽可能多的结合成c的运算符
i ++ ++ + i
((i++)++) + i
(5)赋值运算符: =
1, int a;
a = 10 //赋值运算
int a = 10; //这个一般不当作赋值运算,只当作是初始化
不同精度类型间的混合赋值
2,//长类型 <=>短类型
//整型
1. 长类型=>短类型 此时 高位截断
2. 短类型=>长类型
有符号 短类型 则 作符号位扩展
无符号 短类型 则 高位 补0
(6)高精度 和 低精度
float f = 1.23;
int a = f;
浮点数 给到 整型变量中 ,此时 精度丢失(小数丢失)
+= // a += 1 <=> a = a + 1
-= *= /= %= (同理)
(7)逗号运算:
连接多个表达式
表达式1,表达式2, ... ,表达式n
运算规则:
顺序求值运算
依次,求解表达式1到n
逗号表达式的结果是: 最后一个表达式求值的结果
(8)输入输出
输入 ---->内存---->输出
函数:
单个字符
putchar getchar
格式化操作函数
prinf scanf
字符串操作 (*) //数组
puts / gets
单个字符:
putchar()
int putchar(int c); //形参 --形式参数 ---本身是一个变量
功能:
输出一个字符
参数:
@c 要输出的 字符的 ascii码值
返回值:
成功 返回输出了的字符的 ASCII的值
失败 EOF (实际是-1)
eg(例子):
char c = 'a';
putchar(c); //输出c中ascii码值对应的字符
int getchar(void);
功能:
从键盘获取一个字符
参数:
void 表示空类型,在函数形参表示不许参数
返回值:
成功 返回读到了的字符的ASCII码值
失败 -1
eg(例子):
int ret;
ret = getchar(); //ret将保存 getchar从键盘获得到的字符的ASCII码值
格式化操作函数:
printf //格式化输出函数
int printf(const char *format, ...); //... 表示可变参数 --参数的数量可以变
int printf(格式控制字符串,输出列表);
printf("a = %d\n",a);
格式控制字符串:
占位符(%d) //将来要被 后面的参数值 替换掉 --格式转换 普通字符 //原样输出
注意:
1.一个占位符,只能匹配一个参数
2.占位符匹配,是按顺序依次匹配的。