《C语言复习概念要点.ppt》由会员分享,可在线阅读,更多相关《C语言复习概念要点.ppt(62页珍藏版)》请在金锄头文库上搜索。
1、autoautobreakbreakcasecasecharcharconstconstcontinuecontinuedefaultdefaultdododoubledoubleelseelseenumenum externexternfloatfloatforforgotogoto ififintint longlongregisterregisterreturnreturnshortshortsignedsignedstaticstaticsizeofsizeof structstruct switchswitchtypedeftypedef unionunionunsignedunsi
2、gned voidvoidvolatilevolatilewhilewhile ANSICANSIC一共只有一共只有一共只有一共只有3737个关键字个关键字个关键字个关键字 C C语言提供的数据结语言提供的数据结构是以构是以数据类型数据类型的的形式出现的形式出现的整型整型整型整型 字符型字符型字符型字符型 实型实型实型实型( (浮点型浮点型浮点型浮点型) )枚举类型枚举类型枚举类型枚举类型单精度型单精度型单精度型单精度型 双精度型双精度型双精度型双精度型数组类型数组类型数组类型数组类型 结构体类型结构体类型结构体类型结构体类型 共用体类型共用体类型共用体类型共用体类型基本类型基本类型构造类型构
3、造类型指针类型指针类型空类型空类型(void)数据类型数据类型用指针、结构体还可构用指针、结构体还可构成链表、树、栈等复杂的数成链表、树、栈等复杂的数据结构据结构无符号整型无符号整型无符号整型无符号整型基本整型基本整型基本整型基本整型长整型长整型长整型长整型短整型短整型短整型短整型Data TypeData Type跟第四版书稍有不同基本数据类型基本数据类型vvintintlonglong整数,在目前绝大多数机器上占整数,在目前绝大多数机器上占4个字节。个字节。TC2中是中是2个字节个字节vvfloatfloat单精度浮点数,一般是单精度浮点数,一般是4个字节长个字节长vvdouble(lon
4、g)double(long)双精度浮点数,一般是双精度浮点数,一般是8个字节长个字节长vvcharchar字符,一般是字符,一般是1个字节长个字节长用来表示用来表示256个个ASCII字符,或者字符,或者0255的整数的整数字符常量字符常量l l转义字符转义字符转义字符转义字符特殊的字符常量特殊的字符常量特殊的字符常量特殊的字符常量一些特殊字符(无法从键盘输入或者另有它用)一些特殊字符(无法从键盘输入或者另有它用)用转义字符表示用转义字符表示charc1,c2;c1=a;可以可以c2=“a”;错误错误合法的字符常量合法的字符常量?变量类型变量类型 定义定义 字节数字节数 范围范围整型整型整型整
5、型intinta,b;2a,b;2- - - -32768327683276732767短整型短整型短整型短整型shortx,y;2shortx,y;2- - - -32768327683276732767无符号无符号无符号无符号整型整型整型整型unsignedunsignedintinta;20a;206553565535无符号无符号无符号无符号短整型短整型短整型短整型 unsignedshortb;20unsignedshortb;206553565535长整型长整型长整型长整型longl;4longl;4- - - -21474836482147483648214748364721474
6、83647无符号无符号无符号无符号长整型长整型长整型长整型 unsignedlongd;40unsignedlongd;4042949672954294967295单精度实型单精度实型单精度实型单精度实型floatf;43.4e383.4e38(7floatf;43.4e383.4e38(7位位位位) )双精度实型双精度实型双精度实型双精度实型doubled;81.7e3081.7e308(15doubled;81.7e3081.7e308(15位位位位) )长双精度实型长双精度实型长双精度实型长双精度实型 longdoubleld;163.4e49323.4e4932(19longdoubl
7、eld;163.4e49323.4e4932(19位位位位) )字符型字符型字符型字符型charc1,c2;10charc1,c2;10255255有符号有符号有符号有符号字符型字符型字符型字符型 signedcharc3;1signedcharc3;1- - - -128128127127d 以带符号十进制整数输出以带符号十进制整数输出o 以八进制无符号整数输出(无前导以八进制无符号整数输出(无前导0)x 以十六进制无符号整数输出(无前导以十六进制无符号整数输出(无前导0x)u 以十进制无符号整数输出以十进制无符号整数输出c 以字符形式输出单个字符以字符形式输出单个字符s 输出一个字符串输出
8、一个字符串f 以小数形式输出浮点数(以小数形式输出浮点数(6位小数)位小数)e 以标准指数形式输出(以标准指数形式输出(6位小数)位小数)g 选用选用%f,%e中输出宽度较小的一种格式中输出宽度较小的一种格式printfprintf格式字符格式字符格式字符格式字符d 以带符号十进制形式输入整型数据以带符号十进制形式输入整型数据o 以八进制无符号形式输入(无前导以八进制无符号形式输入(无前导0)x 以十六进制无符号形式输入(无前导以十六进制无符号形式输入(无前导0x)c 以字符形式输入单个字符以字符形式输入单个字符s 输入字符串输入字符串,以非空字符开始以非空字符开始,遇第一个遇第一个 空白字符
9、结束空白字符结束f 以小数形式输入浮点数以小数形式输入浮点数e 以标准指数形式输入以标准指数形式输入scanfscanf格式字符格式字符格式字符格式字符字符输入输出函数字符输入输出函数v字符输字符输出出函数函数-putchar(ch) 输出输出一个一个字符字符chchv字符输字符输入入函数函数-getchar() 无参数无参数 函数值为从输入设备接收的字符函数值为从输入设备接收的字符字符串输入输出函数字符串输入输出函数v字符串输字符串输出出函数函数-puts(str) 输出输出一个一个字符串字符串strstr 数组数组数组数组 或或或或 指针指针指针指针v字符串输字符串输入入函数函数-gets
10、(str) 输入输入一个一个字符串字符串strstr 数组数组数组数组 或或或或 指针指针指针指针字符输字符输出出函数函数-fputc(ch,fp) 字符输字符输入入函数函数-fgetc(fp) 字符串输字符串输出出函数函数-fputs(str,fp) 字符串输字符串输入入函数函数-fgets(fp) C C语言中的三大定律语言中的三大定律语言中的三大定律语言中的三大定律vv表达式定律表达式定律任何能产生数值结果的运算、操作都可以作为表达式任何能产生数值结果的运算、操作都可以作为表达式任何能产生数值结果的运算、操作都可以作为表达式任何能产生数值结果的运算、操作都可以作为表达式并可以放到任何需要
11、数值结果的地方,只要数值类型能并可以放到任何需要数值结果的地方,只要数值类型能并可以放到任何需要数值结果的地方,只要数值类型能并可以放到任何需要数值结果的地方,只要数值类型能够匹配够匹配够匹配够匹配常见的可以产生数值结果的运算和操作常见的可以产生数值结果的运算和操作常见的可以产生数值结果的运算和操作常见的可以产生数值结果的运算和操作vv算术、逻辑、位运算等算术、逻辑、位运算等算术、逻辑、位运算等算术、逻辑、位运算等vv?:?:、& &、* * 等等等等vv有返回值的函数有返回值的函数有返回值的函数有返回值的函数vv赋值赋值赋值赋值常见的需要数值的地方有:常见的需要数值的地方有:常见的需要数值的
12、地方有:常见的需要数值的地方有:vv赋值赋值赋值赋值vv条件判断条件判断条件判断条件判断vv函数调用函数调用函数调用函数调用C C语言中的三大定律语言中的三大定律语言中的三大定律语言中的三大定律vv类型定律类型定律任何类型都可以在任何需要类型的地方使用任何类型都可以在任何需要类型的地方使用任何类型都可以在任何需要类型的地方使用任何类型都可以在任何需要类型的地方使用用任何类型定义的变量都要用任何类型定义的变量都要用任何类型定义的变量都要用任何类型定义的变量都要占用内存占用内存占用内存占用内存已知特例已知特例已知特例已知特例vv函数返回值函数返回值函数返回值函数返回值不能不能不能不能定义为数组类型
13、定义为数组类型定义为数组类型定义为数组类型vv函数参数定义为数组类型,此时该参数不占用内存,函数参数定义为数组类型,此时该参数不占用内存,函数参数定义为数组类型,此时该参数不占用内存,函数参数定义为数组类型,此时该参数不占用内存,而是共享函数调用者传入的数组空间而是共享函数调用者传入的数组空间而是共享函数调用者传入的数组空间而是共享函数调用者传入的数组空间常用类型常用类型常用类型常用类型vv基本数据类型、指针、数组、结构体基本数据类型、指针、数组、结构体基本数据类型、指针、数组、结构体基本数据类型、指针、数组、结构体常见的需要类型的地方常见的需要类型的地方常见的需要类型的地方常见的需要类型的地
14、方vv定义变量定义变量定义变量定义变量vv定义指针、数组和结构体定义指针、数组和结构体定义指针、数组和结构体定义指针、数组和结构体vv函数参数和返回值函数参数和返回值函数参数和返回值函数参数和返回值vvsizeofsizeofC C语言中的三大定律语言中的三大定律语言中的三大定律语言中的三大定律vv参数传递定律参数传递定律函数调用时的参数传递永远都是传值调用,把实函数调用时的参数传递永远都是传值调用,把实函数调用时的参数传递永远都是传值调用,把实函数调用时的参数传递永远都是传值调用,把实参的值拷贝给形参参的值拷贝给形参参的值拷贝给形参参的值拷贝给形参vv实参:实参:实参:实参:调用者提供的参数
15、调用者提供的参数调用者提供的参数调用者提供的参数vv形参:形参:形参:形参:函数定义的参数函数定义的参数函数定义的参数函数定义的参数vv基本数据类型基本数据类型基本数据类型基本数据类型vvStructStruct数据类型数据类型数据类型数据类型vv指针指针指针指针作为参数时,把指针变量的内容(即其指向作为参数时,把指针变量的内容(即其指向作为参数时,把指针变量的内容(即其指向作为参数时,把指针变量的内容(即其指向的内存地址)做了拷贝的内存地址)做了拷贝的内存地址)做了拷贝的内存地址)做了拷贝vv数组名数组名数组名数组名作为参数时,把它等同于指针看待了作为参数时,把它等同于指针看待了作为参数时,
16、把它等同于指针看待了作为参数时,把它等同于指针看待了分析题一:分析题一:1.在在C语言程序中,语言程序中,xyz与与Xyz是相同的变量,变量名的组成?是相同的变量,变量名的组成?2.变量的类型通常指变量的类型通常指_?_和和_?_。3.字符串的结束符为字符串的结束符为什么?什么?“n”还是还是“0”?。?。4.以下语句:以下语句:inta=6;a+=a;printf(“%d”,a);输出结果输出结果?5.C语言规定以语言规定以_字符作为字符串结束标志。字符作为字符串结束标志。6一个一个C语言程序是由若干个语言程序是由若干个组成的,每个文件是由若组成的,每个文件是由若干干组成组成的。的。C语言可
17、以包括多个函数,且程序总是从语言可以包括多个函数,且程序总是从_开始执行。开始执行。函数只能有一个。函数只能有一个。7.在在C语言中,二维数组元素在内存中的存放顺序是语言中,二维数组元素在内存中的存放顺序是_。8定义符号常量定义符号常量price为为36的宏定义命令是的宏定义命令是。9.字符串常量字符串常量“abcd”在内存中的字节数是在内存中的字节数是?。1.已知已知:intb=2;,下列各表达式的值不为下列各表达式的值不为5的是的是?b2?5:1+b+2b%2+(b=5)b+=32sizeof运算符作用于一个表达式上运算符作用于一个表达式上,则是则是-。不可能不可能求出该表达式的类型占内存
18、的字节求出该表达式的类型占内存的字节求出该表达式的值求出该表达式的值强制该表达式的类型强制该表达式的类型3.对于下面程序段,执行的结果是对于下面程序段,执行的结果是?。charstr=”btn0fun0”;printf(“%d”,strlen(c);15?7?4字符串中有非法字符,输出值不确定字符串中有非法字符,输出值不确定?4.已知已知:intx=1,y=2;,下列下列表达式表达式 中中哪些是哪些是合法合法?x=10.5%2;x+=y+2;(x+y);+(x);5.判断字符串判断字符串s1是否大于字符串是否大于字符串s2,写出相应的函数及表达式,写出相应的函数及表达式C C语语语语句句句句概
19、概概概述述述述v语句是语句是算法实现的程序表示算法实现的程序表示,是算法实现的最小单位。,是算法实现的最小单位。v语句说明了一种行为,它是用计算语言编写的控制计算机语句说明了一种行为,它是用计算语言编写的控制计算机完成确定操作的句子。完成确定操作的句子。空语句(空语句(;)复合语句(复合语句(一条或多条语句一条或多条语句)流程控制语句流程控制语句结构化语句结构化语句条件语句(条件语句(if语句,语句,switch语句语句)while语句语句dowhile语句语句for语句语句非结构化语句非结构化语句break语句语句continue语句语句return语句语句非限定转向语句非限定转向语句(go
20、to)C语言数据语言数据操作语句操作语句循环语句循环语句简单语句简单语句函数调用语句(函数调用语句(函数名(参数表);函数名(参数表);)表达式语句(表达式语句(表达式;表达式;)1)1) 表达式语句表达式语句表达式语句表达式语句4)4)复合语句复合语句复合语句复合语句2)2)函数调用语句函数调用语句函数调用语句函数调用语句5)5)空语句空语句空语句空语句3)3)控制语句控制语句控制语句控制语句if()else条件语句条件语句for()循环语句循环语句while()循环语句循环语句dowhile()循环语句循环语句continue结束本次循环语句结束本次循环语句break中止中止switch或
21、循环语句或循环语句switch多分支选择语句多分支选择语句goto转向语句转向语句return从函数返回语句从函数返回语句()表示条件,表示内嵌的语句表示条件,表示内嵌的语句构成程序的三种基本结构构成程序的三种基本结构u顺序顺序结构结构u选择选择结构结构u循环循环结构结构u已经证明,任何程序均可只用这三种结构综已经证明,任何程序均可只用这三种结构综合描述合描述u只用这三种结构编制的程序,叫只用这三种结构编制的程序,叫结构化程序结构化程序u程序必须符合结构化规则程序必须符合结构化规则vv与基本控制结构相应的结构化的控制语句与基本控制结构相应的结构化的控制语句与基本控制结构相应的结构化的控制语句与
22、基本控制结构相应的结构化的控制语句if-elseif-elseswitchswitchforforwhilewhiledo-whiledo-whilebreakbreakcontinuecontinuevv常用算法,常用算法,如如如如累加、累乘、统计累加、累乘、统计累加、累乘、统计累加、累乘、统计、递推、迭、递推、迭、递推、迭、递推、迭代、穷举等代、穷举等代、穷举等代、穷举等选择、循环结构选择、循环结构vv求阶乘求阶乘:数据类型的定义数据类型的定义数据类型的定义数据类型的定义,float,float、 longlong或或或或doubledoublevv求累加和求累加和:longvv统计统计:
23、统计正数、平均分以上、统计正数、平均分以上、统计正数、平均分以上、统计正数、平均分以上、n n个成绩中个成绩中个成绩中个成绩中1009010090、89808980、79707970、69606960、6060的人数;输入字符串的人数;输入字符串的人数;输入字符串的人数;输入字符串中字母中字母中字母中字母d d的个数的个数的个数的个数设置一个计数变量设置一个计数变量设置一个计数变量设置一个计数变量k k:初始化为:初始化为:初始化为:初始化为1 1,每遇到一次将其,每遇到一次将其,每遇到一次将其,每遇到一次将其加加加加1 1:k+;k+;编程计算编程计算:1+2+3+100=?1!+2!+3!
24、+100!=?1+1/2+1/3+1/100=?2+22+222+2222v分别用如下语句编程分别用如下语句编程whiledo-whileforvv累加的项较复杂时,得专门求累加的项较复杂时,得专门求累加的项较复杂时,得专门求累加的项较复杂时,得专门求,例:,例:前后项之间无关前后项之间无关前后项之间无关前后项之间无关11mm+3+3mm+5+5mm+7+7mm+.+./4=1-1/3+1/5-1/7+./4=1-1/3+1/5-1/7+.直到最后一项的绝对值小于直到最后一项的绝对值小于直到最后一项的绝对值小于直到最后一项的绝对值小于1010- -6 6为止为止为止为止前后项之间有关前后项之间
25、有关前后项之间有关前后项之间有关1!+2!+.+n!1!+2!+.+n!xx0 0+x+x1 1+x+x2 2+x+x3 3+.+.1+1+2+3+5+8+13+21+.1+1+2+3+5+8+13+21+.2/1+3/2+5/3+8/5+13/8+21/13+.2/1+3/2+5/3+8/5+13/8+21/13+. a+aa+aaa+aaaa+aaaaaa+aa+aaa+aaaa+aaaaa+.a+.a是一个数字,例是一个数字,例是一个数字,例是一个数字,例a=2a=2,2+22+222+2222+.2+22+222+2222+.流程的转移控制流程的转移控制break 语句语句contin
26、ue 语句语句goto 语句语句return 语句语句有返回值的函数体内应加条有返回值的函数体内应加条_语句。语句。break;输出函数调用语句:输出函数调用语句:printf(”控制串控制串”,参数表,参数表);return;contnuin;数组数组(Array)int a10;定义一个有定义一个有10个元素的数组,每个元素的类型均为个元素的数组,每个元素的类型均为int使用使用a0、a1、a2、a9这样的形式访问每这样的形式访问每个元素。它们与普通变量没有任何区别个元素。它们与普通变量没有任何区别系统会在内存分配连续的系统会在内存分配连续的10个个int空间给此数组空间给此数组数组下标可
27、以是整型表达式数组下标可以是整型表达式直接对直接对a的访问,就是访问此数组的首地址的访问,就是访问此数组的首地址a数组首地址数组首地址a9a8a7a1a0数组是一组共用同一个名字、具数组是一组共用同一个名字、具数组是一组共用同一个名字、具数组是一组共用同一个名字、具有一定顺序关系和相同数据类型有一定顺序关系和相同数据类型有一定顺序关系和相同数据类型有一定顺序关系和相同数据类型的变量的集合。其中,共用的名的变量的集合。其中,共用的名的变量的集合。其中,共用的名的变量的集合。其中,共用的名字称作字称作字称作字称作? ?,集合中的变量称为,集合中的变量称为,集合中的变量称为,集合中的变量称为? ?
28、。 数组的定义与初始化数组的定义与初始化v数组定义后的初值仍然是随机数,一般需要我们来初数组定义后的初值仍然是随机数,一般需要我们来初始化始化 intint a5 = 12, 34, 56 ,78 ,9 ; a5 = 12, 34, 56 ,78 ,9 ; intint a5 = 0 ; a5 = 0 ; intint a = 11, 22, 33, 44, 55 ; a = 11, 22, 33, 44, 55 ;v数组大小最好用宏来定义,以适应未来可能的变化数组大小最好用宏来定义,以适应未来可能的变化 #define SIZE 10 int aSIZE;v数组大小定义好后,将永远不变数组大
29、小定义好后,将永远不变数组的使用数组的使用v数组的下标都是从数组的下标都是从0开始开始v对数组每个元素的使用与普通变量无异对数组每个元素的使用与普通变量无异v可以用任意表达式作为下标,动态决定访问哪个元素可以用任意表达式作为下标,动态决定访问哪个元素 for (i=0; iSIZE; i+) ai = 2 * i;v下标越界是下标越界是大忌大忌!v使用大于最大下标的下标,将访问数组以外的空间。使用大于最大下标的下标,将访问数组以外的空间。那里的数据是未知的,可能带来严重后果那里的数据是未知的,可能带来严重后果vsizeof可以用来获得数组大小可以用来获得数组大小只能逐个对数组元素进行操作(字符
30、数组例外)只能逐个对数组元素进行操作(字符数组例外)输入方法:输入方法:输入方法:输入方法:int a10,i;输入第输入第输入第输入第i i个数组元素:个数组元素:个数组元素:个数组元素:scanf( %d,&ai); 输入整个数组元素:输入整个数组元素:输入整个数组元素:输入整个数组元素:for (i=0;i10;i+) scanf( %d ,&ai);输出方法:输出方法:输出方法:输出方法:输出第输出第输出第输出第i i个数组元素个数组元素个数组元素个数组元素:printf( %d ,ai);输出整个数组元素:输出整个数组元素:输出整个数组元素:输出整个数组元素:for (i=0;i10
31、;i+) printf( %d ,ai);一维数组的输入和输出一维数组的输入和输出二维数组的输入和输出二维数组的输入和输出数组的输入和输出只能逐个对数组元素进行操作数组的输入和输出只能逐个对数组元素进行操作(字符数组例外)(字符数组例外)int a23,i,j;输入方法:输入方法:输入方法:输入方法:输入第输入第i行第行第j列元素:列元素:scanf(“%d”,&aij);输入整个数组元素:输入整个数组元素:for (i=0;i2;i+) for(j=0;j3;j+) scanf(“%d”,&aij);输出方法:输出方法:输出方法:输出方法:输出第输出第i行第行第j列列元素:元素:printf
32、(“%d”,aij);输出整个数组元素:输出整个数组元素:for (i=0;i2;i+) for(j=0;j str2) /*错误错误*/ if (strcmp(str1,str2) 0) /*正确正确*/字符串不能直接整体复制!字符串不能直接整体复制!也不能用关系运算符比较大小也不能用关系运算符比较大小注注:str,str1,str2是字符数组名或字符型指针变量名是字符数组名或字符型指针变量名charstr=“BBI”;puts(str);charstr=“nbbi”puts(str);gets(str);键入键入:bbircharc120=“Iam”;charc2=“aboy”printf
33、(“%s”,strcat(c1,c2);strcpy(str1,“BBI”);charstr2=“bbi”;strcpy(str2,str1)strcmp(“CCTV”,”BTV”);printf(“%dn”,strlen(“bbi”);puts(str或或字串字串)在屏幕上显示一个字符串在屏幕上显示一个字符串(以以0结束结束);将结束标记转为将结束标记转为n;可含转义字符。可含转义字符。gets(str)从键盘输入一个串给字符数从键盘输入一个串给字符数组,返回是该数组在内存的组,返回是该数组在内存的首地址首地址;字符串里可含空格;字符串里可含空格strcat(str1,str2)将串将串2接
34、在串接在串1后后,其结果其结果放在字符数组中放在字符数组中strcpy(str1,字串字串)将字符串拷贝到字符将字符串拷贝到字符数组里数组里strcmp(str1,str2)两串相同,返回值是两串相同,返回值是0;串串1串串2,返回值是正整数,返回值是正整数串串1串串2,返回值是负整数,返回值是负整数strlen(str)返回不包括返回不包括0字符串的长度字符串的长度函数格式函数格式功能功能举例举例字符串处理函数字符串处理函数:头文件是头文件是1.数组元素在内存中是怎样数组元素在内存中是怎样?按顺序存放的。?按顺序存放的。2.变量名为函数参数与数组名作函数参数有何不同?变量名为函数参数与数组名
35、作函数参数有何不同?3.数组是一组共用同一个名字、具有一定顺序关系和相同数据数组是一组共用同一个名字、具有一定顺序关系和相同数据类型的变量的集合。其中,共用的名字称作类型的变量的集合。其中,共用的名字称作 ,集合中集合中的变量称为的变量称为 。4.C语言的数组名是一个地址常量,不能对它进行加减和赋值语言的数组名是一个地址常量,不能对它进行加减和赋值运算;而指针是把另一个变量的运算;而指针是把另一个变量的作为其值的变量。作为其值的变量。5要打印出以下的杨辉三角形要打印出以下的杨辉三角形(若打印出若打印出10行行),要求要求:1正确的定义一个数组正确的定义一个数组:11121给出虚线部分元素值的表
36、达式给出虚线部分元素值的表达式1331,14641给出第给出第i行第行第j列元素的表达式列元素的表达式151010516.在下列对字符串的定义中在下列对字符串的定义中,正确的有正确的有()?。charc7=student;charc=student;char* *c=student;charc=s,t,u,d,e,n,t,0;7.7.输出字符串输出字符串输出字符串输出字符串“Iamastudent!”Iamastudent!”的语句有的语句有的语句有的语句有? ?#include”string.h”voidmain()char a=Iamastudent!;inti; 1)putchar(a)
37、;2)puts(a);3)for(i=0;ai!=0;i+)printf(%c,ai);4)printf(%s,a);#include #include #include #include voidmain()voidmain() int s;int s;float n, t, pi;float n, t, pi;t = 1; pi = 0; n = 1.0; s =t = 1; pi = 0; n = 1.0; s = 1; 1;while( ( fabs(t) ) = 1E-6 )while( ( fabs(t) ) = 1E-6 )pi = pi + t;pi = pi + t;n =
38、n + 2;n = n + 2;s = s = s;s;t = s/n;t = s/n; pi = pi * 4;pi = pi * 4; printf(pi=%10.6fn, pi );printf(pi=%10.6fn, pi ); 运行结果:运行结果:pi=3.141397#include #include #include #include 程序:程序:#includemath.hVoidmain()intm,i,k;scanf(%d,&m);/*输入一个整数输入一个整数m*/k=sqrt(m);for(i=2;i=k+1)printf(%d是素数是素数n,m);elseprintf(
39、%d不是素数不是素数n,m);运行结果:运行结果:17 17isaprimenumber数组这一章的应用数组这一章的应用v了解了在什么情况下使用数组这种数据类型了解了在什么情况下使用数组这种数据类型v向函数传递一维数组和二维数组的方法向函数传递一维数组和二维数组的方法v用数组名作为函数参数和用简单变量作为函数用数组名作为函数参数和用简单变量作为函数参数的不同之处参数的不同之处v程序设计常用算法:程序设计常用算法:求最大值,求最大值,排序排序排序排序,查找,统计,查找,统计1.斐比数列的设计几种方法斐比数列的设计几种方法2.逆序存放数据逆序存放数据3.回文问题回文问题函数函数C中库函数按功能分类
40、:中库函数按功能分类:在计算机高级语言中,引入函数(或子程序、过程),在计算机高级语言中,引入函数(或子程序、过程),称为称为标准函数标准函数,在,在C中称中称库函数库函数。 函数函数头文件头文件 输入、输出函数输入、输出函数stdio.h数学函数数学函数math.h字符和字符串函数字符和字符串函数string.h动态分配函数动态分配函数malloc.h.7.在在C语言中,使用语言中,使用putchar库函数,需要用库函数,需要用include命令将头命令将头文件文件_包含进来包含进来。8.何谓全局变量?何谓全局变量?在主函数内定义?局部变量?在主函数内定义?局部变量?1局部变量局部变量局部变
41、量局部变量在语句在语句在语句在语句块内块内块内块内定义的变量定义的变量定义的变量定义的变量形参也是局部变量形参也是局部变量形参也是局部变量形参也是局部变量只能被定义它的函数内部所识别的变量称为只能被定义它的函数内部所识别的变量称为_特点特点定义时不会自动初始化,除非程序员指定初值定义时不会自动初始化,除非程序员指定初值进入语句块时获得内存,仅能由语句块内语句访问,退进入语句块时获得内存,仅能由语句块内语句访问,退出语句块时释放内存,不再有效出语句块时释放内存,不再有效并列语句块各自定义的同名变量互不干扰并列语句块各自定义的同名变量互不干扰2全局变量全局变量全局变量全局变量在所有函数在所有函数在
42、所有函数在所有函数之外之外之外之外定义的变量定义的变量定义的变量定义的变量特点特点在程序中定义它的位置以后都有效在程序中定义它的位置以后都有效在定义点之前或在其他文件中引用,应该进行如下声明:在定义点之前或在其他文件中引用,应该进行如下声明: extern extern 类型名类型名类型名类型名 变量名变量名变量名变量名; ;从程序运行起即占据内存,程序运行过程中可随时访问,程序从程序运行起即占据内存,程序运行过程中可随时访问,程序退出时释放内存退出时释放内存使函数之间的数据交换更容易,也更高效使函数之间的数据交换更容易,也更高效但是并不推荐使用,尽量少用但是并不推荐使用,尽量少用因为谁都可以
43、改写全局变量,所以很难确定是谁改写了它因为谁都可以改写全局变量,所以很难确定是谁改写了它自动变量自动变量 (auto )vv“自动自动”体现在体现在进入语句块时进入语句块时自动申请自动申请内存,退出时内存,退出时自动释放自动释放内存内存vv标准定义格式标准定义格式 auto 类型名类型名 变量名变量名;动态局部变量动态局部变量缺省的存储类型缺省的存储类型不初始化时,值是不确定的不初始化时,值是不确定的静态变量(静态变量(static)v一般的内部变量一般的内部变量在函数退出后失效,再次进入函数,变量值重新初在函数退出后失效,再次进入函数,变量值重新初始化始化v静态变量静态变量在变量类型前面用在
44、变量类型前面用static修饰修饰 static int i;变量的值可以保存到下次进入函数,使函数具有记变量的值可以保存到下次进入函数,使函数具有记忆功能忆功能寄存器变量(寄存器变量(register)v寄存器寄存器CPU的内部容量很有限、但速度极快的存储器的内部容量很有限、但速度极快的存储器v使用频率比较高的变量声明为使用频率比较高的变量声明为register ,可以使程,可以使程序更小、执行速度更快序更小、执行速度更快 register 类型名类型名 变量名变量名; register int i;v现代编译器有能力自动把普通变量优化为寄存器变量,现代编译器有能力自动把普通变量优化为寄存器
45、变量,并且可以忽略用户的指定,所以一般无需特别声明变量并且可以忽略用户的指定,所以一般无需特别声明变量为为register 1.C语言中变量的存储类别有自动语言中变量的存储类别有自动(auto)、静态、静态(static)、寄存、寄存器器(register)和外部和外部(extern)四种类型四种类型,其中形参变量的默其中形参变量的默认类型是认类型是。2.只能被定义它的函数内部所识别的变量称为只能被定义它的函数内部所识别的变量称为。3.实参与其对应的形参的特征是?实参与其对应的形参的特征是?4.当变量名为函数参数,在函数调用时,当变量名为函数参数,在函数调用时,形参是虚拟的,不占存储单元形参是
46、虚拟的,不占存储单元实参与其对应的形参共占同一个存储单元;实参与其对应的形参共占同一个存储单元;只有当实参与其对应的形参同名时,才共占同一个存储单元;只有当实参与其对应的形参同名时,才共占同一个存储单元;.# #includeinclude intint Average(intAverage(int x, x, intint y); y); /* /*声明声明Average()Average()函数函数* */ / mainmain() () intint a = 12; a = 12;intint b = 24; b = 24;intint ave; ave; ave = Average(a
47、, b); ave = Average(a, b);printfprintf(Average of %d and %d is %d.n, a, b, ave);(Average of %d and %d is %d.n, a, b, ave); /* /* 函数功能:函数功能: 计算平均数计算平均数 函数入口参数:函数入口参数: 整型整型x x,存储第一个运算数,存储第一个运算数 整型整型y y,存储第二个运算数,存储第二个运算数 函数返回值:函数返回值: 平均数平均数* */ /intint Average( Average(intint x, x, intint y) y) intint
48、result; result;result = (x + y) / 2;result = (x + y) / 2;returnreturn result; result; 调用函数在前,调用函数在前,定义函数在后定义函数在后另:另:floataverage(floatarray10)int;floataver,sumarray0;for(i1;i10;i+);/*求总分之和求总分之和*/aversum10;return(aver);例如例如:#defineN5longfac(intn)longf=1;f=f*n;return(f);main()inti;for(i=1;i=N;i+)print
49、f(“%d!=%ldn”,i,fac(i);运行结果:运行结果:1!=12!=23!=34!=45!=5运行结果:运行结果:1!=12!=23!=64!=245!=120staticlongf=1; 在在语语言中,允言中,允许许用一个用一个变变量来量来存放指存放指针针,这这种种变变量称量称为为指指针变针变量。量。因此,因此,一个指针变量的值就是一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。某个内存单元的地址或称为某内存单元的指针。指针与指针变量v指针:一个变量的地址一个变量的地址v指针变量:声明为指针类型的变量,声明为指针类型的变量,专门存放变专门存放变量地址的变量即专门存放量
50、地址的变量即专门存放地址数据地址数据的变量的变量指针(指针(Pointer)的概念)的概念指针也是一种数据类型指针也是一种数据类型定义一个指针变量定义一个指针变量对对指指针变针变量的定量的定义义包括包括三三个内容:个内容:(1)(1)指指针类针类型型说说明,即定明,即定义变义变量量为为一个指一个指针变针变量;量;(2)(2)指指针变针变量名;量名;(3)(3)变变量量值值( (指指针针) )所指向的所指向的变变量的数据量的数据类类型。型。其一般形式其一般形式为为: 类类型型说说明符明符 * *变变量名;量名; int* *p1 * *表示这是一个指针变量,变量名即为定义的指针变量名,表示这是一
51、个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型。类型说明符表示本指针变量所指向的变量的数据类型。p1究竟指向哪一个整究竟指向哪一个整型变量,应由向型变量,应由向p1赋赋予的地址来决定。予的地址来决定。如何定义指针变量?如何定义指针变量?v指针变量初始化指针变量初始化p = &a;*p就像普通的变量一样使用,其值是就像普通的变量一样使用,其值是p指向的内存的内容指向的内存的内容(在上例和(在上例和a等价,但寻址方式不同)等价,但寻址方式不同)p可以可以动态(任意)地指向不同内存动态(任意)地指向不同内存,从而使,从而使*p代表不同的代表不同的变量变量(指指
52、针针变变量量的的赋赋值值只只能能赋赋予予地地址址, 决决不不能能赋赋予予任任何何其其它它数数据据(除除0 0以以外外),否否则则将将引引起起错错误误。在在语语言言中中,变变量量的的地地址址是由是由编译编译系系统统分配的。)分配的。) v两个有关的运算符:两个有关的运算符: &与与* *操作符操作符 1)1)&:&: 取地址运算符取地址运算符 2)2)* *:指指针针运算符(或称运算符(或称“间间接接访问访问” 运算符)运算符)例如:例如:inta10; /*/*定定义义a a为为包含包含1010个整型数据的数个整型数据的数组组* */ /int* *p; /*/*定定义义p p为为指向整型指向
53、整型变变量的指量的指针针* */ /下面是下面是对对指指针变针变量量赋值赋值: p=&a0; p=&a0; 即即p p指向指向a a数组的第数组的第0 0号元素号元素 把把a0a0元素的地址元素的地址赋给赋给指指针变针变量量p pp,a,&a0均指向同一单元,它们均指向同一单元,它们是数组是数组a的首地址,也是的首地址,也是0号元素号元素a0的首地址。的首地址。但但p是变量是变量,而而a、&a0都是常量都是常量。二、通过指针引用数组元素二、通过指针引用数组元素 C C语语言言规规定定:如如果果指指针针变变量量 p p 已已指指向向数数组组中中的的一一个个元元素素,则则 p+1 p+1 指向同一
54、数组中的下一个元素。指向同一数组中的下一个元素。 引入指针变量后,就可以用两引入指针变量后,就可以用两种方法来访问数组元素了。种方法来访问数组元素了。 如果如果p p的初值为的初值为&a0&a0,则:,则:1)p+i和和a+i就是就是ai的地址的地址, 或者说它们指向或者说它们指向a a数组的第数组的第i i个个元素。元素。2) *(p+i)或或*(a+i)就就是是p+i或或a+i所所指指向向的的数数组组元元素,即素,即ai。例如例如:* *(p+5)或或* *(a+5)a53)指向数组的指针变量也可以带下标,指向数组的指针变量也可以带下标,如如pi与与* *(p+i)等价等价等价等价字符串与
55、字符数组、字符指针字符串与字符数组、字符指针vC语言并没有为字符串提供任何专门的表示法,完全使用语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理字符数组和字符指针来处理v字符串字符串一串以一串以0结尾的字符结尾的字符v字符数组字符数组每个元素都是字符类型的数组每个元素都是字符类型的数组 char string100;v字符指针字符指针指向字符类型的指针指向字符类型的指针 char *p;v数组和指针虽不同,介可以等同看待,上面三者本质上是数组和指针虽不同,介可以等同看待,上面三者本质上是一回事一回事字符指针变量与字符数组的区别字符指针变量与字符数组的区别v定义方法不同定
56、义方法不同 char str10; char *ptr;v赋值方法不同赋值方法不同 char str10; str = ”china”; /*错误错误*/ strcpy(str, ”china”);/*正确正确*/v字符指针是变量,而数组名是地址常量字符指针是变量,而数组名是地址常量char *ptr; ptr = ”china”;输入输出数组的全部元素输入输出数组的全部元素main() int a10; int i; for (i=0; i10; i+) scanf(%d, &ai); for (i=0; i10; i+) printf(%d , ai); 方法方法方法方法1 1: : :
57、:下标法下标法下标法下标法main() int a10; int *p, i; for (p=a; p(a+10); p+) scanf(%d, p); for (p=a; pno=12348.定义char*p且执行p=malloc(255)之后,能正确输入一个串的是?scanf(%s,&p);scanf(%c,&p0);scanf(%s,*p);scanf(%s,p);9、在在C程序中有如下语句:程序中有如下语句:float*sum(intx,chary);它是它是()。对函数对函数sum的定义。的定义。对函数对函数sum的调用。的调用。对函数对函数sum的原型说明。的原型说明。不合法的。不
58、合法的。10若有若有Chartext=“ABCDEFG”,*p=text;,则表达则表达式式*(p+7)的值是的值是【】。G0G不确定不确定11设有以下一程序段:设有以下一程序段:main()()int*p,*pa,a=100;pa=&a;p=&pa;printf(“%dn”,*p);执行上面的程序段后执行上面的程序段后,上面的程序的输出结果是上面的程序的输出结果是【】。100pa的地址的地址a的地址的地址运行错误运行错误12若有以下定义和语句,则通过指针若有以下定义和语句,则通过指针p对值为对值为8的数组元素的的数组元素的引用的表达式是引用的表达式是。inta10=1,2,3,4,5,6,7
59、,8,9,*p;p=&a1;13C语言的数组名是一个地址常量,不能对它进行加减和赋语言的数组名是一个地址常量,不能对它进行加减和赋值运算;而指针是把另一个变量的值运算;而指针是把另一个变量的作为其值的变量。作为其值的变量。有关指针的数据类型有关指针的数据类型 和指针运算的小结和指针运算的小结一、有关指针的数据类型的小结一、有关指针的数据类型的小结定义含义inti;定定义义整型整型变变量量iint* *pp为为指向整型数据的指指向整型数据的指针变针变量量intan;定定义义整型数整型数组组a,它有它有n个元素个元素int* *pn;定定义义指指针针数数组组p,它由它由n个指向整型数据的指个指向整
60、型数据的指针针元素元素组组成成int(* *p)n;p为为指向含指向含n个元素的一个元素的一维维数数组组的指的指针变针变量量intf();f为带为带回整型函数回整型函数值值的函数的函数int* *p();p为带为带回一个指回一个指针针的函数,的函数,该该指指针针指向整型数据指向整型数据int(* *p)();p为为指向函数的指指向函数的指针针,该该函数返回一个整型函数返回一个整型值值int*p;P是一个指是一个指针变针变量,它指向一个指向整型数据的指量,它指向一个指向整型数据的指针变针变量量二、指针运算小结二、指针运算小结1、指针变量加、指针变量加/减运算减运算p+、p、p+i、pi、p+=i
61、、p=i加加1表示指向下一个数据。表示指向下一个数据。2、指针变量赋值、指针变量赋值p=&a;变量a的地址赋给p,即指针p指向ap=array;数组array首地址赋给pp=&arrayi;数组元素arrayi的地址赋给pp=max;函数max的入口地址赋给pp1=p2;指针p2的值赋给指针p1,即p1、p2所指的数据相同voidmain()charstr=”today”;char* *q=str;for(;qstr+5;q+)printf(%cn,* *q);?voidmain()charstr=”today”;char*q=str;for(;qstr+5;q+)printf(%sn,q);
62、?用户自定义的用户自定义的-数据类型数据类型vv结构体:结构体:把把把把关系紧密且逻辑相关关系紧密且逻辑相关关系紧密且逻辑相关关系紧密且逻辑相关 的的的的多种不同类型多种不同类型多种不同类型多种不同类型 的变量的变量的变量的变量组织到统一的名字之下,也称复合数据类型组织到统一的名字之下,也称复合数据类型组织到统一的名字之下,也称复合数据类型组织到统一的名字之下,也称复合数据类型这种类型的变量这种类型的变量这种类型的变量这种类型的变量占用相邻的一段内存单元占用相邻的一段内存单元占用相邻的一段内存单元占用相邻的一段内存单元vv共用体:共用体:把把把把情形互斥情形互斥情形互斥情形互斥 但又逻辑相关但
63、又逻辑相关但又逻辑相关但又逻辑相关的的的的多种不同类型多种不同类型多种不同类型多种不同类型 的变的变的变的变量组织在一起量组织在一起量组织在一起量组织在一起这种类型的变量占用同一段内存单元,因此每一这种类型的变量占用同一段内存单元,因此每一这种类型的变量占用同一段内存单元,因此每一这种类型的变量占用同一段内存单元,因此每一时刻只有一个数据起作用时刻只有一个数据起作用时刻只有一个数据起作用时刻只有一个数据起作用指针的概念指针的概念指针是一种特殊的数据类型指针是一种特殊的数据类型指针的使用原则指针的使用原则永远要清楚每个指针指向了什么位置永远要清楚每个指针指向了什么位置永远要清楚每个指针指向的位置
64、中的内容是什么永远要清楚每个指针指向的位置中的内容是什么指针与数组之间的关系指针与数组之间的关系掌握二维数组在内存中的存放方式,是理解二维数组的掌握二维数组在内存中的存放方式,是理解二维数组的行行指针和指针和列列指针的关键指针的关键指针的应用指针的应用做函数参数,传地址调用做函数参数,传地址调用动态分配内存,实现动态数组,对于动态分配的内存,不动态分配内存,实现动态数组,对于动态分配的内存,不要忘记在不使用时释放要忘记在不使用时释放结构体结构体(structure)与)与共用体共用体(union)的内存占用情况的内存占用情况uudoubledouble 占用内存字节数占用内存字节数占用内存字节
65、数占用内存字节数 = 8= 8uustructstruct student student 占用内存字节数占用内存字节数占用内存字节数占用内存字节数 = ?= ?uu是所有成员变量的内存总和吗?是所有成员变量的内存总和吗?是所有成员变量的内存总和吗?是所有成员变量的内存总和吗?uu事实上,所有数据类型在内存中都是从偶数地址事实上,所有数据类型在内存中都是从偶数地址事实上,所有数据类型在内存中都是从偶数地址事实上,所有数据类型在内存中都是从偶数地址开始存放的,且结构所占的实际空间一般是按照开始存放的,且结构所占的实际空间一般是按照开始存放的,且结构所占的实际空间一般是按照开始存放的,且结构所占的
66、实际空间一般是按照机器字长对齐的机器字长对齐的机器字长对齐的机器字长对齐的uu不同的编译器、平台,对齐方式会有变化不同的编译器、平台,对齐方式会有变化不同的编译器、平台,对齐方式会有变化不同的编译器、平台,对齐方式会有变化uu我们可以用我们可以用我们可以用我们可以用sizeofsizeof来获得结构的大小来获得结构的大小来获得结构的大小来获得结构的大小理论上是的!理论上是的!理论上是的!理论上是的!填空题回文问题#include#includevoidmain()chars81,*p1,*p2;intn;pirntf(nInputastring:);gets(s);n=strlen(s);p1=s;p2=【s+n-1】;while(【p1p2】)if(*p1!=*p2)break;elsep1+;【p2-】;if(p1p2)printf(Non);elseprintf(Yesn);不用指针用数组更容易做编程序:画出流程图1.P1127题题9题题2.P131循环程序举例循环程序举例3.P140循环程序设计循环程序设计4.P144数数组一章举例组一章举例5.P168数数组一章程序设计组一章程序设计6.P函数调用函数调用7.P指针应用指针应用8.P结构体应用结构体应用