《C程序设计语言(第2版·新版)》第1章 导言

实例和基本概念介绍。

1.1 入门

例1:打印hello world

  (UNIX:建立hello.c;通过命令cc hello.c编译得到可执行文件a.out;执行a.out即可打印出。不同OS编译、加载、运行规则有所不同。)

  每个程序必须在某个位置包含一个main函数;每个程序都从main的起点开始执行;main(ps:可有两个参数argc,argv)(ps:?C的main 输出可无int,C++必须int,也可能跟编译器有关);可函数调用(库函数或自编函数)

  "hello world\n"是字符串常量,可作为printf(不会自动换行)的输入参数;

  \n, \t, \b, \", \\都是转义字符(习题ps:\后可加3位八进制数字;加有些字符则是未定义的);

1.2 变量与算术表达式

  注释:包含在之间,不能嵌套,编译忽略(ps:ANSI C 称作C89;C99标准增加行注释//)

  声明:类型名+变量表;C中所有变量必须先声明后使用;

  循环体是单语句则可不加括号;

  建议:每行一条语句,运算符两边加空格;

 

  printf()格式化输出,=表示占三个数字宽并且右对齐;

  浮点数打印宽度与精度:%6表示至少6字符宽;%.2表示打印两位小数(宽度不限);%3.0表示浮点数至少占3个字符宽且不带小数部分;%6.1类似;都是右对齐

 

  算术运算符的操作数均为整型则执行整型运算,若有一个浮点型则整型会被转换为浮点型;常数带小数点表示是浮点型;5/9=0, 5.0/9结果是浮点数:C及许多语言中整数除法会执行舍位(舍弃小数部分);

建议:浮点常量取整数,书写时也加小数点。如9.0

1.3 for循环

  C中一个通用规则:使用某种类型变量值的场合总可以使用该类型的表达式,如%6.1匹配的浮点值,如for后括弧里的三条语句;

1.4 符号常量

  #define 名字 替换文本

  名字形式与变量相同,通常建议采用大写与变量区分;替换文本可以是任何字符序列;末尾无分号;名字不定义之后出现名字(不在引号内;不是其他名字的一部分)处都被替换;

1.5 字符输入/输出

  标准库的I/O模型:无论文本从何处I/O,都按字符流处理;提供一次读/写一个字符的函数,如getchar和putchar:

  c=getchar();//从文本流读入下一个输入字符(通常来自键盘)并将其返回;int c可存储字符型并且范围足够大;返回EOF(定义在中的符号常量,不同于任何char类型的一个整型数)表示文件结束;

  类似上述赋值语句是一个表达式,具有一个值,可放入其他表达式如(c=getchar())!=EOF;

  putchar(c);//将整型变量c以字符形式打印(通常屏幕显示)

  putchar可与printf交替调用,输出与调用次序相同;

 

  ++n;更简练且通常效率更高;%ld用于输出long型;若long不够可将n声明为double,输出%.0f;

  注意:要考虑特殊情况(边界条件),比如循环初始判定就为假,那么仍应输出正确结果;

 

  字符常量:单引号字符,值等于机器字符集中对应数值,实质是小整型数另一写法;例如ASCII中'A'值为65;'\n'(是单个字符)为10但使用'A'可与字符集无关,比使用65好;

  赋值语句a=b=c=1;等价于a=(b=(c=1)),即赋值结合是从右至左;

  &&比||优先级高一级,它们连接的表达式从左往右求值,得到最终结果即终止求值,有时这很必要;

1.6 数组

  int ndigit[10]包含ndigit[0]到ndigit[9]十个元素;[]内可是任何整型表达式;

1.7 函数

  函数定义一般形式:

 

返回值类型 函数名(0个或多个参数声明)

{

声明部分

语句部分

}

 

  return 任何表达式;可不带表达式,控制权交给调用者;主调函数也可忽略返回值;

  一般main返回0表示正常终止,非0则表示异常或出错;程序要向其执行环境返回状态;

  函数原型:main之前的声明语句,必须与定义一致,可忽略参数名;编译器据此检测函数调用中参数数目与类型是否错误;

1.8 参数-传值调用

  C传递给调用参数的值存在临时变量(本地/私有副本)里而非在原变量中,这不同于Fortran或Pascal;C被调函数不能直接修改主调函数中的变量值,只能修改起私有副本中的值;欲修改则须用指针;数组名作为参数,并不复制数组,传入的是起始元素的地址,可通过下标访问或修改数组元素的值;

1.9 字符数组

  函数默认返回类型是int,可省略;原始C语言中函数原型可不写输入参数;

  调用字符数组:

int getline(char s[], int lim)

void copy(char to[], char from[])

  C语言中字符串常量存储时末尾加'\0'标志,%s格式规范要求必须此形式

1.10 外部变量与作用域

  函数的局部变量(即自动变量)不能被其他函数直接访问,函数执行完毕退出时消失(特例:static存储类局部变量在多次函数调用之间值不变);自动变量未赋值时存的是无效值;

  外部变量:定义在所有函数外部,只能定义一次,可在全局范围内访问;函数可借此交换数据而不必用参数表;在程序执行期间一直存在;

  声明变量类型,编译器将为它们分配存储单元;

  函数使用外部变量前,(我的理解)若外部变量定义出现在该函数后或其他源文件中,则需使用extern(加在int 等前面)声明;否则可省略;

  通常把变量和函数的extern声明放在一个单独的头文件中,并在每个源文件开头#include;

  copy()这样的声明被看成老式声明,参数表将不做任何检查;ANSI C规定若需声明空参数表则须显式声明:void copy(void);

  “定义”与“声明”:前者创建变量或分配存储单元,后者只是说明变量性质,不分配存储单元;

  建议:外部变量不要滥用,会使得数据关系混乱,以及降低某些函数的通用性

 

posted @ 2015-09-15 09:07  fFaXzz  阅读(241)  评论(0编辑  收藏  举报