应科院c语言实验函数及应用.docx
《应科院c语言实验函数及应用.docx》由会员分享,可在线阅读,更多相关《应科院c语言实验函数及应用.docx(12页珍藏版)》请在冰豆网上搜索。
![应科院c语言实验函数及应用.docx](https://file1.bdocx.com/fileroot1/2023-1/10/2e461232-6a51-4937-9418-cebc06cdbe3a/2e461232-6a51-4937-9418-cebc06cdbe3a1.gif)
应科院c语言实验函数及应用
实验8函数及应用
(将本文件重命名为学号最后3位+实验11+姓名)
【实验目的】
1、掌握函数的定义方法;
2、掌握函数的调用及函数声明;
3、掌握函数实参与形参的对应关系及“值传递”的方式;
4、掌握函数的嵌套
调用和递归调用方法;
【实验内容】
1、分析下面程序的运行结果,为什么出现这种结果?
(务必弄清楚,不懂须问)
目的:
掌握具有相同名字局部变量在不同函数中的特点
源程序
#include
voidfun(inti,intj);
voidmain()
{
inti,j,x,y,n,g;
i=2,j=3,g=x=5,y=9,n=7;
fun(n,6);
printf("g=%d;i=%d;j=%d;\n",g,i,j);
printf("x=%d;y=%d\n",x,y);
fun(n,6);
}
voidfun(inti,intj)
{
intx,y,g;
g=8;x=7;y=2;
printf("g=%d;i=%d;j=%d;\n",g,i,j);
printf("x=%d;y=%d\n",x,y);
x=8,y=6;
}
运行结果:
结果分析:
具有相同名字局部变量在不同函数中的值互不影响。
2、分析下面程序的运行结果,为什么出现这种结果?
目的:
掌握全局变量与局部变量的区别。
源程序:
#include
inta=3,b=5;
max(inta,intb)
{intc;
c=a>b?
a:
b;
return(c);
}
main()
{inta=8;
printf("max=%d\n",max(a,b));
printf("b=%d\n",b);
}
运行结果:
结果分析:
文件中如果有相同名字的全局变量与局部变量,那么函数执行时是先执行局部变量,如果没有局部变量那么就执行全局变量。
3、分析下面程序的运行结果,为什么出现这种结果?
目的:
掌握使用static定义局部变量与使用auto(可省略)定义局部变量的区别
源程序:
#include
voidincx(void);
voidincy(void);
voidmain()
{
incx();
incy();
incx();
incy();
incx();
incy();
}
voidincx(void)
{
intx=0;
printf("x=%d\t",++x);
}
voidincy(void)
{
staticinty=0;
printf("\ny=%d\n",++y);
}
运行结果:
结果分析:
使用static定义局部变量时,程序运行后会储存变量的值,而使用auto(可省略)定义局部变量时,程序运行后变量的值自动释放,不会储存变量的值。
4、实现两个数的加、减、乘、除运算,共4个函数,每个函数分别存储在1个独立的源文件中。
目的:
掌握外部函数的调用
(1)利用Vc++,建立一个工程
(2)新建文件add.c,
在文件中定义加法函数floatadd(floatn1,floatn2);
并保存
(3)新建文件sub.c
在文件中定义减法函数floatsub(floatn1,floatn2);
并保存
(4)新建文件mul.c
在文件中定义乘法函数floatmul(floatn1,floatn2);
并保存
(5)新建文件div.c
在文件中定义除法函数floatdiv(floatn1,floatn2);
并保存
(6)新建文件test.c
在该文件中,编写主函数,并在主函数中调用函数add、sub、mul、div
注意在主函数中,声明函数add、sub、mul、div为外部函数,方法如下:
externfloatadd(floatn1,floatn2);
externfloatsub(floatn1,floatn2);
externfloatmul(floatn1,floatn2);
externfloatdiv(floatn1,floatn2);
代码:
add.c文件:
voidadd(floatx,floaty)
{
floatz;
z=x+y;
printf("%g+%g=%g\n",x,y,z);
}
sub.c文件:
voidsub(floatx,floaty)
{
floatz;
z=x-y;
printf("%g-%g=%g\n",x,y,z);
}
mul.c文件:
voidmul(floatx,floaty)
{
floatz;
z=x*y;
printf("%g*%g=%g\n",x,y,z);
}
div.c文件:
voiddiv(floatx,floaty)
{
floatz;
z=x/y;
printf("%g/%g=%g\n",x,y,z);
}
test.c文件:
#include
externvoidadd(floatx,floaty);
externvoiddiv(floatx,floaty);
externvoidsub(floatx,floaty);
externvoidmul(floatx,floaty);
voidmain()
{
floata,b;
charc,h;
do
{
printf("请输入要计算的表达式:
\n");
scanf("%f%c%f",&a,&c,&b);
getchar();
switch(c)
{
case'+':
add(a,b);break;
case'-':
sub(a,b);break;
case'*':
mul(a,b);break;
case'/':
div(a,b);break;
default:
;
}
printf("继续计算吗?
,输入y继续,其它字符退出");
scanf("%c",&h);
}while(h=='y'||h=='Y');
}
运行结果:
5.定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。
输出已交换后的两个值。
代码:
#include
intc=0;
#defineCHANGE(a,b)c=a,a=b,b=c;
intmain()
{
intn1=0,n2=0;
scanf("%d%d",&n1,&n2);
printf("运行请前n1=%dn2=%d\n",n1,n2);
CHANGE(n1,n2);
printf("运行请后n1=%dn2=%d\n",n1,n2);
return0;
}
运行结果:
6、输入两个整数,并使其从大到小输出,用指针变量实现数的比较。
(读懂下面程序)
(1)源程序:
#include
voidmain()
{
int*p1,*p2,*p,a,b;
scanf("%d,%d",&a,&b);
p1=&a;p2=&b;
if(a
{
p=p1;p1=p2;p2=p;
}
printf("a=%d,b=%d\n",a,b);
printf("max=%d,min=%d\n",*p1,*p2);
}
运行结果:
结果分析:
调换指针地址并不改变变量本身的值。
7.(综合设计题)
写3个函数:
①输个职工的姓名和职工号;
②按职工号由小到大顺序排序,姓名顺序也随之调整;
③要求输入一个职工号,找出该职工的姓名
从主函数输入要查找的职工号,输出该职工姓名。
代码:
#include
#include
#defineN10
voidinput(int[],charname[][8]);
voidsort(int[],charname[][8]);
voidsearch(int,int[],charname[][8]);
intmain()
{
intnum[N],number,flag=1,c;
charname[N][8];
input(num,name);
sort(num,name);
while(flag==1)
{
printf("\ninputnumbertolookfor:
");
scanf("%d",&number);
search(number,num,name);
printf("continueotnot(Y/N)?
");
getchar();
c=getchar();
if(c=='N'||c=='n')flag=0;
}
return0;
}
voidinput(intnum[],charname[N][8])
{
inti;
for(i=0;i{
printf("inputNO.:
");
scanf("%d",&num[i]);
printf("inputname:
");
getchar();
gets(name[i]);
}
}
voidsort(intnum[],charname[N][8])
{
inti,j,min,templ;
chartemp2[8];
for(i=0;i{
min=i;
for(j=i;jif(num[min]>num[j])min=j;
templ=num[i];
strcpy(temp2,name[i]);
num[i]=num[min];
strcpy(name[i],name[min]);
num[min]=templ;
strcpy(name[min],temp2);
}
printf("\nresult:
\n");
for(i=0;iprintf("\n%5d%10s",num[i],name[i]);
}
voidsearch(intn,intnum[],charname[N][8])
{
inttop,bott,mid,loca,sign;
top=0;
bott=N-1;
loca=0;
sign=1;
if((nnum[N-1]))
loca=-1;
while((sign==1)&&(top<=bott))
{
mid=(bott+top)/2;
if(n==num[mid])
{
loca=mid;
printf("NO.%d,Hisnameis%s.\n",n,name[loca]);
sign=-1;
}
elseif(nbott=mid-1;
elsetop=mid+1;
}
if(sign==1||loca==-1)
printf("%dnotbeenfound.\n",n);
}
运行结果: