第七章 数组
- 格式:doc
- 大小:263.01 KB
- 文档页数:19
第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++提供的这些操作的操作语义支持这些数据类型的运算。
第7章数组17.以下能正确定义二维数组的是____。
A、int a[][3];B、int a[][3]={2*3};C、int a[][3]={};D、int a[2][3]={{1},{2},{3,4}};答案:B难易程度:初级章节:7.3.2 二维数组的定义21.s1和s2已正确定义并分别指向两个字符串。
若要求:当s1 所指串大于 s2所指串时,执行语句S;则以下选项中正确的是____。
A、if(s1>s2)S;B、if(strcmp(s1,s2))S);C、if(strcmp(s2,s1)>0)S;D、if(strcmp(s1,s2)>0)S;答案:D难易程度:初级章节:7.4 字符数组60.有以下程序main( ){ char a[]="abcdefg",b[10]="abcdefg";printf("%d %d\n",sizeof(a),sizeof(b));}执行后输出结果是____。
A、7 7B、8 8C、8 10D、10 10答案:C难易程度:初级章节:7.4字符数组64.有以下定义#include <stdio.h>char a[10],*b=a;不能给a数组输入字符串的语句是____。
A、gets(a)B、gets(a[0])C、gets(&a[0]);D、gets(b);答案:B难易程度:初级章节:7.5 字符数组73.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是____。
A、char s[10]="abcdefg";B、char t[]="abcdefg",*s=t;C、char s[10];s="abcdefg";D、char s[10];strcpy(s,"abcdefg");答案:C难易程度:初级章节:7.5 字符数组101.以下不能正确定义二维数组的选项是____。
第七章数组(8学时)学习目的与要求:1、 重点掌握一维数组的定义和引用;2、 基本掌握二维数组的定义和引用;3、 重点掌握字符型数组的定义与引用;4、 能正确使用字符串处理函数;5、 学会使用数组解决实际问题。
重点:1、 一维数组的定义与引用;2、 二维数组的定义与引用;3、 字符数组的定义与引用;第1讲知识归纳:1、一维数组的定义:类型说明符数组名[常量表达式];(1) (1)数组名后必须用方括弧[],用其他括弧均错误 ;(2) 方括弧中的常量表达式表示数组的元素个数;(3) 方括弧中的常量表达式,必须是能计算出具体数值,且不改变的常量,不能是变量;二、填空题1、下面fun 函数的功能是将形参 x 的值转换成二进制数,所得二进制数的每一位数放在一维数组中返回,二进制数的最低位放在下标为0的元素中,其它依此类推。
请填空。
fun(int x,int b[]){ int k=0,r;do{ r=x% 2;b[k++]=r;x/= 2j } while(x); }( 1996 年 4 月) 2 22、以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相2、一维数组的引用:数组名[下标r ■」 \ for ( i =0 ; i<7 ; i printf((2)将整个字符串一次输入输出,用格式符 如^ chaLG1f10]; scanf (“ %s ” , c1); int num[N];(2003 年 9 月)25、有以下程序main (){ char a[ ]={ ‘a ' , ‘b ' , ‘c ' , ‘d ',i=sizeof(a); j=strle n( a);printf( “%d,%d b ” i,j);} 程序运行后的输出结果是()。
A ) 9,9B )8,9(2002 年 9 月) 21、C 22、C 23、D 24、B 25、D “ %c , c1[ i ]); %s ; 100]; D) int N=100; e ' , ‘f ' , ‘g ' , ‘h ' , ‘ 0' }; int i,j; C ) 1, 8 D ) 9, 8同字符的ASCII码之差。
第七章数组一、选择题1.在C语言中引用数组元素时,下面关于数组下标数据类型的说法错误的是_______________。
A) 整型常量B) 整型表达式C) 整型常量或整型表达式D)任何类型的表达式2.以下能正确定义一维数组a的选项是________________。
A)int a[5]={0,1,2,3,4,5}; B) char a[]={0,1,2,3,4,5};C) char a={'A','B','C'};D)int a[5]="0123";3.以下能正确定义一维数组a的选项是________________。
A) int a (10); B) int n=10,a[n];C) int n; D) #define SIZE 10scanf("%d",&n); int a[SIZE];int a[n];4.若有定义:int a[10];则正确引用数组a元素的是____________。
A) a[10] B) a[3] C) a(5) D) a[-10]5.以下不正确的数组定义是____________。
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'};6.以下叙述中错误的是_______________。
A) 对于double类型数组,不可以直接用数组名对数组进行整体输入或输出B) 数组名代表的是数组所占存储区的首地址,其值不可改变C) 当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息D) 可以通过赋初值的方式确定数组元素的个数7.以下正确的二维数组定义是______________。
A) int a[][]={1, 2, 3, 4, 5, 6}; B) int a[2][]={1, 2, 3, 4, 5, 6};C) int a[][3]={1, 2, 3, 4, 5, 6}; D) int a[2,3]={1, 2, 3, 4, 5, 6};8. 以下对二维数组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}};9. 以下不能对二维数组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};10. 若有定义:int a[3][4];则正确引用数组a元素的是___________。
A) a[2][4] B) a[3][3] C) a[0][0] D) a[3][4]11. 若定义了int b[][3]={ 1, 2, 3, 4, 5, 6, 7};则b数组第一维的长度是___________。
A) 2 B) 3 C) 4 D) 无确定值12. 若有定义:int a[3][4]={0};则以下叙述中正确的是___________。
A) 只有元素a[0][0]可得到初值0 B) 此说明语句不正确C) 数组a中各元素都可得到初值,但其值不一定为0 D) 数组a中每个元素均可得到初值013.若有定义:int a[][4]={0, 0};以下叙述中错误的是_____________。
A)数组a的每个元素都可得到初值0B)二维数组a的第一维大小为1C)因为初值个数除以a中第二维大小的值的商为0,故数组a的行数为1D)只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值014. 若二维数组a有m列,则计算元素a[i][j]在数组中相对位置的公式为___________。
A) i*m+j B) j*m+i C) i*m+j-1 D) i*m+j+115.设char x[]="12345", y[]={'1', '2', '3', '4', '5', '\0'};以下叙述中正确的是_____________。
A)x数组的长度等于y数组的长度B)x数组的长度而在于y数组的长度C)x数组的长度少于y数组的长度D)x数组与y数组的存储区域相同16. 下面是对字符数组s进行初始化,其中不正确的是___________。
A) char s[5]={"abc"}' B) char s[5]={'a', 'b', 'c'};C) char s[5]=""; D) char s[5]="abcde";17. 字符'数组s不能作为字符串使用的是________________。
A) char s[]="happy"; B) char s[6]={'h', 'a', 'p', 'p', 'y', '\0'};C) char s[]={"happy"}; D) char s[5]= {'h', 'a', 'p', 'p', 'y'};18下面有关字符数组的描述中错误的是___________。
A)字符致组可以存放字符串B)字符串可以整体输入、输出c) 可以在赋值语句中通过赋值运算对字符数组整体斌值D) 不可以用关系运算符对字符数组中的字符串进行比较19.下面程序段执行后的输出结果是________________。
int k, a[3][3]={1, 2, 3, 4, 5, 6, 7, 8, 9};for(k=0;k<3;k++) printf("%d",a[k][2-k]);A) 3 5 7 B) 3 6 9 C) 1 5 9 D) 1 4 720. 下面程序段执行后的输出结果是________________。
char c[5]={'a', 'b', '\0', 'c', '\0'};printf("%s",c);A) 'a' 'b' B) ab C) ab c D) abc21.有两个字符数组a、b,则以下________________是正确的输入语句。
A) gets(a,b); B) scanf("%s%s",a,b); C) scanf("%s%s",&a,&b); D)gets("a"); gets("b");22. 下面程序段执行后的输出结果是________________。
char a[7]="abcdef";char b[4]="ABC";strcpy(a,b);printf("%s",a[5]);A) 空格B) \0 C) e D) f23.下面程序段执行后的输出结果是_____。
char c[]="\t\b\\\0will\n";printf("%d",strlen(c) );A) 14 B) 3 C) 9 D) 624. 判断字符串a是否大于b,应当使用___________。
A) if(a>b) B) if(strcmp(a,b))C) if(strcmp(b,a)>0) D) if(strcmp(a,b)>0)25.表达式strcmp("3.14", "3.278")的值是____________。
A) 非零整数B)浮点数C)0 D) 字符26. 以下叙述中正确的是___________。
A) 两个字符串所包含的字符个数相同时,才能比较字符串B) 字符个数多的字符串比字符个数少的字符串大C) 字符串"STOP "与"STOP"相等D) 字符串"That"与"The"相等27. 有以下程序:#include <stdio.h>#include <string.h>void main(){char p[]={'a', 'b', 'c'}, q[10]={ 'a', 'b', 'c'};printf("%d %d",strlen(p), strlen(q));}以下叙述中正确的是___________。
A)在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3 B)由于p数组中没有字符串结束符,长度不能确定;但q数组中字符串长度为3 C)由于q数组中没有字符串结束符,长度不能确定:但p数组中字符串长度为3 D)由于p和q数组中都没有字符串结束符,故长度都不能确定28. 下面程序运行时从键盘上输入:123456789回车,其输出结果是___________。
#include <stdio.h>void main(){char s[100]; int c, i;scanf("%c", &c); scanf("%d", &i); scanf("%s", s);printf("%c, %d, %s",c, i, s);}A) 123,456,789 B) 1,456,789 C) 1,23,456,789 D) 1,23,45629. 下面程序运行时从键盘上输入:ABC回车,其输出结果是___________。