高级语言程序设计实验任务书
ave= ; printf (\ printf (\ for (i=0; i if ( ) printf(\} 8. 综合编程题:打印如下杨辉三角形 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 编程点拨: 杨辉三角形有如下特点: ① 只有下半三角形有确定的值; ② 第一列和对角线上的元素值都是1; ③ 其它元素值均是前一行同一列元素与前一行前一列元素之和。第16页 高级语言程序设计实验任务书 实验五 函数与编译预处理 一、实验目的 1. 掌握定义函数的方法。 2. 掌握函数实参与形参的对应关系以及“值传递”的方法。 3. 掌握函数的嵌套调用和递归调用的方法。 4. 掌握全局变量和局部变量,动态变量、静态变量的概念和使用方法。 二、实验内容和步骤 1. 阅读程序,通过调试该程序,熟悉函数的调用方法及单步跟踪键。 #include { void fun(int i, int j, int k); int x,y,z; x=y=z=6; fun(x,y,z); printf(\} void fun(int i, int j, int k) { int t; t=(i+j+k)*2; printf(\} 2. 阅读程序注意函数调用过程中形参、实参的关系。 #include void swap (int ,int); printf(\swap(x,y); printf(\ } void swap (int m,int n) { int temp; printf(\temp=m;m=n;n=temp; printf(\} 把用户自定义函数swap()中的形式参数m和n对应改成x和y,使其与实参变量同名,再用F7 第17页 高级语言程序设计实验任务书 跟踪程序的运行,看看有什么变化。 相关知识:形参具有“用之则建,用完则撤”的特点。在函数定义时,函数名后面圆括号内的参数称为形参;在函数调用时,函数名后面圆括号内的参数称为实参。对于实参,在调用函数中对其进行定义时,不仅指明它的类型,而且系统还为其分配存储单元。而对于形参,定义时仅仅只是指明它的类型,并不在内存中为它们分配存储单元,只是在调用时才为其分配临时存储单元,函数执行结束,返回调用函数时,该存储单元立即撤销。 3. 程序是实现求素数的,请填空完成该程序,并上机运行测试。 #include ; /* 申明求素数函数 */ printf(\scanf(\ ; /* 调用求素数函数 */ } void prime(int n) { int i,k; k=sqrt(n); for(i=2;i<=k;i++) if (n%i==0) break; if(i>=k+1) printf(\else printf(\ } 4. 程序的功能是从键盘上输入的若干个数并求出最大值。请填空完成该程序。 #include int s[10], max; /* Findmax()函数的申明 */ ; printf(\ /* 输入10个数据到s数组中 */ ; /* 调用Findmax函数 */ ; for (i=0;i<10; i++) printf(\ 第18页 高级语言程序设计实验任务书 } printf(\ max is %d \ int Findmax( int x[ ], int n ) { int max,i; max=x[0]; for ( i=1; i 相关知识:练习形参是数组的函数申明、调用格式;复习数组的输入方法。 5. 程序的功能是从键盘上输入的若干个数按升序排序。请调试检查该程序中的错误,程序如下: #include void sort( int x[n], int n ) { int i, j, temp,min; for ( i=0; i for(j=i+1;j if ( x[j] < x[min]) min=j; float s[100], j ; printf(\for (i=0; scanf(\ s[i]=j; sort(s, i); for (k=0; k printf( \printf(\ if(min!=i) { temp=x[i]; x[i]=x[min]; x[min]=temp; } } } 错误提示:形参和实参的数据类型不一致;一般形参数组在说明时不指定数组的长度,而 第19页 高级语言程序设计实验任务书 仅给出类型、数组名和一对方括号;用户自定义函数sort()没有申明过。 注意:for (i = 0; scanf(\这一行中for语句第二个表达式的使用形式,此处用了scanf()函数的出错来结束输出循环。请读者查一下教材后面的附录,看看什么时候scanf()函数返回0,此时就可以结束循环。 6. 阅读如下递归程序,其功能是什么?上机调试。 #include void dtoo( int n ,int r ); printf(\ scanf(\ printf( \ a number in (2,8,16):\ scanf(\ dtoo(m,k); } void dtoo( int n ,int r ) { if(n>=r) dtoo(n/r,r); printf(\ } 7.预习下面程序,写出预习结果,上机验证并写出分析。 变量的作用范围 # define LOW 10 # define HIGH 5 # define CHANGE 2 int i = LOW ; #include { int workover ( int i ) , reset ( int i ); int i = HIGH ; reset ( i / 2) ; printf(\ reset ( i = i / 2) ; printf(\ reset ( i / 2) ; printf(\ workover ( i ); printf(\ } 第20页