实验六函数与编译预处理
实验六函数与编译预处理
1.
void main()
{
float a,b,c;
scanf("%f%f",&a,&b);
c=add(a,b);
printf("sum is %f\n",c);
}
float add(float x,float y)
{
float z;
z=x+y;
return(z);
}
//错误的地方,(1)没有包含头文件<stdio.h> (2)函数定义应该在函数调用的前面. 更正后的程序:
#include<stdio.h>
float add(float x,float y)
{
float z;
z=x+y;
return(z);
}
void main()
{
float a,b,c;
scanf("%f%f",&a,&b);
c=add(a,b);
printf("sum is %f\n",c);
}
2.
void main()
{
int a=3,b=6;
printf("a=%d,b=%d\n",a,b);
exchange1(a,b);
printf(:a=%d,b=%d\n",a,b);
}
void exchange1(int x,int y)
{
int t;
t=x;x=y;y=t;
printf("x=%d,y=%d\n",x,y);
}
//错误的地方,(1)没有包含头文件<stdio.h> (2)函数定义应该在函数调用的前面.
更正后的程序:
#include<stdio.h>
void exchange1(int x,int y)
{
int t;
t=x;x=y;y=t;
printf("x=%d,y=%d\n",x,y);
}
void main()
{
int a=3,b=6;
printf("a=%d,b=%d\n",a,b);
exchange1(a,b);
printf("a=%d,b=%d\n",a,b);
}
3.
long int fac(int n)
{
long int p;
int i;
p=1;
for(i=1;i<=n;i++)
p=p*i;
return(p);
}
int cmn(int m,int n)
{
int x;
x=fac(m)/(fac(n)*fac(m-n)); return(x);
}
void main()
{
int m,n,c;
scanf("%d%d",&m,&n); c=cmn(m,n);
printf("c=%d\n",c);
}
//应该加个#include<stdio.h> 头文件
4.
int a=7,b=9;
void main()
{
int i,a=5,x=80,y=60;
for(i=1;i<4;i++)
{
printf("a=%d,b=5d,max=%d\n",a,b,max(a,b));
b+=6;
}
printf("result_sum=%d\n",sum(x,y));
}
int sum(int x,int y)
{
extern int m,n;
int temp;
temp=x+y+m+n+a+b;
return(temp);
}
int m=12,n=25;
int max(int 1,int b)
{
return(a>b?a:b);
}
程序更正:
#include<stdio.h>
int a=7,b=9;
void main()
{
int i,a=5,x=80,y=60;
int max(int a,int b);
int sum(int x,int y);
for(i=1;i<4;i++)
{
printf("a=%d,b=5d,max=%d\n",a,b,max(a,b));
b+=6;
}
printf("result_sum=%d\n",sum(x,y));
}
int sum(int x,int y)
{
extern int m,n;
int temp;
temp=x+y+m+n+a+b;
return(temp);
}
int m=12,n=25;
int max(int a,int b)
{
return(a>b?a:b);
}
5.调试运行以下程序.
#include<stdio.h>
int fun(int a)
{
int b=0;
static int c=2;
b+=c;
c+=1;
return(a+b-c);
}
void main()
{
int a=3,i;
for(i=0;i<3;i++) printf("%4d",fun(a));
}
6.略
7.略
8.
#include<stdio.h>
#define DEBUG
void main()
{
int a=14,b=15,temp;
temp=a/b;
#ifdef DEBUG
printf("a=%d,b=%d",a,b);
#endif
printf("temp=%d\n",temp);
}
程序结果为:a=14,b=15,temp=0
(1)第二行中,宏定义是可以没有具体的值的,在这里只是定义了一个宏名.DEBUG没有值.
(2)第7~9行为:
#ifdef DEBUG
printf("a=%d,b=%d",a,b);
#endif
会被编译,因为种种原因DEBUG已经被定义过.
(3)如将第2行删除,程序运行结果为:temp=0 因为没有定义DEBUG,所以原来第7~9行的程序没有执行.
(4)第9行不能删除,因为#ifdef 和#endif必须成对出现.
9.编程题
#include<stdio.h>
long int fac(int n)
{
long int p;
int i;
p=1;
for(i=1;i<=n;i++)
p=p*i;
return(p);
}
void main()
{
int m,n,c;
scanf("%d%d",&m,&n);
c=fac(n)/(fac(n-m)*fac(m));
printf("c=%d",c); }。