实验六函数与变量 一,实验目的 1.掌握定义函数的方法: 2.掌握函数实参与形参的对应关系,以及“值传递”的方式: 3。掌握函数的嵌套调用和递归调用的方法! 4.掌握全局变量和局部变量,动态变量和静态变量的概念和使用方法。 二.实验要点 1.定义函数的一般格式: 类型说明符函数名(形参表) 形参说明 局部变量说明: 函数体语句: 2.函数的调用格式为:函数名(实参表) 3.函数返回值 函数返回值类型说明的一般格式为:类型说明符函数名()方 。返回语句etum 三.实验要求 1.上机前编写好以下程序。(1-3为填空,4,5自己编程) 2.上机输入和调试自己所编的程序并存在自己的软盘上。 3.检查实验结果是否正确。 4. 上机结束后,整理实验报告。 四.实验内容 上机调试运行以下程序。 1.以下程序完成由键盘输入两个整数,求其最大值。请改正以下程序的错误。 并上机调通。 main() int a,b,c; scanf(%d,%d”,&a,&b c=max(x.v): 体函数调用/ printf% minx,y方 函数定义*/
实验六 函数与变量 一. 实验目的 1.掌握定义函数的方法; 2.掌握函数实参与形参的对应关系,以及“值传递”的方式; 3.掌握函数的嵌套调用和递归调用的方法; 4.掌握全局变量和局部变量,动态变量和静态变量的概念和使用方法。 二. 实验要点 1.定义函数的一般格式: 类型说明符 函数名(形参表) 形参说明 { 局部变量说明; 函数体语句; } 2.函数的调用格式为:函数名(实参表) 3.函数返回值 ⚫ 函数返回值类型说明的一般格式为:类型说明符 函数名( ); ⚫ 返回语句 return 三. 实验要求 1. 上机前编写好以下程序。(1-3 为填空,4,5 自己编程) 2. 上机输入和调试自己所编的程序并存在自己的软盘上。 3. 检查实验结果是否正确。 4. 上机结束后,整理实验报告。 四. 实验内容 上机调试运行以下程序。 1.以下程序完成由键盘输入两个整数,求其最大值。请改正以下程序的错误。 并上机调通。 main(){ int a,b,c; scanf(“%d,%d”,&a,&b); c=max(x,y); /*函数调用 */ printf(“%d”,c);} min(x,y); /*函数定义 */
int x.y int z(x>y)?xy: return(z);) 函数的返回值 键盘输入:45,89<CR>(<CR>表示回车) 输出结果: 89 2.将输入的十进制正整数转换为二进制数,并将转换结果输出,转换方法“除 取余”。 请填空。 transfer(m) int m; int aa[20]j. for(j=0;m!=0j++) aaF【m%2】; m=m/2 for(:j!=0.j-) printf%d”,【aa[jr1]】方 int n; scanf(%d”,&ny 【transfer(n)】: 键盘输入:1O<CR)(<CR>表示回车) 输出结果:1010 3.以下程序的功能是根据输入的”y”(Y)与”(N),在屏幕上分别显示 出This is YES.”与This is NO.”,请填空。 #include”stdio.h switch(ch) case 'y': case "Y':printf(\n This is YES.n"):【break】): case n case 'N':printf("In This is NO.\n"): main()
int x,y; { int z; z=(x>y)?x:y; return(z);} /* 函数的返回值 */ 键盘输入:45,89<CR>(<CR>表示回车) 输出结果: 89 2.将输入的十进制正整数 n 转换为二进制数,并将转换结果输出,转换方法“除 二取余”。 请填空。 transfer(m) int m; { int aa[20],j; for(j=0;m!=0;j++) { aa[j]= 【 m%2 】; m=m/2; } for(;j!=0;j-) printf(“%d”, 【 aa[j-1] 】); } main() { int n; scanf(“%d”, &n); 【 transfer(n) 】; } 键盘输入:10<CR>(<CR>表示回车) 输出结果:1010 3.以下程序的功能是根据输入的”y”(“Y”)与”n”(“N”),在屏幕上分别显示 出”This is YES.”与”This is NO.”,请填空。 #include”stdio.h” void yesno(char ch) { switch(ch) { case ‘y’: case ‘Y’: printf(“\n This is YES.\n”);【 break 】); case ‘n’: case ‘N’: printf(“\n This is NO.\n”); } } main()
char ch; printf(“ch:%c”,ch): yesno(ch); 1 键盘输入,Y(CR>((CR)表示同车) 输出结果 This is YES. 4.编程:写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数 调用这两个函数并输出结果。两个函数由键盘输入。 5.写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的信息。 作业题: 一,选择题 1.C语言中,若对函数类型无说明,则函数的默认类型是【A】 A)整型B)float C)double D)指针类型 2.C语言规定,在一个源程序中,m in函物的位罗口) A)必须 在最开始 B)必须在 统调用的库函数的后面 C)可以任意 D)必须在最后 3.若用数组名作为函数调用的实参,传递给形参的是【A】。 A)数组的首地址 B) 数组第一个元素的值 数组中全部元素的值 D)数组元素的个数 4.凡是函数中未指定存储类别的局部变量,其隐含的存储类别为【A】. A)自动(auto) B)静态(static)C)外部(extern) D)寄存器((register) 5.以下不正确的说法是【D】。 在不同函数中可以使用相同名字的变量 B) 形式 参数是月 C 在函数内定义的变量只在本函数范围内有效。 D)在函数内的复合语句中定义的变量在本函数范围内有效。 二. 填空题 1.下面程序的执行结果是【1】 main( {increment(方 increment(方 increment()方 increment()
{ char ch; printf(“\n Enter a char ‘y’,’Y’or ’n’,’N’:”); ch=【getchar() 】; printf(“ch:%c”,ch); yesno(ch); } 键盘输入:Y<CR>(<CR>表示回车) 输出结果: This is YES. 4.编程:写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数 调用这两个函数并输出结果。两个函数由键盘输入。 5.写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的信息。 作业题: 一. 选择题 1.C 语言中,若对函数类型无说明,则函数的默认类型是【 A 】 A)整型 B)float C)double D)指针类型 2.C 语言规定,在一个源程序中,main 函数的位置( C ) A)必须在最开始 B)必须在系统调用的库函数的后面 C) 可以任意 D)必须在最后 3.若用数组名作为函数调用的实参,传递给形参的是【 A 】。 A)数组的首地址 B) 数组第一个元素的值 C) 数组中全部元素的值 D)数组元素的个数 4.凡是函数中未指定存储类别的局部变量,其隐含的存储类别为【 A 】。 A) 自动(auto) B) 静态(static) C) 外部(extern) D) 寄存器(register) 5.以下不正确的说法是【 D 】。 A)在不同函数中可以使用相同名字的变量。 B) 形式参数是局部变量。 C) 在函数内定义的变量只在本函数范围内有效。 D)在函数内的复合语句中定义的变量在本函数范围内有效。 二. 填空题 1.下面程序的执行结果是【 111 】 main() { increment( ); increment( ); increment( );} increment( )
{int x=0; printf(%d”,x} 2.下面程序的执行结果是【15,30】 #include<stdio.h> mainO static int y[2]=(15,25); int z=20; z=shift(y[0]); printf("%d.%d\n".y[0].z). shift(a) int a: 3本=2: return(a); 3.以下程序的运行结果是【 2,3,4,5,6 3,4,5,67, 3.4.5,6.7, 0 static int a5=2.3.4.5.6: int foi=0:i<5:i++) printf("%da prt(a). printf("n") for(i=0:i<5:i++) prt(m) int m5]: int i for(j=0j<5j++) m=m+1; printfd
{ int x=0; x+=1; printf(“%d”,x);} 2.下面程序的执行结果是【15,30 】 #include<stdio.h> main() { static int y[2]={15,25}; int z=20; z=shift(y[0]); printf("%d,%d\n",y[0],z); } shift(a) int a; { a*=2; return(a); } 3.以下程序的运行结果是【 2,3,4,5,6, 3,4,5,6,7, 3,4,5,6,7, 】。 main() { static int a[5]={2,3,4,5,6}; int i; for(i=0;i<5;i++) printf("%d,",a[i]); printf("\n"); prt(a); printf("\n"); for(i=0;i<5;i++) printf("%d,",a[i]); printf("\n"); } prt(m) int m[5]; { int j; for(j=0;j<5;j++) { m[j]=m[j]+1; printf("%d,",m[j]); }
4.下面程序的执行结果是【123】 main() {increment(方 increment()方 increment() increment() static int x=0; X+=1: printf(%d”,x} 5.下面程序的执行结果是【Main:x=5y=1n=1 Fancx=6 y=21 n=11 Main:x=5 y=1 n=1 Fanc:x=8 y=31 n=21 int n=1: in0 (static int x-;int y. y=n; printf("Main:x=%2d y=%2d n=%2d\n",x,y,n); func(). func() static int x=4;int y=10; X=X+2: n=n+10: y=y+n printf("Func:x=%2d y=%2d n=%2d\n",x.y,n). 三.编程题 1.已有变量定义和函数调用语句:inta=l,b=-5,c;c=fun(a,b)fun函数的作用是计 算两个数之差的绝对值,并将差值返回调用函数,请编写程序。 2.写一函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。 3.用递归法将 个整数n转换成字符串,例如输入483,应输出字符串“483” n的位数不确定,可以是任意位数的整数
} 4.下面程序的执行结果是【 123 】 main() { increment( ); increment( ); increment( );} increment( ) { static int x=0; x+=1; printf(“%d”,x);} 5.下面程序的执行结果是【 Main:x=5 y=1 n=1 Fanc:x=6 y=21 n=11 Main:x=5 y=1 n=1 Fanc:x=8 y=31 n=21 】 int n=1; main() { static int x=5;int y; y=n; printf(“Main: x=%2d y=%2d n=%2d\n”,x,y,n); func(); printf(“Main: x=%2d y=%2d n=%2d\n”,x,y,n); func();} func() { static int x=4;int y=10; x=x+2; n=n+10; y=y+n; printf(“Func: x=%2d y=%2d n=%2d\n”,x,y,n);} 三. 编程题 1. 已有变量定义和函数调用语句:int a=1,b=-5,c; c=fun(a,b);fun 函数的作用是计 算两个数之差的绝对值,并将差值返回调用函数,请编写程序。 2. 写一函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。 3. 用递归法将一个整数 n 转换成字符串,例如输入 483,应输出字符串“483”。 n 的位数不确定,可以是任意位数的整数