浙师大 C语言 实验10函数2+答案

上机实验十 函数与程序结构

学号 姓名

一.目的要求

1. 掌握函数声明、定义和调用的基本方法 2. 掌握用递归函数解决问题的方法。 3. 掌握局部变量与全局变量的作用域区别 4. 掌握数组作为函数参数的基本方法。 二.实验内容

【实验题1】

分析如下:

Line 2中的变量k是_全局_变量;而Line 10中的k是__局部_变量。程序输出结果是k=1,k=1,k=1 。 如果将第10行改为“static int k=1;”,该k是_局部静态_变量,程序输出结果是 k=1,k=2,k=1 。 如果将第10行改为“ k=1; ”,该k是_全局//Line 2__变量,程序输出结果是 k=1,k=1,k=2 。

如果将第10行改为空语句“ ; ”后,此时Fun中的k是_全局//Line 2_变量,程序输出结果是 k=1,k=2,k=3 。

#include int k = 1; //Line 2 void Fun(); int main() { int i; for(i = 0; i < 2; i++) Fun(); printf(\} void Fun() { int k = 1; //Line 10 printf(\ k++; }

【实验题2】程序填空:输入一个整数n (1≤n≤10),再输入n个整数,将它们按升序排列后输出。 程序分析_选择法:

(1) 由于n最大是10,需要定义一个长度为10的整型数组a; (2) 整个排序只需要确定前n-1个元素(a[0] ~a[n-2]),最后一个元素a[n-1]无需另外处理;

(3) 在确定a[i](i=0,1,…,n-2)时,先将a[i]本身看成最小,即令k=i, 并将a[k]与后面的元素a[j](j=i+1,

i+2, …, n-1)一一比较,

如果a[j]< a[k],则更新k的值:k =j。 找出对应于下标i的最小元素a[k]后,交换a[i]与a[k]。

(4) 上述排序算法的代码:

运行程序,输入n: 5,输入5个整数:23 -9 14 0 -3 ,显示结果为:

如果是按从大到小的降序排列,语句行Line 13 应改为: if( a[k]> a[j] ) k=j;

#include int main() { int i, j, k,n, temp, a[10]; printf(\ while ( scanf(\n<1 || n>10 ); //输入n, 1<=n<=10 printf(\ for(i=0; ia[j] ) k=j; //Line 13 temp=a[i]; a[i]=a[k]; a[k]=temp; //a[i]与a[k]交换 } for(i=0; i

将上述的程序用函数调用的方式去实现。定义一个sort()函数来实现数组的排序; 在main()函数中调用sort()函数来实现数组的排序,并将结果输出。

#include void sort ( int a[ ], int n ) ;// 函数声明 int main() { int i, n, a[10]; printf(\ while ( scanf(\n<1 || n>10 ); //输入n, 1<=n<=10 printf(\ for(i=0; ia[j] ) k=j; temp=a[i]; a[i]=a[k]; a[k]=temp; //a[i]与a[k]交换 } }

【编程题3】:输入一个以回车结束的字符串(有效长度少于80),再输入一个字符,统计其在字符串中出现的次数。

如:输入asdabc 再输入 a 答案为 2 要求用函数调用的形式,提示:

主函数的功能:输入字符串,输入字符,调用count()函数统计次数,输出结果。 count()函数功能:统计出次数,将结果返会主函数。

#include #include int count(char s[],char c) { int i,n=0; for(i=0; s[i]!='\\0'; i++) if(s[i]==c) n++; return n; } void main() { char array[80],c; printf(\输入一个字符串:\ gets(array); printf(\输入一个要统计的字符:\ c = getchar(); //scanf(\ printf(\字符%c在字符串中出现%d次\\n\}

【实验题4】程序填空:定义递归函数reverse(n),功能是实现对一个整数逆序输出,如输入整数153,则输出3 5 1. 算法分析:(1)递归函数reverse(int n)的基本思想:首先直接输出整数n的最低位(n),然后检查去除该最低位之后,n是否还存在高数位,若有,则对去除最低位的剩余部分(n/10)用递归函数reverse()予以输出;

(2)主函数main()负责: 输入整数n;若n为负数,取相反数;调用reverse (). # include void reverse ( int n ) ; //函数声明 int main ( ) { int n=12345; printf(\ scanf(\ if(n<0) n = -n; printf(\ reverse(n) ;//调用reverse函数 printf(\} void reverse ( int n ) //定义递归函数 { printf(\ n ); //输出最低位数 if ( n> 9 ) //如果还有高位 reverse( n/10 ); //递归处理剩余部分 } void reverse2 ( int n ) //定义非递归函数 { do { printf(\ n ); //输出末位数 n= n/10; //除去末位数 } while ( n>0 ); }

运行程序,并输入:12345, 则输出: 5 4 3 2 1

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4