#include
#define f(x) xx
void main()
{
int i;
i=f(4+4)/f(2+2); //注:作宏展开
printf("%d\n",i);
}
运行结果:28
2.
#include
#define SUM(x,y) (x)y
void main()
{
int a=3,b=4,c;
c=SUM(a++,b++);
printf("%d,%d,%d\n",a,b,c);
}
运行结果:4,5,12
3.
#include
void fun(int a,int b,int c)
{c=a
void main()
{
int x=22;
fun(4,2,x);
printf("%d\n",x);
}
运行结果:22
*4.
#include
int func(int a,int b)
{
int c;
c=a+b;
return c;
}
void main()
{
int x=6,r;
r=func(x,x+=2);
printf("%d\n",r);
}
运行结果:16
5.
#include
int d=1;
void fun(int p)
{
int d=5;
d+=p++;
printf("%d",d);
}
void main()
{
int a=3;
fun(a);
printf("%d\n",d);
}
运行结果:81
*6.
#include
int d=1;
int fun(int p)
{
static int d=5;
d+=p;
printf("%4d",d);
return d;
}
void main()
{
int a=3;
printf("%4d\n",fun(a+fun(d)));
}
运行结果: 6 15 15
7.
#include
long fib(int n)
{
if(n>2)
return(fib(n-1)+fib(n-2));
else
return (2);
}
void main()
{
printf("%d\n",fib(3));
}
运行结果: 4
8.
#include
void fun()
{
static int a=0;
a+=2;
printf("%d\t",a);
}
void main()
{
int cc;
for(cc=1;cc<4;cc++)
fun();
printf("\n");
}
运行结果: 2 4 6
程序的功能是计算s=1!+2!+3!+…+n!。
#include
long fun(int n)
{
int i;
long s= 1 ;
for(i=1;i<=n;i++)
s= s*i ;
return s;
}
void main()
{
long s=0;
int k,n;
scanf("%d",&n);
for(k=1;k<=n;k++)
s= s+fun(k) ;
printf("%ld\n",s);
}
补充函数fun,该函数的功能是判断一个数的个位数字和百位数字之和是否等于十位数字,是则返回1,否则返回0。
#include
long fun(int n)
{
int g,s,b;
g=n%10;
s=n/10%10;
b= n/100 ;
if( g+b==s )
return 1;
else
return 0;
}
void main()
{
int num;
printf(“输入数据:\n”);
scanf("%d",&num);
if(fun(num))
printf(“结果是:yes!\n”);
else
printf(“结果是:no!\n”);
}
寻找并输出2000以内的亲密数对。亲密数对的定义为:若正整数a的所有因子(不包括a)和为b,b的所有因子(不包括b)和为a,且a≠b,则称a和b为亲密数对。
#include
int f(int x)
{
int i,y=0;
for(i=1; i
return y;
}
void main()
{
int i,j;
for(i=2;i<=2000;i++)
{
j=f(i);
if( i ==f(j)&& i
}
}
答案:220,284
1184,1210
求F(0)到F(10)中的最大值和最小值,以及值等于0的个数。
源程序:
#include
int f(int n)
{
int c;
if(n1||n0) c=1;
else if(n2)c=0;
else c=f(n-1)-3f(n-2)+2f(n-3);
return c;
}
void main()
{
int i,max,min,zero=0;
max=min=f(0);
for(i=0;i<=10;i++)
{
if(max
if(f(i)0)zero++;
}
printf(“最大值为:%d,最少值为:%d,值为0的数有%d个。\n”,max,min,zero);
}
运行结果:最大值为:31,最少值为:-11,值为0的数有2个。
3. 编写一个函数“change(x,r)”,将十进制的数x转换成r(1
#include
void change(int x,int r)
{int c;
c=x%r;
if(x/r!=0)change(x/r,r);
printf("%d",c);
}
void main()
{int x,r;
printf(“请输入一个十进制整数x和所要转换的进制r:”);
scanf("%d,%d",&x,&r);
printf(“十进制整数%d转换成的%d进制数为:”,x,r);
if(x<0)
{printf("-");x=-x;}
change(x,r);
printf("\n");
}
4. 已知某一正整数,其各位数字均为素数,而且各位数字之和也为素数。例如,232的各位数字2,3,2及各位数字之和2+3+2=7均为素数。编写程序找出1100中满足条件的所有正整数,并将结果按每行5个输出。
源程序:
#include
int prime(int x)
{
int i;
for(i=2;i
return i
}
void main()
{
int i,j,n=0,t;
for(i=1;i<1000;i++)
{
j=i;t=0;
while(j!=0&&prime(j%10))
{
t=t+j%10;
j=j/10;
}
if((j0)&&prime(t))
{
if(n%50)printf("\n");
printf("%5d",i);
n++;
}
}
printf("\n");
}
*5. 已知:
将f定义成递归函数,计算x=3.1、n=15及x=8.1、n=10时的f值。
源程序:
#include
#include
float f(float x,int n)
{
float c;
if(n1)c=sqrt(1+x);
else c=sqrt(n+f(x,n-1));
return c;
}
void main()
{
float f1,f2;
f1=f(3.1,15);
f2=f(8.1,10);
printf(“f(3.1,15)=%.3f\n”,f1);
printf(“f(8.1,10)=%.3f\n”,f2);
}
运行结果:f(3.1,15)=4.388
f(8.1,10)=3.676
*6. 编写一个函数“digit(n,k)”,它返回数n从右边开始的第k个数字的值。例如,“digit(123456,2)”返回值为5,“digit(258,4)”返回值为-1。
源程序:
#include
int digit(long n,int k)
{
int i=1;
while(i
if(n
else return (n%10);
}
void main()
{
long x;
int m;
printf(“输入一个整数x和要返回的数字位数m:”);
scanf("%ld,%d",&x,&m);
printf(“结果为:%d\n”,digit(x,m));
}
*7. 利用从两个数中找较大数的函数(或宏),实现从3个数中找出最大数。使用带参数的宏完成。
源程序:
#include
#define max(a,b) a>b?a:b
#define PR(x) printf(“3个数中的最大数为:%f\n”, x)
int main()
{ float a,b,c,t;
printf(“输入三个数:”);
scanf("%f,%f,%f",&a,&b,&c);
t=max(a,b);t=max(t,c);
PR(t) ;
}