The C Programming Language——导言

本章的任务就是通过实际的程序引入C语言的基本元素,至于其中的具体细节、规则以及一些例外情况,再此暂时不多做讨论

本章是后续章节详细讲解的内容的框架


1.入门

    程序需要经过编译、链接、加载、运行这个几个阶段后,才能实际运行起来

    一个C语言程序,无论其大小如何,都是由函数和变量组成的。函数中包含一些语句,以指定所要执行的计算操作;变量则用于存储计算过程中使用的值。

    通常情况下,函数的命名没有限制,但main是一个特殊的函数名——每个程序都从main函数的起点开始执行,这意味着每个程序都必须再某个位置包含一个main函数。

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

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

    调用函数时,只需要使用函数名加上用圆括号括起来的参数列表即可。

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

    在printf函数的参数中,只能用\n表示换行符,不能使用程序文本的换行代替\n

    printf函数永远不会自动换行,这样我们可以多次调用该函数以分阶段得到一个长的输出行

    转义字符序列为表示无法输入的字符或不可见字符提供了一种通用的可扩充的机制。

   

2.变量与算术表达式

    程序中允许出现空格、制表符或换行符之处,都可以使用注释

    在C语言中,所有变量都必须先声明后使用。声明通常放在函数起始处,在任何可执行语句之前。声明用于说明变量的属性,它由一个类型名和一个变量列表组成。

    基本数据类型对象的大小取决于具体的机器,但是存在一个一般情况下的大小

    还存在基本数据类型的数组、结构体、联合体,指向这些类型的指针以及返回这些类型值的函数

    赋值语句算是可执行语句

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

    尽管C编译器并不关心程序的外观形式,但正确的缩进以及保留适当空格的程序设计风格对程序的易读性非常重要。建议每行只书写一条语句,并在运算符两边各加上一个空格字符。花括号的风格,随便选一种,坚持使用

    C语言的整数除法操作将执行舍位,结果中的任何小数部分都会被舍弃

    printf函数的第一个参数中的各个%分别对应于第二个、第三个……参数,它们在数目和类型上都必须匹配,否则将出现错误的结果

    整型算术运算和浮点算术运算

    如果某个算术运算符的所有操作数均为整型,则执行整型运算。但是,如果某个算术运算符有一个浮点型操作数和一个整型操作数,则在开始运算之前整型操作数将会被转换为浮点型

    算术运算、赋值运算、关系运算都会在运算之前进行类型提升

    格式说明符可以省略宽度与精度(可都省略)

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


1.3for语句

    对于某个特定的任务,可以采用多种方法来编写程序

    在允许使用某种类型变量值的任何场合,都可以使用该类型的更复杂的表达式

    与while语句一样,for循环语句的循环体可以只有一条语句,也可以是用花括号括起来的一组语句。初始化部分、条件部分与增加步长部分都可以是任何表达式

   

1.4符号常量

    在程序中使用“幻数”不是一个好习惯,它们几乎无法向以后阅读该程序的人提供什么信息,而且使程序的修改变得更加困难

    #define指令可以把符号名(即符号常量)定义为一个特定的字符串。形式如下:#define 名字 替换文本     在该定义之后,程序中出现的所有在#define中定义的名字(既没有用引号引起来,也不是其他名字的一部分)都将用相应的替换文本替换。替换文本可以是任何字符序列,而不仅限于数字。

    符号常量名通常用大写字母拼写。#define指令行的末尾没有分号

   

1.5字符输入/输出

    标准库提供的输入/输出模型非常简单。无论文本从何处输入,输出到何处,其输入/输出都是按照字符流的方式处理的。文本流是由多行字符构成的字符序列,而每行字符则由0个或多个字符组成,行末是一个换行符。标准库负责使每个输入/输出都能遵守这一模型。

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

    每次调用getchar时,其都会从文本流中读入下一个输入字符,并将其作为结果值返回。该字符通常是通过键盘输入的。也可以通过文件输入字符。

    每次调用putchar(c),其都会将整型变量c的内容以字符的形式打印出来,通常是显示在屏幕上。

    字符在键盘、屏幕或其他的任何地方无论以什么形式表现,它在机器内部都是以位模式存储的。char类型专门用于存储这种类型的数据,当然任何整型也可以用于存储字符型数据。

    在没有输入时,getchar函数将返回一个特殊值,这个特殊值与任何实际字符都不同。这个值称为EOF。所以用于保存getchar函数返回值的变量要足够大,除了能存储任何可能的字符外还要能存储文件结束符EOF,所以建议将该变量声明为int

    EOF定义在头文件<stdio.h>中,是一个整型数。其具体数值是什么并不重要,只要它与任何char类型的值都不相同即可。这里使用符号常量,可以确保程序不需要依赖于其对应的任何特定的数值

    赋值操作是一个表达式,且具有一个值

    转换说明符%ld告诉printf函数其对应的参数是long类型的

    自增或自减运算符的操作数可以为整型、浮点型、字符型和指针类型,其对指针类型的运算效果需要另外考虑

    对于float与double类型,printf函数都使用%f进行说明

    while语句和for语句的优点之一就是在执行循环体之前就对条件进行测试,在出现边界条件时,while语句与for语句有助于确保程序执行合理的操作

    单引号中的字符表示一个整型值,该值等于此字符在机器字符集中对应的数值,称之为字符常量,其不过是小的整型数的另一种写法而已。使用字符常量比直接使用数字要好,因为意义更加清楚,且与特定的字符集无关

    字符串常量中使用的转义字符序列也是合法的字符常量。‘\n’是单个字符,在表达式中其表示一个整数;“\n”是一个仅包含一个字符常量的字符串常量

    如果程序中的幻数都以符号常量的形式出现,对程序进行大量修改就会相对容易很多

    在兼有值与赋值两种功能的表达式中,赋值结合次序是由右至左的

    &&比||高一个优先级,由&&

猜你喜欢

转载自blog.csdn.net/weixin_39918693/article/details/80215481