人类的思维 ----> 计算机的思维 ----> 编程语言表达出来
过程描述:输入(准备数据) ---> 计算机处理(处理数据) ---->输出 (输出结果 )
例如:现在有一个任务是在计算机上实现将hello 转换成大写输出
//1.准备数据
定义5个char类型的变量
c1,c2,c3,c4,c5
//2.处理数据
分别将c1,c2,c3,c4,c5
减32
//3.输出结果
打印结果
画个流程图:
转义字符:将反斜杠"\"后面的字符转换成另外的意义。如 "\n" 中的 "n" 不代表字母而作为“换行”符
重点描述一下 '\t'
'\t' 从当前单元格的中此时的位置跳到另一个单元格的起始位置(一个单元格有8列,即一个单元格可放8个字符)
这里直接给出例子
printf("abcdefghk\t#k\n");
//123456781234567812345678 //位置参考
//abcdefghk #k //打印结果
// //'\n'的换行效果
printf("123\t456");
//123456781234567812345678 //位置参考
//123 456 //打印结果
'\b' 光标从当前位置移动到前一列(光标位置代表从这里输入数据)
这里直接给出例子
printf("123 \b456\n"); //打印结果123456
printf("123\b456\n"); //打印结果12456
'\r' 光标从当前位置移动到第一列
这里直接给出例子
printf("123 \r456\n"); //打印结果456
printf("123\r456\n"); //打印结果456
' \\' 代表一个反斜杠字符
例如想打印出 \n
printf("\\n"); //打印结果\n
' \' ' 代表一个单引号字符
例如想打印出 ‘ n ’
printf("\'n\'"); //打印结果 'n',(标准C)
printf("'n'"); //打印结果 'n',(不通用)
' \" ' 代表一个单引号字符
例如想打印出 " n "
printf("\"n\""); //打印结果 "n"
123\t\\9\'\12312\x12 //一共有11个字符
123\t\\9\'\12312\x123 //error 0x123太大
\ddd 八进制代表的字符,大小不能超过ASCII码中的最大值,\xdd同理
常用的运算符:+ - * / %(取余)
表达式:由运算符 和 运算数 构成
eg:1+2
//所有的表达式都是有结果(值)的
//表达式一定是有数据类型的
---------------------------------------------------------------------------
常用运算符说明:
/ 除法
注意:
1.除数不能为0
2.整型数相除 --- (取整数,舍去后边小数)
eg:10/3 得到的结果是 3
涉及隐式类型转换,int / int 得到的结果肯定是int型,所以是3
% 取余
注意:
1.浮点型不能做求余运算
2.求余运算 第二操作数 不能是 0 ,0对任何数求余都是0
3.求余运算的结果的符号 取决于 左操作数的符号
eg:
-10%3 得 -1
-10%-3 得 -1
10%3 得 1
10%-3 得 1
a是任意数
有 a%N 结果 [0~N-1]
eg :
a % 10 结果是 [0~9]
a % 100结果是[0~99]
++ 自加
-- 自减
前置后置在没有参与其他运算时表达结果一样,都是自加一
在参与其他运算时才有先用在加或先加再用,包括参与函数调用时也符合这个规则
int a = 3;
printf("%d",a++); //打印结果是3
注意:
注意:
1. 浮点数也能自增自减
2. ++,--运算数 必须是左值 (变量)
3. 注意 尽量避免
printf("%d%d\n",i,++i);
不要写出这种不确定的代码 ,因为C标准没有做详细规定,所以不同编译环境下结果可能不同
4. 左值 (lvalue -- locationable) //可定位的 --- 能被定位到(有自己得地址)
//左值 --- 能放在 = 左边的这些量(error)
检验一个变量是不是左值,可是试着printf("%p",a); 看是否存在地址,有地址就是左值
5. 右值 非左值
规则:从右向左,必转(在计算过程中)(eg:char ch,short a,计算机自动将变量ch和a转换为int型)
从下到上:低精度类型 与 高精度类型混合运算时 低精度 往 高精度转(低精度直接转高精度,不用一步一步来)
int a = 10;
char ch = 'a';
float f = 3.14;
printf("%f",a + ch + f); //这里用%f来打印原因是存在隐式类型转换
//由于必转所以'a'是int类型
//a+ch+f是混合运算所以是低精度向高精度转,外加运算的优先级与结和性
//((a+ch)+f) --> ((int)+float) --> float
//最终计算的结果是float类型,所以用%f打印
-------------------------------------------------------------------------------------
10+'a'+1.5 — 8765.1234 *'b'
10 + 'a' + 1.5 - (8765.1234 *'b') //优先级
(((10 + 'a') + 1.5) - (8765.1234 *'b') ) //结合性
(((int + int) + double) - (double * int) --> double
必转 必转 必转 必转
--------------------------------------------------------------------------------------
给123.45678得到123.45
错误示范:
float a = 123.45678;
printf("%.2f",c); //打印结果123.46 (%.2f四舍五入保留两位小数)
正确示范:
float a = 123.45678;
int b = a*100; // b = 12345
float c = b/100.0; // c = 123.450 000
printf("%.2f",c); // 打印结果是123.45
eg:设有以下定义,并以赋予了确定的值:
char w; int x; float y; double z;
则表达式w*x+z-y所求得值的数据类型为_____double____
过程:
(((w * x) + z )- y)
char * int
int * int => int
(double - double) //double
强制类型转换,使得表达式结果的类型转换为你想要的类型
int a = 10;
printf("%f",(float)a); //把整形a强制类型转换为float型
---------------------------------------------------------------
printf("%d", 123.456); //err
printf("%d", (int)123.456); //123
----------------------------------------------------------------
float a = 123.45;
printf("%d",(int)a); // 123
printf("%f",a); // 123.450 000
可见强制类型转换只是临时用了一下,用完后回归原类型
----------------------------------------------------------------
% 左右两个都必须是int类型
想对浮点型使用%,可将浮点型强制类型转换为整形,就可以%
----------------------------------------------------------------
i+++++i //贪心原则
从左到右逐个字符的扫描表达式,
看这些字符能否,尽可能多的结合成c的运算符
不能结合,就还是字符本身
i+++++i
i ++ ++ + i
i++ ++ +i
(((i++)++) + i)
1、赋值运算:
=
+=
-=
*=
eg:a += 1 // a = (a + 1)
2、赋值运算表达式的的结果,就是左值获得的值的
int a;
a = 10; //结果 a = 10
int a=b=c=1;
(a=(b=(c=1))) //结果 a = 1,b = 1,c = 1
3、赋值运算的要求:左右两边做到 类型匹配
4、不同类型的数据间混合赋值
int = double //高精度给低精度赋值 精度丢失 (损失)
// 例如:int a = 3.14; 此时打印出来a的结果是3
double = int //低精度给高精度,没啥影响 ,单纯的就是数据变为double型
// 例如:double d = 3; 此时打印出来d的结果是3.000000
5、同类型不同长度的数据混合赋值
int
short
long
long long
short = int // 长类型数据 给到 短类型 -- 高位截断
int = short // 短类型 给 长类型 // 无符号 短类型 此时 补码高数据位补 0
// 有符号 短类型 补码高数据位 符号位扩展 (十六进制,八进制原码反码补码相同)
1、形式:
表达式1,表达式2, ...,表达式n
2、逗号表达式的结果:
是最后一个表达式的结果
3、逗号运算: 顺序求值运算符