实验四 二维数值数组
数组实验报告反思心得

一、实验背景本次实验旨在通过学习数组的相关知识,掌握数组的定义、初始化、赋值、引用等方法,以及数组的操作和应用。
通过本次实验,我对数组有了更深入的理解,同时也对编程思维和算法设计有了更全面的提升。
二、实验过程1. 实验一:一维数组的定义与初始化实验过程中,我首先学习了如何定义一维数组,以及如何对数组进行初始化。
通过实验,我掌握了以下知识:(1)一维数组的定义格式:类型符数组名[常量表达式];(2)一维数组的初始化方法:在定义数组时,可以在方括号内指定数组的长度,并为数组元素赋初值。
2. 实验二:二维数组的定义与初始化在实验二,我学习了二维数组的定义与初始化。
通过实验,我掌握了以下知识:(1)二维数组的定义格式:类型符数组名[常量表达式1][常量表达式2];(2)二维数组的初始化方法:可以在定义数组时,指定数组的行数和列数,并为数组元素赋初值。
3. 实验三:数组元素的引用与赋值在实验三,我学习了如何引用数组元素,以及如何为元素赋值。
通过实验,我掌握了以下知识:(1)数组元素的引用方法:数组名[下标];(2)数组元素的赋值方法:使用赋值运算符“=”。
4. 实验四:数组的操作与应用在实验四,我学习了数组的操作与应用,包括冒泡排序、选择排序等。
通过实验,我掌握了以下知识:(1)冒泡排序算法:通过比较相邻元素的大小,将较大的元素交换到后面,直到整个数组有序。
(2)选择排序算法:通过比较相邻元素的大小,选择最小(或最大)的元素放到数组的起始位置,然后继续对剩余的元素进行排序。
三、实验反思1. 数组的定义与初始化在实验过程中,我深刻体会到了数组在编程中的重要性。
数组作为一种数据结构,可以有效地存储和操作一组具有相同数据类型的元素。
通过对数组的定义与初始化,我学会了如何创建一个符合实际需求的数组,并为数组元素赋初值。
2. 数组元素的引用与赋值在实验过程中,我学会了如何引用数组元素,以及如何为元素赋值。
这使我更加熟练地掌握了数组的使用方法,为后续的编程实践打下了基础。
实验四 数组应用程序设计实验

实验四数组的应用程序设计一、实验目的1.掌握C语言的一维数组和二维数组的应用;2.掌握常用的排序算法;3.掌握字符数组和字符串函数的使用;二、实验内容编写程序,完成如下功能1. 编写程序实现如下功能,输入了20个整数,把这些整数存放在一个数组中,并且输出其中的最大者与最小者及他们在数组中的下标、这20个数的和及它们的平均值。
2. 从键盘输入15整数,对这些数进行从大到小排序后按次序显示各个数。
3. 在整型数组M中存放12个非0 整数,使用scanf( )函数将12个整数从键盘读入到M中,并要求M中有正数和负数,编写程序,将数组M中的所有正数存放在数组的前面,负数存放在数组的后面,并显示数组M中的各个元素的值。
4.从键盘输入一个字符串并存入字符数组中,分别统计其中的数字字符、字母、空格和其它字符的个数。
5. 从键盘输入一个字符串(小于50个字符,该字符串中可以含有字母、数字和空格),并存入字符数组strArray中,将数组strArray中的字符颠倒后存入另外一个数组reverseArray 中(也就是第一个字符变成最后一个字符,第二个字符变成倒数第二个字符…,), 再把reverseArray数组中的各个字母变成其后的第5个字母(如A变成F,B变成G,…,Z变成E等),分别显示这两个数组中的各元素。
6*. 从键盘输入16个数组成一个4行4列的二维数组,(1)求对角线上的各个元素的和与积;(2)求所有靠边元素的和与积;(3)求所有不靠边元素的和与积7*. 已知有两个矩阵:求矩阵的乘积:C = AB,并按行列显示矩阵C的各个元素。
8*.使用随机函数rand( ), 产生50个[0,100]之间的整数,并把这一批整数存在一个整型数组A中,定义另外一个整形数组B,请把A数组中的数按照从大到小的顺序放入数组B中,最后,分别显示数组A和数组B的各个元素。
提示:随机函数int rand(void) 在头文件stdio.h中,该函数可以返回一个在[0,32767]之间的整数,本实验后面附有例子。
湖北理工学院C语言实验四

av+=a[i];
printf("av=%f\n",av);
}
解答:
(1)源代码:
#include <stdio.h>
void main( )
{
int i,n,a[10];
float avg;
n = 10;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
}
printf("\n");
return;
}
}
}
(2)运行结果:
(3)运行结果分析:
6.输入十个互不相同的整数并存在数组中,找出最大元素,并删除。
解答:
#include <stdio.h>
int main()
{
int a[10];
int i,k;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
#include <stdio.h>
void main( )
{int i, a[5], sum = 0;
scanf("%d,%d,%d,%d,%d", a );
for (i = 0; i <= 4; i ++)
sum += a[i];
printf("sum = %d \n", sum);
}
该程序中有哪些错误?如何修改?写出正确运行后的结果。
for(i=0;i<n;i++)
实验四实验报告-数组

实验四函数一、实验目的1.掌握函数的定义、函数的说明和调用。
2.掌握函数的参数及其传递方式,函数值的正确返回。
二、实验内容1.[目的]掌握标准库函数的说明和调用方法。
[题目内容]编写一个程序,首先显示一个菜单,然后根据用户的选择,输入数据后,执行相应的操作。
[输入]用户选择和函数自变量值[输出]如下菜单:=======MENU======1.。
sin2.。
cos3.。
pow4.。
sqrt0.。
exit==================[提示]使用标准库函数、多分支选择结构。
源代码:#include <stdio.h>#include <math.h>void main(){int choice,n;double x,z;printf ("======MUNE======\n");printf ("1..........sin\n");printf ("2..........cos\n");printf ("3..........pow\n");printf ("4..........sprt\n");printf ("0..........exit\n");printf ("请输入:");scanf ("%d",&choice);switch (choice){case '1':{printf ("请输入角度:");scanf ("%lf",&x);x=(x*3.14/180);z=sin(x);printf ("%lf的sin值为:%lf",x,z);break;}case '2':{printf ("请输入角度:");scanf ("%lf",&x);x=(x*3.14/180);z=cos(x);printf ("%lf的cos值为:%lf",x,z);break;}case '3':{printf ("请输入x和n:");scanf ("%lf%d",&x,&z);z=pow(x,n);z=sin(x);printf ("%lf的sin值为:%lf",x,z);break;}case '4':{printf ("请输入x:");scanf ("%lf",&x);if (x>=0){z=sprt(x);printf ("%lf的sqrt值为:%lf",x,z);}elseprintf ("Wrong");break;}case '0':{break;default:printf ("Wrong");}printf("\n");}2.[目的]掌握用户自定义函数的定义、函数的说明和调用方法。
c语言二维数组体会

c语言二维数组体会C语言是一种高级编程语言,它提供了一种以结构化形式编写程序的方法。
在C语言中,数组是一种重要的数据结构,它允许我们存储和操作多个相同类型的数据。
而二维数组是C语言中的一种特殊数组形式,它可以理解为一个由多个一维数组组成的矩阵。
在C语言中,二维数组的操作和使用非常灵活,通过对二维数组的学习和理解,我对C语言的掌握和应用能力得到了提升。
首先,二维数组的定义和初始化是学习二维数组的第一步。
在C语言中,我们可以通过使用方括号来定义一个二维数组,其语法形式如下:datatype arrayname[size1][size2];其中,datatype表示数组中元素的数据类型,arrayname表示数组的名称,size1表示二维数组的行数,size2表示二维数组的列数。
例如,我们可以定义一个3行4列的整型数组:int arr[3][4];这样,我们就创建了一个名为arr的二维数组,它包含3行4列的整型元素。
二维数组的初始化可以分为静态初始化和动态初始化两种方式。
静态初始化是在定义数组的同时给数组元素赋初始值,它的语法形式如下:datatype arrayname[size1][size2] = { {val1, val2, ...}, {val1,val2, ...}, ...};其中,val1、val2等表示各个元素的初始值。
例如,我们可以定义一个3行4列的整型数组并进行静态初始化:int arr[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };这样,数组arr的第一行元素为1、2、3、4,第二行元素为5、6、7、8,第三行元素为9、10、11、12。
动态初始化是在定义数组后通过遍历的方式为数组元素逐个赋值,它的语法形式如下:for (int i = 0; i < size1; i++) {for (int j = 0; j < size2; j++) {arrayname[i][j] = value;}}其中,value表示待赋给数组元素的值。
二维数组的实验报告

int main()
{ int a[100],i,n,k;
do
{
printf("输入数组的元素个数:\n");
scanf("%d",&n);
}while(n<0||n>100);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
{
sum+=array[i];
if(max<array[i])
max=array[i];
if(min>array[i])
min=array[i];
}
average=sum*1.0/10;
printf("数组的最大值与最小值,平均值如下\n");
printf("%5f%15f%15f\n",max,min,average);
return 0;
}
实验结果:
2,实验2
#include<stdio.h>
void Print(int array[],int length);
double Average(int array[],int length);
int GetMax(int array[],int length);
int Retrieve(int array[],int length,int x);
2.在main()中定义一个一维数组,从键盘读入数组元素,定义下列函数并在主函数中对各函数进行调用和测试。各自定义函数原型及功能分别如下:
A.打印函数,输出整个数组,数组名array,数组长度length,无返回值。
C语言实验二维数组的

1,题一:利用循环嵌套,外层控制行变化,然后通过一个二层循环首先可以寻找到当前行中得最大元素,记下其列号;再利用一个并列的二层循环到本列中再扫描各行,判断它是不是本列的最小元素,如果是,则是鞍点,输出对应的信息;否则,再扫描一行。程序中需要定义一个统计鞍点个数的变量,如果行都扫描结束还没有一个鞍点,说明该矩阵没有鞍点,给出相应额提示信息。
2,题二:(a)从结构化程序设计的角度来考虑,要设计两个函数来完成数次二维数组的功能,形参分别是行指针和列指针(b)如果列指针p要能正确访问二维数组arr的元素,首先需要定义该列指针,形式是int*p;zai p=*arr的前提下,通过指针q访问一个二维数组的元素arr[i][j],可以有这样集中后方法:q[i][j],*(q[i]+j),*(*(q+i)+j)和(*(q+i))[j]
题(4):用一维指针数组方式进行访问。
3题三:(a)动态二维数组空间的申请分为两步:第一,申请一维指针数组,分量个数=二维数组的行数,第二步;利用每一个一级指针元素再申请动态一维数组,分量个数=二维数组的行列数,这样二维数组的元素就可以表示为从p[0][0]一直到p[n-1][m-1](b)读入动态二维数组元素的方式与静态二维数组是一样的(c)释放动态空间:首先通过一维指针数组的每一个指针元素释放动态二维数组的空间,第二步:再通过二级指针变量释放动态一维指针数组空间。
课程名称高级语言程序设计实验项目二维数组编程练习实验项目类型验证演示综合设计指导教师李养群成绩一实验目的1掌握二维数组的定义初始化与使用方法会正确访问二维数组的元素2了解行指针列指针会利用他们来访问二维数组中得元素二实验步骤1了解操作环境2编写程序3对程序进行调试纠错三实验指导1题一
数据结构二维数组实验报告

数据结构二维数组实验报告————————————————————————————————作者:————————————————————————————————日期:数据结构(2013)实验报告04班级:XXXX姓名:XXX实验方式:上机成绩:教师批阅处:一、实验名称二维数组基本操作的编程实现二、实验目的二维数组基本操作的编程实现,掌握二维数组的建立、读取数据、压缩存储等基本操作的编程实现,存储结构可以在顺序结构或链接结构中任选,也可以全部实现。
也鼓励学生利用基本操作进行一些应用的程序设计。
三、实验内容修改程序补充推箱子游戏的遗缺的部分,使之能正常运行,逻辑结果正确。
之后增加至少一关自己的关数,墙体,箱子的最初位置,人的最初位置由自己设定,要求必须有解,而且有一定的破解难度。
主要的问题是部分移动方向的代码没有给出,另外计数器的整体工作不正常,更完善的修改包括启用栈结构实现后悔的机制。
1、补充左方向和上方向移动根据源程序提供的右方向和下方向移动的原码,只需将原码稍作修改就能完成移动功能了。
很明显上和下、左和右是两两对应的两个方向,所以只需将原码的‘+’、‘-’号相应修改即可。
但是,抵消人不动的情况中的“count--”不能改动。
2、计数器的改正刚开始游戏的时候,计数器的值应该为0,所以用以计数的变量应初始化为0。
当运行程序时,发现计数器的初始值为111。
所以找到计数器变量并将其致值为0。
而且,当修改好四个方向后,向左和上移动时,计数器的值没变化。
这里,要在条用左方向和上方向的下面,添加计数器,使每调用一次(走一步),计数器加1。
3、添加关数在原来的基础上,我添加了第四和第五两关。
地图原码及截图如下:int map4[roomsize+2][roomsize+2]={ //0,1,2,3,4,5,6,7,8,9,10{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},//0{-1,0,1,1,1,1,1,1,1,-1,-1}, //1{-1,0,1,0,4,2,2,2,1,-1,-1}, //2{-1,0,1,0,0,0,1,1,1,1,-1}, //3{-1,1,1,1,3,0,0,0,0,1,-1}, //4{-1,1,0,0,0,1,3,1,0,1,-1}, //5{-1,1,0,3,0,1,0,0,0,1,-1}, //6{-1,1,0,0,0,1,1,1,1,1,-1}, //7{-1,1,1,1,1,1,0,0,0,-1,-1}, //8{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},//9{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1} //10};int map5[roomsize+2][roomsize+2]={ //0,1,2,3,4,5,6,7,8,9,10{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},//0{-1,1,1,1,1,1,1,1,1,-1,-1}, //1{-1,1,0,0,0,0,0,0,1,-1,-1}, //2{-1,1,0,0,1,1,1,0,0,1,-1}, //3{-1,1,3,4,3,0,0,3,0,1,-1}, //4{-1,1,2,2,1,1,3,0,0,1,-1}, //5{-1,1,2,2,1,1,0,0,0,1,-1}, //6{-1,1,1,1,1,1,1,1,1,1,-1}, //7{-1,1,1,1,1,1,1,1,1,-1,-1}, //8{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},//9{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1} //10};第四关:游戏前游戏完成时图 1第五关:游戏前游戏完成时图 24、添加后退功能在本实验中添加的后退功能,只能后退一步。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四二维数值数组
一、实验目的
(1)熟悉C语言关于“数组”的语法规则。
(2)掌握C语言程序中关于数值“数组”的应用技巧。
(3)掌握一维数组和二维数组的定义、赋值和输入输出的方法;数组元素的存储形式和引用方法;
(4)掌握与数组有关的排序(选择法、冒泡法)、查找(顺序查找、折半查找)、有序数列的插入和删除操作等算法(特别是排序算法)
二、实验准备
1.C语言实现循环的方法
①数组的定义:
Int b[3][4]; \*二维数组b包含了3行4列个元素*\
②数组的赋初值:定义数组的同时给元素赋值,可以整体赋值
Int b[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; \*按行进行赋值*\
Int b[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; \*可以省略行下标,但不能省略列下标*\
Int b[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; \*也可以存储空间位序顺序赋值*\
③数组元素的引用:数组元素只能单个应用如a[3][2];
③数组元素的遍历:
二维数组用双重循环,外循环循环控制变量为行下标,内循环循环控制变量为列下标。
3.阅读以下程序,并分析其功能,调试运行程序后再分析其运行结果。
1 程序二,程序文件名为ex4-2.c。
(掌握二维数组的输入输出,和转置)
# include <stdio.h>
main()
{
int a[2][3]={{1,2,3},{4,5,6}}; //二维数组赋初值
int b[3][2],i,j;
for(i=0;i<2;i++) //转置算法
for(j=0;j<3;j++)
b[j][i]=a[i][j];
printf("数组a:\n");
for(i=0;i<2;i++) // 输出二维矩阵
{ for(j=0;j<3;j++)
printf("%5d",a[i][j]); //内循环一遍输出一行3个元素
printf("\n"); //输出一行后换行
}
printf("\n输出转置后的数组b:\n");
for(i=0;i<3;i++)
{ for(j=0;j<2;j++)
printf("%5d",b[i][j]); //内循环一遍输出一行2个元素
printf("\n"); //输出一行后换行
}
}
三、实验内容(按要求设计以下程序,并调试分析运行结果,此部分完成在实验报告上)
(1) 设计程序sy4-1.c,功能是如下所示规律构造二维数组下三角的前m行;
1
5 7
9 11 13
13 15 17 19
17 19 21 23 25
……
要求:在main函数中输入一整数m(1<=m<=10),输出该二维数组下三角的前m行。
(2) 设计程序sy4-2.c,任意输入一个一维数组a(n)(n<10),要求输出如下形式的二维数组。
其中n由操作人员从键盘输入指定。
a(1) a(2) …….a(n)
a(n) a(1) …….a(n-1)
…………
a(2) a(3) …….a(1)
如输入a(4):2,4,5,6,则二维数组是:
2 4 5 6
6 2 4 5
5 6 2 4
4 5 6 2
(直接建立二维数组不得分)
(3) 设计程序sy4-3.c,要求编写程序根据m的值(2<=m<=9),在m行m列的二维数组中存放如下所示的数据,由输出结果。
结果显示在屏幕上。
例如:如输入3
则输出:1 2 3
2 4 6
3 6 9
如输入5
则输出:1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
(4) 设计程序sy4-4.c,从键盘上输入矩阵的阶数n(n<10),然后按以下规律形成二维数组Anxn:A中第一行元素为1,2,……n;第二行元素为n+1,n+2,……2n; 第三行元素为2n+1,2n+2,……3n;……
然后计算:(1)A中所有不靠边元素之和sum1;(2)A的两条对角线元素之和sum2。
要求:将形成的二维数组Anxn和计算结果(1)(2)显示在屏幕上。
例如:输入矩阵的阶数为3,输出二维数组
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
sum1=34
sum2=68
(5) 设计程序sy4-5.c,从键盘输入m的值(2<=m<=9),并用双重循环给数组赋值,在m行m列的二维数组中存放如下所示的数据,并将结果输出在显示上。
例如:输入3 输入5
则输出: 则输出:
1 2 3 1 2 3 4 5
2 4 6 2 4 6 8 10
3 6 9 3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
分析:m的值是不定的,所以可以申明一个二维数组int a[10][10],当m=3时,只用前三行三列,当m=5时,就只用前五行五列;元素a[i][j]的值和他的行列下标可找到规律如下:每行的第0列元素a[i][0]=i+1;除第0列元素其它元素a[i][j]=a[i][0]*(j+1)。
四、实验要求:
“实验内容”中的任务要求在实验课上完成,若未完成请在下次上课前利用课外时间完成。
五、实验报告填写要求:
1、第一页用《攀枝花学院实验报告》纸,其后用《实验报告附页》纸。
2、第一页填写项目:
实验课程:计算机基础2-C语言实验项目:[本次实验名称] 实验日期:[本次实验日期]
系:班级:姓名:学号:
指导教师:
3、实验报告正文要求:
实验目的:(抄写本次实验目的)
实验仪器设备:PC机一套
实验步骤(内容):
(要求完成以上第三部分内容,编程题要求抄写题目并写出程序源代码,并记录程序的运行结果)
实验结论:(分析通过本次实验掌握的知识或是还有什么遗留问题)
4、实验报告写好后将完成的实验报告纸订(或粘)在一起,于下一次上课前交给指导老师。