1.简单值传递参数函数编程
(3) 编写函数,判断指定的字符是否是数字字符,如果是返回1,不是则返回0。在主函数中输入该字符,调用函数判断该字符并输出是否是数字字符。
#include <stdio.h>
int number(char ch)
{
int n;
if(ch>='0'&&ch<='9')
n=1;
else
n=0;
return(n);
}
main()
{
char ch;
int n;
printf("\nPlease input a char:");
scanf("%c",&ch);
n=number(ch);
if(n==1)
printf("\nIt is a number!");
else
printf("\nIt is not a number!");
}
(4) 编写一个函数,求1!+2!+…+n!。要求:n在主函数中输入,并在主函数中输出计算结果。
#include,stdio.h”
float fun(int n)
{
int i;
float sum=0,s=1;
for(i=1;i<=n;i++)
{
s=s*i;
sum=sum+s;
}
return(sum);
}
main()
{
int n;
float sum;
printf(“\nInput n:”);
scanf(“%d”,&n);
sum=fun(n);
printf(“\n1!+2!+3!+…+%d!=%f”,n,sum);
}
(5) 编写一个函数,计算一个整数m的n次幂,在主函数中输入m和n,并在主函数中输出计算结果。
double power(int m,int n)
{
int i;
double result=1;
for(i=0;i<n;i++)
{
result=result*m;
}
return(result);
}
void main()
{
int m,n;
double result;
printf("\nPlease input m,n:");
printf("\nm=");
scanf("%d",&m);
printf("\nn=");
scanf("%d",&n);
result=power(m,n);
printf("\nThe result is %lf",result);
}
3.函数递归调用
(3) 编写递归函数,计算Fibonacci数列第n项的值,n在主函数中由键盘输入,结果在主函数中输出。
 
float fib(int n)
{
float s;
if(n==1||n==2) s=1;
else
s=fib(n-1)+fib(n-2);
return(s);
}
main()
{
int n;
float s;
printf("\nPlease input n:");
scanf("%d",&n);
s=fib(n);
printf("\nfib(%d)=%f",n,s);
}
2,编写函数,求和,
n在主函数中由键盘输入,被调函数返回sum的值。
float fun(int n)
{
int i;
float sum=0,s=0;
for(i=1;i<=n;i++)
{
s=s+i;
sum=sum+1.0/s;
}
return(sum);
}
main()
{
int n;
float sum;
printf(“\nPlease input n:”);
scanf(“%d”,&n);
sum=fun(n);
printf(“\nThe sum is %f”,sum);
}
3,
#include,math.h”
float f2(int n)
{
int i;
float s=1;
for(i=2;i<=n;i++)
s=s*i;
return(s);
}
float f1(int x,int n)
{
int i;
float s=x;
for(i=2;i<=n;i++)
s=x*s;
return(s);
}
main( )
{
float exp=1.0;
int x,n;
scanf("%d",&x);
exp+=x;
for (n=2; n<20; n++)
exp+=f1(x,n)/f2(n);
printf("\nexp(%d)=%.4f\n",x,exp);
}
6、从3个红球、5个白球、6个黑球中任意取出8个作为一组,要求在每组中可以没有黑球,但必须有红球和白球。输出这样的组合数有多少?并且输出每组中的红、白、黑球数。
int ball(int a,int b,int c,int s)
{
int i,j,k,sum;
printf(“\nred white black:”);
for(i=1;i<=a;i++)
{
for(j=1;j<=b;j++)
{
for(k=1;k<=c;k++)
{
if(i+j+k==s)
{
sum++;
printf(“\n%2d%2d%2d”,i,j,k);
}
}
}
return(sum);
}
main()
{
int red=3,white=5,black=6,s=8;
int sum;
sum=ball(red,white,black,s);
printf(“\nThe total is %d”,sum);
}
4.指针及指针参数函数编程
(4) 编写一个函数,返回三个整数中的最大数。要求用指针作为函数参数得到最大数,在主函数中输入输出数据。
int max(int *p1,int *p2,int *p3)
{
if(*p1>*p2)
{
if(*p1>*p3)
return(*p1);
else
return(*p3);
}
else
{
if(*p3>*p2)
return(*p3);
else
return(*p2);
}
}
main()
{
int a,b,c,*p1,*p2,*p3,m;
printf("\nInput three integers:(a,b,c)\n");
scanf("%d,%d,%d",&a,&b,&c);
p1=&a;
p2=&b;
p3=&c;
m=max(p1,p2,p3);
printf("\nThe max is %d",m);
}
(6) 编写函数,计算π。已知:
π/4=1-1/3+1/5-1/7+…
直到最后一项的绝对值小于10-8为止。要求用指针作为函数参数返回计算结果。
#include <math.h>
void pai(double *p)
{
long i;
for(i=1;1.0/(2*i-1)>pow(10,-7);i++)
{
*p=*p+1.0*pow(-1,i+1)/(2*i-1);
}
*p=*p*4.0;
}
main()
{
double pi=0;
double *p;
p=&pi;
pai(p);
printf("\nPI=%lf",pi);
}
5.编写函数,计算一个整数各位数字之和。如123,各位之和为1+2+3=6。
int sum(int m)
{
int a=0,b=0,c=0,d=0,e=0;
int s;
if(m/10000!=0)
{
e=m/10000;
d=m/1000-e*10;
c=m/100-e*100-d*10;
b=m/10-e*1000-d*100-c*10;
a=m%10;
}
else if(m/1000!=0)
{
d=m/1000;
c=m/100-d*10;
b=m/10-d*100-c*10;
a=m%10;
}
else if(m/100!=0)
{
c=m/100;
b=m/10-c*10;
a=m%10;
}
else if(m/10!=0)
{
b=m/10;
a=m%10;
}
else
a=m;
s=a+b+c+d+e;
return(s);
}
main()
{
int num,s;
printf("\nPlease input a integer:");
scanf("%d",&num);
s=sum(num);
printf("\nThe sum is %d",s);
}