一维数组上机练习
- 格式:doc
- 大小:69.50 KB
- 文档页数:16
第4章构造数据类型第一部分数组通过本节实验作业应达目标1.学习并掌握一维数组与二维数组的定义、使用及初始化方法。
2.熟练掌握字符数组和字符串的使用方法。
3.掌握数组的一种排序算法。
4.学会用数组保存多个相关的同类数据,并对这一组数据进行各类操作。
本章必须上交作业第一部分数组作业要求:程序4_3.c、4_4_2.c、4_5.c、4_7.c、4_8.c上传至http://121.251.227.27:8080/c。
源程序可以.cpp命名。
实验一一维数组的定义和简单应用【实验目的】学会定义一维数组,掌握一维数组的遍历操作,掌握在一组数组中求最大值、最小值的方法。
【实验内容】从键盘读入5个成绩到一个数组中,求其中的最大值,最小值和平均成绩。
在屏幕上显示输入成绩的提示信息,用键盘输入一个成绩,接着提示输入下一个,直到结束。
以4_1.c命名本程序。
程序运行界面【实验提示】求最大(小)值通常用“打擂台”的方法。
首先设计两个变量,如max和min分别用来存放最大值和最小值,并将数组的首元素赋给这两个变量,这就是到目前为止的最大(小)值,然后利用循环依次比较其他的元素,总是将当前最大(小)值赋给max和min,直至比较到最后,max和min中的数据就是最大值和最小值。
求平均值还要设置一个变量sum,用来累加各元素的值。
实验二一维数组的排序【实验目的】熟练掌握一维数组三种基本排序方法:选择法,冒泡法,比较法。
【实验内容】从键盘上接收10个成绩,存放到一个一维数组score中,分别利用三种排序方法,将数组从小到大排序并在屏幕上显示排序结果。
分别以4_2_1.c、4_2_2.c和4_2_3.c命名三个程序。
【实验提示】所谓排序是指把一组杂乱无章的数据按照大小顺序排列。
将被排序的n个数据存放在一个数组中, 假如按升序排列。
我们将数组定义为a[n],数据存放在a[0] 到 a[n-1] 中。
1.比较排序法将a[0]与a[1]比较,若a[1]<a[0],则a[0]与a[1]交换,否则不变,再将a[0]与a[2]比较,同样小者交换到a[0],……如此比较下去至到a[0]与a[n-1]比较,小者放到a[0]中,第一轮比较n-1次,a[0]中的值就是n个数中最小者。
程序一:传值void swap(int a,int b){ int t;t=a; a=b; b=t;}main(){ int x=10,y=20;printf(“%d,%d\n”,x,y);swap(x,y);printf(“%d,%d\n”,x,y);}程序二:传地址void swap(int *a,int *b){ int t;t=*a; *a=*b; *b=t;}main(){ int x=10,y=20;printf(“%d,%d\n”,x,y);swap(&x,&y);printf(“%d,%d\n”,x,y);}上机练习1:现在一个数组存放10个整型数据(可以有相同),要求用户输入一个数,然后把数组中与其输入相同的数删除。
然后输出结果。
上机练习2:数组中有10个数,要求对数组进行排序,输出结果。
上机练习3:有10个学生的成绩存在数组中,请统计大于等于平均成绩的人数。
上机练习4:有10个学生的成绩存在数组中,请统计最高分,最低分,并将最高分和最低分学生的下标输出到屏幕上。
上机练习5:求a[M][N]数组四周的和。
#include <stdio.h>#define M 4#define N 5main( ){ int a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};…….}程序一:传值void swap(int a,int b){ int t;t=a; a=b; b=t;}main(){ int x=10,y=20;printf(“%d,%d\n”,x,y);swap(x,y);printf(“%d,%d\n”,x,y);}程序二:传地址void swap(int *a,int *b){ int t;t=*a; *a=*b; *b=t;}main(){ int x=10,y=20;printf(“%d,%d\n”,x,y);swap(&x,&y);printf(“%d,%d\n”,x,y);}上机练习1:现在一个数组存放10个整型数据(可以有相同),要求用户输入一个数,然后把数组中与其输入相同的数删除。
JAVA上机之一维数组和二维数组-报告JAVA上机实验之一维数组和二维数组报告|JAVA实验心得|JAVA语言编程序源代码下载1/1、定义一个处理数组的类Array,它有一个处理字符数组的成员方法,能够把数组的各元素变成小写,并在屏幕上分两行输出。
请在main方法中做如下测试:声明一个字符数组,该数组顺次赋值为连续的26个大写的英文字母,用上述Array对象处理它。
(思考:形参是二维字符数组的情况)2、定义一个描述矩形的类Rectangle,类中有两个双精度成员变量:length 和width,分别表示矩形的长和宽。
定义构造函数初始化这两个变量;定义方法求矩形的面积和周长。
编写应用程序测试类Rectangle,使用类中定义的各个方法,并将结果输出。
3、类似上题,如果是一个圆该如何定义,提示(有常量成员3.14)2/23(包括实验环境、实验内容的描述、完成实验要求的知识或技能) 实验环境:JDK1.6 + UltraEdit实验要求:1. 1、掌握Java 应用程序的编写,会熟练调试、运行Java 应用程序。
2. 2、能熟练创建和使用一维数组和二维数组。
3. 3、掌握类的定义、实例对象的创建、方法的调用。
4. 4、了解常量4()Test1:package fox.math.kmust;public final class Test1 {private static void print(Object obj) {if(obj==null){System.out.println("null");return;}if (Object[].class.isInstance(obj)) {for (Object temp : (Object[]) obj) {print(temp);}return;}if (String.class.isInstance(obj)) {String temp=(String) obj;System.out.println(temp+"\t--Lower Case--\t"+temp.toLowerCase()); } else {System.out.println(obj.toString());}}public static void main(String[] args){String[] stringArray1[]=new String[2][];stringArray1[0]=new String[13];stringArray1[1]=new String[13];for(int i=0,j=stringArray1[0].length;i<j;i++){ stringArray1[0][i]=((char)('A'+i))+""; stringArray1[1][i]=((char)('A'+i+13))+"";}print(stringArray1);}}Test2:package fox.math.kmust;public class Test2 {private static class Rectangle {private double length = 0.0;private double width = 0.0;public Rectangle(double length, double width) { if (length < 0) {length = 0.0;}if (width < 0) {width = 0.0;}this.length = length;this.width = width;}public double getArea() {return length * width;}public Rectangle() {}public double getGirth() {return 2 * (length + width);}}public static void main(String[] args) {Rectangle rectangle = new Rectangle(2.0, 4.0);System.out.printf("Area:%.2f\n", rectangle.getArea()); System.out.printf("Girth:%.2f\n", rectangle.getGirth()); }}Test3:package fox.math.kmust;public class Test3 {private static class Circle {private double radius = 0.0;public Circle() {}public double getArea() {return Math.PI * radius * radius;}public Circle(double radius) {if (radius < 0) {radius = 0.0;}this.radius = radius;}public double getGirth() {return 2 * Math.PI * radius;}}public static void main(String[] args) {Circle circle = new Circle(3.0);System.out.printf("Area:%.2f\n", circle.getArea()); System.out.printf("Girth:%.2f\n", circle.getGirth()); } }。
c语言一维数组例题当涉及到C语言的一维数组例题时,有很多不同的问题和示例可以提供。
下面是一些可能的问题和对应的回答。
1. 请解释一维数组是什么?一维数组是一种数据结构,用于存储相同类型的元素。
它由连续的内存单元组成,每个元素都有一个唯一的索引,可以通过索引访问和操作数组中的元素。
2. 如何声明和初始化一维数组?在C语言中,可以使用以下语法声明和初始化一维数组:c.数据类型数组名[数组大小] = {元素1, 元素2, ...};例如:c.int numbers[5] = {1, 2, 3, 4, 5};3. 如何访问一维数组中的元素?可以使用索引来访问一维数组中的元素。
索引从0开始,最大索引为数组大小减1。
例如,要访问上面声明的数组中的第三个元素,可以使用以下语法:c.int thirdElement = numbers[2];4. 如何在一维数组中查找特定的元素?可以使用循环结构遍历一维数组,并通过条件判断来查找特定的元素。
以下是一个示例代码,查找数组中是否存在某个特定的元素:c.int searchElement(int array[], int size, int target) {。
for (int i = 0; i < size; i++) {。
if (array[i] == target) {。
return i; // 返回元素在数组中的索引。
}。
}。
return -1; // 如果未找到,返回-1。
}。
5. 如何对一维数组进行排序?可以使用各种排序算法对一维数组进行排序,例如冒泡排序、插入排序、选择排序等。
以下是一个使用冒泡排序算法对整型数组进行升序排序的示例代码:void bubbleSort(int array[], int size) {。
for (int i = 0; i < size 1; i++) {。
for (int j = 0; j < size i 1; j++) {。
一维数组经典例题
一维数组经典例题:
一、题目描述:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
假设每种输入只会对应一个答案。
但是,你不能重复利用这个数组中同样的元素。
二、解题思路:
1. 首先遍历数组nums,确定当前遍历到的整数a;
2. 计算需要搜索的数字b=target-a;
3. 从数组元素的下一个位置开始,遍历剩余的数组元素,如果发现存在数字b,则返回a和b的下标。
三、Java代码实现:
public int[] twoSum(int[] nums, int target) {
for (int i = 0; i < nums.length; i++) {
int a = nums[i];
int b = target - a;
for (int j = i + 1; j < nums.length; j++) {
if (nums[j] == b) {
return new int[]{i, j};
}
}
}
return null;
}。
1.编写程序,找出10个数中最大的数以及最大数所在的下标。
#include<iostream>using namespace std;int main(){ int a[10],max,xiabiao,i;for(i=0;i<10;i++)cin>>a[i];max=a[0];for(i=1;i<10;i++)if(max<a[i]){ max=a[i];xiabiao=i; }cout<<"最大数为:"<<max<<"其下标为:"<<xiabiao<<endl; return 0;}子函数实现:#include<iostream>using namespace std;void fun(int b[10]); ///函数声明int main(){int a[10],i;for(i=0;i<10;i++)cin>>a[i];fun(a); //函数调用return 0;}void fun(int b[10]) //函数定义{ int max,i,xiabiao;max=b[0];for(i=1;i<10;i++)if(max<b[i]){ max=b[i];xiabiao=i;}cout<<"最大数为:"<<max<<"其下标为:"<<xiabiao<<endl;}2. 编写程序,找出10个数中最大的数和最小数,将最大数与第一个数交换位置,最小数与最后一个数交换位置。
#include<iostream>using namespace std;int main(){ int a[10],i;for(i=0;i<10;i++)cin>>a[i];int max,min,r,t,temp;max=min=a[0];r=t=0;for(i=0;i<10;i++){if(max<a[i]) {max=a[i];r=i;}if(min>a[i]) {min=a[i];t=i;}}temp=a[0];a[0]=a[r];a[r]=temp;temp=a[9];a[9]=a[t];a[t]=temp;cout<<"最大值为:"<<max<<"最小值为:"<<min<<endl;cout<<"交换后数组为"<<endl;for(i=0;i<10;i++)cout<<a[i]<<" ";cout<<endl;return 0;}子函数实现#include<iostream>using namespace std;void fun(int b[10]); //函数声明int main(){ int a[10],i;for(i=0;i<10;i++)cin>>a[i];fun(a); // 函数调用cout<<"交换后数组为"<<endl;for(i=0;i<10;i++)cout<<a[i]<<" ";cout<<endl;return 0;}void fun(int b[10]) //函数定义{ int max,min,r,t,i,temp;max=min=b[0];for(i=0;i<10;i++){if(max<b[i]) {max=b[i];r=i;}if(min>b[i]) {min=b[i];t=i;}}temp=b[0];b[0]=b[r];b[r]=temp;temp=b[9];b[9]=b[t];b[t]=temp;cout<<"最大值为:"<<max<<"最小值为:"<<min<<endl;}3. 将一个数组中的值按逆序重新存放。
VB练习题(上机)含答案VB练习题(上机)含答案第一部分1 在窗体上添加一个命令按钮(名称为Cmd1,标题为"输出平均值")。
程序运行后,单击命令按钮完成以下工作:①随机产生20个0到1000的整数,将其放入一个一维数组中②求出所有元素的平均值,并显示在窗体上(如下图所示)Private Sub Cmd1_Click()Dim a%(19), i%, sum!, aver!RandomizeFor i = 0 To 19a(i) = Int(Rnd * 1001)sum = sum + a(i)Next iaver = sum / 20Print averEnd Sub2 请在名称为Form1的窗体上添加一个名称为Text1的文本框和一个名称为C1、标题为"转换"的命令按钮,如下图所示。
在程序运行时,单击"转换"按钮,可以把Text1中的小写字母转换为大写,把大写字母转换为小写,其他字符不变。
Private Sub C1_Click()Dim ch As String, ch1 As String, i%ch = Text1For i = 1 To Len(ch)If Asc(Mid(ch, i, 1)) >= 65 And Asc(Mid(ch, i, 1)) <= 90 Thench1 = ch1 + LCase(Mid(ch, i, 1)) Elsech1 = ch1 + UCase(Mid(ch, i, 1)) End IfNext iText1 = Text1 + vbCrLfText1 = Text1 + ch1End Sub3 在窗体上添加一个命令按钮(名称为MyCmd1,标题为"输出最大值")。
程序运行后,单击命令按钮完成以下工作:①随机产生30个0~1000的整数,将其放入一个一维数组中②求出其中的最大值,并显示在窗体上。
数组编程练习1、产生一个由10个元素组成的一维数组并输出,数组元素由随机数(0-99)构成。
解:#include<stdio.h>#include<math.h>#define N 10int main(){int a[N],i;for(i=0;i<N;i++){a[i]=rand()%100;}printf("array a:\n");for(i=0;i<N;i++){printf("%4d",a[i]);}printf("\n");return 0;}2、产生一个由10个元素组成的一维数组并输出,数组元素由随机数(0-99)构成。
求该数组的最大值、最小值、总和和平均值并输出。
解:#include<stdio.h>#include<math.h>#define N 10int main(){int a[N],i,max,min,sum;float ave;for(i=0;i<N;i++){a[i]=rand()%100;}printf("array a:\n");for(i=0;i<N;i++){printf("%4d",a[i]);}printf("\n");max=a[0];min=a[0];sum=0;for(i=0;i<N;i++){sum=sum+a[i];if(a[i]>max){max=a[i];}if(a[i]<min){min=a[i];}}ave=(float)sum/N;printf("max=%d,min=%d,sum=%d,ave= %.2f\n",max,min,sum,ave);return 0;}3、产生一个由10个元素组成的一维数组并输出,数组元素由随机数(0-99)构成。
基本练习:(采用文件输入输出)1.输入一串小写字母(以"."为结束标志),统计出每个字母在该字符串中出现的次数(若某字母不出现,则不要输出) ,例:输入:aaaabbbccc.输出:a:4b:3c:3规定:文件名:tongji.pas 输出文件:tongji.in输出文件tongji.out程序:var a:array['a'..'z'] of integer;n:char;beginassign(input,’tongji,in’);reset(input);assign(output,’tongji.out’);rewrite(output);read(n);while n<>'.' dobegininc(a[n]);read(n);end;for n:='a' to 'z' doif a[n]<>0 then writeln(n,':',a[n]);close(input);close(output);end.2.输入一个不大于32767(integer)的正整数N,将它转换成一个二进制数,例如:输入:100输出:1100100规定:文件名:erjinzhi.pas 输出文件:erjinzhi.in输出文件erjinzhi.out程序:vara:array[1..16] of integer;b,c,d,e:integer;beginassign(input,'erjinzhi.in');reset(input);assign(output,'erjinzhi.out');rewrite(output);readln(b);if b>=0 then write(b,'=')else write(b,'= -');b:=abs(b);d:=0;while b>0 dobegininc(d);a[d]:=b mod 2;b:=b div 2;end;for e:=d downto 1 do write(a[e]);writeln;readln;close(input);close(output);end.提高练习:(采用文件输入输出)*3.输入一个由10个整数组成的序列,其中序列中任意连续三个整数都互不相同,求该序列中所有递增或递减子序列的个数,例如:输入:1 10 8 5 9 3 2 6 7 4输出:6对应的递增或递减子序列为:1 1010 8 55 99 3 22 6 77 4规定:文件名:geshu.pas 输出文件:geshu.in输出文件geshu.outconst n=10; {此程序输出序列数}var a:array[1..n]of integer;i,k,x:integer;begin for i:=1 to n doread(a[i]);i:=2;x:=1; {表示序列数}if a[i-1]<=a[i] then k:=1 else k:=2;{k=1表示大于k=2表示小于}while i<n dobegin inc(i);case k of1: if a[i-1]>a[i] then begin k:=2;inc(x);end;2: if a[i-1]<a[i] then begin k:=1; inc(x);end;end;end;writeln(x);end.*4.输入N个数,将这N个数按从小到大的顺序显示出来;规定:文件名:paixu.pas 输出文件:paixu.in输出文件paixu.outvara:array[1..100000000] of integer;b,c,d,i,z:longint;beginassign(input,' paixu.in');reset(input);assign(output,' paixu.out');rewrite(output);readln(i); //读入输入个数for i:=1 to i do read(a[i]); //循环读入,放入数组for c:=1 to i dobeginfor b:=(c+1) to i do beginif a[c]>a[b] thenbegina[c]:=a[c] xor a[b];a[b]:=a[c] xor a[b];a[c]:=a[c] xor a[b];end;end;end;for z:=1 to i dowrite(a[z], ' ');close(input);close(output);end.**5.猴子选大王:有N只猴子围成一圈,每只猴子各一个从1到N中的依次编号,打算从中选出一个大王;经过协商,决定出选大王的规则:从第一个开始循环报数,数到M的猴子出圈,最后剩下来的就是大王。
要求:从键盘输入N、M,编程计算哪一个编号的猴子成为大王样例:输入:73输出:4输入:52输出:3待解:输入:99915输出:?规定:文件名:houzi.pas 输出文件:houzi.in输出文件houzi.outvar n,m,i,j,k,l,t:longint;a:array[0..100000] of longint;f:array[0..100000] of boolean;beginreadln(n,m);for i:=1 to n dobegin a[i]:=i; f[i]:=true; end;j:=0; k:=0;while j<>n-1 do // j 为已经筛除的个数begint:=0;while t<>m dobegin //循环报数if f[k] then inc(t); //t为现在报数的号数l:=k;if k<>n then inc(k) else k:=1;//检测编号是否大于总人数 end;f[l]:=false;inc(j);end;for i:=1 to n doif f[i] then begin writeln(i); halt; end;end.排序4.1 简单排序1.选择排序选择排序的基本思想是:对待排序的记录序列进行n-1遍的处理,第1遍处理是将L[1..n]中最小者与L[1]交换位置,第2遍处理是将L[2..n]中最小者与L[2]交换位置,......,第i遍处理是将L[i..n]中最小者与L[i]交换位置。
这样,经过i遍处理之后,前i个记录的位置就已经按从小到大的顺序排列好了。
例1:输入序列数据按非减顺序输出.程序如下:program xzpx;const n=7;var a:array[1..n] of integer;i,j,k,t:integer;beginwrite('Enter date:');for i:= 1 to n do read(a[i]);writeln;for i:=1 to n-1 dobegink:=i;for j:=i+1 to n doif a[j]<a[k] then k:=j;if k<>i thenbegin t:=a[i];a[i]:=a[k];a[k]:=t;end;end;write('output data:');for i:= 1 to n do write(a[i]:6);writeln;end.2.插入排序插入排序的基本思想:经过i-1遍处理后,L[1..i-1]己排好序。
第i遍处理仅将L[i]插入L[1..i-1]的适当位置p,原来p后的元素一一向右移动一个位置,使得L[1..i]又是排好序的序列。
例2:输入序列数据按非减顺序输出.程序1:program crpx;const n=7;var a:array[1..n] of integer;i,j,k,t:integer;beginwrite('Enter date:');for i:= 1 to n do read(a[i]);writeln;for i:=2 to n dobegink:=a[i];j:=i-1;while (k<a[j]) and (j>0) dobegin a[j+1]:=a[j];j:=j-1 end;a[j+1]:=k;end;write('output data:');for i:= 1 to n do write(a[i]:6);writeln;end.3.冒泡排序冒泡排序又称交换排序其基本思想是:对待排序的记录的关键字进行两两比较,如发现两个记录是反序的,则进行交换,直到无反序的记录为止。
例:输入序列数据按非减顺序输出。
程序1:program mppx;const n=7;var a:array[1..n] of integer;i,j,k,t:integer;beginwrite('Enter date:');for i:= 1 to n do read(a[i]);for i:=1 to n -1 dofor j:=n downto i+1 doif a[j-1]<a[j] thenbegin t:=a[j-1];a[j-1]:=a[j];a[j]:=t end;write('output data:');for i:= 1 to n do write(a[i]:6);writeln;end.程序2:program mppx;const n=7;var a:array[1..n] of integer;i,j,k,t:integer;bool:boolean;beginwrite('Enter date:');for i:= 1 to n do read(a[i]);i:=1;bool:=true;while (i<n) and bool dobeginbool:=false;for j:=n downto i+1 doif a[j-1]<a[j] thenbegin t:=a[j-1];a[j-1]:=a[j];a[j]:=t;bool:=true end;i:=i+1;end;write('output data:');for i:= 1 to n do write(a[i]:6);writeln;end.程序3:program mppx;const n=7;var a:array[1..n] of integer;i,j,k,t:integer;beginwrite('Enter date:');for i:= 1 to n do read(a[i]);writeln;k:=n;while k>0 dobeginj:=k-1;k:=0;for i:=1 to j doif a[i]>a[i+1] thenbegin t:=a[i];a[i]:=a[i+1];a[i+1]:=t;k:=i;end;end;write('output data:');for i:= 1 to n do write(a[i]:6);writeln;end.返回4.2快速排序快速排序的思想是:先从数据序列中选一个元素,并将序列中所有比该元素小的元素都放到它的右边或左边,再对左右两边分别用同样的方法处之直到每一个待处理的序列的长度为1, 处理结束.例:输入一组数据小到大排序.程序1:program kspv;const n=7;typearr=array[1..n] of integer;vara:arr;i:integer;procedure quicksort(var b:arr; s,t:integer);var i,j,x,t1:integer;begini:=s;j:=t;x:=b[i];repeatwhile (b[j]>=x) and (j>i) do j:=j-1;if j>i then begin t1:=b[i]; b[i]:=b[j];b[j]:=t1;end;while (b[i]<=x) and (i<j) do i:=i+1;if i<j then begin t1:=b[j];b[j]:=b[i];b[i]:=t1; end until i=j;b[i]:=x;i:=i+1;j:=j-1;if s<j then quicksort(b,s,j);if i<t then quicksort(b,i,t);end;beginwrite('input data:');for i:=1 to n do read(a[i]);writeln;quicksort(a,1,n);write('output data:');for i:=1 to n do write(a[i]:6);writeln;end.程序2:program kspv;const n=7;typearr=array[1..n] of integer;vara:arr;i:integer;procedure quicksort(var b:arr; s,t:integer);var i,j,x:integer;begini:=s;j:=t;x:=b[i];repeatwhile (b[j]>=x) and (j>i) do j:=j-1;if j>i then begin b[i]:=b[j];i:=i+1;end;while (b[i]<=x) and (i<j) do i:=i+1;if i<j then begin b[j]:=b[i];j:=j-1; enduntil i=j;b[i]:=x;i:=i+1;j:=j-1;if s<j then quicksort(b,s,j);if i<t then quicksort(b,i,t);end;beginwrite('input data:');for i:=1 to n do read(a[i]);writeln;quicksort(a,1,n);write('output data:');for i:=1 to n do write(a[i]:6);writeln;end.返回4.3希尔排序基本思想:将整个无序序列分割成若干小的子序列分别进行插入排序或冒泡排序。