32day---C++面试题

1.双向链表可随机访问任一结点,这样的说法正确吗 错误
解:
顺序表:随机访问;
链表:顺序访问。
2.在一个设有头指针和尾指针的单链表中,执行删除该单链表中最后一个元素的操作与链表的长度无关 错
解:必须要遍历到倒数第二个元素把它设为尾部(链表不是双向链表)
3.从一个具有 n 个结点的单链表中查找其值等于 x 结点时,在查找成功的情况下,需平均比较(n+1)/2个结点
解:最少1次 最多n次 平均(n+1)/2次
4.单链表的按升序排列,其中L指向头结点,写一个函数,若start<元素 如13->19->26->30->49->63,start=21,end=51,删除后为13->19->63.结点定义及函数模板如下,请为(1)(2)(3)(4)处出选择合适的代码。

typedef struct Node{
    int data;
    struct Node *next;
}Node,*LinkList;
int delList(LinkList L,int start,int end)
{
    (1) * q = L;*p = L->next;//Node
     int delFlag = 0;
     while ( p )
         if ( p->data <= start)
             { q = p; p = (2);}//p->next
         else
             if ( p->data < end )
             {
                 q->next = (3); free(p);//p->next  
                 p = (4); delFlag = 1;//q->next
              }
             else  break;
      if( delFlag == 0) return -1;
      return 0;
}

5.下面程序段的运行结果是 字符′c′的地址

char *s="abcde"; s+=2;printf ( "%d",s )

解:%d不是%c
6.用户可以重新定义标准库函数,若如此,该函数将失去原有含义
7.在 C 语言中,引用数组元素时,其数组下标的数据类型允许是 ABC
A 整型常量
B 整型表达式
C 整型变量
D 任何类型的表达式
解:数组声明时只能用常量,比如int arr[5];不可以使用变量,比如int a=5;int arr[a];,这样是错误的
引用数组元素时,无论是常量还是变量,还是表达式,都是正确的
8.有以下程序,程序的输出结果是 1.10

#include 
#include 
void fun ( double *pl,double *p2,double *s)
{
    s = ( double*) calloc ( 1,sizeof(double));
    *s = *pl + *(p2+1);main( )
{
    double a [2] = {1.1,2.2,b [2] = {10.0,20.0, *s = a;
    fun (a,b,s);
    printf ( "%5.2f\n",* s) ;

9.在你面前有一个n阶的楼梯,你一步只能上1阶或2阶。请问,当N=11时,你可以采用144种不同的方式爬完这个楼梯;当N=9时,55
解:当台阶只有一阶时,只能走一步,只有一种走法。 当两级台阶时,可以走一步,也可以一次走两步,有两种走法。 当三级台阶时,可以走一步,走三次。可以先走一步,再两步。也可以,先两步,再一步。总共三种方法。 可以看到当台阶是3时,第1级台阶选中之后(一种),剩下可以走的方式恰好是台阶为2时的总数,总的数量为前两个之和,所以是f(3)=f(1)+f(2)。即,f(n)=f(n-2)+f(n-1),总结起来刚好是一个斐波那契数列

你可能感兴趣的:(c/c++面试习题总结,链表,指针,数据结构,c语言)