当前位置:文档之家› 实验四 二维数值数组

实验四 二维数值数组

实验四  二维数值数组
实验四  二维数值数组

实验四二维数值数组

一、实验目的

(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

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、实验报告写好后将完成的实验报告纸订(或粘)在一起,于下一次上课前交给指导老师。

实验4 数组答案

实验四数组 实验课程名: 高级语言程序设计4 数组 专业班级:学号:姓名: 实验时间:2016年4月27日实验地点:K4 指导教师: 一、实验目的及要求 1.掌握一维数组与二维数组的定义、赋值与输入输出的方法; 2.掌握字符数组与字符串函数的使用; 3.掌握与数组有关的算法(特别就是排序算法)。 二、实验任务: (一)(1)程序代码:#include #define N 10 void main( ) { int i,a[N]; float av=0; for(i=0;i

(3)结果分析:当i能被3整除时,就换一次行。 (二)实验任务2 (1)程序代码:#include void main( ) { int i,a[5],sum=0; for(i=0;i<=4;i++) scanf("%d",&a[i]); for(i=0;i<=4;i++) sum+=a[i]; printf("sum=%d\n",sum); } (2)程序运行结果: (3)程序分析:使用for循环依次输入5个数,并使5个数相加。 (三)实验任务3 (1)程序代码:#include int main( ) { int i,j,row=0,colum=0,max; int a[3][4] = {{1,2,3,4}, {9,8,7,6}, {-10,10,-5,2}}; max=a[0][0]; for(i=0;i<=2;i++) for (j=0;j<=3;j++) if(a[i][j]>max) {max=a[i][j]; row=i; colum=j; } printf(" Max=%d, Row=%d, Colum=%d\n", max, row, colum); return 0; }

实验三 数组和字符串

实验三数组和字符串 一、实验目的 1.掌握Java中的数组定义、引用 2.掌握向量的基本概念和应用技术 3.掌握使用字符串String类处理字符串的方法 4.掌握使用字符串StringBuffer类处理字符串的方法 5.掌握Date类以及Calendar类的常用方法; 二、实验内容 1.使用https://www.doczj.com/doc/141777818.html,ng.Math类,生成100 个100~999 之间的随机整数,找出他们之中的最大的和最小的,并统计随机产生的大于300 的整数个数。 package exercise; publicclass shiyan3_1 { publicstaticvoid main(String [] args) { int count=0; int max=0; int min=Integer.MIN_VALUE; int num[]=newint[100];//声明并创建一个具有100 个元素的整型数组对象num int i; for(i=1;i<=100;i++) { num[i-1]=100+(int)(Math.random()*899); System.out.print(num[i-1]+"\t");//随机产生一个100~999 之间的随机整数 if(i % 10 == 0) System.out.println();//输出当前产生的随机数,并一行输出10 个数 if(num[i-1]>max) max=num[i-1]; if(num[i-1]300) count++; } System.out.println("最大的随机整数是:"+max); System.out.println("最小的随机整数是:"+min); System.out.println("大于300 的整数个数是:"+count); } }

C++上机实验报告实验四

实验四数组、指针与字符串 1.实验目的 1.学习使用数组 2.学习字符串数据的组织和处理 3.学习标准C++库的使用 4.掌握指针的使用方法 5.练习通过Debug观察指针的内容及其所指的对象的内容 6.联系通过动态内存分配实现动态数组,并体会指针在其中的作用 7.分别使用字符数组和标准C++库练习处理字符串的方法 2.实验要求 1.编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。 2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。 3.编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。 4.使用string类定义字符串对象,重新实现上一小题。 5.定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。Display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。实现并测试这个类。 6.定义包含5个元素的对象数组,每个元素都是Employee类型的对

象。 7. (选做)修改实验4中的选做实验中的people(人员)类。具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。其中“出生日期”定义为一个“日期”类内嵌对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。在测试程序中定义people类的对象数组,录入数据并显示。 3.实验内容及实验步骤 1.编写矩阵转置函数,输入参数为3*3整形数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入、输出。程序名:lab6_1.cpp。 2.改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。通过Debug观察指针的内容及其所指的对象中的内容。程序名:lab6_2.cpp。 3.编程实现两字符串的连接。定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。程序名:lab6_3.cpp。用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。

实验4-数组

数组 一维数组 1. 用Array函数生成一个包含10个整数的一维数组,并在窗体上输出,然后分别统计其中正数之和与负数之和,运行效果如图所示。 2. 随机生成10个两位正整数,求其中的最大值和平均值,并将结果显示出来,运行效果如图所示。 3. 实现以下程序功能:程序运行后,在四个文本框中各输入一个整数。然后单击命令按钮,即可使数组按升序排序,并在文本框中显示出来。提示:可用array函数生成数组。

二维数组 1. 设有一个二维数组A(5,5),给所有数组元素赋值为1-9之间的随机整数,试计算: ●所有元素之和。 ●所有靠边元素之和。 ●正对角线上元素之和。 2. 设有一个二维数组A(5,5),试计算矩阵第三行各项的和,并在窗体上显示出来。 3. 设有一个二维数组A(5,5),试找出正对角线上最大的值。 4.产生一个二维数组A(5,5),要求中心位置值为9,对角线位置值为1,其余位置值为0。 5.设有一个二维数组A(4,4),请交换其中的第二列和第四列,并显示。

6. 实现以下程序功能:运行程序时,随机产生一个4行4列的二维数组,单击“计算”命令按钮时,将统计矩阵两个对角线的元素中能被3整除的个数,统计结果显示在标签lblfirst中;同时计算矩阵主对角线的元素之和,计算结果显示在标签lblSecond中。

列表框和组合框 1. 设在窗体中有一个名称为List1的列表框,其中有若干项目。要求选中一项后单击Command1按钮,就删除选中的项,运行效果如图所示。 点击前选中”北京”点击按钮后删除 2. 窗体上有一个组合框,其中已输入了若干项目。程序运行时,单击其中一项,即可以把该项与上面的一项交换,运行效果如图所示。 点击前选中”重庆”点击后交换 3.有10位同学的VB课程的期末成绩,信息如下:82、75、91、65、57、44、78、64、95、62,请将他们的信息保存到数组中,显示在列表框中,在“优秀”、“通过”和“不通过”三个分数段的人数进行统计。其中85分以上(含85分)为“优秀”,60-85分之间(含60分)为“通过”, 60分以下的为“不通过”。 4. 实现以下程序功能:单击“生成”按钮,随机生成一个由100个2位正整数组成的数组a,同时显示在Text1文本框中;单击“分组”按钮,则将数组a中所有3的倍数的元素存入数组b中,并对数组b中的元素从小到大排序后显示在文本框Text2中。

习题2-数值数组及向量化运算

习题2 1.请读者先运行以下指令 a=0;b=pi; t1=a:pi/9:pi; t2=linspace(a,b,10); T=t1*t2'; F=find(T<0); 然后,请回答变量a、t1、T、F的维度、规模、长度分别是多少t1完全等于t2吗为什么 1)产生数据 a=0;b=pi; t1=a:pi/9:pi; t2=linspace(a,b,10); T=t1*t2'; F=find(T<0); 2)罗列各变量的特征 Na=ndims(a);Nt1=ndims(t1);NT=ndims(T);NF=ndims(F); Sa=size(a);St1=size(t1);ST=size(T);SF=size(F); La=length(a);Lt1=length(t1);LT=length(T);LF=length(F); fprintf('数组%7s%8s%8s%8s\n','a','t1','T','F') fprintf('维度数%5d%8d%8d%8d\n',Na,Nt1,NT,NF) fprintf('规模%5d%3d%5d%3d%5d%3d%5d%3d\n',Sa,St1,ST,SF) fprintf('长度%7d%8d%8d%8d\n',La,Lt1,LT,LF) 数组 a t1 T F 维度数 2 2 2 2 规模 1 1 1 10 1 1 0 0 长度 1 10 1 0 3)判断数组相等 P=t1==t2 %对不同浮点计算方法获得的数进行比较的本指令,不推荐使用 E=max(abs(t1-t2)) P = 1 1 1 1 1 1 0 1 1

1 E = 可见2个数组中的元素不完全相等。应记住:这种现象在数值计算中常常会遇到;并且,若想检验同一个量的不同方法、途 径算得的结果,应尽量不用“==”符判断,而应借助“两个量间 的(相对)误差水平是否小于某个容差”进行判断。比如 pp=abs(t1-t2)<1e-14 pp = 1 1 1 1 1 1 1 1 1 1 2.对于指令A=reshape(1:18,3,6)产生的数组 A = 1 4 7 10 13 16 2 5 8 11 14 17 3 6 9 12 15 18 先请你用一条指令,使A数组中取值为2、4、8、16的元素都被重新赋值为NaN。然后,再请你用一条指令,把A数组的第4、 5两列元素都被重新赋值为Inf。 1)产生数组A A=reshape(1:18,3,6) A = 1 4 7 10 13 16 2 5 8 11 14 17 3 6 9 12 15 18 2)利用单序号实现对2、4、8、16的元素的重新赋值 A([2,4,8,16])=NaN %这些位置元素的重赋值不可能采用 “全下标”一次性实现 A = 1 NaN 7 10 13 NaN NaN 5 NaN 11 14 17 3 6 9 12 15 18 3)利用全下标和冒号对第4、5列元素进行重赋值

实验报告_实验3 类与对象

实验报告_实验3 类与对象(学生学号_姓 名) 一、实验目的 1.熟悉类的组成,掌握类的声明方法; 2.理解构造方法的作用,并掌握构造方法的定义; 3.熟练使用访问器和设置器实现信息隐藏和封装; 4.熟悉一般方法、构造方法的重载; 5.能够正确地区分静态变量与实例变量、静态方法与实例方法的不同,掌握静态变量和静态方法的使用;6.掌握对象的创建、引用和使用及向方法传递参数的方式; 7.掌握this关键字的使用以及对象数组的创建和访问; 8.掌握Java包的创建、包成员的各种访问方式; 9.掌握一维数组:声明,创建,初始化,数组元素的访问; 10.掌握多维数组的概念:二维数组的声明,初始化,元素的访问。 二、实验内容与步骤 1.请回答下列问题: (1)Cirecle类定义了几个属性?它们的类型、访问权限各为什么? 答:两个PI,floatl类型,静态私有权限 Radius,float;类型,私有权限 (2)类中的“PI”的值可以在程序的方法中更改吗? 答:不可以,因为PI为静态变量 (3)Cirecle类定义了几个方法?它们的访问权限怎样?

答:四个,getRadius(),setRadius(float radius),getPerimeter(),getArea()都是公有权限 2.写出Rectangle类的程序代码: class Rectangle { private float width; private float length; public float getWidth( ) //获取矩形宽度 {return width;} public float getLength( ) //获取矩形长度 {return length;} public float getPerimeter( ) //获取矩形周长 {return 2*(width+length);} public float getArea( ) //获取矩形面积 {return (width*length);} public void setWidth(float w) //设置矩形宽度 {width=w;} public void setLength(float l) //设置矩形长度 {length=l;} } 3.回答下列问题: (1)该程序中有几个类?主类是什么?如果将这两个类放在一个文件中,源程序文件名应是什么?答:两个类:Circle、CircleTest;主类是CircleTest;源程序文件名是CircleTest。

matlab2011教程之二数值数组及向量化运算

第 2 章 数值数组及向量化运算本章集中讲述两个数据类型(数值数组和逻辑数组)、两个特有概念变量(非数和空)、 以及MATLAB的数组运算和向量化编程。值得指出:本章内容是读者今后编写各种科学计 算M码的基本构件。 数值数组(Numeric Array)是MATLAB最重要的数据类型数组。在各种维度的数值数 组中,二维数组为最基本、最常用。本章对二维数组创建、标识、寻访、扩充、收缩等方 法进行了详尽细腻的描述,并进而将这些方法推广到高维数组。 本章讲述的逻辑数组主要产生于逻辑运算和关系运算。它是MATLAB 援引寻访数据、 构成数据流控制条件、、编写复杂程序所不可或缺的重要构件。 数组运算是MATLAB区别于其它程序语言的重要特征,是MATLAB绝大多数函数指 令、Simulink许多库模块的本性,是向量化编程的基础。为此,本章专辟第2.2节用于阐述MATLAB的这一重要特征。 在此提醒读者注意:随书光盘mbook目录上保存着本章相应的电子文档“ch02_数值数 组及向量化运算.doc”。该文档中有本章全部算例的可执行指令,以及相应的运算结果。 2.1数值数组的创建和寻访 2.1.1一维数组的创建 1递增/减型一维数组的创建 (1)“冒号”生成法 (2)线性(或对数)定点法 2其他类型一维数组的创建 (1)逐个元素输入法 (2)运用MATLAB函数生成法 【例2.1-1】一维数组的常用创建方法举例。 a1=1:6 a2=0:pi/4:pi a3=1:-0.1:0 a1 = 1 2 3 4 5 6 a2 = 0 0.7854 1.5708 2.3562 3.1416 a3 = Columns 1 through 8 1.0000 0.9000 0.8000 0.7000 0.6000 0.5000 0.4000 0.3000 Columns 9 through 11 0.2000 0.1000 0 b1=linspace(0,pi,4) b2=logspace(0,3,4) b1 = 0 1.0472 2.0944 3.1416 b2 =

VB实验3数组

本科实验报告 课程名称:人机界面程序设计基础实验项目:三、数组 实验地点:北区多学科楼 专业班级:学号: 学生姓名: 指导教师: 年月日

一、实验目的和要求 1、掌握数组的声明、数组元素的引用。 2、掌握固定长度数组和动态数组的使用差别。 3、掌握数组常用的操作和常用算法。 4、掌握列表框和组合框的使用。 二、实验内容和原理 1、随机产生30~100(包括30、100)的10个正整数,求最大值、最小值、平均值,并显示整个数组的值和结果。 2、随机产生20个学生的成绩,统计各分数段人数并显示结果。产生的数据在List1显示,统计结果在List2显示。 提示:①、在通用声明段声明一个数组。例如:Dim mark%(19);在Command2声明一个数组s(9),分别存放分数段的人数。 ②、统计时的关键在于确定每个人的分数mark(i)与数组s下标之间的关系。 3、窗体上建立一个简单组合框,在组合框的文本框输入数字字符,按回车键后加入到组合框的列表框内,单击“交换”按钮,将列表框中最小值项目和第0个项目交换;最大值项目与最后项目交换。 三、主要仪器设备 计算机 四、实验结果与分析(必填) 1.随机产生30~100(包括30,100)的10个正整数,求最大值、最小值、

平均值,并显示整个数组的值和结果,。 代码: Private Sub Form_Click() Dim i%, s%(1 To 10), max%, min%, avg! For i = 1 To 10 s(i) = Int(Rnd * 71 + 30) Next i max = s(1) min = s(1) avg = s(1) For i = 2 To 10 If s(i) > max Then max = s(i) If s(i) < min Then min = s(i) avg = avg + s(i) Next i avg = avg / 10 For i = 1 To 10 Print s(i); Next i Print Print "max="; max; "min="; min; "avg="; avg End Sub 2.随机产生20个学生的成绩,统计各分数段人数。即0~59,60~69,70~ 79,80~89, 90~100, 并显示结果。产生的数据在picture1显示,统计结果在picture2显示,如图E3所示。

实验4-循环与数组

VB程序设计实验四 实验目的 ●掌握循环嵌套 ●掌握一维数组和二维数组的操作 实验内容 一、单选题(答案填写在“”实验4答题卡.xlsx文件中) 1.数组具有相同的_____________。 A.下标 B.类型 C.数值 D.存放地址 2.重定义数组大小的语句是______________。 A.Dim语句 B.ReDim语句 C.Static语句 D.Public语句 3.使用Dim A(100) As Integer 语句声明了数组A,其下标的取值范围为____________。 A.0~100 B.1~100 C.0~99 D.1~99 4.若使用Dim A(100) As Integer 语句声明了数组A,下列引用错误的是___________。 A.A(0)=2 B.A(1)= -28 C.A(56)= A(-56) D.A(100)=A(0)+A(55) 5.如果要对已经声明的数组重新定义大小,并保留原有数据,可使用语句___________。 A.Dim B.ReDim C.Dim Preserve D.ReDim Preserve 6.对于Integer 类型的数组,如果没有赋值,则所有元素的值为____________。 A.空 B.0 C.1 D.最大数 7.执行重定义数组大小语句ReDim A(UBound(B))后,A数组的上界为______________。 A.B数组的上界 B.B数组的上界+1 C.B数组的上界- 1 D.不确定 8.下列数组声明语句中正确的是______________。 A.Dim A(9) As Single ={1,2,3,4,5,6,7,8,9,10} B.Dim A() As Single ={1,2,3,4,5,6,7,8,9,10} C.DimA() As Single ={1,”abc”,”ccc”,4,5,6,7,8,9,10} D.Dim A( , ) As Single ={1,2,3,4,5,6,7,8,9,10} 9.若有声明Dim a(2 ,3) as Integer,则数组a共有元素个。 A.12 B.30 C.16 D.4 10.下列程序的输出结果是______________。 Dim A() As Integer ={1,2,3,4,5,6,7} For i=0 to UBound(A) A(i)= A(i)* A(i) Next i MsgBox (A(i)) A.49 B.0 C.不确定 D.程序出错 11.关于数组的声明,正确的是__________。 A.Dim a(5) As Integer = {1,2,3,4,5,6} B.Dim a(1,6) As Integer = {1,2,3,4,5,6} C.Dim a( ) As Integer = {1,2,3,4,5,6} D.Dim a(1 to 6) As Integer = {1,2,3,4,5,6}

实验3要求(数组)

实验3-1一维数组 目的和要求: 1.理解数组的概念以及用数组描述数据结构的好处; 2.掌握一维数组的定义、下标变量的引用、数组的初始化以及输入输出的方法; 3.学习应用数组解决查找和排序问题。 一. 实验内容 1.改错题 (1)下列程序的功能是:为指定的数组输入10个数据,并求这10个数据之和。但程序中存在若干错误,请你纠正,并将正确的程序保存到学号文件夹下,文件名为shiyan3_1.c。 #include void main() {int n=10,i,sum=0; int a[n]; for(i=0;i<10;i++) { scanf("%d",a[i]); sum=sum+a[i]; } printf("sum=%d\n",sum); } (2)下列程序的功能是:读入20个整数,统计其中非负整数个数,计算所有非负整数之和。但程序中存在若干错误,请你纠正,并将正确的程序保存到学号文件夹下,文件名为shiyan3_2.c。 #include main( ) { int i, n=20, s, count; int a[n];s = count = 0; for ( i = 1; i <= n; i++ ) scanf("%d",a[i]); for ( i = 1; i <= n; i++ ) { if ( a[i] <0 ) break; s += a[i]; count++; } printf("s=%d\t count=%d\n", s, count ); } 2.程序填空 (1)以下程序的功能是:采用二分法在给定的有序数组中查找用户输入的值,并显示示查找结果。根据题意,将程序写完整,并将程序保存到学号文件夹下,文件名为shiyan3_T1.c。

实验四 数组及其字符串的处理

实验四数组及其字符串的处理 1.输入一串英文字母,统计每个字母(不区分大小写)出现的次数。(输 出统计结果时一律显示为小写字母) 如输入:Good 则输出:字母d有1个 字母g有1个 字母o有2个 请根据提示填空,使程序实现相应功能。 #include main() { char ch[10000]; //用于保存输入的字母串 int nnum[26]=【1】;/* 赋初值,使各元素值为0 nnum用于存储各字母出现的次数, 因字母表共有26个字母,因此元素个数为26 */ int i,j; printf("请输入一串字母\n"); scanf("%s",【2】);//读取字符串 i=0;//变量i用于遍历整个字符串各元素,初值为0,表示从字符数组首元素开始 while(【3】) //依次读取各元素,直至遇到字符串结束符’\0’ { j=(ch[i]>=65&&ch[i]<=90)?ch[i]-65:ch[i]-97; /*若输入为字母,则用j 保存其在字母表中的位 次*/ if (【4】)nnum[j]++;//若j值不超限,则将该字母累计数加1 【5】;// 改变i值,换至下一个元素 } for(i=0;i<26;i++) if(nnum[i]!=0) printf("字母%c有%d个\n",97+i,【6】); //按题目要求输出结果 return; } 编程题 2.输入10个整数存入数组,找出其中的最大数及其位置。 (位置从0开始编号)

3.求裴波那契数列(1 1 2 3 5 8 13 21 34……)的前18项。 4.求字符串长度(实现strlen 函数的功能) 提示:可参考第1题。 5.输入一个5*5的矩阵(#define N 5),求 (1)所有元素的和 (2)主对角线元素之和 (3)最大值及最小值所在位置 #include main() { double mat[5][5]; int i,j; 【此处补充定义其它所需变量】 for(i=0;i<5;i++) for (j=0;j<5;j++) scanf("%lf",&mat[i][j]); 【完成其余代码,实现该题(1)(2)(3)的功能】 return; }

数学实验矩阵的运算doc资料

数学实验矩阵的运算

数学实验报告 学院: 班级: 学号: 姓名: 完成日期:

实验四矩阵的运算 (一)投入产出分析 一.实验目的 1.理解投入产出分析中的基本概念和模型; 2.从数学和投入产出理论的角度,理解矩阵乘法、逆 矩阵等的含义。 二.问题描述 设国民经济由农业、制造业和服务业三个部门构成,已知某年它们之间的投入产出关系、部需求、初始投入等如表1-1所示 表1-1国民经济三产部门之间的投入产出表 根据表回答下列问题: (1)如果农业、制造业、服务业外部需求为 50,150,100,问三个部门总产出分别为多少? (2)如果三个部门的外部需求分别增加一个单位,问他们的总产出分别为多少? 三.实验过程

1.问题(1)的求解 (1)求直接消耗矩阵A 根据直接消耗的计算公式 a ij=x ij/x j 和各部门中间需求; x n a n 运行如下代码可得直接消耗系数表。 X=[15 20 30;30 10 45;20 60 0]; X_colsum=[100 200 150]; X_rep=repmat(X_colsum,3,1) A=X./ X_rep 运行结果为: A = 0.1500 0.1000 0.2000 0.3000 0.0500 0.3000 0.2000 0.3000 0 (2)求解 根据公式 X=(I-A)-1y 在运行如下代码 y=[50;150;100]; n=size(y,1);

W=eye(n)-A; X=W\y 运行结果为 X = 139.2801 267.6056 208.1377 即三个部门的总产出分别为139.2801,267.6056, 208.1377亿元。 2.问题2求解 设外部需求由y增加至y+Δy,则产出x的增量为Δx=(I-A)-1(y+Δy)- (I-A)-1y=(I-A)-1Δy 利用问题(1)求得的I-A矩阵,再运行如下的MATLAB代码可得问题的结果: dx=inv(W) 运行结果: dx = 1.3459 0.2504 0.3443 0.5634 1.2676 0.4930 0.4382 0.4304 1.2167 根据上述结果可知,当农业的外部需求增加1个单位时,农业、制造业、服务业的总产出分别增加

实验4数组的应用

(1)有一列乱序的字符,‘a’、‘d’、‘m’、‘z’、‘h’、‘c’、‘o’,排序并按照英文字母表的逆序输出。 解:按照字母表排序也就是按照ASCLL码值进行排序,只需要定义一个String 型数组应用Arrays.sort函数进行排序,然后进行输出就可以了。 package test4; import java.util.Arrays; public class test4_a { public static void main(String[] args) { // TODO Auto-generated method stub String[] sores={"a","d","m","z","h","c","o"}; int i,j; j=sores.length; Arrays.sort(sores); for(i=j-1;i>=0;i--) System.out.print(sores[i]+" "); } } (2)编写一个程序,提示用户输入学生数量、各自的姓名和他们的成绩,并按照成绩的降序来打印学生的姓名。 package test4; import java.util.Scanner; class Student{ private String name; private double score; public void setName(String name){ https://www.doczj.com/doc/141777818.html,=name; } public String getName(){ return https://www.doczj.com/doc/141777818.html,; } public void setScore(double score){ this.score=score; } public double getScore(){ return score; } }

实验 6-3 数组

实验6-3 数组(三) 1 【实验目的】 (1)掌握字符数组的定义、赋值和输入输出的方法 (2)掌握字符数组和字符串函数的使用 (3)掌握数组的基本操作和排序算法 【实验要求】 (1)熟悉掌握字符数组的定义、赋值和输入输出方法 (2)掌握字符数组和字符串函数的使用 (3)掌握数组的增加元素和删除元素的操作 (4)掌握数组的排序算法(比较、选择和冒泡三种算法,要求至少会一种) 【实验环境】 (1) Microsoft XP操作系统 (2) Microsoft VC++ 6.0 【实验内容】 1、Palindromes_easy version https://www.doczj.com/doc/141777818.html,/acmhome/problemdetail.do?&method=showdetail&id=1384 描述 “回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。请写一个程序判断读入的字符串是否是“回文”。

输入 输入包含多个测试实例,输入数据的第一行是一个正整数n,表示测试实例的个数,后面紧跟着是n个字符串,每个字符串的长度不超过30。 输出:如果一个字符串是回文串,则输出"yes",否则输出"no". 样例输入: 4 level abcde noon haha 样例输出: yes no yes no 2、分割整数https://www.doczj.com/doc/141777818.html,/acmhome/problemdetail.do?&method=showdetail&id=1173 描述:从键盘输入一个长正整数(不超过10位),从高位开始逐位分割并输出。 输入:正整数n,不含前导零。 输出:分割的整数序列,各整数之间用空格格开。注意,最后一个数字后面没有空格! 样例输入:654321 样例输出:6 5 4 3 2 1

矩阵的运算及其运算规则

矩阵基本运算及应用 201700060牛晨晖 在数学中,矩阵是一个按照长方阵列排列的复数或实数集合。矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中。在物理学中,矩阵于电路学、力学、光学和量子物理中都有应用;计算机科学中,三维动画制作也需要用到矩阵。矩阵的运算是数值分析领域的重要问题。将矩阵分解为简单矩阵的组合可以在理论和实际应用上简化矩阵的运算。在电力系统方面,矩阵知识已有广泛深入的应用,本文将在介绍矩阵基本运算和运算规则的基础上,简要介绍其在电力系统新能源领域建模方面的应用情况,并展望随机矩阵理论等相关知识与人工智能电力系统的紧密结合。 1矩阵的运算及其运算规则 1.1矩阵的加法与减法 1.1.1运算规则 设矩阵,, 则

简言之,两个矩阵相加减,即它们相同位置的元素相加减! 注意:只有对于两个行数、列数分别相等的矩阵(即同型矩阵),加减法运算才有意义,即加减运算是可行的. 1.1.2运算性质 满足交换律和结合律 交换律; 结合律. 1.2矩阵与数的乘法 1.2.1运算规则 数乘矩阵A,就是将数乘矩阵A中的每一个元素,记为或. 特别地,称称为的负矩阵. 1.2.2运算性质 满足结合律和分配律 结合律:(λμ)A=λ(μA);(λ+μ)A =λA+μA. 分配律:λ(A+B)=λA+λB.

已知两个矩阵 满足矩阵方程,求未知矩阵. 解由已知条件知 1.3矩阵与矩阵的乘法 1.3.1运算规则 设,,则A与B的乘积是这样一个矩阵: (1) 行数与(左矩阵)A相同,列数与(右矩阵)B相同,即 . (2) C的第行第列的元素由A的第行元素与B的第列元素对应相乘,再取乘积之和.

实验4数组(答案解析)

实验四数组 实验课程名:高级语言程序设计4 数组 专业班级:学号:姓名:实验时间:2016年4月27日实验地点:K4 指导教师:

(3)结果分析:当i能被3整除时,就换一次行。 (二)实验任务2 (1)程序代码:#include void main( ) { int i,a[5],sum=0; for(i=0;i<=4;i++) scanf("%d",&a[i]); for(i=0;i<=4;i++) sum+=a[i]; printf("sum=%d\n",sum); } (2)程序运行结果:

(3)程序分析:使用for循环依次输入5个数,并使5个数相加。 (三)实验任务3 (1)程序代码:#include int main( ) { int i,j,row=0,colum=0,max; int a[3][4] = {{1,2,3,4}, {9,8,7,6}, {-10,10,-5,2}}; max=a[0][0]; for(i=0;i<=2;i++) for (j=0;j<=3;j++) if(a[i][j]>max) {max=a[i][j]; row=i; colum=j; } printf(" Max=%d, Row=%d, Colum=%d\n", max, row, colum); return 0; } (2)程序运行结果:

(3)程序分析:分别将这12个元素同max相比较,当某个元素的值大于max时,则将此元素的值赋值给max,最后输出max及最大值的下标。 (四)实验任务4 (1)程序代码:#include void main( ) { int i, x, a[10]={1,2,3,4,5,6,7,8,9,10}; scanf("%d",&x); /*输入x变量的值*/ for ( i=0; i<10; i++ ) printf("%4d",a[i]); printf("\n"); for(i=0;i<10;i++) /* 循环查找与x相等的元素*/ if ( x==a[i] ) printf("%d\n",i); /* 输出查找结论,输出下标值*/ else printf("Not found %d\n",x); } (2)运行结果:

数据结构_实验3_串和数组

实验3 串和数组的相关操作 一,实验目的 理解并掌握串的逻辑结构和定长顺序存储方式; 理解串的相关基本算法; 编程对相关算法进行验证。 理解数组的逻辑结构和顺序存储方式; 掌握对称矩阵和稀疏矩阵的压缩存储方法; 掌握稀疏矩阵的三元组顺序表表示法和快速转置运算。 二,实验内容 3.1 串的模式匹配运算 编写一个程序,实现顺序串的各种模式匹配运算,并在此基础上设计主程序完成如下功能: (1)建立目标串s=‘abcabcdabcdeabcdefabcdefg’和模式串t=‘abcdeabcdefab’;(2)采用简单模式匹配算法求t在s中的位置; (3)由模式串t求出next值和nextval值; (4)采用KMP算法求t在s中的位置; (5)采用改进的KMP算法求t在s中的位置。 3.2 数组的操作 1.建立一个n*n的对称矩阵A;用动态分配的一维数组B对矩阵A进行压缩存储,输出矩阵A和一维数组B; 2.在B中查找对称矩阵A中第row行,第col列(下标从1开始)的元素,输出该元素值; 3.建立一个稀疏矩阵C,输入其行数,列数和非零元个数,用三元组顺序表存储该矩阵,并按矩阵形式输出稀疏矩阵B; 4.对稀疏矩阵C做快速转置运算得到矩阵D,并按矩阵形式输出转置后的矩阵D。【要求】 1.矩阵元素相关信息要从终端输入; 2.在三元组顺序表中按行优先顺序存放非零元素; 3.具体的输入和输出格式不限; 4.算法要具有较好的健壮性,对错误操作要做适当处理。 三,源代码及结果截图 3.1 #include

#include #include #define MaxSize 100 typedef struct { char data[MaxSize]; //定义可容纳MaxSize个字符的空间 int length; //标记当前实际串长 }SqString; void StrAssign(SqString &str,char cstr[]) { //由串常量cstr创建串str int i; for(i=0;cstr[i]!='\0';i++) str.data[i]=cstr[i]; str.length=i; } void DispStr(SqString s) { //输出串s的所有元素 int i; if(s.length>0){ for(i=0;i=t.length)

C语言程序设计实验4 数组 周信东

实验4 数组 姓名:XXX 学号:XXX实验日期:XXX 1.实验目的和要求 (1)掌握一维数组与二维数组的定义、使用及初始化方法。 (2)学习数组作为函数参数的用法。 (3)掌握字符数组和字符串函数的使用方法。 (4)掌握与数组有关的常用排序算法,进一步理解模块化程序设计的方法。(5)掌握字符、字符串的输入/输出方法。 (6)掌握字符数组的使用。 (7)学会使用字符串的指针和指向字符串的指针变量。 2.实验内容:实验指导书中的实验六、实验七 3.实验步骤 实验六数组部分: 6-1:我使用的算法: 先使投票初始化为0 int vote[6]; int i,number; for (i=1;i<=5;++i) vote[i]=0; 之后用一个循环进行投票进行叠加 printf ("Enter your number\n") ; for (i=1; i<=20;++i) { scanf (" %d",&number) ; if (!number) break; ++vote[number]; } printf (" \n\nResalt of vote\n") ; printf (" --------------------------\n") ; for (i=1;i<=5;++i) printf (" %4d %d\n",i,vote[i]) 程序的运行测试结果如下图所示(考虑各种情况下的运行结果):

6-2:该程序的功能是: 用循环,先把数组的第一个元素暂存起来,为了实现数组的前移,把j赋给j-1;再将暂存的第一个元素赋给最后一个元素;再用循环输出数组。 程序运行结果如下图所示: 6-3 :该程序的功能是: 对a数组中n种商品价格进行分段统计,商品各段价格的数目存放到b数组中。 程序运行结果如下图所示: 6-4.:我使用的算法为: 先对11个元素进行定义,在对10个元素进行排序,之后读入一个待插入的数,与排好的

虚拟仪器实验三

实验三LabVIEW编程的数组和簇与图形显示 (一)LabVIEW编程的数组和簇 一、实验目的 1.掌握如何创建、使用数组;数组函数的功能和应用,掌握它们的区别以及相应操作。 2.掌握如何创建、使用簇;簇函数的功能和应用,掌握它们的区别以及相应操作。 二、实验原理 1.数组是一些具有相同类型的元素组成的集合。数组包含两方面的内容:元素和维数。数组中的元素可以是数字、布尔、字符、路径、波形和簇等数据类型。一个数组可以是一维或者多维,如果必要,每维最多可有231-1个元素。可以通过数组索引访问其中的每个元素。数组元素不能是数组、图表或者图形。 LabVIEW提供了很多用于操作数组的功能函数,位于函数Functions?数组Array中。其中包括创建数组、初始化数组、数组大小、数组子集、索引数组等。 创建数组:用于根据标量值或者其他的数组创建一个数组。 初始化数组:创建所有元素值都相等的数组。 数组大小:返回输入数组中的元素个数。 数组子集:选取数组或者矩阵的某个部分。 索引数组:用于访问数组中的某个元素。 建立数组的步骤如下: 1)从数组和类子模板(Controls-All Controls-Array & Cluster)上选中数组,放置在前面板中,此时为数组空壳,可以向里边添加(用拖拽的方法)数字、布尔、字符等数据类型的控制器或指示器,来建立相应的数组控制器和指示器。此时可以看到数组上有两个显示窗口:标号显示窗:标号从0开始,每单击一次“增加”键,标号显示值顺序递增。这个标 号就是数组元素的序号;对于一个含n个元素的数组,其标号为0~n-1。 元素显示窗:用来显示元素的数值。数组中的元素按序号排列。数组元素的查找按行 /列标号进行。 2)右键单击标号窗口,弹出一个快捷菜单,选择Add Dimension来增加数组的维数。 2.簇(Cluster)是另一种数据类型,它的元素可以是不同类型的数据。它类似于C语言中的structure。使用簇可以把分布在框图中各个位置的数据元素组合起来,这样可以减少连线的拥挤程度,减少子VI的连接端子的数量。 簇相当于一个容器,容器中的元素可以是各种不同的数据类型。也就是说,可以在一个簇中放置控制模板上的各种控件,如数字控件、布尔控件、数组控件等,但是不能将输入控件和输出控件同时放入其中。因此,在编辑流程图时,可以减少连线数以及连线的节点数,最终简化流程图。它有多个输入,一个输出。 要建立簇,可以选择控制模板中数组和类子模板上的Cluster,将其调入前面板。向类控件中放入元素,即将控制模板中的相应控件放入其中,俗称把元素“捆绑”在一起。 捆绑(Bundle)数据 Bundle功能将分散的元件集合为一个新的簇,或允许你重置一个已有的 簇中的元素。可以用位置工具拖曳其图标的右下角以增加输入端子的个数。

相关主题
文本预览
相关文档 最新文档