数组习题.doc_第1页
数组习题.doc_第2页
数组习题.doc_第3页
数组习题.doc_第4页
数组习题.doc_第5页
免费预览已结束,剩余36页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章 数组 (8学时)学习目的与要求:1 、重点掌握一维数组的定义和引用;2 、基本掌握二维数组的定义和引用;3 、重点掌握字符型数组的定义与引用;4 、能正确使用字符串处理函数; 5 、学会使用数组解决实际问题。重点: 1 、一维数组的定义与引用;2 、二维数组的定义与引用;3 、字符数组的定义与引用; 第1讲知识归纳: 1、一维数组的定义:类型说明符 数组名 常量表达式 ;(1) (1) 数组名后必须用方括弧 ,用其他括弧均错误 ; (2) 方括弧中的常量表达式表示数组的元素个数;(3) 方括弧中的常量表达式,必须是能计算出具体数值,且不改变的常量,不能是变量;2、一维数组的引用: 数组名 下标 /下标从0开始,可以是整型常量或整型表达式; (1) 注意:数组元素引用时,不要超出数组范围 ;如 int a10 ; /可以引用的数组元素为 a0a9 , a10 不是本数组元素;3、一维数组的初始化:(1) (1) 可以在定义数组后,立刻赋值; 如 int a 3 = 1,3, 5 ;但下面这样是错误的:int a3 ; a = 1,3, 5 ;(2) (2) 可以给数组的部分元素赋值 ,不赋值的元素,默认值为int 0, char, , float 0.0 ; 如 int a 3= 1,3 ; /a0 =1 ; a1= 3 ; a2= 0 ;(3) 在对数组全部元素赋初值时,可以不指定元素个数;(4) 可以在循环控制下,给数组各元素赋值;如:int a10 ;for ( i=0 ; i 10 ;i + )a i = i ;基础训练(A)一、 一、 选择题1、在c语言中,引用数组元素时,其数组下标的数据类型允许是( )。A)整型常量 B)整型表达式C)整型常量或整型表达式 D)任何类型的表达式2、要说明一个有10个int元素的数组,应当选择语句( )。A) int a10; B) int a(10); C) int a9 D) int a113、以下对数组的正确定义是:( )。A) float b5.0 B) float b5 C) float b(5) D) float b4、对以下说明语句的正确理解是( )。int a10=6,7,8,9,10;A)将5个初值依次赋给a1至a5B)将5个初值依次赋给a0至a4C)将5个初值依次赋给a6至a10D)因为数组长度与初值的个数不相同,所以此语句不正确5、已知:int a10;则对a数组元素的正确引用是( )。A) a10 B) a3.5 C) a(5) D) a10-106、以下能对一维数组a进行正确初始化的语句是( )。A) int a10=(0,0,0,0,0); B)int a10=C) int a=0; D) int a10=10*1;7、以下能对一维数组a进行正确初始化的语句是( )。A) A) int a5; B)int a3; a=0,1,2,3,4; for(i=0;i3;i+) scanf(“%d”,a); C) int a3=0,1,2,3; D) int a5; for(i=0;i5;i+) scanf(“%d”,&ai); 二、 二、 填空题1、构成数组的各个元素必须具有相同的 。C语言中数组的下标必须是整正数、0或 。如果一维数组的长度为n ,则数组下标的最小值为 ,最大值为 。 2、在C语言中,一维数组的定义方式为:类型说说明符 数组名 。3、已知数组b定义为int b =9,6,3;,则b的各元素的值分别是 ,最小下标是 ,最大下标的 。4、在C语言中数组名是一个 ,不能对其进行加、减及赋值操作。5、已知数组T为一有10个单元的整型数组,正序输出T中的10个元素的值的语句为: for (j=0;j10;j+) printf(“%d”,Tj);下面的语句试图按相反的顺序显示输出T中的10个元素的相反数;请补充完整下面的语句:for( ; ;j- -)printf(“%d”, );三、 三、 综合题1、下面程序(每行程序前面的数字表示行号),请指出存在错误的行号( ) 1 main() 2 3 int a3=3*0; 4 int i; 5 for(i=0;i3;i+) scanf(%d,&ai); 6 for(i=1;i3;i+) a0=a0+ai;7 7 printf(%dn,a0);8 2、下面程序(每行程序前面的数字表示行号),请指出存在错误的行号( )1 1 main()2 2 3 3 int a3;4 4 int i;5 5 scanf(“%d”,&a);6 6 for(i=0;i3;i+) a0=a0+ai;7 7 printf(“a0=%d”,a0);8 8 3、下面程序(每行程序前面的数字表示行号),请指出存在错误的行号( )1 1 main()2 2 3 3 int a3;4 4 int i;5 5 for (i=0;i3;i+) scanf(“%d”,&ai);6 6 for(i=1;i3;i+) a0=a0+ai);7 7 printf(“%dn”,a);8 8 能力提高(B)一、 一、选择题1、以下对一维整型数组a的正确说明是( )。A) int a(10); B)int n=10,an;C) int n; D)#define SIZE 10;scanf(%,&n); int aSIZE;int an;2、若有以下说明,则数值为4的表达式是( )。A) ag-c B) a4 C) ad-c D) ad-c3、要定义一个int型一维数组art,并使其各元素具有初值89,-23,0,0,0,不正确的定义语句是( )。A) int art5=89,-23;B) int art =89,-23;C) int art5=89,-23,0,0,0;D) int art =89,-23,0,0,0;二、填空题1、 1、 读入20个整数,统计非负数个数,并计算非负数之和。#include “stdio.h”main() int i,a20,s,count; s=count=0; for ( i=0; i20; i+) scanf(“%d”, &ai ); for ( i=0; i20; i+) if (ai0) continue ; s+=ai; count+; printf(“s=%dt count=%dn”,s,count); 2、 2、 下面程序段的功能是将一个数组中的值按逆序重新存放,例如:原来顺序是8,5,3,2,要求改为2,3,5,8#define N 10int i,j,aN;for ( i=0, j= N-1 ; ij; i+, j-) k=ai; ai=aj; aj=k;3、若有以下程序段:. int a5=4,0,2,3,1;i,j,t; for(i=1;i=0&taj) aj+1=aj;j-; . 则该程序段的功能是( 对a数组降序排 )。 三、编程题1、有一个已经排好序的数组,现输入一个数,要求按原来排序的规律将它插入到数组中。#include main() int a11=3,4,7,9,10,13,14,15,18,20; int i,j,n; scanf (%d,&n); i=0; while (i10) if (ni; j-) aj=aj-1;ai=n; break;else i+; if (i=10) a10=n; for (i=0;i11;i+) printf(%4d,ai);2、设计一程序,它输入20个正整数,然后重新安排这个序列的顺序,使得最小数位于序列的首部,最大数位于序列的尾部。显示处理前后的这两个整数序列。 第2讲知识归纳:1、二维数组的定义: 类型说明符 数组名 常量表达式1 常量表达式2 ; (1) 常量表达式1-可以形象理解为 行数;常量表达式2-可以形象理解为 列数 ; (2) 二维数组中元素存放顺序是:先存放第一行的元素,再存放第二行的元素,依次类推;2、二维数组的引用: 数组名 下标 下标 /下标从0开始,可以是整型常量或整型表达式;(1) 注意:数组元素引用时,不要超出数组范围 ;如 int a3 4 ; /可以引用的数组元素为 a00a23 , a34不是本数组元素;(2) 可以在循环控制下,给二维数组各元素赋值;如:int a3 4;for ( i=0 ; i 3 ;i + )for ( j=0 ; j4;j+) a i = i * j;3、二维数组的初始化:(1) 可以在定义数组后,立刻赋值; 如 int a 34 = 1,3, 5,7,9,11 ;但下面这样是错误的:int a34 ; a = 1,3, 5,7,9,11 ;(2) (2) 可以给数组的部分元素赋值 ,不赋值的元素,默认值为int 0, char, , float 0.0 ;(3) 在对数组全部元素赋初值时,可以省略行数,但不能省略列数;基础练习(A)一、选择题1、在C语言中,二维数组元素在内存中的存放顺序是( )。A) 按行存放 B)按列存放 C)由用户自己定义 D)由编译器决定 2、以下对二维数组a的正确说明是 ( )。A)int a3 B) float a(3,4) C) double a14 D) float a(3)(4) 3、已知:int a34;则对数组元素引用正确的是( )。A)a24 B)a1,3 C) a20 D) a(2)(1) 4、已知:int a34=0;则下面正确的叙述是( )。A)只有元素a00可得到初值0B)此说明语句是错误的C)数组a中的每个元素都可得到初值,但其值不一定为0D)数组a中的每个元素均可得到初值05、以下正确的语句是( )。A) int a14=1,2,3,4,5; B) float x3=1,2,3;C) long b23=1,1,2,1,2,3; D) double y3=0;6、以下能对二维数组元素a进行正确初始化的语句是 ( )。A) int a2=1,0,1,5,2,3;B) int a3=1,2,3,4,5,6;C) int a24=1,2,3,4,5,6;D) int a3=1,0,1,1,1;二、填空题下面的程序是求出数组a的两条对角线上的元素之和。#include stdio.hmain() int a33=1,3,6,7,9,11,14,15,17,sum1=0,sum2=0,i,j; for (i=0;i3;i+) for (j=0;j3;j+) if (i=j) sum1=sum1+aij; for (i=0;i3;i+) for ( ; ; j-) if (i+j=2) sum2=sum2+aij; printf(sum1=%d,sum2=%dn,sum1,sum2);三、编程题1、在一个二维数组中形成并输出如下矩阵: 1 2 3 3 2 1 1 1 1 2、有一个3*4的矩阵,求其中的最大元素的值。能力提高(B)一、选择题1、以下各组选项中,均能正确说明二维实型数组a的是 ( )。A) float a34; B) float a(3,4); float a4; float a34; float a3=1,0; float a=0,0;C) float a34; D) float a34; float a4=0,0; float a3; float a4=0,0,0; float a4;2、以下不能对二维数组a进行正确初始化的语句是 ( )。A) int a23=0;B) int a3=1,2,0;C) int a23=1,2,3,4,5,6;D) int a3=1,2,3,4,5,6;3、已知:int a3=1,2,3,4,5,6,7;则数组a的第一维的大小是 ( )。A)2 B)3 C)4 D)无确定值4、若二维数组a有m列,则在aij之前的元素个数为 ( )。A) j*m+i B) i*m+j C) i*m+j-1 D) i*m+j+1二、写出程序的运行结果1、下面程序的运行结果是_。 main() int a66,i,j; for(i=1;i6;i+) for(j=1;j6,j+) aij=(i/j)*(j/i); for(i=1;i6;i+) for(j=1;j6;j+) printf(%2d,aij);printf(n_);三、填空题1、下面的程序段的功能是产生如下形式的杨辉三角形。11 11 2 11 3 3 11 4 6 4 1. .#define N 11main() int aNN,i,j; for (i=1;iN;i+) ai1=1; aii=1; for ( ; iN; i+) for (j=2; ;j+) aij= +ai-1j;. .四、编程题1、设计一程序,它输入一个5行5列的矩阵,计算并显示输出该矩阵最外圈元素的合计值。2、输入二维数组a35,打印其中最小值和最大值及其对应的行列位置。第3讲知识归纳:1、字符数组的定义与引用: 类型说明符 数组名 常量表达式 ;(1) 与一维数组、二维数组定义、引用相同,只是类型说明符固定为 :char 2、字符数组的初始化:(1) 逐字符赋值 如 char c1 10 = W,e,l,c,o,m,e ;但下面这样是错误的:char c1 10 ;c1 = W,e,l,c,o,m,e ;(2) 字符串赋值和字符串结束标志 如 char c110 = “ Welcome ” ;但下面这样是错误的:char c1 10 ;c1 = “ Welcome ” ;注意:系统会自动在字符串末尾加一个结束标志0 , 所以,定义字符数组时需要在字符个数基础上,多定义一个字节存储空间,存放结束标子;3、字符数组的输入输出:(1) 逐个字符输入输出。用格式符%c 输入或输出一个字符;往往与循环结合使用;如: char c110 ; for ( i=0 ; i7 ; i + ) scanf ( “%c” , &c1 i ); . for ( i =0 ; i7 ; i + ) printf( “%c” , c1 i );(2)将整个字符串一次输入输出,用格式符%s ;如: char c110 ;scanf ( “ %s”, c1) ; /数组名代表数组的首地址printf( “%s” , c1);基础练习(A)一、选择题1、要使字符数组str存放一个字符串ABCDEFGH,正确的定义语句是( )。A) char str8=A,B,C,D,E,F,G,H;B) char str8=ABCDEFGH;C) char str =A,B,C,D,E,F,G,H;D) char str =ABCDEFGH;2、下面是对数组s的初始化,其中错误的是 ( )。A) char s5=abc B) char s5=a,b,c;C) char s5=; D) char s5=abcde;3、对两个数组a和b进行如下初始化 char a=ABCDEF; char b=A,B,C,D,E,F;则以下叙述正确的是( )。 A) a与b数组完全相同 B) a与b长度相同C) a和b中都存放字符串 D) a数组比b数组长度长4、下面程序的运行结果是 ( )。 char c5=a,b,0,c,0; printf(%s,c);A) ab B) ab C) ab c D) 以上三个答案均有错误二、填空题1、字符数组是用来存放 的数组。字符数组中一个元素存放 个字符。2、在C语言中存放字符A需要占用 个字节,存放字符串A需要占用 个字节。3、以下语句的输出结果是 。printf(%sn,c:win98cmd.exe);三、程序填空1、下列程序最多从键盘上输入99个字符,遇到n后则退出,遇到空格则换成字符 # ,对其他字符依次原样送入数组c中。#include stdio.hmain() int i; char ch,c100; for (i=0; ;i+) if (ch=getchar()=n) ; if ( ch= ) ; ci=ch; ci=0; puts(c);能力提高(B)一、选择题1、下面程序段运行的结果是 ( )。char s=a book!;printf(%.4s,s);A) a book! B) a boC) a boo D) 格式描述不正确,没有确定的输出2、合法的数组定义是 ( )。A) int a=string; B) int a5=0,1,2,3,4,5;C) char a=string; D) char a=0,1,2,3,4,5;3、要使字符串数组STR含有ABCD,EFG和xy三个字符串,不正确的定义语句有( )。A)char STR 4=ABCD,EFG,XY;B)char STR 5= ABCD,EFG,XY;C)char STR 6= ABCD,EFG,XY;D)char STR 7=A,B,C,D,0,EFG,XY;二、阅读程序,写出执行结果。1、#include main() char str30; scanf (%s,str); printf(%s,str); 运行程序,输入:Fortran Language运行结果:2、执行语句序列 char s110=abcdef, s220=inter; scanf(%s,s1); int k=0,j=0; while(s2k) k+; while(s2j) s2-k=s1+j;时,若键盘输入的是net,则s1中的字符串是( ),s2中的字符串是( )。三、编程题1、输入一个字符串,统计指定字符的个数。例如:字符串abcddcba,指定字符c,则统计个数为2。2、打印以下图案: * * * * * * * * * * * * * * * * * * * *第4讲知识归纳:1、 1、 puts( )函数:(1) 格式:puts(字符数组名) ; (2) 作用:将一个字符串(以0结束的字符序列)输出到终端;(3) 特点:输出完字符串自动换行;2、 2、 gest( )函数:(1) 格式:gets(字符数组名) ; (2) 作用:从终端输入一个字符串到字符数组,并返回字符数组的起始地址;(3) 特点:空格( )做为有效字符输入;3、 3、 strcat( )函数:(1) 格式:strcat(字符数组1,字符数组2) ; (2) 作用:将字符数组2中的字符串,连接在字符数组1中的字符串后,并返回字符数组1的首地址;(3) 要求:字符数组1足够大; 4、 4、 strcpy( )函数:(1) 格式:strcpy(字符数组1,字符串2) ; (2) 作用:将字符串2,复制到字符数组1中去,并返回字符数组1的首地址;(3) 要求:字符数组1足够大;且字符数组1必须写成数组名形式,字符串2可以使字符数组名,也可以是一个字符串;5、 5、 strcmp( )函数:(1) 格式:strcmp(字符串1,字符串2) ; (2) 作用:对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到0为止。并返回字符数组1的首地址;(3) 要求:字符数组1足够大;且字符数组1必须写成数组名形式,字符串2可以使字符数组名,也可以是一个字符串;6、 6、 strlen( )函数:基础练习(A)一、选择题、有两个字符数组a、b,则以下正确的输入格式是 ( )。A) gets (a,b); B) scanf (%s%s,a,b);C) scanf (%s%s,&a,&b); D) gets (a), gets (b);、判断字符串a和b是否相等,应当使用( )。A) if (a=b) B) if (a=b)C) if (strcpy(a,b) D) if (strcmp(a,b)、下述对C语言字符数组的描述中错误的是( )。A)字符数组可以存放字符串B)字符数组的字符串可以整体输入、输出C)可以在赋值语句中通过赋值运算符=对字符数组整体赋值D)不可以用关系运算符对字符数组中的字符串进行比较、运行下面程序段的输出结果是( )。char s12=string;printf(%d,strlen(s);A) 12 B) 7 C) 6 D) 55、函数调用strcat ( strcpy ( str1,str2 ), str3 )的功能是( )。)将字符串str1复制到字符串str2中,再连接到字符串str3之后)将字符串str1连接到字符串str2之后,再复制到字符串str3之后)将字符串str2复制到字符串str1中,再将字符串str3连接到字符串str1之后)将字符串str2连接到字符串str1之后,再将字符串str1复制到字符串str3之中二、填空题1、已知s1, s2,和s3是三个有足够元素个数的字符串数组,利用标准函数并借助于s3,可以交换s1和s2中的字符串; 实现这一交换过程的语句序列是 。2、已知s1,s2和s3是三个足够元素个数的字符串变量,其值分别是aaa,bbbb和ccccc,执行语句strcat(strcpy(s2, s3), s1);后,s1,s2和s3的值分别是 。3、已知s1和s2是两个字符串变量,要求显示输出s1,s2中较大的那个字符串,若相等,两个都输出;利用标准函数实现这一输出过程的语句序列是 。4、执行语句序列 chat str1 =ABCD,str210=XYZxyz; for(int i=0;str2i=str1i;i+);后,数组str2中的字符串是 。三、程序填空、下面程序的功能是将一个字符串str的内容颠倒过来,请将程序补充完整。#include string.hmain() int i,j, ; char str=0123456789; for ( i=0,j=strlen(str) ; ij; i+, j-) k=stri; stri=strj; strj=k; printf(%sn,str); 四、阅读程序,写出执行结果、# include stdio.h main() char str30; gets(str); printf(%sn,str); 运行程序,输入:Fortran Language输出结果:、# include # include main() char str100=How do you do; strcpy (str, is she); printf (%sn,str); 输出结果:能力提高(B)一、选择题、有下面的程序段char a3,b=china;a=b; printf(%s,a);则( )。A)运行后将输出ch B)运行后将输出ChC)运行后将输出chi D)编译出错、下面描述正确的是( )。A)两个字符串所包含的字符个数相同时,才能比较字符串B)字符个数多的字符串比字符个数少的字符串大C)字符串STOP与STOP 相等D)字符串hat小于字符串het3、下面程序段的运行结果是( )。char c=tb0willn;printf ( %d, strlen (c);A) 14 B) 3 C) 9 D) 字符串中有非法字符,输出值不确定、下面程序段的运行结果是( )。(其中表示空格)char a7=abcdef,b4=ABC;strcpy (a,b);printf (%c,a5);A) B) 0 C) e D) f二、填空题、已知s1,s2和s3是三个足够元素个数的字符串变量,其值分别是abc,abf和abcd,执行语句strcat(s3, strcmp(s1, s2)0 ? s1:s2);后,s1,s2和s3的值分别为 。、写出下面程序的功能是 。 #include main() char s80;int i,j; gets(s); for(i=j=0;si!=0;i+) if(si!=c)sj+=si puts(s); 三、阅读程序,写出执行结果 、下面程序的运行结果是( ) #include main()char a=morning,t;int i,j=0;for(i=1;i7;i+) if(ajai)j=i;t=aj;aj=a7;a7=aj;puts(a);、当运行以下程序时,从键盘输入:ab c dd(表示回车),则下面程序的运行结果是( ) #include #define N 6 main() char cN; int i=0; for (;iN;ci=getchar(),i+); for(i=0;iN;i+)putchar(ci); 、下面程序的运行结果是()# include # include main() char str100=How do you do; strcpy( str+strlen(str)/2,es she); printf (%sn,str);四、 编程题1、设计一函数,将一个字符串中的所有大写字母转换成相应的小写字母。链接二级考试一、 一、选择题1、执行下面的程序段后,变量k中的值为( )。 A) 不定值 B) 33 C) 30 D) 10 int k=3, s2; s0=k; k=s1*10; (2000年4月)2、设有数组定义: char array =China; 则数组 array所占的空间为( )。 A) 4个字节 B) 5个字节 C) 6个字节 D) 7个字节 (2000年4月)3、下列程序执行后的输出结果是( )。 A) you&ne B) you C) me D) err main() char arr24; strcpy(arr,you); strcpy(arr1,me); arr03=&; printf(%s n,arr); (2000年4月)4、执行下列程序时输入:123456789,输出结果是( )。 A) 123,456,789 B) 1,456,789 C) 1,23,456,789

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论