程序状态寄存器CPSR的N、Z、C、V分别指--,I=1指()、F=1指(),M[4:0]用做()。

题目

程序状态寄存器CPSR的N、Z、C、V分别指--,I=1指()、F=1指(),M[4:0]用做()。

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

第1题:

以下程序的执行结果是______。 main() { int i,j,m=O,n=0; for (i=0;i<2;i++) {for (j=0;j<2;j++) if(j>=i) m=1;n++; printf("%d\n",n); } }

A.4

B.2

C.1

D.0


正确答案:C

第2题:

阅读以下说明和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]--。

第3题:

给定程序MODllC中函数fun的功能是:输出M行M列整数方阵,然后求两条对角线上各元素之和,返回此和数。

inClude<coMo.h>

inClude<stdio.h>

dehne M 5

/************fOUnd************/

int fun(int n,int xx[][])

{int i,j,sum=0;

printf("\n The%dx%d matrix:\n"M,M);

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

{ for(j=0;j<M;j++)

/************found************/

printf("%f",xx[i][j]);

printf("\n");

}

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

sum+=xx[i][i]+XX[i][[n-i-1];

return(sum);

}

main( )

{int aa[M][M]={{1,2,3,4,5),{4,3,2,1,0),

{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};

clrscr( );

printf("\n The sum Of all elements On 2 diagnals is %d."fun(M,aa));

}


正确答案:int fun(int nint xx[][]) 改为 int fun(int nint xx[][M)) printf("%fxx[i][j]); 改为 printf("%d"xx[i][j]);
int fun(int n,int xx[][]) 改为 int fun(int n,int xx[][M)) printf("%f,xx[i][j]); 改为 printf("%d,"xx[i][j]); 解析:二维数组作为函数形参时,二维长度不可缺省,只能省略一维的长度。在格式输出函数中,血型数据输出时对应的控制符是%d.

第4题:

有以下程序:include prt(int * m,int n)int i;for(i =0;i

有以下程序:#include <stdio.h>prt(int * m,int n) int i; for(i =0;i<n;i ++ ) m[i] ++;main( )} int a[ ] = { 1,2,3,4,5} ,i; prt(a,5); for(i =0;i<5;i ++ ) printf( "% d," ,a[i] );}程序运行后的输出结果是( )。

A.1,2,3,4,5,

B.2,3,4,5,6,

C.3,4,5,6,7,

D.2,3,4,5,1


正确答案:B
解析:prt(a,5);用数组名a作函数实参,不是把a数组的值传递给形参m,而是将数组a的首地址传递给指针变量m,使指针变量m指向数组a的首地址,这样他们就占用同一段内存单元。当改变了指针变量所指向的存储单元中的内容,也就改变了数组a中的元素。函数pit的作用是将指针变量m所指向的存储单元中的各元素值加1,也就是数组a中各元素的值加l,所以输出结果为:2,3,4,5,6,

第5题:

设有如下程序: #include"stdio.h" main() { char c; int m=0,n=0; while((c=getchar())!='\n') {if(c>='A'&&c<='Z') m++; else if(c>='a'&&c<='z')n++;} printf("m=%d,n=%d",m,n);} 如果从键盘上输入:AbCdefGHj<回车>,则程序运行后的输出结果是( )

A.m=5,n=4

B.m=4,n=5

C.m=9,n=0

D.无确定值


正确答案:B

第6题:

以下程序的输出结果是 f(int b[] ,int m, int n) { int i,s=0; for (i=m; i<n; i=i+2) s=s+b [i]; return s; } main ( ) { int x,a[]={1,2,3,4,5,6,7,8,9}; x=f(a,3,7); printf ( "%d\n", x); }

A.10

B.18

C.8

D.15


正确答案:A
解析:本题考核的知识点是数组名作为函数参数的应用.在malii()函数中定义了一个变量x,以及一个有9个元素的数组a,并且每个元素分别赋初值为1、2、3、4、5、6、7、8和9.执行函数调用f(a,3,7),把a的首地址赋给形参b,把3和7分别赋给形参m和n。在f()函数中,for循环执行了2次:第一次,i的值为3,相当于执行7语句“s=s+b[3]”,br3J的值就是a[3]的值4,故s的值变为4;第二次,i值为5,相当于执行了语句“s=s+b[5];”,b[5]的值6,故s的值变为10。把s作为函数值返回并赋值给x。所以,4个选项中A为所选。

第7题:

已知字符0的ASCⅡ码为十六进制数30,下面程序的输出是______。 main() { int i; union{unsigned char c;unsigned int i[4];}z; z.i[0]=0x39;z.i[1]=0x36; printf("%d\n",z.c); }

A.56

B.57

C.58

D.59


正确答案:B
解析:共用体变量中的所有成员共享存储空间,因此变量中的所有成员的首地址相同,且变量的地址也就是该变量成员的地址。

第8题:

下列给定程序中,函数fun()的功能是:给一维数组a输入任意4个整数,并按如下的规律输出。例如输入1,2,3,4,程序运行后输出以下方阵:

4 1 2 3

3 4 1 2

2 3 4 1

1 2 3 4

请改正程序中的错误,使它能得出正确的结果。

注意;不要改动main 函数,不得增行或删行,也不得更改程序的结构。

试题程序;

include <stdio.h>

define M 4

/*******************************/

void fun(int a)

{int i,j,k,m;

printf("Enter 4 number: ");

for (i=0; i<M; i++) scanf ("%d", &a [i] );

printf ("\n\n The result : \n\n ");

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

{ k=a [M-1];

for (j=M-1; j>0; j--)

/**********************************/

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

a[0]=k;

for (m=0 ;m<M; m++ ) printf ("%d ", a [m]);

printf ("\n ");

}

}

main ()

{int a [M];

fun(a); printf("\n\n ");

}


正确答案:(1)错误:void fun (int a) 正确:int fim (int *a (2)错误:a[j]=a[j+1]; 正确:a[j]=a[j-1];
(1)错误:void fun (int a) 正确:int fim (int *a (2)错误:a[j]=a[j+1]; 正确:a[j]=a[j-1]; 解析:其实,该题中题目信息已经告诉我们按“如下规律”,这就需要去认真分析矩阵的“规律”了,在第1列中,数列以4开始递减,直至1,在该数列中,行和列都是递减循环排列,所以题目在循环的时候有循环条件for(i=M;i>0;i--)和 for (j=M-1;j>0;j--),当然每次循环结束后在列中的赋值语句应该是a[j]=a[j-1];。

第9题:

以下程序的功能是调用函数fun计算m=1-2+3-4+…+9-10,并输出结果,请填空。int fun( int n){ int m=0,f=1,i; for(i=1;i<=n;i++) { m+=i*f; f=-f; } return m;}main{ printf("m=%d\\n",); }


正确答案:fun(10)
在本题中,题目给出了程序的功能是调用函数fun计算m=1-2+3-4+…+9-10,并输出结果。
在程序中,首先定义了fun函数,该函数带有一个整型变量的形参,在函数体中,定义三个整型变量m、f和i,变量m用来存放计算的结果,变量i作为循环变量,变量f用来控制数据的正负。程序运行for循环。
当循环变量i=1时,m=0+1*1=1,然后将变量f变为-1。
当循环变量i=2时,m=1+2*(-1),然后将变量f变为1。
当循环变量i=3时,m=1+2*(-1)+3*1,然后将变量f变为-1。以此类推,直到循环结束,可以实现m=1-2+3-4+…+9-10。最后通过return语句返回m的结果。
在主函数中,只有一条输出语句,本题的空就是输出语句的输出表达式,从题目的要求可以知道,此空是调用fun计算m=1-2+3-4+…+9-10,从上面对fun的分析可以,形参n就是要计算数的最大数。因此,此空需要填写的内容为fun(10)。

第10题:

有以下程序 include int fun(int (*s)[4],int n,int k) {int m,i;

有以下程序 #include <stdio.h> int fun(int (*s)[4],int n,int k) {int m,i; m=s[0][kl; for(i=1;i<n;i++) if(s[i][k]>m) m=s[i][k]; return m; } main() { int a[4][4]={{1,2,3,4},{11,12,13,14}, {21,22,23,24}, {31,32,33,34}}; printf("%d\n",fun(a,4,0)); } 程序的运行结果是______。

A.4

B.34

C.31

D.32


正确答案:C
解析:在主函数中,定义并初始化了4行4列的二维数组a,并通过调用fun函数,将fun函数中指向一维数组的指针变量s指向了二维数组a的首地址,使得指针变量s与数组a共用同一存储单元。在fun函数中,通过for循环,求得了数组a第0列中最大的值,并赋给m返回主函数。由于数组a第0列的值分别为1、11、21、31,故其最大值是31。

更多相关问题