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

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

  A.a=1,b=2    B.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.static  B.extern  C.void  D.register   E.int   F.无法确定

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

  A.static  B.extern  C.void  D.register   E.int   F.无法确定

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

  A.static  B.extern  C.void  D.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||x<z&&y>z)z=x;x=y;y=z;
  printf("%d%d%d",x,y,z);

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

    根据编译器语法分析,x>y||x<z&&y>z等价于(((x>y)||(x<z))&&(y>z))即(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)

猜你喜欢

转载自www.cnblogs.com/austainfael/p/10582273.html