一、选择题【30分】

1、有以下程序段,其中的变量已定义为 int 类型,则程序段的输出结果是(  )。【2分】

sum = pad = 5; 
pAd = sum++, pAd++, ++pAd;
printf( “%d\n”, pad );

        A、4         B、5         C、6         D、7

2、有以下程序,则程序运行后的输出结果是(  )。【2分】

#include <stdio.h>
#include <math.h>
int main(void)
{
    int a=1, b=4, c=2;
    double x=10.5, y=4.0, z;
    z = ( a+b )/c + sqrt( y ) * 1.2 / c + x;
    printf("%f\n", z);
}

        A、13.700000         B、14.000000         C、15.400000         D、14.900000

3、设有定义:int x=11,y=12,z=0;,以下表达式值不等于 12 的是(  )。

        A、 (z,x,y)         B、(z=x,y)         C、z=(x,y)         D、 z=(x==y)

4、以下可以将任意一个两位整数n的个位数与十位数对换的表达式为(  )。【2分】

  A、(n-n/10*10)*10+n/10             B、n-n/10*10+n/10
  C、n/10+(n-n/10)                   D、(n-n/10)*10+(n/10)

5、设有以下程序段 int y; y=rand() % 30+1; 则变量 y 的取值范围是(   )。【2分】

        A、1<y<30         B、0≤y≤30         C、 0<y≤30         D、1<y≤30

6、下列哪些算法的时间复杂度是O(n^2)(          )。【多选】【2分】

        A、冒泡排序         B、快速排序         C、直接插入排序         D、直接选择排序

7、程序 int i=1; int main(){int i=i; return 0;} 的结果是什么?( A )。【2分】

        A、main()函数里的i是一个未定义值         B、main()函数的i为1

        C、编译器不允许这种写法                        D、main()里i的值为0

8、在下列程序中,num赋什么值会使数组值发生改变?(  )。【多选】【2分】

#include <stdio.h>
int main(void)
{
    int arr[3] = {10,20,30};
    int *p = arr;
    int num = ?;
}   

        A、*p++       B、(*p)++        C、++*p         D、*++p

9、一个栈的入栈序列为1,2,3,4,5;则出栈序列不可能为(   )。【2分】

        A、1 2 3 4 5         B、5 4 3 2 1         C、2 3 4 5 1         D、4 1 2 3 5

10、 用链表表示线性表的优点是(  )。

        A、便于随机存取             B、花费的存储空间较顺序存储少

        C、便于插入和删除         D、数据元素的物理顺序与逻辑顺序相同

11、二叉树的后序和中序遍历分别为DBFGECA和BDACFEG。则其先序遍历次序为(  )。【2分】

        A、abcdefg         B、 abdcefg         C、abcdfeg         D、abcdegf

12、下列程序的正确输出结果为( )。【2分】

#include <stdio.h>
int main(void)
{
    int a=0,b=0,c=0;
    if(a++ || b++ && ++c)
        printf("%d,%d,%d\n",a,b,c);
    else
        printf("%d,%d,%d\n",a,c,b);
}

        A、1,1,0         B、1,0,0         C、1,1,1         D、1,0,1

13、有金、银、铜三个盒子,有一个硬币藏在其中一个盒子里,三个盒子上各贴着一张纸条,上面的提示分别是:

(1)硬币在金盒子中
(2)硬币不在银盒子中
(3)硬币不在金盒子中。

这三句话只有一句是真的。根据以上条件,硬币藏在哪个盒子中?(   )。【2分】

        A、硬币在金盒子中         B、硬币在银盒子中

        C、硬币在铜盒子中         D、无确切答案

14、在有序双向链表中定位删除一个元素的平均时间复杂度为(   )。【2分】

        A、O(1)         B、O(N)         C、O(logN)         D、O(N*logN)

15、下列程序的正确输出结果为(  )。【2分】

#include <stdio.h>
int main()
{
    int a[4] = { 1, 2, 3, 4 };
    int* ptr1 = (int*)(&a + 1);        
    int* ptr2 = (int*)((int)a + 1);    
    printf("%x,%x", ptr1[-1], *ptr2);  
    return 0;                         
}

        A、4,1         B、2000000,4         C、1,4         D、4,2000000

二、填空题【20分】

1、在X86计算机上执行下面的程序,结果是什么。【4分】

#include <stdio.h>
int main(void)
{
    int a=0x61626364;
    char *p=&a;
    printf("%x,%x,%x,%x\n",*p,*(p+1),*(p+2),*(p+3));
}

2、说明下列程序可能会出现的问题。【4分】

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void GetMemory(char *p,int num)
{
    p=(char*)malloc(num);
}
int main(void)
{
    char *str=NULL;
    GetMemory(str,100);        
    strcpy(str,"hello world");
    printf("%s\n",str);
}

3、下面程序是求出一个数组中的最大值,请填空。【6分】

void maxvalue(int *a,int n,int* pmax)
{
    int i;
    (             )         
    for(i=1;i<n;i++)
        if(*(a+i)>*pmax)
            (           ) 
}
​
void main()
{ 
    int a[8]={10,-1,8,30,90,-67,0,66};
    int max;
    (               )   
    printf(“max=%d\n”,max);
}

4、写一个标准宏MIN,这个宏输入两个参数并返回较小的一个。【3分】

5、在X86计算机上,向绝对内存地址为0x40020800设置为整型值0x3456。【3分】

三、简答题【20分】

1、strcpy与memcpy的区别?【5分】

2、队列的实现方式有几种,从存储方式的角度说明。什么是循环队列,给出实现方法。【6分】

3、解释下列代码。【3分】

char *(*arr[10])(int **p);

4、关键字static,在模块内的static变量、在模块内的static函数、在函数体内的static变量,请分别描述其作用是什么?【6分】

四、编程题【30分】

1、编写一个函数,并通过该函数验证当前计算机为大端存储模式还是小端存储模式。【5分+5分】

2、使用两个栈实现一个队列,要求给出算法(入队算法出队算法)和思路。【10分】

3、给出两个单向链表的头指针,比如pHead1、pHead2,判断这两个链表是否相交,两个链表均不带环。【10分】

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐