实验2-2、数组(有答案)
- 格式:doc
- 大小:55.50 KB
- 文档页数:4
数学实验二实验内容:学习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 中是按列优先搜索的,而题目的程序是按行有限搜索。
实验二 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,实现两个整数的交换。
一、单选题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、下面程序执行后的输出结果是()。
一、实验背景随着计算机技术的不断发展,数组作为一种基本的数据结构,在编程领域得到了广泛的应用。
为了更好地理解和掌握数组的相关知识,我们进行了一系列的数组实验。
本次实验报告将对实验过程进行总结,并对实验结果进行分析。
二、实验目的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操作环境熟悉一、实验目的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.输入两个整型数字,输出他们的和。
#include<stdio.h>main(){int a, b, sum;scanf(“%d%d ”, &a, &b);sum=a+b;printf(“a+b=%d ”, sum);}2.输入两个实型数,输出他们的和与乘积。
#include<stdio.h>main(){float a, b, sum, product;scanf(“%f%f ”, &a, &b);sum=a+b;product=a*b;printf(“a+b=%5.2f, a*b =%5.2f ”, sum, product);}3.求方程02=++c bx ax 的根(设042≥-ac b )(其中a ,b ,c 的值由键盘输入)。
#include<stdio.h>#include<math.h>main(){float a, b, c, dt, x1, x2;scanf(“%f%f%f ”, &a, &b, &c);dt=sqrt(b*b-4*a*c);x1=(-b+dt)/(2*a);x2=(-b-dt)/(2*a);printf(“x1=%5.2f, x2 =%5.2f ”, x1, x2);}4.鸡兔同笼,已知鸡兔总头数为h,总脚数为f,求鸡兔各多少只?(h和f的值由键盘输入,输出鸡和兔的头数)#include<stdio.h>main(){int h, f, x,y;scanf(“%d%d”, &h, &f);x=2*h-f/2;y=f/2-h;printf(“x=%d, y =%d”, x, y);}实验三参考答案1.输入三个数a、b、c,要求按由小到大的顺序输出。
#include<stdio.h>main(){float a,b,c,t;scanf(“%f,%f,%f”,&a,&b,&c);if(a>b){t=a; a=b; b=t;}if(a>c){t=a; a=c; c=t;}if(b>c){t=b; b=c; c=t;}printf(“%f,%f,%f”,a,b,c);}2.编写程序,输入三角形三边a、b、c,判断a、b、c能否构成三角形,若不能则输出相应的信息,若能则判断组成的是等腰、等边、直角还是一般三角形。
实验6 数组的应用一、实验目的1、掌握一维数组、二维数组的概念和定义2、掌握数组元素的引用、赋值和输入/输出方法3、掌握使用循环结构控制数组元素的下标按规律变化来处理一维数组元素和二维数组元素的程序设计方法二、实验内容1. 写出下列程序运行后的输出结果并上机验证。
①#include <iostream>using namespace std;int main(){int a[10]={12,39,26,41,55,63,72,40,83,95};int k=0,j=0;for (int i=0;i<10;i++)if (a[i]%2==1) k++; else j++;cout<<k<<' '<<j<<endl;}6 4②#include <iostream>using namespace std;int main(){char a[]="abcdabcabfgacd";int i1=0,i2=0,i=0;while(a[i]){if(a[i]=='a') i1++;if(a[i]=='b') i2++;i++;}cout<<i1<<' '<<i2<<' '<<i<<endl;4, 3,14③#include <iostream>using namespace std;int main(){int a[10]={76,83,54,62,40,75,90,92,77,84};int b[4]={60,70,90,101};int c[4]={0};int i;for(i=0;i<10;i++){int j=0;while(a[i]>=b[j]) j++;c[j]++;}for(i=0;i<4;i++) cout<<c[i]<<' ';cout<<endl;}2 1 5 2④#include <iostream>#include <string>using namespace std;int main(){char a[5][10]={"student","worker","soldier","cadre","peasant"};char s1[10],s2[10];strcpy(s1,a[0]);strcpy(s2,a[0]);//strcpy(s1,s2)为字符串复制函数,将字符串变量s2的值复制给s1for(int i=1;i<5;i++){if(strcmp(a[i],s1)>0) strcpy(s1,a[i]);//strcmp(s1,s2)为字符串比较函数if(strcmp(a[i],s2)<0) strcpy(s2,a[i]);}cout<<s1<<' '<<s2<<endl;worker cadre说明:(s1、s2为字符串变量或者字符数组)strcpy(s1,s2);strcpy是string copy(字符串复制)的缩写。
实验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);
}。