品位K&R之《C程序设计语言》-第一章

第一章:A Tutorial Introduction

1.1 Getting Started

转义序列\n换行,\t(制表符),\b(后退),\"(双引号)\\(反斜杠)都代表单个字符,在源代码中虽表示为两个字符。
\t究竟代表多少个空格呢?
1.2 Variables and Arithmetic Expressions
温度转换公式首次在此书被作为程序示例,此后有许多别的程序语言类书籍也会引用到此公式。
在Scheme中:
(define (celsius->fahrenheit celsius)
     (+ (* 1.8 celsius) 32))
在C中,所有的变量必须在使用之前被声明(declared),总在函数中的可执行语句之前。
Declaration(声名式)由类型名和变量组成,表明了变量的属性。
printf函数并不是C语言的一部分,C语言本身不定义I/O,printf来自C程序中可用到的函数标准库,printf的行为在ANSI标准中定义,所以只要机器中的Compiler和library遵从此标准就可以使用它。
printf函数的格式化输出可以指定宽度和精度,指定宽度后输出会右对齐。
常量1.0代表浮点常量,虽然1.0和1除了格式外在数值上没有区别,但是指定1.0使读者知道所指为浮点常量。
1.5 字符输入与输出
此节的这句话很关键:
The model of input and output supported by the standard library is very simple.   Text imput or output, regardless of where it originates or where it goes to, is dealt with as streams of characters. A text stream is a sequence of characters divided into lines; each line consists of zero or more characters followed by a newline character.
Quiz:观察如下程序
#include <stdio.h>
int main() {
    int c;
    while ((c = getchar()) != 'x') {
        putchar(c);
    }
    return 0;
}
1. 当运行时,4字符的序列xpxq作为输入。输出为?
a. There's no output.
b. x
c. xx
d. p
e. pq
f. an infinite number of characters
2. 考虑同一问题,假设c = getchar()的括号被去掉。
有一句话我没有看懂
(It's possible to get carried away and create impenetrable code, however, a tendency that we will try to curb.)
Exercise 1-7. 写一个程序打印EOF的值。
1.5.3 数行
TCPL在此处又一次提及,标准库确保输入文本流为行序列(a sequence of lines),每一行由一个换行终结。
#include <stdio.h>
main()
{
    int c, nl;
    
    nl = 0;
    while ((c = getchar()) != EOF)
        if (c == '\n')
            ++nl;
    printf("%d\n", nl);
}
程序很简单,统计文本流中的行数,问题是如果用键盘输入,是否之多只能输入1行?能否用UNIX中的重定向输入流呢?
比如:./linecount < lines.txt
1.7 函数
本文对parameter(形参)和argument(实参)给出了区别定义。
main和其它的函数一样,可以返回一个值给它的调用者,事实上为程序执行的环境。一般返回0表示正常终止,非0代表不寻常或错误终止情况。程序应该返回一个状态给它们的环境。
1.8 传值调用
作者在此处指出,C语言中函数调用是将实参按值传递(非按引用传递)。
1.9 字符数组
按照C语言的惯例,字符串以'\0'标记终止。以'\0'标示字符串结束。('\0'并不是普通文本的一部分,也就是说'\0'是字符串常量的一部分,你需要给它分配空间,但它并不是字符串内容的一部分,所以计算字符串长度时不会计算它)。
1.10 外部变量和作用域

你可能感兴趣的:(程序设计)