C语言复习题及答案 第七章 数组解读.docx
- 文档编号:24004299
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:30
- 大小:30.21KB
C语言复习题及答案 第七章 数组解读.docx
《C语言复习题及答案 第七章 数组解读.docx》由会员分享,可在线阅读,更多相关《C语言复习题及答案 第七章 数组解读.docx(30页珍藏版)》请在冰豆网上搜索。
C语言复习题及答案第七章数组解读
第七章数组(8学时)
学习目的与要求:
1、重点掌握一维数组的定义和引用;
2、基本掌握二维数组的定义和引用;
3、重点掌握字符型数组的定义与引用;
4、能正确使用字符串处理函数;
5、学会使用数组解决实际问题。
重点:
1、一维数组的定义与引用;
2、二维数组的定义与引用;
3、字符数组的定义与引用;
第1讲
知识归纳:
1、一维数组的定义:
类型说明符数组名[常量表达式];
(1)
(1)数组名后必须用方括弧[],用其他括弧均错误;
(2)方括弧中的常量表达式表示数组的元素个数;
(3)方括弧中的常量表达式,必须是能计算出具体数值,且不改变的常量,不能是变量;
2、一维数组的引用:
数组名[下标]//下标从0开始,可以是整型常量或整型表达式;
(1)注意:
数组元素引用时,不要超出数组范围;
如inta[10];
//可以引用的数组元素为a[0]……a[9],a[10]不是本数组元素;
3、一维数组的初始化:
(1)
(1)可以在定义数组后,立刻赋值;如inta[3]={1,3,5};
但下面这样是错误的:
inta[3];
a={1,3,5};
(2)
(2)可以给数组的部分元素赋值,不赋值的元素,默认值为int0,char,‘’,float0.0;
如inta[3]={1,3};//a[0]=1;a[1]=3;a[2]=0;
(3)在对数组全部元素赋初值时,可以不指定元素个数;
(4)可以在循环控制下,给数组各元素赋值;
如:
inta[10];
for(i=0;i<10;i++)
a[i]=i;
基础训练(A)
一、选择题
1、在c语言中,引用数组元素时,其数组下标的数据类型允许是()。
A)整型常量B)整型表达式
C)整型常量或整型表达式D)任何类型的表达式
2、要说明一个有10个int元素的数组,应当选择语句()。
A)inta[10];B)inta(10);C)inta[9]D)inta[11]
3、以下对数组的正确定义是:
()。
A)floatb[5.0]B)floatb[5]C)floatb(5)D)floatb[]
4、对以下说明语句的正确理解是()。
inta[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)因为数组长度与初值的个数不相同,所以此语句不正确
5、已知:
inta[10];则对a数组元素的正确引用是()。
A)a[10]B)a[3.5]C)a(5)D)a[10-10]
6、以下能对一维数组a进行正确初始化的语句是()。
A)inta[10]=(0,0,0,0,0);B)inta[10]={}
C)inta[]={0};D)inta[10]={10*1};
7、以下能对一维数组a进行正确初始化的语句是()。
A)A)inta[5];B)inta[3];
a={0,1,2,3,4};for(i=0;i<3;i++)
scanf(“%d”,a);
C)inta[3]={0,1,2,3};D)inta[5];
for(i=0;i<5;i++)
scanf(“%d”,&a[i]);
1、C2、A3、B4、B5、D6、C7、D
二、填空题
1、构成数组的各个元素必须具有相同的类型。
C语言中数组的下标必须是整正数、0或整型表达式。
如果一维数组的长度为n,则数组下标的最小值为0,最大值为n-1。
2、在C语言中,一维数组的定义方式为:
类型说说明符数组名[常量表达式]。
3、已知数组b定义为intb[]={9,6,3};,则b的各元素的值分别是,
最小下标是,最大下标的。
9,6,30,2
4、在C语言中数组名是一个常量,不能对其进行加、减及赋值操作。
5、已知数组T为一有10个单元的整型数组,正序输出T中的10个元素的值的语句为:
for(j=0;j<10;j++)printf(“%d”,T[j]);
下面的语句试图按相反的顺序显示输出T中的10个元素的相反数;请补充完整下面的语句:
for(j=9;j>=0;j--)printf(“%d”,T[j]);
三、综合题
1、下面程序(每行程序前面的数字表示行号),请指出存在错误的行号(3)
1main()
2{
3inta[3]={3*0};
4inti;
5for(i=0;i<3;i++)scanf("%d",&a[i]);
6for(i=1;i<3;i++)a[0]=a[0]+a[i];
77printf("%d\n",a[0]);
8}
2、下面程序(每行程序前面的数字表示行号),请指出存在错误的行号(5)
11main()
22{
33inta[3];
44inti;
55scanf(“%d”,&a);
66for(i=0;i<3;i++)a[0]=a[0]+a[i];
77printf(“a[0]=%d”,a[0]);
88}
3、下面程序(每行程序前面的数字表示行号),请指出存在错误的行号(7)
11main()
22{
33inta[3];
44inti;
55for(i=0;i<3;i++)scanf(“%d”,&a[i]);
66for(i=1;i<3;i++)a[0]=a[0]+a[i]);
77printf(“%d\n”,a);
88}
第2讲
知识归纳:
1、二维数组的定义:
类型说明符数组名[常量表达式1][常量表达式2];
(1)常量表达式1------可以形象理解为行数;
常量表达式2-----可以形象理解为列数;
(2)二维数组中元素存放顺序是:
先存放第一行的元素,再存放第二行的元素,依次类推;
2、二维数组的引用:
数组名[下标][下标]
//下标从0开始,可以是整型常量或整型表达式;
(1)注意:
数组元素引用时,不要超出数组范围;
如inta[3][4];
//可以引用的数组元素为a[0][0]……a[2][3],a[3][4]不是本数组元素;
(2)可以在循环控制下,给二维数组各元素赋值;
如:
inta[3][4];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
a[i]=i*j;
3、二维数组的初始化:
(1)可以在定义数组后,立刻赋值;如inta[3][4]={1,3,5,7,9,11};
但下面这样是错误的:
inta[3][4];
a={1,3,5,7,9,11};
(2)
(2)可以给数组的部分元素赋值,不赋值的元素,默认值为int0,char,‘’,float0.0;
(3)在对数组全部元素赋初值时,可以省略行数,但不能省略列数;
基础练习(A)
一、选择题
1、在C语言中,二维数组元素在内存中的存放顺序是()。
A)按行存放B)按列存放
C)由用户自己定义D)由编译器决定
2、以下对二维数组a的正确说明是()。
A)inta[3][]B)floata(3,4)C)doublea[1][4]D)floata(3)(4)
3、已知:
inta[3][4];则对数组元素引用正确的是()。
A)a[2][4]B)a[1,3]C)a[2][0]D)a
(2)
(1)
4、已知:
inta[3][4]={0};则下面正确的叙述是()。
A)只有元素a[0][0]可得到初值0
B)此说明语句是错误的
C)数组a中的每个元素都可得到初值,但其值不一定为0
D)数组a中的每个元素均可得到初值0
5、以下正确的语句是()。
A)inta[1][4]={1,2,3,4,5};B)floatx[3][]={{1},{2},{3}};
C)longb[2][3]={{1},{1,2},{1,2,3}};D)doubley[][3]={0};
6、以下能对二维数组元素a进行正确初始化的语句是()。
A)inta[2][]={{1,0,1},{5,2,3}};
B)inta[][3]={1,2,3},{4,5,6}};
C)inta[2][4]={{1,2,3},{4,5},{6}};
D)inta[][3]={{1,0,1},{},{1,1}};
1、A2、C3、C4、D5、D6、B
二、填空题
下面的程序是求出数组a的两条对角线上的元素之和。
#include"stdio.h"
main()
{inta[3][3]={{1,3,6},{7,9,11},{14,15,17}},sum1=0,sum2=0,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(i==j)sum1=sum1+a[i][j];
for(i=0;i<3;i++)
for(;;j--)
if(i+j==2)
sum2=sum2+a[i][j];
printf("sum1=%d,sum2=%d\n",sum1,sum2);
}
1、j=22、j>=i
三、编程题
1、在一个二维数组中形成并输出如下矩阵:
123
321
111
main()
{inta[5][5],i,j;
printf("input5*5:
\n");
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
for(i=0;i<5;i++)
{for(j=0;j<5;j++)
printf("%d",a[i][j]);
printf("\n");
}
}
2、有一个3*4的矩阵,求其中的最大元素的值。
main()
{inta[3][4],i,j,max;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
max=a[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(a[i][j]>max)max=a[i][j];
printf("max=%d\n",max);
}
第3讲
知识归纳:
1、字符数组的定义与引用:
类型说明符数组名[常量表达式];
(1)与一维数组、二维数组定义、引用相同,只是类型说明符固定为:
char
2、字符数组的初始化:
(1)逐字符赋值
如charc1[10]={‘W’,’e’,’l’,’c’,’o’,’m’,’e’};
但下面这样是错误的:
charc1[10];
c1={‘W’,’e’,’l’,’c’,’o’,’m’,’e’};
(2)字符串赋值和字符串结束标志
如charc1[10]=“Welcome”;
但下面这样是错误的:
charc1[10];
c1=“Welcome”;
注意:
系统会自动在字符串末尾加一个结束标志’\0’,所以,定义字符数组时需要在字符个数基础上,多定义一个字节存储空间,存放结束标子;
3、字符数组的输入输出:
(1)逐个字符输入输出。
用格式符%c输入或输出一个字符;往往与循环结合使用;
如:
charc1[10];
for(i=0;i<7;i++)scanf(“%c”,&c1[i]);
…….
for(i=0;i<7;i++)printf(“%c”,c1[i]);
(2)将整个字符串一次输入输出,用格式符%s;
如:
charc1[10];
scanf(“%s”,c1);//数组名代表数组的首地址
……
printf(“%s”,c1);
基础练习(A)
一、选择题
1、要使字符数组str存放一个字符串"ABCDEFGH",正确的定义语句是()。
A)charstr[8]={'A','B','C','D','E','F','G','H'};
B)charstr[8]="ABCDEFGH";
C)charstr[]={'A','B','C','D','E','F','G','H'};
D)charstr[]="ABCDEFGH";
2、下面是对数组s的初始化,其中错误的是()。
A)chars[5]={"abc"}B)chars[5]={'a','b','c'};
C)chars[5]="";D)chars[5]="abcde";
3、对两个数组a和b进行如下初始化
chara[]="ABCDEF";
charb[]={'A','B','C','D','E','F'};
则以下叙述正确的是()。
A)a与b数组完全相同B)a与b长度相同
C)a和b中都存放字符串D)a数组比b数组长度长
4、下面程序的运行结果是()。
charc[5]={'a','b','\0','c','\0'};
printf("%s",c);
A)'a''b'B)abC)abcD)以上三个答案均有错误
1、D2、D3、D4、B
二、填空题
1、字符数组是用来存放字符的数组。
字符数组中一个元素存放1个字符。
2、在C语言中存放字符'A'需要占用1个字节,存放字符串"A"需要占用2个字节。
3、以下语句的输出结果是C:
\win98\cmd.exe。
printf("%s\n","c:
\\win98\\cmd.exe");
三、程序填空
1、下列程序最多从键盘上输入99个字符,遇到'\n'后则退出,遇到空格则换成字符'#',对其他字符依次原样送入数组c中。
#include"stdio.h"
main()
{inti;
charch,c[100];
for(i=0;;i++)
{if((ch=getchar())=='\n')
;
if(ch=='i<99breakch='#'')
;
c[i]=ch;
}
c[i]='\0';puts(c);
}
第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)
一、选择题
1、有两个字符数组a、b,则以下正确的输入格式是()。
A)gets(a,b); B)scanf("%s%s",a,b);
C)scanf("%s%s",&a,&b); D)gets("a"),gets("b");
2、判断字符串a和b是否相等,应当使用()。
A)if(a==b)B)if(a=b)
C)if(strcpy(a,b))D)if(strcmp(a,b))
3、下述对C语言字符数组的描述中错误的是()。
A)字符数组可以存放字符串
B)字符数组的字符串可以整体输入、输出
C)可以在赋值语句中通过赋值运算符"="对字符数组整体赋值
D)不可以用关系运算符对字符数组中的字符串进行比较
4、运行下面程序段的输出结果是()。
chars[12]="string";
printf("%d",strlen(s));
A)12B)7C)6D)5
5、函数调用strcat(strcpy(str1,str2),str3)的功能是()。
A)将字符串str1复制到字符串str2中,再连接到字符串str3之后
B)将字符串str1连接到字符串str2之后,再复制到字符串str3之后
C)将字符串str2复制到字符串str1中,再将字符串str3连接到字符串str1之后
D)将字符串str2连接到字符串str1之后,再将字符串str1复制到字符串str3之中
1、B2、D3、C4、C5、C
二、填空题
1、已知s1,s2,和s3是三个有足够元素个数的字符串数组,利用标准函数并借助于s3,
可以交换s1和s2中的字符串;实现这一交换过程的语句序列是strcpy(s3,s1);
strcpy(s1,s2);strcpy(s2,s1);。
2、已知s1,s2和s3是三个足够元素个数的字符串变量,其值分别是"aaa","bbbb"和"ccccc",执行语句strcat(strcpy(s2,s3),s1);后,s1,s2和s3的值分别是"aaa""cccccaaa""ccccc"
3、已知s1和s2是两个字符串变量,要求显示输出s1,s2中较大的那个字符串,若相等,两个都输出;利用标准函数实现这一输出过程的语句序列是
if(strcmp(s1,s2)>0)printf("%s",s1);
if(strcmp(s1,s2)<0)printf("%s",s2);
if(strcmp(s1,s2)==0)printf("%s%s",s1,s2);
4、执行语句序列
chatstr1[]="ABCD",str2[10]="XYZxyz";
for(inti=0;str2[i]=str1[i];i++);
后,数组str2中的字符串是ABCD。
三、程序填空
1、下面程序的功能是将一个字符串str的内容颠倒过来,请将程序补充完整。
#include"string.h"
main()
{inti,j,k-1;
charstr[]="0123456789";
for(i=0,j=strlen(str);i {k=str[i];str[i]=str[j];str[j]=k;} printf("%s\n",str); } 四、阅读程序,写出执行结果 1、#include"stdio.h" main() {charstr[30]; gets(str); printf("%s\n",str); } 运行程序,输入: FortranLanguage 输出结果: FortranLanguage 2、#include #include main() {charstr[100]="Howdoyoudo"; strcpy(str,"isshe"); printf("%s\n",str); } 输出结果: isshe 链接二级考试 一、一、选择题 1、执行下面的程序段后,变量k中的值为()。 A)不定值B)33C)30D)10 intk=3,s[2]; s[0]=k;k=s[1]*10; (2000年4月) 2、设有数组定义: chararray[]="China";则数组array所占的空间为()。 A)4个字节B)5个字节C)6个字节D)7个字节 (2000年4月) 3、下列程序执行后的输出结果是()。 A)you&neB)youC)meD)err main() {chararr[2][4]; strcpy(arr,"you");strcpy(arr[1],"me"); arr[0][3]='&'; printf("%s\n",arr); }(2000年4月) 4、执行下列程序时输入: 123<空格>456<空格>789<回车>,输出结果是()。 A)123,456,789B)1,456,789 C)1,23,456,789D)1,23,456 main() {chars[100];intc,i; scanf("%c",&c);scanf("%d",&i);scanf("%s",s); printf("%c,%d,%s\n",c,i,s); }(2000年4月) 5、有如下程序 main() {intn[5]={0,0,0},i,k=2; for(i=0;i printf(“%d\n”,n[k]); } 该程序的输出结果是()。 A)不确定的值B)2C)1D)0 (2000年9月) 1、A2、C3、A4、D5、D 6、有如下程序 main0 {inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0; for(i=1;i<3;i++) for(j=0;j printf(“%d\n”,s); } 该程序的输出结果是()。 A)18B)19C)20D)21 (2000年9月) 7、以下程序的输出结果是()。 A)1,5,9B)1,4,7C)3,5,7D)3,6,9 main() {inti,x[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++)printf(“%d,”,x[i][2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言复习题及答案 第七章 数组解读 语言 复习题 答案 第七 数组 解读
![提示](https://static.bdocx.com/images/bang_tan.gif)