After Read:C Primer Plus(中文第五版)

来源:互联网 发布:安徽航信网络开票系统 编辑:程序博客网 时间:2024/06/05 19:53

第一章 概览

1.C简介

       C是为编程人员开发的语言,面向编程人员的需要。

C语言的优点和缺点是同一特征的两个方面,即C语言给予程序员更多的自由,但同时也让程序员承担更大的风险。C在表达方面的自由会增加风险,意味着程序员可能会因此犯难以追踪的错误。

自由的代价是永远的警惕。

2.使用C语言的7个步骤

定义程序目标   设计程序   编写代码   编译   运行程序

测试和调式程序   维护和修改程序

3.编程机制

源代码编译器目标代码(.obj)→链接器可执行代码(.exe)

         /↓   ↓\

                                                   库代码   启动代码

编译器:将源代码转换为中间代码

链接器:将中间代码与其它代码相结合来生成可执行文件

 

第二章 C语言概述

1.C程序必须使用英文输入法输入符号,尤其注意;“”,

2.运算符:=

num= 7; //(注释)将值7赋给变量num,变量num的值变为7

3.printf()函数

例:printf(“Iam %d years old.\n”,num);

printf()表示是一个函数

“”内的是函数需要使用的值,即参数

%d是一个占位符(格式说明符),指出变量num输出的位置

4.使程序可读的技巧

让程序具有可读性,使程序更易于阅读和理解,有利于更正、修改,也有助于让自己对程序要做的事情有更清晰的概念。

选择有意义的变量名和使用注释

使用空行分隔一个函数的概念上的多个部分

每个语句用一行

5.关键字

关键字是C语言中的词汇。不能将关键字作为变量名。

 

第三章 数据和C

1.变量与常量

数据:承载信息的数字和字符

常量:数据在程序使用之前预先设定,并在整个程序运行过程中没有变化。

变量:数据在程序运行过程中可能变化或被赋予新的值

2.变量声明、变量初始化

声明:  变量类型 变量名;

初始化:变量名=;变量类型变量名=;

 例:int num =12; har c = ‘A’;float num2 = 3.3;

变量名:只能字母或下划线(_)开头,首字符后面可以使用大小写字母、数字和下划线

3.数据类型

int(整型)

值必须为整数,如:-4320...

格式说明符:%d(十进制)%0(八进制)%x(十六进制)

shortint:表示不大于int位长度的数,%hd

longint:表示不小于int位长度(至少32)的数,%ld

unsignedint,unsigned long int,unsigned short:表示无符号的整数,即正整数或0,%u,%lu,%hu

char(字符型)

值必须为单个字符,如’a’,’2’,’#’,...

格式说明符:%c(%d可打印字符对应的ASCII整数值)

非打印字符:

(1)赋相应ASCII值:charbeep = 7;

(2)用转义序列:charnerf = ‘\n’;

float(浮点型)

值为小数(至少精确6),如3.140.972-1.2...

格式说明符:%f%e(打印指数计数法)

double:范围更大的浮点型,至少精确10位有效数字,%lf

_Bool(布尔型)

只有两个可能值:01。用于表示逻辑真与假(truefalse)

可移植的类型(inttypes.h)

复数和虚数类型

其它类型:由以上基本类型衍生出的其它类型,如数组、指针、结构、联合

4.刷新输出

输出的内容先被传递给缓冲区(中介存储区域),缓冲区的内容再不断地传递出去。

标准C规定在以下几种情况下交缓冲区的内容传给屏幕:缓冲区满的时候遇到换行符的时候(‘\n’)需要输入的时候

5.scanf()函数

例:scanf(“%f”,&weight);

%f表示浮点数

&表示将读取的数值赋给事先声明的变量weight

6.运算符:sizeof

sizeof以字节为单位给出类型的大小,一字节= 8位,一位只能存储01,使用%zd说明符打印(%u)

例:printf(“Typechar has a size of %zd bytes.\n”,sizeof(char));

 

第四章 字符串和格式化输入/输出

1.字符串

字符串就是一个或多个字符的序列

C没有为字符串定义专门的变量类型

C将字符串存储在char数组中

数组是同一类元素的有序序列,char数组就是char元素的有序序列

字符串的字符被逐个放进char数组中,在字符串结尾必须添加一个'\0'字符(空字符),用以标记字符串的结束

2.使用字符串

创建一个字符串数组例:charname[20];

读取字符串:scanf(“%s”,name);

打印字符串:printf(“%s”,name);

3.strlen()函数

strlen()函数以字符为单位给出字符串的长度

strlen()准确给出字符串中的字符个数,sizeof运算符会给出比字符串中字符数目大1的数。因为它包括了字符串结尾的'\0'字符(空字符)

4.#define创建符号常量

格式:#define常量的符号名常量的值

 例:#defineNAME value

#define格式必须放在文件开头

文件中所有的常量的符号名(NAME)将被替换为常量的值(value)

5.printf()函数

格式:printf(Control-string,item1,item2,...);   print(“..%d..%f..%c..”,a,b,c);

Control-string对应于”balabala...”

item1,item2,...对应于要打印的项目

项目可以是被赋值的变量,也可以是常量,甚至是具有值的表达式

必须在Control-string(控制字符串)中为每一个项目提供一个转换说明符(其实只是翻译),如%d%f%c

转换说明符必须与项目的数据类型相匹配,如字符串用%s

printf()返回所打印的字符的数目,如果有输出错误,则返回一个负数

6.打印较长的字符串

用反斜线符号(/)和回车键的组合来换行。文本中会另起一行,但字符串中不会包含换行字符。

例:printf(“Hereis another way to print \

long string.\n”);

7.scanf()函数

①格式:scanf(“%d”,&a);   scanf(“%d %d %f,…”,&a,&b,&c,…);

②如果用scanf()读取基本变量类型时,需要在变量名前加一个&

 如果用scanf()读取一个字符串到字符数组中,直接用数组名,不用加&

③需要输入多个项目时,用空格(space/tTab/Enter)来区分每个输入的项目,用回车(Enter)键确认输入完毕。

scanf()读取机制:

%d:读取遇到的第一个非空白字符,如果是数字,则保存该数字字符并读取下一个字符,当到遇到非数字字符,则认为读取完毕。余下的字符存入缓冲区中,等待下一次的读取。

%s:读取遇到的第一个非空白字符,当到再次遇到非空白字符,则认为读取完毕。(可理解为读取一个单词,但不完全,因为类似*#&¥也是合法的)

%c:读取所有的字符,包括空白字符。

⑤如果scanf()中有普通字符,则输入格式必须一致。例如:scanf(“%d,%d”,&a,&b);,则输入格式必须为:12,13

scanf()返回成功读入的个数,没有读取任何项目是返回0,失败则返回EOF(通常值为-1)

8.printf()scanf()*修饰符

print()中,如果用%*d,则在参数列表中要有一个*的值和一个d的值。*用来指定字段宽度。

例:printf(“%*d”,width, number); width指定字符宽度,number指定%d的值。

scanf()中,如果在%和说明府字母之间有*,则使函数跳过相应的输入项目。

 

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

1.基本运算符

= (赋值运算符)

 例:year= 2015;表示将值2015赋给名字为year的变量,该语句之后变量year的值为2015

 例:i= i + 1;表示将i + 1的值赋给变量i,该语句之后变量i的值为i+ 1,即变量i的值增加1

 数据对象:数据对象是泛指数据存储区的术语,数据存储区能用于保存值。例如,用于保存变量或数组的数据存储区是一个数据对象。

 左值:即=符号左边的值。左值不能是常量。

 右值:即=符号右边的值。右值是能将其值赋给左值的量。右值必须有值,也可以是能产生值的表达示。

 操作数:指运算符操作的对象。例如,在year= 2015;中,=的左操作数是year=的右操作数是2015

 二元运算符是指该运算符需要两个操作数。

+ (加法运算符):将两侧的值相加

- (减法运算符):将两侧的值相减

* (乘法运算符):将两侧的值相乘

/ (除法运算符):将两侧的值相除

⑥基本运算+-*/的求值顺序与数学义上的相同,=在它们运算完之后再运算。

2.sizeof运算符

sizeof:以字节为单位返回其操作数的大小。

 格式:sizeof(变量名或类型名);

例:sizeof(year);   sizeof(float);

size_t:这是一个无符号整数类型。C的头文件系统使用typedef使size_t在系统中作为unsignedintunsignedlong的同义词。

typedefC有一个typedef机制,它允许你为一个已有的类型创建一个别名。

     例:typedef doublereal;将使real成为double的别名,此后可以声明一个real类型的变量:realdeal;,编译器将视realdouble别名,于是把deal创建为一个double的变量。

3.%(取模运算符)

%用于整数运算,该运算符计算出它右边的整数去除它左边的整数后所得到的余数。

 例:13%5的值为3

C99为整数除法规定趋零截尾的规则。在些规则下,如果第一个操作数为负数,得到的模为负值,如第一个操作数为正数,得到的模为正值。

③可以通过从a中减去(a/b)*b来计算a%b

例:-11 – (-11/)*5 = -11 – (-2)*5 = -11 –(-10) = -1;

4.++—(增量和减量运算符)

++(增量运算符):将其操作数的值加1

 --(减量运算符):将其操作数的值减1

++出现的方式

 前缀模式:出现在它作用的变量的前面。如++a--b

 后缀模式:出现在它作用的变量的后面。如a++b--

 前缀模式先对变量值进行操作(1或减1),再使用变量的值。

 后缀模式先使用变量的值,再对变量进行操作。

5.表达式和语句

①表达式是由运算符和操作数组合构成的。最简单的表达式是只有一个常量或变量而没有运算符。

②每个表达式都有一个值。赋值表达式的值是与其左值相同,关系表达式(>,<,=)的值是其真假值(真为1,假为0)

③语句是构造程序的基本成分。程序是一系列带有某种必需的标点的语句的集合。

;是识别语句的标志。

6.副作用和顺序点

C的主要目的是求表达式的值。

②副作用是对数据对象或文件的修改。

  例:number =12;C的主要目的是求表达式(number= 12)的值,这是一个赋值表达式,其表达式的值是其左值number的值。副作用为number的值被赋予12。最终该表达式的值为12.

③顺序点是程序中的一点,在该点处,所有的副作用都在进入下一步前被计算。

④在C中,;是一个顺序点,任何一个完整的表达式也是一个顺序点。

⑤完整表达式:不是一个更大的表达式的子表达式即完整表达式。完整表达式包括一个表达式语句里的表达式和在一个while循环里作为判断条件的表达式。

⑥复合语句:使用花括号{}起来的两个或更多的语句,它也被称为一个代码块(block)

7.类型转换

①在包含两种数据类型的任何运算里,两个值都被转换成两种类型里较高的级别。

②通常类型级别从高到低的顺序是:longdoubledoublefloatunsignedlong longlong longunsignedlonglongunsignedintint.

③当charshort类型出现在表达式里或者作为函数的参数时,它们都将被提升为int类型

8.指派运算符

①要避免以上的自动类型转换。

②通常不应该混合使用类型,如果用了,则使用类型指派来确保数据表达准确。

③格式:

(要转换成的类型名)正在使用的类型的数据

例:mice = (int)1.6 + (int)1.7;表达式最终会被转换为1+1mice的值为2

9.带有参数的函数

①使用函数前需要在mian函数前添加函数原型。

 例:viodpound (int n);

 第一个void表示该函数没有返回值,返回值是函数提供的可供使用的值。

 pound()是函数的名字。pound可替换成其它有意义的名字,如Add

 int n表示函数的参数是int类型的。n在函数原型中无实际意义,可省略。如果不需要参数,用void代替

②函数调用:

 可以在main函数中,也可在其它函数中调用

格式:pound(5);

     5为传递给pound()函数的参数。5被称为实际参数(实际的值)

③函数定义:

 函数定义通常在main函数外。

 格式:用一个函数头和括在花括号中函数体。函数体中可以有需要的语句。

如:voidpound(int n)

 {

     while(n-->0)

    {

            printf(“#”);

     }

    printf(“\n”);

   }

 调用中的参数5将传递给n,此处的n为声明的变量名(形式参数),不可省略。函数体中n的第一次使用的值将为5,之后值将随函数体中对其的操作而变化。

④函数中的变量名是局部的,意味着在一个函数里定义的名字不会与函数外相同的名字发生冲突

 

第六章 C控制语句:循环

1.C风格的读循环

   while(scanf(“%d”,&num) == 1) //读取值,并测试是否读取成功

   {

       //循环操作语句

 }

2.while语句

while循环的一般形式

 while(表达式)

 {

需要循环操作的语句

}

while循环的终止

构造一个while循环时,循环中必须包含能改变判断表达式的值来使表达式的值最终变为假。

只有在计算判断条件的值时才决定是终止循环还是继续执行。

while是入口条件循环,只满足循环条件,即判断表达式为真时才执行循环语句。

④只有位于判断条件之的的单个(简单语句或复合语句)语句才是循环部分

 while语句本身在语法上是一个单独的语句,即使它使用了复合语句。该语句从while开始,到第一个分号结束,若使用了复合语句则到花括号结束。

3.关系运算符和表达式

①进行比较的判断表达式称为关系表达式,其中出现的运算符称为关系运算符。

 <<===>=>==!=

②不能用关系运算符来比较字符串。在浮点数比较中只能用<>

③为了避免把=运算符误用为==,进行比较的双方中,如果有一个是常量,则可以把它放在比较表达式的左边,这样做有助于发现错误。例:5== value;

4.C语言中的真

 C来说,一个真表达式的值为1,而一个假表达式的值为0.。更一般地,所有的非零值都被认为是真,只有0被认为是假。

5.for循环

for循环的一般形式

 for(初始化;测试;更新)

 {

需要循环操作的语句

}

for语句使用由分号分开的三个表达式来控制循环过程。初始化语句只在开始时执行一次。然后对测试语句求值,如果测试语句为真,则执行循环部分,接着执行更新语句,然后再执行测试语句。如果测试语句为假,则跳过循环部分,执行for语句的后语句。

③当测试语句为空时,该处的值会被视为真,即为无限循环。

6.更多赋值运算符

a += b等价于a = a + b

a -= b等价于a = a - b

a *= b等价于a = a * b

a /= b等价于a = a / b

a %= b等价于a = a % b

7.逗号运算符

①逗号作为运算符时有两个属性。

保证被它分开的表达式按从左到右的次序进行计算。

整个逗号表达式的值是右边成员的值。

例:x = (y = 3, (z = ++y + 2) + 5); x最后的值为11

②逗号也可用作分隔符

 例:charch, name;

     printf(“%d %d”, num, year);

8.dowhile循环(退出条件循环)

①一般形式

 do

 {

     需要循环操作的语句

}while(表达式);

②判断条件在执行循环之后进行检查,这样可以保证循环中的语句至少被执行一次。

do while是一个语句,需要一个分号标志语句的结束。

9.嵌套循环

①嵌套循环是指在一个循环之内还有循环。

②通常使用嵌套循环来按行按列显示数据。

③在嵌套循环中,内部循环在外部循环的每次单独循环中都完全执行它的所有循环。

④通过使内部循环的一部分依赖于外部循环,可以使内部循环在每个周期中的表现不同。

10.数组

①一个数组就是线性存储的一系列相同类型的值。

②数组声明

 例:floatdebts[20];

 float表示数组的元素都是浮点类型的

 debts是数组的名字

 20表示数组最多可以有20个元素

③数组元素的编号是从0开始的。debts[0]表示数组的第一个元素,debts[19]表示数组的第20个元素

[0]中的0[19]19都是用于标识数组元素的下标、索引或偏移量。下标必须是整数。

⑤通常数组元素从下标0开始按顺序存储。

⑥将元素读入数组中的例子:

 scanf(“%f”, &debts[index]); //index为整型变量,用于指示数组下标

11.使用具有返回值的函数

①声明函数、调用函数、定义函数、使用return关键字,这些是定义并使用具有返回值的函数的基本要素。

②举例:answer =add(a, b);

   main函数或其它函数中调用add()函数,并将add()函数的返回值赋给相同类型的变量answer。若add()函数返回int型,则answer也应为int

③现代的编程习惯是把程序的元素分为接口和实现部分。接口部分描述了如何使用一个特性,如函数原型;实现部分说明了采取的具体动作,如函数定义。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     

0 0
原创粉丝点击