第1题:
第2题:
设下三角矩阵A:
如果以行序为主序将A的非零元素存储在一维数组B[n(n+1)/2]中,那么A的第i行第j列的非零元素aij(i≥j)在数组B中的下标为______。
第3题:
阅读以下说明和C语言程序,将应填入(n)处的字句写在对应栏内。
【说明】
魔方阵,又叫幻方,在我国古代称为“纵横图”。由1…N2共N2个自然数构成每行、每列及两对角线上各数之和都相等的N×N方阵,这样的方阵就叫做N阶魔方阵。顾名思义,奇阶魔方阵就是N为奇数的幻方。
奇数阶魔方阵的生成方法如下:
(1)第一个位置在第一行正中。
(2)新位置应当处于最近一个插入位置右上方,但如果右上方位置已超出方阵上边界,则新位置取应选列的最下一个位置;如果超出右边界,则新位置取应选行的最左一个位置。
(3)若最近一个插入元素为N的整数倍,则选下面一行同列上的位置为新位置。本题要求输入一个数据n,然后打印由自然数1到n2的自然数构成的魔方阵(n为奇数)。例如,当n=3时,魔方阵为:
8 1 6
3 5 7
4 9 2
了解其生成方法后,就可以根据此方法来写出程序了。首先设置int变量i,j,m, n。其中i标记魔方阵的行;j标记魔方阵的列;n表示魔方阵的维数,通过输入得到;通过m递加得到插入的数据。数组a[MAX][MAX]用于存放魔方阵元素。这里预定义了 MAX的大小,没有采用动态分配,在此设置为15,即最大求得15×15阶魔方阵。
【程序】
include <stdio.h>
define MAX 15
void main()
{
int n;
int m=1;
int i,j;
int a[MAX][MAX];
printf("Please input the rank of matrix:");
scanf("%d",&n);
i=0;
(1)
while((2))
a[i][j]=m;
m++;
i--;
j++;
if((m-1)%n==0 && m>1)
{
(3)
j=j-1;
}
if(j>(n-1)) //超出上界
(4)
if(j>(n-1))
(5)
}
for(i=0;i<n;i++) //输出魔方阵
for(j=0;j<n;j++)
{
if(a[i][j]/10==0)
printf("%d ",a[i][j]); //对程序无影响,只是使输出的数每一列对齐
else
printf("%d ",a[i][j]);
if(j==(n-1))
printf("\n");
}
}
第4题:
已知有一维数组A(0..m*n-1],若要对应为m行、n列的矩阵,则下面的对应关系(4)可将元素A[k](0≤k<m*n)表示成矩阵的第i行、第j列的元素(0≤i<m,0≤j<n)。
A.i=k/n,j=k%m
B.i=k/m,j=K%m
C.i=k/n,j=k%n
D.i=k/m,j=k%n
第5题:
下面程序的功能是 : 将 N 行 N 列二维数组中每一行的元素进行排序 , 第 0 行从小到大排序 , 第 1 行从大到小排序,第 2 行从小到大排序,第 3 行从大到小排序,例如:
define N 4
void sort(int a[][N])
{ int i, j, k, t;
for (i=0; i<N;i++)
for (j=0; j<N-1:j++)
for (k= 【 13 】 ; k<N;K++)
/* 判断行下标是否为偶数来确定按升序或降序来排序 */
if ( 【 14 】 ? a[i][j]<a[i][k]); a[i][j]>a[i][k])
{ t = a[i][j];
a[i][j]=a[i][k];
a[i][k] = t;
}
}
void outarr(int a[N][N])
{ …… }
main()
{ int aa[N][N]={{2,3,4,1},{8,6,5,7},{11,12,10,9},{15,14,16,13}};
outarr(aa); /* 以矩阵的形式输出二维数组 */
sort(aa);
outarr(aa);
}
第6题:
第7题:
第8题:
第9题:
第10题:
第11题:
第12题:
第13题:
阅读下列函数说明和C函数,回答问题1~2,将解答填入栏内。
[说明]
若矩阵Am×n中存在某个元素aij满足:aij…是第i行中最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。下面程序的功能是输出A中所有鞍点,其中参数A使用二维数组表示,m和n分别是矩阵A的行列数。
[程序]
void saddle (int A[ ] [ ], int m, int n)
{ int i,j,min;
for (i=0;i <m;i + + )
{ min: (1);
for (j=1; j<n; j+ +)
if(A[i][j]<min) (2);
for (j=0; j<n; j+ +)
if ((3))
{ p=0;
while (p<m&&(4))p+ +;
if (p > = m)printf ("%d,%d,%d\n",i,j,min);
}
}
}
[问题1] 将函数代码中的(1)~(4)处补充完整
[问题2]在上述代码的执行过程中,若A为矩阵,则调用saddle(A,3,3)后输出是(5)。
第14题:
将一个n阶三对角矩阵A的三条对角线上的元素按行压缩存放于一个一维数组B中, A[0][0]存放于B[0]中。对于任意给定数组元素A[i][j],它应是数组A中第______行的元素。
第15题:
阅读以下说明和C语言程序,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
魔方阵,又叫幻方,在我国古代称为"纵横图".由1…N2共N2个自然数构成每行、每列及两对角线上各数之和都相等的N×N方阵,这样的方阵就叫做N阶魔方阵。顾名思义,奇阶魔方阵就是N为奇数的幻方。
奇数阶魔方阵的生成方法如下:
(1)第一个位置在第一行正中。
(2)新位置应当处于最近一个插入位置右上方,但如果右上方位置已超出方阵上边界,则新位置取应选列的最下一个位置;如果超出右边界,则新位置取应选行的最左一个位置。
(3)若最近一个插入元素为N的整数倍,则选下面一行同列上的位置为新位置。本题要求输入一个数据n,然后打印由自然数1到n2的自然数构成的魔方阵(n为奇数)。例如,当n=3时,魔方阵为:
816
357
492
了解其生成方法后,就可以根据此方法来写出程序了。首先设置int变量i,j,m,n.其中i标记魔方阵的行;j标记魔方阵的列;n表示魔方阵的维数,通过输入得到;通过m递加得到插入的数据。数组a[MAX][MAX]用于存放魔方阵元素。这里预定义了MAX的大小,没有采用动态分配,在此设置为15,即最大求得15×15阶魔方阵。
【程序】
#include
#defineMAX15
voidmain()
{
intn;
intm=1;
inti,j;
inta[MAX][MAX];
printf("Pleaseinputtherankofmatrix:");
scanf("%d",&n);
i=0;
(1)
while((2))
{
a[i][j]=m;
m++;
i--;
j++;
if((m-1)%n==0&&m>1)
{
(3)
j=j-1;
}
if(i<0)//超出上界
(4)
if(j>(n-1))//超出右边界
(5)
}
for(i=0;i
for(j=0;j
{
if(a[i][j]/10==0)
printf("%d",a[i][j]);//对程序无影响,只是使输出的数每一列对齐
else
printf("%d",a[i][j]);
if(j==(n-1))
printf("\n");
}
}
答案:(1)j=(n+1)/2-1;(2)m<=n*n(3)i=i+2;(4)i=i+n;(5)j=j-n;
解析:
本题考查我们对魔方阵的理解及用C语言的实现。
题目给出了魔方阵的原理和生成过程,现在要我们往15×15的二维数组中添加元素,使其呈现魔方阵的结构。程序中的变量i和j确定增加的元素在数组中的位置,每次增加的元素在原来的基础上加1,只是位置按魔方阵的原理存放。
下面来看代码,在第(1)空处,还没有进入增加元素的循环中,应该是赋初值阶段,而用来确定元素在数组中位置的变量i已有值,j没有,再根据魔方阵的生成过程的第一条(第一个位置在第一行正中)可知,此空的答案应该是j=(n+1)/2-1.
第(2)空处是一个循环条件,结合全过程来看,我们知道这个循环是不停往数组中增加元素,直到添加完n×n个元素。因此,此处是判断要添加的元素应该小于n×n.答案为m<=n*n.
第(3)空前面是个条件选择语句,其条件是判断最近一个插入元素m是否可以被n整除。根据魔方阵的生成过程的第三条(若最近一个插入元素为N的整倍数,则选下面一行同列上的位置为新位置),即i=i+1,j不变。但由于在插入一个元素后,变量i和j会分别自动减1和加1.因此,答案为i=i+2.
第(4)空前面也是个条件选择语句,其条件是判断是否超出上界,根据魔方阵的生成过程的第二条可以知道,如右上方位置已超出方阵上边界,则新位置取应选列的最下一个位置,因此,此空应该填i=i+n.
第(5)空前面是个条件选择语句,其条件是判断是否超出右边界,根据魔方阵的生成过程的第二条可以知道,如超出右边界则新位置取应选行的最左一个位置。因此,此空应该填j=j-n.
第16题:
在窗体上画2个命令按钮,名称分别为Command1、Command2,然后编写下列事件过程。 Const n=5.m=4 Dim a(m,n) Private Sub+Command1 Click( ) k=1 For i=1 To m For j=1 To n a(i,j)=k k=k+1 Next j Next i End Sub Private Sub Command2 Click( ) summ=0 For i=1 To m For j=1 To n If i=1 Or i=m Then summ=summ+a(i,j) Else If j=1 Or j=n Then summ=summ+a(i,j) End If End If Next j Next i Print summ End Sub 过程Command1_Click( )的作用是在二维数组a中存放1个m行n列的矩阵;过程Command2 Click( )的作用是( )。
A.计算矩阵外围一圈元素的累加和
B.计算矩阵除外围一圈以外的所有元素的累加和
C.计算矩阵第1列和最后一列元素的累加和
D.计算矩阵第1行和最后一行元素的累加和
第17题:
第18题:
第19题:
第20题:
第21题:
第22题:
第23题:
给定一个m×n的数值矩阵A,如果矩阵A中存在这样的一个元素A[i][j]满足条件:A[i][j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。编写一个方法计算出m*n的矩阵A的所有马鞍点。