《C语言程序设计期末复习.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计期末复习.ppt(156页珍藏版)》请在人人文库网上搜索。

1、C 程序设计 锦城学院电子系 周红,祝大家圣诞快乐! 愿考试顺利通过!,考试题型及分值,一、单项选择题(每小题2分,共计40分) 二、程序填空题(每空3分,共计24分) 三、写程序输出结果(每小题4分,共20分) 四、编程题(每小题8分,共计16分),第1部分 第2部分 第3部分 第4部分 第5部分 第6部分 第7部分 第8部分 第9部分,第1 部分 程序基本框架,C程序结构,#:预处理命令,即在程序执行之前,编译器进 行的处理。这些命令都放在函数外面,一般放在 源文件的前面。 #include:文件包含,预处理命令的一种。指将 另外一个源文件的内容全部包含到此源文件中来,开始,两种形式: 1。

2、. #include“文件名” 2. #include : 表示此文件为标准库头文件,查找时从系统设置 的包含文件目录下查找 “ ”:表示此文件为程序编写的文件,查找时从正在编译 的程序所在目录下查找,若找不到再按标准格式查找,B,file1.h,file2.c,#include,A,包 含,A,B,等 价 于,file2.c,注意:被包含的文件名扩展名一般为 .h 它是head的缩写,表示这个文件是头文 件(标题文件)。这些文件里面包含了 一些函数原型、宏定义、结构体类型定 义、全局变量定义等。这样我们可以直 接拿来用,不用每个人都自己去定义。,常用的头文件:,#include: stand。

3、ard in out .head 标准输入输出头文件:用到输入输出函数 如:printf、scanf时都要先包含它才能用。 #include: standard library .head 系统函数头文件:用到系统函数 如:system等,都要先包含它才能用。 #include: math .head 数学函数头文件:用到数学函数,如:开方函数 sqrt、绝对值函数abs等,都要先包含它才能用,C语言程序的基本结构,/* 注释 */ #include /* 输入输出函数在此声明 */ #include /* 其他函数声明所在 */ int main(void) 变量定义语句; /* 例如 in。

4、t a, b=3, sum; */ 输入语句; /* 例如 scanf(“%d”, ,scanf一定要通过变量地址(位置)接受输入,printf 则只需要通过变量名称就可输出,书 写 程 序 易 出 错 处,忘记切换中英文输入法 /* 输出一行信息 */ #include int main(void ) printf (“This is a C program.n”); return 0; ,书 写 程 序 易 出 错 处,2. 主函数的名称和头文件的名称写正确 /* 输出一行信息 */ #include int main(void ) printf (“This is a C program。

5、.n”); return 0; ,书 写 程 序 易 出 错 处,3. 语句结尾的分号不能丢 /* 输出一行信息 */ #include int main(void ) printf (“This is a C program.n”); return 0; ,书 写 程 序 易 出 错 处,4. 主函数返回的是0,不是o /* 输出一行信息 */ #include int main(void ) printf (“This is a C program.n”); return 0; ,书 写 程 序 易 出 错 处,5. 大花括弧书写要完整 /* 输出一行信息 */ #include int 。

6、main(void ) printf (“This is a C program.n”); return 0; ,练 习,选择题: 1. 一个源程序中,main函数的位置_____。 A)必须在最开始 B)必须在系统调用的库函数的后面 C)可以任意 D)必须在最后,C,练 习,选择题: 2. 一个C程序的执行是从_____。 A)本程序的main函数开始,到main函数结束 B)本程序的第一个函数开始,到本程序文件的最 后一个函数结束 C)本程序的main函数开始,到本程序文件的最后 一个函数结束 D)本程序的第一个函数开始,到本程序main函数 结束,A,练 习,选择题: 3. 以下叙述正确。

7、的是_____。 A)一个C源程序可以不包含main函数 B)C程序的每行只能写一条语句 C)C语言本身没有输入输出语句 D)在C程序中,注释说明只能位于一条语句的后面,C,第2部分 数据类型、运算符与表达式,标识符(区别大小写):用来标识变量名、符号常 量名、函数名、数组名、类型名、文件名的有效字 符序列。,标识符的构成规则:(不能使用关键字),以字母(大小写均可)或以下划线开头 随后可跟若干个(包括0个)字母、数字、下划数 标识符的长度各个系统不同,建议不要超过8个,例:判断下列标识符号合法性 sum Sum M.D.John day Date 3days student_name #33。

8、 lotus_1_2_3 char ab _above $123,M.D.John,3days,#33,char,ab,$123,C语言关键字表格(c99标准)P365 也称保留字,它是C语言中具有特定含义,专门用 做语言特定成分的标识符。,练 习,1. 下列选项中,均是合法标识符的选项( ) A _a void zhangsan B _12 5.2 include C _888 fun _INT D -12 const 2*a,C,练 习,2. 下列选项中,均不是C语言关键字的是( ) A define IF type B getc char printf C include scanf c。

9、ase D while go pow,A,常量定义:在程序执行过程中,其值不发生改 变的量称为常量。不同类型的常量: int 类型常量:12,0,012,0 x10 double 类型常量:4.6、-1.23 float 类型常量:5.5f , 6.0F char 类型常量:a,d,n 字符串常量:“hello world!” , “h21tt*#” 符号常量:define PI 3.1415926,转义字符表格,变量定义:在程序执行过程中,其值可以改变的量称为变量。,变量要先定义,后使用,一般定义格式: 数据类型 变量名1 ,变量名2,变量名n; 可以定义的同时进行初始化:int a,b=2。

10、;,在32位系统,C99标准下,输入输出函数,格式输入函数 scanf 格式输出函数 printf 字符输入函数 getchar 字符输出函数 putchar,格式字符和格式函数,%d %o %x %u %f %e %c %s printf(“%d, %dn”, a, bi); scanf(“%d, %d”, ,字符、字符串输入输出,putchar(ch); putchar(n); ch=getchar( ); ( ch=getchar( ) )!=n; / 若从键盘输入1a23,不同类型数据混合计算,类型之间的转换规则:,横向向左的箭头表示必定的转换 纵向的箭头表示当运算 对象为不同类型时转。

11、换的 方向。 例:10+a+i*f-d/lo 强制类型转换: (double) a (将a转换成double类型),double,float,long,unsigned,int,char,short,低,高,unsigned long,运算符表格见课本P365 附录C优先级别及结合性口诀:,括号成员第一; (右向) 全体一元第二; 乘除余三,加减四; 移位五,关系六; 等于不等排第七; 位与异或和位或; “三分天下”八九十; 逻辑或跟与; 十二和十一; (右向) 条件高于赋值; 逗号运算级最低!,第一级,自左向右,运算符 含义 实例说明 ( ) 圆括号 (a+b)*c 下标运算符 array5。

12、+2 - 指向结构体成员的运算符 p-num等价于 (*p).num . 结构体成员运算符 stu.num,第二级,自右向左,运算符 含义 实例说明 ! 逻辑非 !a 结果为1或0 按位取反 3 结果为-4 / 自增 / 减 前置和后置 - 负号 -5 (类型) 类型转换 (int)3.5 */ /4,第三、四级,自左向右,运算符 含义 实例说明 * 乘 / 除 2 / 3 2.0 / 3 3.0 / 2 % 余 2%3 -2%3 2%-3 + 加 减,第五十级,自左向右,运算符 含义 优先级 实例说明 1 2 = 关系 6 = != 是否相等 7 else printf(“a!=b”);,修。

13、改: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);,正确配对方法: 加,else总是和它上 面最近的if 配对,歧 义 性,switch语句,switch( 表达式) case E1: 语句组 1; break; break; case E2: 语句组 2; break; break; . case En: 语句组 n; break; default: 语句组 ; break; break; ,整型数据或 字符型数据,常量或常量 表达式,跳出switch 语句,例 子:,更 改 例 子:,1、while 语句的形式: while 。

14、(表达式) 循环体 ;,特点:先判断循环表达式,后执行语句。,2、 do-while的形式: do 循环体; while (表达式);,特点:先执行循环体, 再判断循环表达式的条件,3、for的形式: for (初始表达式1;条件表达式2;循环表达式3) 循环体 ; ,为循环变量 设置初始值,循环条件, 决定循环次数,修改循环 变量,break 语句功能:在循环语句和switch语 句中,终止并跳出循环体或开关体 说明: break只能终止并跳出最近一层的结构 break只能用于循环语句和switch语句,continue,功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环。

15、体的判断。 仅用于循环语句中,常与if条件语句一 起使用, 用来加速循环。,判断循环次数,程序段: int k = 10; while(k=0) k=k-1;,程序段: int k = 10; while(k=0) k=k-1;,第4部分 函数,一个C程序可由一个主函数和若干个函数构成。,小学题目: 有三个未知数x,y,z,都是整数,要求任意给出 x,y的值,即能求得z的值,有公式如下: x (xy) z= y (xy),思路:将数学中的公式转化为程序中的函数,求两个数中的较大者 int max(int x,int y) /* 定义max函数, 形式参数x,y为整型*/ /*max函数的开始*。

16、/ int z; /* 声明部分,定义本函数中用到的变量z为整型*/ if (xy) z=x; else z=y; return z; /*将z的值返回,通过max带回调用处*/ /*max函数的结束*/,公式内容,公式(函数)写好了,要将公式应用于运算中, 需要给出未知数的值,然后将值带入到公式中, 求得结果。根据公式有: 当 x=1, y=2时 , 有xy, 则 z=x=4; x (xy) z= y (xy),例1.3 求两个数中的较大者 int main (void) /* 主函数*/ int a, b, c; /*声明部分,定义变量*/ scanf (“%d,%d”, ,合并为完整程序。

17、,函数调用在函数定义前面,要在调用之前写函数声明,即 (函数首部加分号): int max(int x, int y); 便于检查函数调用书写是否写正确,函数定义的一般形式,合法标识符,函数返回值类型 缺省表示int型 无返回值void,函数体,例 有参函数 int max(int x,int y) int z; z=xy?x:y; return(z); ,例 无参函数 void printstar( ) printf(“*n”); 或 void printstar(void) printf(“*n”); ,类型1 参数1,类型2 参数2.,函数的调用形式: 函数名(实参表列); 说明: 实参。

18、与形参个数相等,类型匹配(有时需要 转换,如3.5传给整型的实参,是将3.5取整 后传递 ),按顺序一一对应 实参表求值顺序,因系统而定(VC 自右向左),练 习,输出结果是?,a,b,x,y,3,4,3,4,复制传值,方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值 特点:形参与实参占用不同的内存单元;单向传递,递归调用 定义:函数直接或间接的调用自身叫函数的递归调用,int f(int x) int y,z; z=f(y); . return(2*z); ,【例8.8】求n的阶乘,第5部分 数组,数组(Array)在C语言中是构。

19、造出来的数据 类型。 数组:是可以通过数组名和下标访问的同类型 有序数据元素的集合。 一维数组定义: 类型说明符 数组名 常量表达式;,int n; scanf(“%d”, 3、全部元素初始化为0: int a10=0;,注意:初值个数不能超过数组长度。否则,会出现语法错误。,注意:在对数组的所有元素赋初值时,可以不指定数组长度。系统自动定义其长度为5,全部初始化为1 int a10=1; 错误,二维数组的定义和引用,二维数组定义: 类型说明符 数组名常量表达式常量表达式 ; 例: float a34; int b510;,0 1 2,0 1 2 3,二维数组的引用,引用格式: 数组名行下标列。

20、下标 ; 例: int a23; a00、a01、a02 a10、a11、 a12,注意:二维数组的元素在内存中的排列顺序是按行存放的,常出现的错误:下标越界! a23=3; /*应为a12=3;*/,二维数组的初始化,1、分行赋值: 例:int a34 = 1,2,3,4,5,6,7,8, 9,10,11,12; 1 2 3 4 5 6 7 8 9 10 11 12,2、全部数据写在一个花括号内,按数组排列的顺序对各元素赋 初值: 例:int a34 = 1,2,3,4,5,6,7,8,9,10,11,12; int a 4 = 1,2,3,4,5,6,7,8,9,10,11,12;/ 列下。

21、标不能省,注意:该方法容易遗 漏数据,不易检查错误。,#include int main(void) int a34,i,j,max,row=0,col=0; / 定义变量及初始化 for (i=0;i3;i+) for (j=0;j4;j+) scanf(“%d”, ,保持将最大值赋给max,【例7.5】求一个3*4矩阵的最大值及其所在行列下标,例:数组元素与 数组 名作函数参数比较,值传递,数组作为函数参数,地址传递,例:数组元素与数组 名作函数参数比较,数组名作为函数参数,地址传递,传递的数组首地址,数组排序的典型例子:冒泡算法,3、对部分元素赋初值: (1) int a34 = 1,5。

22、,9; 1 5 9 0 0 0 0 0 0 0 0 0 功能: 仅对a00、a01、a02赋值,(2)int a34 = 1,5,6,9; 1 0 0 0 5 6 0 0 9 0 0 0 功能:仅对a00、a10、a11、a20赋值,字符数组与字符串的关系: 在C语言中,用字符数组来存储字符串 例:将字符串“A string”存储在字符数组中: char s=“A string”; char s=“A string”; char s=A, ,s,t,r,i,n,g,0 ; char s=A, ,s,t,r,i,n,g;,正确的字符串存储方式 长度:9, 错误的字符串存储方式, 是普通字符序列,。

23、长度:8,等价,并且,要重新给字符数组(字符串变量)赋值,使它 改而存放别的字符串,可以使用赋值语句为每个字符 数组元素赋值,不能使用赋值语句对字符串变量直 接赋值。,例如: char s=“A string”;若要修改为 cat 方法1:s0=c; s1=a; s2=t; s3=0 / 正确 方法2: s=“cat”; s=“cat”; / 错误,防止重新给字符数组赋值时出现越界情况, 习惯上将字符数组长度设置大一些。 如: char c10=china;,字符串处理函数,注意:字符串函数均在头文件 string.h 中定 义,要使用这些函数,需将此文件包含进来。,1.字符串输出函数 put。

24、s,格 式:puts(字符串) 功 能:将字符串结束标志0转换成n后输出字符串。,例如:char c6=“China”; 执行函数:puts(c); 等价于: printf(%sn,c);,字符串可以是字符串变量,也可以是字符串常量。 例如:puts(“China”);,2. 字符串输入函数 gets,格 式:gets(字符数组) 功 能:从键盘输入一个字符串到字符数组中。,例如:char s30; 执行函数 : gets(s) 从键盘输入:Computer 将包括0在内的9个字符送到字符数组s中。,注 意: gets()、puts()一次只能输入输出一个字符串。 scanf()、printf。

25、()则可以输入输出多个字符串。 使用gets()函数输入的字符串以回车符结束; scanf()函数以空格或回车符结束字符串的输入。,意味着该函数输入的字符串中允许包含空格,3. 字符串连接函数 strcat,格 式:strcat(字符数组1,字符数组2) 功 能:把字符数组2中的字符串连接到字符数组1中的字符串的后面,结果放到字符数组1中。,例如:char str130=It is a ; char str2 =cat.; strcat(str1,str2); printf(%s,strcat(str1, I like it. ); 输出?,注 意: 1)数组1必须足够大,以容纳连接后的新字符。

26、串。 2)连接时串1后面的0被覆盖,只在新串后保留一个0。,字符数组2可为字符串常量,1呢?,4. 字符串复制函数 strcpy,格 式:strcpy(字符数组1,字符串2) 功 能:将字符串2复制到字符数组1中,该字符数组1 中原有内容被覆盖。,例如: char str110=“good”; char str215=Chinese; strcpy(str1,str2); strcpy(str2,”It is a cat.”); puts(str1); puts(str2);,字符数组1足够大容纳复制过来的字符串,5. 字符串比较函数 strcmp,格 式:strcmp(字符串1,字符串2) 。

27、功 能:比较“字符串1”和“字符串2”。 比较规则:自左至右逐个字符比较ASCII码,直到遇 到不同字符或0,比较的结果由函数值带回。 字符串1 字符串2, 函数返回正整数 , 1,例如: strcmp(“a”, “b”); 函数返回-1 即:“a”“compare”,6. 求字符串长度函数 strlen,格 式:strlen(字符串) 功 能:测字符串实际长度,不包含0在内。 例 如:char str10=“China”; printf(%d, strlen(str); 输出结果: 10? 6? 应该是 5,7. 字符串大小写转换函数,格 式: strupr(字符串) 功 能:将字符串中的小。

28、写字母转换成大写字母。 例 如:char str1“abcdef”; strupr(str1);puts(str1); 结果:ABCDEF,8. 字符串大小写转换函数,格 式: strlwr(字符串) 功 能:将字符串中大写字母转换成小写字母。 例 如:char str2 =“ABCDEF”; strlwr(str2); puts(str2); 结果:abcdef,【例7.9】 输入有3个字符串,要求找出其中最大者。 设一个二维字符数组str,大小为320,即有3行20 列,每一行可以容纳20个字符。,str320,第6部分 指针,在语言中,用指针来表示一个变量指向 另一个变量这样的指向关系。。

29、P i 所谓指针即地址。 P里面存放i的地址 一个变量的指针即该变量的地址。 i变量的指针就是i变量的地址 指针变量:专门存放地址的变量。,总结:定义指针的目的:为了通过指针去访问内存单元。,变量的指针与指针变量,定义一个指针变量,类型说明符 *变量名;,例:int * pi;,指针的目标变量的数据类型,表示定义指针变量 不是*运算符,合法标识符, int *p; *p=i; printf(“%d”,*p); ,危险!,例 int main(void) int i=10,k; int *p; p= ,指针变量必须先赋值,再使用,【例10.1】通过指针变量访问整型变量,不能写为: *pointe。

30、r_1= a; *pointer_2= b;,方法1:目标变量值不变,改变指针变量的指向求解。 int main(void) int a,b,*p1,*p2,*p; p1= ,a=6,b=8 max=8,min=6,【例10.2】输入a、b两个整数,使用指针变量按大小顺序输出这两个整数。,指针运用,a=8,b=6 max=8,min=6,6,方法2:利用指针变量直接改变目标变量的值求解。 int main(void) int a,b,t,*p1,*p2; p1= ,指针和数组,数组名可以看作一个指针只是不能修改这个指针的 指向(常指针) 两者可混用: int *p, a10; p = / 合法。

31、,1. int array10; int *p; p=,指向数组的指针初始化方法,2. int array10; int *p; p=array;,3. int array10; int *p=,4. int array10; int *p=array;,四种方法等价!,指针的运算 1.指针变量的赋值运算 p= (指针变量p2值p1),注意:1.指针变量与其指向的变量具有相同数据类型 2.不能把一个整数p,也不能把p的值整型变量,例: int i, *p; p=1000; () i=p; (),2.指针的算术运算: pi p id (i为整型数,d为p指向的变量所占字节数) 若p1与p2指向同。

32、一数组,p1-p2=两 指针间元素个数 (p1-p2)/d p1+p2 无意义,3. 指针变量的关系运算 若p1和p2指向同一数组,则 p1p2 表示p1指的元素在后 p1=p2 表示p1与p2指向同一元素 若p1与p2不指向同一数组,比较无意义 p=NULL或p!=NULL,格式: 指针变量 指针变量 指针变量 指针变量 ,4. 指针的移动,例如:*p+ (*p)+ *+p +*p,*和+ 优先级相同 具有右结合性,含义?,数组名作函数参数,是将实参数组的地址传递给形参 指针变量作函数参数,是将指针变量指向的地址传递 给形参。 数组名和指针分别作函数参数,实参与形参的对应关系,数组名、指针变。

33、量作函数参数,总结:要想在函数中改变数组中元素的值,实参和形参的对应关系共有4种形式:,形参和实参都用数组名 例如: void f (int x , int n) ,int main(void) int a10; f(a,10); ,数组a, x,a0,x0,a9,x9,2. 实参用数组名,形参用指针变量 例如: void f (int *x, int n) ,int main(void) int a10; f(a,10); ,数组a,x,a9,a0,地址传递,指针x指向数组a的首地址,3. 实参用指针变量,形参用数组名 例如: void f (int x , int n) ,int main。

34、(void) int a10, *p=a; f(p,10); ,数组a, x,p,a9,a0,x9,x0,将p指针指向数组a的首地址,4. 实参、形参都用指针变量 例如: void f (int *x, int n) ,int main(void) int a10, *p=a; f(p,10); ,数组a,p, x,a9,a0,将p指针指向数组a的首地址,void Swap2(int *pi, int *pj) int temp; temp = *pi; *pi = *pj; *pj = temp; int main(void) int a2, b2; scanf(%d,%d, ,传递指针值 。

35、(变量的地址),字符指针方式 int main(void) char *pMeg=I am a boy; printf(%sn, pMeg); return 0; ,等价于: char *pMeg; pMeg =I am a boy;,字符串的指针和指向字符串的指针变量,指针变量的值是可以改变的,数组名虽然代表地 址,但它的值是不能改变的。 例: int main(void) char*p=I love China!; p=p+7; printf(%s,p); return 0; ,char str=I love china; str = str+7; printf(“%s”,str); ,用。

36、指针法实现将字符串b复制到字符串a中,#include int main(void) char a20, b=“I am a student.”, *pa, *pb; for (pa=a,pb=b;*pb!=0; pa+,pb+) *pa=*pb; *pa=0; printf(“%sn”, a); return 0; ,不定义新的指针,能否实 现字符串的复制,不定义新的指针,实现字符串的复制,#include int main(void) char a20, b=I am a student.; int i; for (i=0;*(b+i)!=0; i+) *(a+i)=*(b+i); *(a。

37、+i)=0; printf(%sn, a); return 0; ,字符串指针作函数参数,如何将一个字符串从一个函数传递到另一个函数?,办法:采用地址传递方式,即用字符数组名或指向 字符串的指针变量作函数参数。,例:设计函数stringlen,模拟标准函数strlen。,例:设计函数stringcopy,模拟标准函数strcpy。,数组做参数,例:设计函数stringcopy,模拟标准函数strcpy。,可以改变复制方向吗?,for(;*from!=0;from+,to+) *to=*from;,while(*from) *to+=*from+;,例:模拟标准函数strcmp,设计函数stri。

38、ngcmp实现两个字符串s1和s2的比较,若s1与s2相同,返回值为0,若不同,则返回两者第一个不同字符的ASC码的差值,且s1s2时,返回正数;s1s2时,返回负数。,例:设计函数stringcmp,模拟标准函数strcmp。,例:设计函数stringcat,模拟标准函数strcat。,第7部分 变量的存储类别,内存供用户使用的存储空间: 静态存储方式:在程序运行 期间,由系统分配固定的存 储空间的方式。 动态存储方式:在程序运行 期间,根据需要进行动态的 分配存储空间的方式。,变量的存储类型及其作用域总结,内部变量,外部变量,register,auto,static,static,非sta。

39、tic,extern,在栈区分配存储空间,在静态存储区 分配存储空间,不重复分配存储空间,作用域在块内 或函数内,作用域只限于文件内,作用域可扩展 到其他文件,auto 变量(自动型变量): 函数中的局部变量,如果不专门声明为 static存储类别,都默认为auto变量。 如: auto int b, c=3; /* 定义b、c为auto变量 */ int b, c3; /* 默认b、c为auto变量 */ 两者等价!,2. static 声明局部变量(静态局部变量): 如果希望函数中的局部变量的值在函数调用结 束后不消失而保留原值,即其占用的存储单元 不释放,就用关键字 static 声明变。

40、量。,例题:考察静态局部变量的值,结果:7 8 9,3. extern 声明外部变量: 如果外部变量不在文件的开头定义,其有效的 作用范围只限于定义处到文件结束。如果在定 义点之前的函数想引用该外部变量,则应该在 引用之前用关键字extern对该变量作外部声明。 声明之后就可以合法地使用该外部变量。,(1) 在一个文件内声明外部变量 用extern声明外部变量,扩展它在程序文件中的 作用域。,;,(2) 在多文件的程序中声明外部变量 本程序的作用是给定b的值,输入A、m的值, 分别计算A*b, Am,文件file1.c中的内容:,文件file2.c中的内容:,4. 用static声明外部变量 。

41、程序设计时如希望某些外部变量只限于本文件引用, 定义外部变量时需加static声明。,文件file1.c中的内容:,文件file2.c中的内容:,变量存储类别小结,总结:对一个数据完整定义,需要指定两种属性:数 据类型和存储类别,分别使用两个关键字。 例如: static int a; auto char c; register int d; 此外,还可以用extern 声明已定义的变量为外部变量 例如:extern b;,从作用域角度分,有局部变量和全局变 量。存储类别如下:,作用域角度分类,局部变量,全局变量,静态外部变量(只限本文件引用),外部变量(非静态外部变量, 允许其他文件引用),。

42、自动变量,即动态局部变量 (离开函数,值就消失),静态局部变量(离开函数,值仍保留),寄存器变量(离开函数,值就消失),(形式参数可以定义为自动变量或寄存 器变量),2. 从变量存在的时间(生存期)角度分,有动态 存储和静态存储两种类型。静态存储是程序整个运 行时间都存在,动态存储是在调用函数时临时分配 存储单元。,生存期角度分类,动态存储,静态存储,静态外部变量(本文件内有效),外部变量(其他文件可引用),自动变量(本函数内有效),静态局部变量(函数内有效),寄存器变量(本函数内有效),形式参数(本函数内有效),3. 从变量值存放的位置来区分,可分为:,按变量值存放的位置分,内存中静态存储区。

43、,内存中动态存储区,静态局部变量,寄存器变量,CPU中的寄存器,静态外部变量(函数外部的静态变量),外部变量(可被其他文件引用),自动变量 形式参数,无初始化时: 外部型变量和静态型变量被系统默认初始化为0(或 空字符)。自动型和寄存器型变量系统不会自动给 其初始化,所以如果未初始化,他们的内容为随机值 有初始化时: 外部型和静态型变量,初始化算子必须是一个常量表 达式,只能初始化一次。 自动型和寄存器型变量,初始化算子可以是任意表达 式,这类变量在程序运行时才确定其值,每次函数调 用都需要重新初始化。,不同类型变量初始化,第8部分 结构体,例 struct StudentType / 定义结。

44、构类型 int num; / 学 号 char *name; / 姓 名 char sex3; / 性 别 float score; / 分 数 ;,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ;,成员类型可以是 基本型或构造型,struct是关键字, 不能省略,合法标识符 可省:无名结构体,1. 结构类型声明,不要忽略,2. 结构变量定义及初始化(三种方式),struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ; struct 结构体名 变量名表列初始数据;,结构体变量定义,(1). 先声明结构体类型,再定义结构体变量。,(2).声明结构体类型。

45、的同时定义结构体变量,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . 变量名表列初始数据;,(3). 直接定义结构体变量,用无名结构体直接定义 变量, 只能定义一次,struct 类型标识符 成员名; 类型标识符 成员名; . 变量名表列初始数据 ;,3. 结构变量的引用,引用方式: 结构体变量名.成员名 例: student .num 嵌套结构体引用: student.birthday.day 结构指针变量引用: 1. (*结构指针变量).成员名 2. 结构指针变量-成员名 请复习教材例题8.18.7,第9部分 预处理、文件,宏定义,用一个标识符来表示一个字符串, 称。

46、为宏。 【例9.1】 使用不带参数的宏定义,宏 名,一般大写 若不带参数,称为无参宏,编译预处理时由系统自动用 3.1415926去代换,称为宏展开或宏代换,1. 无参宏定义的说明,一般形式:# define 标识符 字符串 字符串中可以含任何字符(常数、表达式)。 宏展开时仅以该字符串简单取代宏名,预处理程序对它不作任何检查。 宏定义必须写在函数之外,在行末不加分号。 取消宏定义,使用:#undef 宏名,例 如:,结果是?,2. 带参宏定义的说明,定义一般形式:# define 宏名(形参表) 字符串 带参宏调用的一般形式为:宏名(实参表); 【例9.3】使用带参数的宏,实参代替形参,带参。

47、宏定义中,宏名和形参表之间加空格。 在带参宏定义中,形式参数不分配内存单元,所以不作类型定义。 在宏定义中的形参是标识符,宏调用中的实 参可以是表达式。 在宏定义中,字符串内的形参和字符串一般 都要用括号括起来以避免出错。,文件操作:打开、读写、关闭 1. 文件打开函数: FILE *fp; fp = fopen(文件名, 文件使用方式);,成功:返回 FILE类型指针 失败:返回 NULL,FILE *fp; char ch; if ( (fp=fopen(s10_1.c, r) ) = NULL) /* 打开文件 */ printf(打开文件s10_1.c失败!n; exit(0); ,文 件,文件,2. 文件关闭函数: FILE *fp;fclose(fp);,成功:返回 0 失败:返回 非零,3. 文件读写函数:了解,(1)字符读/写函数 : fgetc ( ) / fputc ( ) (2)字符串读/写函数:fgets ( ) / fputs ( ) (3)数据块读/写函数:fread ( ) / fwrite ( ) (4)格式化读/写函数:fscanf ( ) / fprinf (。

周红c语言答案,C语言程序设计期末复习.ppt相关推荐

  1. java语言程序设计期末复习综合练习题_Java语言程序设计期末复习综合练习题答案...

    Java语言程序设计期末复习综合练习题 一.选择题. 2. main方法是Java Application程序执行的入口点,关于main方法的方法头以下哪项是合法的( )? A.public stat ...

  2. 2015年中央电大c语言,2015年电大 2015年电大小抄-中央电大2012春季c语言程序设计期末复习指导(本)资料.doc...

    2015年电大 2015年电大小抄-中央电大2012春季c语言程序设计期末复习指导(本)资料 中央广播电视大学计算机科学与技术专业 C语言程序设计A课程考核说明(2012) 一.考核说明 <C语 ...

  3. java语言程序设计复习重点_java语言程序设计期末复习要点

    java语言程序设计期末复习要点 一.选择题 1.以下哪个标识符为合法标识符( A ). A. aVariable1 B. 1var C. var% D. static 2.下列叙述中,正确的是( A ...

  4. 厦门大学c语言课程资源,厦门大学c语言模拟题讲评及课程复习.ppt

    <厦门大学c语言模拟题讲评及课程复习.ppt>由会员分享,可在线阅读,更多相关<厦门大学c语言模拟题讲评及课程复习.ppt(33页珍藏版)>请在装配图网上搜索. 1.C语言程序 ...

  5. 2017北理c语言答案,c语言答案 北理工

    <北理工 C语言答案> 1 Hello world 让我们用C语言向世界问好. 最早的程序基本是这个样子的: 程序一: #include void main() { printf(&quo ...

  6. 大学c语言项目,项目大学C语言程序设计期末复习重点.doc

    期末复习课 笔试试卷基本情况 1.单项选择(本题共15个小题,每题2分.30分) 在四个备选答案中选择一个正确的.答案唯一. 2.阅读程序选择运行结果(本题共有8个小题,每个题3分.24分) 考核基本 ...

  7. C语言程序设计期末复习重点知识,C语言程序设计期末总复习.ppt

    <C语言程序设计期末总复习.ppt>由会员分享,可在线阅读,更多相关<C语言程序设计期末总复习.ppt(11页珍藏版)>请在人人文库网上搜索. 1.天津理工大学-华信软件学院, ...

  8. 天津工业大学c语言题库,天津工业大学it1创新2届c语言期末复习.ppt

    天津工业大学it1创新2届c语言期末复习 复习;题型;第一章 数据类型.运算符.表达式;1. 数据类型;C语言提供的整数类型 short int (short) unsigned short int ...

  9. c语言周传生教材答案,C语言程序设计与实践(普通高等教育“十二五”规划教材)...

    C语言作为一种通用程序设计语言,简捷.高效.使用广泛,既适合于编写应用软件,又适合于编写系统软件.对于计算机应用人员来说,掌握C编程知识与技能是至关重要的.本书较全面的讲述了C语言及其程序设计方法.全 ...

最新文章

  1. CoreLocation.ConnectionClient CFDictionaryApplyFunction Crash
  2. python第三方库有哪些-我常用的几个第三方 Python 库
  3. Index of sql server
  4. JZOJ 4421. aplusb
  5. win7连接sftp_SFTP远程连接服务器上传下载文件-vs2013项目实例
  6. SpringSecurity +Jwt 实现权限管理
  7. ubuntu源列表(清华,阿里,官方,选一即可)
  8. RSA总裁:2010年需重点关注云计算安全
  9. Dubbo 2.7.7 发布,FastJson 升级了!
  10. 技术不错的我去面试大厂,5分钟,就被秒了!憋屈~
  11. 穿越者的真正优势是人才
  12. 工商银行 Serverless 函数计算落地实践
  13. Linux版MySQL下载教程
  14. 牛顿插值法python代码_Python实现牛顿插值法(差商表)
  15. 黑莓开发新手入门教学帖,如何制作一个能控制LED颜色的程序(一)
  16. pointnet源码阅读:测试
  17. python基础以及面向对象
  18. 《Web安全渗透全套教程(40集)》学习笔记 | SQL注入攻击及防御
  19. fama matlab源码_Matlab:计算Fama Macbeth方法的HAC(Newey West)标准误差
  20. 微信扫码登录网页实现思路

热门文章

  1. ActiveMQ双机热备时的连接跳动问题解决
  2. 屁股决定脑袋,思想决定高度
  3. thinkcmf需要的php版本,升级指导 · ThinkCMF5开发手册 · 看云
  4. 气动调节阀与电动调节阀的区别
  5. 是什么的简称_什么是“KDJ”?通俗易懂,让你了解股市上的那些英文简称
  6. python开发和大数据开发工程师_大数据开发工程师的岗位职责
  7. 计算机软件设计专业的英语翻译,关于计算机专业java app设计的毕业设计论文英文英语外文文献翻译成品资料:Java应用程序的高效运行时方面编织(中英文双语对照)(35页)-原创力文档...
  8. 金融学与计算机金融有什么区别,高考志愿填报之热门专业:金融vs计算机如何选择...
  9. 全球与中国远程家庭监控系统市场深度研究分析报告
  10. 人工智能应届毕业生月薪20k,他们是如何做到的?