C程序设计实验指导书 - 2014版 下载本文

实验五 数组

选做题

1.找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。(习题7.8) 应当至少准备两组测试数据: ①二维数组有鞍点

9 80 205 40 90 -60 96 1 210 -3 101 89 ②二维数组没有鞍点 9 80 205 40 90 -60 196 1 210 -3 101 89 45 54 156 7 用scanf函数从键盘输入数组各元素的值,检查结果是否正确。题目并未指定二维数组的行数和列数,程序应能处理任意行数和列数的数组。因此,从理论上来说,应当准备许多种不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需准备典型的数据即可。 如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用scanf()函数。请同学们修改程序以实现之。 2.学生成绩排名

(1)定义一个数组a[11],用以存放学生的成绩; (2)从键盘输入10个学生成绩;

(3)采用冒泡法,将学生成绩按照从高到低进行排序;

(4)再输入一个学生的成绩,将此成绩按照排序规律插入原学生成绩数组;

(5)将排好序的成绩单进行反序存放,即原来是从高到低,现在改为从低到高排列; (6)将以上每一步骤的结果均打印输出,验证程序是否正确实现题目要求

知识点描述及编程体会

实验成绩 签名

年 月 日

35

实验六 函数

实验六 函数(4学时)

目的要求

(1)掌握定义函数的方法;

(2)掌握函数实参与形参的对应关系以及“值传递”的方式; (3)掌握函数的嵌套调用方法;

(4)掌握全局变量和局部变量动态变量、静态变量的概念和使用方法。 (5)学习对多文件程序的编译和运行。

上机内容

一般示例

【例1】上机调试下面的程序,记录系统给出的出错信息,并指出出错原因。

#include void main() {

int,y;

printf(―%d\\n‖,sum(x+y)); int sum(a,b) { int a,b; return(a+b); } }

【例2】写一个判断素数的函数,在主函数中输入一个整数,输出是否素数的信息。 源程序如下: #include /*此函数用于判别素数*/ #include int prime( ) int prime(int); { void main() { int number; printf(\请输入一个正整数:\\n\ scanf(\ if (prime(number)) printf(\是素数.\\n\ else printf(\不是素数.\\n\ } } 36

实验六 函数

【提示】判断素数的算法,我们在以前学习循环的时候已经学过了,在这里只是把这个算法用函数的形式表示出来。这里我们要注意函数的定义、声明的方法和格式。 【例3】写一函数,是给定的一个二维数组(N×N)转置,即行列互换。请你总结数组作为函数参数时的用法。 源程序如下: #include #define N 4

void convert(int arr[N][N]); void main() { int i,j; int array[N][N]; printf(\输入数组元素:\\n\ for (i=0;i

数组作为函数参数用法总结:

void convert( ) { } 37

实验六 函数

【例4】写两个函数,分别求两个正数的最大公约数和最小公倍数,用主函数调用这两个函数并输出结果。两个正数由键盘输入。 源程序如下: #include int hcf( ) Int hcf(int ,int ); { int lcd(int u,int v,int h); { return(u*v/h); } void main() { int u,v,h,l; scanf(\ h=hcf(u,v); printf(\ l=lcd(u,v,h); printf(\ } int lcd(int u,int v,int h) { } return(u*v/h); }

你能不能用全局变量的方法,分别用两个函数求最大公约数和最小公倍数?请将程序写在下面。

38