R[i]=(n)MOD(m)表示将两个值的商代入寄存器i。

题目

R[i]=(n)MOD(m)表示将两个值的商代入寄存器i。

如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

函数fun的功能是:根据以下公式求p的值,结果由函数值返回。m与n为两个正数且要求m>n。

例如:m=12,n=8时,运行结果应该是495.000000。请在题目的空白处填写适当的程序语句,将该程序补充完整。

#include

#include

float fun (int m, int n)

{ int i;

double p=1.0;

for(i=1;i<=m;i++)( );

for(i=1;i<=n;i++)( );

for(i=1;i<=m-n;i++)p=p/i;

return p;}

main ()

{ clrscr();

printf ("p=%f\n",fun (12,8));}


正确答案:
p=p*i;p=p/i

第2题:

阅读下列函数说明和C代码,将应填入(n)处的字句写在对应栏内。

【说明2.1】

以下C语言函数用二分插入法实现对整型数组a中n个数的排序功能。

【函数2.1】

void fun1 (int a[])

{ int i,j,k,r,x,m;

for(i=2;i<=n;i++)

{ (1);

k=1;r=i-1;

while(k<=r)

{ m=(k+r)/2;

if(x<a[m])r=m-1;

else (2);

}

for(j=i-1;j>=k;j--)

a[j+l]=a[j];

(3);

}

}

【说明2.2】

以下程序可以把从键盘上输入的十进制数(long型)以二~十六进制形式输出。

【程序2.2】

include<stdio.h>

main()

{ charb[16]={'0','l','2','3 ,4,'5','6','7','8','9','A','B','C','D','E','F'};

int c[64],d,i=0,base;

long n;

printf("enter a number:\n");

scanf("%1d",&n);

printf("enter new basc:\n");

scanf("%d", &base);

do

{ c[i]=(4);

i++; n=n/base;

} while(n!=0);

printf("transmite new base:\n");

for(--i;i>=0;--i)

{ d=c[i];

printf("%c",(5));

}

}


正确答案:(1)x=a[i] (2)a[k]=x (3)k=m+1 (4) n% base (5)b[d]
(1)x=a[i] (2)a[k]=x (3)k=m+1 (4) n% base (5)b[d] 解析:函数3.1的思想是依次将数组中的每一个元素插入到有序段中,使有序段的长度不断地扩大。对于待插入元素,先用二分查找法找出应该插入的位置。然后将元素插入。对数组来说,就是将该位置以后的元素依次后移,然后将待插入元素放到移出来的空位中。
程序3.2用的思想是除base(base在二~十六进制之间)取余法求得相应进制数,然后再转换输出。

第3题:

●试题二

阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明2.1】

以下C语言函数用二分插入法实现对整型数组a中n个数的排序功能。

【函数2.1】

void fun1(int a[])

{int i,j,k,r,x,m;

for(i=2;i<=n;i++)

{ (1) ;

k=1;r=i-1;

while(k<=r)

{m=(k+r)/2;

if(x<a[m])r=m-1;

else (2) ;

}

for(j=i-1;j>=k;j--)

a[j+1]=a[j];

(3) ;

}

}

【说明2.2】

以下程序可以把从键盘上输入的十进制数(1ong型)以二~十六进制形式输出。

【程序2.2】

#include<stdio.h>

main()

{char b[16]={′0′,′1′,′2′,′3′,′4′,′5′,′6′,′7′,′8′,′9′,′A′,′B′,′C′,′D′,′E′,′F′};

int c[64],d,i=0,base;

long n;

printf(″enter a number:′n″);

scanf(″%1d″,&n);

printf(″enter new basc:kn″);

scanf(″%d″,&base);

do

{c[i]= (4) ;

i++;n=n/base;

}while(n!=0);

printf("transmite new base:\n");

for(--i;i>=0;--i)

{ d=c[i];

printf("%c", (5) );

}

}


正确答案:

●试题二

【答案】(1)x=ai(2)ak=x(3)k=m+1(4)nbase(5)bd

【解析】函数31的思想是依次将数组中的每一个元素插入到有序段中,使有序段的长度不断地扩大。对于待插入元素,先用二分查找法找出应该插入的位置。然后将元素插入。对数组来说,就是将该位置以后的元素依次后移,然后将待插入元素放到移出来的空位中。

程序32用的思想是除base(base在二~十六进制之间)取余法求得相应进制数,然后再转换输出。

 

第4题:

下列程序执行后,n的值为 n=0 For I=1 To 200 If I Mod 4 = 0 Then n = n+1 Next I

A.5050

B.50

C.51

D.33


正确答案:B
解析:本题考查考生对For循环的理解。根据题意,在Forl的200次循环中,每遇到一次1为4的倍数,变量n就加1。所以本题答案为B,在1到200之间,有50个数是4的倍数。

第5题:

阅读以下说明,将应填入(n)处的字句写在答卷纸的对应栏内。

【说明】

下面的程序为堆排序程序,其中函数adjust(i,n)是把以R[i](1≤i≤┕i/2┙)为根的二叉树调整成堆的函数,假定R[i]的左、右子树已经是堆,程序中的,是在主函数中说明的结构数组,它含有要排序的n个记录。

【程序】

Void adjust(i,n)

Int i,n;

{

iht k,j;

element extr;

extr=r[i];

k=i;

j=2*i;

while (j<=n )

{if ((j<n) && (r[j].key<r[j+1].key))

(1);

if (extr. key<r[j].key)

{

r[k]=r[j];

k=j;

(2);

}

else

(3);

}

r[k]=extr;

}

/*让i从┗i/2┛逐步减到1, 反复调用函数adjust, 便完成建立初始堆的过程。*/

void heapsort (r,n)

list r;

int n;

{

int i,1;

element extr;

for (i=n/2;i>=1;- -i)

(4); /* 建立初始堆*/

for (k--n;k>=2;k- -)

{

extr=r[1];

r[1]=r[k];

r[k]=extr;

(5);

}

}


正确答案:(1)j++ (2)j*=2或j=k*2 (3)j=n+1或break (4)adjust(in) (5)adjust(1k-1)
(1)j++ (2)j*=2或j=k*2 (3)j=n+1或break (4)adjust(i,n) (5)adjust(1,k-1) 解析:函数adjust(i,n)是把以R[i](1≤i≤┗i/2┛)为根的二叉树调整成堆的函数,假定R[i]的左、右子树已经是堆,程序中的r是在主函数中说明的结构数组,它含有要排序的n个记录。
Void adjust(i,n)
Int i,n;
{
int k,j;
element extr;
extr=r[i];
k=i;
j=2*i;
while(j=n)
{if((jn)&&(r[j].keyr[j+ 1].key))
j++;
if(extr.keyr[j].key)
{
r[k]=r[j];
k=j;
j*=2;
}
else
j=n+1;
}
r[k]=extr;
}
/* 让i从┗i/2 ┛逐步减到1, 反复调用函数adjust, 便完成建立初始堆的过程。堆排序程序heapsort 如下*/
void heapsort(r,n)
list r;
int n;
{
int i,l;
element extr;
for (i=n/2;i>= 1 ;--i)
adjust(i,n); /*建立初始堆*/
for(k=n;k>=2;k--)
{
extr=r[1];
r[1]=r[k];
r[k]=extr;
adjust(1,k-1);
}
}
函数heapsoff的第一个for循环建立初始化。没待排序的n个记录组成—棵深度为h的完全二叉树,因此有2h-1n≤2h+1-1,即2h≤n2h+1。完全二叉树的第i层(设根结点的层次为0)上最多有2i个结点,对每个非叶结点,都要调用过程adjust,同时可能移动结点(向下移动),第i层上的结点可能要移动的最大距离为h-i,若设向下移动一层花费的时间为c,则第i层2i个结点调整的时间最多为c*(h-i)*2i建立初始堆的全部时间应是:
令j=h-1,则i=h-j,所以有:
对第二个for循环,调用adjust函数n-1次,每次总是由根向下调整,调整的最大距离为log2n(实际上,调整的距离是逐渐变小的),所以总的时间不多于c*(n-1)log2n=O(log2n).堆排序总的时间为:
O(n)+O(nlog2n)=O(max(n,n log2n))=O(n log2n)
算法需要的存储空间是存储n个记录的数组以及少量暂存单元。
堆排序算法是不稳定的。

第6题:

阅读下列C++程序和程序说明, 将应填入(n)处的字句写在答题纸的对应栏内。

【说明】构造最优二叉查找树。

具有n个结点的有序序列a1, a2, …, an存在于数组元素a[1]、a[2], …, a[n]之中, a[0]未被使用。结点a1, a2, …, an-1, an的查找成功的概率p1, p2, …, pn-1, pn存在于数组元素 p[1]、p[2], …, p[n—1]、p[n]之中, p[0]未用。另外, 查找失败的概率q0, q1, …, qn-1, qn存在于数组元素q[0]、p[1], …, q[n-1]、q[n]之中。算法计算的序列ai+1, ai+2,…, aj-1, aj的最优二叉查找树Tij的代价Cij存在于数组元素c[i][j]之中, Tij的根结点的序号rij存在于r[i][j]之中, 它的权值存在于w[i][j]之中。为了便于内存的动态分配, 统统使用一维数组取代二维数组。

const float MAXNUM=99999. 0; //尽可能大的浮点数

template<(1)>

void OPtimal_Binary_Search_Tree(float p[], float q[], Type a[], int n) {

float *C, *W;

c=(2);

w=(3);

int *r;

r=new int[(n+1)*(n+1)];

for(i=0; i<=n; i++)

{ c[i*(n+1)+i]=0. 0; // 即:c[i][i]=0.0, 用一维数组表示

w[i*(n+1)+i]=q[i]; // 即:w[i][i]=q[i], 用一维数组表示

}

int i, j, k, m, length; // m表示根结点的下标或序号, 范围为0~n

float minimum;

for(length=1; length<=n; length++) //处理的序列长度由1到n

for(i=0; i<=n-length; i++){ //i为二叉查找树Tij的起始序号

j=i + length; //j为二叉查找树Tij的终止序号。如:处理序列a1a2a3时,

//相应的二叉查找树为T03, i=0, 而j=3

w[i*(n+1)+j]=(4);

minimum =MAXMUM;

for(k=i+1; k<=j; k++) //考察以ai+1、ai+2, …, ai为根的情况

if((5)<minimum)

{ minimum=c[i*(n+1)+k-1]+c[k*(n+1)+j];m=k; }

c[i*(n+1)+j]=w[i*(n+1)+j]+c[i*(n+1)+m-1]+c[m*(n+1)+j];

r[i*(n+1)+j]=m; // r[i][j]=m

}

} //构造好的最优二叉查找树的根结点的序号在r[0][n]中


正确答案:(1) class Type (2) new float[(n+1)*(n+1)] (3) new float[(n+1)*(n+1)] (4) w[i*(n+1)+j-1]+p[j]+q[j] (5) c[i*(n+1)+k-1]+c[k*(n+1)+j]
(1) class Type (2) new float[(n+1)*(n+1)] (3) new float[(n+1)*(n+1)] (4) w[i*(n+1)+j-1]+p[j]+q[j] (5) c[i*(n+1)+k-1]+c[k*(n+1)+j] 解析:(1) class Type
定义最优二叉查找树生成函数模板Optimal_Binary_Search_Tree。
(2) new float[(n+1)*(n+1)]
按数组a长度n+1申请动态二维数组c,存放最优二叉查找树Tij的代价Cij
(3) new float[(n+1)*(n+1)]
按数组a长度n+1申请动态二维数组w,存放最优二叉查找树Tij的权值Wij
(4) w[i*(n+1)+j-1]+p[j]+q[j]
由Wij-1递推计算Wij
(5) c[i*(n+1)+k-1]+c[k*(n+1)+j]
找Cik+Ckj(k=i+1,…,j)的最小值的m=k,求Cij。按照一般二维数组的写法是: c[i][j]=w[i][j]+c[i][m-1]+c[m][j]。

第7题:

阅读以下说明和C语言程序,将应填入(n)处的字句写在对应栏内。

【说明】

计算n的合数。一个整数n可以有多种划分,使其划分的一列整数之和为n。例如,整数5的划分为:

5

4 1

3 2

3 1 1

2 2 1

2 1 1 1

1 1 1 1 1

共有7种划分。这种划分的程序如下所示。

【程序】

include <stdio.h>

int n[1000],m,k;

void output sum()

{

int j;

for(j=0;n[j]!=0;j++)

printf("%d\t",n[j]);

printf("\n");

}

void sum(int i)

if(m-n[i]<n[i])

{ m=m-n[i];

(1)

i++;

n[i+1]=0;

}

else

{

(2)

m-=n[i];

i++;

}

if(m!=n[i])

sum(i);

else

output_sum();

if(n[i]>1)

{

n[i]--;

(3)

}

else

{

while((n[i]==1)&&(i>O))

{

i--;

(4)

}

if(i!=0)

{

(5)

sum(i);

}

}

}

void main()

{

int i;

scanf("%d",&n[0]);

m=k=n[0];

for(i=1;i<=k;i++)

n[i]=0;

while(n[0]!=1)

{

n[0]--;

i=0;

sum(0);

m=k;

}

}


正确答案:(1)n[i+1]=m; (2)n[i+1]=n[i]; (3)sum(i); (4) m+=n[i]; (5)n[i]--;
(1)n[i+1]=m; (2)n[i+1]=n[i]; (3)sum(i); (4) m+=n[i]; (5)n[i]--; 解析:本题考查C语言中计算n合数方法的实现。
题目要求计算n的合数,我们首先来了解一下什么是n的合数。在正整数n的所有不同的划分中,将最大加数n1不大于m的划分个数记作q(n,m)。可以建立q(n,m)的如下递推关系。
(1)q(n,1)=1,n1
当最大数n1不大于1时,任何正整数只有一种划分形式,就是全1。
(2)q(n,m)=q(n,n),mn
最大加数n1实际上不能大于n。因此,q(1,m)=1。
(3)q(n,n)=1+q(n,n-1)
正整数n的划分由n1=n的划分和n1≤n-1的划分组成。
(4)q(n,m)=q(n,m-1)+q(n-m,m),n>m>1
正整数n的最大加数n1不大于m的划分由n1=m的划分和n1≤m-1的划分组成。要想求出所有解,只有递归到最底层即全为1为止。
知道了上述特性,下面我们来看代码。在代码中首先声明一个数组和两个全局变量 k,m。结合程序可以看出,其中数组n[i]中存放的是当前划分的最大加数,而m中存放的是当前被划分的数。程序代码中有三个函数,一个是主函数、一个output_sum()函数和一个sum()函数,函数output_sum()的功能很简单,就是输出一次划分结果,在sum()函数中被调用。
经过分析不难发现,函数sum()的作用是实现整数的划分。在函数体中,首先是一个条件判断语句,其作用是判断当前被划分的数m是否小于当前最大加数的两倍,如果条件成立,说明数被划分为两个数后,其最大加数大于另一个数,而另一个数应该存放在数组中。此时执行语句m=m-n[i]来求出另一个数,接下来应该是保存这个数到数组中的下个位置,第(1)空就用来完成这个任务,因此,答案为n[i+1]=m。
第(2)空所在的位置是条件不成立的情况下运行的语句,条件不成立,说明数被划分为两个数后,其最大加数小于另一个数,数可以有更大的最大加数,因此,将当前的最大加数保存到数组中的下个位置,此空答案为n[i+1]=n[i]。
第(3)空也在一个条件选择语句下面,此条件语句用于判断当前最大加数是否大于1,如果大于1,则需要接着划分,因此要调用函数sum(),其参数是i,所以此空答案为sum(i)。
第(4)空是条件不成立即当前最大加数为1的情况下执行的语句,当最大加数为1时,说明递归到了最底层,此时,递归应该往回走了,这需要还原当前最大划分数m(为这个数的其他划分做准备),因此,这个空的答案为m+=n[i]。
第(5)空是在条件i!=0为真的情况下执行的语句,如果条件为真,说明递归还没有回到最上层,应该求当前被划分数在当前最大加数变小后的其他划分情况,因此,此空答案为n[i]--。

第8题:

【程序说明】 计算1~30之间能够被3整除的奇数的阶乘和。

【程序】

** 主程序

SET TALK OFF

S=0

FOR I=1 TO 30 STEP 2

IF (4)

(5)

S=S+N

ENDIF

ENDFOR

?“1到30之间能被3整除的奇数阶乘和为:”+ (6)

SET TALK ON

RETURN

** 过程 P1.PRG

PARAMETERS M

(7)

N=1

FOR J=1 TO M

N=N*J

ENDFOR

(8)

(4)

A.MOD(I,3)>=0

B.MOD(I,3)>0

C.MOD(I,3)<>0

D.MOD(I,3)=0


正确答案:D
解析:由题意知,需找出1~30之间能被3整除的奇数。所以用MOD(I,3)=0。

第9题:

急求方法,如何用C语言实现左边排序成右边的???

挨个儿[i g er]吖[]
挨户[i h]阿[]
挨家[i ji]阿鼻地狱[ b d y]
挨肩儿[i jin er]阿昌族[ chng z]
挨近[i jn]阿斗[ du]
挨门[i mn]阿尔法粒子[ r f l z]
唉[i]阿尔法射线[ r f sh xin]
唉声叹气[i shng tn q]阿飞[ fi]
毐[i]阿公[ gng]
欸[i]阿訇[ hng]
嗳(噯)[i]阿拉[ l]
哀兵必胜[i bng b shng]阿拉伯人[ l b rn]
哀愁[i chu]阿拉伯数字[ l b sh z]
哀辞[i c]阿兰若[ ln r]
哀悼[i do]阿罗汉[ lu hn]
哀的美敦书[i d mi dn sh]阿猫阿狗[ mo  gu]
哀告[i go]阿门[ mn]
哀号[i ho]阿木林[ m ln]
哀嚎[i ho]阿片[ pin]
哀鸿遍野[i hng bin y]阿婆[ p]
哀毁骨立[i hu g l]阿Q[ Qi]
哀矜[i jn]阿嚏[ t]
哀苦[i k]阿姨[ y]
哀怜[i lin]啊(呵)[]
哀鸣[i mng]啊呀[ y]
阿尔法粒子[ r f l z]啊哟[ y]
阿尔法射线[ r f sh xin]锕[]
阿飞[ fi]腌[]
阿公[ gng]啊(呵)[]
阿訇[ hng]嗄[]
阿拉[ l]啊(呵)[]
阿拉伯人[ l b rn]啊(呵)[]
阿拉伯数字[ l b sh z]啊(阿、呵)[]
阿兰若[ ln r]哎(嗳)[i]
阿罗汉[ lu hn]哎呀[i y]
阿猫阿狗[ mo  gu]哎哟[i y]
挨(捱)[i]哀[i]
[i]哀兵必胜[i bng b shng]
皑(皚)[i]哀愁[i chu]
皑皑[i i]哀辞[i c]
癌[i]哀悼[i do]
癌变[i bin]哀的美敦书[i d mi dn sh]
吖[]哀告[i go]
阿[]哀号[i ho]
阿鼻地狱[ b d y]哀嚎[i ho]
阿昌族[ chng z]哀鸿遍野[i hng bin y]
阿斗[ du]哀毁骨立[i hu g l]
阿门[ mn]哀矜[i jn]
阿木林[ m ln]哀苦[i k]
阿片[ pin]哀怜[i lin]
阿婆[ p]哀鸣[i mng]
阿Q[ Qi]哀戚[i q]
阿嚏[ t]哀启[i q]
阿姨[ y]哀泣[i q]
啊(呵)[]哀切[i qi]
啊呀[ y]哀求[i qi]
啊哟[ y]哀荣[i rng]
锕[]哀伤[i shng]
腌[]哀思[i s]
啊(呵)[]哀叹[i tn]
嗄[]哀恸[i tng]
啊(呵)[]哀痛[i tng]
啊(呵)[]哀婉[i wn]
啊(阿、呵)[]哀艳[i yn]
哎(嗳)[i]哀怨[i yun]
哎呀[i y]哀乐[i yu]
哎哟[i y]哀子[i z]
哀[i]埃1[i]
哀戚[i q]埃2[i]
哀启[i q]挨[i]
哀泣[i q]挨边[i bin]
哀切[i qi]挨次[i c]
哀求[i qi]挨个儿[i g er]
哀荣[i rng]挨户[i h]
哀伤[i shng]挨家[i ji]
哀思[i s]挨肩儿[i jin er]
哀叹[i tn]挨近[i jn]
哀恸[i tng]挨门[i mn]
哀痛[i tng]唉[i]
哀婉[i wn]唉声叹气[i shng tn q]
哀艳[i yn]娭[i]
哀怨[i yun]欸[i]
哀乐[i yu]锿[i]
哀子[i z]挨(捱)[i]
埃1[i][i]
埃2[i]皑(皚)[i]
挨[i]皑皑[i i]
挨边[i bin]癌[i]
挨次[i c]癌变[i bin]
嗳气[i q]毐[i]
嗳酸[i sun]欸[i]
矮[i]嗳(噯)[i]
矮墩墩[i dn dn]嗳气[i q]
矮小[i xio]嗳酸[i sun]
矮星[i xng]矮[i]
矮子[i zi]矮墩墩[i dn dn]
蔼1[i]矮小[i xio]
娭[i]矮星[i xng]
欸[i]矮子[i zi]
锿[i]蔼1[i]


//以下为c++代码,在编译器中正常通过编译,并运行成功

#include<iostream>

using namespace std;

 

void quicksort(int a[],int left,int right)

{

int pivot,i,j;

int tmp;

if(left>=right)//此时需要给出每种情况的返回值

return ;

if(left < right)

{i = left; j = right + 1;

pivot = a[left];

//此时pivot 指向最左边的那个元素

do{

cout<<"pivot = "<<pivot<<endl;

do{i++;}while(a[i]<pivot);

//找到从左边开始第一个大于pivot的元素

do{j--;}while(a[j]>pivot);

//找到右边开始第一个小于pivot的元素

if(i<j)

{


tmp = a[i];

a[i]= a[j];

a[j] = tmp;

}

//交换两个元素

}while(i<j);

}//end if(left<right)

 

//将最左边的元素换到中间位置,

 

                                tmp = a[left];

                                a[left]= a[j];

                                a[j] = tmp;


quicksort(a,left,j-1);

quicksort(a,j+1,right);

}

int main(int argc, char* argv[])

{

printf("Hello World!\n");

int a[10]={221,3,2,12,32,22,13,32,21,23};

quicksort(a,0,9);

for(int i=0;i<10;i++)

cout<<a[i]<<" "<<endl;

return 0;

}

 

第10题:

已知有一维数组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


正确答案:C
解析:此题是求一维数组向二维数组转化的问题。最原始的方法就是把数组A的前n个元素放到数组B的第一行,数组A的第n个元素放到数组B的第二行中,依次类推,数组A的最后n个元素放到数组B的最后一行中。求且[幻在数组B中的位置,应先确定A[k]处在哪一行,显然应该是k/n行,然后再确定处在k/n行的哪一列,显然是k%n列。

更多相关问题