实验七 二维数组程序设计

合集下载

c语言实验7数组实验报告

c语言实验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.可以省略第一维的定义,但不能省略第二维的定义。

C语言实验二维数组的

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题一

实验7-二维字符数组

实验7-二维字符数组

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 二维数组程序设计_C语言程序设计实验指导(第2版)_[共4页]

实验7 二维数组程序设计_C语言程序设计实验指导(第2版)_[共4页]

实验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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if() a[i][j]=1; /* 产生矩阵的下三角元素 */
else a[i][j]=k++; /* 产生矩阵的上三角元素 */
for(i=0;i<5;i++)
{ for(j=0; j<5; j++)
printf(“%4d”,a[i][j]);
printf(“\n”); /* 每输出一行后换行 */
三、预习要求
熟悉二维数组的定义、引用和相关算法(求最大值、最小值)的程序设计,同时要掌握在程序设计中利用双重循环来实现二维数组的输入和输出。
四、实验内容
(一)二维数组的初始化,即给二维数组的各个元素赋初值。下面的几个程序都能为数组元素赋值,请输入程序并运行,比较这些赋值方法有何异同。
1.在定义数组的同时对数组元素分行初始化。
if() a[i][j]=1;
(二)求一个4×4矩阵的主对角线元素之和,填空并运行程序。
#include "stdio.h"
void main( )
{inta[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}};
inti,sum=0;
for(i=0;i<4;i++)
4.输出对角线元素之和。
/*c7-3.c */
/*求一个4×4矩阵的主对角线元素之和*/
#include "stdio.h"
void main( )
{inta[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}};
inti,sum=0;
for(i=0;i<4;i++)
;
printf(“sum=%d\n”,sum);
}
(三)求二维数组a中的最大元素及其下标,填空并运行程序。
#include "stdio.h"
void main( )
{inta[4][4]={{1,2,3,4},{3,4,5,6},{5,6,7,8},{7,8,9,10}};
inti,j,max,l,c;
for(i=0;i<3;i++)
{ t[i]=0;
for(j=0; j<4; j++)
{ sum+=stu[i][j]; /* sum存放三个学生的4门课程总成绩 */
t[i]+=stu[i][j]; /* t[i]存放第i个学生的4门课程成绩 */
}
printf("%-6d",t[i]); /* 输出第i个学生的总成绩 */
}
}
2.不分行的初始化。把{ }中的数据依次赋值给数组的各个元素。
/*c7-2.c */
/*二维数组的初始化(不分行)*/
#include "stdio.h"
void main( )
{inti,j,a[2][3]={1,2,3,4,5,6};
for(i=0;i<2;i++)
{ for(j=0;j<3;j++)
for( j=0; j<3; j++)
{if( max < a[i][j] ) max = a[i][j];
if (min>a[i][j])min = a[i][j];
}
printf("The max is: %d\n", max);
printf("The min is: %d\n", min);
}
/*c7-1.c */
/*二维数组的初始化(分行)*/
#include "stdio.h"
void main( )
{inti,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行3列)的转置(即行列互换)
如:如果原来的矩阵:100 200 300
400 500 600
700 800 900
程序输出应为:
100 400 700
200 500 800
300 600 900
填空并运行程序。
/*c7-7.c */
/*矩阵转置*/
#include "stdio.h"
/*c7-4.c */
/*学生成绩处理*/
#include "stdio.h"
void main( )
{intstu[3][4],i,j,t[3];
float sum=0,a[3];
for(i=0;i<3;i++) /* 输入三个学生的4门课程考试成绩 */
for(j=0; j<4; j++)
scanf("%d",&stu[i][j]);
The min is: 3
填空并运行程序。
/*c7-5.c */
/*求二维数组中元素的最大值与最小值*/
#include "stdio.h"
void main( )
{inta[3][3]={4,4,34,37,3,12,5,6,5},i,j,max,min;
max=a[0][0];
;
for(i=0;i<3;i++)
;
printf("%-6.2f\n",a[i]); /*a[i]存放第i个学生的4门课程平均成绩*/
}
printf("average = %.2f\n",sum/12.0);
}
(五)已知二维数组a中的元素为:
4434
37 3 12
5 6 5
求二维数组a中的最大值和最小值。程序的输出应为:The max is: 37
编程提示:
1.杨辉三角的特点是:第1列和对角线上的元素为1,其它各元素的值都是上一行上一列元素和上一行前一列元素之和。
2.定义一个10×10的二维数组a。
3.先用一个单层循环为第一列和对角线上的元素赋值。如:
for(i=0;i<10;i++){a[i][i]=1;a[i][0]=1; }
4.再用一个双重循环嵌套为其它元素赋值。
for(j=0; j<4; j++)
{ sum+=stu[i][j];
t[i]+=stu[i][j];
}
printf("%-6d",t[i]);
;
printf("%-6.2f\n",a[i]);
}
printf("average = %.2f\n",sum/12.0);
}
(二)求一个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.用循环求和,并注意矩阵对角上线元素的特征是:行下标和列下标相同。
b[0][0],b[0][1],b[0][2],b[0][3],b[0][4]
b[1][0],b[1][1],b[1][2],b[1][3],b[1][4]
b[2][0],b[2][1],b[2][2],b[2][3],b[2][4]
(二)要对二维数组的多个数组元素赋值,应当使用循环语句并在循环过程中,使数组元素的下标变化。可用下面的方法为所有数组元素赋值:
printf("\n");}
for(i=0;i<3;i++)
{ for(j=0;;j++)
{temp=array[i][j];array[i][j]=array[j][i];array[j][i]=temp;} }
printf("\n转置后的矩阵为:\n");
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)printf("%7d",array[i][j]);
#include "stdio.h"
void main( )
{intstu[3][4],i,j,t[3];
float a[3],sum=0;
for(i=0;i<3;i++)
for(j=0; j<4; j++)
scanf("%d",&stu[i][j]);
for(i=0;i<3;i++)
{ t[i]=0;
inti,j,a[3][3];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
六、思考题
(一)定义一个5行5列的二维数组a,使下三角的所有元素初始化为1,在划线处填空。
inti,j,a[5][5];
for(i=0;i<5;i++)
相关文档
最新文档