The C Programming Language 第一章导言 读书笔记

来源:互联网 发布:地图获取数据库经纬度 编辑:程序博客网 时间:2024/05/22 12:25

1.1入门

本书以“hello,world"这个程序入手,向我们介绍了:

一个c语言程序是由函数和变量组成的。函数包含一些语句,以指定所要执行的计算操作。变量用于存储计算过程中使用的值。

main是一个特殊的函数名——每个程序都从main函数的起点开始执行。main函数通常会调用其他函数。

#include<stdio.h>告诉编译器在本程序中包含标准输入/输出库的信息。

函数之间进行数据交换的一种方法是调用函数向被调函数提供一个值(参数)。函数名后面的一对圆括号将参数列表括起来。

函数中的语句用一对花括号{}括起来。

printf是用于打印输出的库函数。

用双引号括起来的字符序列称为字符串或字符串常量。

字符序列\n表示换行符。

类似于\n的转义字符序列表示无法输入的字符或不可见字符。


1.2变量与算数表达式

本节用一个华氏温度转为摄氏温度的程序开始,引入了注释、声明、变量、算术表达式、循环以及格式化输出等概念。

注释——包含在/*和*/之间的字符序列(被编译器忽略),简单解释了该程序是做什么用的。

变量必须先声明后使用。

声明用于说明变量的属性,由一个类型名和一个变量表组成。

int表示其后所列变量为整数,32位。

float表示所列变量为浮点数,32位,至少6位有效数字。

char,字符,一个字节。

short,短整型。

long,长整型。

double,双精度浮点型。

赋值语句为变量设置初值。

各条语句以分号结束。

while循环语句首先测试圆括号中的条件,条件为真,则执行循环体;再重新测试圆括号中的条件,如为真, 再执行循环体,直到为假时循环结束,并继续执行跟在while循环语句之后的下一条语句。

while的循环体可以是用花括号括起来的一条或多条语句,也可以是不用花括号包括的单条语句。

我们总是把while控制的语句缩进一个制表符,突出了程序的逻辑结构。并建议每行只书写一条语句,并在运算符两边各加上一个空格字符。增强程序可读性。

整数除法操作将执行舍位,舍弃结果中的任意小数部分。

printf是一个通用输出格式化函数,第一个参数是待打印的字符串,每个百分号表示其他参数之一进行替换的位置,并制定打印格式。%d制定一个整型参数。各个%和参数的数目和类型必须匹配。printf并不是C语言本身的一部分,仅仅是标准库函数中一个有用的函数。如果在printf语句的第一个参数的%d中指明打印宽度,则打印的数字会在打印区域内右对齐。

浮点数相除不会被舍位,如果某个算数运算符有一个浮点型操作数和整型操作数,那么开始运算前整形操作数会被转换为浮点型。即使浮点常量取的是整型值,为了强调其浮点性质,还是为它加上一个显示的小数点,便于阅读。

printf支持下列格式说明:%o表示八进制数;%x表示十六进制数;%c表示字符;%s表示字符串;%%表示百分号本身。


1.3for语句

for语句是一种循环语句,第一部分是初始化部分,仅在进入循环前执行一次。第二部分是控制循环的测试或条件部分,如果结果值为真,则执行循环体。此后执行第三部分。三个部分都可以是任意表达式。


1.4符号常量

#define指令可以把符号名(或称为符号常量)定义为一个特定的字符串:#define 名字 替换文本

替换文本可以是任何字符序列。

符号常量名通常用大写字母拼写,容易与用小写字母拼写的变量名相区别。

#define指令行的末尾没有分号。


1.5字符输入/输出

标准库提供的输入/输出模型是按照字符流的方式处理的。文本流是由多行字符构成的字符序列,每行字符由0个或多个字符组成,行末是一个换行符。

标准库提供了一次读/写一个字符的函数,其中最简单的是getchar()和putchar()。

每次调用时,getchar函数从文本流中读入下一个输入字符,并将其作为结果值返回。

每次调用putchar将打印一个字符。

关系运算符!=表示不等于。

字符在机器内部是以位模式存储的。char类型专门用于存储这种字符型数据,任何整型也可以用于存储字符型数据。

EOF(end of file)是文件结束符,定义在头文件<stdio.h>中,是一个整型数。

++的功能是执行+1操作,更精炼通常效率更高。与++对应的是自减运算符--。可以作为前缀运算符以及后缀运算符。

%ld表示对应的参数是long。

double类型可以处理更大的数字。

单独的分号称为空语句。

双等于号==是表示等于关系的运算符,单等于号=表示赋值运算符。

单引号中的字符表示一个整型值,该值等于此字符在机器字符集中对应的数值,我们称之为字符常量。转义字符序列也是合法的字符常量。

赋值结合的次序是从右至左。

&&代表AND(逻辑与),||表示OR(逻辑或),&&比||高一个优先级。由左至右求值,并保证在求值过程中只要能够判断最终的结果为真或假,求值就立即终止。

if-else的两条语句有且仅有一条语句被执行。


1.6数组

C语言中,数组下标从0开始。

数组下标可以是任意整型表达式,包括整型变量和整型常量。


1.7函数

函数为计算的封装提供了一种简便的方法。

函数定义可以以任意次序出现在一个源文件或多个源文件中,但同一个函数不能分割存放在多个文件中。

一条函数声明语句声明参数的类型、名字以及该函数返回结果的类型。

函数定义圆括号内列表中出现的变量称为形式参数,而把函数调用中与形式参数对应的值称为实际参数。

main函数中return 返回0表示正常终止,返回值为非0表示出现异常情况或出错结束条件。

函数原型必须与函数定义和用法一致。函数原型与函数声明中参数名不要求相同。


1.8参数——传值调用

C语言中所有函数参数都是通过值传递的。传递给被调用函数的参数值存放在临时变量中,而不是存放在原来的变量中。

在C语言中被调用函数不能直接修改主调函数中变量的值,而只能修改其私有的临时副本的值。必要时可以通过指针修改主调函数中的变量。

数组名作为函数参数时,传递给函数的值是数组起始元素的位置或地址。


1.9字符数组

字符数组是C语言中最常用的数组类型,‘\0'标记着字符串的结束。


1.10外部变量与作用域

main函数中的变量是main函数的私有变量或局部变量。其他函数不能直接访问他们。

每个局部变量只在函数被调用时存在,在函数执行完毕退出后消失,也称自动变量。

可以定义位于所有函数外部的变量。外部变量可以在全局范围内访问,函数间可以通过外部变量交换数据。外部变量在程序执行期间一直存在。

外部变量必须定义在所有函数之外,且只能定义一次,定义后编译程序将为它分配存储单元。

在每个需要访问外部变量的函数中,必须声明相应的外部变量,可以用extern语句显式声明,也可以通过上下文隐式声明。

人们通常把变量和函数的extern声明放在一个单独的文件中(头文件),并在每个源文件的开头使用#include语句把所要用的头文件包含进来。后缀名为.h约定为头文件名的扩展名。

定义表示创建变量或分配存储单元。声明指的是说明变量的性质,不分配存储单元。

过分依赖外部变量会导致一定的风险,使程序中的数据关系模糊不清,外部变量的值可能会被意外地或不经意地修改,而程序的修改又变得十分困难。


0 0
原创粉丝点击