南京邮电大学高级语言程序设计实验四(一维与二维数组实验)

阅读: 评论:0

南京邮电大学高级语言程序设计实验四(一维与二维数组实验)

南京邮电大学高级语言程序设计实验四(一维与二维数组实验)

文章目录

    • 一、 实验目的和要求
    • 二、实验环境(实验设备)
    • 三、实验过程
      • 实验题目(2)
      • 实验题目(3)
    • 四、实验小结(包括问题和解决方法、心得体会、意见与建议、实验出错信息及解决方案等)
      • (一)实验中遇到的主要问题及解决方法
      • (二)实验心得
      • (三)意见与建议(没有可省略)

一、 实验目的和要求

(1)掌握一维数组的定义与初始化,会正确访问数组元素,并利用循环对元素成批访问。
(2)掌握二维数组的定义与初始化,会利用双层循环对元素访问,实现一些基本算法。
(3)会用一维数组作为参数实现特定功能的函数,能正确实现一维数组中的一些经典算法。

二、实验环境(实验设备)

硬件: 微型计算机
软件: Windows 操作系统、Microsoft Visual Studio 2010
实验题目(1)【见实验教材实验五的题目1】:编写程序exp5_1.c,在主函数中定义一维数组int array[10],自定义以下函数:输入数组元素,输出数组元素、求数组元素平均值、输出数组元素最大值、输出数组元素最小值、查找某数值元素是否存在(若存在,请输出下标)、给数组元素排序,要求在主函数中对各子函数进行调用和测试。

三、实验过程

实验解答:

① 写出完整的源程序代码并做适当注释:

#include<stdio.h>
#define N 10void input(int array[], int n) 
{int i;printf("please input %d numbers:",n);for (i = 0; i < n; i++){scanf("%5d", &array[i]);}printf("n");
}
void print(int array[], int n)  
{int i;printf("The elements are:");for (i = 0; i < n; i++){printf("%5d", array[i]);}printf("n");
}
double aveNum(int array[], int n)  
{int i, sum = 0;for (i = 0; i < n; i++){sum += array[i];}return sum * 1.0 / n;
}
int maxNum(int array[], int n)  
{int i, max;max = array[0];for (i = 1; i < n; i++){if (array[i] > max){max = array[i];}}return max;
}int minNum(int array[], int n)  
{int i, min;min = array[0];for (i = 1; i < n; i++){	if (array[i] < min){min = array[i];}}return min;
}int find(int array[], int n, int x)   //查找下标 
{int i = 0;while (i < n){if (x == array[i]){break;}i++;}return i;
}void bubbleSort(int array[], int n)  //数组排序 
{int i, j, temp;for (i = 0; i < n - 1; i++)for (j = n - 1; j > i; j--)if (array[j] < array[j - 1]){temp = array[j - 1];array[j - 1] = array[j];array[j] = temp;}
}int main()
{int array[N], x, n, pos, max, min;double ave = 0;do            {printf("please enter the number of elements(1<=number<=10):n");scanf("%d", &n);} while (n<1 || n>N);input(array, n);print(array, n);ave = aveNum(array, n);printf("The avenum is %fn", ave);max = maxNum(array, n);printf("The maxnum is %dn", max);min = minNum(array, n);printf("The minnum is %dn", min);printf("please input x be searched:");scanf("%d", &x);pos = find(array, n, x);if (pos < n){printf("value=%d,index=%dn", x, pos);}else{printf("Not present!n");}printf("new order");bubbleSort(array, n);print(array, n);printf("n");return 0;
}

实验题目(2)

【见实验教材实验五的题目2】:编写程序exp5_2.c,定义一个3*3的矩阵,要求实现读入矩阵、输出矩阵、矩阵转置、输出矩阵主对角线元素之和,所有功能均采用子函数实现。

实验解答:

①源程序exp5_2.c的源代码如下:

#include<stdio.h>
#define ROW 3
#define COL 3void input(int array[][COL],int n)
{int i,j;printf("please input 9 intergers:");for(i=0;i<ROW;i++){for(j=0;j<COL;j++){scanf("%4d",&array[i][j]);}}
}void print(int array[][COL],int n)
{int i,j;printf("before transpose:n");for(i=0;i<ROW;i++){for(j=0;j<COL;j++){	printf("%4d",array[i][j]);}printf("n");}
}void transposition(int array[][COL],int array2[][ROW],int n)
{int i,j;for(i=0;i<COL;i++){for(j=0;j<ROW;j++){array2[i][j]=array[j][i];}}printf("After transpose:n");for(i=0;i<COL;i++){for(j=0;j<ROW;j++){printf("%4d",array2[i][j]);}printf("n");}
}int getSum(int array[][COL],int n,int diag[3])
{int i,sum=0;for(i=0;i<3;i++){diag[i]=array[i][i];sum+=diag[i];}return sum;
}int main(){int array[ROW][COL], array2[COL][ROW], diag[3], sum;input(array, 3);print(array, 3);transposition(array, array2, 3);sum=getSum(array, 3, diag);printf("Sum of main diagonal elements:%dn", sum);return 0;
}

②输入的数据及运行结果是:

输入的数据:1 3 5 7 9 2 4 6 8 
运行的结果:
Before transpose:
1  3  5
7  9  2
4  6  8
After transpose:
1  7  4
3  9  6
5  2  8
Sum of main diagonal elements :  18

实验题目(3)

【见实验教材实验五的题目6】:编写程序exp5_6.c,请判断花瓶是谁打碎的。教师花瓶碎了,班级只有四个小同学,老师询问小同学,已知是其中1人打碎的,还知道4人中每个人要么是诚实的,要么总是说谎的。
小同学回答老师的问题是:
甲说:“乙没有打碎,是丁打碎的。”
乙说:“我没有打碎,是丙打碎的。”
丙说:“甲没有打碎,是乙打碎的。”
丁说:“我没有打碎。”
根据四人回答判断谁打碎了花瓶。

实验解答:

①源程序exp5_6.c的源代码如下:

#include <stdio.h>
int main()
{int array[4]={0},i;for(i=0;i<4;i++){array[i]=1;if(array[3]+array[1]&&array[2]+array[1]&&array[0]+array[1]){printf("打碎花瓶的是:%dn",i);break;}array[i]=0;}printf("(0,1,2,3别代表甲,乙,丙,丁)n");return 0;
}

②运行结果是:

打碎花瓶的是:1
(0,1,2,3分别代表甲,乙,丙,丁)

四、实验小结(包括问题和解决方法、心得体会、意见与建议、实验出错信息及解决方案等)

(一)实验中遇到的主要问题及解决方法

  1. 无法理解“要么说真话,要么说假话”,以及如何用代码表示其意义。听了老师的讲解和提示后,自己思考后写出来。

(二)实验心得

  1. 学会了矩阵的转置,冒泡排序,以及矩阵元素及数组元素的交换。
  2. 熟悉了定义函数时应该给的返回值类型。

(三)意见与建议(没有可省略)

本文发布于:2024-02-05 07:35:55,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170727523164531.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23