当前位置:文档之家› c语言第八章函数上机作业

c语言第八章函数上机作业

第八章通过本章实验作业应达目标1. 掌握定义和调用函数的方法2.掌握函数嵌套调用的方法3.掌握通过“值传递”调用函数的方法4.理解变量作用域和存在期的概念,掌握全局变量和局部变量,动态变量和静态变量的定义、说明和使用方法本章上交作业程序8_1.c、8_2.c、8_4.c、8_5.c上传至211.64.135.121/casp。

实验一判断素数的函数【实验目的】掌握用函数实现判断素数的方法。

【实验内容】编写一个函数int prime(int a),判断参数是否为素数。

函数有一个形参a,当a 为素数时,返回1,反之,返回0。

以8_1.c命名本程序并上交。

函数声明如下:int prime( int a );主函数如下:#include<math.h>#include<stdio.h>void main ( ){int a, b;printf("please input a number:\n");scanf("%d", &a);b = prime( a );if ( b = =1 )printf("the number is a prime number.");elseprintf("the number is not a prime number.");}int prime( int a ) { …… }实验二求最大公约数与最小公倍数【实验目的】熟练函数的嵌套调用。

【实验内容】编写两个函数,分别求两个正整数的最大公约数和最小公倍数,结果作为函数返回值返回。

在main函数中实现输入与输出。

以8_2.c命名本程序并上交。

主函数如下:#include<stdio.h>void main( ){int gongyueshu( int a, int b );int gongbeishu( int a, int b );int a, b, c, d;printf("please input two integer numbers:");scanf("%d%d", &a, &b);c=gongyueshu(a, b);d=gongbeishu(a. b);printf("gongyueshu is %d\n gongbeishu is %d",c,d);}int gongyueshu( int a, int b ){ ……}int gongbeishu( int a, int b ){ …… }【实验提示】可以在最小公倍数中嵌套调用最大公约数函数。

最小公倍数=a*b/最大公约数实验三求数组逆序的函数【实验目的】熟练掌握操作数组的方法及数组名作函数参数的使用方法。

【实验内容】从键盘输入int型数组a[ 20 ]的20 个元素值,编写一个函数实现对数组元素数据的逆序放置。

即第1个元素与第20个元素互换,第2个元素与第19个元素互换,……,第10个元素与第11个元素互换。

请完善下述程序并以8_3.c命名本程序。

#include<stdio.h>void main( ){void nixu( int a[ ], int n ); /* 逆序函数声明 */int a[20],x;for (x=0;x<20;x++ )scanf("%d",&a[x]);printf("Before invert,the array is:\n");for (x=0;x<20;x++ )printf("%d ",a[x]);printf(“\n”);nixu(a,20); /* 调用逆序函数,注意实参是什么 */printf("\nAfter invert,the array is:\n");for (x=0;x<20;x++ )printf("%d ",a[x]);printf(“\n”);}void nixu(int a[ ], int n){int i, t;for (i=0;i<________; i++){ t=a[i]; ________; a[n-1-i]=t; }}实验四数组中插入元素的函数【实验目的】学习在一维数组中插入元素的方法。

【实验内容】参照给定的主函数,编写一个函数void insert(int a[ ], int n, int y ),它的功能是:把y值插入到有n个数的有序的a数组中, y的值从键盘读入。

插入后,数组中的数仍然有序。

以8_4.c命名本程序并上交。

对照下面三种情况运行程序:1)插在最前2)插在最后3)插在中间。

int a[11]={2,4,6,8,10,12,14,16,18,20};void insert( int a[ ], int n, int number );void main( ){int i, x ;printf("original array is:\n");for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");printf("insert a new number:");scanf("%d",&x);insert(a,10,x);for(i=0;i<11;i++)printf("%d ",a[i]);}void insert( int a[ ], int n, int number ){ …… }若输入数11,输出 2 4 6 8 10 11 12 14 16 18 20输入数1,输出 1 2 4 6 8 10 12 14 16 18 20输入数33,输出 2 4 6 8 10 12 14 16 18 20 33【实验提示】1.若x插入数组的中间,插入后此元素之后的数,依次后移一个位置。

例如查找到 11应该放置在a[ 5 ] 的位置上,原来a[5]的数据 12 以及其后的所有元素后移一位。

2.后移元素的过程,应该注意从数组的末尾开始依次a[n]=a[n-1],a[n-1]=a[n-2]……实验五报数问题【实验目的】掌握数组和函数的应用。

【实验内容】n个人围成一圈,1,2,3循环报数,报到3的人退出。

到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。

若n=6,则输出1;若n=10,则输出4;若n=100,则输出91。

编写函数,n作函数参数,函数返回结果。

以8_5.c命名本程序并上交。

#include<stdio.h>int baoshu( int n ){ …… }void main( ){int m ;scanf( "%d", &m ) ;printf( "n=%d\n", baoshu(m) ) ;}【实验提示】在初始化数组时,以1至n为序给每个人编号,分别设置三个计数器,一个用来表示数组的下标,一个用来表示退出的人数,另外一个表示报数时的计数器变量。

每次当某变量报数为3时,将该数组元素置0,当退出人数达到n-1时,推出循环。

最后返回数组中的唯一一个非零元素。

实验六全局变量与局部变量【实验目的】掌握全局变量和局部变量在程序中的关系。

【实验内容】下面的程序运行后的结果是_____________。

int x=3, y=5;int max( int x, int y ){int z;z=x>y?x:y;return(z);}void main( ){int x=8;printf( "max=%d\n",max(x,y) );}实验七变量的静态存储方式【实验目的】熟悉static定义静态变量的用法。

【实验内容】下面程序运行后的输出结果是_____________。

#include<stdio.h>varfunc( ){ int var=0;static int static_var=0;printf("\40:var equal %d \n",var);printf("\40:static var equal %d \n",static_var);printf("\n");var++;static_var++;}void main( ){ int i;for(i=0;i<3;i++)varfunc();}习题1.有如下程序#include<stdio.h>long fib( int n){if(n>2) return(fib(n-1)+fib(n-2));else return(2);}void main( ){ printf("%d\n",fib(3));}该程序的输出结果是()A、2B、 4C、 6D、82.在C语言中,函数的隐含存储类别是()A、 autoB、 staticC、 externD、无存储类别3.以下所列的各函数首部中,正确的是()A、 void play(var:Integer,var b:Integer)B、 void play(int a,b)C、 void play(int a,int b)D、 Sub play(a as integer,b as integer)4.以下程序的输出结果是()A、 0B、 29C、 31D、无定值fun(int x,int y,int z){ z=x*x+y*y;}main( ){ int a=31;fun(5,2,a);printf("%d",a);}5.以下程序的输出结果是()f(int b[ ],int m,int n){int I,s=0;for(i=m;i<n;i=i+2) s=s+b[i];return s;}main( ){int x,a[ ]={1,2,3,4,5,6,7,8,9};x=f(a,3,7);printf("%d\n",x);}A、10B、18C、8D、156.以下程序的输出结果是()A、1B、2C、3D、4long fun( int n){ long s;if(n==1 || n==2)s=2;else s=n-fun(n-1);return s;}main( ){ printf("%ld\n",fun(3));}7.以下程序的输出结果是()int f( ){ static int i=0;int s=1;s+=i;i++;return s;}main( ){ int i,a=0;for(i=0;i<5;i++)a+=f();printf("%d\n",a);}A、20B、24C、25D、158. 以下程序的功能是调用函数fun计算:m=1-2+3-4+…+9-10,并输出结果。

相关主题