C语言函数编程练习.doc_第1页
C语言函数编程练习.doc_第2页
C语言函数编程练习.doc_第3页
C语言函数编程练习.doc_第4页
C语言函数编程练习.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

函数编程练习1、编写两个函数,分别求最大公约数(greatest common divisor)和最小公倍数(least common multiple)。解:(1)函数原型与参数说明:最大公约数函数:int gcd(int a,int b)形参与函数类型含义int a第一个数int b第二个数int gcd()返回最大公约数最小公倍数函数:int lcm(int a,int b,int g)形参与函数类型含义int a第一个数int b第二个数int g两个数的最大公约数int gcd()返回最小公倍数(2)源程序:1.1主函数(main.c)#includevoid main()int gcd(int,int);int lcm(int,int,int);int m,n,g,l;scanf(%d,%d,&m,&n);g=gcd(m,n);l=lcm(m,n,g);printf(greatest common divisor:%dn,g);printf(least common multiple:%dn,l);1.2最大公约数函数(gcd.c)int gcd(int a,int b)int t,r;if(ab)t=a;a=b;b=t;while(b!=0)r=a%b;a=b;b=r;return(a);1.3最小公倍数函数(lcm.c)int lcm(int a,int b,int g)return(a*b/g);2、求方程ax2+bx+c=0的根,用三个函数分别求b2-4ac大于零、等于零和小于零时的根。解:(1)函数原型与参数说明:b2-4ac大于零函数:void f1(float a,float b)形参与函数类型含义float a方程参数afloat b方程参数bvoid f1 ()没有返回值,通过全局变量实现计算b2-4ac等于零函数:void f2(float a,float b)形参与函数类型含义float a方程参数afloat b方程参数bvoid f2 ()没有返回值,通过全局变量实现计算b2-4ac小于零函数:void f3(float a,float b)形参与函数类型含义float a方程参数afloat b方程参数bvoid f3 ()没有返回值,通过全局变量实现计算(2)全局变量说明全局变量含义float X1方程第一个根float X2方程第二个根float Discb2-4acfloat Re实部(real part)float Im虚部(imaginary part)(3)源程序:2.1主函数(main.c)#include#includefloat X1,X2,Disc,Re,Im;void main()void f1(float,float);void f2(float,float);void f3(float,float);float a,b,c;printf(please input a,b,cn);scanf(%f,%f,%f,&a,&b,&c);Disc=b*b-4*a*c;if(Disc0)f1(a,b);printf(x1=%f,x2=%fn,X1,X2);else if(fabs(Disc)1e-6)f2(a,b);printf(x1=x2=%fn,X1);elsef3(a,b);printf(x1=%f+%fi,x2=%f-%fin,Re,Im,Re,Im);2.2 b2-4ac大于零函数(f1.c)#includeextern float X1,X2,Disc;void f1(float a,float b)X1=(-b+sqrt(Disc)/(2*a);X2=(-b-sqrt(Disc)/(2*a);2.3 b2-4ac等于零函数(f2.c)extern float X1;void f2(float a,float b)X1=(-b)/(2*a);2.4 b2-4ac小于零函数(f3.c)#includeextern float Disc,Re,Im;void f3(float a,float b)Re=(-b)/(2*a);Im=sqrt(-Disc)/(2*a);3、编写一个判断素数(prime number)的函数。解:(1)函数原型与参数说明:求素数函数:int prime (int n)形参与函数类型含义int n一个整数int prime ()是素数返回1,不是素数返回0(2)源程序:3.1主函数(main.c)#includevoid main()int prime(int);int n;printf(please input an integer:n);scanf(%d,&n);if(prime(n)printf(%d is a prime.n,n);elseprintf(%d is not a prime.n,n);3.2求素数函数(prime.c)#includeint prime(int n)int i,flag=1;for(i=2;i=(int)sqrt(n);i+)if(n%i=0)flag=0;return(flag);4、编写函数,使得给定的一个二维数组(3*3)转置(transposition)。解:(1)函数原型与参数说明:二维数组转置函数:void trans (int a3)形参与函数类型含义int a3数组名void trans ()没有返回值,通过传址实现转置(2)源程序:4.1主函数(main.c)#include#includevoid main()void trans(int a3);int a33,i,j;for(i=0;i3;i+)for(j=0;j3;j+)aij=rand()%100;printf(array a:n);for(i=0;i3;i+)for(j=0;j3;j+)printf(%4d,aij);printf(n);trans(a);printf(transposed array a:n);for(i=0;i3;i+)for(j=0;j3;j+)printf(%4d,aij);printf(n);4.1二维数组转置函数(trans.c)void trans(int a3)int t,i,j;for(i=0;i3;i+)for(j=i+1;j3;j+)t=aij;aij=aji;aji=t;5、编写一个函数,使得输入的一个字符串反序存放。解:(1)函数原型与参数说明:反序函数:void inverse (char c)形参与函数类型含义char c字符数组名void inverse ()没有返回值,通过传址实现反序(2)源程序:5.1主函数(main.c)#include#includevoid main()void inverse(char c);char s100;printf(please input a string:n);gets(s);inverse(s);puts(s);5.2反序函数(inverse.c)#includevoid inverse(char c)int n,i,j;char t;n=strlen(c);for(i=0,j=n-1;in/2;i+,j-)t=ci;ci=cj;cj=t;6、编写一个函数,连接(connect)两个字符串。解:(1)函数原型与参数说明:字符串连接函数:void connect (char s1,char s2,char s)形参与函数类型含义char s1 字符串1char s2 字符串2char s 连接后的字符串void connect ()没有返回值,通过传址实现字符串连接(2)源程序:6.1主函数(main.c)#includevoid main()void connect (char s1,char s2,char s);char s1100,s2100,s100;printf(please input a string(1):n);gets(s1);printf(please input a string(2):n);gets(s2);connect(s1,s2,s);printf(the connected string:n);puts(s);6.2字符串连接函数(connect.c)void connect (char s1,char s2,char s)int i,j;for(i=0;s1i!=0;i+)si=s1i;for(j=0;s2j!=0;j+)si+j=s2j;si+j=0;7、编写一个函数,将一个字符串中的元音字母(vowel:a、e、i、o、u)复制到另一个字符串中。解:(1)函数原型与参数说明:元音字母复制函数:void vowel (char s1,char s2)形参与函数类型含义char s1 字符串char s2 元音字母字符串void vowel ()没有返回值,通过传址实现元音字母复制(2)源程序:7.1主函数(main.c)#includevoid main()void vowel (char s1,char s2);char s1100,s2100;printf(please input a string:n);gets(s1);vowel (s1,s2);printf(the vowel letters are:n);puts(s2);7.2元音字母复制函数(vowel.c)void vowel (char s1,char s2)int i,j;for(i=0,j=0;s1i!=0;i+)if( s1i=a|s1i=A|s1i=e|s1i=E|s1i=i|s1i=I|s1i=o|s1i=O|s1i=u|s1i=U )s2j=s1i;j+;s2j=0;8、编写函数,输入四个数字,要求输出四个数字字符,但每两个字符间加一个空格。解:(1)函数原型与参数说明:插入空格函数:void insert (char s)形参与函数类型含义char s 数字字符串void insert ()没有返回值,通过传址实现插入空格(2)源程序:8.1主函数(main.c)#includevoid main()void insert(char s);char s8;printf(please input 4 digits:n);gets(s);insert(s);puts(s);8.2插入空格函数(insert.c)#includevoid insert(char s)int i,n;n=strlen(s);s2*n=0;for(i=n-1;i=0;i-)si*2+1= ;si*2=si;9、编写一个函数,统一字符串中字母、数字、空格和其他字符的个数。解:(1)函数原型与参数说明:插入空格函数:void count (char s)形参与函数类型含义char s 字符串void insert ()没有返回值,通过传址实现统计信息(2)全局变量说明全局变量含义int Letter字母个数int Digit数字字符个数int Space空格个数int Others其他字符个数(3)源程序:9.1主函数(main.c)#includeint Letter,Digit,Space,Others;void main()void count(char s);char s100;printf(please input a string:n);gets(s);count(s);printf(letter:%d,digit:%d,space:%d,others:%dn,Letter,Digit,Space,Others);9.2插入空格函数(count.c)extern int Letter,Digit,Space,Others;void count(char s)int i;Letter=Digit=Space=Others=0;for(i=0;si!=0;i+)if(si=a & si=A & si=0 & si=9)Digit+;else if(si= )Space+;elseOthers+;10、编写一个函数,将字符串中最长的单词输出。11、编写一个函数,用“冒泡法”对输入的10个字符按由小到大顺序排序。解:(1)函数原型与参数说明:排序函数:void sort (char s)形参与函数类型含义char s 字符串void insert ()没有返回值,通过传址实现排序(2)源程序:11.1主函数(main.c)#include#define N 10void main()void sort(char s);char sN;printf(please input 10 characters:n);gets(s);sort(s);puts(s);11.2排序函数(sort.c)#include#define M 10void sort(char s)int i,j;char t;for(i=0;iM-1;i+)for(j=0;jsj+1)t=sj;sj=sj+1;sj+1=t;12、用牛顿迭代法求方程的根。方程为ax3+bx2+cx+d=0,系数由用户输入,求x在1附近的根。迭代公式:。(1)函数原型与参数说明:求根函数: float root(float a,float b,float c,float d)形参与函数类型含义float a方程参数afloat b方程参数bfloat c方程参数cfloat d方程参数dfloat root ()返回方程在x=1附近的根(2)源程序:12.1主函数(main.c)#includevoid main()float root(float a,float b,float c,float d);float a,b,c,d;printf(please input a,b,c,dn);scanf(%f,%f,%f,%f,&a,&b,&c,&d);printf(x=%10.5fn,root(a,b,c,d);12.2求根函数(root.c)#includefloat root(float a,float b,float c,float d)float x0,x1,f,f1;x1=1;dox0=x1;f=a*x0*x0*x0+b*x0*x0+c*x0+d;f1=3*a*x0*x0+2*b*x0+c;x1=x0-f/f1;while(fabs(x1-x0)1e-5);return(x1);13、输入10个同学5门课的成绩,分别用函数求:(1)每个学生的平均分;(2)每门课的平均分;(3)找出最高分所对应的学生和课程;(4)求出平均分方差。(1)函数原型与参数说明:函数原型含义void ave_stu()学生平均分函数,无返回值,通过全局数组实现void ave_cour()课程平均分函数,无返回值,通过全局数组实现int highest()最高分函数,返回最高分float s_var()方差函数,返回平均分方差(2)全局变量说明全局变量含义float score105学生每门课成绩float a_stu10学生平均分数组float a_cour5课程平均分数组int I最高分对应的同学int J最高分对应的课程(3)源程序:13.1主函数(main.c)#include#includeint score105;float a_stu10;float a_cour5;int I,J;void main()void ave_stu();void ave_cour();int highest();float s_var();int i,j,max;float var;for(i=0;i10;i+)for(j=0;j5;j+)scoreij=rand()%100;printf(score:n);for(i=0;i10;i+)for(j=0;j5;j+)printf(%4d,scoreij);printf(n);ave_stu();for(i=0;i10;i+)printf(第%d个学生的平均分:%fn,i+1,a_stui);ave_cour();for(j=0;j5;j+)printf(第%d门课程的平均分:%fn,j+1,a_courj);max=highest();printf(第%d个同学的第%d门课程为最高分:%dn,I+1,J+1,max);var=s_var();printf(平均分方差为:%fn,var);13.2学生平均分函数(ave_stu.c)extern int score105;extern float a_stu10;void ave_stu()int i,j,sum;for(i=0;i10;i+)sum=0;for(j=0;j5;j+)sum=sum+scoreij;a_stui=(float)sum/5;13.3课程平均分函数(ave_cour.c)extern int score105;extern float a_cour5;void ave_cour()int i,j,sum;for(j=0;j5;j+)sum=0;for(i=0;i10;i+)sum=sum+scoreij;a_courj=(float)sum/10;13.4

温馨提示

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

评论

0/150

提交评论