第6章+函数.docx

上传人:b****3 文档编号:4593909 上传时间:2022-12-07 格式:DOCX 页数:12 大小:19.49KB
下载 相关 举报
第6章+函数.docx_第1页
第1页 / 共12页
第6章+函数.docx_第2页
第2页 / 共12页
第6章+函数.docx_第3页
第3页 / 共12页
第6章+函数.docx_第4页
第4页 / 共12页
第6章+函数.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

第6章+函数.docx

《第6章+函数.docx》由会员分享,可在线阅读,更多相关《第6章+函数.docx(12页珍藏版)》请在冰豆网上搜索。

第6章+函数.docx

第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;i

printf("%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;i

returns;

}

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;i

returnz;

}

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程序中,若要定义一个只允许本源程序文件中所有函数使用的全局变量,则该变量需要定义的存储类别为____________。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1