C语言程序设计 第六章 数组.docx
《C语言程序设计 第六章 数组.docx》由会员分享,可在线阅读,更多相关《C语言程序设计 第六章 数组.docx(23页珍藏版)》请在冰豆网上搜索。
![C语言程序设计 第六章 数组.docx](https://file1.bdocx.com/fileroot1/2023-4/17/28332df7-5939-4731-8dec-902049356446/28332df7-5939-4731-8dec-9020493564461.gif)
C语言程序设计第六章数组
一、 选择题
1、在C语言中,引用数组元素时,其数组下标的数据类型允许是 。
A)、 整型常量 B)、 整型表达式
C)、 整形常量或整形表达式 D)、 任何类型的表达式
2、以下对一维整型数组a的正确说明是____
A)、 inta(10);B)、 intn=10,a[n];
C)、 intn;scanf(“%d”,&n); inta[n];
D)、#defineSIZE10 inta[SIZE];
3、若有定义:
inta[10],则对数组a元素的正确引用是
A)、 a[10] B)、a[3.5] C)、a(5) D)、a[10-10]
4、以下能对一维数组a进行正确初始化的语句是 。
A)、 inta[10]={0,0,0,0,0}; B)、 inta[10]={};
C)、 inta[]={0}; D)、 inta[10]={10*1};
5、若有定义:
inta[3][4],则对数组a元素的正确引用是________
A)、 a[2][4] B)、a[1,3] C)、a(5) D)、a[10-10]
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}};
7、若有说明:
inta[3][4]={0};则下面正确的叙述是_______
A)、 只有元素a[0][0]可得到初值0B)、 此说明语句不正确
C)、 数组a中各元素都可得到初值,但其值不一定为0
D)、 数组a中每个元素均可得到初值0
8、下面是对s的初始化,其中不正确的是_____
A)、chars[5]={“abc”};B)、chars[5]={‘a’,’b’,’c’,’d’,’e’,’\0’};
C)、 chars[5]=””; D)、 chars[5]=”abcdef”;
9、在C语言中,引用数组元素时,其数组下标的数据类型允许是()
A)整型常量B)整型表达式C)整型常量或整型表达式D)任何类型的表达式
10、以下对一维整形数组a的正确说明是()。
A)inta(10);B)intn=10,a[n];
C)intn;D)#defineSIZE10
scanf(“%d”,&n);inta[SIZE];
inta[n];
11、若有说明:
inta[10];则对a数组元素的正确引用是()。
A)a[10]B)a[3.5]C)a(5)D)a[10-10]
12、在C语言中,一位数组的定义方式为:
类型说明符数组名()。
A)[常量表达]B)整型表达式C)[整型常量]或[整型表达式]D)[整型常量]
13、以下对一维整形数组a进行正确初始化的语句是()。
A)inta[10]=(0,0,0,0,0);B)inta[10]={};C)inta[]={0};D)inta[10]={10*1};
14、以下对二维整形数组a的正确说明是(。
A)inta[3][];B)floata(3,4);C)doublea[1][4];D)floata(3)(4);
15、若有说明:
inta[3][4];则对a数组元素的正确引用是(。
A)a[2][4]B)a[1,3]C)a[1+1][0]D)a
(2)
(1)
16、若有说明:
inta[3][4];则对a数组元素的非法引用是()。
A)a[0][2*1]B)a[1][3]C)a[4-2][0]D)a[0][4]
17、以下对二维整形数组a进行正确初始化的语句是()。
A)inta[2][]={{1,01},{5,2,3}};B)inta[][3]={{1,2,3},{4,5,6}};
C)inta[2][3]={{1,2,3},{4,5},{6}};D)inta[][3]={{1,0,1},{},{1,1}};
18、以下不能对二维整形数组a进行正确初始化的语句是()。
A)inta[2][3]={0};B)inta[][3]={{1,2},{0}};
C)inta[2][3]={{1,2},{3,4},{5,6}};D)inta[][3]={1,2,3,4,5,6};
19、若有说明:
inta[3][4]={0};则下面正确的叙述是()。
A)只有元素a[0][0]可得到初值0B)此说明语句不正确
C)数组a中各元素都可得到初值,但其值不一定为0
D)数组a中每个元素均可得到初值0
20、若有说明:
inta[][4]={0,0};则下面正确的叙述是()。
A)数组a中每个元素均可得到初值0B)二维数组a的第一维大小为1
C)因为二维数组a中第二维大小的值除以初值个数的商为1,故数组a的行数为1
D)只有元素a0][0]和a[0][1]可得到初值0,其余元素均得不到初值0
21、若有说明:
inta[3][4];则数组a中各元素()。
A)可在程序的运行阶段得到初值0B)可在程序的编译阶段得到初值0
C)不能得到确定的初值D)可在程序的编译或运行阶段得到初值0
22、C语言规定,数组名做实参时,它和对应形参之间的数据传递方式是:
()
A)用户指定传递方式B)无传递C)单向值传递D)地址传递
23、下面程序()。
(每行程序前面的数字表示行号)。
1 main()
2 {
3 inta[3]={3*0};
4 inti;
5 for(i=0;i<3;i++)scanf("%d",&a[i]);
6 for(i=1;i<3;i++)a[0]=a[0]+a[i];
7 printf("%d\n",a[0]);
8 }
A)第3行有错误 B)第7行有错误 C)第5行有错误 D没有错误
24、下面程序()。
(每行程序前面的数字表示行号)。
1 main()
2 {
3 inta[3]={1};
4 inti;
5 scanf("%d",&a);
6 for(i=1;i<3;i++)a[0]=a[0]+a[i];
7 printf("a[0]=%d\n",a[0]);
8 }
A)3 B)6 C)7 D)5
25、下面程序()。
1main()
2{
3inta[3]={0};
4intI;
5for(I=0;I<3;I++)scanf(“%d”,&a[I]);
6for(I=1;I<4;I++)a[0]=a[0]+a[I];
7printf(“%d\n”,a[0]);
8}
A)没有错误B)第3行有错误C)第5行有错误D)第6行有错误、
26、若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为()。
A、i*m+jB、j*m+iC、i*m+j-1D、i*m+j+1
27、对以下说明语句的正确理解是()。
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)因为数组长度与初值的个数不同,所以此语句不正确
28、以下不正确的定义语句是()。
A)doublex[5]={2.0,4.0,6.0,8.0,10.0};B)inty[5]={0,1,3,5,7,9};
C)charc1[]={‘1’,’2’,’3’,’4’,’5’};
D)charc2[]={‘\x10’,’\xa’,’\x8’};
29、若有说明:
inta[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是()。
A)2B)3C)4D)无确定值
30、若二维数组a有m列,则在a[i][j]前面的元素个数为()。
A)j*m+IB)i*m+jC)i*m+j-1D)i*m+j+1
31、定义如下变量和数组:
intk;
inta[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是()。
for(k=0;k<3;k++)printf(“%d”,a[k][2-k]);
A)357B)369C)159D)147
32、以下正确的定义语句是()。
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};
33、下面程序的运行结果是()。
main()
{inta[6][6],i,j;
for(i=1;i<6;i++)
for(j=1;j<6;j++)
a[i][j]=(i/j)*(j/i);
for(i=1;i<6;i++)
{for(j=1;j<6;j++)
printf("%2d",a[i][j]);
printf("\n");}
}
A)11111
11111
11111
11111
11111
B)00001
00010
00100
01000
10000
C)10000
01000
00100
00010
00001
D)10001
01010
00100
01010
10001
34、下面程序的运行结果是()。
main()
{inta[6],i;
for(i=1;i<6;i++)
{a[i]=9*(i-2+4*(i>3))%5;
printf(“%2d”,a[i]);}}
A)–40404B)–40403C)–40443D)–40440
35、下面是对S的初始化,其中不正确的是()。
A)chars[5]={‘abc”};B)chars[5]={‘a’,’b’,’c’};
C)chars[5]=””;D)chars[5]=”abcdef”;
二、填空题
1、在C语言中,二维数组的定义方式为:
类型说明符数组名【】;
2、在C语言中,二维数组元素的内存中的存放顺序是【】。
3、若有定义:
doublex[3][5];则x数组中行下标的下限为【,列下标的上限为【】。
4、若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为:
【】。
(假设a[0][0]位于数组的第一个位置上。
)
5、若有定义:
inta[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是【】,a[2][1]得到的初值是【】。
6、若有以下输入(代表回车符),则下面程序的运行结果是【】。
main()
{intb[51],x,i,j=0,n=0;
scanf(“%d”,&x);
while(x>-1){b[++n]=x;scanf(“%d”,&x);}
for(i=1;i<=n;i++)
if(b[i]%2==0)b[++j]=b[i];
for(i=1;i<=j;i++)printf(“3%d”,b[i]);printf(“\n”);
}
7、下面程序以每行4个数据的形式输出a数组,请填空。
#defineN20
main()
{inta[N],i;
for(i=0;ifor(i=0;i{if(【】)【】
printf(“3%d”,a[i]);}
printf(“n”);}
8、下面程序将二维数组a的行和列元素互换后存到另一个二维数组b中。
请填空。
main()
{inta[2][3]={{1,2,3},{4,5,6}};
intb[3][2],i,j;
printf(“arrara:
\n”);
for(i=0;i<=1;i++)
{for(j=0;【】;j++)
{printf(“5%d”,a[i][j]);
【】;}
printf(“\n”);}
printf(“arrayb:
\n”);
for(i=0;【】;i++)
{for(j=0;j<=1;j++)
printf(“5%d”,b[i][j]);
printf(“\n”);
}}
9、下面程序的运行结果是【】。
main()
{inta[2][3]={{1,2,3},{4,5,6}};
intb[3][2],i,j;
printf(“arrara:
\n”);
for(i=0;i<=1;i++)
{for(j=0;j<=2;j++)
{printf(“5%d”,a[i][j]);
b[j][i]=a[i][j];}
printf(“\n”);}
printf(“arrayb:
\n”);
for(i=0;i<=2;i++)
{for(j=0;j<=1;j++)
printf(“5%d”,b[i][j]);
printf(“\n”);}}
10、下面程序可求出矩阵a的两条对角线上的元素之和。
请填空。
mian()
{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)==2sum2=sum2+a[i][j];
printf(“sum1=%d,sum2=%d\n”,sum1,sum2);
}
11、下面程序的运行结果是【】。
main()
{inta[5][5],i,j,n=1;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
a[i][j]=n++;
printf(“Theresultis:
\n”);
for(i=0;i<5;i++)
{for(j=0;j<=I;j++)
printf(“4%d”,a[i][j]);
printf(“\n”);}}
12、下面程序可求出矩形阵a的主对角线上的元素之和。
请填空。
main()
{inta=[3][3]={1,3,5,7,9,11,13,15,17},sum=0,I,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(【】)sum=sum+【】;
printf(“sum=%d\n”,sum);}
13、以下程序可求出所有的水仙花数。
(提示:
所谓水仙花数是指一个三位正整数,
其各位数字之和的立方之和等于该正整数。
例如:
407=4×4×4+0×0×0+7×7×7。
故407是一个水仙花数。
)请填空。
main()
{intx,y,z,a[8],m,i=0;
printf(“Thespecialnumbersare(inthearrangeof1000):
\n”);
for(【】;m++)
x=m/100;
y=【】;
z=m%10;
if(x*100+y*10+z==x*x*x+y*y*y+z*z*z)
{【】;i++;}}
for(x=0;x
printf(“%6d”,a[x]);}
14、下面程序的运行结果是【】。
main()
{inti,j,a[2][3]={{2,4,6},{8,10,12}};
printf(“Theorigianalarrayis:
\n”);
for(i=0;i<=2;i++)
{for(j=0;j<=3;j++)
printf(“%4d”,a[i][j]);
printf(“\n”);}
printf(“\ntheresultis:
\n”);
for(i=0;i<3;i++)
{for(j=0;j<2;j++)
printf(“%4d”,a[i][j]);
printf(“\n”);}}
15、下面程序的功能是输入5个整数,找出最大数和最小数所在的位置,并把二者对调,然后输出调整后的5个数。
请填空。
main()
{inta[5],max,min,i,j,k;
for(i=0;i<5;i++)
scanf(“%d”,&a[i]);
min=a[0];
for(i=1;i<5;i++)
if(a[i]max=a[0];
for(i=1;i<5;i++)
if(a[i]>max){max=a[i];【】;}
【】
print(“\nThepositionofminis:
%3d\n”,k);
printf(“Thepositionofmaxis:
%3d\n”,j);
for(i=0;i<5;i++)
printf(“%5d”,a[i]);}
三、编程题
1、用选择法对10个整数排序(从小到大)
2、有一篇文章,共有3行文字,每行有80个字符。
要求分别统计出其中英文大写字母,小写字母,中文字母,中文字符,数字,空格及其他字符的个数。
(提示:
中文字符是两个字节,且数值均大于128的字符)。
3、编程实现将一个字符串的内容颠倒过来。
4、求整形数组的最大值。
5、找出二维数组的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。
二维数组也可能没有鞍点。
6、从键盘上输入若干个学生的成绩,计算出平均成绩,并输出不及格的成绩和人数。
7、设计函数,在二维数组中产生如下形式的扬辉三角形。
1
11
121
1331
14641
······
8、回文是从前向后和从后向前读起来都一样的句子。
写一个函数,判断一个字符串是否为回文,注意处理字符串中有中文也有西文的情况。
9、某人有5张2角和4张3角的邮票,使用这些邮票能组合出多少种不同面值的邮资。
约瑟夫环问题:
编号为1,2,3,···,n的n个人按顺时针方向围坐一圈,每人持有一个正整数密码。
一开始任选一个正整数m作为报数上限值,从第一个人开始按顺时针报数,报到m时停止,报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。
设计程序求出出列顺序。
参考答案
一、 选择题
题号
1
2
3
4
5
6
7
8
9
答案
A
D
A
A
A
B
D
A
C
题号
10
11
12
13
14
15
16
17
18
答案
D
D
D
C
C
C
D
B
C
题号
19
20
21
22
23
24
25
26
27
答案
D
D
B
D
A
D
D
D
B
题号
28
29
30
31
32
33
34
35
答案
B
B
B
A
D
C
C
D
二、填空题
1、常量表达式常量表达式2、按行主顺序存放3、0,44、i*m+j+i
5、0,66、104682461227105467983246122-1
7、&a[i]i%4==0printf(“\n”)8、j<=2b[j][i]=ai<=2
9、arraya:
23
56
arrayb:
4
5
6
10、j=2j>=0
11、Theresultis:
1
67
1213
171819
2122232425
12、i==ja[i][j]13、m=100;m<1000m/10-x*10a[i]=m
14、Theoriginalarrayis:
46
81012
Theresultis:
28
410
612
15、j=ik=ia[j]=max;a[k]=min
三、 编程题
1、 main()
{inti,j,min,temp,a[11];
printf("enterdata:
\n");
for(i=1;i<=10;i++)
scanf("%d",&a[i]);6
printf("\n");
for(i=1;i<=10;i++)
printf("%5d",a[i]);
printf("\n");
for(i=1;i<=9;i++)
{min=i;
for(j=i+1;j<=10;j++)
if(a[min]>a[j])min=j;
temp=a[i];
a[i]=a[min];
a[min]=temp;}
printf("\nthesortednumber:
\n");
for(i=1;i<=10;i++)
printf("%5d",a[i]);}
2、 main()
{inti,j,upp,low,dig,spa,oth;
chartext[3][80];
upp=low=dig=spa=oth=0;
for(i=0;i<3;i++)
{printf("\npleaseinputline%d:
\n",i++);
gets(text[i]);
for(j=0;j<80&&text[i][j]!
='\0';j++)
{if(text[i][j]>'A'&&text[i][j]<='Z')
upp++;
elseif(text[i][j]>='a'&&text[i][j]<='z')
low++;
elseif(text[i][j]>='0'&&text[i][j]<='9')
dig++;
elseif(text[i][j]=='')
spa++;
else
oth++;}}
for(i=0;i<3;i++)
printf("%s\n",text[i]