实验5 二维数组和字符数组的定义和使用

合集下载

实验五 数组实验

实验五  数组实验

实验五数组的使用一实验目的要求1 掌握数组的概念和使用方法。

2 掌握数组初始化的方法。

3学会字符数组和字符串的应用。

4 学会用数组名作函数的参数。

二有关概念1 只有静态数组和外部数组才能初始化。

2 引用数组时,对下标是否越界不作检查。

如定义int a[5];在引用时出现a[5],不给出错信息,而是引a[4]下面一个单元的值。

3 字符串放在字符数组中,一个字符串以‘/o’结束,有一些字符串函数如strcpy,strcmp,strlen等可以方便一进行字符串运算。

4 如有如下定义:char *str=“I love china”;表示 str是一个字符型指针变量,它的值是一个字符数据的地址。

不要认为str是字符串变量,在其中存放一个字串“I love china”。

5 用数组名作函数实参时,传到形参的是数组的首地址。

三实验内容和步骤1 定义三个数组int a[5];int b[2][2];char c[10];(1)分别在函数体外和函数体内对它们进行初始化,然后输出它们的值。

(2)在程序中再加一语句,输出a[5],b[2][2] ,分析结果。

(3)对C数组改为用赋值语句给各元素赋初值:c[0] ~ c[9]各元素分别为:…I‟, …‟, …a‟, …m‟, …‟, …b‟, …o‟, …y‟。

然后用printf(“%s”,c)输出字符串,分析结果。

参考程序如下:(1)main(){ int i,x,y;static int a[5]={1,2,3,4,5};static int b[3][2]={{3,4},{6,7},{9,5}}static char c[10]={ …i‟, …l‟, …p‟, …q‟, …k‟, …s‟, …d‟, …e‟, …a‟};for(i=0;i<5;i++)printf( “%5d”,a[i]);for(x=0;x<3;x++)for(y=0;y<2;y++)printf(“%5d”,b[x][y]);for(i=0;i<10;i++)printf(“%3c”,c[i]);}(2)结果无此值,在上面程序中要输出a数组第5个元素,和b数组的第3行第2例元素,应加此程序行:Printf(“%d”,a[4]);Printf(“%d”,b[2][1]);2 有一数组,内放10个整数,要求找出最小的数和它的下标。

字符数组的定义及使用

字符数组的定义及使用

字符数组的定义及使用
1、从键盘输出一个长度不超过20的字符串,输出它们的长度,输出这个字符串,并以逆序的方式输出这个字符串,例如:输入thankyou,可以试验一下输入thank you,看输出结果?应该输出长度为9,thankyou,这个字符串thankyou,然后再输出逆序为uoyknaht.
一、题意分析:1、定义一个字符串数组度为a[20],
2、字符串从键盘上输入这样一个字符串给数组。

3、输出长度:n=strlen(a);计算这个字符串长度,将长度值送给变量n,打印的n的值。

4、输出这个字符串,用printf("%s",数组名);
5、逆序输出:原来从前向后,逆序从后到前相当于最后一个到最前边那一个,最后一个是第几个(下标是第几个)
在上例中:thankyou最后一个下标是7,最前边下标第0个。

如果现在不知道具体的值,只知道刚才算出来长度为n,最后一个字符的下标n-1-1,也就是n-2,最前那个字符的下标是0.由此看到一个通用的公式for(i=n-2;i>=0;i--),打印一个个的字符,而不是一个字符串。

二:根据上面的题意的分析写出程序:
学生上机根据以上程序分析上机编写程序并调试结果是否正确。

c语言中的二维数组

c语言中的二维数组

c语言中的二维数组一、二维数组的定义和基本概念在C语言中,二维数组是具有二维结构的数组,它相当于一个矩阵。

二维数组由行和列组成,每一行都是一个一维数组,而整个二维数组是由多个这样的行组成的。

二维数组的元素用方括号和行号、列号表示,例如:array[i][j]。

二、二维数组的初始化1.静态初始化:在定义二维数组时,可以使用大括号{}为数组元素赋初值。

例如:```cint array[3][3] = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};```2.动态初始化:在程序运行过程中,可以使用循环为二维数组赋值。

例如:```cint array[3][3];for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {array[i][j] = i * 3 + j + 1;}}```三、二维数组的访问和操作1.访问二维数组的元素:使用数组名和方括号表示,如:array[i][j]。

2.修改二维数组的元素:使用赋值操作符“=”,如:array[i][j] = value。

3.遍历二维数组:使用嵌套循环,如:```cfor (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {printf("%d ", array[i][j]);}printf("");}```四、二维数组的应用实例1.矩阵加法:两个矩阵相加,结果为一个同样大小的矩阵,元素为两个矩阵对应位置元素的和。

```c#define ROW 3#define COL 3int matrix1[ROW][COL] = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};int matrix2[ROW][COL] = {{9, 8, 7},{6, 5, 4},{3, 2, 1}};int result[ROW][COL];for (int i = 0; i < ROW; i++) {for (int j = 0; j < COL; j++) {result[i][j] = matrix1[i][j] + matrix2[i][j];}}for (int i = 0; i < ROW; i++) {for (int j = 0; j < COL; j++) {printf("%d ", result[i][j]);}printf("");}```2.矩阵乘法:一个矩阵与另一个矩阵相乘,结果为一个大小为行数乘以列数的矩阵,元素为两个矩阵对应位置元素的乘积之和。

8.2二维数组和字符串

8.2二维数组和字符串

例:一个专业当中同学分为不同的班级,引进二维数组一、二维数组(一)二维数组的定义1.定义方式:数据类型数组名[常量表达式][常量表达式];其中,第一个常量表达式代表数组的行数,第二个表达式代表数组的列数,元素个数=行数*列数注意:第一个常量表达式可以为空,但第二个常量表达式不能为空。

第38套修改第16、17、69套填空例:int a[3][4]; /*表示整型二维数组,有3行4列*/ 该数组下标共有3×4个,即:第15、16、66、67、68套填空说明:在声明二维数组int[3][4]以后,可以把二维数组a认为含有3个元素的一维数组,这3个元素就是a[0],a[1],a[2],每一个元素就相当于一行,每一个元素又是含有4个元素的一维数组。

存储方式:在C语言中,二维数组是按行序优先存放的,先存放a[0]行元素,再存放a[1]行元素,最后存放a[2]行元素。

(二)二维数组元素的引用形式:数组名[下标][下标]其中,第一个下标为行下标,第二个下标为列下标。

例:引用第2行第3列的数组,即a[1][2](数组的行列下标从0开始)注意:在二维数组中,不能整体引用整个数组,只能对单个元素进行操作。

main(){int a[2][3],i,j;for(i=0;i<2;i++) /*引用二维数组的行*/for(j=0;j<3;j++) /*引用二维数组的列*/scanf("%d",&a[i][j]);for(i=0;i<2;i++){for(j=0;j<3;j++) /*加上{},实现每输出一行就换行的操作*/ printf("%d ",a[i][j]);printf("\n");}}(三)二维数组元素的初始化(四)二维数组举例将一个二维数组行和列的元素互换,存到另一个二维数组中。

输出: 程序:#include<stdio.h> main() {int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2],i,j; printf(“array a:\n ”); for(i=0;i<=1;i++) {for(j=0;j<=2;j++) {a=1 2 3 4 5 6b=1 42 53 6printf(“%5d”,a[i][j]);b[j][i]=a[i][j];}printf(“\n”);}printf(“array b:\n”);for(i=0;i<=2;i++){for(j=0;j<=1;j++)printf(“%5d”,b[i][j]);printf(“\n”);}}二、字符数组和字符串(一)字符数组1.定义:用来存放字符数据的数组是字符数组。

05二维数组

05二维数组

二维数组在许多问题的应用中一维数组可能受到限制,如计算下面课程表中的课程星期一星期二 星期三 星期四 星期五 星期六 星期日这些课程位于不同的行和列,例如星期二的英语位于第二行,第二列,可表示为:a(2,2) 它有两个下标,即“行下标”和“列下标”,这种元素叫双下标元素。

同类元素构成的数组为二维数组。

二维数组的定义格式: type数组类型标识符=array[下标类型1,下标类型2] of 元素类型; 或:var 数组变量名:array[下标类型1,下标类型2] of 基类型; var a:array[1..10,1..10] of real;第一节 第二节 第三节 第四节 第五节 第六节 第七节例:要求对每一位学生的各课成绩进行汇总,并将总成绩写入表中第五列。

Program e;Varm:array[1..4,1..5] of real;i,j:integer;beginfor i:=1 to 4 do m[i,5]:=0;{将第五列元素清零}for i:=1 to 4 do {计算每个学生的成绩总和}beginfor j:=1 to 4 dobeginread(m[i,j]);m[i,5]:=m[i,5]+ m[i,j];end;readln;end;for i:=1 to 4 do{按学号每一个学生的各课成绩和总成绩}beginfor j:=1 to 5 dowrite(m[i,j]:6:1);writeln;end;end.例2.有下列数据组成的1个数据区域{此类数据区域在数学中称为矩阵}1 2 34 5 678 9要求输出格式为:1 4 72 5 83 6 9分析:此题是将原来的行变成输出的列,如:b[j,i]:=a[i,j]program e2;vara,b:array[1..3,1..3] of integer;m,n:integer;beginfor m:=1 to 3 dobeginfor n:=1 to 3 dobeginread(a[m,n]);b[n,m]:=a[m,n];end;readln;end;for m:=1 to 3 dobeginfor n:=1 to 3 dowrite(b[m,n]:4);writeln;end;end.例3.打印杨辉三角前6行。

二维数组知识点

二维数组知识点

二维数组知识点二维数组是编程中一个非常重要的概念。

在这篇文章里,咱们就来好好聊聊二维数组到底是怎么一回事。

想象一下,你有一个书架,这个书架不是一层,而是分成了好几层,每一层又分成了好多格子。

二维数组就有点像这个书架,它不仅有行,还有列。

咱们先从最基础的说起。

二维数组在很多编程语言里,就像是一个表格。

比如说,你可以定义一个 3 行 4 列的二维数组,那就像是一个 3 行 4 列的表格。

那怎么创建一个二维数组呢?不同的编程语言有不同的方法,但原理是差不多的。

以 C 语言为例,你可以这样写:`int arr34;`这就创建了一个 3 行 4 列的整数类型的二维数组。

创建好了之后,怎么给里面放东西呢?还是拿刚才的例子来说,你可以通过下标来给每个位置赋值。

比如`arr00 = 1;`这就把 1 放到了第一行第一列的位置。

在使用二维数组的时候,要注意下标的范围。

因为如果下标越界了,程序可能就会出错。

比如说,咱们刚才创建的是 3 行 4 列的数组,那么行的下标就只能是 0、1、2,列的下标就只能是 0、1、2、3。

二维数组在实际编程中有很多用处。

比如说,你要存储一个矩阵的数据,二维数组就很合适。

再比如,你要表示一个棋盘的状态,二维数组也能派上用场。

咱们来举个例子,假设你要写一个程序来计算一个矩阵的和。

那首先,你得把矩阵的数据存到二维数组里,然后通过两层循环来遍历这个二维数组,把每个元素加起来。

```cinclude <stdioh>int main(){int arr33 ={{1, 2, 3},{4, 5, 6},{7, 8, 9}};int sum = 0;int i, j;for (i = 0; i < 3; i++){for (j = 0; j < 3; j++){sum += arrij;}}printf("矩阵的和为:%d\n", sum);return 0;}```在这个例子里,我们先定义了一个 3 行 3 列的二维数组来存储矩阵的数据,然后通过两层循环来计算矩阵的和。

C语言实验报告(五)

C语言实验报告(五)

C 语言实验报告(五)一、实验目的1. 掌握使用 C 语言中数组的方法2. 掌握如何定义数组,如何引用数组元素3. 掌握二维数组的元素在内存中的存放方式4. 掌握什么是字符串,字符串结束符的作用5. 实现字符串的存储和操作,包括字符串的输入和输出6. 理解 C 语言将字符串作为一个特殊的一维字符数组二、实验内容描述:津津上初中了。

妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。

此外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。

但是津津如果一天上课超过八个小时就会不高兴,而且,上得越久就会越不高兴。

假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。

请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴。

如果会的话,哪天最不高兴。

输入:输入数据有多组,第一行包含一个整数 T,表示有 T 组数据。

每组输入包括七行数据,分别表示周一到周日的日程安排。

每行包括两个小于 10 的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。

输出:输出包括一行,这一行只包含一个数字。

如果不会不高兴则输出 0,如果会则输出最不高兴的是周几 (用 1,2,3,4,5,6,7 分别表示周一,周二,周三,周四,周五,周六,周日)。

如果有两天或者两天以上不高兴的程度相当,则输出时间最靠前的—天。

5 36 27 25 35 40 40 63描述:某公司邀请 40 个顾客参加投票活动,选举他们最爱慕的产品,以决定公司今后的销售策略。

共有编号为 1 号~10 号的 10 个产品,每人只能选择一个产品。

编写程序,在整数数组中设置这 40 个值(投票情况),然后统计投票结果(每一个产品的得票数目)。

输入:40 个数值在 1~10 (含 1 和 10)之间的整数输出:如下所示:1 1 1 1 123 3 3 3 34 45 5 5 56 6 6 6 6 6 6 67 7 7 7 78 8 8 8 89 9 9 10 10如上图所示描述:有 n 个(n<=40)学生,现要统计这 n 个学生一次考试中不及格的人数输入:有两行,第一行为整数n;第二行为 n 个整数成绩(100(含) 以内)输出:一个整数,表示 n 个成绩中低于 60 分的个数样例输入:590 45 67 80 56样例输出:2描述:有一个长度为 n 的整数序列。

Java二维数组以及多维数组的定义及应用

Java二维数组以及多维数组的定义及应用

Java⼆维数组以及多维数组的定义及应⽤⼀、⼆维数组以及多维数组1、⼆维数组的定义:在⼀维数组中定义每⼀个元素也是⼀个数组元素,这样的数组称为”⼆维数组“多维数组就是在⼀维数组上再次定义⼆维数组或三位数组等。

⼀维数组定义 int [] array={1,2,3}//定义三个长度的⼆维数组,其数组的每⼀个元素是⼀个⼀维数组int [][] arrays={{},{},{}};或者int [][] arrays=new int [3][2];//等号右边的左边[]中表⽰⼆维数组的长度,其中2可以省略,3不能省略//注意:等号左边有⼏个[]就表⽰⼏维//1、定义⼆维数组int [][] array;//定义时给⼆维数组赋值 3个长度的⼆维数组⾥⾯的⼀维数组的长度不⼀定相等int [][] array2={{1,2,3},{4,5},{7,8}}//定义时只指定⼤⼩,不给定初始值int [][]array3=new int[3][];//等价{{},{},{}}//array3[0][0]=1;//赋值时空指针异常,因为⾥⾯的⼀维数组是空的//定义⼀个3个长度的⼆维数组,⾥⾯的元素长度是2int array4[][]=new int[3][2];//给元素赋值array4[0][0]=1;//输出⼆维数组中的所有元素for(int i=0;i<array4.length;i++){//System.out.println(array4[i]);for(int j=0;j<array4[i].length;j++){System.out.println(array[i][j]);}}⼆、⼆维数组的应⽤1、定义5*5的矩阵,计算最⼤值最⼩值public class Test{public static void main(String[] args) {//定义⼀个5*5的⼆维数组int [][] array=new int[5][5];//定义最⼤值,并初始化int max=0;//定义最⼩值,并初始化int min=0;//为⼆维数组中的每⼀个元素赋上⼀个0-100的整数值,并遍历输出⼆维数组for (int i = 0; i <array.length ; i++) {for (int j = 0; j <array[i].length ; j++) {array[i][j]=(int)(Math.random()*100);System.out.print(array[i][j]+"\t");}System.out.println();//换⾏}//将数组中的第⼀个元素赋值给maxmax =array[0][0];for (int i = 0; i <array.length ; i++) {for (int j = 0; j <array[i].length ; j++) {//如果数组中元素⼤于max,则将元素赋值给maxif(array[i][j]>=max){max=array[i][j];}}}//输出⼆维数组中的最⼤值System.out.println("最⼤值为:"+max);//将数组中的第⼀个元素赋值给minmin =array[0][0];for (int i = 0; i <array.length ; i++) {for (int j = 0; j <array[i].length ; j++) {//如果元素⼩于min,则将元素赋值给minif(array[i][j]<=min){min=array[i][j];}}}//输出⼆维数组中的最⼩值System.out.println("最⼩值为:"+min);}}2、五⼦棋游戏public class Test{//定义⼀个字符串型20*20的⼆维数组static String [][] qipan=new String[20][20];public static void main(String[] args) {System.out.println("------------------------------五⼦棋游戏------------------------------"); //初始化棋盘for (int i = 0; i <qipan.length; i++) {for (int j = 0; j <qipan[i].length; j++) {qipan[i][j]="+";}}printQipan();System.out.println("游戏开始:");Scanner sc=new Scanner(System.in);while(true) {System.out.println("请玩家(⿊棋)落⼦:");System.out.print("请输⼊棋⼦的⾏数(1-20):");int num1 = sc.nextInt();System.out.print("请输⼊棋⼦的列数(1-20):");int num2 = sc.nextInt();if (num1 <= 0 || num1 > 20 || num2 <= 0 || num2 > 20 ) {System.out.println("落⼦超出棋盘边界,请重新落⼦!");continue;} else {if( qipan[num1 - 1][num2 - 1] != "+"){System.out.println("该位置已有棋⼦,请重新落⼦!");continue;}else{qipan[num1-1][num2-1]=" ";}}//⽩棋落⼦int row=0;int col=0;// System.out.println("⽩棋思考中...");while(true){row=(int)(Math.random()*20);col=(int)(Math.random()*20);if(qipan[row][col]=="+"){break;}}qipan[row][col]="●";//打印棋盘printQipan();//判断输赢if(judge()){System.out.println(s+"赢了");break;}}}//打印棋盘public static void printQipan(){for (int i = 0; i <qipan.length ; i++) {for (int j = 0; j <qipan[i].length ; j++) {System.out.print(qipan[i][j]+"\t");}System.out.println();}}//判断输赢的⽅法static String s="";public static boolean judge(){boolean flag=false;for (int i = 0; i <qipan.length; i++) {for (int j = 0; j <qipan[i].length ; j++) {if(qipan[i][j]==" "||qipan[i][j]=="●"){//判断横向if(j<16&&qipan[i][j]==qipan[i][j+1]&&qipan[i][j]==qipan[i][j+2]&&qipan[i][j]==qipan[i][j+3]&&qipan[i][j]==qipan[i][j+4]){s=qipan[i][j];flag=true;break;}//判断右斜下else if(i<16&&j<16&&qipan[i][j]==qipan[i+1][j+1]&&qipan[i][j]==qipan[i+2][j+2]&&qipan[i][j]==qipan[i+3][j+3]&&qipan[i][j]==qipan[i+4][j+4]){s=qipan[i][j];flag=true;break;}//判断纵向else if(i<16&&qipan[i][j]==qipan[i+1][j]&&qipan[i][j]==qipan[i+2][j]&&qipan[i][j]==qipan[i+3][j]&&qipan[i][j]==qipan[i+4][j]){s=qipan[i][j];flag=true;break;}//判断左斜下else if(i<16&&j>3&&qipan[i][j]==qipan[i-1][j-1]&&qipan[i][j]==qipan[i-2][j-2]&&qipan[i][j]==qipan[i-3][j-3]&&qipan[i][j]==qipan[i-4][j-4]){s=qipan[i][j];flag=true;break;}}}}return flag;}}拓展:利⽤⼆分法查找数组中的元素public class Test {public static void main(String[] args) {// 1、指定⼀个20个长度的数组随机数int [] array=new int[20];for (int i = 0; i <array.length; i++) {array[i]=(int)(Math.random()*100);}//输出数组中的每⼀个元素System.out.println("数组中的元素为:");System.out.println(Arrays.toString(array));// 2、排序(升序)Arrays.sort(array);//输出排序后的数组System.out.println("排序后的数组为:");System.out.println(Arrays.toString(array));// 3、输⼊⼀个⽬标数Scanner sc=new Scanner(System.in);System.out.print("请输⼊想要查找的数字:");int num=sc.nextInt();// 3、⽐较//定义最⼩值下标最⼤值下标中间值下标查找的⽬标下标/*** 最⼩下标 0* * 最⼤下标 length-1* ** * 循环条件:最⼩值⼩标<=最⼤值下标* 中间下标: middle = (最⼩值+最⼤值)/2* * 如果中间值⽐⽬标⼤说明在左边改变最⼤值下标 = 中间值下标-1 * * 如果中间值⽐⽬标⼩说明在右边改变最⼩值⼩标 = 中间值下标+1 * * 如果相等就break* * ⼀直这样⽐较结束的条件是什么*///最⼩值⼩标int minIndex=0;//最⼤值下标int maxIndex=array.length-1;//中间值下标int middle;//⽬标值下标int index=-1;//计数器int count=0;while(minIndex<=maxIndex){count++;middle=(minIndex+maxIndex)/2;if(num<array[middle]){maxIndex=middle-1;}else if(num>array[middle]){minIndex=middle+1;}else {index=middle;break;}}if(index!=-1){System.out.println("⽬标已找到");System.out.print("共查询次数:"+count+"\n");System.out.print("⽬标数下标为:"+index);}else{System.out.println("⽬标不存在");}}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验5 二维数组和字符数组的定义和使用
1.实验目的
(1)掌握二维数组的定义、赋值和输入输出的方法;
(2)掌握字符数组和字符串函数的使用;
2.实验内容
(1)输入4*4的数组,求:
a) 对角线上行、列下标均为偶数的各元素的积。

b) 找出对角线上其值最大的元素和它在数组中的位置。

注意:对角线的行下标和列下标是相同的。

先自己进行程序设计,如果不会再参考提供的程序。

(2)将两个字符串连接起来,不要用strcat函数。

(3)输入若干个字符串,求出每个字符串的长度,并打印最长字符串的内容。

以“stop”作为输入的最后一个字符串。

3.实验结果
4.实验体会。

相关文档
最新文档