1、幸运考试的主要题型和分数分布:1 1 单项选择题单项选择题(10(10小题小题,每题每题2 2分分,共共2020分分)2 2 填空题填空题(每空每空1 1分分,共共1010分分)3 3 阅读程序阅读程序(每题每题2 2分,共分,共1010分分)4 4 程序填空程序填空(每空每空2 2分,共分,共4040分分)5 5 编写程序编写程序(2(2小题小题,每题每题1010分分,共共2020分分)幸运第一章幸运 第第1 1章章 C C语言概述语言概述本章包含本章包含4 4项目重点内容项目重点内容:1 简单的C语言程序#include void main()printf(This is a C prog
2、ram.n);幸运 2 VC+6.0 环境:(1)编辑C语言源程序 后缀是.c 或.cpp(2)经过编译产生目标文件,后缀是.obj(3)再经过连接成为可执行文件,后缀 是.exe3 C语言是结构化程序,有三种结构(1)顺序结构;(2)选择结构;(3)循环结构;幸运4 C语言是由函数组成的,其中必须有一个并且只有一个主函数 main,程序的执行从main 函数开始,到main 函数结束.幸运第二章幸运 C的数据类型C语言提供了以下一些数据类型。幸运 常量与变量 常量和符号常量常量和符号常量 在程序运行过程中在程序运行过程中,其值不能被改变的量称为常量其值不能被改变的量称为常量 常量区分为不同的
3、类型:常量区分为不同的类型:整型整型 100 100,125125,-100-100,0 0实型实型 3.14 3.14,0.125 0.125,-3.1e3-3.1e3字符型字符型 a,a,057057,x3cx3c字符串字符串“a a”,“a“ab b”,”1232”1232”定义字符常量:定义字符常量:#define PI 3.1415926#define PI 3.1415926#define N 20#define N 20幸运 变量命名的规定:变量命名的规定:语言规定标识符语言规定标识符:1 1 只能由字母、数字和下划线三种字符组成只能由字母、数字和下划线三种字符组成;(注意不要混
4、淆下划线注意不要混淆下划线_ _和杠号和杠号(减号)减号)-)-)2 2 第一个字符必须为字母或下划线第一个字符必须为字母或下划线;3 3 不能使用关键字不能使用关键字.例:例:sumsum,_123,m123,Student_name1_123,m123,Student_name1 12a,Jo-hn,12a,Jo-hn,¥123,a#b,int123,a#b,int 幸运整型常量的表示方法整型常量的表示方法 整型常量即整常数。在语言中,整常数整型常量即整常数。在语言中,整常数可用以下三种形式表示:可用以下三种形式表示:(1)(1)十进制整数。十进制整数。如:如:123,-456123,-4
5、56(2)(2)八进制整数。以八进制整数。以0 0开头的数是八进制数。开头的数是八进制数。如:如:01230123表示八进制数表示八进制数123123,等于十进制数,等于十进制数8383 0129 0129 非法(每位非法(每位0-70-7合法合法)(3)(3)十六进制整数。以十六进制整数。以0 x0 x开头的数是开头的数是1616进制数。进制数。如:如:0 x1230 x123,代表,代表1616进制数进制数123,123,等于十进制数等于十进制数291291 而而 0 x12g 0 x12g 非法(每位非法(每位0-f0-f合法合法)幸运 字符型数据 字符常量(1)用单引号包含的单个字符(
6、2)用单引号包含的由开始的转义字符a,A,a,A,1,037,x2d1,037,x2dabcabc,“a”a”,082,x5g082,x5g 幸运字符串常量字符串常量 字符串常量是一对字符串常量是一对双引号双引号括起来的字符序列括起来的字符序列.合法的字符串常量合法的字符串常量:“How do you do.”,“CHINA”How do you do.”,“CHINA”,“a”a”,“$123.45”$123.45”可以输出一个字符串,如可以输出一个字符串,如printf(“How do you do.”)printf(“How do you do.”);幸运运算符简介运算符简介 的运算符有
7、以下几类:的运算符有以下几类:(1)(1)算术运算符算术运算符 (+-+-*/%/%)(2)(2)关系运算符关系运算符 (!)(3)(3)逻辑运算符逻辑运算符 (!(!|)(4)(4)位运算符位运算符 (|)(5)(5)赋值运算符赋值运算符 (及其扩展赋值运算符)(及其扩展赋值运算符)(6)(6)条件运算符条件运算符 (?:)(?:)幸运算术运算符和算术表达式算术运算符和算术表达式 基本的算术运算符基本的算术运算符:(加法运算符或正值运算符如(加法运算符或正值运算符如:、)、)(减法运算符或负值运算符(减法运算符或负值运算符,如如:、)、)*(乘法运算符。如(乘法运算符。如:*)(除法运算符(
8、除法运算符,实数相除结果是双精度实数,整实数相除结果是双精度实数,整数相除结果是整数;两数同号结果是正数,两数异数相除结果是整数;两数同号结果是正数,两数异号结果是负数,且舍入得方向不固定,号结果是负数,且舍入得方向不固定,Vc+Vc+是是“向向0 0取整)取整)(求余运算符,两侧必须为整型数据(求余运算符,两侧必须为整型数据,结果与结果与被除数一致。被除数一致。)幸运 自增、自减运算符自增、自减运算符 作用是使变量的值增或减作用是使变量的值增或减如如:,(在使用之前,使,(在使用之前,使+1+1 或或-1)-1),(在使用之后,使,(在使用之后,使+1+1 或或-1)-1)就是使用就是使用
9、i i 的原值执行本条语句的原值执行本条语句,而在执行下条语句前将而在执行下条语句前将 i+1 i+1 或或-1-1 int m=5,n=10;printf(%d,%dn,m+,-n);int m=5,n=10;printf(%d,%dn,m+,-n);显示显示5,9 5,9 若再有:若再有:printf(“%dn”,m);printf(“%dn”,m);显示显示6 6幸运赋值运算符赋值运算符 赋值符号赋值符号“”就是赋值运算符,它的作用是就是赋值运算符,它的作用是将一个数据赋给一个变量将一个数据赋给一个变量,如如a=5;a=5;(单等号)(单等号)而而 a=5 a=5 是判断是判断 a a是
10、否等于是否等于 5;5;(双等号)(双等号)如如 int a=3;if(a=2)int a=3;if(a=2)为假,为假,而而 if(a=5)if(a=5)为真。为真。幸运第三章幸运 C语句概述C程序源程序文件1源程序文件2源程序文件n预处理命令函数n函数1数据声明函数首部函数体数据声明执行语句幸运 C语句概述 控制语句 完成一定的控制功能1 if()else 条件语句条件语句 6 break 间断语句间断语句 2 for()循环语句循环语句 7 switch()开关语句开关语句3 while()循环语句循环语句 8 goto 转向语句转向语句 4 do while();循环语句循环语句 9
11、return 返回语句返回语句5 continue 继续语句继续语句幸运 格式输入与输出(一).格式输出函数 函数作用:向终端(或系统隐含指定的输出设备)函数作用:向终端(或系统隐含指定的输出设备)输出输出若干个任意类型若干个任意类型的数据。的数据。一般格式:一般格式:printfprintf(格式控制,输出表列)(格式控制,输出表列)%d%d:以带符号的十进制形式输出整数以带符号的十进制形式输出整数%o%o:以八进制无符号形式输出整数以八进制无符号形式输出整数%x%x:以十六进制无符号形式输出整数以十六进制无符号形式输出整数幸运 格式输入与输出%u%u:以无符号十进制形式输出整数以无符号十进
12、制形式输出整数%c%c:以字符形式输出,只输出一个字符以字符形式输出,只输出一个字符%s%s:输出字符串输出字符串%f%f:以小数形式输出单,双精度数,隐含输出六位小数以小数形式输出单,双精度数,隐含输出六位小数%e%e:以指数形式输出实数以指数形式输出实数%g%g:选用选用%f%f或或%e%e格式中输出宽度较短的一种格式,不输格式中输出宽度较短的一种格式,不输 出无意义的出无意义的0 0幸运 格式输入与输出 用用printf printf 和和scanfscanf函数输出和输入数据。函数输出和输入数据。#include#includeint main()int main()int a,b,c
13、;int a,b,c;scanf(“%d,%d,%d”,&a,&b,&c);scanf(“%d,%d,%d”,&a,&b,&c);printf(“%d,%d,%dn”,a,b,c);printf(“%d,%d,%dn”,a,b,c);运行情况:3,4,5 (输入a,b,c的值)3,4,5 (输出a,b,c的值)表示表示a a在内存中在内存中的地址的地址其中,其中,&是地址是地址运算符运算符幸运 在格式输入与输出中格式控制是用双引号包括的,其中一般带有%d,%c,%f,%s等各种对数据类型的要求.幸运第四章幸运 关系运算符和关系表达式1.关系运算符及其优先次序1.(小于)2.(大于)4.=(大于
14、或等于)5.=(等于)!=(不等于)优先级相同(高)优先级相同(高)优先级相同(低)优先级相同(低)说明:说明:关系运算符的优先级低于算术运算符关系运算符的优先级低于算术运算符关系运算符的优先级高于赋值运算符关系运算符的优先级高于赋值运算符幸运 关系运算符和关系表达式 2.关系表达式关系表达式用关系运算符将两个表达式(可以是算术表达式或用关系运算符将两个表达式(可以是算术表达式或 关系表达式,逻辑表达式,赋值表达式,字符表达式)关系表达式,逻辑表达式,赋值表达式,字符表达式)接起来的式子,称关系表达式接起来的式子,称关系表达式例:例:ab,a+bb+c,(a=3)(b=5),ab)(bb,a+
15、bb+c,(a=3)(b=5),ab)(bb”ab”的值为的值为“真真”,表达式的值为,表达式的值为1 1。C C语言中没有专用语言中没有专用的逻辑值,的逻辑值,1 1代表代表真,真,0 0代表假代表假幸运 逻辑运算符和逻辑表达式1.1.逻辑运算符及其优先次序逻辑运算符及其优先次序(1)&(1)&(逻辑与逻辑与)(2)|(2)|(逻辑或逻辑或)(3)!(3)!(逻辑非逻辑非)优先次序:优先次序:逻辑非逻辑非!算术运算符算术运算符 关系运算符关系运算符 逻辑与或逻辑与或 赋值运算符赋值运算符 或运算中有或运算中有1 1,值为,值为1 1,与运算中有,与运算中有0 0,值为,值为0 0幸运 if语
16、句 2.If2.If语句的嵌套语句的嵌套在在ifif语句中又包含一个或多个语句中又包含一个或多个ifif语句称为语句称为ifif语句的嵌套。语句的嵌套。形式:形式:if()if()if()if()语句语句1 1else else 语句语句2 2elseelseif()if()语句语句3 3else else 语句语句4 4内嵌内嵌ifif幸运 if语句 如如 int a=3,b=4,c=5;int a=3,b=4,c=5;if(ab)if(ab)if(ab)a=ba=b;b=c;c=a;b=c;c=a;第第1 1个,因为个,因为ab,abmax=(ab)?)?a:b;a:b;min=(ab)m
17、in=(ab)?a:b;a:b;幸运 if语句 例:输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。#include void main()char ch;scanf(“%c”,&ch);ch=(A=ch&ch=Z)?(ch+32):ch;printf(“%cn”,ch);/注意:不能用 A=ch=Z,它永远为真如果字符变量ch的值为大写字母,则条件表达式的值为(),即相应的小写字母。如果ch的值不是大写字母,则条件表达式的值为,即不进行转换。幸运几个典型的判断几个典型的判断:判断大写字母:判断大写字母:if(A=c&c=Z)if(A=c
18、&c=Z)判断小写字母:判断小写字母:if(a=c&c=z)if(a=c&c=z)判断数字:判断数字:if(0=c&c=9)if(0=c&c=9)判断闰年:判断闰年:if(year%4=0&year%100!=0)|year%400=0)if(year%4=0&year%100!=0)|year%400=0)幸运注意:例如在判断数字中:注意:例如在判断数字中:if(0=c&c=9)if(0=c&c=9)不可以没有不可以没有&,也不能没有,也不能没有 即不能用即不能用 if(0=c=9)if(0=c=9)也不能用也不能用 if(0=c&c=9)if(0=c&c=9)但可以用但可以用 if(48=
19、c&c=57)if(48=c&c=57)(想想为什么?(想想为什么?)幸运用用switchswitch语句实现语句实现 (若若a a是整数是整数)按照考试成绩输出等级百分制分数段按照考试成绩输出等级百分制分数段switch(switch(a a/10)/10)case 10:case 10:case 9:grade=A;break;case 9:grade=A;break;case 8:grade=B;break;case 8:grade=B;break;case 7:grade=C;break;case 7:grade=C;break;case 6:grade=D;break;case 6:
20、grade=D;break;defaultdefault:grade=E;:grade=E;幸运第五章幸运 用while语句实现循环whilewhile语句用来实现语句用来实现“当型当型”循环结构。循环结构。一般形式:一般形式:while(while(表达式表达式)语句语句 当表达式为非当表达式为非0 0值时,执行值时,执行whilewhile语句中的语句中的内嵌语句。其特点是内嵌语句。其特点是:先判断表达式,后执先判断表达式,后执行语句。行语句。幸运 求正整数求正整数m m和和n n的最大公约数和最小公倍数:的最大公约数和最小公倍数:#include#include void main()v
21、oid main()int p,r,n,m;int p,r,n,m;printf(printf(请输入两个正整数请输入两个正整数n,m:);n,m:);scanf(%d,%d,&n,&m);scanf(%d,%d,&n,&m);p=n p=n*m;m;while(m!=0)while(m!=0)r=n%m;n=m;m=r;r=n%m;n=m;m=r;printf(printf(它们的最大公约数为它们的最大公约数为:%dn,n);:%dn,n);printf(printf(它们的最小公倍数为它们的最小公倍数为:%dn,p/n);:%dn,p/n);幸运其中用下面的辗转相除法求出最大公约数其中用下
22、面的辗转相除法求出最大公约数n n while(m!=0)while(m!=0)r=n%m;n=m;m=r;r=n%m;n=m;m=r;把它独立出来就是一个函数把它独立出来就是一个函数int hcf(int m,int n)int hcf(int m,int n)int r;int r;while(m!=0)while(m!=0)r=n%m;n=m;m=r;return(n);r=n%m;n=m;m=r;return(n);用用 p/n p/n 得到得到最小公倍数最小公倍数 幸运 用do-while语句实现循环 do-whiledo-while语句的特点语句的特点:先执行循环体,然后判断先执行
23、循环体,然后判断循环条件是否成立。循环条件是否成立。一般形式一般形式:do do 循环体语句循环体语句 while(while(表达式表达式);执行过程:先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零(“真”)时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。幸运例如例如:为了保证输入成绩的正确为了保证输入成绩的正确,可以使用语句可以使用语句:printf(printf(请输入学生成绩请输入学生成绩a(0-100):);a(0-100):);scanf(%d,&a);scanf(%d,&a);while(a100)while(a100)printf(
24、n printf(n 输入有误输入有误,请重输请重输:);:);scanf(%d,&a);scanf(%d,&a);幸运 我们更简洁地用我们更简洁地用do-whiledo-while语句语句do do printf(“printf(“请输入成绩请输入成绩 a a(0-1000-100):”);:”);scanf(“%d”,&a);scanf(“%d”,&a);while(a100);while(a100);注意注意 while(a100);while(a100);的含义和的含义和;号号 幸运 用用do-whiledo-while语句计算语句计算 1010!i=1;s=1;do s=si=1;s
25、=1;do s=s*i;i+;while(i=10);i;i+;while(i=10);不是:不是:i=1;s=0;do s=si=1;s=0;do s=s*i;i+;while(i=10);i;i+;while(i=10);也不是:也不是:doi=1;s=1;s=sdoi=1;s=1;s=s*i;i+;while(i=10);i;i+;while(i=10);doi=1;s=0;s=sdoi=1;s=0;s=s*i;i+;while(i=10);i;i+;while(i=10);幸运whilewhile语句和用语句和用do-whiledo-while语句的比较语句的比较:while whil
26、e 是先判断条件,再决定是否执行是先判断条件,再决定是否执行,所以可所以可能一次也不执行能一次也不执行;do-while do-while 是先执行再判断条件,决定是否还执是先执行再判断条件,决定是否还执行行,所以至少执行一次所以至少执行一次.幸运 用for 语句实现循环 C C语言中的语言中的forfor语句使用最为灵活,不仅可以语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的于循环次数不确定而只给出循环结束条件的情况,它完全可以代替情况,它完全可以代替whilewhile语句。语句。一般形式一般形式
27、:for(for(表达式表达式1 1;表达式;表达式2 2;表达式;表达式3)3)语句语句幸运注意注意:forfor中用两个分号隔开中用两个分号隔开,不能省略不能省略;forfor只对其后只对其后第一个语句第一个语句有效有效,如果要求对如果要求对多条语句有效多条语句有效,必须用必须用花括号花括号括之成为复合括之成为复合语语;for()for()后通常没有分号后通常没有分号,有分号将不执行任有分号将不执行任何语句何语句,只执行自己的循环只执行自己的循环;幸运下面是用下面是用forfor语句显示数组语句显示数组a a中的最小值的程序中的最小值的程序#include#include void mai
28、n()void main()int a5=4,2,8,9,5,i,min;int a5=4,2,8,9,5,i,min;min=a0;min=a0;for(i=1;i5;i+)for(i=1;iai)min=ai;if(minai)min=ai;printf(%dn,min);printf(%dn,min);幸运 break语句和continue语句 breakbreak语句语句 breakbreak语句可以用来从循环体内跳出循环体,语句可以用来从循环体内跳出循环体,即提前结束循环即提前结束循环.一般形式:一般形式:break;break;注意注意:breakbreak语句只能用于循环语句或语
29、句只能用于循环语句或switchswitch语句中。语句中。幸运 continue语句 作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次循环的判定.一般形式:continue;幸运例 把100200之间的不能被3整除的数输出。#include void main()int n;for(n=100;n=200;n+)if(n%3=0)continue;printf(%d,n);注意是把能被注意是把能被3 3整除的跳过整除的跳过.不能用不能用 n%3!=0n%3!=01001nn幸运 判断m是否素数。#include#include void main()int m,i,k;s
30、canf(%d,&m);k=sqrt(m);for(i=2;ik)printf(%d is a prime numbern,m);else printf(%d is not a prime numbern,m);幸运 也可以是:#include#include void main()int m,I,k,flag=1;scanf(%d,&m);k=sqrt(m);for(i=2;i1字符串字符串2 2,函数值为,函数值为1 1。(3)(3)如果字符串如果字符串11str2)if(str1str2)只能用只能用if(strcmp(str1if(strcmp(str1,str2)0)str2)0)幸
31、运6.strlen6.strlen函数函数 其一般形式为:其一般形式为:strlen(strlen(字符数组字符数组)strlenstrlen是测试字符串长度的函数。函数的值为字符是测试字符串长度的函数。函数的值为字符串中的实际长度串中的实际长度(不包括不包括00在内在内)。例如:例如:char strchar str1010=China;=China;printf(%d printf(%d,strlen(str);strlen(str);输出结果不是输出结果不是1010,也不是,也不是6 6,而是,而是5,5,即有效字符数即有效字符数.幸运strlwr(strlwr(字符串字符串)strlw
32、rstrlwr函数函数7.strlwr7.strlwr函数函数 其一般形式为:的作用是将字符串中大写字其一般形式为:的作用是将字符串中大写字母换成小写字母。母换成小写字母。8.strupr8.strupr函数函数 其一般形式为:其一般形式为:strupr(strupr(字符串字符串)struprstrupr函数的作用是将字符串中小写字母换函数的作用是将字符串中小写字母换成大写字母。成大写字母。幸运使用字符串函数时,必须包括字符串函数库:使用字符串函数时,必须包括字符串函数库:#include#include 幸运我们可以不使用字符串函数编写程序:我们可以不使用字符串函数编写程序:例如例如:不使
33、用不使用strcat strcat 连接两个字符串;连接两个字符串;不使用不使用strcpy strcpy 拷贝字符串;拷贝字符串;不使用不使用strcmp strcmp 比较字符串;比较字符串;幸运不使用不使用strcpy strcpy 拷贝字符串拷贝字符串:1 1 用数组用数组:For(i=0;i=strlen(s2);i+)S1i=s2i;For(i=0;i=strlen(s2);i+)S1i=s2i;2 2 用指针用指针:p1=s1;p2=s2;:p1=s1;p2=s2;while(while(*p1+=p1+=*p2+);p2+);寻找字符串尾:寻找字符串尾:while(s1i)i+
34、;while(s1i)i+;i i 就是字符串尾的下标,再拷贝就是连接。就是字符串尾的下标,再拷贝就是连接。幸运第七章幸运 简单的C语言函数#include#include /*文件包含文件包含*/void main()void main()/*主函数主函数 */*函数体开始函数体开始*/printf(“This is a C program.n”);printf(“This is a C program.n”);/*函数体语句函数体语句*/*函数体结束函数体结束*/幸运mainmain是主函数名是主函数名,void,void 是函数类型是函数类型 每个每个C C程序是由若干函数组成的程序是由
35、若干函数组成的,其中必其中必有一个并且只能有一个主函数有一个并且只能有一个主函数 mainmain()()每个每个C C程序从程序从mainmain函数开始执行函数开始执行,到到mainmain函数结束函数结束,即执行的是主函数的函数体即执行的是主函数的函数体,与主函数与主函数mainmain在程序中的位置无关在程序中的位置无关;幸运 是函数开始和结束的标志是函数开始和结束的标志,不可省略不可省略;每个每个C C语句以分号结束语句以分号结束;在主函数中直接或间接调用其他函数在主函数中直接或间接调用其他函数;使用标准输入出库函数时应写:使用标准输入出库函数时应写:#include#include
36、 使用数学库函数和字符串函数时应写:使用数学库函数和字符串函数时应写:#include#include#include#include 幸运 一个函数由两部分组成一个函数由两部分组成:函数的首部:函数的首部:例例1.31.3中的中的maxmax函数首部函数首部 int max(int x,int y)int max(int x,int y)函数体:函数体:花括号内的部分。若一个函数有多个花括号内的部分。若一个函数有多个花括号花括号,则最外层的一对花括号为函数体的范则最外层的一对花括号为函数体的范围。围。幸运 函数定义的一般形式函数定义的一般形式 类型标识符类型标识符函数名函数名(形式参数表列)
37、(形式参数表列)声明部分声明部分 语句部分语句部分 其中类型标识符是函数返回值的数据类型其中类型标识符是函数返回值的数据类型,如如:int,char:int,charfloat,double float,double 等等,也可以是无返回值也可以是无返回值,写为写为void.void.也可以没有形式参数表列也可以没有形式参数表列,称为无参函数称为无参函数.幸运例如:例如:int maxint max(int int,int int)int int;/*函数体中声明部分函数体中声明部分*?;/;/*函数体中语句部分函数体中语句部分*returnreturn();();/*返回值返回值 */幸运
38、函数参数和函数的值函数参数和函数的值形式参数和实际参数形式参数和实际参数 形式参数:形式参数:函数名后面括弧中的变量名称为函数名后面括弧中的变量名称为 “形式参数形式参数”(简称(简称“形参形参”);实际参数:实际参数:主调函数中调用一个函数时,函主调函数中调用一个函数时,函数名后面括弧中的参数数名后面括弧中的参数(可以是一个表达式可以是一个表达式)称为称为“实际参数实际参数”(简称(简称“实参实参”);函数返回值:函数返回值:returnreturn后面的括弧中的值作为后面的括弧中的值作为函数带回的值(称函数带回的值(称函数返回值函数返回值)。)。幸运说明:说明:1.1.函数的返回值是通过函
39、数中的函数的返回值是通过函数中的returnreturn语句获语句获得的。得的。一个函数中可以有一个以上的一个函数中可以有一个以上的returnreturn语句,执语句,执行到哪一个行到哪一个returnreturn语句,哪一个语句起作用。语句,哪一个语句起作用。幸运 函数的调用函数的调用 对被调用函数的声明和函数原型对被调用函数的声明和函数原型1.1.首先被调用的函数必须是已经存在的函数(是库函首先被调用的函数必须是已经存在的函数(是库函数或用户自己定义的函数)。数或用户自己定义的函数)。幸运3.3.如果使用用户自己定义的函数,而该函数的位置在如果使用用户自己定义的函数,而该函数的位置在调用
40、它的函数(即主调函数)的后面,应该在主调函调用它的函数(即主调函数)的后面,应该在主调函数中对被调用的函数作声明数中对被调用的函数作声明,即写上函数的原型。即写上函数的原型。用函数首部加上用函数首部加上 ;号表示函数声明号表示函数声明.2.2.如果使用库函数,还应该在本文件开头用如果使用库函数,还应该在本文件开头用#include#include 命令将调用有关库函数时所需用到的信息命令将调用有关库函数时所需用到的信息“包含包含”到到本文件中来。本文件中来。如如#include#include#include#include#include#include 幸运函数调用的实例(求两整数的函数调
41、用的实例(求两整数的最大公约数最大公约数):):#include#include void main()void main()int hcf(intint hcf(int u u,int,int v v););/函数声明函数声明 int u,v,h;int u,v,h;scanf(%d,%d,&u,&v);scanf(%d,%d,&u,&v);h=hcf(u,v);h=hcf(u,v);printf(%d,%d printf(%d,%d的最大公约数是:的最大公约数是:%dn,u,v,h);%dn,u,v,h);/函数定义函数定义int hcf(int u,int v)int hcf(int u
42、,int v)/函数首部函数首部 int r;int r;while(v!=0)while(v!=0)r=u%v;u=v;v=r;r=u%v;u=v;v=r;return(u return(u););幸运局部变量和全局变量局部变量和全局变量 局部变量局部变量在一个函数内部定义的变量是内部变量,它只在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这内才能使用它们,在此函数以外是不能使用这些变量的。这称为些变量的。这称为“局部变量局部变量”。幸运在函内定义的变量是在函内定义的变量是局部变量
43、局部变量,而在函数外定义的而在函数外定义的变量称为外部变量变量称为外部变量,也称全局变量也称全局变量.幸运 考察静态局部变量的值考察静态局部变量的值#include#include void mainvoid main()()int int(int aint a);,;,;(;(;)(,();,();int int(int int)int int;3 3;2 2;();();3 3次调用函数次调用函数f f 后,后,c c 的值是的值是 9 9幸运第八章幸运 地址和指针的概念内存区的每一个字节有一个编号,这就是内存区的每一个字节有一个编号,这就是“地址地址”。如果在程序中定义了一个变量,在对程
44、序如果在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配内进行编译时,系统就会给这个变量分配内存单元。存单元。幸运一个变量的地址称为该变量的一个变量的地址称为该变量的“指针指针”。例如,地址例如,地址20002000是变量的指针。如果有是变量的指针。如果有一个变量专门用来存放另一变量的地址一个变量专门用来存放另一变量的地址(即指针),则它称为(即指针),则它称为“指针变量指针变量”。指针和指针变量的定义:指针和指针变量的定义:幸运 指针变量的引用指针变量的引用 注意:指针变量中只能存放地址(指针),不要将一个整数(或任何其他非地址类型的数据)赋给一个指针变量。例例 通过指针变量
45、访问整型变量通过指针变量访问整型变量#include#include voidvoidmain()main()int int;int int*p p;p p;/*把变量的地址赋给把变量的地址赋给 p p*/printf(“%d,%dn”,a,printf(“%d,%dn”,a,*p);p);幸运对对“”和和“*”运算符说明:运算符说明:如果已执行了语句如果已执行了语句 p p 那么:那么:那么那么 a a 和和 *p p 是相同的值是相同的值所以,如果所以,如果 a=3a=3;Printf(“%d,%d”,a,Printf(“%d,%d”,a,*p);p);显示是显示是 3 3,3 3 所以,
46、如果所以,如果 *p=6p=6;Printf(“%d,%d”,a,Printf(“%d,%d”,a,*p);p);显示是显示是 6 6,6 6幸运 指针变量作为函数参数指针变量作为函数参数例例10.3 对输入的两个整数按大小顺序输出对输入的两个整数按大小顺序输出#include#include void mainvoid main()()void swapvoid swap(int int*,int int*);int int,;,;int int*p p,*p p;scanfscanf(,);,);p p ;p2 p2;ifif()swapswap(p p ,p2 p2););printfp
47、rintf(,);,);幸运void swapvoid swap(int int *,int int *)int tempint temp;temptemp*1 1;*;*temptemp;幸运下面的函数下面的函数:void swapvoid swap(int aint a,int bint b)int tempint temp;temptempa a;a=ba=b;b=tempb=temp;/*只在函数中交换了局部变量只在函数中交换了局部变量 */同样不可用函数:同样不可用函数:void swapvoid swap(int int *p p,int bint b)或或 void swapvo
48、id swap(int aint a,int int *p p)只能用函数只能用函数 void swapvoid swap(int int *p1p1,int int *p2p2)处理主调用函数中的变量处理主调用函数中的变量幸运定义一个指向数组元素的指针变量的方法定义一个指向数组元素的指针变量的方法例如:例如:int aint a1010,*p p;p=a;(ap=a;(a是数组的首地址是数组的首地址,注意注意a a前没有地址符前没有地址符)或或 p=&a0;p=&a0;虽然虽然a a和和p p都是地址都是地址,它们是不同的它们是不同的:a a 是数组的首地址是数组的首地址,一旦由系统分配一旦
49、由系统分配,就是一个固定的值就是一个固定的值;而而p p是指针变量是指针变量,是可以改变的是可以改变的.所以所以 a+a+是错误的是错误的,而而p+p+是正确的是正确的.指向数组元素的指针指向数组元素的指针幸运10.10.通过指针引用数组元素通过指针引用数组元素如果如果 int a6,int a6,*p=a;p=a;引用一个数组元素,可以用:引用一个数组元素,可以用:()()下标法,如下标法,如aiai形式;形式;()()地址或指针法,如地址或指针法,如*(a+i)(a+i)或或*(p+i)(p+i)注意注意:a0-a5:a0-a5合法合法,a6,a6非法非法;*(a)-(a)-*(a+5)(
50、a+5)合法合法,*(a+6)(a+6)非法非法;*(p)-(p)-*(p+5)(p+5)合法合法,*(p+6)(p+6)非法非法;幸运 字符串与指针字符串的表示形式字符串的表示形式 例例 定义一个字符数组,对它初始化,定义一个字符数组,对它初始化,然后输出该字符串然后输出该字符串#include#include void mainvoid main()()char char *s sabcdefgabcdefg;printfprintf(%nn,s s););输出输出 abcdefgabcdefg(1)用字符数组存放一个字符串,然后输出该字符串。用字符数组存放一个字符串,然后输出该字符串。幸