C语言程序设计复习提纲
更新时间:2023-03-17 21:23:01 阅读量: 综合文库 文档下载
C语言程序设计复习提纲
一、Visual C++6.0开发环境
1、了解Visual C++6.0的安装过程;
2、了解Visual C++6.0的工作界面,菜单和工具栏的使用; ▲二、掌握C语言程序运行的过程
1、编辑:是指把按照C语法规则编写的程序代码通过编辑器(Visual C++ 6.0,Turbo C 3.0)输入计算机,并存盘。在存盘时,C源文件的扩展名为 .c
2、编译:对源程序进行编译,即将源程序转换为扩展名为.obj的二进制代码;即生成该源文件的目标代码。
3、连接:将用户程序生成的多个目标代码文件(.obj)和系统提供的库文件(.lib)中的某些代码连接在一起,生成一个可执行文件(.exe)。
4、执行:执行生成的可执行代码,并输出结果。
5、调试:是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。
▲三、结构化程序设计的基本概念 1、概念
以模块化设计为中心,将待开发的软件系统划分为若干个相互独立的模块,将原来较为复杂的问题化简为一系列简单模块的设计,任何模块都可以使用一些基本的结构来实现,任何复杂的程序,都可以使用这些基本结构按一定的顺序组合起来,这些基本结构的特点都是只有一个入口、一个出口,这样的程序设计方法称为结构化程序设计。
2、基本思想
结构化程序设计的基本思想是采用\自顶向下,逐步细化、模块化设计、结构化编码\的程序设计方法和\单入口单出口\的控制结构。自顶向下、逐步细化的程序设计方法从问题本身开始,经过逐步细化,将解决问题的步骤分解为由基本程序结构模块组成的结构化程序框图;\单入口单出口\的思想认为一个复杂的程序,如果它仅是由顺序、选择和循环三种基本程序结构通过组合、嵌套构成,那么这个新构造的程序一定是一个单入口单出口的程序。据此就很容易编写出结构良好、易于调试的程序来。
3、三种基本结构 ⑴顺序结构 ⑵选择结构 ⑶循环结构
4、三种基本结构的特点 ⑴只有一个入口 ⑵只有一个出口
⑶每一个基本结构中的每一部分都有机会执行到 ⑷结构内不存在“死循环” 5、设计原则 ⑴自顶向下 ⑶逐步细化 ⑶模块化设计 ⑷结构化编码
6、结构化程序设计方法
⑴要求把程序的结构规定为顺序、选择和循环三种基本机构,并提出了自顶向下、逐步求精、模块化程序设计等原则。
⑵结构化程序设计是把模块分割方法作为对大型系统进行分析的手段,使其最终转化为
- 1 -
三种基本结构,其目的是为了解决由许多人共同开发大型软件时,如何高效率地完成可靠系统的问题。
⑶程序的可读性好、可维护性好成为评价程序质量的首要条件。 ⑷缺点:程序和数据结构松散地耦合在一起。解决此问题的方法就是采用面向对象的程序设计方法(OOP)。
▲四、C程序的基本组成: C程序是由若干个函数构成的,至少有一个主函数main(),各函数在程序中的前后位置是任意的。
C程序的基本组成:声明区、主程序区、函数定义区。 1、声明区
处在程序文件的所有函数的外部,一般包含:包含头文件、宏定义、类定义、结构体定义、函数声明、全局变量声明、条件编译等。
2、主程序区
主程序以main()函数开始,main()函数(主函数)是程序运行时的入口,包含
局部变量的声明、函数调用、一般运算、结构控制、对象与结构的处理、文件处理等。 3、函数定义区
函数的定义包含函数说明和函数体两部分。 ▲五、C的数据类型、运算符、表达式
整型int
单精度型float
实型(浮点型)
基本类型
字符型
双精度型double
单字符型char
宽字符型w-char
逻辑型bool 枚举型类型enum
空类型(无值类型)void
数组类型 构造类型
结构类型struct 联合型类型union
数据类型
指针类型 类类型class
图1 C语言数据类型
1、常量和变量
⑴、常量:在程序中直接用符号(文字)表示的数据 ? 整型常量:表示形式有十进制、八进制(以0开头)和十六进制(以0x或0X开头)。整型常量可以后缀字母L(或l)表示长整数,后缀字母U(或u)表示无符号整数。
? 实型常量(浮点型常量):表示形式有一般形式和指数形式。实型常量缺省为double型,如后缀f或F,则为float型。
? 字符常量:用单引号括起来的一个字符。不可显示的字符可用转义序列的方法来表
- 2 -
示(见P26)。
? 字符串常量:用双引号括起来的字符序列。 ? 布尔常量:false,true。 ? 符号常量:
? #define 宏名 常数 例:下列哪些常量是合法的常量:
①12.7, ②-6.87E-2, ③0XAbCD, ④、0625L, ⑤87U, ⑥-0x98C2 ⑵变量:指程序在运行时其值可改变的量。
? 变量应先定义(声明其类型和名称)后使用; ? 变量定义的一般形式为:
? < 数据类型 > <变名1>,<变名2>,?,<变名n>;
? 在定义一个变量的同时,也可以给它赋以初值。 ? 变量的命名规则(见P9) 2、数据类型
⑴、基本数据类型(见P23)
⑵、构造类型又称为组合类型,它是由基本类型按照某种规则组合而成的。 ? 数组:是由具有相同数据类型的元素组成的集合。 ? 结构体:是由不同的数据类型构成的一种混合的数据结构,构成结构体的成员的数据类型一般不同,并且在内存中分别占据不同的存储单元。
? 共用体:是类似于结构体的一种构造类型,与结构体不同的是构成共同体的数据成员共用同一段内存单元。
? 枚举:是将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。 ⑶、指针类型变量用于存储另一变量的地址,而不能用来存放基本类型的数据。它在内存中占据一个存储单元。
⑷、类是一个数据类型,它定义的是一种对象类型,由数据和方法组成,描述了属于该类型的所有对象的性质。
3、运算符和表达式
⑴、算术运算符和算术表达式
注意:int i=1.2*3; //结果为3,而不是3.6。 int i=5/3结果为1。 ⑵、赋值运算符和赋值表达式 注意:
? 赋值运算符的结合性是从右至左的
? 复合赋值运算符:int a=12; a+=a-=a*=a; ⑶、关系运算符和关系表达式 注意:
? 关系运算符的优先级低于算术运算符。例如:a+b>c 等价于 (a+b)>c,a!=b>c 等价于 a!=(b>c)
? “=”与“==”的区别
? 关系运算符的优先级低于算术运算符 ⑷、逻辑运算符与逻辑表达式 注意:
? 逻辑非的优先级最高,逻辑与次之,逻辑或最低 ? 逻辑运算符的短路特性。 int x,y,z; x=y=z=-1; ++x&&++y||++z; printf(“x=%d\\ty=%d\\tz=%d\\n”,x,y,z);(结果:0 -1 0) x=y=z=-1; ++x||++y&&++z; printf(“x=%d\\ty=%d\\tz=%d\\n”,x,y,z); (结果:0 0
- 3 -
-1)
x=y=z=-1; ++x&&++y&&++z; printf(“x=%d\\ty=%d\\tz=%d\\n”,x,y,z); (结果:0 -1 -1)
⑸、自增(++)、自减(--)运算符 注意:自增(++)、自减(--)运算符的前置用法和后置用法的区别。 int i, j, k; int m, n, p; i = 8; j = 10; k = 12; /* 自增在操作数之前 */
m = ++i;printf(\(结果:9 9) /* 自减在操作数之后 */
n = j--; printf(\(结果:9 10) /* 自增、自减的混合运算 */
p = (++m)*(n++)+(--k); printf(\(结果:11 111)
⑹、条件运算符
表达式1?表达式2:表达式3 注意:
? 结合性是自右向左。a>b?a:c>d?c:d相当于a>b?a:(c>d?c:d)
? 条件运算符的优先级别高于赋值运算符,低于关系运算符和算术运算符。如: a>b?a-b:b-a相当于a>b?(a-b):(b-a) ⑺、位运算符
位运算符是对其操作数按其二进制形式逐位进行运算,参加位运算的操作数必须为整数。
如:int a=5,b=6;a&b=4;a|b=7;a^b=3;~b=249;b<<2=28;b>>2=1。 ⑻、逗号运算符
表达式1, 表达式2, ??, 表达式n 注意:
自左至右,依次计算各表达式的值,“表达式n” 的值即为整个逗号表达式的值。如:a = 3 * 5, a * 4, a + 5的值为20。
4、运算符的优先级与结合性
⑴、所谓结合性是指,当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。
自左至右的结合方向,称为左结合性。反之,称为右结合性。
结合性是C语言的独有概念。除单目运算符、赋值运算符和条件运算符是右结合性外,其它运算符都是左结合性。
⑵、表达式求值
? 按运算符的优先级高低次序执行。例如,先乘除后加减。
? 如果在一个运算对象(或称操作数)两侧的运算符的优先级相同,则按C语言规定的结合方向(结合性)进行。
例如,算术运算符的结合方向是“自左至右”,即:在执行“a – b + c”时,变量b先与减号结合,执行“a - b”;然后再执行加c的运算。
▲六、顺序结构程序设计——数据的输入和输出
1、格式化输出——printf()函数和格式化输入——scanf()函数
⑴、格式化输出函数(printf())和格式化输入函数(scanf())都包含在头文件“stdio.h”中。
⑵、格式化输出——printf()函数
? printf()函数的一般格式如下:printf(\格式字符串\,输出项表]);
- 4 -
如:printf(“x=%d”,x)
? 输出项表:要输出的数据项(可以没有,多个时以“,”分隔) ? 格式控制串:包含两种信息
格式说明: %[修饰符]格式字符 ,用于指定输出格式 普通字符或转义序列:原样输出。 ? 格式控制字符: 格式转换字符 含义 举例 %d,%i 以十进制整数输出 int a=65;printf(“%d”,a)//65 %x,%X 以十六进制数输出无符号整数 int a=65;printf(“%x”,a)//41 %o 以八进制数输出无符号整数 int a=65;printf(“%o”,a)//101 %u 以十进制数输出无符号整数 int a=-1;printf(“%u”,a)//65535 %c 输出一个字符型数据 int a=65;printf(“%c”,a)//A %s 输出一个字符串 printf(“%s”,“abcd”) %e,%E 以指数形式输出一个浮点型数据float x=984.235497426; (小数位数缺省值为6位) printf(\%f 以十进制小数形式输出一个浮点float x=984.235432426; 型数据(小数位数缺省值为6位) printf(\%g,%G 按照%e,%f输出宽度较短的格式float x=9.8; 输出,不输出无意义的0 printf(\⑶、格式化输入——scanf()函数scanf()函数的一般格式 scanf(\格式字符串\输入项首地址表); ? 格式字符串。格式字符串可以包含3种类型的字符:格式指示符、空白字符(空格、Tab键和回车键)和非空白字符(又称普通字符)。
格式指示符与printf()函数的相似,空白字符作为相邻2个输入数据的缺省分隔符,非空白字符在输入有效数据时,必须原样一起输入。
? 输入项首地址表──由若干个输入项首地址组成,相邻2个输入项首地址之间,用逗号分开。
输入项首地址表中的地址,可以是变量的首地址,也可以是字符数组名或指针变量。 变量首地址的表示方法: &变量名 其中“&”是地址运算符。 ? 数据输入操作
? 如果相邻2个格式指示符之间,不指定数据分隔符(如逗号、冒号等),则相应的2个输入数据之间,至少用一个空格分开,或者用Tab键分开,或者输入1个数据后,按回车,然后再输入下1个数据。
例如,scanf(\
假设给num1输入12,给num2输入36,则正确的输入操作为:12□36↙ 或者:12↙ 36↙
注:使用“↙”符号表示按回车键操作,在输入数据操作中的作用是,通知系统输入操作结束。
? “格式字符串”中出现的普通字符(包括转义字符形式的字符),务必原样输入。 例如,scanf(\
假设给num1输入12,给num2输入36,正确的输入操作为:12,36↙
▲七、选择结构程序设计 1、if语句
⑴、if语句的一般格式
- 5 -
不需要参数,则用“void”表示,主函数main()例外。
⑵、有参函数的一般形式
函数类型 函数名( 数据类型 参数[,数据类型 参数2??] ) { 说明语句部分; 可执行语句部分; }
有参函数比无参函数多了一个参数表。调用有参函数时,调用函数将赋予这些参数实际的值。
为了与调用函数提供的实际参数区别开,将函数定义中的参数表称为形式参数表,简称形参表。
例:定义一个函数,用于求两个数中的大数。
解:/*功能:定义一个求较大数的函数并在主函数中调用*/ int max(int n1, int n2) /*定义一个函数max()*/ { return (n1>n2?n1:n2); } main() {
int max(int n1, int n2); /*函数说明*/ int num1,num2;
printf(\; scanf(\;
printf(\; }
⑶、说明
①函数定义不允许嵌套。
在C语言中,所有函数(包括主函数main())都是平行的。一个函数的定义,可以放在程序中的任意位置,主函数main()之前或之后。但在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义。
②空函数──既无参数、函数体又为空的函数。其一般形式为: [函数类型] 函数名(void) { }
③在老版本C语言中,参数类型说明允许放在函数说明部分的第2行单独指定。 2、函数的返回值与函数类型 ⑴.函数返回值与return语句
有参函数的返回值,是通过函数中的return语句来获得的。 ①return语句的一般格式: return ( 返回值表达式 );
②return语句的功能:返回调用函数,并将“返回值表达式”的值带给调用函数。 注意:调用函数中无return语句,并不是不返回一个值,而是一个不确定的值。为了明确表示不返回值,可以用“void”定义成“无(空)类型”。
⑵.函数类型
在定义函数时,对函数类型的说明,应与return语句中、返回值表达式的类型一致。 如果不一致,则以函数类型为准。如果缺省函数类型,则系统一律按整型处理。 3、对被调用函数的说明和函数原型
在ANSI C新标准中,采用函数原型方式,对被调用函数进行说明,其一般格式如下: 函数类型 函数名(数据类型[ 参数名][, 数据类型[ 参数名2]?]); C/C语言同时又规定,在以下2种情况下,可以省去对被调用函数的说明:
- 16 -
①当被调用函数的函数定义出现在调用函数之前时。因为在调用之前,编译系统已经知道了被调用函数的函数类型、参数个数、类型和顺序。
②如果在所有函数定义之前,在函数外部(例如文件开始处)预先对各个函数进行了说明,则在调用函数中可缺省对被调用函数的说明。
4、函数的调用
一般形式为: 函数名([实际参数表])
切记:实参的个数、类型和顺序,应该与被调用函数所要求的参数(形参)个数、类型和顺序一致,才能正确地进行数据传递。
⑴、调用函数方式:
①函数表达式。函数作为表达式的一项,出现在表达式中,以函数返回值参与表达式的运算。
②函数语句。C/C语言中的函数可以只进行某些操作而不返回函数值,这时的函数调用可作为一条独立的语句。
③函数实参。函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须是有返回值的。
⑵、说明:
①调用函数时,函数名称必须与具有该功能的自定义函数名称完全一致。
②实参在类型上按顺序与形参,必须一一对应和匹配。如果类型不匹配,C编译程序将按赋值兼容的规则进行转换。如果实参和形参的类型不赋值兼容,通常并不给出出错信息,且程序仍然继续执行,只是得不到正确的结果。
③如果实参表中包括多个参数,对实参的求值顺序随系统而异。有的系统按自左向右顺序求实参的值,有的系统则相反。Turbo C和MS C是按自右向左的顺序进行的 。
5、函数的形参与实参
⑴、函数的参数分为形参和实参两种,作用是实现数据传送。
形参出现在函数定义中,只能在该函数体内使用。发生函数调用时,调用函数把实参的值复制1份,传送给被调用函数的形参,从而实现调用函数向被调用函数的数据传送。 例:实参对形参的数据传递。 /*实参对形参的数据传递。*/ void main() {
void s(int n); /*说明函数*/
int n=100; /*定义实参n,并初始化*/ s(n); /*调用函数*/
printf(\输出调用后实参的值,便于进行比较*/ }
void s(int n) {
int i;
printf(\输出改变前形参的值*/ for(i=n-1; i>=1; i--) n=n+i; /*改变形参的值*/
printf(\输出改变后形参的值*/ }
⑵、说明:
①实参可以是常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。
②形参变量只有在被调用时,才分配内存单元;调用结束时,即刻释放所分配的内存单
- 17 -
元。
因此,形参只有在该函数内有效。调用结束,返回调用函数后,则不能再使用该形参变量。
③实参对形参的数据传送是单向的,即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。
④实参和形参占用不同的内存单元,即使同名也互不影响。 6、函数的嵌套调用和递归调用
⑴、函数的嵌套调用 指在执行被调用函数时,被调用函数又调用了其它函数。 如图所示:
⑵、函数的递归调用
函数的递归调用是指,一个函数在它的函数体内,直接或间接地调用它自身。 7、内部变量与外部变量 ⑴、内部变量
在一个函数内部说明的变量是内部变量,它只在该函数范围内有效。只有在包含变量说明的函数内部,才能使用被说明的变量,在此函数之外就不能使用这些变量了。所以内部变量也称“局部变量”。
⑵、关于局部变量的作用域还要说明以下几点:
①主函数main()中定义的内部变量,也只能在主函数中使用,其它函数不能使用。同时,主函数中也不能使用其它函数中定义的内部变量。因为主函数也是一个函数,与其它函数是平行关系。
②形参变量也是内部变量,属于被调用函数;实参变量,则是调用函数的内部变量。 ③允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。
④在复合语句中也可定义变量,其作用域只在复合语句范围内。 ⑶、外部变量
①在函数外部定义的变量称为外部变量。
外部变量不属于任何一个函数,其作用域是:从外部变量的定义位置开始,到本文件结束为止。
②外部变量可被作用域内的所有函数直接引用,所以外部变量又称全局变量。 例:输入长方体的长(l)、宽(w)、高(h),求长方体体积及正、侧、顶三个面的面积。 解:/*功能:利用全局变量计算长方体的体积及三个面的面积*/ int s1,s2,s3;
int vs(int a,int b,int c)
- 18 -
{
int v;
v=a*b*c; s1=a*b; s2=b*c; s3=a*c; return v;
}
main() {
int v,l,w,h;
printf(\: \scanf(\v=vs(l,w,h);
printf(\}
▲十一、指针
1、指针和指针变量的概念 ⑴、指针──即地址
一个变量的地址称为该变量的指针。通过变量的指针能够找到该变量。 ⑵指针变量──专门用于存储其它变量地址的变量 2、指针变量的定义与应用
⑴、指针变量的定义:数据类型 *指针变量[, *指针变量2??]; ⑵、取地址运算(&)和指针运算(*) 取地址运算的格式:&变量 指针运算的格式:*指针变量 例:#include
int a,b; int *p1,*p2; a=100; b=10; p1=&a; p2=&b;
printf(\printf(\printf(\printf(\printf(\
printf(\}
例:编写程序,实现从键盘输入两个数,输出时从大到小排列(利用指针概念), #include
int *p1,*p2,*p,a,b; scanf(\ p1=&a;
- 19 -
p2=&b; if(a
{ p=p1; p1=p2; p2=p;} printf(\
printf(\}
3、指针与数组 ⑴指针和一维数组
数组名代表数组的首地址,是一个常量。
数组指针:就是指向数组元素地址的指针变量。 例:从n个数中找出最大值和最小值(见P180) ⑵指针和二维数组
用数组名表示二维数组的行地址 数组元素三种形式引用:
⑴ a[i][j] 下标法
⑵ *(a[i]+j) 用一维数组名 ⑶ *(*(a+i)+j) 用二维数组名 ⑶指针数组
指针数组:数组的所有元素都是存放指针的数组称为指针数组。 即:指针数组中每一个元素(下标变量)都是指针变量。 指针数组的定义形式:
<存储类型> <数据类型> <*指针数组名>[数组长度][={地址列表}]; 4、指针与字符串
⑴将字符串的首地址赋给指针,用字符指针变量来处理字符串。 ⑵字符指针变量与字符指针数组
字符数组和字符指针变量都能实现字符串的存储与运算,但两者之间还是有区别的,主要包括以下几点:
①字符数组由若干元素组成,每个元素存放一个字符; 字符指针变量存放的是字符串的首地址。 ②赋值方式不同:
不能用赋值语句给字符数组赋值。 char str[14];
str=“I love china!” 这是错误的。 字符指针变量可以采用下面的形式赋值: char *p;
p=“china!” 这是正确的。
但要注意赋给指针变量p的不是字符串,而是字符串的首地址。 定义一个数组,在编译时分配存放n个元素的存储空间; 定义指针变量只分配存放一个地址的空间。 5、指针与函数 ⑴函数指针
函数名就代表函数的入口地址。
函数指针:函数的入口地址称为函数指针。即指向函数的指针变量为函数指针。 函数指针定义格式:
<存储类型> <数据类型> (*指针变量名)(); 其中:“存储类型”是函数指针本身的存储类型;
- 20 -
正在阅读:
C语言程序设计复习提纲03-17
政府公共关系网上作业多选题全集01-08
植物名录10-18
瓜蒌薤白白酒汤的方药药理及临床治验06-02
过程与分析作业04-15
项目质量自检体系(报质量监督丰)05-25
阅读综合练习七01-28
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 提纲
- 程序设计
- 复习
- 语言
- 土地清查土地利用现状和权属情况调查报告xx - 图文
- 2016年房地产经纪人《房地产经纪相关知识》出题规律每日一讲(1月23日)
- 量化投资模型系列之GARP -
- 基层党组织换届选举材料汇编
- 三极管接成二极管的特点与用途
- 打印版 2013年陕西省教师资格证考试
- 单选题及答案
- 名校讲坛人教版历史九年级下册第一单元苏联社会主义道路的探索导学案带答案
- 《新编基础物理学答案》 - 第9章
- 《明史》有关靖江王世系及爵级的几处错误 - 图文
- 读《社会学思想名家》及其他书目有感
- 第一学期西南交通大学英语III第1次作业答案
- 2012年期末考试题(职业生涯规划A卷)
- 船员航海气象新版大副试题
- 宁大人文地理历年考研试题 - 图文
- 财产保险试题库
- 基于组态软件离合器总成试验台监控系统设计 - 图文
- 九年级语文上册《扁鹊见蔡桓公》复习资料(语文版)
- 湖南省娄底市2018年中考英语试卷(WORD版)
- 自考 2012年管理系统中的计算机应用 第二章习题