C语言专升本辅导整理课件_第1页
C语言专升本辅导整理课件_第2页
C语言专升本辅导整理课件_第3页
C语言专升本辅导整理课件_第4页
C语言专升本辅导整理课件_第5页
已阅读5页,还剩451页未读 继续免费阅读

下载本文档

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

文档简介

C语言专升本辅导整理C语言专升本辅导整理C语言专升本辅导整理C语言专升本辅导整理C语言专升本辅导整理C语言专升本辅导整理11.对C语言的语法、语义有较好的理解。

2.能熟练地阅读C源程序,并具有初步分析程序的能力。

3.初步掌握结构化程序设计的方法和技巧,能从分析问题入手,设计可行的算法,进而用C语言编写结构良好的面向过程的程序。

4.通过上机实验,掌握程序的调试和测试方法。考试要求1.对C语言的语法、语义有较好的理解。

2.能熟考题类型•

选择题(概念、语法等):60%•

程序阅读题:20%•

程序设计题(或程序填空):20%《程序设计基础》,张杰敏编,高等教育出版社出版《C语言程序设计》,谭浩强编,清华大学出版社出版参考用书考题类型•

选择题(概念、语法等):60%《程序设计第一章C语言概述C语言发展历史与特点(了解)C程序格式和结构特点(掌握)TC环境下C程序的上机步骤(掌握)第一章C语言概述C语言发展历史与特点(了解)C程序格式和C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件结构特点函数与主函数程序由一个或多个函数组成必须有且只能有一个主函数main()程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。程序语句C程序由语句组成用“;”作为语句终止符注释/**/为注释,不能嵌套不产生编译代码例:/*Thisisthemain/*ofexample1.1*/*/非法编译预处理命令结构特点例:/*Thisisthemain编辑链接编译执行C程序的上机步骤程序代码的录入,生成源程序*.c语法分析查错,翻译生成目标程序*.obj与其它目标程序或库链接装配,生成可执行程序*.exe编辑链接编译执行C程序的上机步骤程序代码的录入,语法分析查错第二章算法算法的概念(理解)算法的表示方法(了解)组成结构化程序的三种基本结构(理解)结构化程序设计的过程(了解)第二章算法算法的概念(理解)算法——操作步骤解决:

做什么? 怎么做?算法——操作步骤解决:算法的特点

有穷性确定性可行性/有效性有零个或多个输入有一个或多个输出有限的操作步骤且每一步均应在合理的时间内完成,无“死循环”每一步骤通过已经实现的基本运算执行后,在有限次内得到有效的效果,无“死语句”每一条指令必须有确定的含义,无“二义性”有多种输入途径可供输入数据,以进行数据处理有多种输出途径可将运行结果输出算法的特点有穷性有限的操作步骤且每一步均应在合理的时间内完算法的表示方法

自然语言流程图N-S流程图伪代码计算机程序语言算法的表示方法自然语言C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件第三章数据类型、运算符与表达式C语言中数据类型的分类(了解)整型、实型、字符型、字符串常量的表示方法(掌握)符号常量的定义和使用(掌握)变量的定义、初始化(掌握)算术、赋值、复合赋值、自增、自减、逗号运算符及表达式(掌握)各类数值型数据间的混合运算(掌握)第三章数据类型、运算符与表达式C语言中数据类型的分类预备知识计算机中数的表示及进制转换各种进制之间的转换二进制、八进制、十六进制转换成十进制字节和位内存以字节为单元组成每个字节有一个地址一个字节一般由8个二进制位组成每个二进位的值是0或1数值的表示方法——原码、反码和补码原码:最高位为符号位,其余各位为数值本身的绝对值反码:正数:反码与原码相同负数:符号位为1,其余位对原码取反补码:正数:原码、反码、补码相同负数:最高位为1,其余位为原码取反,再对整个数加1预备知识C语言专升本辅导整理课件基本数据类型基本数据类型常量与变量标识符定义:用来标识变量名、常量名、函数名、数组名、类型名和文件名等的字符序列组成:只能由字母、数字、下划线组成,且第一个字符必须是字母或下划线大小写敏感不能使用关键字长度:TC-最长32个字符;MSC-最长8个字符常量与变量C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件字符常量定义:用单引号括起来的单个普通字符或转义字符.

字符常量的值:该字符的ASCII码值转义字符及其含义:转义字符含义\n\v\r\a\‘\ddd\t\b\f\\\“\xhh转义字符含义换行垂直制表回车响铃单引号3位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符转义字符:反斜线后面跟一个字符或一个代码值表示例转义字符举例main(){printf("\101\x42C\n");printf("Isay:\"Howareyou?\"\n");printf("\\CProgram\\\n");printf("Turbo\'C\'");}如‘A’——65,‘a’——97,‘0’——48,‘\n’——10字符常量字符常量的值:该字符的ASCII码值转义字符及其含义C语言专升本辅导整理课件C语言专升本辅导整理课件整型变量占字节数随机器不同而不同,一般占一个机器字short≤int≤long可用sizeof(类型标识符)测量实型变量float:占4字节,提供7位有效数字double:占8字节,提供16位有效数字字符型变量字符变量存放字符ASCII码char与int数据间可进行算术运算例floata;a=111111.111;/*a=111111.1*/doubleb;b=111111.111;/*b=111111.111*/例a=‘D’;/*a=68;*/x=‘A’+5;/*x=65+5;*/s=‘!’+‘G’/*s=33+71;*/没有字符串变量,用字符数组存放整型变量实型变量字符型变量例floata;例C语言专升本辅导整理课件doublefloatlongunsignedintchar,short低高说明:必定的转换运算对象类型不同时转换doublefloatlongunsignedintchar显式转换(强制转换)一般形式:(类型名)(表达式)例(int)(x+y)(int)x+y(double)(3/2)(int)3.6说明:强制转换得到所需类型的中间变量,原变量类型不变例main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}结果:x=3.600000,i=3精度损失问题较高类型向较低类型转换时可能发生显式转换(强制转换)例main()精度损失问题较高类型向学习运算符应注意:运算符功能与运算量关系要求运算量个数要求运算量类型运算符优先级别结合方向结果的类型学习运算符应注意:C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只C语言专升本辅导整理课件第四章数据输入与输出赋值语句及使用(掌握)字符输入输出(getchar函数和putchar函数)(了解)格式输入输出(scanf函数和printf函数)(掌握)第四章数据输入与输出赋值语句及使用(掌握)C语言专升本辅导整理课件C语言专升本辅导整理课件dx,Xoucse,Efg%%格式字符:十六进制无符号整数不带符号十进制整数十进制整数指数形式浮点小数单一字符字符串八进制无符号整数小数形式浮点小数e和f中较短一种百分号本身inta=567;printf(“%d”,a);inta=255;printf(“%x”,a);inta=65;printf(“%o”,a);inta=567;printf(“%u”,a);chara=65;printf(“%c”,a);printf(“%s”,“ABC”);floata=567.789;printf(“%e”,a);floata=567.789;printf(“%f”,a);floata=567.789;printf(“%g”,a);printf(“%%”);567ff101567AABC5.677890e+02567.789000567.789%说明 格式字符要用小写格式字符与输出项个数应相同,按先后顺序一一对应输出转换:格式字符与输出项类型不一致,自动按指定格式输出例inta=3,b=4;printf(“%d%d\n”,a,b);printf(“a=%d,b=%d\n”,a,b);输出结果:34a=3,b=4例

main(){unsignedintu=65535;printf(”u=%d\n",u);}

输出结果:u=-1例inta=3,b=4;printf(“%d%d\n”,a,b);printf(“a=%d,b=%d\n”,a,b);

dx,Xoucse,Efg%%格式字符:十六进制无符号整数不附加格式说明符(修饰符)附加格式说明符(修饰符)C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件例scanf(“%3d%*4d%f”,&k,&f);输入12345678765.43

则123k,8765.43f例scanf(“%2d%*3d%2d”,&a,&b);

输入1234567

则12a,67b例scanf(“%3c%2c”,&c1,&c2);

输入abcde

则‘a’c1,‘d’c2附加格式说明符(修饰符)例scanf(“%4d%2d%2d”,&yy,&mm,&dd);

输入19991015

则1999yy,10mm,15dd例scanf(“%3d%*4d%f”,&k,&f);例例scanf(“%d:%d:%d”,&h,&m,&s);输入12:30:45

则12h,30m,45s输入分隔符的指定一般以空格、TAB或回车键作为分隔符其它字符做分隔符:格式串中两个格式符间字符例scanf(“%d%o%x”,&a,&b,&c);printf(“a=%d,b=%d,c=%d\n”,a,b,c);输入123123123

输出a=123,b=83,c=291例scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);输入a=12,b=24,c=36例scanf(“%d,%d”,&a,&b)

输入3,4

则3a,4b例scanf(“%d:%d:%d”,&h,&m,&s);说明:用“%c”格式符时,空格和转义字符作为有效字符输入输入数据时,遇以下情况认为该数据结束:遇空格、TAB、或回车遇宽度结束遇非法输入输入函数留下的“垃圾”:例intx;charch;scanf(“%d”,&x);ch=getchar();printf(“x=%d,ch=%d\n”,x,ch);执行:123输出:x=123,ch=10例intx;charch;scanf(“%d”,&x);scanf(“%c”,&ch);printf(“x=%d,ch=%d\n”,x,ch);执行:123输出:x=123,ch=10例intx;charch;scanf(“%d”,&x);

scanf(“%c”,&ch);或scanf(“%*c%c”,&ch);

如scanf(“%c%c%c”,&c1,&c2,&c3);

若输入abc

则ac1,

c2,bc3如scanf(“%d%c%f”,&a,&b,&c);若输入1234a123o.26

则1234a,‘a’b,123c说明:输入数据时,遇以下情况认为该数据结束:输入函数留下的“第五/六章C程序流程设计第五章选择结构•

关系、逻辑运算符及表达式(掌握)•

if语句的三种形式(掌握)•

switch语句及break语句的使用(掌握)•

要求能编写含有if语句嵌套结构的程序第六章循环结构•

while语句及应用(掌握)•

do-while语句及应用(掌握)•

for语句及应用(掌握)•

break语句在循环中的作用(掌握)•

continue语句在循环中的作用(了解)•

要求能编写含有二重循环结构的程序。第五/六章C程序流程设计第五章选择结构第六章循环结C语句分类if()~else~switchfor()~while()~do~while()continuebreakgotoreturn分支循环辅助控制程序控制语句(9种):复合语句:用{…}括起来的一组语句一般形式:

{[数据说明部分;]执行语句部分;}说明:“}”后不加分号语法上和单一语句相同复合语句可嵌套C语句分类if()~else~分支循环辅助控制程序控制语C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件说明:for语句中expr1,expr2,expr3类型任意,都可省略,但分号;不可省无限循环:for(;;)for语句可以转换成while结构expr1;while(expr2){ 循环体语句; expr3;}例用for循环求

#include<stdio.h>main(){inti,sum=0;

for(i=1;i<=100;i++)

sum+=i;printf("%d",sum);}说明:expr1;例用for循环求#include<s例:#include<stdio.h>main(){inti=0;for(i=0;i<10;i++)putchar(‘a’+i);}结果:abcdefghij例:#include<stdio.h>main(){inti=0;

for(;i<10;i++)

putchar(‘a’+i);}例:#include<stdio.h>main(){inti=0;

for(;i<10;)

putchar(‘a’+(i++));}例:#include<stdio.h>main(){inti=0;

for(;i<10;putchar(‘a’+i),i++)

;}例:#include<stdio.h>结果:abcdefghC语言专升本辅导整理课件C语言专升本辅导整理课件

C语言专升本辅导整理课件第七章数组•

一维数组的定义、初始化及元素引用(掌握)•

二维数组的定义、初始化及元素引用(掌握)•

字符数组的定义及使用(掌握)•

字符串处理函数(了解)第七章数组•

一维数组的定义、初始化及元素引用(掌握)C语言专升本辅导整理课件一维数组的引用数组必须先定义,后使用只能逐个引用数组元素,不能一次引用整个数组数组元素表示形式:

数组名[下标]其中:下标可以是常量或整型表达式例inti=15;intdata[i];(不能用变量定义数组维数)例inta[10];printf(“%d”,a);()必须for(j=0;j<10;j++)printf(“%d\t”,a[j]);()例intdata[5];data[5]=10;//C语言对数组不作越界检查,使用时要注意一维数组的引用例inti=15;例in一维数组的初始化初始化方式在定义数组时,为数组元素赋初值(在编译阶段使之得到初值)inta[5]={1,2,3,4,5};等价于:a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;说明:数组不初始化,其元素值为随机数对static数组元素不赋初值,系统会自动赋以0值当全部数组元素赋初值时,可不指定数组长度如inta[5]={6,2,3};(不用static初值也可为0)

等价于:a[0]=6;a[1]=2;a[2]=3;a[3]=0;a[4]=0;如inta[3]={6,2,3,5,1};()staticinta[5];等价于:a[0]=0;a[1]=0;a[2]=0;a[3]=0;a[4]=0;只给部分数组元素赋初值inta[]={1,2,3,4,5,6};编译系统根据初值个数确定数组维数一维数组的初始化在定义数组时,为数组元素赋初值inta[C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件二维数组元素的引用形式:数组名[下标][下标]二维数组元素的初始化分行初始化:例inta[2][3]={{1,2,3},{4,5,6}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456全部初始化按元素排列顺序初始化例inta[][3]={1,2,3,4,5};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123450第一维长度省略初始化例inta[][3]={{1},{4,5}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]100450第一维长度省略初始化例inta[2][3]={{1,2},{4}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]120400部分初始化例inta[2][3]={1,2,3,4,5,6};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456全部初始化例inta[2][3]={1,2,4};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]124000部分初始化二维数组元素的引用a[0][0]a[0][1]a[0][2]C语言专升本辅导整理课件C语言专升本辅导整理课件字符数组和字符串字符数组定义字符数组的初始化逐个字符赋值用字符串常量字符数组的引用例charc[10],ch[3][4];例charch[5]={‘H’,’e’,’l’,’l’,’o’};ch[0]Hello逐个字符赋值ch[1]ch[2]ch[3]ch[4]例charch[5]={‘B’,’o’,’y’};ch[0]Boy\0\0逐个字符赋值ch[1]ch[2]ch[3]ch[4]例charch[5]=“Boy”;ch[0]Boy\0\0用字符串常量ch[1]ch[2]ch[3]ch[4]例charch[6]={“Hello”};charch[6]=“Hello”;charch[]=“Hello”;用字符串常量ch[0]Helloch[1]ch[2]ch[3]ch[4]\0ch[5]字符数组和字符串字符数组的初始化例charc[10]例chardiamond[][5]={{'.','.','*'},{'.','*','.','*'}, {'*','.','.','.','*'},{'.','*','.','*'},{'.','.','*'}};二维字符数组初始化..*\0\0.*.*\0*...*.*.*\0..*\0\0diamond[0]diamond[1]diamond[2]diamond[3]diamond[4]例charfruit[][7]={“Apple”,”Orange”,”Grape”,”Pear”,”Peach”};二维字符数组初始化fruit[0]fruit[1]fruit[2]fruit[3]fruit[4]Apple\0\0Orange\0Grape\0\0Pear\0\0\0Peach\0\0例chardiamond[][5]={{'.','C语言专升本辅导整理课件C语言专升本辅导整理课件字符串的输入输出逐个字符I/O:%c整个字符串I/O:%s例用%cmain(){charstr[5];inti;for(i=0;i<5;i++)scanf(“%c”,&str[i]);for(i=0;i<5;i++)printf(“%c”,str[i]);}例用%smain(){charstr[5];scanf(“%s”,str);printf(“%s”,str);}用字符数组名,不要加&输入串长度<数组维数遇空格或回车结束自动加‘\0’用字符数组名,遇‘\0’结束字符串的输入输出例用%c例用%s用字符数组名,不C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件例对于以下字符串,strlen(s)的值为:(1)chars[10]={‘A’,‘\0’,‘B’,‘C’,‘\0’,‘D’};(2)chars[]=“\t\v\\\0will\n”;(3)chars[]=“\x69\082\n”;例对于以下字符串,strlen(s)的值为:C语言专升本辅导整理课件C语言专升本辅导整理课件第八章函数•

函数的定义与调用(掌握)•

函数调用时的实参与形参的结合(掌握)•

函数原型声明与函数在源程序中的相对位置的关系(理解)•

函数的嵌套调用和递归调用(理解)•

局部变量和全局变量的概念及应用(理解)•

变量的存储类别auto、static、register、extern(了解)第八章函数•

函数的定义与调用(掌握)函数的定义一般格式合法标识符函数返回值类型缺省int型无返回值void函数体函数类型函数名(形参类型说明表){ 说明部分 语句部分}现代风格:例有参函数(现代风格)intmax(intx,inty){intz;z=x>y?x:y;return(z);}例有参函数(现代风格)intmax(intx,y){intz;z=x>y?x:y;return(z);}例无参函数printstar(){printf(“**********\n”);}或printstar(void){printf(“**********\n”);}函数的定义合法标识符函数返回值类型函数体函数类型函C语言专升本辅导整理课件函数的返回值返回语句形式:return(表达式);

或return表达式;

或return;功能:使程序控制从被调用函数返回到调用函数中,同时把返值带给调用函数说明:函数中可有多个return语句若无return语句,遇}时,自动返回调用函数若函数类型与return语句中表达式值的类型不一致,按前者为准,自动转换------函数调用转换void型函数例无返回值函数

voidsx,inty){inttemp;temp=x;x=y;y=temp;}main(){floata,b;intc;scanf("%f,%f",&a,&b);c=max(a,b);printf("Maxis%d\n",c);}max(floatx,floaty){floatz;z=x>y?x:y;

return(z);}函数的返回值例无返回值函数main()函数的调用调用形式函数名(实参表);说明:实参与形参个数相等,类型一致,按顺序一一对应实参表求值顺序,因系统而定(TurboC自右向左)函数的调用C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件例函数说明举例main(){floata,b;intc;scanf("%f,%f",&a,&b);c=max(a,b);printf("Maxis%d\n",c);}max(floatx,floaty){floatz;z=x>y?x:y;return(z);}int型函数可不作函数说明(BorlandC++不行)/*ch7_5.c*/floatadd(floatx,floaty){floatz;z=x+y;return(z);}main(){floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);printf("sumis%f",c);}被调函数出现在主调函数之前,不必函数说明/*ch7_5.c*/main(){floatadd(float,float);/*functiondeclaration*/floata,b,c;scanf("%f,%f",&a,&b);c=add(a,b);printf("sumis%f",c);}floatadd(floatx,floaty){floatz;z=x+y;return(z);}floatadd();例函数说明举例main()int型函数可不作函数说明/*C语言专升本辅导整理课件C语言专升本辅导整理课件例交换两个数例交换两个数C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件例求二维数组中最大元素值例求二维数组中最大元素值C语言专升本辅导整理课件C语言专升本辅导整理课件floatf1(inta){intb,c;…….}charf2(intx,inty){inti,j;……}main(){intm,n;…….}a,b,c有效x,y,i,j有效m,n有效例不同函数中同名变量main(){inta,b;a=3;b=4;printf("main:a=%d,b=%d\n",a,b);sub();printf("main:a=%d,b=%d\n",a,b);}sub(){inta,b;a=6;b=7;printf("sub:a=%d,b=%d\n",a,b);}例复合语句中变量#defineN5main(){inti;inta[N]={1,2,3,4,5};for(i=0;i<N/2;i++)

{

inttemp; temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp;

}for(i=0;i<N;i++)printf("%d",a[i]);}floatf1(inta)a,b,c有效x,y,iC语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件第九章预处理命令•

#define命令的使用(理解)•

#include命令的作用(了解)第九章预处理命令•

#define命令的使用(理解)C语言专升本辅导整理课件如if(x==YES)printf(“correct!\n”);elseif(x==NO)printf(“error!\n”);展开后:if(x==1)printf(“correct!\n”);elseif(x==0)printf(“error!\n”);宏定义不带参数宏定义一般形式:#define宏名[宏体]功能:用指定标识符(宏名)代替字符序列(宏体)宏展开:预编译时,用宏体替换宏名---不作语法检查宏体可缺省,表示宏名定义过或取消宏体定义位置:任意(一般在函数外面)作用域:从定义命令到文件结束#undef可终止宏名作用域格式:#undef宏名例#defineYES1main(){……..}#undefYES#defineYES0max(){……..}YES原作用域YES新作用域宏定义可嵌套,不能递归例#defineMAXMAX+10()引号中的内容与宏名相同也不置换例#definePI3.14159printf(“2*PI=%f\n”,PI*2);宏展开:printf(“2*PI=%f\n”,3.14159*2);宏定义中使用必要的括号()例#defineWIDTH80#defineLENGTH

WIDTH+40var=LENGTH*2;宏展开:var=80+40*2;()()例#defineWIDTH80#defineLENGTH

WIDTH+40var=LENGTH*2;宏展开:var=80+40*2;如if(x==YES)C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件文件包含功能:一个源文件可将另一个源文件的内容全部包含进来一般形式:#include“文件名”或#include<文件名>处理过程:预编译时,用被包含文件的内容取代该预处理命令,再对“包含”后的文件作一个源文件编译<>直接按标准目录搜索“”先在当前目录搜索,再搜索标准目录可指定路径文件包含处理过程:预编译时,用被包含文件的内容取代该预处理命第十章指针•

地址、指针、指针变量的概念(掌握)•

指针变量的定义、初始化、赋值(掌握)•

两个与指针有关的运算符(&和*)(掌握)•

指针和一维数组的关系(掌握)•

指针和二维数组的关系(了解)•

指针和字符串的关系(掌握)•

参数为指针类型的函数应用(掌握)•

指针数组和指向指针的指针(了解)第十章指针•

地址、指针、指针变量的概念(掌握)C语言专升本辅导整理课件C语言专升本辅导整理课件&与*运算符含义含义:取变量的地址单目运算符优先级:2结合性:自右向左含义:取指针所指向变量的内容单目运算符优先级:2结合性:自右向左两者关系:互为逆运算理解…...…...2000200420062005整型变量i10变量i_pointer2001200220032000指针变量i_pointer-----指针变量,它的内容是地址量*i_pointer----指针的目标变量,它的内容是数据&i_pointer---指针变量占用内存的地址200010i_pointer*i_pointer&i_pointerii_pointer&i&(*i_pointer)i*i_pointer*(&i)i_pointer

=

&i

=

&(*i_pointer)i

=

*i_pointer

=

*(&i)&与*运算符含义:取变量的地址含义:取指针所指向变量的内指针变量指针变量与其所指向的变量之间的关系指针变量的定义一般形式:[存储类型]数据类型*指针名;3变量i2000i_pointer*i_pointeri*i_pointer&ii_pointeri=3;*i_pointer=33变量i2000i_pointer*i_pointeri*i_pointer&ii_pointeri=3;*i_pointer=3合法标识符指针变量本身的存储类型指针的目标变量的数据类型表示定义指针变量不是‘*’运算符例int

*p1,*p2;float*q;staticchar*name;注意:1、int*p1,*p2;

与int*p1,p2;2、指针变量名是p1,p2,不是*p1,*p23、指针变量只能指向定义时所规定类型的变量4、指针变量定义后,变量值不确定,应用前必须先赋值指针变量指针变量的定义3变量i2000i_pointer*i指针变量的初始化一般形式:[存储类型]数据类型*指针名=初始地址值;赋给指针变量,不是赋给目标变量例inti;int*p=&i;变量必须已说明过类型应一致例int*p=&i;

inti;例inti;int*p=&i;int*q=p;用已初始化指针变量作初值例main(){inti;staticint*p=&i;..............}()不能用auto变量的地址去初始化static型指针指针变量的初始化赋给指针变量,例inti;变量必须已C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件一级指针变量与一维数组的关系int*p与intq[10]数组名是指针(地址)常量p=q;p+i是q[i]的地址数组元素的表示方法:下标法和指针法,即若p=q,则p[i]q[i]*(p+i)*(q+i)

形参数组实质上是指针变量,即intq[]int*q在定义指针变量(不是形参)时,不能把int*p写成intp[];系统只给p分配能保存一个指针值的内存区(一般2字节);而给q分配2*10字节的内存区一级指针变量与一维数组的关系指针与二维数组二维数组的地址对于一维数组:(1)数组名array表示数组的首地址,即array[0]的地址;(2)数组名array是地址常量(3)array+i是元素array[i]的地址(4)array[i]*(array+i)arrayintarray[10];指针与二维数组对于一维数组:arrayintarray[C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件指针与字符串字符串表示形式用字符数组实现例main(){charstring[]=“IloveChina!”;printf(“%s\n”,string);printf(“%s\n”,string+7);}IloveChistring[0]string[1]string[2]string[3]string[4]string[5]string[6]string[7]string[8]string[9]stringstring[10]string[11]string[12]string[13]n!a\0指针与字符串例main()IloveChistrin用字符指针实现例main(){char*string=“IloveChina!”;printf(“%s\n”,string);

string+=7;while(*string){putchar(string[0]);string++;}}IloveChistringn!a\0字符指针初始化:把字符串首地址赋给stringchar*string;string=“IloveChina!”;string*string!=0用字符指针实现例main()IloveChistri字符串指针作函数参数例用函数调用实现字符串复制(1)用字符数组作参数(2)用字符指针变量作参数aIamateaceh\0r.fromabyuarasutndetoboet.\0Iaaeceh\0r.t.\0mtavoidcopy_string(charfrom[],charto[]){inti=0;while(from[i]!='\0'){to[i]=from[i]; i++;}to[i]='\0';}main(){chara[]="Iamateacher.";charb[]="Youareastudent.";printf("string_a=%s\nstring_b=%s\n",a,b);

copy_string(a,b);printf("\nstring_a=%s\nstring_b=%s\n",a,b);}voidcopy_string(char*from,char*to){for(;*from!='\0';from++,to++)*to=*from;*to='\0';}main(){char*a="Iamateacher.";char*b="Youareastudent.";printf("string_a=%s\nstring_b=%s\n",a,b);

copy_string(a,b);printf("\nstring_a=%s\nstring_b=%s\n",a,b);}字符串指针作函数参数例用函数调用实现字符串复制(1)用字C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件指针数组和多级指针用于处理二维数组或多个字符串指针数组定义:数组中的元素为指针变量定义形式:[存储类型]数据类型*数组名[数组长度说明];例int*p[4];指针所指向变量的数据类型指针本身的存储类型区分int*p[4]与int(*p)[4]指针数组赋值与初始化赋值:main(){intb[2][3],*pb[2];

pb[0]=b[0];pb[1]=b[1];……..}int*pb[2]pb[0]pb[1]intb[2][3]123246初始化:main(){intb[2][3],*pb[]={b[0],b[1]};……..}int*pb[2]pb[0]pb[1]intb[2][3]123246指针数组和多级指针指针所指向变量的数据类型指针本身的二维数组存储空间固定字符指针数组相当于可变列长的二维数组分配内存单元=数组维数*2+各字符串长度指针数组元素的作用相当于二维数组的行名但指针数组中元素是指针变量二维数组的行名是地址常量二维数组存储空间固定指针数组元素的作用相当于二维数组的行名C语言专升本辅导整理课件C语言专升本辅导整理课件定义形式:[存储类型]数据类型**指针名;如char**p;例inti,**p;p=&i;()//p是二级指针,不能用变量地址为其赋值指针本身的存储类型最终目标变量的数据类型*p是p间接指向对象的地址**p是p间接指向对象的值例inti=3;

int*p1;

int**p2;p1=&i;p2=&p1;**p=5;ip1p23&i&p1**p2,*p1*p2多级指针例三级指针int***p;

四级指针char****p;定义形式:[存储类型]数据类型**指针名;例iC语言专升本辅导整理课件第十一章结构体、共用体和枚举类型•

结构体类型的定义(掌握)•

结构体变量、数组、指针变量的定义、初始化及成员引用(掌握)•

参数为结构体变量或结构体指针的函数(理解)•

共用体的概念及共用体类型的定义(了解)•

枚举类型的概念及共用体类型的定义(理解)•

typedef语句的使用(了解)第十一章结构体、共用体•

结构体类型的定义(掌握)C语言专升本辅导整理课件C语言专升本辅导整理课件例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};

structstudentstu1,stu2;结构体变量的定义先定义结构体类型,再定义结构体变量一般形式:struct结构体名{

类型标识符成员名;类型标识符成员名;…………….};struct结构体名变量名表列;例#defineSTUDENTstructstudent

STUDENT{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};

STUDENTstu1,stu2;例structstudent结构体变量的定义sC语言专升本辅导整理课件C语言专升本辅导整理课件说明结构体类型与结构体变量概念不同类型:不分配内存;变量:分配内存类型:不能赋值、存取、运算;变量:可以结构体可嵌套结构体成员名与程序中变量名可相同,不会混淆结构体类型及变量的作用域与生存期例structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];

structdatebirthday;}stu;numnamebirthdaymonthdayyear例structstudent{intnum;charname[20];

structdate{intmonth;intday;intyear;}birthday;}stu;numnamebirthdaymonthdayyear说明例structdatenumnamebirthda结构体变量的引用引用规则结构体变量不能整体引用,只能引用变量成员可以将一个结构体变量赋值给另一个结构体变量结构体嵌套时逐级引用成员(分量)运算符优先级:1结合性:从左向右引用方式:结构体变量名.成员名例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score;stu1.age++;例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;printf(“%d,%s,%c,%d,%f,%s\n”,stu1);()stu1={101,“WanLin”,‘M’,19,87.5,“DaLian”};()例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;stu2=stu1;()例structstudent{intnum;charname[20];structdate{intmonth;intday;intyear;}birthday;}stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;if(stu1==stu2)……..()结构体变量的引用可以将一个结构体变量赋值给另一个结构体变量成C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件结构体数组结构体数组的定义三种形式:形式一:

structstudent{intnum;charname[20];charsex;intage;};structstudentstu[2];形式二:structstudent{intnum;charname[20];charsex;intage;}stu[2];形式三:struct{intnum;charname[20];charsex;intage;}stu[2];numnamesexagenumnamesexagestu[0]stu[1]25B结构体数组形式一:形式二:形式三:numnamesexa结构体数组初始化例struct{intnum;charname[20];charsex;intage;}stu[]={{……},{……},{……}};顺序初始化:structstudent{intnum;charname[20];charsex;intage;};structstudentstu[]={100,“WangLin”,‘M’,20,101,“LiGang”,‘M’,19,110,“LiuYan”,‘F’,19};例structstudent{intnum;charname[20];charsex;intage;}stu[]={{……},{……},{……}};分行初始化:structstudent{intnum;charname[20];charsex;intage;};structstudentstu[]={{100,“WangLin”,‘M’,20},{101,“LiGang”,‘M’,19},{110,“LiuYan”,‘F’,19}};全部初始化时维数可省结构体数组引用引用方式:结构体数组名[下标].成员名structstudent{intnum;charname[20];charsex;intage;}str[3];stu[1].age++;strcpy(stu[0].name,”ZhaoDa”);结构体数组初始化例struct顺序初始化:例strC语言专升本辅导整理课件结构体和指针指向结构体变量的指针定义形式:struct结构体名*结构体指针名;例structstudent*p;使用结构体指针变量引用成员形式存放结构体变量在内存的起始地址numnamesexagestupstructstudent{intnum;charname[20];charsex;intage;}stu;structstudent*p=&stu;(*结构体指针名).成员名结构体指针名->成员名结构体变量名.成员名指向运算符优先级:1结合方向:从左向右例指向结构体的指针变量main(){structstudent{longintnum; charname[20]; charsex; floatscore;}stu_1,*p;p=&stu_1;stu_1.num=89101;strcpy(stu_1.name,"LiLin");

p->sex='M';p->score=89.5;printf("\nNo:%ld\nname:%s\nsex:%c\nscore:%f\n",

(*p).num,p->name,stu_1.sex,p->score);}例intn;int*p=&n;

*p=10;n=10structstudentstu1;structstudent*p=&stu1;stu1.num=101;(*p).num=101结构体和指针使用结构体指针变量引用成员形式存放结构体变量在内指向结构体数组的指针例指向结构体数组的指针structstudent{intnum;charname[20];charsex;intage;}stu[3]={{10101,"LiLin",'M',18},{10102,"ZhangFun",'M',19}, {10104,"WangMin",'F',20}};main(){structstudent*p;for(p=stu;p<stu+3;p++)printf("%d%s%c%d\n",p->num,p->name,p->sex,p->age);}numnamesexagestu[0]pstu[1]stu[2]p+1指向结构体数组的指针例指向结构体数组的指针struct用指向结构体的指针作函数参数用结构体变量的成员作参数----值传递用指向结构体变量或数组的指针作参数----地址传递用结构体变量作参数----多值传递,效率低用指向结构体的指针作函数参数C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件C语言专升本辅导整理课件共用体变量引用引用方式:例a.i=1;a.ch=‘a’;a.f=1.5;printf(“%d”,a.i);(编译通过,运行结果不对)

引用规则不能引用共用体变量,只能引用其成员共用体指针名->

温馨提示

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

评论

0/150

提交评论