实验2-2、数组(有答案)
数学实验练习二 参考答案

数学实验二实验内容:学习matlab的m文件编写和函数的编写,体会matlab编程特点,掌握matlab 的编程基本方法。
要求:一.学习ppt教案的例题代码,能正确的输入、运行代码;二.写出如下各段代码的作用,将以下各段循环执行的代码,改为不需要循环的矩阵和数组运行,并使用tic,toc测试不同代码的执行时间:%程序1,文件名:ex2_2_1.mticdx = pi/30;nx = 1 + 2*pi/dx;for i = 1:nxx(i) = (i-1)*dx;y(i) = sin(3*x(i));endtoc以上程序实现将[0,2*pi]间隔pi/30分成60等分,x和y分别为61个元素的数组,y为计算sin(3x)的值。
以上程序可以使用简单的matlab数组计算实现:x2=0:pi/30:2*pi;y2=sin(3*x2);大家可以比较一下,x1和x2完全相同,y和y2也完全相同。
%程序2,文件名:ex2_2_2.mticA=round(2+rand(50,60)*6); 生成一个在[2,8]上均匀分布的50*60随机数组[X,Y]=size(A); 求出其大小;X=50,Y=60minA=A(1,1); 设最小值为矩阵A的第1行1列的元素for i=1:Xfor j=1:Yif A(i,j)<minAminA=A(i,j);minX=i;minY=j;endendend 以上程序按行、列搜索矩阵A的最小值,若当前值A(I,j)小,则将最小值设为当前值;[minA ,minX,minY] 输出矩阵最小值minA及矩阵最小值所在的行minX、列minY。
toc上述程序可以使用find函数及min函数实现;此时只需: minA=min(A(:));[minX,minY]=find(A ’==minA,1);%注意此处需将矩阵A 转置,因为matlab 中是按列优先搜索的,而题目的程序是按行有限搜索。
实验2 VFP数据类型、常量、变量和数组

实验二 Visual FoxPro数据类型、常量、变量和数组一、实验目的1.熟悉Visual FoxPro的基本数据类型和常量。
2.掌握内存变量的基本操作。
3.了解数组的定义和赋值。
二、实验内容及上机步骤【上机题一】Visual FoxPro的基本数据类型和常量的定义。
【上机步骤】本题考查的知识点是Visual FoxPro的基本数据类型和常量,操作步骤如下:(1)在命令窗口中分别执行如下命令,观察屏幕显示结果:命令屏幕显示结果? [3*5],"常量" 3*5 常量? 3*5 15? 常量找不到变量‘常量’(2)在命令窗口中分别执行如下命令,观察屏幕显示结果:命令屏幕显示结果? "2005/11/17" 2005/11/17? {^2005/11/17} 11/17/05? 2005/11/17 10.72(3)在命令窗口中分别执行如下命令,观察屏幕显示结果命令屏幕显示结果? .T.,.F.,.N.,.Y. .T. .F. .F. .T.? T,F,N,Y 找不到变量’T’【上机题二】内存变量的基本操作。
【上机步骤】本题考查的知识点是内存变量的基本操作,操作步骤如下:(1)内存变量的赋值, 分别执行如下命令A1=3A2=.F.A3={^2005/11/17}STORE " abg" TO B1,B2,B3,B4C1=A1+3*5(2)内存变量的显示, 分别执行如下命令,并观察屏幕显示结果,了解DISPLAY与LIST 命令动词的区别命令命令功能DISPLAY MEMORY 示例:分屏方式显示所有内存变量的内容LIST MEMORY 滚屏方式显示所有内存变量的内容DISPLAY MEMORY LIKE A* 分屏方式显示以字母A开头的所有内存变量的内容LIST MEMORY LIKE ?1 滚屏方式显示第二个字符为1的只有两个字符内存变量的内容(3)内存变量的删除与显示,分别执行如下命令,观察屏幕显示结果,总结命令功能RELEASE B4 && 删除指定内存变量B4DISPLAY MEMORYRELEASE ALL LIKE ?2 && 将所有第二个字符为…2‟的内存变量删除DISPLAY MEMORYRELEASE ALL EXCEPT A* && 删除不以“A”开头的变量DISPLAY MEMORYCLEAR MEMORY && 删除所有内存变量DISPLAY MEMORY命令命令功能RELEASE B4删除指定内存变量B4DISPLAY MEMORY显示内存变量(注意观察屏幕显示结果,总结功能)RELEASE ALL LIKE ?2将所有第二个字符为…2‟的只有两个字符的内存变量删除DISPLAY MEMORY显示内存变量(注意观察屏幕显示结果,总结功能)RELEASE ALL EXCEPT A*删除不以“A”开头的变量DISPLAY MEMORY显示内存变量(注意观察屏幕显示结果,总结功能)CLEAR MEMORY清除内存变量DISPLAY MEMORY显示内存变量(注意观察屏幕显示结果,总结功能)【上机题三】Visual FoxPro数组变量的定义和赋值。
实验指导(带答案(上)

实验8 数组(二)一、实验目的1.掌握一维数组和二维数组的定义、赋值和输入输出的方法2.掌握字符数组和字符串函数的使用3.掌握与数组相关的算法(排序算法)二、实验内容及步骤1.找出一个二维数组中的鞍点,即该位置上的元素在所在行为最大,在所在列为最小。
如果没有这样的元素,请打印出相应的信息。
(1)画出此题的流程图。
(2)编写程序求矩阵中所有的鞍点并上机调试。
(3)输入的数据和输出的结果要详细记录。
参考程序:#include"stdio.h"void main(){int a[4][4],i,j,min,m,n,max; for(i=0;i<4;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);for(i=0;i<4;i++){max=a[i][0];for(j=i+1;j<4;j++)if(a[i][j]>max){max=a[i][j];n=j; }min=a[0][i];for(j=i+1;j<4;j++)if(a[j][i]<min){min=a[j][i];m=j;}}if(max==min)printf("%d",a[m][n]); elseprintf("没有鞍点"); }2.统计一个班的学生成绩。
要求程序具有如下功能:(1) 每个学生的学号和四门功课的成绩从键盘读入。
(2) 计算每个学生的总分和平均分。
(3) 按平均成绩进行排序,输出排序后的成绩单(包括学号、四门功课的成绩和平均分),给出名次。
如果分数相同,则名次并列,其他学生名次不变。
提示:调试程序时,可先输入少量学生的成绩作为实验数据。
如可输入3名学生4门课成绩:学号成绩9701 67,72,65,80 9702 75,82,94,95 9703 70,74,80,76参考程序:main(){int i,j,k,n;static int score[1000][7],temp; printf("请输入学生的人数:"); scanf("%d",&n);for(i=1;i<=n;i++){printf("请输入第%d个学生的学号和成绩并按回车(学号和成绩之间用空格隔开,成绩之间用逗号隔开,输完后按回车:",i);scanf("%d%d,%d,%d,%d,",&score[i][0],&sco re[i][1],&score[i][2],&score[i][3],&score[i][4] );score[i][5]=(score[i][1]+score[i][2]+scor e[i][3]+score[i][4])/4;}for(i=1;i<=n-1;i++)for(j=i+1;j<=n;j++)if(score[i][5]<score[j][5])for(k=0;k<6;k++){temp=score[i][k];score[i][k]=score[j][k];score[j][k]=temp;}for(i=1;i<=n;){score[i][6]=i;j=1;while(score[i][5]==score[i+j][5]){score[i+j][6]=i;j++;}i=i+j;}for(i=1;i<=n;i++)printf("第%d名的学生学号为%d,平均成绩为%d\n",score[i][6],score[i][0],score[i][5]); }实验9 函数(一)一、实验目的1.理解和掌握多模块的程序设计与调试的方法2.掌握函数的定义和声明函数的方法3.熟悉调用函数时实参和形参的对应关系,以及“值传递”的方式二、实验内容及步骤1. 用函数实现两个整数交换,设计一个函数swap,实现两个整数的交换。
C程序设计(数组)习题与答案

一、单选题1、若有定义 char s[10];则在下面表达式中不表示s[1]的地址的是()。
A.s++B.&s[0]+1C.&s[1]D.s+1正确答案:A2、若有定义int a[5],*p=a;则对a数组元素的正确引用是()。
A.a+2B.*(a+2)C.*&a[5]D.*(p+5)正确答案:B3、若有定义int a[5],*p=a;则对a数组元素地址的正确引用是()。
A.p+5B.&a+1C.*a+1D.&a[0]正确答案:D4、若要对a进行合法的自减运算,则之前应有下面()的说明。
A.int b[10];int *a=b+1;B.int k;int *a=&k;C.int p[3];int *a=p;D.char *a[3];正确答案:A5、若有定义int x[10]={0,1,2,3,4,5,6,7,8,9},*p1;则数值不为3的表达式是()。
A.p1=x+3,*p1++B.x[3]C.p1=x+2,*++p1D.p1=x+2,*(p1++)正确答案:D6、设int x[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0},*p=x,k;且0≤k<10, 则对数组元素x[k]的错误引用是()。
A.x[p-x+k]B.p+kC.*(&x[k])D.*(x+k)正确答案:B7、设double *p[6];则()。
A.p是指针数组,其元素是指向double型变量的指针B.p是指向double型变量的指针C.p是double型数组D.p是数组指针,指向double型数组正确答案:A8、若有定义int x[6]={2,4,6,8,5,7},*p=x,i;要求依次输出x数组6个元素中的值,不能完成此操作的语句是()。
A.for(i=0;i<6;i++) printf("%2d",*p++);B.for(i=0;i<6;i++) printf("%2d",*(p+i));C.for(i=0;i<6;i++) printf("%2d",*(p++));D.for(i=0;i<6;i++) printf("%2d",(*p)++);正确答案:D9、下面程序执行后的输出结果是()。
实验2_流程控制与数组操作

四、实验任务
1.创建一个名为 Exp14BTV_1 的 java Application 程序,写出运行结果(验证性实验)。 2.创建一个名为 Exp14BTV_2 的 java Application 程序,写出运行结果(验证性实验)。 2.创建一个名为 Exp14BTV_3 的 java Application 程序,计算圆、矩形、三角形的周长 (设计性实验)。 3.创建一个名为 Exp14BTV_4 的 java Application 程序,计算数字对应的中文金额(设 计性实验)。 4.创建一个名为 Exp14BTV_5 的 java Application 程序,随机产生三组扑克(设计性实 验)。
♠> 。
3
♥>♡>
假设 1~13 为方块(diamond),14~26 为梅花(club),27~39 为红桃(heart),
40~52 为黑桃(spade),53 为小王(little joker),54 为大王(big joker)。 第 1 步:随机产生 18 张牌; 第 2 步:从其余 36 张牌随机选择 18 张牌; 第 3 步:剩余 18 张牌作为备牌; 第 4 步:输出第 1 次产生的 18 张牌; 第 5 步:输出第 2 次产生的 18 张牌; 第 6 步:最后输出备牌。 说明:以上三组牌不能有重复(设计性实验:使用数组和循环完成)。 自己通过 Java 程序实现。
五、实验报告要求
1. 实验目的和要求 2. 实验任务
1
3. 实验题目和源码 4. 实验结果截图粘贴到实验报告中或手抄实验结果 5. 实验中遇到的问题及解决方法(如果不能解决请说明您分析的原因) 6. 实验心得或体会 7. 实验报告必须手写 两条线: 验证性实验: 题目(实验要求)+源码+结果 设计性实验: 题目(实验要求)+源码+结果
实验数组参考标准答案

作者:
日期:
上机实验八二维数组与字符数组一参考答案
1.目的要求
1.掌握二维数组的基本概念,如何定义二维数组,如何初始化二维数组。
2.掌握二维数组的基本操作:引用数组元素、行(列)求和,ቤተ መጻሕፍቲ ባይዱ(列)最大最小值,整个
数组的输入输出等。
3.掌握与二维数组有关的算法,如找最大最小值(或位置)、矩阵转置等。
其他字符
}
d=0 ;〃二-十进制转换
for( i=0; i<8; i++ ) d= d*2+s[i]- 0';//二进制:逢2进1
prin tf("digit=%d\n", d);//输出十进制整数d
}
思考:如果改为输入一个4位长度的十六进制字符串,如”2f3a”要输出对应的十进制整数,上面的程序
需要如何修改?-
5)输出该矩阵的下三角,即得出杨辉三角的前10行。
源程序:
#include <stdio.h>
void mai n()
{ int i, j, int a[10][10];
for (i=0; i<10; i++)〃各行的第0列元素与主对角线元素赋1
a[i][0]=a[i][i]=1;
for( i=2; i<10; i++ )〃为第2~9行的夹在第0列与主对角线之间的元素赋值
for(j=1;j< i ;j++)
a[i][j]=a[i-1][j-1]+ a[i-1][j];
for (i=0; i<10; i++){〃输出矩阵中的下三角矩阵
数组实验报告实验小结

一、实验背景随着计算机技术的不断发展,数组作为一种基本的数据结构,在编程领域得到了广泛的应用。
为了更好地理解和掌握数组的相关知识,我们进行了一系列的数组实验。
本次实验报告将对实验过程进行总结,并对实验结果进行分析。
二、实验目的1. 理解数组的基本概念和特点;2. 掌握数组的创建、访问和操作方法;3. 熟悉数组在编程中的应用;4. 培养实验操作能力和问题解决能力。
三、实验内容1. 数组的定义与创建2. 数组的初始化3. 数组元素的访问与修改4. 数组的排序与查找5. 数组的应用实例四、实验过程1. 数组的定义与创建实验一:定义一个整型数组,并初始化为10个元素。
代码如下:```c#include <stdio.h>int main() {int arr[10];// 初始化数组for (int i = 0; i < 10; i++) {arr[i] = i 2;}// 打印数组元素for (int i = 0; i < 10; i++) {printf("%d ", arr[i]);}printf("\n");return 0;}```2. 数组的初始化实验二:使用初始化列表直接初始化数组。
代码如下:```c#include <stdio.h>int main() {int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};// 打印数组元素for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) { printf("%d ", arr[i]);}printf("\n");return 0;}```3. 数组元素的访问与修改实验三:访问和修改数组元素。
代码如下:```c#include <stdio.h>int main() {int arr[5] = {1, 2, 3, 4, 5};// 访问数组元素printf("The first element is: %d\n", arr[0]);// 修改数组元素arr[0] = 10;printf("After modification, the first element is: %d\n", arr[0]); return 0;}```4. 数组的排序与查找实验四:使用冒泡排序算法对数组进行排序。
Matlab实验指导书(含答案)

实验一:Matlab操作环境熟悉一、实验目的1.初步了解Matlab操作环境。
2.学习使用图形函数计算器命令funtool及其环境。
二、实验内容熟悉Matlab操作环境,认识命令窗口、内存工作区窗口、历史命令窗口;学会使用format命令调整命令窗口的数据显示格式;学会使用变量和矩阵的输入,并进行简单的计算;学会使用who和whos命令查看内存变量信息;学会使用图形函数计算器funtool,并进行下列计算:1.单函数运算操作。
求下列函数的符号导数(1) y=sin(x);(2) y=(1+x)^3*(2-x);求下列函数的符号积分(1) y=cos(x);(2) y=1/(1+x^2);(3) y=1/sqrt(1-x^2);(4) y=(x-1)/(x+1)/(x+2);求反函数(1) y=(x-1)/(2*x+3);(2) y=exp(x);(3) y=log(x+sqrt(1+x^2));代数式的化简(1) (x+1)*(x-1)*(x-2)/(x-3)/(x-4);(2) sin(x)^2+cos(x)^2;(3) x+sin(x)+2*x-3*cos(x)+4*x*sin(x);2.函数与参数的运算操作。
从y=x^2通过参数的选择去观察下列函数的图形变化(1) y1=(x+1)^2(2) y2=(x+2)^2(3) y3=2*x^2(4) y4=x^2+2(5) y5=x^4(6) y6=x^2/23.两个函数之间的操作求和(1) sin(x)+cos(x)(2) 1+x+x^2+x^3+x^4+x^5乘积(1) exp(-x)*sin(x)(2) sin(x)*x商(1) sin(x)/cos(x);(2) x/(1+x^2);(3) 1/(x-1)/(x-2);求复合函数(1) y=exp(u) u=sin(x)(2) y=sqrt(u) u=1+exp(x^2)(3) y=sin(u) u=asin(x)(4) y=sinh(u) u=-x三、设计提示1.初次接触Matlab应该注意函数表达式的文本式描述。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验4、数组
【实验目的】
1. 掌握数组的定义、赋值和输人输出的方法;
2. 学习用数组实现相关算法(如排序、求最大和最小值、有序数组的插入等)。
【实验内容】
1. 程序填空
(1) 下面程序的功能为:输入10个数字到数组中,统计其中正数的个数并求和,完
成以下的程序并运行出正确结果。
#include <stdio.h>
void main()
{ int i,a[20],sum,count;
sum=0;
count=0;
for(i=0;i<10;i++)
/**************found**************/
scanf(“%d“, &a[i] );
for(i=0;i<10;i++)
if(a[i]>0)
{count++;
/**************found**************/
sum+= a[i] ;
}
printf(“sum=%d,count=%d\n”,sum,count);
}
(2) 下面程序的功能为:将3行4列的矩阵转置,如:
A= 128411109765321 A ’= 12
8411731062951
完成以下的程序并运行出正确结果。
#include <stdio.h>
void main()
{int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int b[4][3],i,j;
for(i=0;i<=2;i++)
/**************found**************/
for( j=0;j<=3;j++ )
/**************found**************/
b[j][i]=a[i][j] ;
printf(“array b:\n “);
for(i=0;i<=3;i++)
printf(“%4d”,b[i][j]);
printf(“\n”);
}
}
2.程序改错
(l)阅读下面的程序,修改以下程序中的错误并上机运行。
#include <stdio.h>
void main()
{int a[5],n;
for(n=0;n<=5;n++)
scanf(“%d”,&a);
for(n=0;n<=5;n++)
printf(“%5d”,a[n]);
}
正确的程序:
#include <stdio.h>
void main()
{int a[5],n;
for(n=0;n<=4;n++)
scanf(“%d”,&a[n]);
for(n=0;n<=4;n++)
printf(“%5d”,a[n]);
}
(2)下面程序的功能为:有一个3×4的矩阵,要求输出最大元素的值,以及它的行号和列号,修改以下的程序并上机运行。
#include <stdio.h>
void main()
{int max,i,j,r,c;
static int a[3][4]={{12,9,-10,28},{31,19,10,-3},{15,46,41,-9}};
max=a[1][1];
for(i=1;i<=3;i++)
for(j=1;j<=4;j++)
if(a[i][j]>max)
{max=a[i][j];
r=i+1;
c=j+1; }
printf(“max=%d,row=%d,colum=%d\n”,max,r,c);
}
正确的程序:
#include <stdio.h>
void main()
{int max,i,j,r,c;
static int a[3][4] = {{12,9,-10,28},{31,19,10,-3},{15,46,41,-9}};
max=a[0][0],r=c=0;
for(i=0;i<=2;i++)
if(a[i][j]>max)
{max=a[i][j];
r=i+1;
c=j+1; }
printf(“max=%d,row=%d,colum=%d\n”,max,r,c);
}
3.编写一个C程序,实现对10个整数进行升序排序输出(排序算法不限,要求用数组实现)。
#include<stdio.h>
void main( )
{ int x[10];
int i,j,s;
printf("输入10个整数:\n");
for(i=0;i<10;i++) scanf("%d",&x[i]);
printf("\n");
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if (x[j]>x[j+1])
{s=x[j]; x[j]=x[j+1]; x[j+1]=s; }
printf("排序结果为:\n");
for(i=0;i<10;i++) printf("%d ",x[i]);
}
4.编写一个程序,读入9个裁判所打的分数,去掉一个最高分,去掉一个最低分,求剩余7个分数的平均值(要求用数组实现)。
方法一:无须排序,直接找出最大值和最小值
#include "stdio.h"
main()
{
int i,min=0,max=0;
float score[9],sum=0;
for(i=0;i<9;i++)
{ printf("请输入裁判%d的分数:",i+1);
scanf("%f",&score[i]);
}
for(i=0;i<9;i++)
{ if(score[i]<score[min]) min=i;
if(score[i]>score[max]) max=i;
sum+=score[i];
}
sum=sum-score[min]-score[max];
printf("去掉一个最高分:%g分\n",score[max]);
printf("去掉一个最低分:%g分\n",score[min]);
printf("平均分:%g分\n",sum/7);
}
方法二:排序后去掉最大值和最小值
#include <stdio.h>
void main()
{
double sum = 0.0, a[9] = {0}, t, avg = 0.0;
int i, j;
for(i = 0; i < 9; i++)
{
scanf("%lf",&a[i]);
sum += a[i];
}
for(i = 0; i < 8; i ++)
for(j = 0; j < 8 - i; j++)
{
if(a[j] > a[j + 1])
{t = a[j]; a[j] = a[j + 1]; a[j + 1] = t;} }
avg = (sum - a[0] - a[8]) / 7.0;
printf("%8.3lf \n" ,avg);
}。