知识屋:更实用的电脑技术知识网站
所在位置:首页 > 教育

C premier plus 6 (前六章)笔记和复习总结

发表时间:2022-03-26来源:网络

哈喽!写在前面的话:为了之后进一步学习,在家决定把C语言重新复习一遍。参考书是C premier plus 第六版。

目录

第一章 概览第二章 C语言概述第三(四) 章 数据和C、格式化输入输出第五章 运算符、表达式和语句第六章 C控制语句:循环

第一章 概览

1.1 C的优点
自顶向下编程、可靠易懂、高效、可移植、较为灵活、面向编程人员

1.2 使用C语言七个步骤

1.定义程序目标 2.设计程序 3.编写代码 4.编译 // 由C编译器来完成。(编译器的是指是一段程序,调用运行期linker将C库中函数加入代码中,并转换为可执行代码) 5.运行程序 6.测试和调试程序 //调试的过程成为debugging 7.维护和修改 //请尽量增添注释

1.3 目前的C环境
UNIX、Linux、MS-DOS、Windows、Macintosh OS

1.4 C中的文件及后缀

文件名解释hello.chello是一个基本名,.c 是一个扩展名。代表该文件是一个源文件hello.obj目标代码(由机器语言指令组成, 是经编译器编译过的代码)hello.exe可执行代码(由机器语言指令组成,是一经过编译、链接后的机器能读懂的代码)

编译器Compiler的任务:检查语法和逻辑,将程序转化为可执行程序

链接器Linker 的任务:把目标文件和库文件链接成可执行文件

1.5 C标准

C89→C99→C11 标准1994年,C99基于C精神做出了一些更改。值得一提的是,目前大多数编译器没有完全实现所有C99的修改,只有在修改编译器的设置之后,才能看到一些C99的特性。2007年,委员会出于对当前编程安全的担忧,不那么强调“信任程序员”目标了。使得C99的一些特性成为 C11的可选项。

第二章 C语言概述

2.1一个C语言简单例子

/*simple one*/ //注释 ,注释有两种方式 //此处写注释的作用:给出了文件名和程序的目的,是一种程序说明,在后续的使用中比较便于管理 /* 方式一 注释块 */ //方式二 注释行 #include //预处理,作用相当于在文件中键入了文件stdio.h #define PI 3.14159 //预处理,末尾不用加分号,因为这是一种由预处理器处理的替换机制。且PI要大写,为了提高程序的可读性。 //#include不是C语言的语句,#符号表明这一行是在编译器接手之前由C预处理器处理的语句,是一种预处理器指令 //stdio.h文件包含了有个输入输出的函数,以供编译器使用。出现在文件顶部,成为头文件。C通常要带很多头文件。 int main(viod) //函数名,int表示返回整数,void表示函数不接受参数 //函数从main开始执行 //主函数的的返回值是返回给OS //或许会有其他版本的比如: main()、int main()、void main()具体解释见下文。 { //函数体的开始 int num; //声明语句,声明一个变量,它的类型是整型的 num = 1; //赋值 printf(" this is a easy simple"); //函数调用,使用了printf()函数,函数名中的f提醒用户,这是一种格式化打印函数。其中的内容作为实参传入。 printf(" \n"); //函数调用,\n表示另起一行,打印换行符的效果与在键盘按下Enter键相同 printf("the value of num is %d \n", num); //函数调用,%d相当于是一个占位符,其作用是指明输出num值的位置,%提醒 程序,要在该处打印一个变量 return 0; //return语句是返回语句,给调用它的主体返回一个值 }

解释1:
!main(){…} 形式:不写返回值类型也不写参数列表,这是C90的风格。

1.不写返回值类型时 表示程序返回int型

2.不写参数列表时 表示参数类型和个数没有明确指出。

这种写法会产生一些bug,但目前很多编译器还是支持的

标准的:int main(int argc, char *argv[]) 或 int main(void) 其中 int
argc, char *argv[] 是系统参数,一般不使用系统参数时,声明使用后者。
除了这两种形式之外,以其它形式定义main函数都是错误的或不可移植的。

如果遗漏 main()函数中的 return 语句,程序在运行至最外面的右花括号
(})时会返回0。因此,可以省略main()函数末尾的return语句。但是,不要 在其他有返回值的函数中漏掉它。

2.2变量

起名:大小写字母、数字、下划线( 要注意程序的可读性,选取有意义的函数名和注释。)

声明:一条声明中可以声明一个、两个或多个变量。声明为变量创建和标记存储空间,并为其指定初始值

2.3关键字(总表)

关键字是C语言的词汇。

!粗体表示的是C90标准新增的关键字,斜体表示的C99标准新增的 关键字,粗斜体表示的是C11标准新增的关键字。

第三(四) 章 数据和C、格式化输入输出

3.1数据据类型关键字

在C语言中,用int关键字来表示基本的整数类型。后3个关键字(long、
short和unsigned)和C90新增的signed用于提供基本整数类型的变式,例如 unsigned short int和long
long int。char关键字用于指定字母和其他字符(如, #、$、%和*)。另外,char类型也可以表示较小的整数。float、double和 long double表示带小数点的数。_Bool类型表示布尔值(true或false),
_complex和_Imaginary分别表示复数和虚数。

3.2.存储单元

位(bit):可以储存0或1(或者说,位用于设 置“开”或“关”)。虽然1位储存的信息有限,但是计算机中位的数量十分庞
大。位是计算机内存的基本构建块。

字节(byte):是常用的计算机存储单位。对于几乎所有的机器,1字节 均为8位。这是字节的标准定义,至少在衡量存储单位时是这样

字(word):是设计计算机时给定的自然存储单位。对于8位的微型计算机(如,最初的苹果机),
1个字长只有8位。从那以后,个人计算机字长 增至16位、32位,直到目前的64位。计算机的字长越大,其数据转移越快,
允许的内存访问也更多。

3.3.基本类型

整数类型解释intint类型是有符号整型,即int类型的值必须是整数,可以是正整数、负整 数或零。其取值范围依计算机系统而异。储存一个int不少于16位。short int占用的存储空间可能比int类型少,常 用于较小数值的场合以节省空间。与int类似,short是有符号类型,至少16位。long int占用的存储空间可能比int多,适用于较大数值的场合。与 int类似,long是有符号类型。long long int占用的储存空间可能比long多, 适用于更大数值的场合。该类型至少占64位。与int类似,long long是有符号 类型。unsigned int这种类型与有符号类型表 示的范围不同。例如,16位unsigned int允许的取值范围是0~65535,而不 是-32768~32767。用于表示正负号的位现在用于表示另一个二进制位,所 以无符号整型可以表示更大的数。

①使用多种整数类型的原因,是为了适应不同的机器。
②整数溢出,有符号数和无符号数溢出时会从最小的值重新再开始。
如:unsigned int 类型的变量 j 从 0开始;而int类型的变量i则从 −2147483648开始。

打印字符类型解释charchar类型用于储存字符(如,字母或标点符号)

!从技术层面看, char是整数类型。因为计算机使 用数字编码来处理字符,即用特定的整数表示特定的字符。

!声明:记得加 ‘ ’,对于ASCII值码最好使用字 符常量,而不是数字代码值。

char grade = 65; /* 对于ASCII,这样做没问题,但这是一种不好的编程风格,能这样做的前提是系统使用ASCII码 */ 非打印字符类型解释一些代表行为的字符(如,退格、换行、终 端响铃或蜂鸣),通常使用转义序列实现

!转义序列要用:‘ ’
转义序列:

浮点类型解释float单精度浮点数在机内存占4个字节,单精度浮点数的表示范围:-3.40E+38~3.40E+38double双精度在机内存占8个字节,双精度浮点数的表示范围:-1.79E+308~-1.79E+308

!一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快,如果不声明,默认小数为double类型,所以如果要用float的话,必须进行强转

其他类型解释bool类型用于表示布尔值,即逻辑值true和false。复数类型和虚 数类型有三种虚数类型,三种复数类型可移植类型某些类型名在不同系统中的 功能不一样。C99 新增了两个头文件stdint.h和inttypes.h,以确保C语言的类 型在各系统中的功能相同。

3.4 类型转换

1.类型的级别从高至低依次是:
long double、double、float、unsigned long long、long long、unsigned long、long、unsigned int、int。|

规则:

升级转换:类型转换出现在表达式时,会自动发生从较小类型转换为较大类型的转换。可能导致类型升级或降级的情况:在赋值表达式语句中,计算的最终结果会被转换成被赋值变量的类型。要注意,类型降级可能会产生截断从而导致错误。

2.类型强制转换

需要进行精确的类型转换,或者在程序中表明类型转换的意图时。要用到强制类型转换(cast),即在某个量的前面放置用圆括号括起来 的类型名,该类型名即是希望转换成的目标类型。

3.5使用printf()和scanf()函数输入读写不同类型的值

类型:

#include int main(void) { unsigned int un = 3000000000; /* int为32位和short为16位的系统 */ short end = 200; long big = 65537; long long verybig = 12345678908642; printf("un = %u and not %d\n", un, un); //u表示无符号类型 printf("end = %hd and %d\n", end, end); //h表示表示short类型 printf("big = %ld and not %hd\n", big, big); //l表示long类型输出 printf("verybig= %lld and not %ld\n", verybig, verybig); //ll表示longlong类型 return 0; }

3.6.整数的输出修饰表示

3.7字符串:

是一个或多个字符的序列,双引号不是字符串的一部分。双引号仅告知编译器它括起来的是字符 串,正如单引号用于标识单个字符一样。

C语言没有专门用于储存字符串的变量类型,字符串都被储存在char类 型的数组中。

数组由连续的存储单元组成,字符串中的字符被储存在相邻的存储单元中,每个单元储存一个字符。数组末尾位置的字符\0。这是空字符(null character),C 语言用它标记字符串的结束。空字符不是数字0,它是非打印字符,其ASCII码值是(或等价于)0。C中的字符串一定以空字符结束,这意味着数组的 容量必须至少比待存储字符串中的字符数多1。

当使用字符串数组读入时,我们并不用亲自将空字符放入字符串末尾,scanf()在读取输入时就已完成这项工作。且在读取过程中它只会读取字符串中的一个单词,而不是一整句。它在遇到第1个空白(空格、制表符或换行符)时就不再读取输入。

第五章 运算符、表达式和语句

5.1.基本运算符:

C用运算符(operator)表示算术运算。

运算符解释= 赋值运算符=号左侧是一个变量名,右侧是赋 给该变量的值。符号=被称为赋值运算符。赋值行为从右往左进行。+ 加法运算符二元运算符,用于加法运算,使其两侧的值相加。相加的值(运算对象)可以是变量,也可以是常量- 减法运算符二元运算符,用于减法运算,使其左侧的数减去右 侧的数。符号运算符:- 和+一元运算符,加号、减号还可用于标明或改变一个值的代数符号。如:rocky = –12乘法运算符:*二元运算符,使两边的值相乘,结果赋值给可改变的左值除法运算符:/。/左侧的值是被除数,右侧的值是除数。 整数除法和浮点数除法不同。

辨析一:赋值表达式、左值、右值、运算符
解释:
赋值表达式语句的目的是把值储存到内存位置上。用于储存值的数据存 储区域统称为数据对象(data object)。C 标准只有在提到这个概念时才会 用到对象这个术语。使用变量名是标识对象的一种方法。除此之外,还有其 他方法,但是要在后面的章节中才学到。例如,可以指定数组的元素、结构 的成员,或者使用指针表达式(指针中储存的是它所指向对象的地址)。左 值(lvalue)是 C 语言的术语,用于标识特定数据对象的名称或表达式。因 此,对象指的是实际的数据存储,而左值是用于标识或定位存储位置的标签。

辨析二:整数除法和浮点数除法不同。
解释:
浮点数除法的结果是浮点数,而整数除法 的结果是整数。整数是没有小数部分的数。这使得5除以3很让人头痛,因为 实际结果有小数部分。在C语言中,整数除法结果的小数部分被丢弃,这一 过程被称为截断(truncation)。目前C99使用趋l零截断。
注意,整数除法会截断计算结果的小数部分(丢弃整个lingjieduan小数部分),不 会四舍五入结果。混合整数和浮点数计算的结果是浮点数。
实际上,计算机不能真正用浮点数除以整数,编译器会把两个运算对象转换成相同的类型。 本例中,在进行除法运算前,整数会被转换成浮点数。

5.2.运算符结合顺序及优先级

第一组常见运算符

第二组常见运算符
1.sizeof运算符

sizeof运算符以字节为单 位返回运算对象的大小,。运算对象可 以是具体的数据对象(如,变量名)或类型。如果运算对象是类型(如, float),则必须用圆括号将其括起来。

2.求模运算符:%
- 求模运算符(modulus operator)用于整数运算。求模运算符给出其左侧 整数除以右侧整数的余数(remainder)。

求模运算符常用于控制程序流。,比如说if语句。

3.递增(减)运算符:++

将其运算对象递增 1。紧凑结构的代码让程序更为简洁,可读性更高。++出现在其作用的变量前面, 这是前缀模式;
++出现在其作用的变量后面,这是后缀模式。

优先级: 指针最优,单目运算优于双目运算。如正负号。 先算术运算,后移位运算,最后位运算。 请特别注意:1 printf("the value of (i

收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜