谭浩强C语言总结.docx
- 文档编号:26909855
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:13
- 大小:69.42KB
谭浩强C语言总结.docx
《谭浩强C语言总结.docx》由会员分享,可在线阅读,更多相关《谭浩强C语言总结.docx(13页珍藏版)》请在冰豆网上搜索。
谭浩强C语言总结
RevisedonNovember25,2020
谭浩强C语言总结
《C语言程序设计》课程设计报告
第一部分《C语言程序设计》知识点梳理
(注《C语言程序设计》所涉及到的重要知识点及对这些知识点的理解)
一、程序设计
1、计算机语言
(1)机器语言
(2)汇编语言
为客服机器语言的缺点,用符号语言来表示指令(英文字母、数字)的符号语言为符号汇编语言(又称低级语言)。
一条符号语言指令对应转换为一条机器指令;转换的过程称为“代真”或“汇编”
(3)高级语言
客服低级语言的缺点,接近人们习惯用的自然语言和数学语言;用英语单词表示的指令及语句。
功能性强,不依赖于具体机器,对任何型号计算机都适用(或做很少修改)。
〔C语言、FORTRAN、QBASIC…〕
C语言特点①语言简洁、紧凑,使用方便、灵活②运算符丰富③数据类型丰富④具有结构化的控制语句⑤语法限制不太严格,程序设计自由度大⑥C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作⑦用C语言编写的程序可移植性好⑧生成目标代码质量高,程序执行效率高
2、运行C程序的步骤及方法
①上机输入和编辑源程序,以文件形式存档。
.c作为后缀,生成源程序文件
②对源程序进行编译。
进行预处理,连接其它部分组成完整的、可进行正式编译的源程序(检查、转换)
③进行连接处理。
把所有编译后得到的目标模块连接装配,与函数库想连接成一个整体,生成一个可供计算机执行的目标程序
④运行可执行程序,得到运行结果。
二、算法
1、算法的概念
广义的说是解决一个问题所采用的方法和步骤(太极拳动作图解、乐谱)
计算机算法分为两大类:
1.数值运算算法(求数值解)
2.非数值运算算法(常用于事务管理领域)
2、算法的特性
①有穷性:
一个算法应包含有限的操作步骤
②确定性:
算法中的每一个步骤都应当是确定的,而不是含糊的、模棱两可的(算法的含义应当是唯一的,而不应当产生“歧义性”)
③有零个或多个输入:
在执行算法时需要从外界取得必要的信息
④有一个或多个输出:
⑤有效性:
算法中的每一个步骤都应当有效的执行,并得到确定的结果
3、算法描述
(1)自然语言
即人们日常使用的语言。
用自然语言表示通俗易懂,但文字冗长,有歧义。
在描述包含分支和循环时不方便
(2)流程图
流程图是用一些图框来表示各种操作。
用图形法表示算法,直观形象,易于理解。
流程图包括:
①表示操作的框②带剪头的流程线(流程线不要忘记画箭头,反应流程的先后)③框内外必要的文字说明
流程图三种基本结构:
①顺序结构
②选择结构
③循环结构:
{ⅰ当型(while)循环;ⅱ直到(until)型循环}
N-S流程图表示算法:
全部算法写在一个矩形框内
特点:
比文字描述直观、形象、易于理解;比传统流程图紧凑易画,废除了流程线,算法由各个基本结构按顺序组成;流程图中的上下顺序就是执行时的顺序;表示的算法都是结构化的算法。
结构化的算法是由一些基本结构顺序组成的;在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本结构范围之内
(3)伪代码:
介于自然语言和计算机语言之间的文字和符号来描述算法。
它不用图形符号,书写方便,格式紧凑,修改方便,容易看懂,便于向计算机语言算法过渡。
伪代码写算法并无固定的、严格的语法规则,可以用多种语言。
只需把意思表达清楚,便于书写和阅读,书写的格式要写成清晰易读的格式
用伪代码写的算法易于修改
设计算法的目的是为了实现算法,所以不仅要考虑如何设计一个算法,也要考虑如何实现一个算法。
在用流程图或伪代码描述一个算法后还要转换成C语句。
三、基本数据类型及C语句
C语句分为以下5类
⑴控制语句
①if()…else…(条件语句)
②for()…(循环语句)
③while()…(循环语句)
④do…while()(循环语句)
⑤contiune(结束本次循环语句)
⑥break(终止执行switch或循环语句)
⑦switch(多分支选择语句)
⑧return(从函数返回语句)
⑨goto(转向语句,在结构化程序中基本不用goto语句)
⑵函数调用语句。
函数调用语句由一个函数加一个分号构成,如:
printf(“howdoyoudo!
”);
⑶表达式语句。
在表达式语句由一个表达式加一个分号构成,最典型的是,由赋值表达式构成一个赋值语句。
如:
a=3是一个赋值表达式
而a=3;是一个赋值语句
一个表达式的最后加一个分号就成了一个语句
⑷空语句。
什么也没有。
用来作为流程的转向点,也可以用来作为循环语句中的循环体
⑸复合语句。
用“{}”把一些语句和声明括起来成为复合语句
四、结构化程序设计
1、顺序结构
:
各语句是按从上到下的顺序执行的,执行完上一个语句就自动执行下一个语句,是五条件的,不必作任何判断。
2、选择结构
:
需要根据某个条件是否满足来判断是否执行指定的操作任务,或者从给定的两种或多种操作选择其一。
(1)If语句
【1】if(表达式)语句1明有else句子部分
【2】if(表达式)
语句1
Else
语句2
【3】if(表达式)语句1
Elseif(表达式2)语句2
Elseif(表达式3)语句3
……
Elseif(表达式m)语句m
Else语句m+1
(2)Switch语句
(3)Switch(表达式)
{
Case常量1:
语句1
Case常量2:
语句2
……
Case常量n:
语句n
Default:
语句n+1
}
3、循环结构
4、模块化程序设计——函数
在前面已经介绍过,C源程序是由函数组成
虽然在前面各章的程序中大都只有一个主函数main(),但实用程序往往由多个函数组成。
数是C源程序的基本模块,通过对函数模块的调用实现特定的功能。
C语言中的函数相当于其它高级语言的子程序。
C语言不仅提供了极为丰富的库函数(如TurboC,MSC都提供了三百多个库函数),还允许用户建立自己定义的函数。
把自己的算法编成一个个相对独立的函数模块,然后用调用的方法来使用函数。
可以说C程序的全部工作都是由各式各样的函数完成的,所以也把C语言称为函数式语言。
由于采用了函数模块式的结构,C语言易于实现结构化程序设计。
使程序的层次结构清晰,便于程序的编写、阅读、调试。
在C语言中可从不同的角度对函数分类。
从函数定义的角度看,函数可分为库函数和用户定义函数两种。
1)库函数:
由C系统提供,用户无须定义,也不必在程序中作类型说明,只需在程序前包含有该函数原型的头文件即可在程序中直接调用。
在前面各章的例题中反复用到printf、scanf、getchar、putchar、gets、puts、strcat等函数均属此类。
2)用户定义函数:
由用户按需要写的函数。
对于用户自定义函数,不仅要在程序中定义函数本身,而且在主调函数模块中还必须对该被调函数进行类型说明,然后才能使用。
C语言的函数兼有其它语言中的函数和过程两种功能,从这个角度看,又可把函数分为有返回值函数和无返回值函数两种。
1)有返回值函数:
此类函数被调用执行完后将向调用者返回一个执行结果,称为函数返回值。
如数学函数即属于此类函数。
用户定义的这种要返回函数值的函数,必须在函数定义和函数说明中明确返回值的类型。
无返回值函数:
此类函数用于完成某项特定的处理任务,执行完成后不向调用者返回函数值。
这类函数类似于其它语言的过程。
由于函数无须返回值,用户在定义此类函数时可指定它的返回为“空类型”,空类型的说明符为“void”。
从主调函数和被调函数之间数据传送的角度看又可分为无参函数和有参函数两种。
1)无参函数:
函数定义、函数说明及函数调用中均不带参数。
主调函数和被调函数之间不进行参数传送。
此类函数通常用来完成一组指定的功能,可以返回或不返回函数值。
2)有参函数:
也称为带参函数。
在函数定义及函数说明时都有参数,称为形式参数(简称为形参)。
在函数调用时也必须给出参数,称为实际参数(简称为实参)。
进行函数调用时,主调函数将把实参的值传送给形参,供被调函数使用。
C语言提供了极为丰富的库函数,这些库函数又可从功能角度作以下分类。
1)字符类型分类函数:
用于对字符按ASCII码分类:
字母,数字,控制字符,分隔符,大小写字母等。
2)转换函数:
用于字符或字符串的转换;在字符量和各类数字量(整型,实型等)之间进行转换;在大、小写之间进行转换。
3)目录路径函数:
用于文件目录和路径操作。
4)诊断函数:
用于内部错误检测。
图形函数:
用于屏幕管理和各种图形功
5)
能。
6)输入输出函数:
用于完成输入输出功能。
7)接口函数:
用于与DOS,BIOS和硬件的接口。
8)字符串函数:
用于字符串操作和处理。
9)内存管理函数:
用于内存管理。
10)数学函数:
用于数学函数计算。
11)日期和时间函数:
用于日期,时间转换操作。
12)进程控制函数:
用于进程管理和控制。
13)其它函数:
用于其它各种功能。
五、派生数据类型
1、数组:
一批具有同名的同属性的数据组成一个数组。
⑴一维数组类型符数组名[常量表达式]
①数组名的命名规则和变量名相同,遵循标识符命名规则②在定义数组时,需要指定数组中元素的个数,"[]"中的常量表达式用来表示元素个数,即数组长度。
③常量表达式中可以包括常量和符号常量。
如:
inta[4+5]
引用数组名[下标]定义数组时用到的"数组名[常量表达式]"和引用数组元素时用的数组名[下标]形式相同,但含义不同。
初始化时给数组中的一部分元素赋值,系统会给其余元素赋值为0。
⑵二维数组:
类型说明符,数组名[常量表达式][常量表达式];行列
用矩阵行式表示二维数组,是逻辑上的概念,能形象地表示出行列关系,而在内存中,各元素是连续存放的,不是二维的,是线性的。
引用数组名[下标][下标]。
如果对所有元素赋初值(即提供全部初始数据),则定义数组时对第一组的长度可以不指定,但第二维的长度不能省。
⑶字符数组(用来存放字符数据的数组)如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元自动定为空字符(即‘\0’)
如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。
在C语言中,是将字符串作为字符数组来处理的。
以字符‘\0’作为结束标志,用字符常量可使字符数组初始化
字符数组的输入输出:
ⅰ.逐个字符输入输出;ⅱ.将整个字符串一次输入或输出。
系统把空格字符作为输入的字符串之间的的分隔符
scanf函数中的输入项如果是字符数组名,不要再加地址符&
⑷字符串处理函数①puts(字符数组)用puts函数输出的字符串可以包含转义字符②gets(字符数组)从终端输入一个字符串到字符数组,并且得到一个函数值,该涵数值是字符数组的起始地址。
用puts和gets函数只能输出或输入一个字符串③字符串连接函数strcat(字符数组1,字符数组2)
把两个字符数组中的字符串连接起来,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址④strcpy(字符数组1,字符串2)将字符串2复制到字符数组1中去。
不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。
可以用strncpy函数将字符串2中前几个字符复制到字符数组1中去,但复制的字符数n不应多余str1中原有的字符(不包括‘\0’)⑤strcmp(字符串,字符串2)如全部相同,则认为两个字符串相;若出现不相同的字符,则以第一对不相同的字符比较结果为准,在英文字典中位置在后面的“大”
⑥strlen(字符数组)测试字符串的长度
⑦strlur(字符串)将字符串中大写字母换成小写字母
⑧strupr(字符串)将字符串中小写字母换成大写字母
在使用字符串处理函数时,应当在程序文件的开头用#include“”
2、指针
⑴指针是一个地址,而指针变量是存放地址的变量“*”表示“指向”类型名*指针变量名。
指针变量中只能存放地址(指针),不要将一个整数赋给一个指针变量
⑵指针变量作为函数参数函数的调用可以(只可以)得到一个返回值(即函数值)而使用指针变量作参数可以得到多个变化了的值。
⑶通过指针引用数组:
p+1指向同一数组中的下一个元素;p-1指向同一数组中的上一个元素。
直接用p2-p1就可以知道他们所指元素的相对距离*(p--)相当于先对p进行“*”运算,在使p自减
二维数组a的有关指针
*([1]+2),*(*(a+1)+2),a[1][2]表示1行2列元素的值。
注意:
不要把&a[i]简单地理解为a[i]元素的物理地址,因为并不存在a[i]这样一个实际的数据存储单元。
它只是一种地址的计算方法,能得到第i行的首地址。
&a[i]和a[i]的值是一样的,但他们的含义是不相同的。
&a[i]或a+i指向行,而a[i]或*[a+i]指向列。
当列下标为0时,&a[i]和a[i](即a[i]+j)值相同,即他们表示同一地址,但应注意他们所指的对象是不同的,即指针的基类型是不同的,*(a+i)只是a[i]的另一种表示形式,不要简单的认为*(a+i)是“a+i”所指单元中的内容。
在一维数组中a+i所指的是一个数组元素的存储单元,在该单元中有具体值。
对二维数组a+i不是指向具体存储单元而是指向行。
在二维数组中a+i;a[i];*(a+i);&a[i];&a[i][0]的值相同
⑷通过指针引用字符串。
在C语言中,字符串是存放在字符数组中的。
①用字符数存放一个字符串,可以通过数组名和下标引用字符串一个字符,也可以通过数组名和格式声明“%s”输出该字符串
②用字符指针变量指向一个字符串常量,通过字符指针变量引用字符串常量。
“while(*from!
=0)”和“while(*from)”是等价的
数组可以在定义时对各元素赋初值,但不能用赋值语句对字符数组中全部元素整体赋值。
字符数组中各元素的值是可以改变的(可以对他们再赋值),到字符指针变量指向的字符串常量中的内容是不可以被取代的
3、结构体:
由不同类型数据组成的组合型的数据结构,就称为结构体。
第二部分XX程序的设计与实现
(注:
对所设计及实现的程序进行详细介绍,具体实现代码建议以代码文件另外提交)
一、功能介绍计算输入日期是该年的第几天
二、涉及到的数据类型整型
三、程序算法(或流程)描述
begin
a=year
b=month
c=day
switch
b=1,sum=0
b=2,sum=31
b=3,sum=59
b=4,sum=90
b=5,sum=120
b=6,sum=151
b=7,sum=181
b=8,sum=212
b=9,sum=243
b=10,sum=273
b=11,sum=304
b=12,sum=334
sum=sum+c
ifa/400=0;a/4=0,a/100!
=0
printfsum
elseifb>2sum=sum+1
printfsum
elsesum=sum
printfsum
end
四、程序代码
见源文件
5、运行结果举例
第三部分总结
(注:
设计及实现xxx程序的心得体会,学习《C语言程序设计》的心得体会、疑惑、建议等)
学习C语言需要有实践。
上机不断的犯错、改正、犯错、改正,我们才能真正的学好它。
设计一个程序需要有一个清晰的思路,从问题的实际出发,一步一步往下走。
面对复杂的问题可以采用分步法。
从上到下或者从下到下,由部分到整体,逐一完成。
没有实践就不会有成果。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 谭浩强 语言 总结