C语言中常见的功能函数.docx

上传人:罗晋 文档编号:6111019 上传时间:2020-09-11 格式:DOCX 页数:10 大小:31.24KB
返回 下载 相关 举报
C语言中常见的功能函数.docx_第1页
第1页 / 共10页
C语言中常见的功能函数.docx_第2页
第2页 / 共10页
C语言中常见的功能函数.docx_第3页
第3页 / 共10页
C语言中常见的功能函数.docx_第4页
第4页 / 共10页
C语言中常见的功能函数.docx_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《C语言中常见的功能函数.docx》由会员分享,可在线阅读,更多相关《C语言中常见的功能函数.docx(10页珍藏版)》请在三一文库上搜索。

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

2、写字符转换成大写字符根据实参传给形参的字母,判断是否是小写字母, 如果是小写字母,则转换成大写字母,否则不进行转换,函数返回转换后或原来的字符。本函数仿照 toupper() 库函数的功能编写( toupper(c) 是将变量 c 字母转换成大写字母,如果不是小写字母不转换) 。char toupper1(char ch)if(ch= a&ch= A&ch=a&ch= 0&ch= 9)return 1;elsereturn 0;5、 根据学生成绩,返回其等级charfun(float cj)charc;switch(int)cj/10)case10:.case9:c=A;break;case8

3、:c=B;break;case7:c=C;break;case6:c=D;break;default:c=Ereturn c;6、 求 1+2+ .+n(1)用循环intsum(int n)int i;for(i=1;i=n;i+)s+=i;(2)使用递归longsum(int n)if(n=1)return 1;else return jiec(n-1)+n;根据本题扩展:求 s=1+(1+2)+ (1+2+3)+ .+(1+2+ +n)void main()long s=0,s1=0; int i,n;scanf(“%d”,&n);for(i=1;i=n;i+)s1+=i; /* 计算出每

4、一项的值,通过累加得到*/s+=s1;/* 将每一项的值累加到结果中去*/printf( “s=%ld ”,s);7、 求 n!(1)用循环longjiec(int n)int i;long s=1;for(i=1; i=n; i+)s*=i;return s;(2)使用递归longjiec(int n)if(n=1)return 1;else return jiec(n-1)*n;根据本题扩展:.求 s=1!+2!+ 3!+ .+n! n 的值最好不要太大void main()long s=0,s1=1; int i,n;scanf(“%d”,&n);/* 输入 n 的值不要太大,否则结果l

5、ong 型存不下,输出时会输出一个负数*/for(i=1;i=n;i+)s1*=i; /* 计算出每一项的值,通过累乘得到*/s+=s1;/* 将每一项的值累加到结果中去*/printf( “s=%ld ”,s);8、 求某整数的因子之和intinz(int n)/* 计算数 n 的因子之和(包括1 和 n 本身),函数返回因子之和*/int s=0,i;for(i=1;i=n; i+) /* 通过本循环, 将 1-n 的数一个一个拿来看是否能被 n 整除,如果是真因子的话,就不包括 1 和 n 本身 */if(n%i=0)s+=i;/* 一个数的因子,就是能被其整除的数*/return s;

6、9、 判断一个整数是否是素数int ss(int n)/* 如果是素数返回1,否则返回0*/int i;for(i=2; in/2; i+)if(n%i=0)return 0;return 1;10、求一个整数的反序数long fxs(long n)/* 函数返回反序数,形参需要原来的数*/long fan=0;while(n!=0)fan=fan*10+n%10;n/=10;return fan;11、判断一个数是否是回文数long hw(long n)/* 如果是回文数函数返回1,否则返回0*/long fan=0,m=n;while(n!=0)fan=fan*10+n%10;n/=10;

7、if(fan=m)return 1;else return 0;.12、判断一个数是否是水仙花数int sxh(long n)/* 判断任意位数的整数是否是水仙花数,是水仙花数返回1,不是返回0*/long g,i,s=0,m=n;while(n!=0)/* 通过本循环语句,将数n 从个位数字开始一个个位数的数字的立方累加到变量 s 中 */ g=n%10;s=g*g*g;n/=10;if(s=m)return 1;elsereturn 0;13、计算 x 的 y 次方本函数用于计算x 的 y 次方(x,y 为整型,函数返回值为long 型)。仿照库函数pow()( pow(x,y)是用于计算

8、x 的 y 次方的库函数,不过该函数的形参x,y 和返回值均为double 类型)编写。longpow1(int x,int y)long s=1; int i;for(i=1;i=y;i+)/* 将变量 x 的值累乘 y 次 */s*=x;/* 每次将上次累乘的结果再乘以x*/return s;14、计算 n 个 n( n 为一位十进制数)本函数用于计算n 个 n 的值,比如:333( 3 个 3), 4444( 4 个 4)。long mm(int n) /*n为一个十进制数字*/int i; long s=0;for(i=1;i=n;i+)s=s*10+n;return s;本函数可以应

9、用于这样的题目:求 s=1-1/22+1/333-1/4444+1/55555-1/666666 主函数可以写成:void main()double s=0; int i,sign=1;/*sign 用来处理每项的符号(正或负) */for(i=1; i=6; i+)s+=sign*1.0/mm(i); /*因为 mm() 函数返回的值是长整型,所以必须用1.0,而不能用1,因为整型除以整型,结果是整型*/sign=-sign; /* 每次变换一下sign 的符号(正或负) */这样的题目包括:求s=a+aa+aaa+aaaa+ aa.aa( n 个 a),a 和 n 都在 1-9 之间。lo

10、ng fun(int a,int n).long s=0,t=0;int i;for(i=1;i=n;i+) t=t*10+a;s+=t;return s;/* 或者 return(s); */15、求两个整数的最大公约数(1)辗转相除法intfun(int m,int n)int t,r;if(mn,如果 mn,则交换两个变量的值 */ r=m%n;while(r!=0)m=n; n=r;r=m%n;return n;/*n 为最大公约数*/(2)穷举法(按数学定义)intfun(int m,int n)/* 此方法可以求多个数的最大公约数*/inti,min,gys;if(mn)min=m

11、; /* 找出两个数中的最小数*/elsemin=n;for(i=1; imin; i+)if(m%i=0&n%i=0)gys=i;return gys;16、计算 Fibonacci 数列的第n 项本函数完成的功能:计算出该数列的第n 项的值,并返回。递归方法long fbnc(long n)if(n=1|n=2)return 1;else return fbnc(n-1)+fbnc(n-2); /*从第三项开始,后一项是前面两项之和*/17、数组的输入一维数值型数组的输入:void intput1(floata, int n) /*n为数组 a 中元素的个数,此函数以float 型数组为例

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

13、以float 型数组为例 */int i;for(i=0;in; i+)printf( “%10.2f ”,ai);二维数值型数组元素的输出:void output2(floata3, int n) /*n为数组 a 中元素的行数,此函数以float 型数组为例,形参定义时,如果是二维数组,则第二维(列)的数字不能少,比如本例中的3*/int i,j;for(i=0;in; i+)/* 表示行的外循环*/ for(j=0;jright)mid=(left+right)/2;if(amid=x)return mid;else if(amidx)left=mid;elseright=mid;ret

14、urn-1;20、冒泡排序/* 对存放在数组 a 中的 n 个数进行排序, (或者对从地址 a 开始的 n 个数进行排序) ,排序是从小到大) */void sort1(int a,int n)int i,j,t;for(i=0;in-1;i+)/* 排序趟数 */for(j=0;jaj+1)/* 从小到大排序,如果是从大到小排序,则将大于号改成小于号*/t=aj; aj=aj+1; aj+1=t; /* 不符合小到大的进行交换*/21、直接选择排序void sort1(int a,int n) /* 对以地址(指针) a 开始的 n 个数,按从小到大进行排序 */ int i,j,k,t;f

15、or(i=0;in-1;i+)/* 排序趟数 */k=i;for(j=i+1;jn-1-i; j+)if(ajak)k=j; /* 从小到大排序,如果是从大到小排序,则将大于号改成小于号*/if(k!=i)t=ai; ai=ak; ak=t; /* 如果找的极值不在下标为i ,则进行交换 */22、求字符串长度本函数是仿照库函数strlen() 的功能编写的。(1)常归方法intstrlen1(char s)/* 字符串第一个0 的下标就是字符串的长度*/int i;for(i=0;si!=0 ;i+);/* 循环体中只有一个空语句,即只有;,没有表达式,本循环退出时, si!= 0为假,即s

16、i= 0,则 i 就是字符 0 的下标 */return i;( 2)使用指针方法int strlen1(char s)char *p1,*p2;p1=s;for(p2=p1;*p2!= 0;p2+);/* 循环体中只有一个空语句,循环结束后,指针p2 指向 0这个字符 */return p2-p1;/* 两个指针相减即为字符串长度*/23、字符串拷贝本函数是仿照库函数strcpy() 的功能编写的。void strcpy1(chat s1,char s2)/* 将字符串s2 拷贝到字符串s1 中 */int i;for(i=0; s2i!=0;i+)s1i=s2i;s1i= 0; /* 因上

17、述循环没有将字符串结束标志0 拷贝到 s1 中,所以需要加一个字符串结束标志 0*/24、字符串连接本函数是仿照库函数strcat()的功能编写的。#include .void strcat1(char s1,char s2)/* 将字符串s2 连接到字符串s1 后面 */int i,len=strlen(s1);for(i=0; s2i!=0;i+)s1i+len=s2i;s1i+len= 0;/* 因上述循环没有将字符串结束标志 0 拷贝到 s1 中,所以需要加一个字符串结束标志 0*/25、字符串比较比较字符串s1 与 s2 的大小,如果s1 大于 s2 返回 1,如果 s1 小于 s2 返回 -1,否则返回0。intstrcmp1(char s1,char s2)int i;for(i=0; s1i!=0|&s2i!= 0;i+)/* 如果有一个字符串先到0,则用 0(ASCII 码为 0的字符)与另一个字符串进行比较,0 肯定小于任何其他字符*/if(s1is2i)return 1;elseif(s1i= 0&si= 9) /* 如果是数字字符,则进行转换 */ s=s*10+si- 0; /*si- 0是将数字字符转换成数字,比如: 5-0=5*/return(s);27、在字符串的指定位置插入指定的字符28、删除字符串中指定位置的字符.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1