c++/c笔试若干小问题《1》

1. 分析输出结果

  #include <iostream>

using namespace std;

struct base{

       public:

              virtual void print(){cout<<"base fun/n";}

       private:

               string basename;

       };

      

struct derived:base{

       public :

              void print(){cout<<"derived fun/n";}

       };

      

 

int main(){

    base bobj;

    //b.print();

    base *bp1=&bobj;

    //bp1->print();

    base& br1=bobj;

    //1.print();

    derived dobj;

    base *bp2=&dobj;

    bp2->print();

    base& br2=dobj;

    br2.print();

    cin.get();

}

2. Josephu  






























问题为:设编号为1














2














… n














n














个人围坐一圈,约定编号为k














1<=k<=n














)的人从1














开始报数,数到m














的那个人出列,它的下一位又从1














开始报数,数到m














的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。
 















提示:用一个不带头结点的循环链表来处理Josephu 















问题,先构成一个有n














个结点的单循环链表,然后由k














结点起从1














开始计数,记到m














时,对应结点丛链表中删除,然后被删除的结点得下一个结点又从1














开始记数,直到最后一个结点丛链表中删除,算法结束。

#include <stdio.h>

#include <stdlib.h>

struct Lnode

{int data;

  struct Lnode *next;

};

typedef struct Lnode *LinkedList;

int n;

LinkedList p;

LinkedList InitLinkedList(){

       LinkedList temp;

    static LinkedList head;

       int i;

       p=head=(LinkedList)malloc(sizeof(LinkedList));//head 起标记作用

       head->data=1;

       //head->next=NULL;

       //list=head;

       for(i=2;i<=n;i++){

       temp=(LinkedList)malloc(sizeof(LinkedList));

       temp->data=i;//temp->next=NULL;

       p->next=temp;

       p=temp;

       }

       p->next=head;

       return head;

       }

 

LinkedList ListFind(int location,LinkedList list){

       int i;

   LinkedList temp;

       for(i=1;i<location;i++){

       temp=list;//list 代表头结点

       list=temp->next;

       }

return list;

}

 

void DeList(LinkedList list,int number){

int i;

LinkedList temp;

while(n!=0){

       for(i=1;i<number;i++){

       temp=list;

       list=list->next;

       }

  printf("%d ",list->data);

temp->next=list->next;

temp=list;

list=list->next;

free(temp);

n--;

 

  /*p1->next=p2->next;

        p=p2;

        p2=p2->next;

        free(p);

        n--;*/

}

}

 

int main(void)

{    

 

       LinkedList ResultList,list;

       //struct josephu *head,*p0;

    int local,num;

    printf("/n 请输入分别总人数 n, 位置 i, m( 用空格隔开 ):");

    scanf("%d%d%d",&n,&local,&num);

    //InitLinkedList(q);

    //ListFind(local,q)

    //del(q,num);

    ResultList=InitLinkedList();

    list=ListFind(local,ResultList);

    DeList(list,num);

    getch();

    return 0;

}


3判断下列是否正确

(1).char *dst="hello";

   char *str;

   strcpy(str,dst);//错误,因为"hello"位于常量区,strcpy函数实现便错误

(2)char *str=NULL

    char dest[]="hello";

   strcpy(dest,str);//错误,因为空指针..

4、(1)char a[]="20a/012"  ;求sizeof(a)    答案为5,/0代表了空字符(NULL);  没有解析成/ddd的模式,即字节代码

     (2)short int a=65539; printf(a);      答案为3  


你可能感兴趣的:(c++/c笔试若干小问题《1》)