第6章+函数.docx
《第6章+函数.docx》由会员分享,可在线阅读,更多相关《第6章+函数.docx(12页珍藏版)》请在冰豆网上搜索。
![第6章+函数.docx](https://file1.bdocx.com/fileroot1/2022-12/7/0207732d-c55a-4b8d-b035-1d53d62c7599/0207732d-c55a-4b8d-b035-1d53d62c75991.gif)
第6章+函数
第6章函数
通过本章实验作业应达目标
1.掌握定义和调用函数的方法
2.掌握函数嵌套调用的方法
3.掌握通过“值传递”调用函数的方法
4.理解变量作用域和存在期的概念,掌握全局变量和局部变量,动态变量和静态变量的定义、说明和使用方法
5.掌握宏定义的方法
6.掌握文件包含的处理方法
本章上交作业
程序6_1.c、6_2.c、6_3.c、6_4.c、6_5.c、6_9.c
上传至http:
//121.251.227.27:
8080/c。
实验一判断素数的函数
【实验目的】
掌握用函数实现判断素数的方法。
【实验内容】
编写一个函数intprime(inta),判断参数是否为素数。
函数有一个形参a,当a为素数时,返回1,反之,返回0。
以6_1.c命名本程序并上交。
函数声明如下:
intprime(inta);
主函数如下:
#include
#include
voidmain()
{
inta,b;
printf("pleaseinputanumber:
\n");
scanf("%d",&a);
b=prime(a);
if(b==1)
printf("thenumberisaprimenumber.");
else
printf("thenumberisnotaprimenumber.");
}
intprime(inta){……}
实验二求最大公约数与最小公倍数
【实验目的】
熟练函数的嵌套调用。
【实验内容】
编写两个函数,分别求两个正整数的最大公约数和最小公倍数,结果作为函数返回值返回。
在main函数中实现输入与输出。
以6_2.c命名本程序并上交。
主函数如下:
#include
voidmain()
{
intgongyueshu(inta,intb);
intgongbeishu(inta,intb);
inta,b,c,d;
printf("pleaseinputtwointegernumbers:
");
scanf("%d%d",&a,&b);
c=gongyueshu(a,b);
d=gongbeishu(a.b);
printf("gongyueshuis%d\ngongbeishuis%d",c,d);
}
intgongyueshu(inta,intb)
{……}
intgongbeishu(inta,intb)
{……}
【实验提示】
可以在最小公倍数中嵌套调用最大公约数函数。
实验三报数问题
【实验目的】
掌握数组和函数的应用。
【实验内容】
m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。
到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。
若m=6,则输出n=1364251;若m=10,则输出n=436927185104;若m=100,则输出n=91369……1005891。
函数intfun(intn,intp[])实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。
以6_3.c命名本程序并上交。
#include
intbaoshu(intn,intp[])
{……}
voidmain()
{intm,a[10000],i,num;
scanf("%d",&m);
num=fun(m,a);
printf("n=%d\n",num);
for(i=0;iprintf("%8d",a[i]);
printf("\n");
}
实验四数组中插入元素的函数
【实验目的】
学习在一维数组中插入元素的方法。
【实验内容】
参照给定的主函数,编写一个函数voidinsert(inta[],intn,inty),它的功能是:
把y值插入到有n个数的有序的a数组中,y的值从键盘读入。
插入后,数组中的数仍然有序。
以6_4.c命名本程序并上交。
对照下面三种情况运行程序:
1)插在最前2)插在最后3)插在中间。
inta[11]={2,4,6,8,10,12,14,16,18,20};
voidinsert(inta[],intn,intnumber);
voidmain()
{
inti,x;
printf("originalarrayis:
\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
printf("insertanewnumber:
");
scanf("%d",&x);
insert(a,10,x);
for(i=0;i<11;i++)
printf("%d",a[i]);
}
voidinsert(inta[],intn,intnumber)
{……}
若输入数11,输出246810111214161820
输入数1,输出12468101214161820
输入数33,输出246810121416182033
【实验提示】
1.若x插入数组的中间,插入后此元素之后的数,依次后移一个位置。
例如查找到11应该放置在a[5]的位置上,原来a[5]的数据12以及其后的所有元素后移一位。
2.后移元素的过程,应该注意从数组的末尾开始依次a[n]=a[n-1],a[n-1]=a[n-2]……
实验五从数组中删除数据
【实验目的】
深入理解数组做函数参数。
【实验内容】
编写函数intdelnum(inta[],intnum,intn),用于在长度是n的数组a中,删除一个值为num的元素。
删除后数组的长度作为函数的返回值返回。
注意,num在数组中可能不只一个。
请以6_5.c命名本程序并上交。
主函数如下:
#defineN10
voidmain()
{inta[N],num;
scanf(“%d”,&num);
输入N个数到数组a中;
调用delnum函数在数组a中删除指定的数num;
输出删除了num后的数组a;
}
定义并编写delnum函数
实验六求数组逆序的函数
【实验目的】
熟练掌握操作数组的方法及数组名作函数参数的使用方法。
【实验内容】
从键盘输入int型数组a[20]的20个元素值,编写一个函数实现对数组元素数据的逆序放置。
即第1个元素与第20个元素互换,第2个元素与第19个元素互换,……,第10个元素与第11个元素互换。
请完善下述程序并以6_6.c命名本程序。
#include
voidmain()
{
voidnixu(inta[],intn);/*逆序函数声明*/
inta[20],x;
for(x=0;x<20;x++)
scanf("%d",&a[x]);
printf("Beforeinvert,thearrayis:
\n");
for(x=0;x<20;x++)
printf("%d",a[x]);
printf(“\n”);
nixu(a,20);/*调用逆序函数,注意实参是什么*/
printf("\nAfterinvert,thearrayis:
\n");
for(x=0;x<20;x++)
printf("%d",a[x]);
printf(“\n”);
}
voidnixu(inta[],intn)
{
inti,t;
for(i=0;i<________;i++)
{t=a[i];________;a[n-1-i]=t;}
}
实验七全局变量与局部变量
【实验目的】
掌握全局变量和局部变量在程序中的关系。
【实验内容】
下面的程序运行后的结果是_____________。
intx=3,y=5;
intmax(intx,inty)
{
intz;
z=x>y?
x:
y;
return(z);
}
voidmain()
{
intx=8;
printf("max=%d\n",max(x,y));
}
实验八变量的静态存储方式
【实验目的】
熟悉static定义静态变量的用法。
【实验内容】
下面程序运行后的输出结果是_____________。
#include
varfunc()
{intvar=0;
staticintstatic_var=0;
printf("\40:
varequal%d\n",var);
printf("\40:
staticvarequal%d\n",static_var);
printf("\n");
var++;
static_var++;
}
voidmain()
{inti;
for(i=0;i<3;i++)
varfunc();
}
实验九宏的使用
【实验目的】
掌握宏的定义和使用。
【实验内容】
作业1.#define命令练习,写出运行结果。
#include"stdio.h"
#defineTRUE1
#defineFALSE0
#defineSQ(x)((x)*(x))
voidmain()
{
intnum;
intagain=1;
printf("\40:
Programwillstopifinputvaluelessthan50.\n");
while(again)
{
printf("\40:
Pleaseinputnumber==>");
scanf("%d",&num);
printf("\40:
Thesquareforthisnumberis%d\n",SQ(num));
if(num>=50)
again=TRUE;
else
again=FALSE;
}
}
作业2.编写宏,求两个数的最大值。
请以6_9.c命名本程序并上交。
习题
1.有如下程序
#include
longfib(intn)
{if(n>2) return(fib(n-1)+fib(n-2));
else return
(2);
}
voidmain()
{printf("%d\n",fib(3));}
该程序的输出结果是( )
A、2B、4C、6D、8
2.在C语言中,函数的隐含存储类别是()
A、autoB、staticC、externD、无存储类别
3.以下所列的各函数首部中,正确的是()
A、voidplay(var:
Integer,varb:
Integer)
B、voidplay(inta,b)
C、voidplay(inta,intb)
D、Subplay(aasinteger,basinteger)
4.以下程序的输出结果是()
A、0B、29C、31D、无定值
fun(intx,inty,intz)
{z=x*x+y*y;}
main()
{inta=31;
fun(5,2,a);
printf("%d",a);
}
5.以下程序的输出结果是()
f(intb[],intm,intn)
{intI,s=0;
for(i=m;ireturns;
}
main()
{intx,a[]={1,2,3,4,5,6,7,8,9};
x=f(a,3,7);
printf("%d\n",x);
}
A、10B、18C、8D、15
6.以下程序的输出结果是()
A、1B、2C、3D、4
longfun(intn)
{longs;
if(n==1||n==2) s=2;
elses=n-fun(n-1);
returns;}
main()
{printf("%ld\n",fun(3));}
7.以下程序的输出结果是()
intf()
{staticinti=0;
ints=1;
s+=i;i++;
returns;
}
main()
{inti,a=0;
for(i=0;i<5;i++) a+=f();
printf("%d\n",a);
}
A、20B、24C、25D、15
8.以下程序的功能是调用函数fun计算:
m=1-2+3-4+…+9-10,并输出结果。
请填空。
int fun( int n)
{ int m=0,f=1,i;
for(i=1; i<=n; i++)
{ m+=i*f;
f= _____________ ;
}
return m;
}
main()
{ printf("m=%d\n", _________ ); }
9.以下程序输出的最后一个值是_____________
intff(intn)
{staticintf=l;
f=f*n;
returnf;
}
main()
{inti;
for(i=1;i<=5;i++)printf("%d\n",ff(i));
}
10.以下函数的功能是:
求x的y次方,请填空。
doublefun(doublex,inty)
{inti;
doublez;
for(i=1,z=x;ireturnz;
}
11.以下正确的说法是()
A、用户若需要调用标准库函数,调用前必须重新定义
B、用户可以重新定义标准库函数,如若此,该函数将失去原有定义
C、系统不允许用户重新定义标准库函数
D、用户若需要使用标准库函数,调用前不必使用预处理命令将该函数所在的头文件包含编译,系统会自动调用。
12.C语言规定,简单变量做实参时,它和对应的形参之间的数据传递方式是()
A、地址传递
B、值传递
C、有实参传给形参,再由形参传给实参
D、由用户指定传递方式
13.下面程序的输出是()
inti=2;
printf(“%d%d%d”,i*=2,++i,i++);
A、8,4,2B、8,4,3
C、4,4,5D、4,5,6
14.以下不正确的说法是()
A、register变量可以提高变量使用的执行效率
B、register变量由于使用的是CPU的寄存器,其数目是有限制的
C、extern变量定义的存储空间按变量类型分配
D、全局变量使得函数之间的“耦合性”更加紧密,不利于模块化的要求
15.C语言函数返回类型的默认定义类型是____________
16.函数的实参传递到形参有两种方式:
____________和____________。
17.C语言变量按其作用域分为____________和____________。
按其生存期分为____________和____________。
18.已知函数定义:
voiddothat(intn,doublex){……},其函数声明的两种写法为____________,____________。
19.C语言变量的存储类别有____________,____________,____________和____________。
20.在一个C程序中,若要定义一个只允许本源程序文件中所有函数使用的全局变量,则该变量需要定义的存储类别为____________。