《C语言三种循环语句(共57页).docx》由会员分享,可在线阅读,更多相关《C语言三种循环语句(共57页).docx(57页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上三种基本的循环语句: for语句、while语句和do-while语句。一、循环语句(一)、for循环 它的一般形式为:for(;)语句;初始化总是一个赋值语句,它用来给循环控制变量赋初值;条件表达式是一个关系表达式,它决定什么时候退出循环;增量定义循环控制变量每循环一次后按什么方式变化。这三个部分之间用;分开。例如:for(i=1;i10时,结束循环。注意: (1).for循环中语句可以为语句体,但要用和将参加循环的语句括起来。(2).for循环中的初始化、条件表达式和增量都是选择项,即可以缺省,但;不能缺省。省略了初始化,表示不对循环控制变量赋初值。省略了条件表达
2、式,则不做其它处理时便成为死循环。省略了增量,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。(3).for循环可以有多层嵌套。例如:for(;) 语句;for(i=1;i+=2) 语句;for(j=5;) 语句;这些for循环语句都是正确的。main() int i,j;printf(i jn);for(i=0;i2;i+)for(j=0;j3;j+)printf(%d %dn,i,j); 输出结果为: i j0 00 10 21 01 11 2用for循环求1+2+100的和:main()int sn=0,i;for(i=1;i=100;i+)sn+=i; /*1+
3、2+100*/printf(%dn,sn);从程序可以看出,使用循环语句可以大大简化代码。(二)、while循环 它的一般形式为: while(条件)语句;while循环表示当条件为真时,便执行语句。直到条件为假才结束循环。并继续执行循环程序外的后续语句。例如:#include stdio.hmain() char c; c=0; /*初始化c*/while(c!=n) /*回车结束循环*/c=getche(); /*带回显的从键盘接收字符*/ 上例中,while循环是以检查c是否为回车符开始,因其事先被初始化为空,所以条件为真,进入循环等待键盘输入字符;一旦输入回车,则c=n,条件为假,循环
4、便告结束。与for循环一样,while循环总是在循环的头部检验条件,这就意味着循环可能什么也不执行就退出。 注意: (1).在while循环体内也允许空语句。 例如: while(c=getche()!=n); 这个循环直到键入回车为止。 (2).可以有多层循环嵌套。 (3).语句可以是语句体, 此时必须用和括起来。用while循环求1+2+100的和:main()int sn=0,i=0;while(+i=100)sn+=i; /*求1+2+100*/printf(%dn,sn);(三)、do-while循环 它的一般格式为:do语句块;while(条件);这个循环与while循环的不同在于
5、:它先执行循环中的语句,然后再判断条件是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。同样当有许多语句参加循环时,要用和把它们括起来。用do-while循环求1+2+100的和:main()int sn=0,i=1;dosn+=i; /*求1+2+100*/while(+i=100);printf(%dn,sn);从上面三个程序看出,使用for,while和do-while求解同样的问题,基本思路都差不多,只是在第一次计算时,注意初值。二、循环控制(一)、break语句break语句通常用在循环语句和开关语句中。当break用于开关语句sw
6、itch中时,可使程序跳出switch而执行switch以后的语句;如果没有break语句,则将成为一个死循环而无法退出。break在switch中的用法已在前面介绍开关语句时的例子中碰到,这里不再举例。 当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句联在一起。即满足条件时便跳出循环。例如:main()int sn=0,i;for(i=1;i=100;i+)if(i=51) break; /*如果i等于51,则跳出循环*/sn+=i; /*1+2+50*/printf(%dn,sn);可以看出,最终的
7、结果是1+2+50。因为在i等于51的时候,就跳出循环了。自己写写怎样在while和do-while循环中增加break语句。注意: 1. break语句对if-else的条件语句不起作用。2. 在多层循环中,一个break语句只向外跳一层。例如:main() int i,j;printf(i jn);for(i=0;i2;i+)for(j=0;j3;j+)if(j=2) break;printf(%d %dn,i,j); 输出结果为: i j0 00 11 01 1当i=0,j=2时,执行break语句,跳出到外层的循环,i变为1。(二)、continue语句continue语句的作用是跳过
8、循环本中剩余的语句而强行执行下一次循环。continue语句只用在for、while、do-while等循环体中, 常与if条件语句一起使用,用来加速循环。例如:main()int sn=0,i;for(i=1;i=100;i+)if(i=51) continue; /*如果i等于51,则结束本次循环*/sn+=i; /*1+2+50+52+100*/printf(%dn,sn);从程序中可以看出,continue语句只是当前的值没有执行,也就是说当前的值跳过去了,接着执行下次循环。main() int i,j;printf(i jn);for(i=0;i2;i+)for(j=0;j3;j+)
9、if(j=1) continue;printf(%d %dn,i,j); 输出结果为: i j0 00 21 01 2(三)、goto语句goto语句是一种无条件转移语句,与BASIC中的goto语句相似。goto语句的使用格式为: goto 标号; 其中标号是Turbo C 2.0中一个有效的标识符,这个标识符加上一个:一起出现在函数内某处,执行goto语句后,程序将跳转到该标号处并执行其后的语句。标号既然是一个标识符,也就要满足标识符的命名规则。另外标号必须与goto语句同处于一个函数中,但可以不在一个循环层中。通常goto语句与if条件语句连用,当满足某一条件时,程序跳到标号处运行。go
10、to语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时,用goto语句则比较合理。main() int sn=0,i;for(i=1;i=100;i+)if(i=51) goto loop; /*如果i等于51,则跳出循环*/sn+=i; /*1+2+50*/loop: ;printf(%dn,sn);可以看出,这儿的goto语句和break作用很类似。这儿的loop: ;printf(%dn,sn);也可以写成loop: printf(%dn,sn);main()int sn=0,i;for(i=1;i=100;i+)if(i=51) goto loop; /*如果i等于
11、51,则跳出本次循环*/sn+=i; /*1+2+50+52+100*/loop: ;printf(%dn,sn);可以看出这儿的loop语句和continue的作用类似。但是某些情况下又必须使用goto语句,否则会让程序大大臃肿。如:main() int i,j,k;printf(i j kn);for(i=0;i2;i+)for(j=0;j3;j+)for(k=0;k3;k+)if(k=2) goto loop;printf(%d %d %dn,i,j,k);loop: ; 输出结果为: i j k0 0 00 0 1如果不使用goto语句,而使用break,continue语句,应该这样
12、main() int i,j,k;printf(i jn);for(i=0;i2;i+)for(j=0;j3;j+)for(k=0;k0;i-)if(num1%i=0&num2%i=0) break;printf(最大公约数为%dn,i);2.求1!+2!+n!(n10)main()int n,i;long temp=1,sn=0; /*从9!以后,所得的值就超过了int范围*/scanf(%d,&n);for(i=1;i=n;i+)temp*=i;sn+=temp; /*如果没有这一步,求的就是n!*/printf(%ldn,sn);那么想想,如果求1!+3!+5!+n!应该怎么办?3.判断
13、一个整数是不是素数(素数就是只能被本身和1整除的数)。#include math.hmain()int num,i,flag=0;scanf(%d,&num);for(i=2;iflag=0; /*标志变量复位*/if(num%i=0)flag=1;break;if(flag=0) printf(是素数n);else printf(不是素数n); 可以说,在所有的C语言书上,都有判断素数的例题。它的编程思想是:把一个变量作为标志变量,用来标志是不是素数;循环体是从2到sqrt(num),因为如果一个数不是素数的话,一定能分解成num=num1*num2,它们中的最小值一定小于sqrt(num)
14、,所以循环的时候只要到sqrt(num)就可以了。同时要注意变量复位的问题。二、递归递归,是函数实现的一个很重要的环节,很多程序中都或多或少的使用了递归函数。递归的意思就是函数自己调用自己本身,或者在自己函数调用的下级函数中调用自己。递归之所以能实现,是因为函数的每个执行过程都在栈中有自己的形参和局部变量的拷贝,这些拷贝和函数的其他执行过程毫不相干。这种机制是当代大多数程序设计语言实现子程序结构的基础,是使得递归成为可能。假定某个调用函数调用了一个被调用函数,再假定被调用函数又反过来调用了调用函数。这第二个调用就被称为调用函数的递归,因为它发生在调用函数的当前执行过程运行完毕之前。而且,因为这
15、个原先的调用函数、现在的被调用函数在栈中较低的位置有它独立的一组参数和自变量,原先的参数和变量将不受影响,所以递归能正常工作。程序遍历执行这些函数的过程就被称为递归下降。程序员需保证递归函数不会随意改变静态变量和全局变量的值,以避免在递归下降过程中的上层函数出错。程序员还必须确保有一个终止条件来结束递归下降过程,并且返回到顶层。例如这样的程序就是递归:void a(int);main()int num=5;a(num);void a(int num)if(num=0) return;printf(%d,num);a(-num);在函数a()里面又调用了自己,也就是自己调用本身,这样就是递归。那
16、么有些人可能要想,这不是死循环吗?所以在递归函数中,一定要有return语句,没有return语句的递归函数是死循环。我们分析上面的例子,先调用a(5),然后输出5,再在函数中调用本身a(4),接着回到函数起点,输出4,一直到调用a(0),这时发现已经满足if条件,不在调用而是返回了,所以这个递归一共进行了5次。如果没有这个return,肯定是死循环的。虽然递归不难理解,但是很多在在使用递归函数的时候,问题多多。这里面一般有两个原因:一是如何往下递归,也就是不知道怎么取一个变量递归下去;二是不知道怎么终止递归,经常弄个死循环出来。下面看几个例子:1.求1+2+100的和先分析一下。第一递归变量
17、的问题,从题目上看应该取1,2,100这些变量的值作为递归的条件;第二就是如何终止的问题,从题目上看应该是当数为100的时候就不能往下加了。那么我们试着写一下程序。int add(int);main()int num=1,sn;sn=add(num);printf(%dn,sn);getch();int add(int num)static int sn;sn+=num;if(num=100) return sn;add(+num);分析一下程序:前调用add(1),然后在子函数中把这个1加到sn上面。接着调用add(2),再把sn加2上来。这样一直到100,到了100的时候,先加上来,然后发
18、现满足了if条件,这时返回sn的值,也就是1+2+100的值了。这里有一个问题一定要注意,就是static int sn; 有些人就不明白,为什么要使用static类型修饰符,为什么不使用int sn=0;?如果使用int sn=0;这样的语句,在每次调用函数add()的时候,sn的值都是赋值为0,也就是第一步虽然加了1上来,可是第二次调用的时候,sn又回到了0。我们前面说了,static能保证本次初始化的值是上次执行后的值,这样也就保证了前面想加的结果不会丢失。如果你修改为int sn=0,最后结果一定是最后的100这个值而不是5050。2.求数列s(n)=s(n-1)+s(n-2)的第n项
19、。其中s(1)=s(2)=1。可以看出,终止条件一定是s(1)=s(2)=1。递归下降的参数一定是n。int a(int);main()int n,s;scanf(%d,&n);s=a(n);printf(%dn,s);getch();int a(int n)if(n3) return 1;return a(n-1)+a(n-2);这个题目主要说明的是,在函数中,不一定只有一个return语句,可以有很多,但是每次对归的时候只有一个起作用。题目不难理解,这儿不分析了。说了这些递归,其实它和函数的调用没有大的区别,主要就是一个终止条件要选好。递归函数很多时候都能用循环来处理。main()int
20、n=20,array20;int i;for(i=0;iN;I+)if(i2) arrayi=1;else arrayi=arrayi-1+arrayi-2;printf(%dn,array19);getch();上面的程序就是实现一模一样的功能的。但是它有一个缺陷,就是n的值不是通过键盘输入来得到。如果想通过键盘来得到n,可以这样:main()int n,i;int s1=1,s2=1,tempscanf(%d,&n);for(i=3;i . 自左向右! + - + - * & sizeof 自右向左* / % 自左向右+ - 自左向右 自左向右 = 自左向右= != 自左向右& 自左向右
21、自左向右| 自左向右& 自左向右| 自左向右?: 自右向左= += -= *= /= %= &= = |= = 自右向左(最低) , 自左向右一个表达式的返回值都可以用来判断真假,除非没有任何返回值的void型和返回无法判断真假的结构。当表达式的值不等于0时,它就是“真”,否则就是假。一样个表达式可以包含其他表达式和运算符,并且基于整个表达式的运算结果可以得到一个真/假的条件值。因此,当一个表达式在程序中被用于检验其真/假的值时,就称为一个条件。一、if语句if(表达式) 语句1;如果表达式的值为非0,则执行语句1,否则跳过语句继续执行下面的语句。如果语句1有多于一条语句要执行时, 必须使用和
22、 把这些语句包括在其中, 此时条件语句形式为: if(表达式)语句体1;例如:if(x=0) y=x;if(a|b&c) z=a+b;c+=z;二、if-else语句除了可以指定在条件为真时执行某些语句外,还可以在条件为假时执行另外一段代码。在C语句中利用else语句来达到这个目的。if(表达式) 语句1;else 语句2;同样,当语句1或语句2是多于一个语句时,需要用把语句括起来。例如:if(x=0) y=x;else y=-x;三、if-else if-else结构。if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; . . . else
23、 语句n; 这种结构是从上到下逐个对条件进行判断,一旦发现条件满点足就执行与它有关的语句, 并跳过其它剩余阶梯;若没有一个条件满足,则执行最后一个else 语句n。最后这个else常起着缺省条件的作用。同样,如果每一个条件中有多于一条语句要执行时,必须使用和把这些语句包括在其中。条件语句可以嵌套,这种情况经常碰到,但条件嵌套语句容易出错,其原因主要是不知道哪个if对应哪个else。例如: if(x20|x-10) if(yx) printf(Good); else printf(Bad); 对于上述情况, Turbo C2.0规定: else语句与最近的一个if语句匹配, 上例中的else与i
24、f(yx)相匹配。为了使else与if(x20|x20|x-10) if(yx) printf(Good); else printf(Bad); 下面举几个例子:1.输入一个数,如果大于0,输出plus;如果是负数,输出negative;如果正好是0,则输出zero。main()float num;scanf(%f,&f);if(num0)printf(plusn);else if(num=0) y=x;else y=-x;printf(%fn,y);程序比较简单,这儿就不分析了。其实Trubo C 2.0把一些常用的功能都写好了,我们只需要使用就可。例如求绝对值的功能在C的库里面就有。看下面
25、的:#include math.hmain()float x,y;scanf(%f,&x);y=fabs(x); /*求x的绝对值,然后赋值给y*/printf(%fn,y);这个程序和上面的程序完成的功能是一模一样的,都是求绝对值。可以看出,用下面这个方法比上面就要好一些。由于fabs()是一个函数,系统自带的,所以在使用它的时候,我们必须把它所在的库文件math.h包含都程序中,即程序最前面一行。类似的还有求开方sqrt(),求指数幂exp()等等,这些与数学方面有关的函数都在math.h里面。具体哪些有哪些没有,在什么库里面,可以查看一些手册。3.输入x,输出y,x和y满足关系:x-5
26、y=x;-5=x1 y=2*x+5;1=x=4 y=3*x-2;程序如下:main()float x,y;scanf(%f,&x);if(x-5)y=x;else if(-5=x&x1)y=2*x+5;else if(1=x&x4)y=x+6;elsey=3*x-2;printf(%fn,y);这里要说明两点:(1).-5=x&x1不能写成-5=x1;1=x&x4也不能写成1=x=y&x=z)printf(%ft,x);if(y=z) printf(%ft%fn,y,z);else printf(%ft%fn,z,y);else if(y=x&y=z)printf(%ft,y);if(x=z)
27、 printf(%ft%fn,x,z);else printf(%ft%fn,z,x);elseprintf(%ft,z);if(x=y) printf(%ft%fn,x,y);else printf(%ft%fn,y,x);说明:这是一个典型的if语句嵌套结构,如果不使用括号,那么if和else的对应关系就乱了。四、switch-case语句在编写程序时, 经常会碰到按不同情况分转的多路问题, 这时可用嵌套if -else-if语句来实现, 但if-else-if语句使用不方便, 并且容易出错。对这种情况, Turbo C2.0提供了一个开关语句。开关语句格式为: switch(变量) ca
28、se 常量1: 语句1或空; case 常量2: 语句2或空; . . . case 常量n: 语句n或空; default: 语句n+1或空; 执行switch开关语句时,将变量逐个与case后的常量进行比较,若与其中一个相等,则执行该常量下的语句,若不与任何一个常量相等,则执行default后面的语句。注意: 1.switch中变量可以是数值,也可以是字符,但必须是整数。2.可以省略一些case和default。3.每个case或default后的语句可以是语句体,但不需要使用和括起来。例如:main()int x,y;scanf(%d,&x);witch(x)case 1:y=x+1;b
29、reak; /*退出开关语句,遇到break才退出*/case 4:y=2*x+1;break;default:y=x-;break;printf(%dn,y);从上面的例子可以看出,用开关语句编的程序一定可以用if语句做。那么在什么情况下需要用switch语句呢?一般在出现比较整的情况下或者能转化成比较整数的情况下使用。看下面的例子:例子:一个学生的成绩分成五等,超过90分的为A,80-89的为B,70-79为C,60-69为D,60分以下为E。现在输入一个学生的成绩,输出他的等级。(1).用if语句main()float num;char grade;scanf(%d,&num);if(n
30、um=90) grade=A;else if(num=80&num=70&num=60&num69) grade=D;else grade=E;printf(%c,grade);(2).用switch语句main()int num;char grade;scanf(%d,&num);num/=10;switch(num)case 10:case 9:grade=A;break;case 8:grade=B;break;case 7:grade=C;break;case 6:grade=D;break;default:grade=E;break;printf(%c,grade);说明一点,并不是
31、每个case里面有都语句,有时侯里面是空的,就好象这一题。switch语句执行的顺序是从第一case判断,如果正确就往下执行,直到break;如果不正确,就执行下一个case。所以在这里,当成绩是100分时,执行case 10:然后往下执行,grade=A;break;退出。想想看,这里为什么要用num/=10;?假设当程序中有浮点数时怎么办呢?前面我们说的都是无参数无返回值的函数,实际程序中,我们经常使用到带参数有返回值的函数。一、函数参数传递1.形式参数和实际参数函数的调用值把一些表达式作为参数传递给函数。函数定义中的参数是形式参数,函数的调用者提供给函数的参数叫实际参数。在函数调用之前,
32、实际参数的值将被拷贝到这些形式参数中。2.参数传递先看一个例子:void a(int); /*注意函数声明的形式*/main()int num;scanf(%d,&num);a(num); /*注意调用形式*/void a(int num_back) /*注意定义形式*/printf(%dn,num_back);在主函数中,先定义一个变量,然后输入一个值,在a()这个函数中输出。当程序运行a(num);这一步时,把num的值赋值给num_back,在运行程序过程中,把实际参数的值传给形式参数,这就是函数参数的传递。形参和实参可能不只一个,如果多于一个时,函数声明、调用、定义的形式都要一一对应,
33、不仅个数要对应,参数的数据类型也要对应。void a(int,float);main()int num1;float num2;scanf(%d,&num1);scanf(%f,&num2);a(num1,num2);void a(int num1_back,float num2_back)printf(%d,%fn,num1_back,num2_back);上面的例子中,函数有两个参数,一个是整型,一个是浮点型,那么在声明、调用、定义的时候,不仅个数要一样,类型也要对应。如果不对应,有可能使的编译错误,即使没错误,也有可能让数据传递过程中出现错误。再看一个例子:void a(int);mai
34、n()int num;scanf(%d,&num);a(num);void a(int num)printf(%dn,num);看上面的例子,形式参数和实际参数的标识符都是num,程序把实际参数num的值传递给形式参数num。有些人可能就不明白了,既然两个都是num,为什么还要传递呢?干脆这样不就行了吗:void a();main()int num;scanf(%d,&num);a();void a()printf(%dn,num);其实不然,这就要涉及到标识符作用域的问题。作用域的意思就是说,哪些变量在哪些范围内有效。一个标识符在一个语句块中声明,那么这个标识符仅在当前和更低的语句块中可见,
35、在函数外部的其实地方不可见,其他地方同名的标识符不受影响,后面我们会系统讲解作用域的问题。在这儿你就要知道两个同名的变量在不同的函数中是互不干扰的。前面将的都是变量与变量之间的值传递,其实函数也可以传递数组之间的值。看下面的例子:void a(int );main()int array5,i;for(i=0;i5;i+) scanf(%d,&arrayi);a(array);void a(int array)int i;for(i=0;i5;i+) printf(%dt,arrayi);printf(n);这就是数组之间的值传递。注意他们的声明和定义形式,和变量参数传递有什么区别?有了后面的就
36、表明传递的是一个数组。其中在定义的时候,也可以写成void a(int array5);想想,如果我们写成了int array4会有什么情况发生?目前我们只学了数组和变量,以后还会知道指针、结构,到那是,函数也可以传递它们之间的值。二、函数值的返回其实我们也可以把函数当作一个变量来看,既然是变量,那一定也可以有类型。还举最前面的例子,现在要求在main()函数里输入一个整数作为正方形的边长,在子函数里求正方形的面积,然后再在主函数里输出这个面积。我们前面的程序都是在子函数里输出的,现在要求在主函数里输出,这就需要把算好的值返回回来。先看例子:int a(int); /*声明函数*/main()
37、int num,area;scanf(%d,&num);area=a(num); /*调用时的形式*/printf(%d,area);int a(int num)int area_back;area_back=num*num;return area_back; /*返回一个值*/和前面的程序有几点不同:(1).声明函数类型时,不是void,而是int。这是由于最后要求的面积是整型的,所以声明函数的返回值类型是整型。(2).return语句 它的意思就是返回一个值。在C语言中,return一定是在函数的最后一行。(3).调用函数的时候,由于函数有一个返回值,所以必须要用变量接受这个返回值(不是绝
38、对的),如果我们不用一个变量接受这个值,函数还照样返回,但是返回的这个值没有使用。上面的例子运行过程是这样的,先把实参的值传递给形参,然后在子函数里计算面积得到area_back,然后返回这个面积到主函数,也就是把area_back赋值给area,最后输出。前面说了,返回值有时不一定非要用一个变量来接受,我们可以把上面的程序简化为:int a(int);main()int num;scanf(%d,&num);printf(%d,a(num); /*函数调用放在这儿*/int a(int num)int area_back;area_back=num*num;return area_back;
39、这样函数返回的值就可以直接放到输出缓冲区直接输出了。还可以再简化为:int a(int);main()int num;scanf(%d,&num);printf(%d,a(num);int a(int num)return num*num; /*直接在这儿返回*/对于函数而言,一个函数只能返回一个值,如果想返回一组数值,就要使用数组或者结构或者指针。其实对于这些,还是返回一个值,只是这个值是一个地址而已。但是对于数组的返回有和变量不同,因为数组和地址是联系在一起的。看一个例子:void a(int );main()int array5=1,2,3,4,5,i;a(array);for(i=0;
40、i5;i+) printf(%d,arrayi);void a(int array)int i;for(i=0;i5;i+) arrayi+;看看这个程序,好象函数没有返回值,但是函数的功能的确实现了,在主函数当中输出的值的确都各加了1上来。这就是因为数组和变量不同的缘故,在后面讲指针的时候再详细说明。下面看一个实际例子,加深对函数的理解:用函数实现,判断一个整数是不是素数?在主函数里输入输出,子函数里判断。#include math.hint judge(int);main()int num,result;scanf(%d,&num);result=judge(num);if(result=
41、1) printf(yesn);else printf(non);judge(int num)int i,flag=1;for(i=2;i=sqrt(num);i+)if(num%i=0)flag=0;break;return flag;可以看出,函数的功能就是为了让程序看起来有条理,一个函数实现一个特定的功能。如果我们还和以前那样,把所有代码都放在main()函数,好象程序就显的臃肿了。而且函数有一个显著的好处就是很方便的使用。这里面的judge()函数判断一个数是不是素数,如果我们以后还有判断某个数是不是素数,就可以直接使用这个函数了。我们这样,把下面的代码:judge(int num)i
42、nt i,flag=1;for(i=2;i=sqrt(num);i+)if(num%i=0)flag=0;break;return flag;保存为judge.h文件,放到include目录里面。以后就可以直接使用这个函数了,就好象直接使用abs(),sqrt()这些函数一样方便。#include math.h /*必须要有它*/#include judge.hmain()int num,result;scanf(%d,&num);result=judge(num);if(result=1) printf(yesn);else printf(non);看上面的例子,我们在程序中直接使用了函数judge(),这就是我们自己编写的第一个所谓的库函数。但是程序的第一行要包含math.h文件,这是因为在judge.h里面使用了sqrt()函数,所以为了方便,我们可以把math.h放到judge.h里面,也就是在judge.h文件的第一行加上include math.h