函数典型例题

函数应用程序设计

1、编写求圆的面积的函数,并调用该函数求出圆环的面积。

#define PI 3.14159
float area(float r)
{float s;
s=PI*r*r;
return(s);
}

main()
{float r1,r2,s;
scanf("%d%d",&r1,&r2);
s=area(r1)-area(r2);
printf("s=%f\n",s);
}

2A、编写求k!的函数,再调用该函数求10!并输出。

解法1:

float jc(int k)
{float p=1;
int i;
for(i=1;i<=k;i++)
p=p*i;
return(p);
}
main()
{float p;
p=jc(10);
printf("p=%f\n",p);
}

解法2:

float jc(int k)
{float p=1;
while(k>0)
{p=p*k;
k--;
}
return(p);
}
main()
{float p;
p=jc(10);
printf("p=%f\n",p);
}

2、编写求k!的函数,再调用该函数求1!+3!+5!+...+19!之和并输出。

float jc(int k)
{float p=1;
int i;
for(i=1;i<=k;i++)
p=p*i;
return(p);
}
main()
{float s=0;
int i;
for(i=1;i<=19;i+=2)
s=s+jc(i);
printf("s=%f\n",s);
}

3、编写求k!的函数,再调用该函数求C(m,n)=m!/(n! *(m-n)!)并输出。

float jc(int k)
{float p=1;
int i;
for(i=1;i<=k;i++)
p=p*i;
return(p);
}
main()
{float c;
int m,n;
scanf("%d%d",&m,&n);
c=jc(m)/jc(n)/jc(m-n); /*或c=jc(m)/(jc(n)*jc(m-n));*/
printf("c=%f\n",c);
}

4、编写判断素数的函数,再调用该函数判断1937是否是素数。

int isp(int m)
{int i;
for(i=2;i<=m-1;i++)
{if(m%i==0)
return(0); /*能除尽,不是素数,返回0*/
}
return(1); /*不能除尽,是素数,返回1*/
}
main()
{if(isp(1973)!=0)
printf("It's a prime number.\n");
else
printf("It's not a prime number.\n");
}

5、编写判断素数的函数,再调用该函数求出1000以内的所有素数。

int isp(int m)
{int i;
for(i=2;i<=m-1;i++)
{if(m%i==0)
return(0); /*能除尽,不是素数,返回0*/
}
return(1); /*不能除尽,是素数,返回1*/
}
main()
{int i;
for(i=2;i<=1000;i++)
{if(isp(i)!=0)
printf("%d,",i);
}
printf("\n");
}

6、编写判断素数的函数,调用该函数求出1000以内的所有素数,存入数组中并输出。

int isp(int m)
{int i;
for(i=2;i<=m-1;i++)
{if(m%i==0)
return(0); /*能除尽,不是素数,返回0*/
}
return(1); /*不能除尽,是素数,返回1*/
}
main()
{int a[500],i,n=0;
for(i=2;i<=1000;i++)
{if(isp(i)!=0)
{a[n]=i;
n++;
printf("%d,",i); /*或printf("%d,",a[n]);*/
}
}
printf("\n");
}

7、编写判断素数的函数,调用该函数求出1000以内的所有素数之和并输出。

int isp(int m)
{int i;
for(i=2;i<=m-1;i++)
{if(m%i==0)
return(0); /*能除尽,不是素数,返回0*/
}
return(1); /*不能除尽,是素数,返回1*/
}
main()
{int s=0,i;
for(i=2;i<=1000;i++)
{if(isp(i)!=0)
s=s+i;
}
printf("s=%d\n",s);
}

8、编写求两个数中最大数的函数,并调用该函数求出三个数中的最大数。

float m(float a,float b)
{float max;
if(a>b)
max=a;
else

max=b;
return(max);
}
main()
{float x,y,z,t,max;
scanf("%f%f%f",&x,&y,&z);
t=m(x,y);
max=m(t,z); /*主调函数中变量名不能与被调函数名重名*/
printf("max=%f\n",max);
}

9、编写求两个数中最大数的函数,并调用该函数求出四个数中的最大数。

float m(float a,float b)
{float max;
if(a>b)
max=a;
else
max=b;
return(max);
}
main()
{float a,b,c,d,u,v,max;
scanf("%f%f%f%f",&a,&b,&c,&d);
u=m(a,b);
v=m(c,d);
max=m(u,v); /*主调函数中变量名不能与被调函数名重名*/
printf("max=%f\n",max);
}

10、编写求三个数中最大数的函数,并调用该函数求出三个数中的最大数。

float m(float a,float b,float c)
{float max;
if(a>b)
max=a;
else
max=b;
if(c>max)
max=c;
return(max);
}
main()
{float x,y,z,max;
scanf("%f%f%f",&x,&y,&z);
max=m(x,y,z); /*主调函数中变量名不能与被调函数名重名*/
printf("max=%f\n",max);
}

11、编写判定闰年的函数,并调用此函数判定某一年是否是闰年。

int isleap(int y)
{if(y%400==0||y%4==0&&y%100!=0)
return(1);
else
return(0);
}
main()
{int year;
scanf("%d",&year);
if(isleap(year)!=0) /*或if(isleap(year))*/
printf("%d is a leap year.\n",year);
else
printf("%d is not a leap year.\n",year);
}

12、编写判定闰年的函数,并调用此函数求出公元1年到公元1000年之间的所有闰年。

int isleap(int y)
{if(y%400==0||y%4==0&&y%100!=0)
return(1);
else
return(0);
}
main()
{int year;
for(year=1;year<=1000;year++)
{if(isleap(year)!=0) /*或if(isleap(year))*/
printf("%d,",year);
}
printf("\n");
}

13、编写一个将实数四舍五入到小数点后第n位的函数,并调用此函数将一个实数舍入到小数点后第2位(是指内部精度而非输出精度)。

double p(double x,int n)
{int i;
for(i=1;i<=n;i++)
x=x*10;
x=x+0.5;
x=(long)x;
for(i=1;i<=n;i++)
x=x/10;
return(x);
}
main()
{double x;
x=p(x,2);
printf("x=%f\n",x);
}

14、编写一个函数用于将一个整数前后倒置,并调用此函数将一个从键盘输入的整数前后倒置。

int rev(int a)
{int d,r=0;
while(a!=0)
{d=a%10;
r=r*10+d;
a=a/10;
}
return(r);
}
main()
{int a,r;
scanf("%d",&a);
r=rev(a);
printf("r=%d\n",r);
}

15、编写求两个整数最大公约数的函数,并调用此函数求两个整数的最大公约数。

辗转相除法:
⑴以其中一个数作被除数,另一个数作除数,相除求余数。
⑵若余数不为0,则以上一次的除数作为新的被除数,以上一次的余数作为新的除数,继续求余数。
⑶直至余数为0时,对应的除数就是最大公约数。

int g(int m,int n)
{int r;
while((r=m%n)!=0) /*余数不为0时循环*/
{m=n; /*以上一次的除数作为新的被除数*/
n=r; /*以上一次的余数作为新的除数*/
}
return(n);
}
main( )
{int a,b,p;
scanf("%d

%d",&a,&b);
p=g(a,b);
printf("p=%d\n",p);
}

16、编写求两个整数最大公约数的函数,并调用此函数求两个整数的最小公倍数。

int g(int m,int n) /*辗转相除法*/
{int r;
while((r=m%n)!=0) /*余数不为0时循环*/
{m=n; /*以上一次的除数作为新的被除数*/
n=r; /*以上一次的余数作为新的除数*/
}
return(n);
}
main( )
{int a,b,p,h;
scanf("%d%d",&a,&b);
p=g(a,b);
h=a*b/p; /*两数之积除以最大公约数就是最小公倍数*/
printf("h=%d\n",h);
} 

17、编写求两个整数最小公倍数的函数,并调用此函数求两个整数的最小公倍数。

int h(int m,int n)
{int r,p;
p=m*n;
while((r=m%n)!=0) /*余数不为0时循环*/
{m=n; /*以上一次的除数作为新的被除数*/
n=r; /*以上一次的余数作为新的除数*/
}
p=p/n; /*最小公倍数*/
return(p);
}
main( )
{int a,b,d;
scanf("%d%d",&a,&b);
d=h(a,b); /*最小公倍数*/
printf("d=%d\n",d);
}

18、编写求n个数平均值的函数,并调用此函数求从键盘输入的100个数的平均值。

float ave(float a[],int n)
{float s=0,p;
int i;
for(i=0;i{s=s+a[i];}
p=s/n;
return(p);
}
main()
{float x[100],p;
int i;
for(i=0;i<100;i++)
{scanf("%f",&x[i]);}
p=ave(x,100);
printf("p=%f\n",p);
}

18、编写求n个数平均值的函数,并调用此函数找出从键盘输入的100个成绩中所有低于平均分的成绩。

float ave(float a[],int n)
{float s=0,p;
int i;
for(i=0;i{s=s+a[i];}
p=s/n;
return(p);
}
main()
{float a[100],p;
int i;
for(i=0;i<100;i++)
{scanf("%f",&a[i]);}
p=ave(a,100);
for(i=0;i<100;i++)
{if(a[i]printf("%f,",a[i]);
}
}

19、编写求字符串长度的函数,并调用此函数求一个字符串的长度。

int slen(char a[])
{int n=0;
while(a[i]!='\0')
n++;
return(n);
}
main()
{char a[80];
int n;
gets(a);
n=slen(a);
printf("n=%d\n",n);
}

20、编写字符串复制的函数,并调用此函数复制一个字符串。

void scopy(char b[],char a[])
{int i;
for(i=0;a[i]!='\0';i++)
b[i]=a[i]; /*未复制'\0'*/
b[i]='\0';
}
main()
{char a[80],b[80];
gets(a);
scopy(b,a);
puts(b);
}

21、编写连接两个字符串的函数,并调用此函数连接两个字符串。

void scat(char a[],char b[])
{int i,n1,n2;
n1=strlen(a);
n2=strlen(b);
for(i=0;i<=n2;i++)
a[n1+i]=b[i]; /*已复制'\0'*/
}
main()
{char a[200],b[100];
gets(a);
gets(b);
scat(a,b);
puts(a);
}

22、编写比较两个字符串大小的函数,并调用此函数比较两个字符串的大小。

int scomp(char a[],char b[])
{int i,r;
i=0;
while(a[i]!='\0'&&b[i]!='\0') /*若遇到'\0',则停止比较*/
{if(a[i]==b[i])
i++; /*若对应字符相等,则继续比较下一个*/
else
break; /*若对应字符不相等,则停止比较*/
}
r=a[i]-b[i]; /*对应字符ASCII码之差

,即比较结果*/
return(r);
}
main()
{char a[80],b[80];
int d;
gets(a);
gets(b);
d=scomp(a,b);
printf("d=%d\n",d);
}

23、编写将字符数组中的字符串前后倒置的函数,并调用此函数将一个字符串前后倒置。

void srev(char a[])
{char t;
int n,i,j;
n=strlen(a);
i=0;j=n-1;
while(i{t=a[i];a[i]=a[j];a[j]=t; /*交换对应元素的值*/
i++;j--;
}
}
main()
{char a[80];
gets(a);
srev(a)
puts(a);
}

24、编写判断回文的函数,并调用此函数判定一个字符串是否是回文。

int isR(char a[])
{int i,j n;
n=strlen(a);
i=0;
j=n-1;
while(i{if(a[i]==a[j])
{i++;j--;} /*若对应字符相等,则继续比较*/
else
break; /*否则中止比较*/
}
if(i>=j)
return(1); /*若所有对应字符都相等,则是回文*/
else
return(0);
}

main()
{char s[100];
gets(s);
if(isR(s)!=0)
printf("yes.\n");
else
printf("no.\n");
}

25、编写判断汉字回文的函数,并调用此函数判定一个汉字字符串是否是回文。

int isR(char a[])
{int i,j n;
n=strlen(a);
i=0;
j=n-2;
while(i{if(a[i]==a[j]&&a[i+1]==a[j+1])
{i+=2;j-=2;}
else
break;
}
if(i>=j)
return(1);
else
return(0);
}

main()
{char s[100];
gets(s);
if(isR(s)!=0)
printf("yes.\n");
else
printf("no.\n");
}

 



相关文档
最新文档