《二级c语言培训》由会员分享,可在线阅读,更多相关《二级c语言培训(268页珍藏版)》请在金锄头文库上搜索。
1、全国计算机等级考试二级c程序设计(2009版)1 实实在在学知识 顺顺利利过考试二级C语言考试介绍n考核内容:二级定位为程序员,考核内容包括公共基础知识和程序设计。所有科目对基础知识作统一要求,使用统一的公共基础知识考试大纲和教程。二级公共基础知识在各科笔试中的分值比重为30%(30分)。程序设计部分的比重为70%(70分),主要考查考生对程序设计语言使用和编程调试等基本能力。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试二级C语言考试介绍考试形式:二级所有科目的考试包括笔试和上机考试两部分。二级C笔试时间为90分钟,上机时间改为90分钟。 二级C上机应用软
2、件为 Visual C+6.0 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试二级C语言考试介绍 考试成绩划分为优秀、良好、及格和不及格四个等第成绩,笔试或上机考试成绩只有一门及格的,下次考试及格的一门可以免考,两部分考试均及格者,由教育部考试中心颁发统一印制的合格证书。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试二级C语言培训介绍 实实在在学知识 顺顺利利过考试 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试如何学二级C语言n 多看书 n 多实践验证n 多读(背)程序 学C语言,就是学思
3、考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第一章 程序设计基本概念n 什么是C程序?高级语言 机器语言源程序 目标程序 编译程序 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第一章 程序设计基本概念n C语言编译“三部曲”C源程序 目标文件 可执行文件 .C .obj .exe编译连接 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第一章 程序设计基本概念n 程序设计过程1.确定数据结构(输入输出)2.确定算法(解决问题的方法和步骤)3.编码。(算法代码化)4.调试程序。(改错和修正)5.整理和写文档。
4、学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第一章 程序设计基本概念n 结构化程序的三种结构1.顺序结构(先后顺序执行)2.选择结构(执行不同分支的语句)3.循环结构(重复执行多次或一次不执行) 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第一章 程序设计基本概念n模块化结构由一个个功能模块构成的程序结构为模块化结构。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识n C语言示例一输出一行信息:Wellcome to Sinree!程序名为sinree_c1.c
5、。#include /*命令行,表示文件包含*/main()/*主函数*/ printf(“Wellcome to Sinree!n); /*输出信息*/程序输出结果 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识n C语言示例二输入两个整数,输出它们的和。程序名为sinree_c2.c。#include /*文件包含*/main()/*主函数*/ int a,b,c;/*声明定义变量a,b和c*/ scanf(%d%d,&a,&b); /*输入变量a和b的值*/ c=a+b;/*计算c等于a与b的和值*/ printf(c=%dn
6、,c);/*输出变量c的值*/运行程序输入:907 程序结果:C=97 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识nC语言示例三输入两个整数,通过调用函数计算它们的和,然后输出和值。程序名为sinree_c3.c。#include stdio.h/*文件包含*/int sum(int x,int y)/*定义sum函数*/ int z;/*声明定义变量z*/ z=x+y;/*计算z等于x与y的和值*/ return (z);/*将z的值返回,通过sum带回调用处*/main()/*主函数*/ int a,b,c;/*声明定义变量
7、a,b和c*/ scanf(%d%d,&a,&b);/*输入变量a和b的值*/ c=sum(a,b);/*调用sum函数,将得到的值赋给c*/ printf(c=%dn,c);/*输出变量c的值*/运行程序输入:90 7 程序结果 C=97 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识nVC+ 6.0 编辑环境编辑区 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识nVC+ 6.0 编辑环境1.启动Visual C+ 6.0环境2.编辑源程序文件3.编译4.连接5.执行
8、学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识nVC+ 6.0 编辑环境编译CtrlF7连接F7运行Ctrl+F5 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识nC程序的构成和格式 任何函数(包括主函数main())都是由函数说明和函数体两部分组成。 其一般结构如下: 函数类型 函数名(函数参数表) /*函数说明部分*/ 说明语句部分; /*函数体部分*/ 执行语句部分; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计
9、的初步知识nC程序的构成和格式n C语言是由函数组成的 一个C源程序可由一个main函数和若干个其他函数组成,其中必须有一个且只能有一个main函数。 C程序总是从main函数开始执行。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识nC程序的构成和格式n C程序语句和数据定义必须以分号“;”结束。 C语言中,分号是程序语句的结束标志,也是C语句的必要组成部分。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识nC程序的构成和格式nC语言严格区分大小写。如变量a和变量A系统
10、认定为两个不同的变量。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识nC程序的构成和格式nC语言数据输入和输出是由库函数实现的。 C语言本身没有输入输出语句。输入和输入操作是由库函数scanf和printf等函数来实现的。 所以一般C程序都要使用命令行语句 #include 注意:命令行以#开头,行尾不能加 ; 号 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识nC程序的构成和格式nC语言用/*注释内容*/形式进行程序注释在“/*”和“*/”之间的所有字符都为注释符,C
11、系统不对注释符进行编译。(另外可以用/用于单行注释)注意:注释不能嵌套使用。如/* /*/*/ 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识nC程序书写格式建议1. C程序书写格式自由。 对于短语句可以多条语句书写在同一行,也可以将长语句分写在多行。但需要注意,分行时不能将一个单词分开,也不能将双引号引起来的字符串分开。我们提倡一行一条语句的风格。2.C程序书写采用缩进格式。根据语句的从属关系,程序书写时采用缩进格式,使程序语句的层次结构清晰,提高程序的可读性。同一层次语句要左对齐,不同层次的语句要缩进若干个字符,这样程序层次清楚
12、,便于阅读和理解。 3.程序中适当使用注释信息。在书写程序时,适当地加入注释同样可增加程序的可读性。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识nC程序标识符 C语言中 ,符号的命名必须遵守一定的规则,按此规则命名的符号称为标识符。合法的标识符命名规则为: 标识符可以由字母、数字和下划线组成,并且第一个字符必须为字母或下划线。提醒:c语言标识符中大写字母和小写字母被认为是两个不同的字符 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识nC程序标识符分类 n 关键字(由C
13、语言预先规定的,见附录4)n预定义标识符(预先定义且具有特殊含义)n 用户标识符(见名知义) 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识nC程序常量和变量 关于常量、变量及数据类型说明的程序实例,程序名为sinree_c3.c。 #include main() int a=3;/*定义整型变量a并赋予常量值3 */ short r=6; /*定义短整型变量r并赋予常量值6*/ char c=a; /*定义字符变量c并赋予字符常量值a */ float pi=3.14; /*定义单精度实型变量pi并赋予实型常量值3.14 */ d
14、ouble s; /*定义双精度实型变量s */ s=pi*r*r; /*将pi*r*r值赋给s */ printf(int:%d,short:%d,char:%d,float:%d,double:%dn,sizeof(a), sizeof(r),sizeof(c),sizeof(pi),sizeof(s); /*输出各变量占内存的字节数 */ printf(a=%d,r=%d,c=%c,pi=%f,s=%lfn,a,r,c,pi,s);/*输出各变量的值 */ 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识n常量 :在程序运行过程
15、中,其值不能改变的量。n根据数据类型可以分为数值型(有正、负之分)【 整型常量(不带小数点)、实型常量(必须用小数点)】、字符常量(如a、d)和字符串(“ncre”、”beijing”)常量。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识n符号常量 #include main()double r,s,l;r=5.0;s=3.14*r*r;l=2*3.14*r;printf(s=%f,l=%fn,s,l);n符号常量 #include #define PI 3.14main()double r,s,l;r=5.0;s=PI*r*r;
16、l=2*PI*r;printf(s=%f,l=%fn,s,l); 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识n符号常量 用#define命令行(不是语句,所以后面不能加分号)定义一个字符(通常用大写字母)代表一个常量 。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识n变量: 在程序运行过程中值可以改变的量。n 变量实质上代表了内存中的某个存储单元。n 变量必须先定义后使用。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程
17、序设计的初步知识n整型变量 十进制: 0 1 2 3 4 5 6 7 8 9 八进制: 0 1 2 3 4 5 6 7 c程序中八进制开头加0 十六进制:0 1 2 3 4 5 6 7 8 9 a b c d e f c程序中十六进制开头加 0x 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识n整型常量#include main ()int a=12;printf(a=%d,a=%o,a=%#o,a=%x,a=%#xn,a,a,a,a,a); 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C
18、程序设计的初步知识n整型变量 基本型: 用int关键字进行定义 int k; 一个定义语句用一个;结束 多个变量用,隔开 int k,m,n;(仅开辟存储单元,不存放初值,此时变量值无意义) 变量初始化:int m=1,n=2,k=3; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识n 整型数据分类 短整型:short int 长整型:int 或 long int 无符号型:unsigned 在 vc 6.0中整型常量后面加一个字母l或L 在无符号整数常量后加u或U 若长整型无符号可以加lu或LU 学C语言,就是学思考问题的过程和解
19、决问题的能力。 实实在在学知识 顺顺利利过考试数据类型名说明Visual C+ 6.0环境Turbo C2.0环境字节取值范围字节取值范围short int短整型2-32768327672-3276832767signed short int带符号短整型2-32768327672-3276832767unsigned short int 无符号短整型20655352065535int整型4-214748364821474836472-3276832767signed int带符号整型4-214748364821474836472-3276832767unsigned int无符号整型40429
20、49672952065535long int长整型4-214748364821474836474-21474836482147483647signed long int带符号长整型4-214748364821474836474-21474836482147483647unsigned long int无符号长整型404294967295404294967295 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识n 整数在内存中的存储形式 一个字节中的最右边一位称为最低位; 一个字节中的最左边一位称为最高位; 对于一个有符号整数,最高位用
21、来存放整数的符号,称为符号位。若是正整数,最高位放置0,若是负整数,最高位放置1。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识n 整数在内存中的存储形式 正整数: 原码表示。 负整数: 补码表示。(取反加1) 二进制转十进制 为 取反减1 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识n 实型数据 小数形式:由数字和小数点组成的一种实数表示形式。(必须有小数点) 指数形式:以“e”或“E”跟一个整数来表示以10为底的幂, “e”或“E”之前必须有数字,且“e”或“E”
22、后面的指数必须为整数。( “e”或“E” 的前后以及数字之间无空格) 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识n 实型数据 单精度 float 4个字节 双精度 double 8个字节 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识n 算术表达式 基本算术表达式: +、-、*、/、%(%运算对象为整型) 注意:n+、-可以看做单目,也可看做双目运算符号。n 双目运算符两边运算数的类型一致,则所得结果的类型与运算数的类型一致。如:1.0/2.0=0.5 =0;n 若不
23、一致,自动进行类型转换,转换的原则为“就大”n 所有实型数运算都以双精度方式进行。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识n 运算符的优先级1. 单目运算符“+”和“-”的结合性是从右到左。2.在算术表达式中,可以使用多层圆括号,但左右括号必须配对。3. 若包含不同优先级的运算符,则按运算符的优先级由高到低进行,若相同,则按结合方向进行。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识n 强制类型转换表达式 (类型名)(表达式) 如 (int)3.234 学C语言
24、,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识n 赋值表达式 “=”赋值运算符,赋值运算的功能是先求出右边表达式的值,然后把此值赋给 赋值号左边的变量。注意: 赋值运算符优先级别仅高于逗号运算符;且结合性为自右向左;赋值表达式的值为最左边变量所得的新值。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识n 复合赋值表达式 += n+=2 n=n+2 -= n-=2 n=n-2 *= n*=2 n=n*2 /= n/=2 n=n/2 %= n%=2 n=n%2 学C语言,就是学思考问
25、题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识n 复合运算中的类型转换 两侧不一致 ,把右侧数值按左侧变量类型进行转换。也可用强类型转换的方式人为的转换。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识n 自加、自减、逗号运算符 自加 + 使运算对象值加1 自减 - 使运算对象值减1 +i i+ + i ; i+ ; i的 值都加1 前缀加1,后缀不加1 - i i - - i ; i -; i的 值都减1 前缀减1,后缀不减1 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识
26、 顺顺利利过考试第二章 C程序设计的初步知识#include main()int i=1,j=1,m=1,n=1,k=1;printf(i=%dn,i);m=i+;printf(i=%d,m=%dn,i,m);printf(j=%dn,j);m=+j;printf(j=%d,m=%dn,j,m);printf(n=%dn,n);m=n-;printf(n=%d,m=%dn,n,m);printf(k=%dn,k);m=-k;printf(k=%d,m=%dn,k,m); 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第二章 C程序设计的初步知识n 逗号运算符和
27、逗号表达式 表达式1,表达式2, 表达式n 结合性:从左到右,最后一个表达式的值就是此逗号表达式的值。逗号运算符的优先级最低。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第三章 顺序结构n顺序结构:在程序中按语句出现的顺序逐条执行。 n赋值语句:在赋值表达式的尾部加上一个“;”号。应出现在函数的可执行部分。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第三章 顺序结构n 数据输出:把数据从计算机内部送到计算机外部设备上的操作。n 在VC 6.0环境下,在调用输入和输出的库函数之前要求在源程序中出现包含头文件stdio.h
28、的命令行。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第三章 顺序结构n printf函数 printf(格式控制,输出项1,输出项2,) 格式控制是字符串形式,作用是将要输出的数据按照指定的格式输出和提供需要原样输出的文字或字符。 如:d%、f%、e% 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第三章 顺序结构n 格式字符 %c %d %o (%#o) %x (%#x) %u %f %e %s %p %n 长度修饰符 在 %和格式字符之间,可以加入长度修饰符,以保证数据输出格式的正确和对齐。长整%ld 短整 %hd
29、学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第三章 顺序结构n 宽度说明: %和格式字符之间插入一个整数常数来指定输出的宽度n 对于float和double的实数,可以用n1.n2的形式来输出,或者用.n2输出。 在 %d 和宽度之间加“-”实现数据左对齐 加“+”在每一个数字前面带正负号。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第三章 顺序结构n 注意事项 一般在多个输出数之间留逗号、空格或者回车。 要输出%符号,在格式控制符中用% printf函数有返回值,返回值是本次调用输出字符的个数,包括回车等控制符。 学C
30、语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第三章 顺序结构n scanf函数 scanf(格式控制,输入项1,输入项2,) 主要作用是指定输入时的数据转换格式 ,输入项之间用逗号隔开,对于int,float,double类型变量,在变量之前必须加&符号作为输入项。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第三章 顺序结构n 格式字符 %c %d %i %o %x %u %f %e %s 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第三章 顺序结构n输入整数或者实数这类数值型数据时,输入
31、的数据之间必须用空格、回车符号等间隔符号隔开。n 可以指定输入数据所指定的宽度n 一般在使用输入函数前使用输出函数对输入数据进行说明,且尽量不要使用通配符。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第三章 顺序结构n复合语句和空语句 语句1; 语句2; 语句n; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第三章 顺序结构n 空语句 只有一个分号的语句。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第三章 顺序结构n 例题3.1 A B 提问: 若A和B桶都装了水(不一定是装满),请
32、问如何将A和B桶中的水调换?(A,B的容积不受限制) 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第三章 顺序结构n 例题3.2n注意: 1. 十进制小数点移位是通过10的n次方的乘除来实现.2.四舍五入在c语言中的操作:可以通过将小数点移动到舍入数位前,加0.5,然后取整来实现,最后再将小数点移回.3. 强类型转换前要加括号.4. double类型在使用scanf输入变量时,使用%lf格式控制符. 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第四章 选择结构n选择结构:根据判断的结果(逻辑值)决定程序的不同流程.n逻辑值
33、:关系运算和逻辑运算都会得到一个逻辑值, C语言中,0代表逻辑值“假”,非0(正数或者负数)代表“真”. 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第四章 选择结构n关系运算:比较运算,进行两个数的比较,判断比较的结果是否符合指定的条件.n关系运算符: = =!=小于 小与等于 大于 大于等于 等于不等于 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第四章 选择结构n注意:1.两个字符之间不允许有空格2.关系运算符是双目运算符,具有从左至右的结合性3.、=优先级相同,但高于优先级相同的=、!=如a=b关系运算符优先级赋值
34、运算符优先级 如 a=b&| 如 b|c&!d 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第四章 选择结构n优先级比较 !算术关系&|赋值如: f=a|b=!c+d&e 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第四章 选择结构n逻辑运算规则 非运算!0为1 !1为0是否 与运算1&1为1同时满足条件 0&1 1&0 0&0 为0 或运算 0|0为0不满足任何一个条件 0|1 1|0 1|1为 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第四章 选择结构n逻辑运算规则 非运算!0为1
35、 !1为0是否 与运算1&1为1同时满足条件 0&1 1&0 0&0 为0 或运算 0|0为0不满足任何一个条件 0|1 1|0 1|1为 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第四章 选择结构n逻辑运算规则 关系式 0x10在c语言中的表达 0x&x10 &或|逻辑表达式“短路”现象 当A为0时,不需计算B,可知A&B 为0 当A为1时,不需计算B,可知A|B为1 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第四章 选择结构n if 语句1. if(表达式) 语句2. if(表达式) 语句1 else 语句2 学C
36、语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第四章 选择结构n if 语句1. if(表达式) 语句 如 if (a10?100:200 x0?(-1)*x:x 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第四章 选择结构nswitch表达式构成的选择结构 switch (表达式) case 常量表达式1:语句1 case 常量表达式2:语句2 case 常量表达式n:语句n default :语句n 通常和break语句联合使用,当执行到break时,立即跳出switch语句. 学C语言,就是学思考问题的过程和解决问题的能力
37、。 实实在在学知识 顺顺利利过考试第四章 选择结构n语句标号和goto语句 goto stop; stop:printf(“endn”); 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第五章 循环结构n while语句和用while语句构成的循环 while(表达式) 循环体 例如: k=0; while (k10) printf(“*”); k+; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第五章 循环结构n do-while语句及其循环 do 循环体 while(表达式); 例如: do i+;s+=i; While
38、(i10); 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第五章 循环结构n for语句及其循环 for(表达式1;表达式2;表达式3) 循环体 例如: for(k=0;k10;k+) printf(“*”); 表达式1;While(表达式2)循环体;表达式3;等价形式 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第五章 循环结构n break语句和continue语句Break在循环结构中终止本层循环体;Continue跳过本次循环体中余下尚为执行的语句,立刻进行下一次的循环条件判定,可以理解为仅结束本次循环. 学C语言
39、,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第六章 字符型数据n 字符型常量 C语言中,一个字符常量代表ASCII字符集(见附录七)中的一个字符,用单引号把一个字符括起来作为字符常量. 例如:a为标识符,a为字符型常量. 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第六章 字符型数据n 字符型常量 注意:1. 大写字母和小写字母的ASCII值不同,因而代表不同的字符常量.2. 单引号中的空格也是一个字符常量.3. 字符常量只能包含一个字符.4. 字符常量只能用单引号括起来,不能用双括号.5. 字符常量在内存中占一个字节,存放的是字
40、符的ASCII代码值. 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第六章 字符型数据n 字符型常量 转义字符常量 特定字符n 回车 反斜杠 单引号 “ 双引号ddd 三位八进制代表的一个ASCII字符xhh 二位十六进制代表的一个ASCII字符注意:转义字符常量只代表一个字符. 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第六章 字符型数据n 字符串常量 字符串常量是由双引号括起来的一串字符.在c语言中,系统在每个字符串的最后自动加入一个字符0作为字符串的结束标志. 注意:“”称为空串,也是一个字符串常量,占用一个字节的
41、存储空间. 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第六章 字符型数据n 字符量的运算 在C程序中,字符量可参与任何整数运算.n 大小写字母的转换:大写字母ASCII值=小写字母ASCII值-32n 可以将数字字符转换成整数值,也可以将整数值转换成数字字符. n 字符量可以进行关系运算. 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第六章 字符型数据n 字符变量 用关键字char进行定义 char ch1=a; 字符变量可以参与整型变量允许的运算,有可以使用与字符处理相关的库函数. 学C语言,就是学思考问题的过程和解决
42、问题的能力。 实实在在学知识 顺顺利利过考试第六章 字符型数据n 字符的输入和输出 printf输出字符时使用格式说明符%c,也可以在c前加入整数来指定输出字符时所占的宽度. 用scanf输入字符时也用格式说明符%c,当%c一个接一个时,字符之间不应有间隔符号(如回车,空格). 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第六章 字符型数据n putchar和getchar输入和输出函数 putchar输出字符 putchar(ch); getchar输入字符 ch=getchar(); 注意:只有在用户敲入enter键时,读入才开始执行. 学C语言,就是学
43、思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第七章 函数n 一个实用的c语言源程序总是由许多函数组成.n 这些函数中可以调用c提供的库函数,也可以调用由用户或他人编写的函数.n c源程序在正常情况下总是从main函数开始执行,main()结束. 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第七章 函数n熟悉c语言提供的丰富库函数,应正确调用.n调用c语言标准库函数要求使用include命令行.n include命令行必须以#开头,系统提供的头文件以.h为文件的后缀,文件名用一对双引号“”或一对尖括号括起来.n 标准库函数的调用形式:出现在
44、表达式中或者作为独立的语句完成某种操作。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第七章 函数n 函数的定义与返回值 n 函数定义的语法 函数返回值的类型名 函数名(类型名 形式参数1,类型名 形式参数2,) 说明部分 语句部分 注意:不能在函数的内部定义函数 。函数名和形式参数都是用户命名的标识符,同一程序中,函数名必须唯一,形式参数名只要在同一函数中唯一即可。若在函数的首部省略了函数返回值的类型名,则默认函数返回值的类型为int类型。除了返回值类型为 int类型的函数外,函数必须先定义(或说明)后调用。若函数只是用于完成某些操作,没有函数值返回,则必
45、须把函数定义成void类型。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第七章 函数n 函数的定义与返回值 n 如: double add (double a,double b) double s; s=a+b; return s; 函数体中,除形参外,用到的其他变量必须在说明部分进行定义,这些变量(包括形参 ),只在函数被调用时才临时开辟存储单元,当退出函数时,这些临时开辟的存储单元全部被释放掉,因此这种变量只在函数体内部起作用,与其他函数体中的变量互不相干,它们可以和其他函数中的变量同名。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知
46、识 顺顺利利过考试第七章 函数n 函数的定义与返回值 n 如: double add (double a,double b) double s; s=a+b; return s; 函数的值通过return 语句返回,return语句的形式如下:return 表达式; 或 return(表达式);return语句中表达式的值就是所求的函数值,此表达式值的类型必须与函数首部所说明的类型一致。若类型不一致,则以函数值的类型为准,由系统自动进行转换。 当程序执行到return语句时,程序的流程就返回到调用该函数的地方,并带回函数值。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺
47、顺利利过考试第七章 函数n 函数的定义与返回值 n 如: double add (double a,double b) double s; s=a+b; return s; 在同一个函数中,可以根据需要在多处出现return语句,在函数体的不同部位退出函数,但return只可能执行一次return语句中也可以不含表达式,这时必须定义函数为void类型函数体内可以没有return语句,这时必须定义函数为void类型,程序的流程就一直执行到函数末尾的“”,然后返回调用函数,也没有确定的函数值带回。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第七章 函数n 函数
48、的两种调用方式n函数的一般调用形式为: 函数名(实参表) 若函数无形参,调用形式为 函数名()一般情况下,可用两种方式调用函数: 当所调用的函数用于求出某个值时,函数的调用可作为表达式出现在允许表达式出现的任何地方。 当函数仅进行某些操作而不返回函数值,这时函数的调用可作为一条独立的语句。当实参个数多于一个时,各实参之间用逗号隔开。实参的个数必须与所调函数中的形参相同,类型一一对应匹配。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第七章 函数n 函数调用的语法要求n 调用函数时,函数名必须与所调用的函数名字完全一致。n 实参的个数必须与形参的个数一致。实参
49、可以是表达式,在类型上应按位置与形参一一对应。n 函数必须先定义后调用(函数的返回值类型为int或char时除外).n 函数可以直接或间接的自己调用自己,称为递归调用。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第七章 函数n 函数说明的形式 函数说明的一般形式 类型名 函数名(参数类型1,参数类型2,) 也可以采用下面的形式 类型名 函数名(参数类型1 参数1,参数类型2 参数2,) 函数说明可以是一条独立的说明语句,也可以与普通变量一起出现。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第七章 函数n 函数说明的形式
50、 对函数进行说明能使c语言的编译程序在编译时进行有效的类型检查。 当在所有函数的外部、被调用之前说明函数时,在对函数进行说明的语句后面所有位置都可以对函数进行调用。 函数说明也可以放在调用函数内的说明部分。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第七章 函数n调用函数和被调用函数之间的数据传递 三种方式: 1、实参和形参之间进行数据传递 2、通过 return语句把函数值返回。 3、通过全局变量。 在C语言中,数据只能从实参单向传递给形参,称为“按值”传递,也即是说,当简单变量作为实参时,用户不可能在函数中改变对应实参的值。 学C语言,就是学思考问题的
51、过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第八章 地址和指针n变量的地址和指针 a b 1012 1013 1201 1202 1203 1204n一个变量实质上是代表了“内存中的某个存储单元”,若在程序中定义了一个变量,c编译系统就会根据定义中变量的类型,为其分配一定字节数的内存空间。n 每个变量的地址是指该变量所占存储单元的第一个字节的地址。n 直接存取:直接按变量的地址存取变量值的方式。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第八章 地址和指针n变量的地址和指针 p p a 2002 2002 1012 1013n存放地址的变量称为“
52、指针变量”。n间接存取:通过指针变量间接存取变量值的的方式。n“指针变量p指向了变量a”就是指针变量p中存放了变量a的地址。n 在c语言中,指针被广泛运用,它和数组、字符串、函数间数据的传递等有着密不可分的联系。10121012 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第八章 地址和指针n指针变量的定义和指针变量的基类型 定义指针变量的一般形式如下: 类型名 *指针变量名1,*指针变量名2,.; 如 int *pi,*pj; double *pd; 我们称int、 double是指针变量的基类型。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在
53、在学知识 顺顺利利过考试第八章 地址和指针n指针变量的定义和指针变量的基类型 如: int *p,*s,k=20; s=&k; p=&s;对于基类型不同的指针变量,其内容(地址值)增1、减1所跨越的字节数是不同的,因为指针移动的最小单位。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第八章 地址和指针n给指针变量赋地址值通过求地址运算符&获得地址值 int k=1,*p,*q; q=&k;通过指针变量获得地址值 p=q;通过标准函数获得地址值 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第八章 地址和指针n给指针变量赋“空
54、”值 p=NULL;NULL是在stdio.h头文件中定义的预定义符,因此在使用NULL时,应该在程序的前面出现预定义行 #include ,NULL的代码值为0,因此以上代码等价于 p=0;或p=0; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第八章 地址和指针n 对指针变量的操作 通过指针来引用一个存储单元 当变量中存放了一个确切的地址值时,可以用“间接访问运算符”*通过指针来引用该地址的存储单元。 如 int *p,j=10,m; p=&j; m=*p; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第八章 地址和指
55、针n 对指针变量的操作 间接访问运算符*是一个单目运算符,必须出现在运算对象的左边,其运算对象是存储地址的指针变量或者是地址。注意: +和*具有相同优先级,结合性为从右到左 +*p *p+=1 (*p)+ *p+=1 *p+ p+=1 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第八章 地址和指针n 对指针变量的操作 移动指针:对指针变量加上或减去一个整数,或通过赋值运算,使指针变量指向相邻的存储单元。 在对指针进行加、减运算时,数字“1”不再代表十进制整数“1”,而是指1个存储单元长度。1个单元长度的字节数,根据指针的基类型而定。 学C语言,就是学思考问题
56、的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第八章 地址和指针n 对指针变量的操作 指针比较 在关系表达式中可以对两个指针进行比较, 如: int *p,*q; if(pq) printf(“p points to lower memory”); if(p=0) printf(“p points to NUll”); 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第八章 地址和指针n 函数之间地址值的传递n 形参为指针变量时实参和形参之间的数据传递n 通过传送地址值在被调用函数中直接改变调用函数中的变量的值。n 函数返回地址值。 学C语言,就是学思
57、考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 数组o 一组具有同一类型的变量o 在内存中占有连续的存储单元 在c语言中,可以用a0、a1、a2、这种形式来表示数组中连续的存储单元,我们把它们称为“带下标的变量”或数组元素。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 一维数组的定义 一维数组:数组中每个元素只带有一个下标 形式: 类型名 数组名整型常量(表达式) 如: int a8; a0 a1 a2 a3 a4 a5 a6 a7 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试
58、第九章 数组n 一维数组的定义如: int a8; a0 a1 a2 a3 a4 a5 a6 a71.定义了一个名为a的一维数组。2.方括号的8规定了a数组含有8个元素,它们是a0、a1、a73. 类型名int规定a数组中每个元素都是整型,只能存放整型数。 4. 每个元素一个下标,c语言规定每个数组第一个元素的下标总是0(下标的下界),最后一个元素的下标应该是7(下标的上界)。5. 可以用存储单元的名字a0、a1、a7直接引用各存储单元。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 一维数组的定义 多个数组说明符 double w22,v10
59、0,u5; 和普通变量名一起说明 char c1,c2,carr81; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 一维数组元素的引用 引用形式 数组名下标表达式 如:double x8; 则x0、aj、am+n都是对数组元素的合法引用。 注意:一个数组元素实质上就是一个变量名,代表内存中的一个存储单元,一个数组占有一串连续的存储单元。另外,在c语言中,一个数组不能被整体引用,例如x数组,不能用x代表x0到x7这8个元素。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 一维数组的初始化 在定义
60、语句中为所定义数组的各元素赋初值 int a8=0,1,2,3,4,5,6,7; 当所赋值初值少于所定义数组的元素个数时,将自动给后面的元素补以初值0 如 int a3=1; 相当于 int a3=1,0,0 当所赋初值多于所定义数组的元素个数时,在编译时将给出出错信息。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 通过赋初值定义数组的大小 int a=0,1,2,3 相当于 int a4=0,1,2,3 数组说明符的一对方括号中可以不指定数组的大小,可以根据赋初值来隐性定义数组元素的个数。 学C语言,就是学思考问题的过程和解决问题的能力。
61、实实在在学知识 顺顺利利过考试第九章 数组n 一维数组的定义和数组元素的引用举例 定义 for (j=0;jM;j+) aj=j; /*依次赋值*/ for(j=0;j=0;j-) printf(“%d”,aj) /*倒序输出*/ for(j=0;jM;j+) printf(“%d”,aM-1-j) /*倒序输出*/ 控制换行符 正序 (j+1)%n=0 每输出n个元素可以换行 逆序 j%n=0 每输出n个元素可以换行 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 一维数组和指针 一维数组和数组元素的地址 c语言中,在函数体中或在函数外部定义的
62、数组名可以认为是一个存放地址值的指针变量名,其中的地址值是数组第一个元素的地址,也就是数组所占一串连续存储单元的起始地址,定义数组时的类型就是此指针变量的基类型。注意:这个指针变量的地址值不可改变,即不可给数组名重新赋值,可以认为数组名是一个地址常量。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 一维数组和指针 一维数组和数组元素的地址 float a10,*p,x; int k; for(k=0;k10;k+) p=a+k; for(k=0;k10;k+) scanf(“%d”,a+k); 语句p=&a0;和p=a;都是合法的,功能相同,都
63、使p指向了数组的首部地址。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 一维数组和指针 一维数组和数组元素的地址 for(p=a,k=0;k10;k+) scanf(“%d”,p); p+; for(p=a,k=0;k10;k+) scanf(“%d”,p+); for(p=a;p-a10;p+) scanf(“%d”,p); 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 一维数组和指针 通过数组的首地址引用数组元素 int a10; a是数组元素的首地址,a的值等于&a0,a+1的值为&a1
64、 a0 等于 *&a0, 即*(a+0),*a a1 等于 *&a1,即*(a+1) 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 通过指针引用一维数组元素 float a10,*p,k; p=a; 可以通过指针变量p来表示数组元素 a0 *p a1 *(p+1) 如 for(p=a;p-a10;p+) printf(“%4d”,*p); 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 通过指针引用一维数组元素 float s10,*p,k; p=s; 可以用&sk,s+k,p+k来表示sk的地址
65、 可以用sk,*(s+k),*(p+k),pk来表示sk的值 但注意:s是不变的,而p中的地址值是可以改变的 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 函数之间对一维数组和数组元素的引用o 数组元素作实参o 数组名作实参 形参形式 int arrin(int *a) int arrin(int a) int arrin(int aM) 注意:当数组名为实参时,在被调用函数中,并没有为与数组名对应的形参另外开辟一串连续的存储单元,而只是开辟了一个指针变量的存储单元。 o 数组元素地址作为实参 学C语言,就是学思考问题的过程和解决问题的能力。
66、实实在在学知识 顺顺利利过考试第九章 数组n 二维数组 二维数组:数组元素带有两个下标。逻辑上把二维数组看成一个具有行和列的表格。定义形式: 类型名 数组名常量表达式1常量表达式2,;如: int a34 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 二维数组 int a34的逻辑结构int a34的实际存储结构a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23 按行存放 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 二维数组 在c语言中,可以把一个二
67、维数组看成一个一维数组,每个数组元素又是包含有若干个元素的一维数组。例如:int a34这个a数组可以看成是由a0、a1、a2三个元素组成的一维数组。其中每个元素又是由四个元素组成的一维数组。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 二维数组元素的引用 数组名下标表达式1下标表达式2n二维数组的初始化 int a43=1,2,3,4,5,6,7,8,9,10,11,12; int a43=1,2,4,5,7,10; int a43=1,2,4,5; int a43=1,2,3,4,5; 学C语言,就是学思考问题的过程和解决问题的能力。 实
68、实在在学知识 顺顺利利过考试第九章 数组n 通过赋初值定义二维数组的大小 int a3=1,2,3,4,5,6,8; 第一维大小由行数来决定。 int a3=1,2,3,4,5; 第一维大小由以下规则决定: a、当初值的个数能被第二维的常量表达式的值整除时,所得商数就是第一维的大小。 b、当初值的个数不能被第二维的常量表达式的值整除时,第一维的大小=所得商数+1 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 二维数组的定义和数组元素引用举例int aMN ; for(i=0;iM;i+) for (j=0;jN;j+)scanf(“%d”,&a
69、ij);for(i=0;iM;i+) for (j=0;jN;j+) printf(“%d”,&aij); 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 二维数组和指针 int *p,a341. 二维数组a由若干个一维数组组成 a0、a1、a2是一维数组名,代表一个不可变的地址常量,其值为二维数组每行第一个元素的地址,其基类型就是数组元素的类型。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 二维数组和指针 int *p,a342. 二维数组a也是一个地址值常量 二维数组名也是一个存放地址常量的
70、指针,其值为二维数组中第一个元素的地址。以上a数组,a的值和a0的值相同,但其基类型为具有4个整型元素的数组类型。 a+0、a+1、a+2分别表示a数组中第一、第二、第三行的首地址。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 二维数组和指针 int *p,a34 二维数组元素的地址 &aij ai+j *(a+i)+j &a00+4*i+j a0+4*i+j 以上地址的基类型为int类型 aij*(ai+j)*(*(a+i)+j)(*(a+i)j*(&a00+4*I+j) 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺
71、顺利利过考试第九章 数组n建立一个指针数组引用二维数组元素 int *p3,a32,i,j; for(i=0;i3;i+) pi=ai; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n建立一个指针数组引用二维数组元素 p数组的每个元素都指向a数组每行的开头时,则a数组元素aij的引用形式*(ai+j)和*(pi+j)是完全等价的。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 建立一个行指针引用二维数组元素 int a32,(*prt)2;这里a的类型和prt的类型相同,都是包含两个int元素的数
72、组。不同的是prt是个指针变量,是可变的,而a是一个常量。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 二维数组名作为实参时的数据传递当二维数组名为实参时,对应的形参 必须是一个行指针变量。 double sMN; fun(s);形参:fun (double (*a)N)fun(double aN)fun(double aMN) 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第九章 数组n 指针数组名作为实参时的数据传递当指针二维数组名为实参时, *ps M; fun(ps);形参:fun (double *
73、aM)fun(double *a)fun(double *a) 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第十章 字符串 n c语言本身并没有设置一种类型来定义字符串变量,字符串的存储完全依赖于字符数组,但字符数组又不等于是字符串变量。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第十章 字符串 n 用一维字符数组存放字符串1. 在C语言中,字符串是借助字符型一维数组来存放的,并规定以字符0作为字符串结束标志,占用存储空间但不计入字符串的实际长度。2. 字符串常量是由双引号括起来的一串字符,不需要人为的在其末尾加入0,c
74、编译程序自动在末尾加0。3. 字符串常量占用内存中一串连续的存储空间,这些连续的存储空间实际上是字符型一维数组。数组虽然没有名字,但c语言编译系统却以字符串常量的形式给出存放每一字符串的存储空间的首地址。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第十章 字符串 n 用一维字符数组存放字符串4.字符数组和字符串的区别5. 字符数组的每个元素中可存放一个字符,但不限定最后一个字符应该是什么。在c语言中,有关字符串的大量操作都与串结束标志0有关,因此,在字符数组中的有效字符后面加上0,可以把一维字符数组看作字符串“变量”。 学C语言,就是学思考问题的过程和解决
75、问题的能力。 实实在在学知识 顺顺利利过考试第十章 字符串 n 用一维字符数组存放字符串通过赋初值的方式给一维字符数组赋字符串Char str10=s,t,r,i,n,g,!,0;Char str= s,t,r,i,n,g,!,0;当赋初值的字符个数少于数组的元素个数时,系统将自动在其后的元素加入0,如果一个字符数组用来作为字符串使用,数组大小将比实际存放最长字符串多一个元素,从而在末尾存放0留有空间。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第十章 字符串 n 用一维字符数组存放字符串通过赋初值的方式给一维字符数组赋字符串Char str= s,t,r
76、,i,n,g,!; /字符数组Char str10=“string!”; 简写成 char str10=“string!”;Char str=“string!”;注意:不可以用赋值语句给字符串数组整体赋一串字符。如Char mark10; mark=“string!” 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第十章 字符串 n 用一维字符数组存放字符串给字符数组逐个赋字符值,最后人为加入串结束标志。char mark10;int i;for(i=0;i9;i+) scanf(“%c”,&marki);marki=0; 学C语言,就是学思考问题的过程和解决
77、问题的能力。 实实在在学知识 顺顺利利过考试第十章 字符串 n 使指针指向一个字符串Char *ps1=“form one”;或者 Char str=“form one”,*ps2=str;或者 Char *ps1; ps1=“form one”;或者 char str=“form two”,*ps2;Ps2=str; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第十章 字符串 n 用字符数组作为字符串和用指针指向字符串的区别char mark=“program”;Char *pmark=“program”; 学C语言,就是学思考问题的过程和解决问题的能力。
78、 实实在在学知识 顺顺利利过考试第十章 字符串 n 字符串的输入和输出 当对字符串进行输出时,输出项既可以是字符串常量或字符数组名,也可以是已指向字符串的字符指针变量。当对字符串进行输入时,输出项可以是字符数组名,也可以是字符指针变量。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第十章 字符串 n 字符串的输入和输出1. 在scanf函数中使用%s实现整体输入。Scanf(“%s”,str_adr);注意:%s输入时,空格和回车符是输入数据的分隔符而不能被读入。2. 在printf函数中使用格式说明符%s实现整体输出printf(“%s”,str_adr)
79、;注意:输出结束后不自动换行。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第十章 字符串 n 字符串的输入和输出3. gets函数的调用形式gets(str_adr);注意:gets函数用来从终端键盘读入字符串(包括空格符),直到读入一个换行符为止。换行符读入后,不作为字符串的内容,系统自动用0代替。4. puts函数的调用形式5. puts(str_adr);注意:输出结束时自动输出一个换行符。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第十章 字符串 n字符串数组 char name1080;或者 char ca3
80、5=“A”,”BB”,”CCC”;或者 char ca5= “A”,”BB”,”CCC”;或者char *pa3=“a”,”bb”,”ccc”; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第十章 字符串 n用于字符串处理的函数 #include 1.字符串复制函数strcpy strcpy(s1,s2) 作用:把s2所指字符串的内容复制到s1所指的存储空间中,函数返回s1的值。2. 字符串连接函数strcat strcat(s1,s2) 作用:把s2所指字符串的内容连接到s1所指的字符串的后面,并自动覆盖s1串末尾的0,函数返回s1所指的地址。3. 字符串
81、长度函数strlen strlen(s) 作用:计算以s为原始地址的字符串的长度,并作为函数值返回,不包括结束标志0; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第十章 字符串 n用于字符串处理的函数 #include 4. 字符串比较函数 strcmp strcmp(s1,s2) 作用:比较s1和s2所指字符串的大小,若串s1s2,函数值大于0,若串s1=s2,函数值等于0;若串s1串s2,函数值小于0; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第十一章 对函数的进一步讨论n 传给main函数的参数在支持c的环境中
82、,可以在运行c程序时,通过运行c程序的命令行把参数传送给c程序。Main函数通常可用两个参数,如 main(int argc,char *argv) 第二个参数argv可直接定义为 char *argv 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第十一章 对函数的进一步讨论n 传给main函数的参数按照规定,argvargc由系统设置0命令行中,各参数之间用空格或TAB字符隔开,空格不作为参数的内容,若空格作为参数的内容,应该把字符串放在一对双引号内。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第十一章 对函数的进一步
83、讨论n 指向函数的指针变量 在c语言中函数名代表该函数的入口地址,因此可以定义指向函数的指针来存放这种地址。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第十一章 对函数的进一步讨论n 指向函数的指针变量 #include double fun(int a,int *p) main()double (*fp)(int,int *),y; int n;fp=fun;y=(*fp)(56,&n);y=(*fp)(56,&n)相当于 y=fun(56,&n) 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第十一章 对函数的进一步讨
84、论n 函数名或指向函数的指针变量作实参 函数名或指向函数的指针变量可作为实参传送给函数。这时,对应的形参应该是类型相同的指针变量。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第十一章 对函数的进一步讨论n 函数的递归调用 c语言中的函数可以递归调用,即:可以直接或间接地直接调用自己,前者称简单递归,后者称间接递归。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第十一章 对函数的进一步讨论n 函数的递归调用 采用递归方法解决问题时,必须符合三个条件:1. 可以把要解决的问题转化为一个新的问题,而这个新的问题的解法仍与原来的
85、解法相同,只是所处理的对象有规律地递增或递减。2. 可以应用这个转化过程使问题得到解决。3. 必要时有一个明确的结束递归的条件。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第十一章 对函数的进一步讨论n 函数的递归调用 当函数自己调用自己时,系统将自动把函数中当前的变量和形参暂时保留起来,在新一轮的调用过程中,系统将为该次调用的函数所用到的变量和形参开辟另外的存储单元。因此,递归调用的层次越多,同名变量所占用的存储单元也越多。当本次调用的函数运行结束时,系统将释放本次调用时所占的内存单元,程序的执行流程返回到上一次的调用点,同时取用当初进入该层时函数中的变
86、量和形参所占用的存储单元中的数据。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试第十一章 对函数的进一步讨论n 函数的递归调用 第一次调用第二次调用第三次调用第四次调用暂时保留变量和形参暂时保留变量和形参暂时保留变量和形参释放存储单元取回进入该层时的变量和形参释放存储单元取回进入该层时的变量和形参释放存储单元取回进入该层时的变量和形参123456 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试12 用户标识符的作用域 和存储类n 作用域、存储类 在c语言中, 标识符必须先定义后使用 。作用域:定义语句的位置?定义的标识符随处
87、可用 ?生存期:经过赋值的变量是否在程序运行期间总能保存其 值?定义:指给变量分配确定的存储单元。说明:说明变量的性质,而不分配存储空间。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试12 用户标识符的作用域 和存储类n 作用域、存储类 作用域:程序的某一部分,在这一部分中, 该标识符是有定义的,可以被c编译和连接所识别。变量的作用域与其定于语句在程序中出现的位置有直接的关系。据此可以划分为局部变量和全局变量。局部变量(内部变量):在函数内部或复合语句内部定义的变量,称为局部变量,函数的形参也属于局部变量。全局变量(外部变量):在函数外部定义的变量,称为全局
88、变量。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试12 用户标识符的作用域 和存储类n 作用域、存储类 存储类别:自动类、静态类存储类别说明符:auto(自动类) Register(寄存器) static(静态) extern(外部)如:auto int j; int auto m;动态存储区(局部变量)(auto)静态存储区(局部变量)(全局变量)(static)程序代码区 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试12 用户标识符的作用域 和存储类n 局部变量 auto 当在函数内部或复合语句内定义变量时,如果没指
89、定存储类,或使用了auto说明符,系统就认为所定义的变量具有自动类别。Auto变量的存储单元被分配在内存的动态存储区,每当进入函数体(或复合语句)时,系统自动为auto变量分配存储单元;退出时自动释放这些存储单元另作它用。因此这些局部变量的作用域是从定义的位置起,到函数(复合语句)结束为止。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试12 用户标识符的作用域 和存储类n 局部变量 auto 若通过定义语句给自动变量赋初值,赋初值的操作是在程序运行过程中进行的,每进入一次函数体(或复合语句),就赋一次指定的初值。 学C语言,就是学思考问题的过程和解决问题的能
90、力。 实实在在学知识 顺顺利利过考试12 用户标识符的作用域 和存储类n 局部变量 register 属于自动类变量,与auto的区别在于register说明的变量建议编译程序将变量的值保留在cpu的寄存器中,而不是像一般变量那边占存储单元,所以register变量没有地址,不能进行求地址运算。 register变量说明时应尽量靠近其使用的地方,用完后尽快释放,以提高寄存器的利用率。这可以通过对register变量的说明和使用放在复合语句来实现。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试12 用户标识符的作用域 和存储类n 局部变量 static 当在函
91、数体(复合语句)内部用 static来说明一个变量时,称该变量为静态局部变量,它与auto变量的本质区别在于:1、在整个程序运行期间,静态局部变量在内存中的静态存储区占据着永久性的存储单元,即使退出函数,下次再进入该函数时,静态局部变量仍使用 原来的存储单元,因而这次存储单元的值得以保留。2、静态变量的初值是在编译时赋予的,不是在程序执行期间赋予的。对于未赋初值的静态局部变量,c编译程序自动给它赋初值0。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试12 用户标识符的作用域 和存储类n 全局变量 全局变量是在函数外部任意位置上定义的变量,它的作用域是从变量定
92、义的位置开始,到整个源文件结束为止。 全局变量的生存期是整个程序的运行期间。 若全局变量和某个函数中的局部变量同名,则在该函数中,此全局变量被屏蔽,在该函数内,访问的是局部变量,与同名的全局变量与关。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试12 用户标识符的作用域 和存储类n 全局变量 n 同一编译单位内用extern扩展作用域 当全局变量定义在后,引用它的函数在前时,应该在引用它的函数中用extern对此全局变量进行说明,以便通知编译程序,该变量是一个已在外面定义的全局变量,已经有存储单元,不需要再为它另外开辟存储单元。 学C语言,就是学思考问题的过
93、程和解决问题的能力。 实实在在学知识 顺顺利利过考试12 用户标识符的作用域 和存储类n 全局变量 n 不同编译单位内用extern扩展作用域 当一个程序由多个编译单位组成,在每个文件均需要引用同一全局变量时,解决的办法就是在一个文件中定义全局变量,而在其他用到这些变量的文件中用extern对这些变量进行说明,声明这些变量已在其他编译单位中定义,通知编译程序不必再为它们开辟存储单元。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试12 用户标识符的作用域 和存储类n 全局变量 static 当用static说明符说明全局变量时,此变量可称为“静态全局变量”。静
94、态全局变量只限于本编译单位使用,不能被其他编译单位引用。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试12 用户标识符的作用域 和存储类n 函数的存储分类 所有函数都是外部的,因为不允许在函数内部定义另一个函数。但当定义函数时,可以使用extern或static说明符。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试12 用户标识符的作用域 和存储类n 函数的存储分类 extern 若在函数返回值的类型前加上说明符extern,则称此函数为“外部”函数。Extern说明可以省略,一般的函数都隐含说明为extern。外部函数的
95、特征时可以被其他编译单位中的函数调用。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试12 用户标识符的作用域 和存储类n 函数的存储分类 static 若在函数返回值的类型前加上说明符static,则称此函数为“静态”函数。其特征是只限于本编译单位的其他函数调用它,而不允许其他编译单位中的函数对它进行调用。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试13 编译预处理和动态存储分配n 编译预处理 在c语言中,凡以“#”号开头的行,都称为“编译预处理行”。所谓的编译预处理就是在c编译程序对c源程序进行编译前,由编译预处理程序
96、对这些编译预处理行进行处理的过程。预处理行必须在一行的开头以“#”号开始,每行的末尾不得用“;”结束。命令行可以出现在任何一行的开始部位,其作用一致持续到源文件的末尾。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试13 编译预处理和动态存储分配n 宏替换1、不带参数的宏定义 #define 宏名 替换文本或 #define 宏名 如:#define SIZE 100预处理程序对源程序中的所有名为SIZE的标识符用100来替换,这个过程称为“宏替换”。但要注意:不能认为 SIZE等于整数100. 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识
97、 顺顺利利过考试13 编译预处理和动态存储分配n 宏替换1、不带参数的宏定义 #define 宏名 替换文本或 #define 宏名 如:#define SIZE 100预处理程序对源程序中的所有名为SIZE的标识符用100来替换,这个过程称为“宏替换”。但要注意:不能认为 SIZE等于整数100. 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试13 编译预处理和动态存储分配n 宏替换替换文本中可以包含已定义过的宏名#define PI 3.14#define ADDPI (PI+1)#define TWO_ADDPI (2*ADDPI) 学C语言,就是学思考
98、问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试13 编译预处理和动态存储分配n 宏替换当宏定义在一行中写不下时,需要在下一行继续时,只需要在最后一个字符后紧接着加一个反斜线“”.替换文本不能替换双引号中与宏名相同的字符串。替换文本不能替换用户标识符中的成分。在c程序中,宏定义的定义位置一般写在程序的开头。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试13 编译预处理和动态存储分配n 宏替换n 2 带参数的宏定义#define 宏名(形参表) 替换文本如 #define MU(X,Y) (X)*(Y)a=MU(5,2);b=6/MU(a+3,a)
99、; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试13 编译预处理和动态存储分配n 宏替换n 2终止宏定义 可以用#undef提前终止宏定义的作用域。 #define PI 3.14main()#undef PI 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试13 编译预处理和动态存储分配n3 文件包含 所谓文件包含,是指在一个文件中,去包含另一个文件的全部内容,c语言用#include命令行来实现文件包含的功能。#include命令行的形式如下:#include “文件名”系统先在源程序所在的目录内查找指定的包含文件,如果找
100、不到,再按系统指定的标准方式到有关目录中去找。或#include 按系统指定的标准方式到有关目录中去找。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试13 编译预处理和动态存储分配n3 文件包含1. 头文件名可以由用户指定,其后缀不一定用“.h”。2. 当包含文件修改后,对包含该文件的源程序必须重新进行编译连接。3. 在包含文件中还可以包含其他文件。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试13 编译预处理和动态存储分配n4 动态存储分配静态存储分配:用于存储数据的变量和数组都必须在说明部分进行定义。C编译程序通过定义
101、语句了解他们所需存储空间的大小,并预先为其分配适当的存储空间。这些空间一经分配,在变量和数组的生存期内是不变的。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试13 编译预处理和动态存储分配n4 动态存储分配静态存储分配:用于存储数据的变量和数组都必须在说明部分进行定义。C编译程序通过定义语句了解他们所需存储空间的大小,并预先为其分配适当的存储空间。这些空间一经分配,在变量和数组的生存期内是不变的。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试13 编译预处理和动态存储分配n4 动态存储分配动态存储分配:在程序执行期间需要空
102、间来存储数据时,通过“申请”得到指定的内存空间;当有闲置不用的空间时,可以随时将其释放,由系统另作它用。C语言提供malloc、calloc、free和realloc,使用这些函数时,必须在程序开头包含头文件stdlib.h。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试13 编译预处理和动态存储分配n4 动态存储分配 malloc函数返回值的类型为void *,函数的调用形式为malloc(size),size的类型为unsigned int.malloc函数用来分配size个字节的存储区,返回一个指向存储区首地址的基类型为void的地址。如无足够的内存单
103、元供分配,函数返回空(NULL).如 int *pi; pi=(int *)malloc(4); 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试13 编译预处理和动态存储分配n4 动态存储分配 malloc函数 在动态申请存储空间时,若不能确定数据类型所占字节数时,可以用sizeof运算符来求得。例如:int *pi;pi=(int *)malloc(sizeof(int); 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试13 编译预处理和动态存储分配n4 动态存储分配 free函数free(p);这里指针变量p必须指向由动态
104、分配函数malloc或calloc分配的地址。free函数将指针p所指向的存储空间释放,使这部分空间可以由系统重新支配。此函数无返回值。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试13 编译预处理和动态存储分配n4 动态存储分配 calloc函数 calloc(n,size);返回值的类型为void *,n和size类型为unsigned intcalloc函数用来给n个同一类型的数据项分配连续的存储空间,每个数据项的长度为size个字节。若分配成功,函数返回存储空间的首地址;否则返回空。通过调用calloc函数所分配的存储单元,系统自动置初值为0。 学C
105、语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试13 编译预处理和动态存储分配n4 动态存储分配 calloc函数 char *ps;ps=(char *)calloc(10,sizeof(char);开辟10个连续的char类型的存储单元,由ps指向存储单元的首地址。使用calloc函数开辟的存储单元相当于开辟了一个一维数组。函数的第一个参数决定一维数组的大小,第二个函参数决定数组元素的类型。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n 基本类型 整型、字符型、实型、双精度型和空值型n 派生
106、型指针和数组n 用户构造类型用户定义类型:对已有的类型,另外说明一个新的类型标识符。结构体:把具有相互关系的不同类型的数据组成一个有机的整体。共用体:又称联合体,使几种不同类型的变量共用一段存储空间。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n用typedef说明一种新类型名typedef 类型名 标识符;作用:用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有的类型名依然有效。例如:typedef int INTEGER;INTEGER m,n; 等价于 int m,n;如:typedef char *
107、CHARP; CHARP p; 等价于 char *p; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n结构体类型 若干个称为成员(成员数量固定)的成分组成;各个成员的类型可以不同; 若干个成员组成一条记录,即一条信息;如:一条学生记录(student),包含如下数据项:姓名(name):字符串性别(sex):字符型出生日期(birthday):date结构体四门课成绩(sc):一维实型数组 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n结构体类型 一条学
108、生记录(student),包含如下数据项:姓名(name):字符串性别(sex):字符型出生日期(birthday):date结构体四门课成绩(sc):一维实型数组 一个结构体就是一个表格的标题行! 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n结构体类型说明struct 结构体标识名类型名1 结构成员名表1; 类型名2 结构成员名表2; 类型名n 结构成员名表n; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n结构体类型说明定义date结构体类型stru
109、ct dateint year,month,day;定义student结构体类型struct studentchar name12;char sex;struct date birthday;float sc4;定义student结构体类型struct studentchar name12;char sex;structint year,month,day; birthday;float sc4; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n结构体类型定义1、紧跟结构体类型说明之后进行定义struct studentcha
110、r name12;char sex;struct date birthday;float sc4;std,pers3,*pstd;定义了一个结构体变量std、具有3个元素的结构体数组pers和基类型为结构体类型的指针变量pstd; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n结构体类型定义2、说明一个无名结构体类型的同时直接定义struct char name12;char sex;struct date birthday;float sc4;std,pers3,*pstd;定义了一个结构体变量std、具有3个元素的结构体
111、数组pers和基类型为结构体类型的指针变量pstd; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n结构体类型定义3、先说明结构体类型,再单独进行变量定义struct student char name12;char sex;struct date birthday;float sc4;struct student std,pers3,*pstd;定义了一个结构体变量std、具有3个元素的结构体数组pers和基类型为结构体类型的指针变量pstd; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考
112、试14 结构体、共用体和用户定义类型n结构体类型定义4、使用typedef说明一个结构体类型名,再用新类型名来定义变量typedef struct char name12;char sex;struct date birthday;float sc4; STREC;STREC std,pers3,*pstd;定义了一个结构体变量std、具有3个元素的结构体数组pers和基类型为结构体类型的指针变量pstd; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n给结构体变量、数组赋初值1、给结构体变量赋初值struct studen
113、tchar name12;char sex;struct date birthday;float sc4;std=“LiMing”,M,1962,5,10,88,76,85.5,90;每个成员在结构体中的顺序一一对应赋初值;后面未赋初值的成员,系统将自动为数值型和字符型数据赋初值0. 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n给结构体变量、数组赋初值2、给结构体数组赋初值struct bookcardchar num5;float money;bk3=“NO.1”,35.5,“NO.2”,25.0,“NO.3”,66.7
114、; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n引用结构体变量中的数据对结构体类型变量中的数据可以逐个引用成员进行操作,也可以对结构体类型变量进行整体赋值操作。1、对结构体变量成员的引用(1)结构体变量名.成员名(2)指针变量名-成员名(3)(*指针变量名).成员名点号.称为成员运算符;箭头-称为结构指向运算符 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n引用结构体变量中的数据 struct studentchar name12; char sex;
115、struct date birthday; float sc4;std,arr5,*ps;ps=&std;引用std中sex成员std.sexps-sex(*ps).sex引用arr的第0个元素arr0中的sex成员arr0.sex 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n引用结构体变量中的数据 struct studentchar name12; char sex; struct date birthday; float sc4;std,arr5,*ps;ps=&std;引用std中数组成员sc中的元素sc2std.
116、sc2ps-sc2(*ps).sc2对arr数组可写成arr0.sc2 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n引用结构体变量中的数据 struct studentchar name12; char sex; struct date birthday; float sc4;std,arr5,*ps;ps=&std; 若结构体变量中的成员是作为字符串使用的字符型数组,如name,由于可以看作是“字符串变量”,引用形式可以是std.nameps-name(*ps).name 学C语言,就是学思考问题的过程和解决问题的能力。
117、 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n引用结构体变量中的数据 struct studentchar name12; char sex; struct date birthday; float sc4;std,arr5,*ps;ps=&std;结构体变量内嵌结构体变量成员的引用std.birthday.yearps-birthday.year(*ps).birthday.year 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n引用结构体变量中的数据结构体变量中的每个成员都属于某个具体的数据类型,因
118、此结构体变量中的每个成员都可以像普通变量一样,对它进行同类变量所允许的任何操作。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n引用结构体变量中的数据 通过指针变量引用结构体成员的注意事项structint a; char *s;x,*p=&x;注意: +p-a 等价于 +(p-a) (+p)-a 等价于 +p;p-a; (p+)-a p+-a 等价与p-a;p+; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n相同类型结构体变量之间的整体赋值struct
119、char name10;int num;per1,per2=“YANGGM”,46;执行赋值语句per1=per2;将per2中的每个成员的值都赋给了per1中对应的同名成员。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n利用结构体变量构成链表1、结构体中含有可以指向本结构体的指针成员struct link char ch; struct link *p;a;当 a.p=&a时,存储结构如图所示 a.ch a.p 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义
120、类型n利用结构体变量构成链表1、结构体中含有可以指向本结构体的指针成员 例14.6102030h a b c 静态链表 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n利用结构体变量构成链表2、动态链表的概念987头指针 头结点带有头结点的单向链表/ 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n利用结构体变量构成链表3、单向链表struct slist int data; struct slist *next;typedef struct slist SL
121、IST;主要操作:链表的建立、结点数据域的输出、结点的插入和删除。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n利用结构体变量构成链表3.1、建立带有头结点的单向链表关键语句 (详见p199)h=(SLIST *)malloc(sizeof(SLIST);/生成头结点r=h;/r指向链表当前的尾结点 s= (SLIST *)malloc(sizeof(SLIST); /生成新结点 s-data=c;/将数据读入新结点的data域 r-next=s; r=s; r-next=0;return h; 学C语言,就是学思考问题的
122、过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n利用结构体变量构成链表3.2、顺序输出单向链表各结点数据域中的内容关键语句 (详见p200)p=head-next;if(p=0) printf(“linklist is null!n”);elseprintf(“head”);do printf(“-%d”,p-data);p=p-next;while(p!=0);printf(“-endn”); 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n利用结构体变量构成链表3.3、在单向链表中
123、插入结点关键语句 (详见p201)s=(SLIST *)malloc(sizeof(SLIST)s-data=y;q=head;p=head-next;while(p!=0)&(p-data!=x)q=p;p=p-next;s-next=p;q-next=s; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n利用结构体变量构成链表3.4、删除单向链表中的结点q=head;p=head-next;while(p!=0)&(p-data!=x)q=p;p=p-next;q-next=p-next;free(p); 学C语言,就是学
124、思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n共用体共用体的类型说明和变量的定义方式与结构体的类型说明和变量定义的方式完全相同,不同的是结构体变量中的成员各自占有自己的存储空间,而共用体变量中的所有成员占有一个存储空间。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n共用体类型的说明union 共用体标识名 类型名1 共用体成员名1; 类型名2 共用体成员名2; 类型名n 共用体成员名n; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试1
125、4 结构体、共用体和用户定义类型n共用体类型的定义union un_1 int i;double x;s1,s2,*p;1、共用体变量在定义的同时只能给第一个成员的类型的值进行初始化,如s1和s2在定义的同时只能赋予整型值。2、共用体所有成员共享一段公共存储区,共用体变量所占内存字节数与其成员中字节数最多的那个成员相等。3、变量中所有成员的首地址相等。&s1=&s1.i=&s1.x 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n共用体变量中成员的引用 1、共用体变量名.成员名 2、指针变量名-成员名 3、(*指针变量名).成
126、员名共用体变量中的成员同样可以参与其所属类型允许的任何操作。但在访问共用体变量中的成员时应注意:共用体变量中起作用的是最近一次存入的成员变量的值,原有成员变量的值将被覆盖。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试14 结构体、共用体和用户定义类型n共用体变量的整体赋值 union un_1 int i;double x;s1,s2,*p; 设有s1.i=5; 则执行s2=s1; s2.i的值为5。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试15 位运算n C语言中,位运算的对象只能是整型或字符型数据,不能是其他类型
127、的数据。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试15 位运算运算符含义优先级按位求反1(高)右移2&按位与3按位异或4|按位或5 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试15 位运算扩展运算符表达式等价的表达式=a =2a=a=b =2b=b2&=a&=ba=a&b=a=ba=ab|=a|=ba=a|b跳过 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试15 位运算n按位取反 01001101结果: 10110010运算功能:把运算对象的内容按位取反,即:使每一位上的0变为1,1
128、变为0. 返回 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试15 位运算n左移运算 char a=6,b; b=a2; a: 00000110 b=a2; a: 11111111 11111000 b=a2: 11111111 11111110运算功能:右移,右端(低位)移出的二进制数舍弃,左端(高位)移入的部分分两种情况:对于无符号整数和正整数,高位补0,对于负整数,高位补1。右移时,若移出的部分不包含有效二进制数1,则每右移一位,相当于移位对象除以2.返回 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试15 位运算n按位
129、与 12:00001100 10: 00001010 结果 00001000 运算功能:把参加运算的两个运算数按对应的二进制位进行“与”运算,当两个位都是1时,该位的结果为1,否则为0.返回 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试15 位运算n按位异或 00110011 11000011 结果 11110000 运算功能:参加运算的两个运算数中相对应的二进制位上,若数相同,则该位的结果为0;若数不同,则该位的结果为1. 返回 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试15 位运算n按位或 01010011 0000
130、1100 结果 01011111 运算功能:参加运算的两个运算数中相对应的二进制位上,只要两个相应的二进制位中有一个为1,该位的运算结果即为1;只要当两个相应位的数都为0时,该位的运算结果才为0. 返回 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试15 位运算n位数不同的运算数之间的运算规则当运算数的位数不同时,系统将自动进行如下处理:1、先将两个运算数右对齐。2、再将位数短的一个运算数高位扩充,即:无符号数和正整数左侧用0补全,负数左侧用1补全,然后对位数相等的这两个运算数按位进行位运算。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识
131、顺顺利利过考试16 文件n记录在外部介质上的数据的集合称为“文件”。n当调用输入函数从外部文件中输入数据赋值给程序中的变量时,这种操作称为“输入”或“读”;当调用输出函数把程序中变量的值输出到外部文件中时,这种操作称为“输出”或“写”。nC语言中,对于输入、输出的数据都按“数据流”的形式进行处理,也就是说,输出时,系统不添加任何信息;输入时,逐一读入数据,直到遇到EOF或文件结束标志就停止。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试16 文件nC语言中,有两种对文件的存取方式:顺序存取和直接存取。n 顺序存取:每当打开这类文件时,进行读或写操作时,总是从
132、文件的开头开始,从头到尾顺序地读或写。n直接存取(随机存取):可以通过调用c语言的库函数去指定开始读或写的字节号,然后直接对此位置上的数据进行读,或把数据写到此位置上。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试16 文件n文件可以分为文本文件和二进制文件。n文本文件:当输出时,数据转换成一串字符,每个字符以字符的ASCII码值存储到文件中,一个字符占用一个字节。当输入时,又把指定的一串字符按类型转换成数据。n二进制文件:当输出时,数据不经过任何转换,按计算机内的存储形式直接存放到磁盘上。当输入时,不经过任何转换,而直接将读入的数据存入变量所占内存空间。
133、学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试16 文件n在对文件进行输入或输出的时候,系统将为输入或输出文件开辟缓冲区。n 缓冲区是系统在内存中为各文件开辟的一片存储区。n输出时,数据先填入缓冲区,缓冲区满时才把内容一次性输出到对应文件。n输入时,从输入文件输入一批数据放入缓冲区,输入语句从缓冲区依次读取数据,数据读完时,再从输入文件中输入一批数据放入。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试16 文件n文件指针文件指针实际上是指向一个结构体类型的指针,这个结构体类型名为FILE。 FILE *指针变量名; 如 FI
134、LE *fp1,*fp2; 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试16 文件n打开文件在对文件进行读、写操作之前,首先要解决的问题是如何把程序中要读、写的文件与磁盘上实际的数据文件联系起来。C语言中通过调用fopen来实现。fopen(文件名,文件使用方式) 返回一个指向FILE类型的指针。FILE *fp;fp=fopen(“file_a”,”r”); 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试16 文件n打开文件无论使用哪种方式打开,当打开文件出现了错误,fopen函数将返回NULL,建议使用以下程序段,在打开
135、文件发生错误时程序停止运行。#include if(pf=fopen(“file_a”,”r”)=NULL)printf(“cannot open this file”); exit(0); /打开文件失败,返回运行环境。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试16 文件n打开文件文件打开方式及其含义r 为读而打开文本文件rb 为读而打开一个二进制文件w 为写而打开文本文件,若文件不存在,则新建 一个文件;如已存在,则从文件的起始位置开始写,文件中原有的内容将全部消失。Wb 为写而打开二进制文件。可以在指定位置进行写操作,其余功能与w相似。 学C语言,
136、就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试16 文件n打开文件文件打开方式及其含义a 为在文件后面添加数据而打开文本文件。如指定文件不存在,系统用指定的文件建立一个新文件;如果指定文件存在,则文件中原有内容将保存,新的内容写在原有内容之后。ab 为在文件后面添加数据而打开一个二进制文件。其余功能与“a”相同。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试16 文件n打开文件文件打开方式及其含义r+ 为读和写而打开文本文件,用这种方式,指定的文件已经存在,既可以对该文件进行读,也可以对该文件进行写,在读和写操作之间不关闭文件。只是对
137、于文本文件来说,读和写总是从文件的起始位置开始。在写新的数据时,只覆盖新数据所占的空间,其后的老数据并不丢失。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试16 文件n打开文件文件打开方式及其含义rb+ 为读和写而打开一个二进制文件,功能与r+相同,只是在读和写时,可以由位置函数设置读和写的起始位置,也就是说不一定从文件的起始位置开始读和写。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试16 文件n打开文件文件打开方式及其含义w+ 首先建立一个新文件,进行写操作,随后可以从头开始读。如果指定的文件已存在,则原有的内容将全部
138、消失。wb+ 功能与w+相同,只是在随后的读和写时,可以由位置函数设置读和写的起始位置。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试16 文件n打开文件文件打开方式及其含义a+ 功能与a相同,只是在文件尾部添加新的数据之后,可以从头开始读。ab+ 功能与a+相同,只是在文件尾部添加新的数据之后,可以由位置函数设置开始读的起始位置。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试16 文件n关闭文件当对文件的读(写)操作完成之后,必须将它关闭。关闭文件可调用库函数fclose来实现。调用形式为 fclose(文件指针);若f
139、p指向文件file_a的文件指针,当执行fclose(fp)后,若file_a为读方式,则文件指针fp与文件file_a脱离关系;若为写,则将文件缓冲区中的剩余数据全部输出到文件,然后fp与file_a脱离关系。当成功地执行关闭操作后,函数返回0,否则返回非0. 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试16 文件n调用getc(fgetc)和putc(fputc)函数进行输入和输出1、调用putc(fputc)函数输出一个字符putc(ch,fp); 将字符ch写到文件指针fp所指文件中去,如果输出成功,putc函数返回所输出的字符;如果输出失败,则返回
140、一个EOF值。EOF是在stdio.h库函数中定义的符号常量,值为-1。n fputc调用形式与功能与putc函数完全相同。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试16 文件n 调用getc(fgetc)函数输入一个字符ch=getc(pf); 从pf指定的文件中读入一个字符,并把它作为函数值返回。 fgetc函数的调用形式和功能与getc函数完全相同。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试16 文件n判断文件结束函数feof当文件是文本文件时,可以以EOF作为文件结束的标志。当以二进制形式存放文件时,不能采
141、用EOF作为二进制文件的结束标志,而采用feof函数,如遇到文件结束,函数feof(fp)的值为1,否则为0。eeof函数既可以判断二进制文件是否结束,也可以用以判断文本文件是否结束。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试16 文件nfscanf函数fscanf函数只能从文本文件中按格式输入。fscanf(文件指针,格式控制字符串,输入项表)如 fscanf(fp,”%d%d”,&a,&b);nfprintf函数将内存中的数据转换成对应的字符,并以ASCII代码形式输出到文本文件中。fprintf(fp,”%d%d”,x,y) 学C语言,就是学思考问
142、题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试16 文件nfgets函数fgets函数用来从文件中读入字符串。fgets(str,n,fp);从fp随指文件中读入n-1个字符放入以str为起始地址的空间内。nfputs函数fputs函数用来把字符串输出到文件中。Fputs(str,fp);输出成功函数值为正整数,否则为-1(EOF)。 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试16 文件nfread、fwrite函数用来读、写二进制文件。fread(buffer,size,count,fp);fwrite(buffer,size,count,f
143、p); 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试16 文件n文件定位函数文件位置指针表示当前读或写的数据在文件中的位置。fseek函数用来移动文件位置指针到指定的位置上,接着读或写操作从此位置开始。fseek(pf,offset,origin); SEEK_SET 0 文件开始 SEEK_END 2 文件末尾 SEEK_CUR 1 文件当前位置 学C语言,就是学思考问题的过程和解决问题的能力。 实实在在学知识 顺顺利利过考试16 文件nftell函数ftell函数用以获得文件当前位置指针的位置,函数给出当前位置指针相对于文件开头的字节数。T=ftell(fp);n rewind函数rewind(fp)无返回值,使文件的位置返回到文件的开头。 学C语言,就是学思考问题的过程和解决问题的能力。