C程序设计电子教案.ppt_第1页
C程序设计电子教案.ppt_第2页
C程序设计电子教案.ppt_第3页
C程序设计电子教案.ppt_第4页
C程序设计电子教案.ppt_第5页
已阅读5页,还剩141页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计 授课班级:重修(培训) 主讲:耿子林 第一次课 课程说明 一、上课时间第7-14周二的11、12节,地点20308 二、上机时间第7-14周三的11、12节,地点基础1 三、考试时间第14周,星期六的1、2节,地点待定 四、答疑时间: 周四的11、12节,地点信息楼主任室 五、耿子林老师电话010-61591482 六、重修103人,培训25人,年级多,专业多。 七、要有信心,学重点,多练习。 六、内容安排 第一章:C语言概述(0.2) 第二章:算法及算法表示(0.3学时) 第三章:数据类型、运算符和表达式(2.5学时) 第四五六章:顺序、选择、循环结构程序设计(8学时) 第七章:数组(2学时) 第八章:函数(2学时) 第九章:预处理命令(1学时) 第十章:指针(1学时) 第十一章:结构体与共用体(1学时) 总学时:32学时 其中:理论课16学时、上机16学时 第一章 C语言概述 一、C语言出现的历史背景 二、C语言的特点 三、简单C语言介绍* 1、C程序的构成 2、函数的构成 3、C源程序的书写格式和特点 四、C语言的上机步骤 1、C程序的构成 例1.1:输出串“This is a c program.” 1、#include “stdio.h” 2、void main() 3、 4、 printf(“This is a c program.”); 5、 例1.2:输入两个整数,求出最大数,并输出 1、#include “stdio.h” 2、void main() 3、 4、 int a,b,c; 5、 scanf(“%d%d”, 6、 c=max(a,b); 7、 printf(“%d”,c); 8、 9、int max(int x,int y) 10、 11、 int z; 12、 if(xy) z=x; 13、 else z=y; 14、 return(z); 15、 1、C程序的构成 (1)任何一个C程序都是由一个或若干个函数构成的,用函 数来实现特定的功能,函数是C程序的基本单位,C语言是函 数式的语言。 (2)每个程序中必须有且只能有一个main主函数。并且一 个程序总是从main函数开始执行,而不论main函数在程序中的 位置如何。 (3)C程序中的函数分 主函数: 系统(库)函数:如printf、scanf,需要include 包含头文件 自定义函数 三种 2、函数的构成 例1.1:输出串“This is a c program.” 1、#include “stdio.h” 2、void main() 3、 4、 printf(“This is a c program.”); 5、 例1.2:输入两个整数,求出最大数,并输出 1、#include “stdio.h” 2、void main() 3、 4、 int a,b,c; 5、 scanf(“%d%d”, 6、 c=max(a,b); 7、 printf(“%d”,c); 8、 9、int max(int x,int y) 10、 11、 int z; 12、 if(xy) z=x; 13、 else z=y; 14、 return(z); 15、 2、函数的构成 一个函数由函数首部、函数体两部分组成 函数首部:包括函数类型 函数名(参数类型 参数,参数类型 参数 ) 注:参数可以有可以没有,也可以有多个, 小括号必须有 必须没有分号 函数体:由开始、结束, 函数体内包括数据声明(定义变量、数组类型) 和执行语句(由若干语句组成,每个语句最后必须有一个 分号,分号是语句的一部分)两部分 3、源程序的书写格式和程序风格 例1.1:输出串“This is a c program.” 1、#include “stdio.h” 2、void main() 3、 4、 printf(“This is a c program.”); 5、 例1.2:输入两个整数,求出最大数,并输出 1、#include “stdio.h” 2、void main() 3、 4、 int a,b,c; 5、 scanf(“%d%d”, 6、 c=max(a,b); 7、 printf(“%d”,c); 8、 9、int max(int x,int y) 10、 11、 int z; 12、 if(xy) z=x; 13、 else z=y; 14、 return(z); 15、 3、原程序的书写格式和程序风格 (1)C程序书写格式自由,一行可以写几个语句,一个语句 也可以写在多行上。为清晰起见,一般一行写一个语句。 (2)为清晰地表现出程序的结构,建议采用锯齿形程序格式 (3)程序中可以用/*/给程序加注释,以增加程序的可读性 (4)C语言区分大小写,语句、变量大部分都小写 第二章 算法 一、程序设计步骤 二、算法 三、算法表示 四、结构化程序设计 一、程序设计步骤(了解) 程序设计一般包括以下几个步骤: 1、确定数据结构 2、确定算法 3、编写代码(程序) 4、在机器上调试程序 5、整理并写出文档资料 二、算法 算法:是指为解决某一问题而采取的确定、有限的方法和步骤 算法选用原则:尽量简单易懂、且步骤少。 算法特性:有穷性、确定性、有效性、有零个或多个输入、有 一个或多个输出。 三、算法表示 1、自然语言:通俗易懂,但文字冗长,容易出现“歧义性”。 2、传统流程图:缺点占篇幅较多,跳转太多,不便于阅读。 3、NS流程图:(26页图2.24-2.27) 完全去掉了流程线,算法的每一步都用一个矩形框来描述 ,把一个个矩形框按执行顺序连接起来就是一个完整的算法描 述。 四、结构化程序设计 三种基本结构:顺序结构、选择结构、循环结构 经证明任何复杂问题,都可分解用以上三种结构组合实现 小结: 第一章 C语言概述 一、C语言出现的历史背景 二、C语言的特点 三、简单C语言介绍* 1、C程序的构成 2、函数的构成 3、C源程序的书写格式和特点 四、C语言的上机步骤 第二章 算法 一、程序设计步骤 二、算法(特点) 三、算法表示 四、结构化程序设计(三种基本结构) 习 题 一、选择题 1.1 以下不正确的概念是 A、一个C程序由一个或多个函数组成 B、一个C程序必须包含一个main函数 C、在C程序中,可以只包括一条语句 D、 main函数体中最后一条语句可以不写分号 1.2 下述源程序的书写格式不正确的是 A、一条语句可以写在几行上 B、一行上可以写几条语句 C、分号是语句的一部分 D、函数的首部,其后必须加分号 1.3 在C语言程序中 A、main函数必须放在程序的开始位置 B、 main函数可以放在程序的任何位置 C、 main函数必须放置在程序的最后 D、 main函数只能出现在库函数之后 1.4 以下能正确构成C语言程序的是 A、一个或若干个函数,其中main函数是可选的 B、一个或若干个函数,其中必须有一个main函数 C、一个或若干个子程序,其中包括一个主程序 D、由若干个过程组成 二、填空题 1.5 一个C程序是由若干个函数构成的,其中必须有一个( )。 1.6 一个函数由两部分组成:( )和( )。 1.7 一个函数体的范围是以( )开始,以( )结束。 1.8 一个C语句最少应包含( )。 1.9 注释部分以( )开始,以( )结束。 1.10 C语言的主要特点是( )。 1.11 C语言与其他高级语言的主要不同是( )。 1.12 任何C语言程序都是从( )开始执行的。 第三章 数据类型、运算符与表达式 一、 C语言数据类型概述 二、常量与变量 1、常量与变量的基本概念 2、整型常量与变量 3、实型常量与变量 4、字符常量与变量、字符串常量 5、变量定义与赋值 三、数值间的混合运算 四、运算符与表达式 一、 C语言数据类型概述 数据类型 基本类型 构造类型 指针类型 空类型(void-定义函数时使用) 整型 实型(浮点型) 字符型 枚举类型(了解) 数组类型 结构体类型 共用体类型 单精度实型 双精度实型 基本整型 长整型 短整型 二、常量与变量 1、常量与变量的基本概念 常量:在程序运行中其值不能改变的量(常数) 分类:普通常量: 整型常量:12、0、-5 实型常量:4.5、-1.23、3.16 字符常量:a、A、0 字串常量:“wangping”、“beijing” 符号常量:用一符号代表一个常量(带名字的常量) 例:#define PI 3.1415926 #include “stdio.h” #define PI 3.1415926 /*注意位置*/ void main() int r; float s,l,v; scanf(“%d”, s=PI*r*r; l=2*PI*r; v=4.0/3*PI*r*r*r; printf(“%f,%f,%f”,s,l,v); 好处:简化书写、含义清楚、一改全改 注:符号常量命名一般大写,以便和变量区别,位置,分号 变量:在程序运行过程中其值可以改变的量,不同时刻可能有 不同的值。(变量的两个元素:名、值) 变量命名:由用户自由取名,但要遵循以下规则 标识符命名规则: 1、只能由英文字母、数字和下划线组成,且第一个字符必 须为字母或下划线; 2、不能使用关键字 3、区分大小写 4、尽量直观,见名知意,便于记忆和阅读 注:a关键字又称为保留字,C语言中预先规定的具有固定含义 的一些单词 b标识符指用来标识变量名、符号常量名、函数名、数组名 、类型名、文件名的有效字符序列。 以下四组用户标识符全部合法的一组是: A For sub Case B 4d DO Size C f2_g3 IF abc D WORD void define 2、整型常量与变量 整数常量的表示形式:4种 十进制表示:12,-24,36 八进制表示:012,036,-027 十六进制表示:0x12,0xaf 长整型:2L 整型变量:6种,5个关键字 P43页表3.1 整型变量的定义与使用 (1)区分: 12 012 0x12 12L (2)下列整型常量正确的是 0x68,068,0xAE,0xEG,67L 2、整型常量与变量 整型变量的定义与使用 #include “stdio.h” void main() int a,b,c,d; long l,k; short s; unsigned u; unsigned short su; unsigned long lu; a=12;b=-024;u=0x10; c=a+u;d=b+u;/*p54图3-10*/ printf(“a+u=%d,b+u=%dn”,c,d); 3、实型常量与变量 实型常量的表示形式: 实型变量:P46页表3.2 实型变量的定义与使用 #include “stdio.h” void main() float x; double y; x=12.7777; y=1.2e-6; x=x+1; y=y+2; printf(“x=%f,y=%fn”,x,y); 4、字符常量与变量、字符串常量 字符常量:单引号括起来的单个字符 普通字符: 转义字符: (1)n,b,r,t,f (2), , ” (3)141,x61 字符变量 char c1,c2 字符数据在内存中的存储 字串常量 (1)区分 a,141,x61 (2)区分2和2 (3)以下字符常量正确的是 , AB, *, ”b”, 148 6e, x1e, t, a 字符变量的定义与使用 #include “stdio.h” void main() char c1,c2,c3,c4,c5; c1=a; c2=n; c3=141; c4=x61; c5=; printf(“%c%c%c%c%c”,c1,c2,c3,c4,c5); 3.6、变量定义与赋值 C语言变量必须先定义后使用,既可以在定义的时候直接 赋初值,也可以先定义之后再进行赋值 int a,b; a=3; Float f=3.56; Char c=a; 练习 Int x,y,z=6; Int x=6,y=6,z=6; Int x=6;y=6;z=6; Int x=y=z=6; 3.7、数值间的混合运算 自动从低到高自动进行转换为同一类型 ;54页图3-10 3.8、运算符与表达式 、运算符简介(+,-,*,/,% ,=,!= !,在变量的前、后 练习: 1、设:x=2.5,a=7,y=4.7 求:x+a%3*(int)(x+y)%2/4 2、设:a=2,b=3,x=3.5,y=2.5 求: (float)(a+b)/2+(int)(x)%(int)y 3.9、赋值运算符和赋值表达式 赋值运算符(=) 类型转换(以变量类型为准) 复合的赋值运算符(+=,-=,*=,/= ,%=) a+=3;x*=y+8;x%=3 赋值表达式的值 a=b=c=5; a=5+(c=6); a=(b=10)/(c=6) 上机题目:实验指导书(朱冬梅)实验一,实验二 作业教材67页的3.9, 3.10, 3.12下次上课交来,用单张纸 VC+6.0上机步骤 上机准备:在D盘创建自己的子目录 D:jhj 启动:开始-程序-Microsoft Visual Studio-Visual C+6.0 新建编辑: 在编辑环境中选择,File-New-Files-C+ source File 并在Location中选择 自己新建的 D:jhj 在File中输入,创建的程序文件名,如 c1.c 编译连接: 在编辑环境中选择,Build-Build All,根据底部窗口信息 提示进行调试,直到错误和警告全部为0 运行:在编辑环境中选择,Build-Execute 打开、保存、另存为:和Word类似 注意:位置,名字,一个文件调完必须关闭之后新建另一个文件 第四章 顺序程序设计 一、C语句概述 二、赋值语句 三、输入输出的概念及实现 四、字符数据的输入输出 五、格式输入输出 六、顺序结构程序设计 4.1 C语句概述(5类) 例 1、main() 2、 3、 int a,b,c; 4、 scanf(“%d%d”, 5、 c=max(a,b); 6、 printf(“%d”,c); 7、 11、int max(int x,int y) 12、 13、 int z; 14、 if(xy) z=x; 15、 else z=y; 16、 return(z); 17、 4.2 赋值语句 4.3 输入输出的概念及实现 没有专门的输入输出语句,输入输出功能由函数来实现: putchar() getchar() printf() scanf() puts() gets() 使用以上函数时必须使用include包含stdio.h头文件 4.4 单个字符的输入输出getchar()函数putchar() getchar():从键盘输入一个字符,无参数。 putchar();输出一个字符到屏幕上,一个参数; 如:#include “stdio.h“/*文件包含*/ void main() char ch; ch=getchar();/*输入1个字符并赋给ch */ putchar(ch);putchar(n); 例:从键盘输入一个小写字母,要求用大小写字母形式输出该字母 及对应的ASCII码值。 #include “stdio.h“ void main() char c1,c2; printf(“Input a lowercase letter: “); c1=getchar(); putchar(c1);putchar(n); c2=c1-32;/*将大写字母转换成对应的小写字母*/ putchar(c2); 4.5 格式化输出printf()函数 printf() :按指定的格式显示一个或多个任意类型的数据。 一般格式为:printf(格式控制、输出列表); 如:printf(“%d%dn”,a,b); 格式控制:可包括格式说明、普通字符、转义字符组成。 1、格式说明:由%和格式字符组成,如%d,%f等,控制数据按指定格式输出。 2、普通字符:即需按原样输出的字符。 3、转义字符:如n表示回车换行。 如:printf(“a=%dnb=%dna+b=%d”,a,b,a+b); 格式字符:d以带符号的十进制形式输出输出列表对应的数值(正数不带符号) 。 s输出字符串。 c以字符的形式输出,只输出一个字符。 f以小数形式输出单、双精度数,隐含输出6位小数。 e以指数形式输出单、双精度数,数字部分小数位数为6位,(e02)。 g选用%f或%e格式输出宽度较短的格式输出,不输出无意义的0 o以八进制无符号的形式输出整数(不输出前导符0)。 x以十六进制无符号的形式输出整数(不输出前导符0x)。 u以无符号十进制形式输出整数。 l可加在格式符d、o、x、u前面,用于输出长整型数据。 m数据最小宽度。 .n对实数,表示输出n位小数(四舍五入); 对字符串,表示截取的字符个数; 输出的数字在域内向左对齐。 如:a=1234;b=c;d=123.456; printf(“%8d” ,a); printf(“%-8d” ,a); printf(“%c”,b); printf(“%d” ,a); printf(“%o” ,a); printf(“%d”,b); printf(“%x”,a); printf(“%8d”,-a); printf(“%f” ,d); printf(“%e” ,d); printf(“%8.2f” ,d); printf(“%g” ,d); 说明:对长整形变量应在doxu前加字母l,即%ld,否则可能出错;一 个负整数以%o%x格式输出,不会输出带符号的八进制或十六进制,而将内 存单元中的符号位一起按数字输出;输出字串时也可以省略格式符,直接输 出字串。 格式化输入scanf()函数 scanf() 输入数据。 一般格式:scanf(格式控制,地址表列) 如scanf(“%d”, %d表示按十进制整数形式输入数据。用%d%d%d格式输入三个数 据时,在两数据间可以空格、回车分隔,不能用逗号分隔。 格式字符: d、c、s、f 如:scanf(“%c”, 说明: 1、如在格式控制字串中除格式说明还有其他字符,则在输入数 据时应输入与这些字符相同的字符。 如:scanf(“%d:%d:%d”, 要输入:12:23:36 scanf(“%d,%d,%d”, 要输入:12,23,36 4.6 顺序结构程序设计 例10/11/12 第四章 小结 一、C语句概述(5个) 二、赋值语句(功能,区别) 三、输入输出的概念及实现(3) 四、字符数据的输入输出(getchar,puchar) 五、格式输入输出(printf,scanf) 六、顺序结构程序设计(简单问题会自己编程序解决) 第五章 选择结构程序设计 一、关系运算符及其表达式 二、逻辑运算符和逻辑表达式 三、if语句 四、条件运算符 五、switch语句 六、选择结构程序举例 5.1 关系运算符及其表达式 1、关系运算符及其优先次序 A关系运算符 C语言提供6种关系运算符: (大于) =(大于或等于) =(等于) !=(不等于) 注意: 双等号 “= =”与单等号“= ”的区别;不等于写法 B优先级 算术运算符、=、!=赋值运算符 (92页例题) 2、关系表达式 A关系表达式的概念 所谓关系表达式是指,用关系运算符将两个表达式连接起 来,进行关系运算的式子。 例如,下面的关系表达式都是合法的: ab,a+bc-d,(a=3)=b,(ab)=(bc) B关系表达式的值逻辑值(成立/不成立)(非“真”即“ 假”) 由于语言没有逻辑型数据,所以用整数“”表示“ 逻辑真”,用整数“”表示“逻辑假” 例如,假设num1=3,num2=4,num3=5,则: (1)num1num2的值=0。 (2)(num1num2)!=num3的值=1。 (3)num12=0”。如果需要 描述“x=0”、同时“x=0 则执行(m=ab) else printf(“The Max is:%d”,b); 一、if语句的三种形式 1、if(表达式) 语句; 2、if(表达式) 语句1; else 语句2; 3、 if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; else if(表达式n) 语句n; else 语句n+1; 说明: 1、if后表达式可以是关系表达式、逻辑表达式或其他表达 式,表达式非时为真,时为假。 2、else语句不能单独使用,必须和if配对使用。 3、if else后的语句既可以是一个语句,也可以是用括 起来的复合语句。 4、if else后的每一个语句后有一个分号;且只能有一个语 句(单语句或复合语句); 5、if语句中可以嵌套一个或多个if语句。 如:if() if() 语句; else 语句; else if() 语句; else 语句; 二、条件运算符(条件表达式) C语言中唯一的一个三目运算符。 一般形式为:表达式?表达式:表达式 说明: 1、条件运算符的执行顺序:先求解表达式,若为非 (真)则求解表达式,此时表达式的值作为整个条件表达 式的值。若表达式的值为(假),则求解表达式,表达 式的值作为整个条件表达式的值。 2、条件运算符优先于赋值运算符:如 max=(ab)?a:b 先求解(ab)?a:b的值再赋给max。 3、运算结合方向“自右至左” 如ab?a:cd?c:d相当于ab?a:(cd?c:d) 练习: 假定w、x、y、z、m均为int型变量,有如下程序段 w=1; x=2; y=3; z=4; m=(wi) printf(“ tai da le!“); else printf(“ tai xiao le!“); 44switchswitch多分支多分支 44switch (switch (表达式表达式) ) case case 常数常数1:1:语句序列语句序列1; 1; case case 常数常数2:2:语句序列语句序列2;2; default:default:语句序列语句序列3;3; 44defaultdefault可以没有,但最好不省略可以没有,但最好不省略 44不要忘记不要忘记breakbreak 三、循环结构 for (for (表达式表达式1; 1; 表达式表达式2; 2; 表达式表达式3)3) 语句语句; ; while (while (表达式表达式) ) 语句语句; ; dodo 语句语句; ; while (while (表达式表达式); ); A A 条条 件件P P 条条 件件P P A A 当型循环当型循环直到循环 直到循环 例例:先由计算机:先由计算机“ “想想” ”一个一个1 1到到100100之间的数请人猜,如之间的数请人猜,如 果人猜对了,则结束游戏,否则计算机给出提示,告果人猜对了,则结束游戏,否则计算机给出提示,告 诉人所猜的数是太大还是太小,直到人猜对为止。计诉人所猜的数是太大还是太小,直到人猜对为止。计 算机记录人猜的次数,以此来反映猜数者算机记录人猜的次数,以此来反映猜数者“ “猜猜” ”的水平的水平 。 算法的描述方法算法的描述方法 流程图流程图 与基本控制结构相应的结构化的控制语句与基本控制结构相应的结构化的控制语句 if-elseif-else switch (case break default)switch (case break default) forfor whilewhile do-whiledo-while breakbreak continuecontinue 常用算法,如常用算法,如累加、累乘、统计累加、累乘、统计、穷举、递推、迭、穷举、递推、迭 代等代等 常用算法常用算法 求累加、累乘求累加、累乘: : 数据类型的定义数据类型的定义 初始值初始值 计数器(统计)计数器(统计): (: (课后题课后题) ) 统计正数、平均分以上、统计正数、平均分以上、n n个成绩中个成绩中1009010090、 89808980、79707970、69606960、包含 头文件。 常用函数: puts(str)输出字串 gets(str)输入字串 stract(str1,str2)字串连接 strcpy(str1,str2)字串拷贝 strcmp(str1,str2)字串比较 strlen(str)求字串长度 strlwr(str)字串中大写改为小写 strupr(str)字串中小写改为大写 六、字符数组程序举例 1、计算输入字符串长度。 2、求输入三个字符串中的最大串,并输出。 3、统计一行字符中的单词个数。 4、两字串连接。 5、两字串比较。 复习: 第七章 数组 第一节 数组的定义与引用 一、数组的概念 二、数组的定义与初始化 三、数组元素的引用 四、数组的应用 第二节 字符数组 for(i=0;i 如使用自定义的函数,一般还应在文件开头或主调函数中对 被调函数类型进行声明。 声明形式为: 函数类型 函数名(); 函数类型 函数名(参数类型1,参数类型2,参数类型n); 函数类型 函数名(参数类型1 参数1,参数类型2 参数2 ,); 以下两种情况可以不必声明:一是函数类型为整形或字符 型,系统自动按整型声明;二是被调用函数定义在主调函数之前 ; 函数定义互相平行、独立,即在定义函数时,一个函数 中不能包含另一个函数;但调用时可以嵌套调用,一个函数可以 调用另一个函数。 六、函数应用举例 1、求1!+2!+3!+4!+5!+6! 2、编程实现打印如下图形 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 3、编程函数实现判素数 七、习题作业 1、实验指导书22页第4题; 2、编程实现:求100以内所有素数的和; 3、编程实现:将100以内所有素数依次放置到数组AN 中,并输出数组中的各素数。 (嵌套调用) 一、函数的递归调用 定义:在调用一个函数的过程中有出现直接或间接地调 用函数本身,称为函数的递归调用。 int fac(int n) int c; if(n=0|n=1) c=1; else c=n*fac(n-1); return c; 二、局部变量和全局变量 、局部变量:在一个函数或复合语句内部定义的变量是内 部变量,他只在本函数或复合语句范围内有效或使用。 说明: 主函数main中定义的变量也只在主函数中有效,不能因 为在主函数中定义而在整个文件或程序中有效。 不同函数中可使用相同名字的变量,他们代表不同对象、 占用不同单元、互不干扰。 形参也是局部变量,只在本函数中使用。复合语句中的变 量,只能在本复合语句中使用,离开复合语句,变量释放内存单 元。 、全局变量:在函数外部定义的变量称为外部变量或全局 变量,全局变量可以为本文件中的其他函数所共用,有效范围为 :从定义变量的位置开始到本源文件结束。 全局变量增加了函数间数据联系的渠道,由于同一文件 中的所有函数都能引用全局变量的值,因此,若一个函数中改变 了全局变量的值,就能影响到其他函数,相当于各个函数间有直 接的传递通道。由于函数调用只能返回一个值,有时可利用全局 变量增加与函数的联系,从函数得到多个返回值。 若全局变量定义在文件开头,则在整个文件范围内都可以 使用该变量,如果不在文件开头定义,作用范围只限于定义点到 文件结束。如果在定义之前的函数想引用该变量,则应在函数中 用关键字extern作“外部变量声明”,表示这些变量是后面定义的 外部变量。(extern a,b;) 同一文件中,外部变量与局部变量同名,则在局部变量的 作用范围内,外部变量不起作用。 建议编程是尽量不要使用全局变量。 三、动态存储变量与静态存储变量 从变量的作用域角度分,可分为全局变量和局部变量。 从变量值的存在时间来分,可分为静态存储变量和动态 存储变量。 静态存储变量:是指在程序运行期间分配固定的存储空 间的方式。全局变量是静态存储变量。 动态存储变量:是指在程序运行期间进行动态分配存储 空间的方式。函数形参、局部变量、函数调用时的现场保护 和返回地址等。 C语言中每一个变量均有两个属性:即数据类型和存储类 别。 数据类型指整型、字符型等; 存储类别指数据在内存中的存储方式,分为静态存储和动 态存储。 具体又包括自动的:auto:动态局部变量 静态的:static:内部静态变量或外部静态变量 寄存器的:register:寄存器变量 外部的:extern:声明变量是已定义的外部变 量 所以完整的变量定义形式为: 存储类型 数据类型 变量名 如:static int a; 局部变量: 、函数中、动态分配存储空间,称为局部动态变量或 自动变量。用auto声明,auto可省略,不写默认为自动存储 变量。(以前使用) 、有时为使函数中局部变量在函数调用后不消失而保 留原值,可定义为局部静态变量。用static加以声明。 说明: 局部静态变量属于静态存储类别,在静态存储区内分配存 储单元,在程序整个运行期间都不释放,而自动变量属于动态 存储类别,占动态存储区空间,函数调用后释放。 对局部静态变量赋初值是在编译时赋初值的,只赋初值一 次,以后每次调用函数时不再重新赋初值,而只是保留上次函 数调用结束时的值;而对自动变量赋初值,是在函数调用时进 行的,每调用一次函数重新给一次初值。 如自动变量不赋初值,取随机值,局部静态变量不赋初值 取0或空字符。 虽局部静态变量在函数调用后仍占存储单元,但由于该变 量是局部变量,其他函数不能引用他。 、有时为提高速度,减少从内存中取变量值的时间,可 将局部变量值放在运算器的寄存器中。这种变量叫寄存器变 量,用register声明。 说明: 只有局部自动变量和形式参数可以作为寄存器变量,其 他不行(全局、局部静态) 一个计算机中的寄存器是有限的,不能定义任意多个寄 存器变量 局部静态变量不能定义为寄存器变量,不能对寄存器变 量取地址,因为寄存器变量不在内存中。 全局变量: 、如果一个文件中要引用另一文件中定义的全局变量 ,应该在需要引用他的文件中使用extern作声明。如:extern int a;(默认) 、若希望某些全局变量只限于被本文件使用,可在外 部变量定义时前加一个static声明。如:static int a; 变量存储类别小结: 内部函数 外部函数 第八章 宏定义 一、不带参数的宏定义:用一个标识符代表一个常量(串常量 ,整常量)。 定义为:#define 标识符 常量 说明:1、宏名一般用大写,以和变量名区别。 2、用宏名代替一个字符串,可以减少程序中重复书写某 些字符串的工作量,当需改变一个常量时,可以只改变define命 令行。 3、宏定义用宏名代替一个字符串,只作简单替换,不作 语法检查。 4、宏定义不是语句,不用分号。 5、宏定义命令出现在程序中函数外,有效范围为定义命 令后到本文件结束。如果需要,可以用#undef 标识符命令结束 定义作用域。 6、进行宏定义时可以引用已定义的宏名,层层置换。 二、带参数的宏定义 定义为:#define 宏名(参数表) 字符串 字符串中包含括弧中所指定的参数。展开时用实参代替形 参原形替换。 如:#define s(a,b) a*b area=s(2,4); 注意:1、#define PI 3.1415926 #define s(r) PI*r*r main() area=s(a+b); 三、函数和宏定义的区别 1、函数调用时,先求出实参表达式的值,然后带入形参 ,而使用带参数的宏只是进行简单的字符替换。 2、函数调用是在程序运行时处理的,分配临时内存单元 。而宏展开在编译时进行,不分配内存单元,不进行值传递, 没有返回值。 3、函数中的实参和形参都要定义类型,二者类型必须一 致,而宏定义宏名无类型、参数也无类型。 4、函数只能返回一个值,而宏定义可以设法返回多个值 。 5、使用宏次数多时,宏展开原程序增长,而函数不会使 原程序增长。 6、宏替换不占运行时间,只占编译时间,而函数调用占 运行时间。 四、文件包含处理 一个源文件将另一个源文件的全部内容包含进来。 #include :直接按系统检索方式查找文件。 #include “文件名”:先在引用文件所在目录中查找文件 ,若找不到再按系统检索方式查找文件。 五、条件编译 第十章 指针 第一节 指针的概念 一、什么是变量的指针: 一个变量的指针,就是该变量在内存中的起始地址。 main() int a=6; printf(“%dn”,a); /显示变量的值 printf(“%x”, /显示变量的指针, 变量的三个要素 二、什么是指针变量: 指针变量,只能用来存放地址型数据的变量。 如:int *p; p= 注意区别变量指针和指针变量 三、指针变量的定义 一般形式:类型 *标识符; 如:int *p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论