C语言笔记(谭版 第一章~第五章)

《C语言程序设计》第四版  谭浩强     相关学习笔记

第一章       程序设计和C语言

1.何为程序?

指令的集合,计算机由程序通过指令控制。一条指令代表一些操作,一系列指令的组合就能使计算机发生某种我们想要的功能和作用,从而达到实践的目的。

程序不外乎就是符合一定结构,以指令为其根本元素的一个执行计划。

 

2.C语言?

机器语言:最原始的指令(二进制形式)的集合。  纸带扫描法。

 

可联想至数字芯片的控制,一般数字芯片的控制都是依靠代码来实现的。不同代码代表不同的功能。计算机就是一个大型复杂的数字系统,给予不同的机器指令,它就会做不同的运算。

 

符号语言(又称汇编语言):需通过汇编程序转化成机器指令的形式。一般一条汇编指令转化为一条机器指令。

 

  机器语言和符号语言都为低级语言,它们对机器特性依赖程度高,即编程时因使用机器特性的不同程序就会有所不同。

 

高级语言:需要编译程序软件。(如VC++,Turbo C++,GCC)(源程序到目标可执行文件)一句高级语言往往对应多条低级指令。

     非结构化语言:早期 Fortran, Basic

     结构化语言:Qbasic,Fortran77,C。基于过程,需将运行过程想清楚后才能编出。

     面向对象的语言:C++,C#, Visual Basic, Java。

 

 

 

3.C语言发展及特点

祖先BCPL

由Unix操作系统来

C标准变化  ANSI C(C89) C99

 

 

C结构

一个程序由一个或者多个源程序文件组成。

 

C程序运行阶段

预处理阶段,编译阶段,汇编阶段,链接阶段。

 

 

 

 

 

第二章       算法—程序的灵魂

一个公式: 数据结构+算法=程序

编程需要:算法,数据结构,程序设计方法(结构化程序设计),语言工具。

 

算法可分为两大类:数值运算算法,非数值运算算法

数值运算算法内容较为固定,发展较成熟,故有相关手册或资料可查,直接COPY即可。

 

算法特性

有穷性,确定性,有零个或多个输入,有一个或多个输出,有效性

可将算法当做黑箱子来看待并且使用,成熟的算法很多,可根据应用需要移植或者稍作改变。

程序员要会编写简单算法,亦要会利用成熟算法编程。

 

算法表示

自然语言,流程图(传统流程图,N-S流程图,三个基本结构:顺序结构,循环结构,选择结构),伪代码,计算机语言

 

结构化程序设计方法

用三种基本结构组成程序

自顶向下,逐步细化,模块化设计,结构化编码

结构化程序设计方法是用来解决人脑思维能力的局限性和被处理问题的复杂性之间的矛盾。

掌握了算法就是掌握了程序设计的灵魂。

 

 

第三章       顺序程序设计

 

数据的表现形式及其运算

常量和变量

 

常量:整型常量,实型常量(十进制小数形式,指数形式),字符常量(普通字符:ASCII码,转义字符),字符串常量,符号常量(#define PI 3.14159)

相关转义字符:\n 换行  \ooo 八进制对应的字符   \xhh  十六进制对应字符

\\  \’   \”   \?  输出杠后面字符

 

变量:先定义,后使用。变量名(地址映射),变量值。

 

常变量:C99允许使用常变量。有名字的不变量(不允变,其他与变量一致)const 前缀

 

标识符:一个对象的名字。字母,数字,下划线组成。第一位为字母或下划线。

一般而言,变量用小写字母写,便于阅读。

 

 

 

 

 

数据类型

 

所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式。

 

不同类型在内存中占有的存储单元长度是不同的,这跟编译系统也有关系(比如对int整型的分配,turboC与VC++就不一样)在系统转化代码移植时需要注意此问题。否则会有数据溢出的问题出现。

 

整型数据

基本整型 int   (turbo c++2 分配2字节,VC中分配4字节)  补码表示数据(正负转化:取反+1)

短整型 short int    VC++分配为2字节

长整型 long int     VC++分配4字节    -231  ~ 231-1 (补码范围)

双长整型 long long int  C99新增类型  但许多编译系统尚未实现

unsigned  前缀  对无符号整型用%u输出

 

字符型数据

ASCII字符集 宽字符集(wide character)

一字节 char  0~127  字符输出%c

利用char可来表示整型 可以加unsigned或者signed。

 

浮点型数据  (用来表示实数,实数以规范化指数形式存放)

小数部分+指数部分(皆包括数符)  如何安排? C标准未说明,由编译系统决定。

float 一般为4字节

double  8字节,在c语言进行浮点运算时都将float类型自动转换为double然后运算。

long double  VC++中为8字节

存储详细机理?

 

常量类型确定

C编译系统常把实型常量按双精度处理。(8字节)

整型常量一般为int型(VC++为4字节)

若要改变系统的默认规定,需加后缀。

1.23f 表示单精度浮点表示的实数。

 

运算符和表达式

基本算术运算  +  -  *  /  %

两个实数相除为双精度,两个整数相除取整(正负:靠近0原则)

%要求都为整数。

 

自加,自减

前面:使用前自加(减)      如 j=i++;  j=++i;就不同

后面:使用后自加(减)

 

算术表达式,优先级,结合性

表达式中处理规则是通过优先级和结合性(左结合性,右结合性)表现出来的。当然,可以通过括号保证得到希望的运算结果。

 

不同类型数据运算相关准则

能够运算的原因是有一个自动转换机制。这些是编译系统干的事。

只要出现浮点,全部转换为双精度。字符型与整型可以直接运算结果仍为整型。

 

强制类型转换运算符

(类型名)(表达式)或变量

得到的是一个临时变量,用于赋值,传递。

 

C运算符种类繁多,积累以实践为重。

 

 

C语句

一个C程序由多个源文件组成,一个源文件可包含预处理指令,全局变量声明,多个函数组成。

控制语句

条件语句,循环语句,switch语句,goto语句,函数调用语句,表达式语句,空语句,复合语句(多种结合)。

 

 

赋值语句   复合的赋值运算符(专业用) 右结合性

不加;时为赋值表达式。表达式是可以嵌入到语句中去的。表达式与语句不同。

 

赋值过程数据转换:整型数据之间的赋值按存储单元中的存储形式直接传送,实型数据之间以及整型和实型之间的转换是先转换后赋值。

一般变量初始化不是在编译阶段完成的(除静态存储变量和外部变量的初始化),而是在程序运行时执行本函数时赋予初值的。

 

 

数据的输入和输出

C语言本身不提供输入输出语句,相关操作时由C标准函数库中的函数实现的。(编译系统提供) 如printf   scanf   链接阶段与源文件生成的obj文件结合生成EXE文件。

 一些函数为何不作为C语句出现而以库标准形式存在? 为了C语言的简洁,精炼,可移植性,通用性。而机器特性匹配的任务就交给了编译软件了。这些函数多少需要跟机器打交道。

头文件包含了库中变量和宏的定义及函数声明。

 

printf 函数的使用

printf(格式控制,输出表列)

printf(“a=%d,b=%f”,a,b);

%5d  %5c  5列,右靠齐;

%s  输出字符串

%f 整数全部输出,小数6位    %m.nf  m表示列数,n表示小数位数 右靠齐(单6双15)

%-m.nf  左对齐形式  

%e  VC++默认小数6位,指数部分占5列  %m.ne  m数据所占宽度  n小数位数

%i 十进制实际长度输出  %o 将内存单元的数据以八进制整数形式输出 %x 十六进制输出

%g 输出浮点 自动选择较短形式

输出%   %%

 

Scanf函数使用

Scanf(格式控制,地址列表)

Scanf(“a=%f,b=%d,c=%f”,&a,&b,&c);  注意连续输入时的输入方法问题。

输入双精度要使用%lf格式符

 

Putchar(变量或者常量);可以是字符型的,整型的。

Getchar();从输入获得一个字符。

所有getchar()输入值后再按回车,所有gerchar()函数才算得到该值。

 

 

 

第四章       选择结构程序设计

If语句

If(表达式)   关系,逻辑或数值表达式

语句1

[else 语句2]     语句一般以;结束  或用{}括起来  勿出现格式错误

多重循环  if()  else if () else if  else ……..

 

关系运算符和关系表达式

<,<=,>,>=,==,!=   前四个比后两个优先级高 

利用结合性和优先级关系,可以写出一些简洁但稍微复杂的语句。

关系表达式的值为1或0;真或假。

 

逻辑运算符和逻辑表达式

&&(与);||(或);!(非) 用于布尔量(真或假)运算

逻辑表达式的结果亦为布尔量。非0为真,0为假。

逻辑运算符两端不但可以是0或1,亦可以为整型,字符型,浮点型,枚举,指针等纯量型数据。

! 算术运算符  关系运算符 && || 赋值运算符 优先级递减

 

逻辑型变量 (布尔量) _Bool a,b;     C99中新定义

在头文件Stdbool.h bool为变量类型 ture,false 为1,0符号常量

 

条件表达式

(表达式)?(表达式):(表达式)   表达式加;后变为语句。Printf()函数表达式

相当于一个简单的if语句。

if语句的嵌套。要采用整洁清晰的代码形式。

Switch语句实现多分支选择结构 

若用if语句多层嵌套,则显得冗长复杂。

switch(表达式)           类型为整型(字符型)

{

  case 常量1:语句1        若没有break;语句则会输出后面执行语句。

  case 常量2:语句2        case只是标号,任务是让程序从此处开始执行。

  case 常量3:语句3

  case 常量4:语句4

  default : 语句       可以没有 

}

 

 

 

第五章       循环结构程序设计

用来处理需要进行的重复操作。

 

用while语句实现循环

While(表达式)语句       语句就是循环体,循环条件由表达式和循环体中部分语句控制

先判断,后执行。

 

用do…while语句实现循环

do

  语句

while(表达式);     先执行再判断   与while区别于第一次执行

 

用for语句实现循环

for(循环变量赋初值;循环条件;循环变量增值)       无循环条件时与while(1)效用一致

 语句(循环体)

表达式:算术表达式,关系表达式,逻辑表达式,函数表达式,复合表达式…...

 

循环嵌套

几种循环的比较  for语句较强大

改变循环执行的状态

 

break语句,提前终止循环  break;

不执行下面的语句,跳出循环体或switch语句,只能跳一层,只用于循环与switch语句中。

continue语句提前结束本次循环

跳过循环体内下面的所有语句  continue;

 

posted @ 2015-05-23 23:10  boowin  阅读(414)  评论(0编辑  收藏  举报