Тесты для самоконтроля знаний по курсу «Программирование на языках высокого уровня». Часть 2. Алгоритмический язык С++, страница 3

               fwrite(&n,sizeof(n),1,f);

          2.   int n=11;

               f=fopen(“array.dat”,”wb”);

               fseek(f,2*2,0);

               fwrite(&n,2,1,f);

          3.  int n=11;

               f=fopen(“array.dat”,”wb+”);

               fseek(f,sizeof(ar[0],0);

               fwrite(&n,sizeof(n),1,f);

ν        4.  int n=11;

               f=fopen(“array.dat”,”rb+”);

               fseek(f,sizeof(ar[0])*2,0);

               fwrite(&n,2,1,f);

Глава 11. Указатели.

Вопрос 11.1. В каком из фрагментов программы будет выведено *k=10; *i=14;?

Ответы:

          1.  int *k=new int,*i=new int;

               *k=10; *i=14;

                i=k;

                printf(“*k=%d  *i=%d”,*k,*i);

ν        2.  int *k=new int,*i;

               *k=10;

               i=new int;*i=14;

                printf(“*k=%d  *i=%d”,*k,*i);

          3.   int *k=new int,*i=new int;

               *k=10; i=k;

               *i=14;

                printf(“*k=%d  *i=%d”,*k,*i);

          4.   int *k=new int,*i=new int;

                k=10; i=14;

                printf(“*k=%d  *i=%d”,k,i);

Вопрос 11.2. В каком из фрагментов программы операции присваивания не являются допустимыми?

Ответы:

          1. int a,b,*pa=NULL,*pb=new int;

              a=25; *pb=30;

              pa=&a; b=*pb;

              printf(“*pa=%d  b=%d”,*pa,b);

          2. int a,b,*pa,*pb;

              float c,*pc;

              pa=NULL; b=30;

              pb=&b; c=(float)b; pc=&c;

              printf(“*pb=%d  *pc=%d”,*pb,*pc);

          3. int b,*pb=NULL;

              float c,*pc=new float;

              *pc=25.5;

              b=(int)*pc; pb=&b;

              printf(“*pb=%d  *pc=%d”,*pb,*pc);

ν        4.  int b,*pb=NULL;

              float c,*pc=new float;

              *pc=25.5;

              *pb=30;

              printf(“*pb=%d  *pc=%d”,*pb,*pc);

Вопрос 11.3. Пусть дан массив int a[6]; Какой из способов доступа к 3-му элементу не является правильным?

Ответы:

          1.  int x, a[6]={1,2,3,4,5,6};

               x=*(&a[0]+2);

               printf(“x=%d”,x);

          2. int x, a[6]={1,2,3,4,5,6};

               x=*(a+2);

               printf(“x=%d”,x);

          3. int x,*p, a[6]={1,2,3,4,5,6};

               p=a+2;

               printf(“x=%d”,*p);

ν        4.  int x,*p, a[6]={1,2,3,4,5,6};

               *p=*(a+2);

               printf(“x=%d”,*p);

Глава 12. Динамические массивы.

Вопрос 12.1. В каком из фрагментов корректно выделяется и освобождается память под динамический массив?

Ответы:

          1.  int i,*p,n=10;

               p=(int *)malloc(n*sizeof(n));

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

               {  p[i]=random(100);

                   printf(“%4d”,p[i]);

                }

                delete p;

          2.   int i,*p,n=10;

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

               { if (!(p=new int)) exit (1);

                   p[i]=random(100);

                   printf(“%4d”,p[i]);

                }

                delete p;

ν        3.  int i,*p,n=10;

               if (!(p=new int[n])) exit (1);

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

               { *(p+i)=random(100);

                   printf(“%4d”,p[i]);

                }

                delete [n]p; p=NULL;

          4.   int i,*p,n=10;

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

               { p=new int;

                   *(p+i)=random(100);

                   printf(“%4d”,p[i]);

                }

                delete p;

Вопрос 12.2. Пусть создан двумерный динамический массив a[3][3]. Как можно обратиться к элементу a[2][3]?

Ответы:

          1. x=*(*(a+3)+2);

ν        2. x=*(*(a+2)+3);

          3. x=*((&a[0]+2)+3);

          4. x=*(*(a[0]+3)+2);

Вопрос 12.3. Какой из фрагментов правильно выделяет память под массив из 100 указателей?

Ответы:

          1. int **p, n=100;

              p=new *int[n];

          2. int *p, n=100;

              p=(int *)malloc(sizeof(int)*n);

ν        3. int **p, n=100;

              p=new int *[n];

          4. 2. int **p, n=100;

              p=(int *)calloc(sizeof(int*),n);

Глава 13. Динамические структуры данных.

Вопрос 13.1. Пусть объявлена структура spis с полем char data[40] и полем

spis *next. Как создать 1-й элемент односвязного списка?

Ответы:

ν        1. spis *p,*head;

              p=new spis; gets(p->data);

              p->next=NULL; head=p;

          2. spis *p,*head,*pred;

              p=(spis *)malloc(sizeof(spis));

              scanf(“%s”,p->data);

              pred->next=p; head=p;

Вопрос 13.2. Пусть создан односвязный список структур, на начало которого указывает  struct spis *head. Как удалить 1-й элемент из списка?

Ответы:

ν        1. spis *p;

              p=head->next;

              delete head; head=p;

          2. spis *p,*temp;

              temp=head; delete temp;

              p=head->next; head=p;

Вопрос 13.3. Как добавить элемент в конец двусвязного списка, если известен указатель на начало head и на конец tail?

Ответы:

          1. spis *p;

              p=(spis *)malloc(sizeof(spis));

              gets(p->data); tail=p;

              p->next=NULL; p->prev=tail;

              tail->next=p;

ν        2. spis *p;

              p=new spis;

              gets(p->data);

              p->prev=tail; tail->next=p;

              p->next=NULL; tail=p;

Вопрос 13.4. Как удалить предпоследнюю структуру из двусвязного списка, если известен указатель на начало head и на конец tail?

Ответы:

ν        1. spis *p;

              p=tail->prev; p->prev->next=tail;

              tail->prev=tail->prev->prev;

              delete p;

          2. spis *p;

              tail->prev=tail->prev->prev;

              tail->prev->prev->next=tail;

              p=tail->prev; delete p;