浙师大c语言上机实验10,浙师大 C语言 实验10函数2+答案.doc

本文探讨了函数声明、定义和调用的基本原理,重点讲解了局部和全局变量的作用域差异,并通过实例分析了不同类型的变量在程序执行中的行为。此外,文章还介绍了使用递归函数进行排序的方法,给出了选择法排序的详细步骤,并提供了程序代码。通过修改变量声明,展示了如何改变程序输出结果。最后,提出了将排序算法转化为函数调用的思考题。
摘要由CSDN通过智能技术生成

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

学号 姓名

一.目的要求

掌握函数声明、定义和调用的基本方法

掌握用递归函数解决问题的方法。

掌握局部变量与全局变量的作用域区别

掌握数组作为函数参数的基本方法。

二.实验内容

【实验题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(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值