c语言数组练习题Word格式文档下载.docx
《c语言数组练习题Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《c语言数组练习题Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
inta[k];
解析:
一维数组定义的一般形式为:
类型标识符数组名[常量表达式]
其中,常量表达式可以是任意类型,一般为算术表达式,其值表示数组元素的个数,即数组长度。
答案:
C
以下对一维数组的定义中不正确的是。
A.doublex[5]={2.0,4.0,6.0,8.0,10.0};
B.inty[5]={0,1,3,5,7,9};
C.charch1[]={‘1’,‘2’,‘3’,‘4’,‘5’};
D.charch2[]={‘\x10’,‘\xa’,‘\x8’};
可以对一维数组的全部元素或部分元素赋初值。
在对全部数组元素初始化时,数组长度可以省略。
若数组长度没有省略,则初始化列表中值的个数不能超过数组的长度。
答案:
B
以下对二维数组的定义中正确的是。
A.inta[4][]={1,2,3,4,5,6};
B.inta[][3];
C.inta[][3]={1,2,3,4,5,6};
D.inta[][]={{1,2,3},{4,5,6}};
定义二维数组时,若按一维格式初始化,则第一维的长度可以省略,此时,系统可根据初始化列表中值的个数及第二维的长度计算出省略的第一维长度,但无论如何,第二维的长度不能省略。
没有初始化时,每一维的长度都不能省略。
假定一个int型变量占用两个字节,若有定义:
intx[10]={0,2,4};
则数组x在内存中所占字节数是。
A.B.C.10D.0
一维数组在内存中所占的字节数为:
数组长度×
sizeof。
D
以下程序的输出结果是。
main
{inta[4][4]={{1,3,5},{2,4,6},{3,5,7}};
printf;
}
A.0650B.1470C.430D.输出值不定
定义的数组a为4行4列,且前三行三列元素已初始化,根据C语法规定,未初始化的元素值为0。
A
{intm[][3]={1,4,7,2,5,8,3,6,9};
inti,j,k=2;
for{printf;
}
A.B.C.D.
根据初始化列表中值的个数和第二维的长度,可求得第一维长度为3。
第一行的元素值依次为1,4,7;
第二行元素值依次为2,5,8;
第三行元素值依次为3,6,9。
循环执行三次,依次输出行标为2的三个元素,即第三行的3个元素。
{intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=0;
for
t=t+b[i][b[j][j]];
A.B.C.1D.
程序中,引用的b数组元素的行下标为循环变量i,列下标为数组元素b[j][j]。
外层循环共进行3次,对于每次外循环,内层循环只执行一次,所以变量t的值为元素b[0][b[0][0]]、b[1][b[1][1]]、b[2][b[2][2]]的和。
由于数组元素b[0][0]、b[1][1]、b[2][2]的值分别为0、1、2,所以t的值为:
0+0+1+2=3。
若有定义:
inta[2][4];
,则引用数组元素正确的是。
A.a[0][3]B.a[0][4]C.a[2][2]D.a[2][2+1]
引用二维数组元素时,行下标范围为0~行数-1,列下标范围为0~列数-1。
intaa[8];
,则不能代表数组元素aa[1]地址的是。
A.&
aa[0]+1B.&
aa[1]C.&
aa[0]++D.aa+1
&
aa[1]、&
aa[0]+1和aa+1都是数组元素aa[1]的地址。
由于&
aa[0]是地址值常量,不能进行自加、自减运算,所以选项C不能代表aa[1]地址。
下列程序执行后的输出结果是。
{inta[3][3],*p,i;
p=&
a[0][0];
forp[i]=i+1;
A.B.C.D.随机数
二维数组的物理存储结构为一维,即按行序顺序存储在连续存储空间中。
本题中,p为指向数组元素的指针变量,初始时,p指向a[0][0]。
通过指针p实现对对二维数组元素按行依次赋值。
a[1][2]即p[5],其值6。
下列程序的输出结果是。
{chara[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;
A.运行出错B.a[4]的地址C.D.
初始时,p指向a[5]。
由于单目运算符的结合方向为右结合,所以,*--p等价于*,即先执行--p,p指向a[4],再输出a[4]的值。
若有如下定义,则b的值是。
inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&
a[3],b=p[5];
A.B.C.D.
p指向a[3],即p=a+3;
b=p[5],即b=*。
因此,b=*=a[8]=9。
若二维数组y有m列,则排在y[i][j]前的元素个数为
A.j*m+iB.i*m+jC.i*m+j-1D.i*m+j+1
C语言中的二维数组按行存储。
行标为i的元素前共有i行元素,元素个数为i*m,
每行列标为j的元素前共有j个元素。
因此,y[i][j]前的元素个数为i*m+j。
chara[10],*b=a;
,则不能给数组a输入字符串”Thisisabook”的语句是。
A.getsB.scanfC.gets;
D.gets;
gets为字符串输入函数,调用该函数时需给出字符串的存储地址,以回车作为字符串输入的结束,并将回车符转换成为’\0’。
而scanf函数则以回车、空格或跳格作为串输入结束,因此scanf不能输入有空格的字符串。
以下程序执行后的输出结果是。
A.B.C.D.
#include“string.h”
{char*p[10]={“abc”,”aabdfg”,”dcdbe”,”abbd”,”cd”};
printf);
定义了一个含有10个元素的字符指针数组p,并对前5个元素初始化,其中p[4]指向字符串”cd”,其串长为2。
若定义一个名为s且初值为”123”的字符数组,则下列定义错误的是。
A.chars[]={’1’,’2’,’3’,’\0‘};
B.chars[]={“123”};
C.chars[]={“123\n”};
D.chars[4]={‘1’,’2’,’3’};
字符数组中所存字符中有’\0’时,字符数组才能作为字符串使用。
选项A是用字符常量对字符数组初始化,且最后一个元素的值为字符串结束标记,所以数组s中存放的就是字符串”123”;
选项D是用字符常量对部分元素初始化,根据C语言的规定,系统为第四个元素赋初值为空值,即’\0’,所以数组s中存放的也是字符串”123”。
选项B是直接使用字符串”123”对字符数组初始化;
选项C也是使用字符串初始化,但是字符串不是”123”,而是”123\n”,数组长度为5。
下列程序的功能是输入N个实数,然后依次输出前l个实数和、前2个实数和、?
、前N个实数和。
填写程序中缺少的语句。
#defineN10
{floatf[N],x=0.0;
inti;
scanf;
{①;
分析程序可知,第一个循环实现数据的输入,第二个循环实现求和并输出,程序中缺少的是计算前i个实数和并存入变量x的语句。
由于每次循环的x值都是在前一次循环的基础上作累加,即前i个实数和等于前i-1个实数和加上第i个实数f[i-1],
因此,①处应填写:
x=x+f[i-1];
。
x=x+f[i-l];
或x+=f[i-l];
下面程序的功能是检查一个N×
N矩阵是否对称。
请填空。
#defineN
{inta[N][N]={1,2,3,4,2,2,5,6,3,5,3,7,4,6,7,4};
inti,j,found=0;
if
{②;
break;
ifprintf;
elseprintf;
设置判断标志found,初始值为0。
对于主对角线以上每个元素,分别与对称元素比较,若不相等,则将found置为1并结束比较。
循环结束后,根据found的值确定是否对称。
①i=j+1②found=1
编写程序,从一整型数组a的第一个元素开始,每三个元素求和并将和值存入到另一数组中,最后输出所求的所有和值且每行输出5个值。
用于存储和值的数组设为b,所有元素都初始化为0。
从数组a的第一个元素开始,进行累加操作b[j]+=a[i],累加过程中,数组a的下标每自加3次,数组b的下标自加1次。
重复此操作,直到数组a的所有元素累加完为止。
输出时,每输出5个元素输出一次换行符”\n”。
#defineN0
#defineMN/3+1
{inta[N],i,j,b[M]={0};
forscanf;
{b[j]+=a[i];
if%3==0)j++;
ifj--;
{printf;
if%5==0)printf;
已知数组b中存放N个人的年龄,编写程序,统计各年龄段的人数并存入数
231页;
本节设计程序完成一个简单的学籍;
3管理系统的案例,学生的基本信息:
学号,姓名,年龄,c语言成绩。
假设班级有10名学生,能实现以下功能:
输入10名学生的基本信息。
输出10名学生的基本信息。
输入学号、姓名,输出该学生的基本信息。
按学号年龄对学生进行排序,按c语言成绩降序排序。
统计优良不及格。
1.数据结构分析
此案例是一位数组,二维数组的综合运用。
10名学生的学号,年龄,c语言成绩可分别用长度为10的一位数组sno,sage,cs存储;
10名学生的姓名可用元素长度为20个字符的一位数组,既字符型二维数组sname存储。
2算法分析
使用模块化设计思想,进入系统主界面时有六个主要模块,输入学生的基本信息,输出学生的信息,查找学生
的基本信息,排序,统计,退出。
学籍管理系统的机构功能框架,如图-2所示。
图-2学生管理系统的结构功能框架
5.5.奇数阶魔方矩阵
本节将实现技术矩魔方矩阵。
项目任务:
用数组实现N阶魔方矩阵。
所谓的N阶魔方矩阵是指把1~N*N自然数按一定的方法排列成N*N的矩阵,使得:
任意行、任意列以及两个对角线上的数之和都为65。
5阶魔方如下:
11815
27116
46102
10111
1119
本章习题:
1.设数组inta的元素全部不相等,求a中最大元素和次大元素。
2.求有10个整数的数组a中奇数的个数和平均值,以及偶数个数和平均值。
3.统计输入的一串字符中,大写字母A,B...Z各出现的次数。
4.数组a:
“1,7,9,11,13,15,17,19”;
数组b:
“2,4,6,8,10”两个数组合并为数组c;
按升序排列。
5.输入10个数,将10个整数按升序排列输出,并且奇数在前,偶数在后。
如果输入的10个数是:
101,则输出:
110。
6.定义一个有10个元素的一位数组count,从键盘上输入8个整数,将其按从大到小的顺序排列,并将排列后的数组输出。
7.求数组inta每行元素的平均值和平均最大的行号。
8.求A与B两矩阵的和矩阵C和差矩阵D。
9.有n个学生,每人考m门课。
找出成绩最高的学生的学号和课程号
找出有不及格课程的学生的学号及其各门课的全部成绩。
求全部学生全部课程的平均分。
C语言数组测试题
班级姓名得分
一、选择题:
1.若有说明:
inta[10];
,则对a数组元素的正确引用是。
A)a[10]B)a[3.5]C)aD)a[10-10]
D)
2.合法的数组说明语句是
A)inta[]=“string”;
B)inta[5]={0,1,2,3,4,5};
C)chara=”string”;
D)chara[]={0,1,2,3,4,5};
3.调用strlen的返回值为。
A)B)C)D)答案:
A)
4.若有以下语句,则正确的描述是。
charx[]=”12345”;
chary[]={‘1’,’2’,’3’,’4’,’5’,};
A)x数组和y数组的长度相同B)x数组长度大于y数组长度
C)x数组长度小于y数组长度D)x数组等价于y数组答案:
B)
二、填空题
1.输出100以内的素数。
#include
voidmain
{inti,m,k;
for{k=;
ifbreak;
sqrt
2
2.输入20个数,将其逆序输出。
{
inta[20],i;
for/*输入数字,假设是20个*/
{scanf;
for/*输出数字*/
a[i]
a[i]
3.在C语言中,一维数组的定义方式为:
类型说明符数组名。
[常量表达式]
4.下面程序的运行结果是。
charc[5]={‘a’,’b’,’\0’,’c’,’\0’};
ab
5.阅读程序,写出执行结果
#include
{charstr[30];
运行程序,输入FortranLanguage
Fortran
三、读程序,写结果
1.#include
{inti,x[3][3]={1,2,3,4,5,6,7,8,9};
输出结果:
753
2.执行下面程序时,如果输入“ABC”,则输出结果是#include
{charss[10]=“12345”;
gets;
strcat;
ABC6789
3.#include
{inti,j;
staticinta[10]={0,1,2,3,4,5,6,7,8,9};
for
{for
运行结果:
10
6
4.#include
staticintx[3][3];
if||)
x[i][j]=1;
else
x[i][j]=0;
运行结果:
101
010
四、编程题:
1.已知5个整数3,-5,8,2,9,求出最大值
inti,x[5]={,-5,8,2,9},max;
max=x[0];
if
max=x[i];
2.从键盘输入10个实数,按从大到小的顺序排列起来
#include“stdio.h”
inti,j,k;
floatb[10],t;
t=b[j];
b[j]=b[k];
b[k]=t;