C语言学习笔记2【C primer plus】

第3章 数据和C

  • 关键字:int short long unsigned char float double _Bool _Complex _Imaginary
  • 运算符:sizeof()
  • 函数:scanf
  • 整型和浮点型的区别
  • 书写整型和浮点型的常数、声明这些类型的变量
  • 使用printf()和scanf()读写不同类型的值

*error:程序中有错误,不能编译

warming:代码有效,但是可能不是程序员想要的,不终止编译。

1.有符号整型 int :整数,储存int要用一个自然字长的内存。

        unsigned int:%u用于计数,因为技术不用负数,而且可以表示更大的正数。

        

//声明
int age;
int age,weight;
//赋值
age = 100;
scanf("%d",&age)
//初始化(initiative):为变量赋一个初始值,可以直接在声明中完成。
int age = 100;
int age = 100, weight = 60;

//为变量创建和标记储存空间,并指定初始值。

2.        浮点数类型 float:可以储存带小数点的数字。

        %f:打印十进制计数法的float或double类型浮点数。%e打印指数计数法的浮点数。转换说明,指定printf()应用什么格式来显示一个值,要确保转换说明的数量和打印值的数量相同,编译器不会捕获这个错误。%.2f指定输出的浮点数只显示小数点后面两位。使用 &weight 告诉scanf()把输入的值赋给 weight 的变量,只用&表明找到 weight 的地址。计算机把浮点数分为指数部分和小数部分来表示,而且分开储存。

  1. 整数没有小数部分、浮点数有。
  2. 浮点数可以表示的范围比小数大。
  3. 对于一些算数运算、浮点数损失的精读大
  4. 浮点数只是实际值的近似值。
  5. 浮点数比整数运算慢。

浮点数常量:有符号的数字(包括小数点),后面紧跟e\E,再跟一个有符号数表示10的指数。正号可以省略,可以没有小数点或者指数部分,不能都没有。不要在浮点数中间加空格。数字后面加f/F覆盖默认的double。

  • 位(bit)0\1
  • 字节(byte)一字节8位,可以表示(2^8有256中01组合)0~255的整数或一组数组。
  • 字(word)设计计算机时给定的自然储存单位。16/32/64。字长越大,数据转移越快,允许的访问内存越多。

3.     char:储存字符,其实储存的是字符对应的ASCII码值,也就是数字。被定义为8位的储存单元。

        把字符常量初始化为字母a:

  •  用单引号 '  '括起来的单个字符被成为字符常量(character constant),编译器一旦发现'A'就会将其转换为相应的ASCII值。单引号不可缺少。
  • 字符其实是以数字形式储存的,也可以直接输数字,但这不好。char grade = 65;。

单引号只适用于字符、数字、标点符号。

双引号中的字符序列被称为字符串(string),一个字符串是一个参数。

3.     数据:承载信息的数字或字符。

        常量(constant):在使用之间已经预先设定好,在整个程序的运行中没有变化。

        变量(variable):在程序运行期间可能会改变或被赋值。

        常量数据:编译器通过用户的书写形式来识别类型(42、42.00)

        变量:要在声明时指定其数据类型。

#define ADJUST 7.31
const double SCALE = 0.333;

#define 指令创建符号常量;

const 限定符创建在程序运行过程中不可更改的变量

while循环:

  1. 当程序第一次到达while循环的时候,会检查圆括号中的条件是否为真,若为真,程序进入块(block)中继续执行,执行完语句之后,程序返回while入口检查条件,循环知道条件为假时,控制紧转到紧跟着while循环后面的一条语句。
  2. scanf()为变量sec获取一个新值,只要该值符合条件,循环就继续。
  3. 计数器来控制循环。2、3两种每次循环都会修改被测试的变量值。

赋值运算符 = 

  1. = 左侧(对象定位值)是一个变量名,右侧是赋给该变量的值,赋值行为从右向左。、
  2. 赋值语句的目的是把值储存到内存位置上,用于储存值的数据区域称为数据对象(dataobject),标识对象可以通过变量名、指定数组的元素、结构的成员、指针表达式(指针用于指向一个存储位置)。
  3. 左值(lvalue):用于标识特定数据对象的名称或表达式,即左值是用于标识或定位特定存储位置的标签。
  4. 可修改的左值(modifiable lvalue)(对象定位值(object locator value))标记那些可以赋值的实体、用于表示可修改的对象。(const限定符的创建的变量不可修改,它指定一个对象、引用一个内存中的地址,但是不能运用在=的左侧。)
  5. 右值(rvalue)(表达式的值(value of an expression)):可以是常量、变量或其他可求值的表达式(如函数调用)int a=2,b=4;const int c=6;d=a+b;  a,b是可修改的左值(都标识了一个可被赋值的对象),(a+b)是右值(不能表示特定内存位置,也不能给它赋值)、是一个临时值,在计算完就被丢弃。
  6. 赋值运算符=把一个值赋给它左侧的量(如果是左值),关系相等运算符==检查它左右两侧的值是否相等,如果它左侧的值是个常量,不会改变左侧的量。可以这样

canoes = 5;                          //把5赋值给canoes

canoes == 5;                        //检查canoes的值是否为5

5 = conoes;                      // 编译器会报错

5 == canoes                        //检查

除法运算符 \ 

  1. 浮点数除法的结果是浮点数、整数除法的结果是整数,整数除法结果的小数部分会被丢弃(截断(truncation))
  2. 趋零截断。

sizeof运算符和size_t类型

  1. sizeof运算符以字节为单位返回运算对象的大小。
  2. 运算对象可以是具体的数据对象或类型,类型必须用圆括号括起来:intsize=sizeof(int);。
  3. typedef unsigned int size_t    %u。

求模运算符(modulus operator)%

  1. 给出左侧整数除以右侧整数的余数。
  2. 只能运用于整数、不能运用于浮点数。
  3. 趋零截断:第一个运算对象是负数,那么求值结果就是负数、如果第一个运算对象是正数、那么求值结果就是正数。

递增运算符(increment operator)++\递减运算符(decrement operator)--

  1. ++a前缀模式:  a_pre=++a是a递增之后的值。
  2. a++后缀模式:a_post=a++是a递增之前的值。
  3. 单独使用时哪一种都没关系,当是复杂表达式的一部分时,使用前缀和后缀的效果不同。
  4. (while(++a<10)   ->  ((a=a+1)<10 ) 先递增,再比较,最后循环。相当于到9)。
  5. (while(a++<10)   ->  ( ( a = a+1 < 10)  (<的优先级比=高)先比较,再递增,最后赋值。相当于到10)。
  6. while循环条件中的变量递增过程:简洁、效率更高、把控制循环的两个过程集中在一个地方可以判断是否循环、并改变待测试的元素。防止忘记更新循环。

语句(statement)和表达式(expression)

  • 表达式(expression)由运算符和运算对象组成,最简单的一个表达式是一个单独的运算对象。
  • 每个表达式都有一个值:1.=的表达式的值与运算符左侧的值相同。2.条件为真,值为1,条件为假,值为0。
  • 语句(statement)是C程序的基本建构快,一条语句相当于一条完整的计算机,语句可以改变值或调用函数。
  • 语句大部分以分号结尾,C把末尾加上一个分号的表达式都看作是一条语句。声明不是表达式语句,如果删除声明后面的分号,剩下的部分也不是一个表达式,也没有值。
  • 最小的语句是空语句(null statement):  ; 它什么也不做。
  • 赋值表达式语句:为变量分配一个值,分号结尾。
  • 函数表达式语句:函数调用。

副作用(side effect)

  1. 副作用对象是对数据对象或文件的修改。
  2. a = 50;  我们的主要目的是为变量赋值,这是C语言的副作用,C语言的主要目的是对表达式求值,副作用是把a的值改为50。

序列点(sequence point)

  1. 序列点是程序执行的点,在该点上,所有的副作用都在进行下一步之前发生,语句中的分号标记了一个序列点,另外,一些运算符也有序列点,任何一个完整表达式的结束也是一个序列点。完整表达式(full  expression):指这个表达式不是另一个更大表达式的子表达式(表达式语句中的表达式和while语句中作为测试条件的表达式)

带参数的函数

  • 程序开头的函数原型(prototype)即是函数的声明,描述了函数的返回值和参数。
  • 实参(argument)函数调用传递、提供的值。
  • 形参(parameter)声明函数时创建的变量。
  • 变量名是函数私有的,在函数中定义的函数不会和别处的相同名称发生冲突。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值