在定义int n[5][6];后,若认为n[0][0]为第1个元素,则第10个元素是________。
A.n[2][5]
B.n[2][4]
C.n[1][3]
D.n[1][4]
第1题:
A、n-i
B、0
C、n-i-1
D、i
第2题:
阅读下列函数说明和C代码,将应填入(n)处的字句写在对应栏内。
【说明】
函数void rcr(int a[],int n,int k)的功能是:将数组a中的元素s[0]~9[n-1]循环向右平移k个位置。
为了达到总移动次数不超过n的要求,每个元素都必须只经过一次移动到达目标位置。在函数rcr中用如下算法实现:首先备份a[0]的值,然后计算应移动到a[0]的元素的下标 p,并将a[P]的值移至a[0];接着计算应移动到a[p]的元素的下标q,并将a[q]的值移至 a[p];依次类推,直到将a[0]的备份值移到正确位置。
若此时移动到位的元素个数已经为n,则结束;否则,再备份a[1]的值,然后计算应移动到a[1]的元素的下标p,并将a[p]的值移至9[1];接着计算应移动到a[p]的元素的下标q,并将a[q]的值移至a[p];依次类推,直到将a[1]的备份值移到正确位置。
若此时移动到位的元素个数已经为n,则结束;否则,从a[2]开始,重复上述过程,直至将所有的元素都移动到目标位置时为止。
例如,数组a中的6个元素如图1(a)所示,循环向右平移两个位置后元素的排列情况如图1(b)所示。
void rcr( int a[] ,int n,int k)
{ int i,j,t,temp,count;
count =0; /*记录移动元素的次数*/
k=k%n;
if((1)){ /*若k是n的倍数,则元素无须移动;否则,每个元素都要移动*/
i=0
while(count<n) {
j=i;t=i;
temp =a[1]; /*备份a[i]的值*/
/*移动相关元素,直到计算出a[i]应移动到的目标位置*/
while((j=(2))! =i){
a[t]=a[j];
t=(3);
count++;
}
(4)= temp;count ++;
(5);
}
}
}
第3题:
阅读下列函数说明和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)。
第4题:
函数swap(arr,n)可完成对arr数组从第1个元素到第n个元素两两交换。在运行调用函数中的语句后,a[0]和a[1]的值分别为【 】。
a[0]=1;a[1]=2;swap(a,2);
第5题:
在长度为n的顺序表中,删除第i个元素(0<i<n+1)时,需向前移动的元素个数为( )。
A.n-i
B.n-i-1
C.n-i+l
D.i
第6题:
阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
函数void rcr(int a[],int n,int k)的功能是:将数组a中的元素a[0]~a[n-1]循环向右平移k个位置。
为了达到总移动次数不超过n的要求,每个元素都必须只经过一次移动到达目标位置。在函数rcr中用如下算法实现:首先备份a[0]的值,然后计算应移动到a[0]的元素的下标p,并将a[p]的值移至a[0];接着计算应移动到a[p]的元素的下标q,并将a[q]的值移至a[p];依次类推,直到将a[0]的备份值移到正确位置。
若此时移动到位的元素个数已经为n,则结束;否则,再备份a[1]的值,然后计算应移动到a[1]的元素的下标p,并将a[p]的值移至a[1];接着计算应移动到a[p]的元素的下标q,并将a[q]的值移至a[p];依次类推,直到将a[1]的备份值移到正确位置。
若此时移动到位的元素个数已经为n,则结束;否则,从a[2]开始,重复上述过程,直至将所有的元素都移动到目标位置时为止。
例如,数组a中的6个元素如图1(a)所示,循环向右平移两个位置后元素的排列情况如图1(b)所示。
【函数】
void rcr(int a[],int n,int k)
{int i,j,t,temp,count;
count=0;/*记录移动元素的次数*/
k=k%n;
if( (1) ){/*若k是n的倍数,则元素无须移动;否则,每个元素都要移动*/
i=0;
while(count<n){
j=i;t=i;
temp=a[i];/*备份a[i]的值*/
/*移动相关元素,直到计算出a[i]应移动到的目标位置*/
while((j= (2) )!=i){
a[t]=a[j];
t= (3) ;
count++;
}
(4) =temp;count++;
(5) ;
}
}
}
第7题:
试题二(共15分)
阅读以下说明和C函数,填充函数中的空缺,将解答填入答题纸的对应栏内。
【说明】
如果矩阵A中的元素A[i,j]满足条件:A[i,j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。
一个矩阵可能存在多个马鞍点,也可能不存在马鞍点。下面的函数求解并输出一个矩阵中的所有马鞍点,最后返回该矩阵中马鞍点的个数。
【C函数】
Int findSaddle(int a[][N],int M),
{ /*a表示M行N列矩阵,N是宏定义符号常量量*/
int row,column,i,k;
int minElem;
int count=0;/*count用于记录矩阵中马鞍点的个数*/
for( row = 0;row< (1) ;row++) {
/*minElem用于表示第row行的最小元素值,其初值设为该行第0列的元素值*/
(2) ;
for( column = 1;column< (3) ;column++)
if( minElem> a[row][column]) {
minElem = a[row][column];
}
for(k=0;k<N;k++)
if(a[row][k]==minElem){
/术对第row行的每个最小元素,判断其是否为所在列的最大元素*/
for(i=0;i <M;i++)
if( (4) >minElem) break;
if(i>=(5) ){
printf("(%d,%d):%d\n",row,k,minElem);/*输出马鞍点*/
count++;
}/*if*/
}/*if*/
}/*for*/
return count,
}/*findSaddle*/
(1)M
(2) minElem= a[row][0]或其等价形式
(3)N
(4)a[i][k]或其等价形式
(5)M
第8题:
第9题:
第10题:
在搜索解图的过程中,若解图的耗散值记为k(n,N),则若n是N的一个元素,则k(n,N)=()
第11题:
在一个长度为n的顺序表中向第i个元素(0<i<n+l )之前插入一个新元素时,需向后移动()个元素。
第12题:
int N = 6,a[N];
int a[2*3]={0};
#define N 3
int a[N+N];
int a[]={1,2,3,4,5,6};
第13题:
A、n-i
B、n-i+l
C、n-i-1
D、i
第14题:
在定义inta[5][6];后,数组a中的第10个元素是()。(设a[0][0]为第一个元素)
A.a[2][5]
B.a[2][4]
C.a[1][3]
D.a[1][5]
第15题:
函数YangHui的功能是把杨辉三角形的数据赋给二位数组的下半三角,形式如下:
其构成规律是:
①第0列元素和主对角线元素均为1。
②其余元素为其左上方和正上方元素值之和。
③数据的个数每行递增1。
请将程序补充完整。
define N 6
void YangHui(int x[N][N])
{
int i,j;
x[0] [0] =1;
for(i = 1;i<N;i++)
{
x[i][0] =【 】= 1;
for(j=1;j<i;j++)
x[i][j]=【 】;
}
}
第16题:
已知有一维数组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
第17题:
在一个长度为n的顺序表中删除第i个元素(0≤i≤n-1)时,需要从前向后依次前移(33)个元素。
A.n-i
B.n-i+1
C.n-i-1
D.i
第18题:
阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。
[说明]
函数int psort(int a[],int n)实现将含n个整数的数组a[]的不同元素按从小到大顺序存于数组a[]中。实现方法是从未确定的元素列中找到最小元素并将a[]的第i最小元素交换至a[i]位置。如该最小元素比已确定的最后一个最小元素大,则将它接在已确定的元素序列的后面;否则,忽视该元素。
[C函数]
int psort(int a[],int n)
{int i,J,k,P;
for(i=0,k=0;i<(1);i++){
for(j=i+1, (2) ;j<n; j++)
if(a[p]>a[j])
p=j;
if(p!=i){
t=a[p];
a[p]=a[i];
a[i]=t;
}
if( (3) ) k++;
else if( (4) <a[i])
(5)=a[i];
}
return k;
}
int a[]={5,7,5,6,4,3,4,6,7};
main()
{int k,n;
for(k=0;k<(Sizeof a)/Sizeof(int);k++)
printf("%5d",a[k]);
printf ("\n\n");
n=psort(a,(sizeof(a))/sizeof(int));
for(k=0;k<n;k++)
printf("%5d",a[k]);
printf("\n\n");
}
第19题:
第20题:
第21题:
第22题:
在一个长度为n的顺序表中删除第i个元素(0<=i<=n)时,需向前移动()个元素。
第23题:
若对n个元素进行直接插入排序,则进行第i趟排序时,为寻找插入位置最多需要进行()次元素的比较,假定第0号元素放有待查的关键字。
第24题:
1
i-1
i+1