导航菜单
首页 >  c语言考研复试常见问题及解答  > 考研计算机复试(C语言复试笔试题)(精华题选)

考研计算机复试(C语言复试笔试题)(精华题选)

1.以下选择中,正确的赋值语句是(C)

A.a=1,b=2B.j++

C.a=b=5; D.y=(int)x

解析:选项A、B、D都无分号

变量 = 表达式;//赋值语句是一定带分号的

int a=b=c=5;//本语句错误

{

int a,b,c;

a = b = c = 5;

}//正确赋值语句

2.运算符优先级:

!、算术、关系、&&、||、按位、逻辑、?:、赋值、逗号

3.假设所有变量均为整型,表达式a=2,b=5,a>b?a++:b++,a+b的值是(8)

解析:首先保证一个问号表达式(语法分析,尽可能令语法无二义性,且完备)

题中表达式等价于(a=2,b=5,a>b)?a++:(b++,a+b)

根据逗号表达式,(式1,式2,...,式n),从左往右逐个计算,表达式值为最后一个式的值,优先级最低。

根据问号表达式,(式1?式2:式3),?式1为"真"时,只执行式1,为"假"时,只执行式2。

(a=2,b=5,a>b)?a++:(b++,a+b)

4.转义字符输出:

printf("%%");//输出一个%

printf("%%%d", 99);//输出%99

5.若int a=1,b=2,c=3,d; d=a*b+c?100:99;则d的值为(100)

6.若int d=22?33:44,55;则d的值为(44)

解析:算术 > 问号 > 赋值 > 逗号

d=a*b+c?100:99;等价于d=(a*b+c?100:99);

d=22?33:44,55;等价于(d=22?33:44),55;

7.char arr[] = 'a';(错误)

解析:无法从char转换为char[]

8.若对函数类型未加显示说明,则函数的隐含说明类型为(E)

A.staticB.externC.voidD.register E.int   F.无法确定

9.在C语言中,函数的隐含存储类别是(B)

A.staticB.externC.voidD.register E.int   F.无法确定

10.在C语言中,全局变量的存储类别是(B)

A.staticB.externC.voidD.register E.int   F.无法确定

11.若有定义char *p; 则赋值语句*p=getchar();是(错误)

解析:指针p没有被初始化。

12.若有定义int a[m][n],(*p)[n]; p = a;则第i行第j列元素为(A、B、C)

A.a[i][j]B.*(p[i]+j)C.*(*(p+i)+j)

解析:

二维数组的第i行首地址为a+i、*(a+i)、&a[i][0]

二维数组的第i行第j列的地址为*(a+i)+j、&a[i][j]

二维数组各个元素位置理解:1.纵横;2.顺排,一维数组

顺排(一维数组)第i个元素地址:*a+i

13.以下程序的运行结果为(211)

int x=1,y=1,c=0; c=x++||y++; printf("%d%d%d",x,y,c);

 解析:++ 优先级大于 || 优先级大于 =,其中||(逻辑或)的执行操作是:当||左侧表达式为“真”时,将不会执行右侧表达式。

14.若执行以下程序,则输出(508080)

 

int x=30,y=50,z=80; if(x>y||xz)z=x;x=y;y=z; printf("%d%d%d",x,y,z);

解析:>优先级大于&&优先级大于||,它们的结合性都是从左到右

根据编译器语法分析,x>y||xz等价于(((x>y)||(xz))即(0||1)&&(y>z)即(1&&0)为"假"

由于if(0)z=x;带了分号,故不执行z=x;

因此继续执行x=y;y=z;

15.C语言中,一维数组的定义方式为:类型说明符 数组名[(A)];一位数组的引用方式为:数组名[(B)]

A.常量表达式B.整型常量或整型表达式

C.整型常量D.整型表达式

解析:常量表达式包括:常量和符号常量(例如#define N 99)

相关推荐: