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