选择题
1、以下各组选项中,均能正确定义二维整型数组a的选项是 C
A int a[2][3];
int a[][3];
int a[2][] = {{1},{0}};
B int a(2,3);
int a[2][3];
int a[][] = {{0},{0}};
C int a[2][3];
int a[][3] = {{0},{0}};
D int a[2][3]
int [2][];
2、在C语言中,二维数组中元素存放的顺序是 A
A 按行存放 B 按列存放 C 乱序存放 D 随机存放
3、以下选项中,不能正确赋值的是 C
A char s[] = "Wuhan";
B char s[30] = {"Wuhan"};
C char s[30]; s = "Wuhan";
D char s[30] = {'W','u','h','a','n'};
4、以下程序的运行结果是 D
#include <stdio.h>
#include <string.h>
int main()
{
char str[20] = "hello world";
printf("%d\n", strlen(str));
return 0;
}
A 20 B 15 C 12 D 11
5、判断字符串s1是否大于字符串s2,应当使用来实现 D
A. if ( s1>s2 )
B. if ( strcmp(s1,s2) )
C. if ( strcmp(s2,s1)>0 )
D. if ( strcmp(s1,s2)>0 )
6、下述对于数组的说法正确的是 A
A. 任何一维数组的名称都是该数组存储单元的开始地址,且其每个元素按照顺序占用连续存储空间
B. 一维数组的元素在引用时其下标大小没有限制
C. 任何一个一维数组的元素,可以根据内存情况按照其先后顺序以连续或非连续的方式占用存储空间
D. 二维数组的第一个元素是其下标为1的元素
7、引用数组元素时,数组下标的数据类型允许是 C
A 整型常量
B 整型表达式
C 整型常量、整型表达式都可以
D 任何类型
8、以下的说法正确的是 D
A 数组中元素的数据类型可以不一致
B 数组元素的个数可以不确定,允许随机变动
C 在声明数组时指定元素个数,使用时,若数组长度不够时,可以加长
D 定义了一个数组后,就确定了它所容纳的具有相同数据类型元素的个数
9、以下说明语句的正确理解是 B
float a[20] = {1,2,3,4};
A 将4 个初值依次赋给a[1]到a[4]
B 将4 个初值依次赋给a[0]到a[3]
C 将4 个初值依次赋给a[7]到a[10]
D 因为数组长度与初值的个数不相同,所以此语句不正确
10、若有说明: int a[ ][3] = {0,0};
则下列叙述正确的是 A
A 数组a的每个元素都可以得到初值0
B 二维数组a的第一维大小为4
C 数组a的列数为1
D 只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值
编程题
1、读入数组元素的值,并按要求计算和
【问题描述】编程实现读入5行4列矩阵中的前4行3列整数(如下图,数据可变),然后将各行之和、各列之和与所有数字之和求出,并对应填入表中的最后一列、最后一行以及矩阵的右下角位置并输出。
【输入形式】以行优先的顺序依次输入矩阵中的12个数
【输出形式】以方阵的形式输出整个矩阵的数据,格式控制为:printf("%4d",a[i][j]);
【样例输入】1 2 3 4 5 6 7 8 9 8 7 6
【样例输出】
1 2 3 6
4 5 6 15
7 8 9 24
8 7 6 21
20 22 24 66
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
int i,j;
int a[5][4];
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<4;i++)
{
a[i][3]=a[i][0]+a[i][1]+a[i][2];
}
for(j=0;j<4;j++)
{
a[4][j]=a[0][j]+a[1][j]+a[2][j]+a[3][j];
}
for(i=0;i<5;i++)
{
for(j=0;j<4;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
return 0;
}
2、在数组中插入一个数
【问题描述】有一个已经排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。已排好序的数组数据由程序固定给出,类型为整型
【输入形式】任意一个待插入的整数
【输出形式】插入数据后的数组
【样例输入】5
【样例输出】1,4,5,7,10,11,24,34,45,56,76
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
int a[11]={1,4,7,10,11,24,34,45,56,76};
int i,x,s=0;
scanf("%d",&x);
if(x>a[9])
{
a[10]=x;
}
else
{
for(i=0;i<=9;i++)
{
if(x>=a[i]&&x<=a[i+1])
{
s=i+1;
break;
}
}
for(i=9;i>=s;i--)
{
a[i+1]=a[i];
}
a[s]=x;
}
for(i=0;i<10;i++)
{
printf("%d,",a[i]);
}
printf("%d\n",a[10]);
return 0;
}
3、构建魔方阵并输出
【问题描述】查阅构建奇数魔方阵的排列规律,输出1~n2的自然数构成的魔方阵,所谓魔方阵即它的每一行、每一列和对角线之和均相等。
输出说明:以矩阵的形式输出魔方矩阵数据。以printf("%5d",a[i][j])的格式要求分开相邻数据。
【输入形式】一个整数n,1≤n≤15 (n为奇数)
【输出形式】以矩阵的形式输出魔方矩阵数据
【样例输入】3
【样例输出】
8 1 6
3 5 7
4 9 2
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
int i,n,x=0,y=0,x0,y0;
int a[100][100]={{0},{0}};
scanf("%d",&n);
y=(n+1)/2-1;
a[x][y]=1;
for(i=2;i<=n*n;i++)
{
x0=x;y0=y;
if(x==0&&y==n-1)
{
x=n-1;
y=0;
}
else if(x==0)
{
x=n-1;
y++;
}
else if(y==n-1)
{
y=0;
x--;
}
else
{
x--;
y++;
}
if(a[x][y]!=0)
{
x=x0+1;
y=y0;
}
a[x][y]=i;
}
for(x=0;x<n;x++)
{
for(y=0;y<n;y++)
{
printf("%5d",a[x][y]);
}
printf("\n");
}
return 0;
}
4、十进制转换为二进制
【问题描述】将输入的十进制正整数n转换为二进制数,并将转换结果输出,输出按高位在左,低位在右的顺序。
【输入形式】输入一个不大于65536*65536的正整数。
【输出形式】从第一个非零的高位开始输出,高位在左,低位在右。
【样例输入】65536
【样例输出】10000000000000000
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
int x=1,y,i=0,a[100];
scanf("%d",&x);
while(x!=0)
{
y=x%2;
a[i]=y;
i++;
x=x/2;
}
for(i=i-1;i>=0;i--)
{
printf("%d",a[i]);
}
printf("\n");
return 0;
}