C语言中常见的功能函数_第1页
C语言中常见的功能函数_第2页
C语言中常见的功能函数_第3页
C语言中常见的功能函数_第4页
C语言中常见的功能函数_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言中常见的功能函数(应掌握的编程)1、 两个变量值的交换voidexchang(float*x,float*y)/*形参为两个变量的地铁(指针)*/floatz;z=*x;*x=*y;*y=z;voidmain()floata,b;scanf(“%f%f”,&a,&b);exchang(&a,&b);/*因为形参是指针,所以实参必须给变量的地址,不能给变量名*/printf(“a=%f,b=%f”,a,b);2、 判断一个整数的奇偶intjou(intn)/*如果是奇数返回1,否则返回0*/if(n%2=0)return0;return1;3、 小写字符转换

2、成大写字符根据实参传给形参的字母,判断是否是小写字母,如果是小写字母,则转换成大写字母,否则不进行转换,函数返回转换后或原来的字符。本函数仿照toupper()库函数的功能编写(toupper(c)是将变量c字母转换成大写字母,如果不是小写字母不转换)。chartoupper1(charch)if(ch>=a&&ch<=z)ch-=32;/*小写字母比对应的大写字母ASCII码值大32*/returnch;4、判断一个字符是否是字母(或数字)根据实参传给形参的字符,判断是否是字母(或数字)1,否则返回0。此函数是根据库函数isalpha()(或isdigit()来编

3、写的。int isalpha1(char ch) /*判断是否是字母*/if(ch>= A &&ch<=Z |ch>= a &&ch<= z ) return 1;else return 0;int isdigit1(char ch) /*判断是否是数字字符*/if(ch>= 0 &&ch<=9 ) return 1;elsereturn0;5、根据学生成绩,返回其等级charfun(floatcj)charc;switch(int)cj/10)case10:case9:c=A;break;case8:c=B;

4、break;case7:c=C;break;case6:c=D;break;default:c=Ereturnc;6、求1+2+-.+n1)用循环intsum(intn)inti;for(i=1;i<=n;i+)s+=i;(2)使用递归longsum(intn)if(n=1)return1;elsereturnjiec(n-1)+n;根据本题扩展:求s=1+(1+2)+(1+2+3)+.+(1+2+-+n)voidmain()longs=0,s1=0;inti,n;scanf(“%d”,&n);for(i=1;i<=n;i+)s1+=i;/*计算出每一项的值,通过累加得到*

5、/s+=s1;/*将每一项的值累加到结果中去*/printf(“s=%ld”,s);7、 求n!(1)用循环longjiec(intn)inti;longs=1;for(i=1;i<=n;i+)s*=i;returns;(2)使用递归longjiec(intn)if(n=1)return1;elsereturnjiec(n-1)*n;根据本题扩展:求s=1!+2!+3!+.+n!n的值最好不要太大voidmain()longs=0,s1=1;inti,n;scanf(“%d”,&n);/*输入n的值不要太大,否则结果long型存不下,输出时会输出一个负数*/for(i=1;i&l

6、t;=n;i+)s1*=i;/*计算出每一项的值,通过累乘得到*/s+=s1;/*将每一项的值累加到结果中去*/printf(“s=%ld”,s);8、 求某整数的因子之和intinz(intn)/*计算数n的因子之和(包括1和n本身),函数返回因子之和*/ints=0,i;for(i=1;i<=n;i+)/*通过本循环,将1-n的数一个一个拿来看是否能被n整除,如果是真因子的话,就不包括1和n本身*/if(n%i=0)s+=i;/*一个数的因子,就是能被其整除的数*/returns;9、 判断一个整数是否是素数intss(intn)/*如果是素数返回1,否则返回0*/inti;for(

7、i=2;i<n/2;i+)if(n%i=0)return0;return1;10、 求一个整数的反序数longfxs(longn)/*函数返回反序数,形参需要原来的数*/longfan=0;while(n!=0)fan=fan*10+n%10;n/=10;returnfan;11、 判断一个数是否是回文数longhw(longn)/*如果是回文数函数返回1,否则返回0*/longfan=0,m=n;while(n!=0)fan=fan*10+n%10;n/=10;if(fan=m)return1;elsereturn0;int sxh(long n) /*判断任意位数的整数是否是水仙花数

8、,是水仙花数返回1 ,不是返回0*/longg,i,s=0,m=n;while(n!=0)/*通过本循环语句,将数n从个位数字开始一个个位数的数字的立方累加到变量s中*/g=n%10;s=g*g*g;n/=10;if(s=m)return1;elsereturn0;13、 计算x的y次方本函数用于计算x的y次方(x,y为整型,函数返回值为long型)。仿照库函数pow()(pow(x,y)是用于计算x的y次方的库函数,不过该函数的形参x,y和返回值均为double类型)编写。longpow1(intx,inty)longs=1;inti;for(i=1;i<=y;i+)/*将变量x的值累

9、乘y次*/s*=x;/*每次将上次累乘的结果再乘以x*/returns;14、 计算n个n(n为一位十进制数)本函数用于计算n个n的值,比如:333(3个3),4444(4个4)。longmm(intn)/*n为一个十进制数字*/inti;longs=0;for(i=1;i<=n;i+)s=s*10+n;returns;本函数可以应用于这样的题目:求s=1-1/22+1/333-1/4444+1/55555-1/666666主函数可以写成:voidmain()doubles=0;inti,sign=1;/*sign用来处理每项的符号(正或负)*/for(i=1;i<=6;i+)s+

10、=sign*mm(i);/*因为mm()函数返回的值是长整型,所以必须用,而不能用1,因为整型除以整型,结果是整型*/sign=-sign;/*每次变换一下sign的符号(正或负)*/这样的题目包括:求s=a+aa+aaa+aaaa+aa.aa(n个a),a和n都在1-9之间。longfun(inta,intn)longs=0,t=0;inti;for(i=1;i<=n;i+)t=t*10+a;s+=t;returns;/*或者return(s);*/15、 求两个整数的最大公约数(1)辗转相除法intfun(intm,intn)intt,r;if(m<n) t=m;m=n;n=t

11、; /*保证m>n如果m<n则交换两个变量的值 */r=m%n;while(r!=0)m=n;n=r;r=m%n;returnn;/*n为最大公约数*/(2)穷举法(按数学定义)intfun(intm,intn)/*此方法可以求多个数的最大公约数*/inti,min,gys;if(m<n)min=m;/*找出两个数中的最小数*/elsemin=n;for(i=1;i<min;i+)if(m%i=0&&n%i=0)gys=i;returngys;16、 计算Fibonacci数列的第n项本函数完成的功能:计算出该数列的第n项的值,并返回。递归方法longf

12、bnc(longn)if(n=1|n=2)return1;elsereturnfbnc(n-1)+fbnc(n-2);/*从第三项开始,后一项是前面两项之和*/维数值型数组的输入:voidintput1(floata,intn)/*n为数组a中元素的个数,此函数以float型数组为例*/inti;for(i=0;i<n;i+)scanf(“%f”,&ai);二维数值型数组的输入:voidintput2(floata3,intn)/*n为数组a中元素的行数,此函数以float型数组为例,形参定义时,如果是二维数组,则第二维(列)的数字不能少,比如本例中的3*/inti,j;for(

13、i=0;i<n;i+)/*表示行的外循环*/for(j=0;j<3;j+)/*表示列的内循环*/scanf(“%f”,&aij);18、 数组的输出一维数值型数组元素的输出:voidoutput1(floata,intn)/*n为数组a中元素的个数,此函数以float型数组为例*/inti;for(i=0;i<n;i+)printf(“%10.2f”,ai);二维数值型数组元素的输出:voidoutput2(floata3,intn)/*n为数组a中元素的行数,此函数以float型数组为例,形参定义时,如果是二维数组,则第二维(列)的数字不能少,比如本例中的3*/in

14、ti,j;for(i=0;i<n;i+)/*表示行的外循环*/for(j=0;j<3;j+)printf(%11.2f ” ,aij);printf(“n”);/*按行输出,所以每一行输出后,输出一个换行符*/19、 二分查找/*在有序数组a中查找值为x的,找到返回找到的数下标,没找到返回-1*/intfind(floata,floatx,intn)/*有序数组a中的数是从小到大,n为数组中数的个数*/intleft,right,mid;right=0;left=n-1;while(left>right)mid=(left+right)/2;if(amid=x)returnm

15、id;elseif(amid>x)left=mid;elseright=mid;return-1;20、 冒泡排序/*对存放在数组a中的n个数进行排序,(或者对从地址a开始的n个数进行排序),排序是从小到大)*/voidsort1(inta,intn)inti,j,t;for(i=0;i<n-1;i+)/*排序趟数*/for(j=0;j<n-1-i;j+)if(aj>aj+1)/*从小到大排序,如果是从大到小排序,则将大于号改成小于号*/t=aj;aj=aj+1;aj+1=t;/*不符合小到大的进行交换*/21、直接选择排序void sort1(int a,int n)

16、 /*对以地址(指针)a开始的n个数,按从小到大进行排序*/inti,j,k,t;for(i=0;i<n-1;i+)/*排序趟数*/k=i;for(j=i+1;j<n-1-i;j+)if(aj<ak) k=j;/* 从小到大排序,如果是从大到小排序,则将大于号改成小于号*/if(k!=i)t=ai; ai=ak; ak=t; /*如果找的极值不在下标为i ,则进行交换 */22、求字符串长度本函数是仿照库函数strlen()的功能编写的。1)常归方法intstrlen1(chars)/*字符串第一个0的下标就是字符串的长度*/inti;for(i=0;si!=0;i+)/*循

17、环体中只有一个空语句,即只有;,没有表达式,本循环退出时, si!= 0 ,si=0,则i就是字符0的下标*/returni;intstrlen1(chars)char*p1,*p2;p1=s;for(p2=p1;*p2!=0;p2+);/*循环体中只有一个空语句,循环结束后,指针p2指向0这个字符*/returnp2-p1;/*两个指针相减即为字符串长度*/23、 字符串拷贝本函数是仿照库函数strcpy()的功能编写的。voidstrcpy1(chats1,chars2)/*将字符串s2拷贝到字符串s1中*/inti;for(i=0;s2i!=0;i+)s1i=s2i;s1i=0;/*因上

18、述循环没有将字符串结束标志0拷贝到s1中,所以需要加一个字符串结束标志0*/24、 字符串连接本函数是仿照库函数strcat()的功能编写的。#include<>voidstrcat1(chars1,chars2)/*将字符串s2连接到字符串s1后面*/inti,len=strlen(s1);for(i=0;s2i!=0;i+)s1i+len=s2i;s1i+len=0;/*因上述循环没有将字符串结束标志0拷贝到s1中,所以需要加一个字符串结束标志0*/否则返回 0。比较字符串s1与s2的大小,如果s1大于s2返回1,如果s1小于s2返回-1,intstrcmp1(chars1,chars2)inti;for(i=0;s1i!=0|&&s2i!=0;i+)/*如果有一个字符串先到0,则用0(ASCII码为0的字符)与另一个字符串进行比较,0肯定小于任何其他字符*/if(s1i>s2i)return1;elseif(s1i<s2i)return-1;if(s1i=0&&s2i=0)return0;/*说明两个字符串一样长,并且前

温馨提示

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

评论

0/150

提交评论