当前位置:文档之家› 数组练习

数组练习

数组练习
数组练习

一、狐狸捉兔子问题

围绕着山顶有10个洞,一只兔子和一只狐狸住在各自的洞里,狐狸总想吃掉兔子,一天兔子对狐狸说,你想吃我有一个条件,你先把洞编号1到10,你从第10洞出发,先到第1号洞找我,第二次隔一个洞找我,第三次隔两个洞找我,以后依次类推,次数不限,若能找到我你就可以饱餐一顿,在没找到我之前不能停止,狐狸一想只有10个洞,寻找的次数又不限,哪有找不到的道理,就答应了条件,结果狐狸跑得昏了过去也没找到兔子,请问兔子躲在哪个洞里。程序中可假定狐狸找了1000次。

二、求一个5 x 5数阵中的马鞍数,输出它的位置。所谓马鞍数,是指在行上最小而在列上最大的数。如下:

5 6 7 8 9

4 5 6 7 8

3 4 5 2 1

2 3 4 9 0

1 2 5 4 8

则1行1列上的数就是马鞍数

三、找一个最小的自然数x,使它等于不同的两对自然数的三次幂之和,即使得:

x=a*a*a+b*b*b=c*c*c+d*d*d

其中a,b,c,d都是自然数,且有a!=c和a!=d

四、分数变小数

写出一个程序,接受一个以N/D的形式输入的分数,其中N为分子,D为分母,输出它的小数形式。如果它的小数形式存在循环节,要将其用括号括起来。例如:1/3=.33333...表示为.(3),又如41/333=.123123123...表示为.(123)。一些转化的例子:

1/3=.(3)

22/5=4.4

1/7=.(142857)

3/8=.375

45/56=.803(571428)

用上面的分数和11/59来测试你的程序。

运行举例:

ENTER N,D:1 7

1/7=.(142857)

本题中,0<=N<=65535,0<=D<=65535,设运算结果小数点后最多保留100位。

五、对给定的整数n(0

在计算n!时采用了以加法代替乘法运算的办法。例如,由5!=120计算6!时,把原来的120再累加5次120,得至6!=720。

六、猴子选大王

【问题】n只猴子选大王,选举办法如下:从头到尾1,2,3报数,凡报3的退出,余下的从尾到头1,2,3报数,凡报3的退出...如此类推,当剩下两只猴子时,取这时报1的为王,若想当猴王,请问当初应占据什么位置?【测试数据】

n │7│10│20│100 │

位置│2 │8│16│ 77 │

七、输入年、月、日,求这一天是星期几。

算法提要:求出这一天离公元1年的元旦有多少天,然后对7求余{公元1年的元旦为星期一}

八、在N行N列的数阵中数K(1≤K≤N)在每行和每列中出现且仅出现一次,这样的数阵叫N阶拉丁方阵。例如下图就是一个5阶的拉丁方阵。编一程序,从键

N阶拉丁方阵,并统计个数。

任取一个十进制整数,将其倒过来后与原来的整数相加,得到一个新的整数后重复以上步聚,则最终可得到一个回文数。要求:打印其中的过程,需要用高精度)

例如:输入156

输出:156+651=801

801+108=909

数组

数组 1、下列程序执行后的输出结果是________。 main() { int i,j,a[3][3]; for(i=0;i<3;i++) for(j=0;j<3;j++) a[i][j]=i*j+1; printf("%d,%d\n",a[1][2],a[2][1]); } A) 3,3 B) 3,不定值 C) 3 D) 3,1 正确答案是: A 你选择的答案是:未选× 2、以下程序的输出结果是________。 main() { char st[20]="hello\0\t\'\\"; printf("%d\n",strlen(st)); } A) 9 B) 5 C) 13 D) 20 正确答案是: B 你选择的答案是:未选× 3、以下程序执行时输入Language Programming<回车>,输出结果是________。 #include main( ) { char str[30]; gets(str); printf("str=%s\n",str); } A) Language Programming B) Language C) str=Language D) str=Language Programming 正确答案是: D 你选择的答案是:未选× 4、以下程序执行后的输出结果是________ 。 #include main( ) { int a[4][5]={1,2,4,8,10,-1,-2,-4,-8,-10,3,5,7,9,11}; int i,j,n=9; i=n/5; j=n-i*5-1; printf("%d\n",a[i][j]); } A) -8 B) -10 C) 9 D) 11 正确答案是: A 你选择的答案是:未选×

(数组)教案

教学课题:数组 教学目的:了解数组也是内存变量 教学重点:数组的定义和使用 教学难点:FOX中的数组和BASIC中的数组的区别 [引入]原来所使用的内存变量都是简单内存变量,如内存变量XM,ZC,X5等,有时需要对一组数据进行操作。例如把2-1000之间的素数分别赋给内存变量并保存起来。如果使用前面所学过的对内存变量的定义,操作既重复又繁琐。如果用数组来存放则显得比较简单。 数组就是多个变量共同使用同一个名称来存储数据。它由多个数组元素组成,利用数组的下标来区分每一个数组元素。例如,数组TX(5)的数组名为TX,下标为5,该数组只有一个下标,称为一维数组,它有5个数组元素。 TX(1),TX(2),TX(3),TX(4),TX(5) 数组S(3,4)的数组名为S,下标分别为3和4,该数组有两个下标,称为二维数组,它有3行4列共3*4=12个数组元素:S(1,1),S(1,2),S(1,3),S(1,4) S(2,1),S(2,2),S(2,3),S(2,4) S(3,1),S(3,2),S(3,3),S(3,4) S(4,1),S(4,2),S(4,3),S(4,4) 数组也是一种内存变量,数组元素的数据类型可以是字符型、数值型、日期型或逻辑型,而且这些类型的数据可同时存在于一个数组

中。例如,数组的第一个元素为字符型,第二个元素为数值型等。 (1)数组的定义 [格式]DIMENSION<数组名1>(<下标1>[,<下标2>])[,<数组名2>(<下标3>[,<下标4>])]… [功能]定义一维或二维数组。 说明: *数组的命名与简单内存变量命名的规则相同,数组下标必须放在一对圆括号内。 *数组的下标值最小为1,下标如果有小数,则只截取整数部分。如果省略<下标2>,则定义的是一维数组,否则定义的是二维数组。 例: 分别定义一个一维数组和二维数组。 命令操作如下: .DIMENSION X(5),Y(2,3) 上述命令定义了X和Y两个数组,X是一个一维数组,其数组元素分别表示为X(1),X(2),X(3),X(4),X(5);Y 是一个二维数组,其数组元素分别表示为Y(1,1),y(1,2),Y(1,3),Y(2,1),y(2,2),Y(2,3)。 下面分别是数组X和Y各元素在内存中的排列情况。 数组元素在内存中是按下标值的升序来存储的,对于一个二维

五种查找算法总结

五种查找算法总结 一、顺序查找 条件:无序或有序队列。 原理:按顺序比较每个元素,直到找到关键字为止。 时间复杂度:O(n) 二、二分查找(折半查找) 条件:有序数组 原理:查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束; 如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。 如果在某一步骤数组为空,则代表找不到。 这种搜索算法每一次比较都使搜索范围缩小一半。 时间复杂度:O(logn) 三、二叉排序树查找 条件:先创建二叉排序树: 1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 3. 它的左、右子树也分别为二叉排序树。 原理: 在二叉查找树b中查找x的过程为: 1. 若b是空树,则搜索失败,否则: 2. 若x等于b的根节点的数据域之值,则查找成功;否则: 3. 若x小于b的根节点的数据域之值,则搜索左子树;否则: 4. 查找右子树。 时间复杂度:

四、哈希表法(散列表) 条件:先创建哈希表(散列表) 原理:根据键值方式(Key value)进行查找,通过散列函数,定位数据元素。 时间复杂度:几乎是O(1),取决于产生冲突的多少。 五、分块查找 原理:将n个数据元素"按块有序"划分为m块(m ≤ n)。 每一块中的结点不必有序,但块与块之间必须"按块有序";即第1块中任一元素的关键字都必须小于第2块中任一元素的关键字; 而第2块中任一元素又都必须小于第3块中的任一元素,……。 然后使用二分查找及顺序查找。

汇编经典小程序

汇编经典小程序(总5页) -CAL-FENGHAI.-(YICAI)-Company One1 -CAL-本页仅作为文档封面,使用请直接删除

实验一:判断一个数X的正,负数,还是零。(假设是正数,输出+,是负数,输出-,是零,输出This is a zore !) DATA SEGMENT X DB 10 CR EQU 0DH LF EQU 0AH W DB 'This is a zore!',CR,LF,'$' ZHENG DB '+',CR,LF,'$' FU DB '-',CR,LF,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,X AND AL,AL JZ L1 SHL AL,1 JC L3 JMP L2 L1: MOV DX,OFFSET W MOV AH,9 INT 21H JMP L4 L2: MOV DX,OFFSET ZHENG MOV AH,9 INT 21H JMP L4 L3: MOV DX,OFFSET FU MOV AH,9 INT 21H JMP L4 L4: MOV AH,4CH INT 21H CODE ENDS END START 实验二:求十个数中的最小数,并以十进制输出。(若要求最大的,只要把JC 改为JNC 即可)(仅局限于0---16间的数比较,因为ADD AL,30H只是针对一位的十六进制转换十进制的算法) DATA SEGMENT XDAT DB 0AH,1FH,02H,03H,04H,05H,06H,07H,08H,09H MIN DB CR EQU 0DH

读取1000个十进制整数到数组

★83.函数ReadDat( )实现从文件IN83.DA T中读取1000个十进制整数到数组xx中。请编制函数Compute( )分别计算出xx中偶数的个数even、奇数的平均值ave1、偶数的平均值ave2及所有偶数的方差totfc的值,最后调用函数WriteDat( )把结果输出到OUT83.DAT文件中。计算方差的公式如下:totfc=----(--ave2)-/N 设N为偶数的个数,xx[i]为偶数,ave2为偶数的平均值。 原始数据的存放格式是:每行存放10个数,并用逗号隔开(每个数均大于0且小于等于2000)。 注意:部分源程序已给出。 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。 试题程序: #include #include #include #define MAX 1000 int xx[MAX],odd=0,even=0; double ave1=0.0,ave2=0.0,totfc=0.0; void WriteDat(void); int ReadDat(void) { FILE *fp; int i,j; if((fp=fopen("IN83.DAT","r"))==NULL) return 1; for(i=0;i<100;i++) { for(j=0;j<10;j++) fscanf(fp,"%d,",&xx[i*10+j]); fscanf(fp,"\n"); if(feof(fp)) break; } fclose(fp); return 0; } void Compute(void) { int i,tt[MAX]; /*定义数组tt计算总和*/ for(i=0;i<1000;i++) if(xx[i]%2!=0) /*判断当前数的奇偶性*/ { odd++; /*统计奇数的个数*/

数组和过程习题(有)

数组 一、思考题 1.要分配存放12个元素的整型数组,下列数组声明(下界若无,按默认规定) 哪些符合要求? (1) n=12 (2) Dim a%( ) Dim a(1 To n) As Integer n=11 ReDim a(n) (3) Dim a%[2,3] (4) Dim a(1,1,2) As Integer (5) Dim a%(10) (6) Dim a!( ) ReDim a(1 To 12) ReDim a(3,2) As Integer (7) Dim a%(2,3) 8) Dim a(1 to 3, 1 to 4) As Integer 2.已知下面的数组声明,写出它的数组名、数组类型、维数、各维的上、下界、数组的大小、并按行的顺序列出各元素。 Dim a(-1 to 2,3) As Single 3. 已声明了静态数组A(3, 4),能否在下面再用重定义动态数组A(4, 4)来重定义A数组的大小吗? 二、选择题 1.以下关于数组的说法,不正确的是______。 (A)静态数组在声明时大小必须固定(B)动态数组在声明时大小可以不确定 (C)默认情况下数组的下界为0 (D)运行时可改变动态数组或静态数组的大小 2.有关数组的说法,错误的是______。 (A)数组是一种特殊的数据类型(B)一个数组中可存放多种类型的数据 (C)数组是一组相同类型的变量的集合(D)

数组可以被声明为变体类型 3.如下数组声明语句,______正确。 (A)Dim a[3, 4] As Integer (B)Dim a(3, 4) As Integer (C)Dim a(n, n) As Integer (D)Dim a(3 4) As Integer 4. 要分配存放如下方阵的数据,______数组声明语句能实现(不能浪费空间)。 (A)Dim a(9) As Single (B)Dim a(3, 3) As Single (C)Dim a( 1 To 3 , 1 To 3) As Single(D)Dim a( -3 To -1 , 5 To 7) As Integer 5. 如下数组声明语句,则数组a包含元素的个数有______。 Dim a(3, -2 to 2,5) (A)120 (B)75 (C)60 (D)13 6. 以下程序输出的结果是______。 Dim a a = Array(1, 2, 3, 4, 5, 6, 7) For i = Lbound (a) To Ubound (a) a(i) = a(i) * a(i) Next i Print a(i) (A)49 (B)0 (C)不确定(D)程序出错 7.下列数组声明语句中的数组a包含了______个数组元素 Dim a(4,-1 To 2, 3) (A) 120 (B) 11 (C)60 ( D)80 8. 有如下程序段: Type student nl as Integer name as String*13 End Type Dim stu As student 该程序段定义了两个程序成分,它们分别是______ (A)数据类型和自定义类型变量(B)自定义类型和变量 (C)显示类型和变量(D)自定义类型和自定义类型变量 9.在窗体的通用声明段自定义了数据类型student,下列定义方式是正确的。 (A) Private Type student (B)Type student No as Integer No as Integer

汇编_数组排序(附源代码)

备注:源代码附后,源代码要求有注释说明 .386 .MODEL FLAT ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD INCLUDE io.h cr EQU 0dh Lf EQU 0ah numbers EQU 10 .STACK 4096 .DA TA prompt1 BYTE "Please entry 10 numbers.",cr,Lf,0 prompt2 BYTE "Number : ",0 number DWORD 20 dup(?) ,0 array DWORD 20 dup(?),0 prompt3 BYTE "Now the range is : " ,0 .CODE _start: output prompt1 lea ebx,array mov ecx,numbers inNum: output prompt2 input number,20 atod number mov [ebx] ,eax add ebx, 4 loop inNum output prompt3 mov ecx, numbers cycle1: mov dx,0 lea ebx,array cycle2: inc dx cmp dx,numbers jnl cycle3 ;不小于则转移 mov ax,[ebx] cmp ax,[ebx+4] jg exchange ;大于则转移 add ebx,4 jmp cycle2 exchange: xchg [ebx+4],ax mov [ebx],ax add ebx,4 jmp cycle2 cycle3: loop cycle1

数组及其应用(详细教案)

提问:给一组数排序,这组数该如何存 放呢? 8 2 9 4 5 6 3 7 1 6 这就是本节课要解决的问题。 ?一个班学生的学习成绩 ?一行文字 ?一个矩阵 这些数据的特点是: 1.具有相同的数据类型 2.使用过程中需要保留原始数据 C语言为这些数据,提供了一种型:数组。所谓数组就是一组具有相数据的有序集合。 提出学习要求: 1 一维数组的定义和应用

2 二维数组的定义和应用 3 字符数组的应用 第七章数组 7.1一维数组及应用 7.1.1一维数组的定义方式 在C语言中使用数组必须先定义、后使用,定义数组也就确定了数组的首地址、数组元素的类型和个数(数组长度)。 一维数组的定义方式为: 类型说明符数组名[常量表达式]; 例如: 1) int a[5]; 说明整型数组a,a是数组名,有5个元素。但

是其下标从0开始计算。因此5个元素分别为a[0],a[1],a[2],a[3],a[4]。注意不能使用数组元素a[5]。 float b[10],c[20]; 说明实型数组b,b是数组名,有10个元素,实型数组c,有20个元素。 char ch[20]; 说明字符数组ch,有20个元素。 对于数组类型说明应注意以下几点:2) 数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。 3) 数组名的书写规则应符合标识符的书写规定。 4) 数组名不能与其它变量名相同。 例如:

main() { int a; /*a为整型变量*/ float a[10]; /* 数组名a与上面的变量名a相同,错误!*/ …… } 是错误的。 5) 不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。 例如: #define FD 5 /* FD是符号常数*/ main() {

C语言中数组指针在汇编语言寻址方式中的应用

231 1、引言 《汇编语言程序设计》是高等院校计算机及相近专业学生必修的专业基础课程之一,它不仅是《嵌入式开发》、《操作系统》、《单片机》、《接口技术》等基础课程的先修课程,而且也十分有助于学生系 统掌握计算机基础知识和提高编程能力[1] 。作为一门直接控制计算机硬件和cpu结合最为紧密的一门语言,执行起来时最为有效和速度最快的。但是区别于高级语言他又自身的弱点,比如可读性差,需要更深入地熟悉硬件结构,编程和调试过程繁琐,而且没有便捷的开发调试环境。在讲授《汇编语言程序设计》过程中,如果能够结合或者转化为高级语言如C语言的内容那学生接受和学习起来就能增加不少的兴趣,提高学生的学习效率。 2、C 语言数组和指针的使用 2.1 数组 数组是在程序设计中为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元 素的集合称为数组[2] 。在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因在汇编语言中主要把指令系统中的寻址方式转换为一维数组或指针,所以下面就简要介绍一下一维数组和指针的特点 定义一维数组的格式为: 类型说明符 数组名[整型常量表达式],…;例如:int a[10],b[5];说明: (1)它表示定义了两个一维数组,一个数组名为a,另一个数组名为b。数组名是按照“标识符”的规则构成的。(2)a数组含有10个数组元素,即a[0]、a[1]、a[2]、…、a[9];b数组含有5个数组元素,即b[0]、b[1]、b[2]、b[3]和b[4]。注意,不能使用a[10]和b[5],否则即出现数组超界现象,并且需要注意的是数组的小标是从0开始的。(3)类型说明符int 说明a数组和b数组中的每个元素均占2个字节,只能存放整型数据。(4)整型常量表达式可以是整型常量或符号常量。最常见的是整型常量。不允许为变量。(5)C编译程序(如Turbo C)为a数组在内存中分配了10个连续的数组单元(共占20个字节),为b数组在内存中分配了5个连续的数组单元(共占10个字节)。(6)C编译程序还指定数组名a为数组的首地址,即a与&a[0]等价;指定数组名b为b数组的首地址,即b与&b[0]等价。 2.2 指针 指针是一个特殊的变量,它里面存储的数值被解释成为内存里 的一个地址。计算机内存中的每个内存单元,都有相应的内存地址。在程序中对变量进行存取操作有两种方式,一种叫“直接存取”,就是指在程序中对变量进行存取操作时是按变量的地址来存取的方法,另一种叫“间接存取”,就是通过另外定义一个指针变量来保存 需要访问的数据的地址[3] 。 (1)指向简单变量的指针。(2)指向数组的指针。指针所指的数组既可以是一维数组,也可是多维数组。(3)指针数组。数组的元素值为指针,指针数组是一组有序的指针集合。(4)指向指针的指针。如 果一个指针变量存放的是另一个指针变量的地址,则称这个指针变 量为指向指针的指针。(5)指向函数的指针。在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址赋予一个指针变量,通过指针变量就可以找到并调用这个函数。 3、数组和指针在汇编语言指令系统寻址方式中的应用和转换 3.1 汇编语言指令系统的寻址方式[4] (1)立即寻址。(2)寄存器寻址。(3)直接寻址。(4)寄存器间接寻址:指令中指出一个基址寄存器BX、BP或变址寄存器SI、DI,并以其内容做为操作数的有效地址,ADD AX,[BP]物理地址=10H×(SS)+(BP)。(5)寄存器相对寻址:指令中指出一个基址或变址寄存器,同时给出一个位移量, 寄存器内容与位移之和做为操作数的有效地址。MOV AX,[DI+100H],有效地址EA=(DI)+100H,为物理地址=10H×(DS)+(DI)+100H。(6)基址变址寻址:指令同时指出一个基址寄存器和一个变址寄存器,两寄存器内容的和为操作数的有效地址。ADD AX,[BX][SI],有效地址EA=(BX)+(SI)。物理地址=10H×(DS)+(BX)+(SI)。(7)相对基址变址寻址:指令中给出一个基址寄存器一个变址寄存器和一个位移量。两个寄存器的内容及位移量三者之和做为操作数的有效地址。例:MOV DX,100H [BX] [SI,物理地址=10H×(DS)+(BX)+(SI)+100H。 3.2 间接寻址方式转换为数组或指针 3.2.1 寄存器间接寻址转成一维数组来理解 形式:ADD AX,[BP]物理地址=10H×(SS)+(BP)。我们就可以认为,在此定义了一个数组SS,即SS中的值为这个数组的首地址,当然我们知道这个数组的最大元素个数为64K个。刚才谈到偏移量和数组下标都是从0开始的,所以偏移量BP就可以认为是这个数组的一个下标,在这寻址操作数的时候是要把这个下标作为一个内存地址,其所存储的内容就是我们所要找的操作数。 在数组中形如I=A[10]就是把A数组的第10个元素赋值给I,在ADD AX,[BP]语句中BP也有一个中括号,只是在这个地方省略了数组名;并且也是把SS数组的第BP个元素赋值给AX。 所以无论从形式还是从本质上就把寄存器间接寻址转换成了一个一维数组。 3.2.2 寄存器间接寻址转成指针来理解因为指针和数组有时间是可以相互转换的,所以在这也可以转换成指针来理解。 形式:ADD AX,[BP]物理地址=10H×(SS)+(BP)。BP在汇编语言中本身就定义为一个基址“指针”用来和堆栈段配对使用,其中存放的数据是堆栈段的某一个存储单元地址。这就和指针吻合了,前面说到指针变量名与地址间具有一一对应关系,在存取操作时是按变量的地址来进行的一种“间接存取”的方法。那么这个地方我们可以认为BP是一个指向堆栈段中某一个存储单元的C语言意义上的指针。 这样就把寄存器间接寻址方式可以理解成C语言意义上的指针。对于寄存器相对寻址、基址变址寻址、基址变址寻址我们也都 C语言中数组指针在汇编语言寻址方式中的应用 马耀锋 李红丽 (中州大学信息工程学院 河南郑州 450044) 摘要:因高级语言不需要熟悉低层软件和硬件知识,所以学生有很大的学习兴趣,数组指针是C 语言中的重点内容,学生们都能熟练掌握。而汇编语言因与硬件紧密相连,所以学生学习兴趣不大。为了更好的培养学生的学习兴趣,提高教学效率,本文通过分析数组指针与寻址方式的异同,提出了如何把寻址方式转化成数组指针来学习的方法。 关键词:数组 指针 寻址方式中图分类号:TP312.1-4文献标识码:A 文章编号:1007-9416(2012)04-0231-02 ??????下转第232页

声明一个数组

声明一个数组: declare -a array (其实不用声明,按数组方式直接赋值给变量即可,BASH就知道那是数组) 数组赋值: (1) array=(var1 var2 var3 ... varN) (2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN) (3) array[0]=var1 arrya[1]=var2 ... array[n]=varN 计算数组元素个数: ${#array[@]} 或者${#array[*]} BASH的特殊参数@ 和* 都表示“扩展位置参数,从1开始”,但形式稍有差异,但在数组里使用好像是可以通用的。 引用数组: echo ${array[n]} 遍历数组: filename=(`ls`) for var in ${filename[@]};do echo $var done 数组实用示例:(个人收集整理) 1、从“标准输入”读入n次字符串,每次输入的字符串保存在数组array里 i=0 n=5 while [ "$i" -lt $n ] ; do echo "Please input strings ... `expr $i + 1`" read array[$i] b=${array[$i]} echo "$b" i=`expr $i + 1` done

2、将字符串里的字母逐个放入数组,并输出到“标准输出” chars='abcdefghijklmnopqrstuvwxyz' for (( i=0; i<26; i++ )) ; do array[$i]=${chars:$i:1} echo ${array[$i]} done 这里有趣的地方是${chars:$i:1},表示从chars字符串的$i 位置开始,获取 1 个字符。如果将 1 改为 3 ,就获取 3 个字符啦~结果是: abc bcd ... vxy xyz yz //没有足够字符串获取了 z //没有足够字符串获取了 3、将数组应用到shell环境变量 3、将数组应用到shell环境变量(1) 数组赋值: [root@pps ~]# SEASON=("Srping" "Summer" "Autumn" "Winter") 当你发现赋值错了,也可以立刻从新赋值纠正,如上面的Spring 被写成Srping。 重新赋值:(原来的值被重写) [root@pps ~]# SEASON=("Spring" "Summer" "Autumn" "Winter") 查看一下环境变量: [root@pps ~]# set | grep SEASON SEASON=([0]="Spring" [1]="Summer" [2]="Autumn" [3]="Winter") 显示整个数组: [root@pps ~]# echo ${SEASON[*]} 或者echo ${SEASON[@]} Spring Summer Autumn Winter 显示某一数组元素: [root@pps ~]# echo ${SEASON[3]} Winter

二维数组中鞍点的查找C语言程序.doc

#include #define M 3 #define N 3 void main() {int i,j,t=0; float a[M][N],min1[N],max1[N],min,max; printf("请输入9个数(并用空格分隔):\n"); for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%f",&a[i][j]); printf("二维数组如下:\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("%f\t",a[i][j]); printf("\n"); } for(i=0;i<3;i++) { min=1000; for(j=0;j<3;j++) if(a[i][j]max) max=a[i][j]; max1[j]=max; } printf("每列中的最大数如下:\n"); for(j=0;j<3;j++) printf("%f\n",max1[j]); for(i=0;i<3;i++)

for(j=0;j<3;j++) if(a[i][j]==min1[i]&&a[i][j]==max1[j]) {printf("%f是二维数组中的一个鞍点\n",a[i][j]); t++; } if(t!=0); else printf("二维数组中不存在鞍点\n"); }

数组

一、选择题 1. 设有定义:char s[12]="harmonious";,则printf("%d", strlen(s));的输出结果是 A. 9 B. 10 C. 11 D. 12 2. 错误的说明语句是____。 A) char word[ ]={ 'T', 'u', 'r','b', 'o', '\0' }; B) char word[ ]={ "Turbo\0" }; C) char word[ ]="Turbo\0"; D) char word[ ]='Turbo\0"; 3. 已知:chars[5], c; int b;则调用函数scanf的正确语句是______。 A) scanf( "%s%c", s, C); B) scanf( "%d%c", &b, &C); C) scanf( "%d%c", b, &C); D) scanf( "%s%c", s, &C); 4. 合法的数组说明语句是____。 A) int[ ]="string"; B) int a[5]={ 0, l, 2, 3, 4, 5 }; C) char a="string"; D) char a[ ]={ 0, l, 2, 3, 4, 5 }; 5. 在下述对C语言字符数组的描述中错误的是____。 A) 字符数组可以存放字符串 B) 字符数组中的字符串可以进行整体输入/输出 C) 可以在赋值语句中通过赋值运算符"="对字符数组整体赋值 D)字符数组的下标从0开始 6. 调用str1en( "abcd\0ef\0g" )的返回值为____。 A) 4 B) 5 C) 8 D) 9 7. 已知:char str1[10], str2[10]={ "books" };则在程序中能够将字符串"book"赋给数组str1的正 确语句是____。 A) str1={ "books" }; B) strcpy( str1, str2 ); C) str1=str2; D) strcpy( str2, str1 ); 8. 已知:char str1[20]="abcde", str2[20]="xyz"; 则执行语句; printf( "%d", str1en( strcpy( str1, str2 ) ) ); 输出结果是____。 A) 9 B) 3 C) 5 D) 8 9. 下面字符串的说明错误的是____。 A) char str[7]="FORTRAN"; B) char str[ ]="FORTRAN"; C) char *str="FORTRAN"; D) char str[ ]={'F','O','R',T,'R','A','N','\0'}; 10. 已知:int i, x[3][3]={ l, 2, 3, 4, 5, 6, 7, 8, 9 };则下面语句的输出结果是____。 for( i=0; i<3; i++ ) printf( "%d", x[i][2-i] ); A) 159 B) 147 C) 357 D) 369 11. 已知:char str[ ]="ab\n\012\\\"";则执行语句:printf( "%d", str1en(str) );的结果是____。 A) 3 B) 4 C) 6 D) 12

单片机C语言中数组的用法

单片机C语言中数组的用法 数组是由具有相同类型的数据元素组成的有序集合。数组是由数组名来表示的,数组中的数据由特定的下标来唯一确定。引入数组的目的,是使用一块连续的内存空间存储多个类型相同的数据,以解决一批相关数据的存储问题。数组与普通变量一样,也必须先定义,后使用。数组在C51语言的地位举足轻重,因此深入地了解数组是很有必要的。下面就对数组进行详细的介绍。 (1)一维数组 一维数组是最简单的数组,用来存放类型相同的数据。数据的存放是线性连续的。 用以下例程说明数组的建立、数据操作: #include /* ----------------------------------------------------- 此程序用以说明数组的建立、数据操作 ----------------------------------------------------- */ unsigned char array[10];//定义一个有10个单元的数组 void main() { unsigned char i; for(i=0;i<10;i++) { array[i]=i; //用下标调用数组中的元素 } /* --------------------------------------- array |9|8|7|6|5|4|3|2|1|0| [9]~[0] --------------------------------------- */ while(1); } 数组名是用来表示数组的标识,其实它是数组的首地址,即一个指针。不过它所表示的地址是固定的,不能改动。如前几章所述的相关内容,array[2]与*(array+2)是等效的,不过不能用array++,因为array是常量。 上面的程序中的数组是静态建立的,以下例程来用说明数组的动态建立。 #include #include /* ----------------------------------------------------- 此程序用以说明数组的动态建立 ----------------------------------------------------- */

汇编数组求最值

1. 编程写一个完整的程序,求数组array中的最大值与最小值,将它们分别存入max和min单元中并将结果输出到屏幕格式为: The max num is: The min num is: 数据段的定义如下: .data array dw 12,4,-168,122,-33,56,78,99,345,-66,-5 min d w ? max dw ? 要求画出程序流程图,写出完整程序代码。 1.答: 流程图如下所示:. ..................(3分) 程序源代码如下: #include .486 .stack

.data array dw 12,4,-168,122,33,56,78,99,345,-66,-5 max dw ? min dw ? msg1 db ‘The max num is:’,13,10,$ msg2 db’The min num is:’,13,10,$…………………………(2分) .code .startup mov ecx,lengthof array -1 mov eax,array[0] ;eax:max mov ebx,eax ;ebx:min mov esi,1 ;数组下标…………………………(1分) again: cmp eax,array[esi*4] jge small ;if max= small: cmp ebx,array[esi*4] jle next mov ebx,array[esi*4] …………………………(1分) next:inc esi loop again mov max,eax mov min,ebx mov dx,offset msg1 ;显示…………………………(1分) mov ah,09h int 21h mov eax,max call dispsid mov dx,offset msg2 ;显示…………………………(1分) mov ah,09h int 21h mov eax,min call dispsid .exit End …………………………(1分) 2. 将一串给定的字符串,将其中大写字母转成小写,小写字母转成大写,并将转换结果在屏幕上显示。要求画出程序流程图,写出完整程序代码。 数据段的定义如下: .data Str db ’this IS a AssembLy.’0 2.答:流程图如下所示

数组的定义

一维数组的定义方式 在C语言中使用数组必须先进行定义。 一维数组的定义方式为:类型说明符数组名[常量表达式]; 其中:类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表达式表示数据元素的个数,也称为数组的长度。 例如: int a[10]; 说明整型数组a,有10个元素。 float b[10],c[20]; 说明实型数组b,有10个元素,实型数组c,有20个元素。 char ch[20]; 说明字符数组ch,有20个元素。 (数组的定义和对变量的定义是一致的,可以连续在一行定义:float b[10],c[20];) 对于数组类型说明应注意以下几点: 数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。 数组名的书写规则应符合标识符的书写规定。 数组名不能与其它变量名相同。 例如: main() { int a; float a[10]; …… } 是错误的。 方括号中常量表达式表示数组元素的个数,如a[5]表示数组a有5个元素。但是其下标从0开始计算。因此5个元素分别为a[0],a[1],a[2],a[3],a[4]。 不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。 例如:

#define FD 5 main() { int a[3+2],b[7+FD]; …… } 是合法的。但是下述说明方式是错误的。 main() { int n=5; int a[n]; …… } 允许在同一个类型说明中,说明多个数组和多个变量。 例如: int a,b,c,d,k1[10],k2[20]; 注意:1定义数组长度的常量表达式的结果必须是整形常量(包括字符) 2 在执行C99标准的编译系统中,允许对数组进行动态定义,即C99规定了可变长数组的存在。 但是,目前执行C99标准的编译器尚不普遍,在C89中是不允许使用可变长数组的,main和被调用函数中都不可以使用(如VC++6.0) 二维数组的定义 前面介绍的数组只有一个下标,称为一维数组,其数组元素也称为单下标变量。在实际问题中有很多量是二维的或多维的,因此C语言允许构造多维数组。多维数组元素有多

汇编程序数组求最小值

;MASMPlus 代码模板- 普通的Windows 程序代码 .386 .Model Flat, StdCall Option Casemap :None Include windows.inc Include user32.inc Include kernel32.inc Include gdi32.inc includelib gdi32.lib IncludeLib user32.lib IncludeLib kernel32.lib include macro.asm WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD .DA TA szClassName db "MASMPlus_Class",0 szFmt db 10,'%d', 0 ;szFmt db 10,"最小值=%d", 10, 10, "最大值=%d", 10, 0 gSDA dw 10, -1, 3, 6, 8, 5, 1, -3, 2, 10, -5, 2, 7, 4, 25, 9, 1, 1, 3, 8 .DA TA? hInstance dd ? min dd ? max dd ? sum dd ? buff db 256 dup(?) .CODE START: invoke GetModuleHandle,NULL mov hInstance,eax invoke WinMain,hInstance,NULL,NULL,SW_SHOWDEFAULT invoke ExitProcess,0 WinMain proc hInst:DWORD,hPrevInst:DWORD,CmdLine:DWORD,CmdShow:DWORD LOCAL wc :WNDCLASSEX LOCAL msg :MSG local hWnd :HWND

数组

实验6 数组的使用 6.1 实验目的 (1)掌握一维数组、二维数组的定义存储分配方法; (2)了解如何给数组赋初值; (3)熟悉利用循环实现数组的赋值、输出以及处理编程方法。 (4)了解命令行参数数组的使用 (5)熟悉数组方法参数传递的特点。 6.2 知识要点 6.2.1 数组的定义与分配空间 (1)定义数组方括号的位置可在数组名前,也可在后。 int a[];等价于 int [] a; (2)给数组分配空间的办法: 办法1:通过new运算符,例:a=new int[10]; 办法2:给数组赋初值将自动给数组分配空间; 例:int b[]={1,2,3,4,5,3,4,6,7,3}; Java规定一维数组的第1个元素的下标为0。 (3)关于数组的默认初值问题 基本类型数组元素中存放的是数据本身,而引用类型的数组元素中存放的是对象的引用,基本类型上数组在分配空间后,不论数组在什么位置定义,均按基本类型变量的默认值规定赋初值,而引用类型数组在分配空间后默认初值为null。 (4)二维数组可看作是数组的数组,每个元素包括行列位置。 (5)数组的大小用length属性可求得,一维数组元素的最大下标为其length-1。 6.2.2 数组的访问 (1)用一重循环可遍历访问一维数组的所有元素。 例如,以下语句给数组a的所有元素赋值为0。 for (int k=0;k

数组练习题

1.下面数组声明语句,_________正确。 A)Dim a[2,4] As Integer B)Dim a(2,4)As Integer C)Dim a(n,n)As Integer D)Dim a(2 4)As Integer 2.假定建立了一个名为Command1的命令按钮数组,则以下说法中错误的是________。 A)数组中每个命令按钮的名称(名称属性)均为Command1 B)数组中每个命令按钮的标题(Caption属性)都一样 C)数组中所有命令按钮可以使用同一个事件过程 D)用名称Command1(下标)可以访问数组中的每个命令按钮 3.数组声明语句Dim a(-2 to2,5)中,数组包含元素个数为________。 A)120 B)30 C )60 D)20 4.下面程序的输出结果是________。 Dim a a = Array(1,2,3,4,5,6,7) For i = Lbound(a)to Ubound(a) a(i)= a(i)* a(i) Next i Print a(i) A)36 B)程序出错C)49 D)不确定 5.下面程序的输出结果是________。 Option Base 1 Private Sub Command1_Click() Dim a%(3, 3) For i = 1 To 3 For j = 1To 3 If j > 1 And i > 1 Then a(i, j)= a(a(i - 1, j - 1), a(i, j - 1))+ 1 Else a(i, j)= i * j End If Print a(i, j); ""; Next j Print Next i End Sub A)1 2 3 B)1 2 3 C )1 2 3 D)1 2 3 2 3 1 1 2 3 2 4 6 2 2 2 3 2 3 1 2 3 3 6 9 3 3 3 6.在设定Option Base 0后,经Dim arr(3,4)As Integer 定义的数组arr含有的元素个数为________。 A)12 B)20 C )16 D)9 7.用Dim A (-3 To 5)As Integer语句定义的数组的元素个数是________。 A)6 B)7 C )8 D)9 8.有如下程序代码,输出结果是________。 Dim a()

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