S1E5:常量和宏定义
符号常量:#define 标识符 常量,#为预处理命令,标识符与变量名命名规则相同。
作业收获:
#define F(n) 2*n,则F(3+2)等于8!!
意味着宏定义可含参,且预处理仅改变参数。
S1E6:数据类型
详细:https://blog.csdn.net/aa98865646/article/details/104519028
sizeof()是运算符,不是函数!
对type_name必须使用括号!
①sizeof(object);
②sizeof(type_name);
③sizeof object;
64位系统下int与long int相同(int可省略)
没有128位cpu?因为没有需求,32位升级64位主要是当时地址长度不够。
作业收获:
int范围:-2,147,483,648~2,147,483,647(31次方减一)
unsigned int范围:0 ~ 4,294,967,295(32次方减一)
S1E7:取值范围
计算机如何存放负数?
补码:
正整数的补码是其二进制表示,与原码相同。
负整数的补码是原码除符号位(0正1负)外的所有位取反后加1。
已知一个数的补码,求原码的操作其实就是对该补码再求补码:
⑴如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
⑵如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。
作业收获:
1000 0000表示-128,取反加一成9位数也不算溢出。
S1E8:字符和字符串
char和unsigned char可以拿来存整数。
char 变量名[数量]; [] 是下标运算符
char 变量名{字符,字符,字符};
变量名[索引号] = 字符;
作业收获:
ASCII中大写字母+32变成对应小写字母。
字符串里多余的空间用'\0'填充。y
S1E9:算术运算符
优先级:https://fishc.com.cn/thread-67664-1-2.html
一般输出的结果数据类型不变,但有时会向精度更大修正。
作业收获:
S1E10:关系运算符和逻辑运算符
关系运算符:4种 优先于 2种
关系表达式:逻辑值0假1真
关系运算符 优先于 逻辑运算符:(非!) 优于(与&&) 优于(或||)
短路求值:左边运算已确定结果,则右边不运算
作业收获:
char *name = “FishC” 应该与 char name[] = {‘F’, ‘i’, ‘s’, ‘h’, ‘C’, ‘\0’} 等价。
count != 0 && sum/count 短路求值的使用意义
S1E11:if语句
linux:cp A B:拷贝A到B
作业收获:
流程图规范:
例:
S1E12:switch语句和分支嵌套
①常量表达式,但不能是浮点型! ②switch不会自动跳出!!
输入 “Y回车”,回车会被第二个scanf读取,所以要有getchar()!!
else始终与最近的if匹配,以下的缩进没有意义,仍与第二个if匹配!!
因此要养成大括号括起来的习惯
作业收获:
空语句应用实例
S1E13:while 和do while
getchar 函数从标准输入流(stdin)中获取下一个字符。返回值是获取的字符的ASCII码。
如下可实现回车前多次运行getchar!!常用的连续读入方法!!!
dowhile的存在意义:简化输密码问题
dowhile最后要有分号!!!
作业收获:
atoi-函数(定义于 <stdlib.h> 头文件中),用于将字符串中的值解析为对应的整型数字。
用while (!condition) 取代 while (condition == 0),要去适应。
char 在某些编译系统可能无法存放负数,不要总想着拿char装。
直接拿字符运算,我没想到
这是在做什么?还记得吗
要多想,拿dowhile换whil能不能让代码更健壮!!
S1E14:for语句和循环嵌套
但需要考虑作用域,是局部变量!!
%2d右边开始占位,%-2d左边开始占位。
透彻版
作业收获:
第一个对,第二个错(不停输出输入的第一个字符)
没用dowhile的版本,可读性降低了(复习再试着改回去)
scanf的理解及返回值利用,细节繁杂!!
https://www.runoob.com/note/34793
http://c.biancheng.net/view/160.html
S1E15:break和continue
结束本层循环;结束本次循环
但break还绑定switch
作业收获: