/ 知识库     / 试卷库

考试2016年秋程序员软考( )

设数组 a[0..n-1,0..m-1](n>1,m>1)中的元素以行为主序存放,每个元素占用4个存储单元,则数组元素 a[i,j](0≤i<n,0≤j<m)的存储位置相对于数组空间首地址的偏移量为【 】。

A、(j*m+i)*4

B、(i*m+j)*4

C、(j*n+i)*4

D、(i*n+j)*4

(i*m+j)*4

考试2016年秋程序员软考( )

已知函数 f()、g()的定义如下所示,调用函数f()时传递给形参x的值是5。若 g(a)采用引用调用(call by reference)方式传递参数,则函数f()的返回值为______;若 g(a)采用值询用(call by value)的方式传递参数,则函数f()的返回值为______。其中,表达式“x>>1”的含义是将x的值右移1位,相当于x除以 2。

f(int x) 

int a =x>>1; 

g(a); 

return a+i;

g(int x)

x=x*(x+1)i;

returni;

A、35 32

B、32 35

C、11 7

D、7 7

11 7

首先分析函数 f()的语句执行过程。形参x的值为5,将x的值(二进制形式高位都为0,低八位为00000101)右移1位后赋值给a,使得a的值为2(二进制形式高位都为 0,低八位为 00000010),然后执行函数调用 g(a)。

若以引用调用方式调用 g(a),则在函数g()执行时,其形参x相当于是 f中a的别名,对于运算“x=x*(x+1)”,此运算前 x的值为 2,运算后 x 的值改变为 6,返回到函数 f后a的值被改变为是6,在f中a和x是两个数据对象,所以 f结束时返回 a+x 的值为 11(5+6)。

若以值调用方式调用 g(a),则在函数 g()执行时,其形参x是一个独立的数据对象(值为2),接下来进行运算“x=x*(x+1)”,运算前x的值为2,运算后x的值改变为 6,最后返回到函数 f0,a的值不改变,仍然是 2,所以 f结束时返回 a+x 的值为 7(即 2+5)。

考试2016年秋程序员软考( )

某C语言程序中有表达式x%m(即x被 m除取余数),其中,x为浮点型变量,m为整型非0常量,则该程序在______时会报错,该错误属于______错误。

A、编译 语义

B、预处理 逻辑

C、编辑 语义

D、运行 逻辑

编译 语义

用户编写的源程序不可避免地会有一些错误,这些错误大致可分为静态错误和动态错误。动态错误也称动态语义错误,它们发生在程序运行时,例如变量取零时作除数、引用数组元素下标越界等错误。静态错误是指编译时所发现的程序错误,可分为语法错误和静态语义错误。C 语言对浮点数作整除取余运算没有定义,属于运算类型不匹配的错误,编译过程中的语义分析阶段会报告此类错误,属于静态语义错误。

考试2016年秋程序员软考( )

编写C程序时通常为了提高可读性而加入注释,注释并不参与程序的运行过程。通常,编译程序在【 】阶段就会删除源程序中的注释。

A、词法分析

B、语法分析

C、语义分析

D、代码优化

词法分析

编译程序的工作过程可以分为词法分析、语法分析、语义分析、中间代码生成、代码优化、代码生成这6个阶段。一般情况下,注释本身并不为编译程序提供关于程序结构和语义的任何信息,编译程序在词法分析阶段就会删除源程序中的注释。

等级2016年春程序员软考( )

函数 main()、test()的定义如下所示。调用函数test时,第一个参数采用传值方式,第二个参数采用传引用方式,man()函数中“ printi(x,y)”执行后,输出结果为【 】。

main(){

int x=1,y=5;

test(x,y);

print(x,y);

}

test (int x,int &a){

a=x+a*2;

x=x+1;

return;

}

A、1,5

B、3,5

C、7,5

D、7,10

7,5

程序执行时调用函数test时,是将第一个实参y的值拷贝给形参x,而将第二个实参x的地址传递给形参a,或者可以理解为在test中对a的修改等同于是对 main()函数中x的修改。因此test执行时,其运算“a=x+a*2”就是“a=5+1*2”,结果是将a(初始值为1)的值修改为7,也就是 main()中x的值变为7。而“x=x+1”仅修改test中x的值,与 main()中的y和x都无关。因此,在 main()函数中执行“ print(x,y)”后,输出的值为“7,5”。