第七章 数组
- 格式:doc
- 大小:191.50 KB
- 文档页数:26
第7章数组【练习7-1】将例7—3 程序中的break 语句去掉,输出结果有变化吗?假设输入数据不变,输出什么?解答:当去掉break 语句后,一旦找到数据将不跳出循环,而是继续往下找值为x 的元素,因此程序输出会有变化。
当输入数据仍为2 9 8 1 9 时,输出将是index is 1 index is 4。
【练习7—2】将数组中的数逆序存放.输入一个正整数n(1<n<=10),再输入n个整数,存入数组a中,输出最大值及其对应的最小下标,下标从0开始.试编写相应程序。
解答:#include<stdio。
h〉int main(void){int i,n,temp;int a[10];printf("Input n:");scanf(”%d",&n);printf(”Input %d integer:",n);for(i=0;i<n;i++)scanf(”%d”,&a[i]);printf(”After reversed:");for(i=0;i〈n/2;i++){temp=a[i];a[i]=a[n—1—i];a[n-1—i]=temp;}for(i=0;i〈n;i++)printf("%d ”,a[i]);return 0;}【练习7-3】求最大值及其下标.输入一个正整数n(1〈n<=10),再输入n个整数,存入数组a中,将先数组a中的这n个数逆序存放,在按顺序输出数组a中的n各元素.试编写相应程序.解答:#include〈stdio.h>int main(void){int i,index,n;int a[10];printf("Enter n:”);scanf(”%d",&n);printf(”Enter %d integrs:”,n);for(i=0;i〈n;i++)scanf("%d",&a[i]);for(i=n—1;i〉=0;i++)printf("%d ”,a[i]);return 0;}【练习7-4】找出不是两个数组共有的元素。
A.int a[]="string";B.int a[5]={0,1,2,3,4,5};C.char a="string";D.char a[]={0,1,2,3,4,5};A.1DB.3C.9D.A. B.\"c:\\abc.dat\" C."c:\abc.dat" D."c:\\abc.dat"A. B.C. D.A. B.C. D.A. a[2][4]B. a[lC. a[l+l][0]D. a(2)(1) 确定A. a[0][2*1]B. a[l][3]C. a[4-2][0]D. a[0][4]A. 2B. 3C. 4D.A. 3 5 7B. 3 6 9C. 1 5 9 D 1 4 7A. j*m+iB. i*m+jC. i*m+j-1D. i*m+j+1 确定A. B.C. D.A.1DB.3C.9D.A. B.\"c:\\abc.dat\" C."c:\abc.dat" D."c:\\abc.dat"A. if(s1>s2)B. if(strcmp(s1,s2))C. if(strcmp(s2,s1)>O)D. if(strcmp(s1A. B.C. D.A. int a[3][ ];B. float a(3C. double a[1][4];D. float a(3)(4);A. a[2][4]B. a[lC. a[l+l][0]D. a(2)(1)A. 2B. 3C. 4D.A. 3 5 7B. 3 6 9C. 1 5 9 D 1 4 7A BC DA BC DA BC DA BC DA BD C整体赋值A BC DA BC DA BC DA BC DA BC DA BCD 值A B C DA B C DA B C DA B C DA) abcdefA) abcdA) abcdA) abcdef确定[C] 教师批改:36、给出以下定义:char x[ ]="abcdefg";char y[ ]={…a…,…b…,…c…,…d…,…e…,…f…,…g…};则正确的叙述为A)数组X和数组Y等价B)数组x和数组Y的长度相同C)数组X的长度大于数组Y的长度D)数组X的长度小于数组Y的长度确定[C] 教师批改:37、设有static char str[ ]="Beijing";则执行printf("%d\n", strlen(strcpy(str,"China")));后的输出结果为A) 5 B) 7C) 12 D) 14确定[A] 教师批改:38、请选出以下程序段的输出结果#include<stdio.h>main(){ char sl[10], s2[10], s3[10], s4[10];scanf("%s%s",s1,s2); gets(s3); gets(s4);puts(s1); puts(s2); puts(s3); puts(s4);}输入数据如下:(此处<CR>代表回车符)aaaa bbbb<CR>A bbbbB bbbbC) aaaa bbbbD ccccA BC DA不可以直接用数组名对数组进行整体输入或输出BC数组元素的下标超出所定义的下标范围时,系统将给出DA BC DA B C DA B C DA B C DA BC DA B C D。
第7章数组1.下列数组声明中,正确的是()。
(a)int a[5]={0}; (b) int a[ ]={0 1 2};(c) int a[5]=0; (d) int a[ ];2.下列数组声明中,正确的是()。
(a)int a[10];(b)int n = 10, a[n];(c)int N =10; int a[N];(d)int n; scanf(" %d ", &n); int a[n];3.已知int a[10];则对a数组元素引用不正确的是()。
(a)a[10] (b) a[3+5] (c) a[10-10](d) a[5]4.以下数组定义中,正确的是()。
(a)int a[2][3] = {1, 2, 3, 4, 5, 6, 7};(b)int a[ ][ ] = {{1, 2, 3},{4, 5, 6},{7, 8,9}};(c)int a[2][ ] = {1, 2, 3, 4, 5, 6};(d)int a[ ][4] = {6};5.若有定义: int a[3] = {0, 1, 2}; 则a[1]的值为()。
(a)0 (b) 1 (c) 2 (d)36.若有定义:inta[3][4]={{1,2},{0},{1,2,3}};则a[1][1]的值为()。
(a)0 (b) {1,2} (c) 1 (d)37.有如下定义int a[ ][3] = {1,2,3,4,5,6,7,8};则数组a 的行数是()。
(a) 2 (b) 3 (c) 4 (d) 无法确定的8.getchar( )函数的功能是从终端输入()。
(a)一个整型变量值(b) 一个实型变量值(c)多个字符(d) 一个字符9.设已定义chars[ ]="\"Name\\Address\023\n";,则字符串所占的字节数是()。
(a)19 (b) 15 (c) 18(d)1410.以下程序段运行后屏幕输出为()。
第七章数组数组是相同数据类型数据的集合。
通过数组名和下标可以访问数组中指定的元素。
7.1 一维数组一维数组只有一个下标,它可用于表示一个线性的数据队列。
在程序设计中要先声明数组,对它进行初始化,然后才能使用数组。
7.1.1 一维数组的声明一维数组的声明要解决三个问题。
第一、确定数组的数据类型。
第二、给数组定义一个名字,以便在程序中使用。
第三、指明数组的大小,也就是数组中元素的个数。
声明一维数组的一般形式如下:数据类型数组名[常量表达式]={初值表};7.1.2 一维数组的使用访问一维数组元素的一般形式是:数组名[下标表达式]下标表达式是一个整型表达式。
它是一个由整型常量、整型变量以及运算符组成的式子,也可以是返回值为整型值的函数调用。
C++规定,数组的下标从0开始,因此对于大小为N的一维数组,其下标的取值范围是0到N-1,其中0称为数组的下界,N-1称为数组的上界。
下标表达式的值应该在下标的取值范围之内,否则会产生不可预计的问题。
7.1.3一维数组的初始化通过在初值表中给出初值可以对数组元素进行初始化。
初值用一对花括号界定,初值之间用逗号进行分隔。
例7-4 int y[5]={1,2,3,4,5};1,2,3,4,5为初值表,该语句把y[0]、y[1]、y[2]、y[3]、y[4] 分别初始化为1、2、3、4、5。
通过初值表中初值的个数决定数组的大小,省略常量表达式。
例7-5 double d[]={1.5,2.3,5.6};该声明语句省略了常量表达式,数组的长度由初值表中初值的个数决定。
它说明了有三个元素的双精度数组d。
并且d[0]=1.5, d[1]=2.3, d[2]=5.6。
7.1.4 数组的运算以及数组作为函数参数1 数组的运算数组的运算最终都要归结到对数组元素的操作。
因此,数组的运算与其元素的数据类型以及系统或程序对该数据类型提供何种操作有关。
对于int、float、以及double类型的数组,赋值运算、各种算术运算、++、--等都是允许的,原因是C++提供的这些操作的操作语义支持这些数据类型的运算。
第七章数组数组是程序设计语言中最基本,最重要的组成部分,本章的习题将从C语言数组的基本概念出发,讨论C 语言数组的特点和使用方法,并通过典型的例题和常见算法研究数组的一般应用,本章的主要内容包括: ●数组基本概念。
包括:数组的定义,数组的类型,数组维数,体积,数组元素和数组下标的概念,数组说明,对数组进行初始化的方法,多维数组中元素的排列次序及初始化等问题。
●字符型数组。
包括:字符型数组与其它数组的区别,字符串及其特点,对字符型数组进行初始化,使用不同的库函数输入输出字符串,对字符串的简单处理(求串长,串复制,串连接,串比较,串反向等) 等。
●数组与函数之间的关系。
包括:将数组作为组与函数之间进行传递等。
●常见的使用数组的算法。
包括:排序算法,查找算法等。
7.1 选择题【7.1】错误的说明语句是。
A)static char word[ ]={‘T’,’u’,’r’,’b’,’o’,’\0’};B)static char word[ ]={“Turbo\0”};C)static char word[ ]=”Turbo\0”;D)static char word[ ]=‘Turbo\0’;【7.2】已知:char s[5],c;register 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);【7.3】要说明一个有10个int元素的数组,应当选择语句。
A) int a [10]; B) int a[2,5];C) int a [ ]; D) int *a[10];【7.4】合法的数组说明语句是。
A)int a[ ]=”string”;B)int a[5]={0,1,2,3,4,5,};C)char a=”string”;D)char a[]={0,1,2,3,4,5,};【7.5】在下述对C语言字符数组的描述中错误的是。
A)字符数组可以存放字符串B)字符数组中的字符串可以进行整体输入输出C)可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值D)字符数组的下标从0开始【7.6】调用strlen(“abcd\0ef\0g”)的返回值为。
A) 4 B) 5 C) 8 D)9【7.7】若有以下语句,则正确的描述是。
static char x[ ]=”12345”;static char y[ ]={‘1’,’2’,’3’,’4’,’5’};A)x数组和y数组的长度相同B)x数组长度大于y数组长度C) x数组长度小于y的数组长度D) x数组等价于y数组【7.8】已知:char str1[10],str2[10]={“books”};则在程序中能够将字符串“books”赋给数组str1的正确语句是。
A)str1 = {“Books”};B)strcpy (str1,str2);C)str1 = str2;D)strcpy (str2,str1);【7.9】以下程序段的输出是。
static char a[ ] = “-12345”;int k=0,symbol, m;if (a[k]==‘+’|| a[k]==‘-’)symbol = (a[k++]==‘+’) ? 1:-1;for (m=0; a[k]>=‘0’&& a[k]<=‘9’;k++)m = m * 10 +a[k]-’0’;printf(“number=&d\n”,symbol*m);A)number = -12345B)number = 12345C)number = -1000D)number = 1000【7.10】若用数组名作为函数调用时的实参,则实际上传递给形参的是。
A)数组首地址B)数组的第一个元素值C) 数组中的全部元素的值C)数组元素的个数【7.11】已知:char str1[20]=”abcde”,str2[20]=”xyz”;则执行语句: printf(“&d”,strlen(strcpy(str1,str2)));输出结果是。
A) 9 B) 3 C) 5 D) 8【7.12】下面关于字符串的说明中,错误的是。
A)char str[7]=”FORTRAN”;B)char str[ ]=”FORTRAN”;C)char *str =”FORTRAN”;D)char str[ ]={‘F’,’0’,’R’,’T’,‘R’,’A’,’N’,’\0’};【7.13】已知:int i,x[3] [3] = {1,2,3,4,5,6,7,8,9};则下面语句的输出结果是。
for (i=0;i<3;i++)printf (“&d”,x[i] [2-i] );A) 1 5 9 B) 1 4 7 C) 3 5 7 D) 3 6 9【7.14】已知:char str[ ]=”ab\n\012\\\””;则执行语句:printf(“&d”,strlen(str));A) 3 B) 4 C) 6 D) 12【7.15】在C语言中,引用数组元素时,其数组下标的数据类型允许是。
A)整型常量B)整型表达式C)整型常量或整型表达式D)任何类型的表达式【7.16】以下对一维整型数组a的正确说明是。
A)int a(10);B)int n=10,a[n];C)int n;scanf(“&d”,&n);int a[n];D)#define SIZE 10int a[SIZE];【7.17】已知:int a[10];则对a数组元素的正确引用是。
A) a[10] B) a[3.5]C) a(5) D) a[10-10]【7.18】在C语言中,一维数组的说明方式为:类型说明符数组名。
A)[常量表达式]B)[整型表达式]C)[整型常量]或[整型表达式]D)[整型变量]【7.19】以下对外部的一维数组a进行正确初始化的语句是。
A)int a[10]=(0,0,0,0,0) ;B)int a[10]={ };C)int a[ ]={0};D)int a[10]={10*1};【7.20】以下对二维数组a的正确说明是。
A)int a[3] [ ];B)float a(3,4);C)double a[1] [4];D)float a(3) (4);【7.21】已知: int a[3][4];则对数组元素引用正确的是。
A) a[2][4] B) [1,3]C) a[1+1][0] D) a(2) (1)【7.22】已知:int a[3][4];则对数组元素的非法引用是。
A) a[0][2*1] B) a[1][3]C) a[4-2][0] D) a[0][4]【7.23】以下能对外部的二维数组a进行正确初始化的语句是。
A)int a[2][ ] = {{1,0,1},{5,2,3}};B)int a[ ][3] = {{1,2,3},{4,5,6}};C)int a[2][4] = {{1,2,3},{4,5},{6}};D)int a[ ][3] = {{1,0,1},{ },{1,1}};【7.24】以下不能对二维数组a进行正确初始化的语句是。
A)int a[2][3] = {0};B)int a[ ][3] = {{1,2},{0}};C)int a[2][3] = {{1,2},{3,4},{5,6}};D)int a[ ][3] = {1,2,3,4,5,6};【7.25】已知:static int a[3][4]={0};则下面正确的叙述是。
A)只有元素a[0][0]可得到初值0B)此说明语句是错误的C)数组a中每个元素都可得到初值,但其值不一定为0D)数组a中每个元素均可得到初值0【7.26】已知在函数的外面有:int a[ ][4]={0,0};则下面叙述中错误的是。
A)数组 a的每个元素都可得到初值0B)二维数组a的第一维大小为1C)因为二维数组a中第二维大小的值除以初值个数的商为1,故数组a的行数为1D)只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0【7.27】已知:static int a[3][4];则数组a中各元素。
A)可在程序的运行阶段得到初值0B)可在程序的编译阶段得到初值0C)不能得到确定的初值D)可在程序的编译或运行阶段得到初值0【7.28】以下各组中选项中,均能正确说明二维实型数组a的是。
A)float a[3][4];float a[][4];float a[3][]={{1},{0}};B) float a(3,4);float a[3][4];float a[][]={{0},{0}};C) float a[3][4];float a[][4]={{0},{0}};auto float a[][4]={{0},{0},{0}}E)float a[3][4];float a[3][];float a[][4];【7.29】在C语言中,二维数组元素在内存中的存放顺序是。
A)按行存放 B) 按列存放C) 由用户自己定义 D) 由编译器决定【7.30】对以下说明语句的正确理解是。
int a[10]={6,7,8,9,10};A)将5个初值依次赋给a[1]至a[5]B)将5个初值依次赋给a[0]至a[4]C)将5个初值依次赋给a[6]至a[10]D)因为数组长度与初值的个数不相同,所以此语句不正确【7.31】下列数组说明语句中错误的是。
A)double x[5] = {2.0,4.0,6.0,8.0,10.0};B)int y[5] = {0,1,3,5,7,9};C)char c1[ ] = {‘1’,‘2’,‘3’,‘4’,‘5’};D)char c2[ ] = {‘\x10’, ‘\xa’, ‘\x8’};【7.32】已知:int a[ ][3]={1,2,3,4,5,6,7};则数组a的第一维的大小是。
A) 2 B) 3 C) 4 D)无确定值【7.33】若二维数组a有m列,则在a[i][j]之前的元素各数为。
A) j*m+i B) i*m+jC) i*m+j-1 D) i*m+j+1【7.34】以下正确的语句是。
A)int a[1][4]={1,2,3,4,5};B)float x[3][ ]={{1},{2},{3}};C)long b[2][3]={{1},{1,2},{1,2,3}};D)double y[ ][3]={0};【7.35】下面是对外部变量s的初始化,其中错误的是。