上机实验十 函数与程序结构
学号 姓名
一.目的要求
掌握函数声明、定义和调用的基本方法
掌握用递归函数解决问题的方法。
掌握局部变量与全局变量的作用域区别
掌握数组作为函数参数的基本方法。
二.实验内容
【实验题1】
#include int k = 1;
#include
int k = 1; //Line 2
void Fun();
int main()
{ int i;
for(i = 0; i < 2; i++) Fun();
printf("k=%d", k);
}
void Fun()
{ int k = 1; //Line 10
printf("k=%d,", k);
k++;
}
分析如下:
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 。
【实验题2】程序填空:输入一个整数n (1≤n≤10),再输入n个整数,将它们按升序排列后输出。
程序分析_选择法:
由于n最大是10,需要定义一个长度为10的整型数组a;
整个排序只需要确定前n-1个元素(a[0] ~a[n-2]),最后一个元素a[n-1]无需另外处理;
在确定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]。
上述排序算法的代码:
#include int main()
#include
int main()
{int i, j, k,n, temp, a[10];
printf("Input n (1~10):");
while ( scanf("%d",&n), n<1 || n>10 ); //输入n, 1<=n<=10
printf("Input %d numbers:\n", n );
for(i=0; i
//选择法排序
for(i=0; i< n-1 ; i++)
{k= i ; //从a[i]到a[n-1]中找最小值
for(j= i+1 ; j< n; j++)
if( a[k]>a[j] ) k=j; //Line 13
temp=a[i];a[i]=a[k];a[k]=temp; //a[i]与a[k]交换
}
for(i=0; i
printf("\n");
}
运行程序,输入n: 5,输入5个整数:23 -9 14 0 -3 ,显示结果为:
如果是按从大到小的降序排列,语句行Line 13 应改为: if( a[k]> a[j] ) k=j;
[思考题]程序填空:
将上述的程序用函数调用的方式去实现。定义一个sort(