笔试题总结

目录

 

第二周:

第三周:


第二周:

1 执行printf( “ %5s ” , “abcdefg ” ) 后,则输出结果为(B)

Aabcde

B、abcdefg

Ccdefg

D、输出错误信息

2 在c++中实参和形参有3种结合方式,分别为:值传递、引用传递和地址传递。说法是否正确?

     A、正确

     B  错误

以下哪个选项一定可以将flag的第二个bit置0

   A、flag&=~2

   B、flag|=2

   C、flag^=2

    D、flag>>=2

4 下列叙述中正确的是( )

  1. 线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的
  2. 线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构
  3. 线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构
  4. 上述三种说法都不对

 

5 下列叙述中正确的是( )

  1. 在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化
  2. 在栈中,栈顶指针不变, 栈中元素随栈底指针的变化而动态变化
  1. 在栈中,栈底指针不变, 栈中元素随栈顶指针的变化而动态变化
  2. 上述三种说法都不对

 

6、若有定义语句 int a,b; double x; 则下列选项中没有错误的是( )。

A、 switch (x%2) B、switch((int)x/2.0)

{    {

case 0:a++;break;        case 0:a++;break;

case 1:b++;break;        case 1:b++;break;

default: a++;b++;        default: a++;b++;

}    }

  1.  switch((int)x%2) D、 switch((int)(x)%2)

{     {

case 0:a++;break; case 0.0:a++;break;

case 1:b++;break; case 1.0:b++;break;

default: a++;b++; default: a++;b++;

}     }

7、有以下程序

#include

int f(int x);

int main()

{

    int n=1,m;

    m=f(f(f(n)));

    printf("%d\n",m); 

   return 0;

}

int f(int x)

{

    return x*2;

}

程序运行后的输出结果是( )

A、1     B、2

C、4     D、8

  1. 有以下程序

#include

 int main()

 {

     int a[]={1,2,3,4,5,6,7,8,9,10,11,12,},

     int *p=a+5,*q=NULL;

        *q=*(p+5);

     printf("%d %d\n",*p,*q);

     return 0;

 }

程序运行后的输出结果是(A  )

 

A 运行后报错

B、6 6

C、6 11

D、5 10

 

 char acX[]="abc";

char acY[]={'a','b','c'};

char *szX="abc";

char *szY="abc";

对于以上四个定义,下面叙述错误的是( D)

 

    A acX与acY的内容可以修改

    B  szX与szY指向相同的地址

    C acX占用的内存空间比acY占用的大

    D、szX的内容修改后,szY的内容也会被更改

 

  1. 编写一个函数,实现与strcat相同的功能。

注:函数原型为 void func(char p1[], char p2[]);设定传入的的数组p1大小为80,p2大小为40;

#include 
#include 
#define N 5

char *mycat(char *s1, char *s2)
{
    //数组型
/*    int i = 0;
    while(s1[i] != '\0') {
        i++;
    } 
    int j = 0;
    while(s2[j] != '\0') {
        s1[i] = s
		2[j];
        i++;
        j++;
    }
    s1[i] = '\0';
    
    return s1;   */
    //指针型
    char *p = s1;            //定义字符型指针p指向s1 
    while(*s1 != '\0') {     //让s1指向'\0' 
        s1++;
    } 
    while(*s2 != '\0') {     //让s2连在s1后 
        *s1 = *s2;
        s1++;
        s2++;
    }
    *s1 = '\0';              //让s1以'\0'结尾 
    
    return p;
    
}

int main()
{
    char s1[N];
    char s2[N];
    fgets(s1, N, stdin);                    
    if(s1[strlen(s1) - 1] == '\n') {      // 去掉换行符
        s1[strlen(s1) - 1] = '\0';   
    }
    fflush(stdin);                        //因为上面使用了fgets,这里得清空缓冲区(具体请看gets和fgets函数的区别)
    fgets(s2, N, stdin);
    if(s2[strlen(s2) - 1] == '\n') {      // 去掉换行符
        s2[strlen(s2) - 1] = '\0';   
    fflush(stdin);
    }
    printf("%s", mycat(s1, s2));
//    printf("%s\n%s", s1, s2);
    
    return 0;
    } 

第三周:

1、下列的进程状态变化中,哪些是不可能发生的?

A、运行→就绪

B、运行→等待

C、等待→运行

D、等待→就绪

 

2、栈S最多能容纳4个元素。现在6个元素按A、B、C、D、E、F的顺序进栈,下列哪一个序列不是可能的出栈序列?

A、A、B、C、D、E、F

B、A、F、E、D、C、B

C、C、B、E、D、A、F

D、C、D、B、E、F、A

 

3、TCP断开连接的四次挥手中,第四次挥手发送的包会包含的标记,最正确的描述是?()

A、FIN

B、FIN,PSH

C、ACK

D、FIN,ACK

4、下面选项中的程序段,没有编译错误的是()

A、char* sp, s[10]; sp = "Hello";

B、char* sp, s[10]; s = "Hello";

C、char str1[10] = "computer", str2[10]; str2 = str1;

D、char mark[]; mark = "PROGRAM";

5、若系统中有5个同类资源,有多个进程均需要使用2个,规定每个进程一次仅允许申请1个,则至多允许几个进程参于竞争,而不会发生死锁?

A、5

B、2

C、3

D、4

6、以下程序段执行后结果是()

1

2

3

4

5

6

7

8

9

10

11

#include

void main()

{

    short *p,*q;

    short arr[15]={0};

    p=q=arr;

    p++;

    printf("%d,",p-q);

    printf("%d,",(char*)p-(char*)q);

    printf("%d",sizeof(arr)/sizeof(*arr));

}

A、1,0,15

B、0,2,1

C、1,1,15

D、1,2,15

 

7、将物理地址转换为 IP 地址的协议是() 。

A、IP

B、ICMP

C、ARP

D、RARP

 

8、分析以下函数,该函数的功能是()

1

2

3

4

5

6

7

8

9

10

11

void sca_from_file(int a[], int n, char fn[])

{

    FILE *fp;

    int i;

    fp = fopen(fn, "r");

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

    {

        fscanf(fp, "%d", &a[i]);

    }

    fclose(fp);

}

 

A、打开文件fn,从文件中读出n个整数到数组a中

B、打开文件fn,将数组a的n个元素写到文件中

C、打开文件fn,从文件中读出n,再读n个整数到数组a中

D、打开文件fn,将n和数组a的n个元素依次写到文件中

 

9、后缀式abc+*所代表的表达式为:( )

A、a*(b+c)

B、a*b+c

C、a+b*c

D、(a+b)*c

 

10、以下正确的说法是(   )。

A、用户调用标准库函数前,必须重新定义

B、若已包含标准库头文件及相关命名空间,用户也可以重新定义标准库函数,但是该函数将失去原有含义

C、若已包含标准库头文件及相关命名空间,则系统不允许用户重新定义标准库函数

D、用户调用标准库函数前,不必使用预编译命令将该函数所在文件包括到用户源文件中

 

11、下面选项中的程序段,没有编译错误的是()

A、char* sp, s[10]; sp = "Hello";

B、char* sp, s[10]; s = "Hello";

C、char str1[10] = "computer", str2[10]; str2 = str1;

D、char mark[]; mark = "PROGRAM";

 

12、对于以下结构定义,(*p)->str++中的++加在()。

struct { int len; char *str; } *p;

A、指针 str 上

B、指针 p 上

C、str 指向的内容上

D、语法错误

13、如下代码的输出结果是()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

int function2(int a[], int b, int e)

{

    if(e-b<=1) return abs(a[b]-a[e])>=3?a[b]:a[e];

    int l = 0, r = 0;

    l = function2(a, b, b + (e - b) / 2);

    if (l % 2 == 0)

        r = function2(a, b + (e - b) / 2 + 1, e);

    else

        return l;

    if (l | r)

        return l | r;

    else

        return r;

}

 

int main()

{

    int a[] = { 10,5,8,4,5,20,2,3 };

    cout << function2(a, 0, sizeof(a) / sizeof(1)) << endl;

    int b[] = { 3,5,8,4,8,30,2,3 };

    cout << function2(b, 0, sizeof(b) / sizeof(1)) << endl;

    return 0;

}

 

A、15,5

B、10,5

C、20,3

D、其它

14、设有以下程序段,则值为6的表达式是()。

struct st { int n; struct st *next;};

static struct st a[3]={5,&a[1],7,&a[2],9,0 } ,*p;

p=&a[0];

A、p++->n

B、++p->n

C、p->n++

D、(*p).n++

15、补充下面函数代码: 如果两段内存重叠,用memcpy()函数可能会导致行为未定义。 而memmove()函数能够避免这种问题,下面是一种实现方式,请补充代码。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

1

#include

using namespace std;

void* memmove(void* str1,const void* str2,size_t n)

{

    char* pStr1= (char*) str1;

    char* pStr2=(char*)str2;

    if  ( ) {

        for(size_t i=0;i!=n;++i){

            *(pStr1++)=*(pStr2++);

        }

    }

    else{

        pStr1+=n-1;

        pStr2+=n-1;

        for(size_t i=0;i!=n;++i){

            *(pStr1--)=*(pStr2--);

        }

    }

    return ( );

}

A、pStr1< pStr2   str1

B、pStr1+n < pStr2   str2

C、pStr1+n < pStr2 || pStr2+n

D、pStr2+n

 

 

 

 

 

 

 

你可能感兴趣的:(笔试题)