实验七 二维数组程序设计
- 格式:doc
- 大小:58.50 KB
- 文档页数:7
实验报告课程名称程序设计实验项目名称数组班级与班级代码14级计算机科学与技术1班实验室名称(或课室) SS1-332专业计算机科学与技术任课教师学号:姓名:实验日期:2014年月日广东商学院教务处制一.实验目的1.熟练掌握一维数组、二维数组的定义、赋值、输入、输出方法。
2.熟练掌握字符数组和字符串函数的使用。
3.熟练掌握一位数组以及一位数组元素的存储关系。
4.熟练掌握一位数组和二维数组的使用以及在函数中的传递。
5.通过上机实践掌握与数组有关的算法。
二、实验内容上机题1输入并运行以下程序。
实验内容:用2个数组对第3个数组进行赋值#include<stdio.h>main(){int i,a[5],b[5],c[5];a[0]=2,a[1]=6,a[2]=4,a[3]=8,a[4]=9;b[0]=2,b[1]=7,b[2]=9,b[3]=5,b[4]=3;for(i=0;i<=4;i++){c[i]=a[i]*b[i];printf("c[%d]=%d\n",i,c[i]);}}实验步骤○1int a[5]:整型一维数组说明,a是数组名,也是数组的起始地址,该数组可以存储5个整数。
a[0]~a[4]也可以看成是变量标识字符,[]中的数值称为数组下标,下标从0开始。
○2数组赋值方法和一般变量一样。
例如,a[0]=2表示将2赋给a[0]。
运行结果上机题2 输入并运行以下程序。
实验内容:对不指明数组的数组进行赋值并用循环结构进行求和#include<stdio.h>main(){int sum,i;int a[]={5,8,4,6,4,3,8,2,4,5,6};sum=0;for(i=0;i<=10;i++)sum+=a[i];printf("sum=%d\n",sum);}实验结果实验小结○1对全部元素赋初值时,可以不指定数组长度,C编译系统自动根据初值个数来决定数组长度。
***软件类实验报告课程名称:C语言程序设计学号:姓名:班级:指导教师:开课学期:学院:***教务处⑶二维数组处理矩阵问题。
四、实验过程及内容:(运行结果请抓图到对应题目的下方)1.输入下面的程序,说明程序的功能并分析运行结果。
2.程序填空题。
加法口诀表。
输入1个正整数n(1≤n≤10),输出一张10以内的加法口诀表。
加数与被加数都不大于n(将加数、被加数、和放入一个二维数组中,再输出该数组),程序运行结果如图7-1所示。
填空完成程序。
实验结果:3. 程序填空题。
下列程序定义了M×N的二维数组,并在主函数中对其赋值。
函数fun()的功能是计算数组周边元素的平均值并作为函数值返回给主函数。
实验结果:4. 编程insert函数,insert函数的功能是:实现在字符串s的指定的下标位置插入另一个字符串t。
例如:字符串s为“I am a boy.”,t为“good ”,调用insert(s,7,t);则s结果为“I am a good boy.”。
主函数框架如下:#include "stdio.h"#include "string.h"void main(){char s[100]="I am a boy.",t[50]="good ";void insert(char s[],int n,char t[]);insert(s,7,t);puts(s);}请完成insert函数的定义。
实验结果:5. 程序改错题。
打印九九乘法表。
6.编写程序实现,求3*3矩阵两条对角线元素之和五、实验小结。
实验四二维数组基本操作的编程实现一、实验目的掌握二维数组的建立、读取数据、压缩存储等基本操作的编程实现,存储结构可以在顺序结构或链接结构中任选,也可以全部实现。
也鼓励学生利用基本操作进行一些应用的程序设计。
二、实验要求1. 修改程序:补充推箱子游戏的遗缺的部分,使之能正常运行,逻辑结果正确。
之后增加至少一关自己的关数,墙体,箱子的最初位置,人的最初位置由自己设定,要求必须有解,而且有一定的破解难度。
主要的问题是部分移动方向的代码没有给出,另外计数器的整体工作不正常,更完善的修改包括启用栈结构实现后悔的机制。
2.运行程序了解二维结构:稀疏矩阵的压缩和解压缩、生命繁衍模型、迷宫问题等,通过这些程序的运行过程或结果体会二维结构在程序设计中的重要性和实用性。
原始数据构建方式最简模式为:键盘输入。
其他的方式也在鼓励之中:数据内置,计算机自动生成,文件读入。
三、程序说明程序中用于建立栈的类//节点class Reback{public:int re_key_up;int re_key_down;int re_key_left;int re_key_right;int re_count;int re_movex;int re_movey;int re_movexold;int re_moveyold;int re_peopleflag;int re_Maptemp[11][11];Reback *next;Reback *before;};Reback *headp=new Reback;//头指针Reback *tailp=new Reback;//尾指针说明:此类用于存储每一步的游戏临时数据,用于回退程序中的功能函数void myDraw(HWND hWnd,HDC &dc);//界面的绘制void Key_D(HWND &hWnd,HDC &dc,int key_value);//响应键盘void init();//初始化函数void CueatMap(int AimMap[][11]);//创建地图void rememberbefore();//保存数据(入栈)void returnbefore();//还原数据(出栈)void delrecord();//删除数据(清空栈)功能的实现:1.游戏中的鼠标操作的实现:case WM_LBUTTONDOWN://鼠标左键点击消息{int x,y,i=0,j=0,count=0;x=LOWORD(lParam);//相对于窗口的位置y=HIWORD(lParam);if(x>=775&&y<=35){delrecord();//释放资源PostQuitMessage(0);//发送窗口销毁消息用于关闭窗口}else if(x>=0&&x<=774&&y<35){SendMessage(hWnd,WM_SYSCOMMAND,SC_MOVE+HTCAPTION,0);//发送消息}else if(x>600&&y>120&&x<720&&y<160){//上一关if(Mapdatacounnt-1>=0){Mapdatacounnt--;delrecord();}CueatMap(Mapdata[Mapdatacounnt]);InvalidateRect(hWnd, NULL, true);}else if(x>600&&y>200&&x<720&&y<240){//下一关if(Mapdatacounnt+1<Checkpoint){Mapdatacounnt++;delrecord();}CueatMap(Mapdata[Mapdatacounnt]);InvalidateRect(hWnd, NULL, true);}else if(x>600&&y>280&&x<720&&y<320){//后退一步returnbefore();InvalidateRect(hWnd, NULL, true);}else if(x>600&&y>410&&x<720&&y<450){ShellExecute(hWnd,"open","about.exe","","", SW_SHOW );}}说明:此处的设计方法为,先获取鼠标在窗口中的点击坐标,然后判断该坐标点是否在设定的区域,如果是,则执行相应的操作2.游戏中键盘操作的实现:/*键盘消息处理函数*/void Key_D(HWND &hWnd,HDC &hdc,int key_value){//用于响应键盘消息的处理//限定区域if(count!=4){rememberbefore();switch(key_value){case 38:{//在key_up-40之前进行判断看执行此计算后是否还在游戏区域内其他方向相同if((key_up-40+key_down+40)/40>0){key_up-=40;}}break;case 39:{if((key_left+key_right+40+40)/40<=9){key_right+=40;}}break;case 40:{if((key_up+key_down+40+40)/40<=9){key_down+=40;}}break;case 37:{if((key_left-40+key_right+40)/40>0){key_left-=40;}}break;}keyflag=key_value;InvalidateRect(hWnd, NULL, true);}说明:获取发生键盘消息时对应的键值,判断此时是否游戏过关,如果没过关就记录当前的游戏数据,响应方向键,如果过关就响应回车键,进入下一关,同时调用屏幕刷新函数。
实验七二维数组程序设计实验七二维数组程序设计一、实验学时 2学时二、实验目的(一)掌握二维数组的定义、赋值及输入输出的方法;(二)掌握与二维数组有关的算法如查找、矩阵转置等;(三)掌握在程序设计中使用数组的方法。
数组是非常重要的数据类型,循环中使用数组能更好地发挥循环的作用,有些问题不使用数组难以实现。
(四)掌握在VC++环境下上机调试二维数组程序的方法,并对结果进行分析。
三、预习要求熟悉二维数组的定义、引用和相关算法(求最大值、最小值)的程序设计,同时要掌握在程序设计中利用双重循环来实现二维数组的输入和输出。
四、实验内容(一)二维数组的初始化,即给二维数组的各个元素赋初值。
下面的几个程序都能为数组元素赋值,请输入程序并运行,比较这些赋值方法有何异同。
1.在定义数组的同时对数组元素分行初始化。
/* c7-1.c *//*二维数组的初始化(分行)*/#include "stdio.h"void main( ){ int i,j,a[2][3]={{1,2,3},{4,5,6}};for(i=0; i<2; i++){ for(j=0; j<3; j++)printf("%d ",a[i][j]);printf("\n");}}2.不分行的初始化。
把{ }中的数据依次赋值给数组的各个元素。
/* c7-2.c *//*二维数组的初始化(不分行)*/#include "stdio.h"void main( ){ int i,j,a[2][3]={1,2,3,4,5,6};for(i=0;i<2;i++){ for(j=0;j<3;j++)printf("%d ",a[i][j]);printf("\n");}}3.为部分数组元素初始化。
如:数组定义语句为:int i,j,a[2][3]={{1,2},{4}};4.可以省略第一维的定义,但不能省略第二维的定义。
1、有一个2×4的矩阵,要求编程序找出每一行中值最大的那个元素并与该行第1列的元素交换。
2、编写n个学生、m门课程的成绩处理程序:(1)n个学生、m门课程的成绩用二维整型数组描述(2)求出每个学生的总成绩、平均成绩。
(3)求出每门课程的平均成绩。
\3、程序填空,编写一个字符串复制程序,它的功能是把一个字符串的所有内容复制给另一个字符串,并输出复制后的字符串。
#include <stdio.h>void main(){char s1[80],s2[80];int i;printf("请输入字符串s1(<=80 字符)\n");gets(s1);for(i=0;_s1[i]!=’\0’_______;i++)s2[i]=s1[i];___s2[i]=’\0’;______printf("s2=%s\n",s2);printf("谢谢,按回车键结束");}4、若有数组str1[20]={"abcd"},str2[30]={"1234"}和str3[30]={"computer"},要得到str1[20]=“12cdcomputer”的结果,应如何编程,再把str1[20]=“12cdcomputer”与str2[30]={"1234"}做比较,如果str1数组的值较大,输出str1数组的实际长度。
(全部用字符串函数实现)问题:可以使用2个函数实现字符串的复制,对于此题,是否使用2个函数都可以达到题目要求,如不行,说明采用另一种时结果将变成什么样。
做完上述题目可让老师检查5、利用二维数组输入6个float类型数据(不超过4位),利用switch语句判断其位数,如果是3位或4位数据,输出其最高位,如果是1位或2位数据,输出其最低位(提示:先取整再判断)void bsnhk(float a){float *p;p=&a;}main(){}6、编写程序,读入若干国家的名称,按字典顺序排序输出。
实验七: 二维数组和函数程序设计1、实验目的熟悉二维数组和函数的综合编程方法进一步熟悉排序、查找等基本算法。
2、实验内容某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。
考试后要求:(1)计算每个学生的总分和平均分;(2)按总分成绩由高到低排出成绩的名次;(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。
2、实验要求用二维数组score存放每个学生各门课程的成绩,用一维数组num存放每个学生的学号,用一维数组sum存放每个学生的总分,用一维数组aver存放每个学生的平均分。
(1)用函数编程实现计算每个学生的总分;(2)用函数编程实现按总分由高到低对学生成绩排序,注意:排序时,一维数组sum 元素的变化应连同二维数组score和一维数组num和aver一起变化;(3)用函数编程实现打印名次表(4)用函数编程实现查找学号为k的学生在班级中的排名名次及相关成绩等信息,找不到时返回-1值。
程序画面如下: (仅供参考)Please enter the total number of the students(n<=30):5↙Enter No. and score as: MT EN PH99010 80 87 83↙99011 90 95 93↙99012 67 78 87↙99013 76 89 81↙99014 60 56 45↙Before sort:NO | MT EN PH SUM AVER-------------------------------------------------------------- 99010 | 80 87 83 250 8399011 | 90 95 93 278 9399012 | 67 78 87 232 7799013 | 76 89 81 246 8299014 | 60 56 45 161 54After sort:NO | MT EN PH SUM AVER-------------------------------------------------------------- 99011 | 90 95 93 278 9399010 | 80 87 83 250 8399013 | 76 89 81 246 8299012 | 67 78 87 232 7799014 | 60 56 45 161 54Please enter searching number:99012↙position: NO MT EN PH SUM AVER4 99012 67 78 74 232 77。
实验7
二维数组程序设计
7.1 实 验 目 的
1.掌握二维数组的定义、赋值和输入/输出的方法。
2.掌握二维数组元素在内存中的存储特点。
3.掌握与矩阵相关的算法,如矩阵转置、对角线元素求和等。
7.2 实 验 内 容
1.启动C语言环境,输入并执行如下程序:
#include <stdio.h>
main()
{
int i,j,n,sum=0;
int a[6][6];
scanf("%d", &n);
for(i=0; i<n; i++)
for(j=0; j<n; j++)
a[i][j] = i*n+j;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
printf("%d_ _", a[i][j]);
printf("\n");
for(i=0; i<n; i++)
sum += a[i][n-i-1];
printf("sum=%d\n", sum);
}
2.将程序补充完整,使其可以实现:统计3 × 4二维数组全体元素中正数、负数和零的个数。
3.求4 × 4二维数组中主对角线以上(包括主对角线)的元素之和。
4.将3 × 3矩阵的每行元素均除以该行上的主对角元素,输出调整后的3 × 3矩阵。
5.求两个3 × 3矩阵之和,输出新的矩阵。
35。
实验报告一、实验目的(1)掌握二维数组的定义、赋值、输入和输出及二维数组元素的引用方法。
(2)掌握二维数组的相关算法(矩阵行列互换、矩阵中特定数据的查找)。
(3巩固循环嵌套的使用。
(4)学习VC环境下调试二维数组程序的方法。
二、实验内容(1)输入5×5的数组,编写程序实现:1)求出对角线上各元素的和;2)求出对角线上行、列下标均为偶数的各元素之积;3)求出对角线上其值最大的元素和它数组中的位置。
(2)在屏幕上打印出如下杨辉三角形(要求打印出10行)11 11 2 11 3 3 11 4 6 4 11 5 1010 5 1三、实验原理(包括程序源代码、图表等)#include <stdio.h>void main(){int a[5][5];int i,j,n=1,s=0,m,x,y;for(i=0;i<5;i++){for(j=0;j<5;j++)scanf("%d",&a[i][j]);}for(i=0;i<5;i++)for(j=0;j<5;j++)if(i==j)s=s+a[i][j];printf("对角线上数的和为:%d\n",s);for(i=0;i<5;i++)for(j=0;j<5;j++)if(i%2==0&&j%2==0)n=n*a[i][j];printf("行、列下标均为偶数的数的积为:%d\n",n); m=a[0][0];for(i=0;i<4;i++){for(j=0;j<4;j++)if(i==j){if(a[i][j]<a[i+1][j+1]){m=a[i+1][j+1];x=i+1;y=j+1;}}}printf("对角线上最大数为:%d,其行下标为:%d,列下标为%d.\n",m,x,y); }#include <stdio.h>void main(){int a[10][10],i,j;for(i=0;i<10;i++){a[i][0]=1;a[i][i]=1;if(i>1)for(j=1;j<i;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];}for(i=0;i<10;i++){for(j=0;j<=i;j++)printf("%-4d",a[i][j]);printf("\n");}}四、实验结果(附截图)五、思考题如何引用二维数组中的元素?二维数组元素的表示形式是数组名【下标】【下标】。
Java程序设计实验报告实验名称数组的应用设计姓名班级学号成绩电子与信息工程学院实验内容:成绩的查询及排序1实验目的创建一维数组和二维数组,实现数组的赋值、遍历和排序。
2 实验要求编写一个Java应用程序,定义一个一维数组定义存储10个学生名字,定义一个二维数组存储10个学生的3门课程(英语、高数、大学物理)成绩。
要求1:实现任意学生成绩的查询;要求2:根据用户输入实现某一门课程的成绩从低到高排序;3 实验设计(此部分画出程序流程图)首先定义一个数组然后输入成绩要求输入学生名字4 实验具体内容(此部分给出具体代码)import java.util.*; public class Test{ public static void main(String[]args){ Scanner input=new Scanner(System.in); String[]name={"a","b","c","d","e","f","g","h","i","l"};//存储学生的名字int[][] grade={{50,60,70,80,90,10},{40,90,80,60,40,70},{60,80,70,60,4 0,90},{50,60,70,80,90,10},{60,80,70,60,40,90},{60,70,80,90,70,70},{60,80,70,60,40,90},{6 0,80,70,60,40,90},{70, 80,90,70,70,70},{60,80,70,60,40,90}};//存储学生各科成绩System.out.println("输入要查询成绩的学生名字:"); String chioce=input.nextLine(); for(int i=0;i<10;i++) { if(name[i].equals(chioce)) {System.out.println("学生:"+name[i]+"的成绩如下:"); System.out.println("C程序设计:"+grade[i][0]+"物理:"+grade[i][1]+"英语:"+grade[i][2]+"高数:"+grade[i][3]+"体育:"+grade[i][4]+"政治:"+grade[i][5]+"\n"); break;} } System.out.println("********************************** ********************"); System.out.println("输入要查询不及格人数的科目序号\n"); System.out.println("1,C程序设计2,物理3,英语4,高数5,体育6,政治"); int ch=input.nextInt(); int time=0; System.out.println("不及格的名单为:"); for(int i=0;i<10;i++) { if(grade[i][ch-1]<60) { time++; switch(i) { case0: System.out.println("a");break; case1: System.out.println("b");break; case2: System.out.println("c");break; case3: System.out.println("d");break; case4: System.out.println("e");break; case5: System.out.println("f");break; case6: System.out.println("g");break; case7: System.out.println("h");break; case8: System.out.println("i");break; case9: System.out.println("l");break; } } } System.out.println("该科目不及格人数为:"+time); } }5实验结果(此部分填写实验结果截图)6实验分析(1)程序运行时,若输入的学生姓名不存在,程序提示怎样的信息?会出现报错信息,(2)只采用二维数组是否可以完成要求1和要求2,详细说明原因。
实验7.2 二维数组1 求矩阵各行元素之和(调试示例error07_3)2 矩阵运算3 九九乘法表4 判断上三角矩阵5 算算看,这是第几天?6 找鞍点(选作)1 求矩阵各行元素之和(调试示例error07_3)/*-----程序填空,不要改变与输入输出有关的语句。
输入2个正整数m 和n (1<=m<=6, 1<=n<=6),然后输入矩阵a(m 行n 列)中的元素,分别求出各行元素之和,并输出。
输出使用语句:printf("sum of row %d is %d\n", i, sum);输入:3 2 (m=3,n=2)6 31 -83 12输出:sum of row 0 is 9sum of row 1 is -7sum of row 2 is 15----*/#include <stdio.h>int main(void){int i, j, m, n, sum;int a[6][6];scanf("%d%d",&m,&n);for(i = 0; i < m; i++)for(j = 0; j < n; j++)scanf("%d", &a[i][j]);for(i=0;i<m;i++){sum=0;for(j=0;j<n;j++)sum=sum+a[i][j];printf("sum of row %d is %d\n", i, sum);}return 0;}2 矩阵运算/*---程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat 次下列运算:读入1 个正整数n(1≤n≤6), 再读入n 阶方阵 a , 计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。
实训七二维数组程序设计(附答案在后面)一、语法基础1、二维数组中元素在内存中的排列顺序是。
2、对于数组a[M][N],行下标的最大值是 ,列下标的最大值是。
3、字符串以为结束标志,C语言中,有/没有字符串类型,字符串用来表示。
二、实训内容和步骤1、二维数组的初始化,即给二维数组的各个元素赋初值。
下面的几个程序都能为数组元素赋值,请调试并运行程序,比较这些赋值方法有何异同。
/*分行*/#include <stdio.h>void main(){ int i,j,a[2][3]={{1,2,3},{4,5,6}};for(i=0;i<2;i++){for(j=0;j<3;j++)printf(“%d”,a[i][j]);printf(“\n”);}}/*不分行*/#include <stdio.h>void main(){ int i,j,a[2][3]={{1,2,3,4,5,6};for(i=0;i<2;i++){for(j=0;j<3;j++)printf(“%d”,a[i][j]);printf(“\n”);}}注意:为部分数组元素初始化,如:数组定义语句为:int i,j,a[2][3]={{1,2},{4}};数组定义语句可以省略第一维的定义,但不能省略第二维的定义。
2、求一个4*4矩阵的主对角元素之和,填空(每个空可能包括多条语句)并调试运行程序编程提示:○1定义一个4行4列的二维数组a○2可利用双重循环的嵌套为该二维数组的各个数组元素赋值,一般格式为:for(i=0;i<4;i++)for(j=0;j<4;j++)scanf(“%d”,&a[i][j])○3利用循环求和,并注意矩阵对角上线元素的特征是:行下标和列下标相同。
○4输出对角线元素之和/*求主对角线元素之和*/#include<stdio.h>Void main(){Int a[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}};Int I,sum=0;For(i=0;i<4;I++);/*把对角线元素和放在变量sum中*/Printf(“sum=%d\n”,sum);/*输出对角线元素的和*/}横线下面应填:3、改错(复制下面源程序到VC编辑栏),程序功能为:输入两个正整数m和n(m和n应≥1且≤6),然后输入该m行n列二维数组a中的元素,分别求出各行元素之和,并输出。
C语言二维数组和字符数组程序设计实验
一、实验目的
1.通过C程序的运行,强化掌握C程序在VC++6.0上的开发过程。
2.掌握C语言二维数组和字符数组程序设计。
二、实验环境
1.WIN XP、WIN7、WIN10等操作系统的PC机;
2.VC++6.0集成开发环境;
三、实验内容
1.参考第4章【例4-7】中的程序,定义4行5列的浮点型数组a并初始化,按行列格式输出,理解简单二维数组程序设计。
2.参考第4章【例4-10】中的程序,字符数组存储10个元素,输出数组中第3到第7个元素,理解简单字符数组程序设计。
3.修改第4章【例4-14】中的程序,for循环扫描字符串的结束条件,用i<输入字符串的长度进行判断,理解字符数组程序设计的应用。
4.修改第4章【例4-16】中的程序,输入一个字符串,删除字符串中某个指定字符和字符r,理解字符数组程序设计的应用。
5.参考第4章【例4-6】P102-103选择排序的程序,输入12个整数,输出由大到小的排序,理解一维数组排序应用的程序设计。
四、实验数据及处理结果
1.实验内容的源代码以及运行结果的截图;。