Главная / Программирование / Программирование на языке C в Microsoft Visual Studio 2010

Программирование на языке C в Microsoft Visual Studio 2010 - ответы на тесты Интуит

Правильные ответы выделены зелёным цветом.
Все ответы: Курс посвящен программированию на языке С в инструментальной среде Microsoft Visual Studio 2010.
Какие переменные являются фактическими параметрами функции sq()? int sq(int a, int x) { int i, res = 1; for (i=0; i<x; i++) res*= a; return res; } int main(void) { int n=4, b = 3, p; p = sq(n,b); printf("%d^%d = %d\n", n, b, p); return 0; }
(1) a
(2) x
(3) n
(4) b
Функция swap() имеет два аргумента-указателя и выполняет обмен значений элементов: void swap(int *pa, int *pb) { int temp; temp = *pa; *pa = *pb; *pb = temp; } В каком случае вызов функции swap() осуществляется верно?
(1) int main (void) { int a = 10, b = 20; int *x, *y; x = &a; y = &b; printf("Initial values: a = %d, b = %d\n", a, b); swap(x, y); printf("New values: a = %d, b = %d\n", a, b); printf("... Press any key: \n"); _getch(); return 0; }
(2) int main (void) { int a = 10, b = 20; printf("Initial values: a = %d, b = %d\n", a, b); swap(a, b); printf("New values: a = %d, b = %d\n", a, b); printf("... Press any key: \n"); _getch(); return 0; }
(3) int main (void) { int a = 10, b = 20; printf("Initial values: a = %d, b = %d\n", a, b); swap(*a, *b); printf("New values: a = %d, b = %d\n", a, b); printf("... Press any key: \n"); _getch(); return 0; }
(4) int main (void) { int a = 10, b = 20; printf("Initial values: a = %d, b = %d\n", a, b); swap(&a, &b); printf("New values: a = %d, b = %d\n", a, b); printf("... Press any key: \n"); _getch(); return 0; }
Что такое файл?
(1) последовательность символов
(2) последовательность байтов, которая взаимно однозначно соответствует байтам на внешнем устройстве
(3) именованный объект, хранящий данные на каком-либо носителе
Что такое структура?
(1) конечная именованная последовательность однотипных величин
(2) именованный объект, хранящий данные на каком-либо носителе
(3) совокупность нескольких переменных, часто различных типов
Что такое объединение (union) в контексте языка С?
(1) совокупность нескольких переменных, часто различных типов
(2) тип данных, заданных списком принадлежащих ему значений
(3) тип, который позволяет хранить различные типы данных в одном и том же пространстве памяти (но не одновременно)
Какие из перечисленных операций разрешено выполнять над структурами?
(1) копирование структуры как целого (поэлементно)
(2) присваивание структуры как целого (поэлементно)
(3) взятие адреса структуры операцией &
(4) обращение к элементам структуры
Какой разряд байта является младшим?files
(1) 0-й
(2) 1-й
(3) 2-й
(4) 3-й
(5) 4-й
(6) 5-й
(7) 6-й
(8) 7-ой
(9) невозможно определить, так как это зависит от компилятора
Какие функции могут использоваться функциями из других файлов? extern int x, y; extern char ch; static void func1(void) { y = 100; } int func2(int a) { int b; b = a; return b; } extern void func2(void) { x = y/10; ch = 'R'; }
(1) func1
(2) func2
(3) func2
Какая рекурсия называется прямой?
(1) рекурсия, при которой две функции вызывают друг друга
(2) рекурсия, при которой более двух функций вызывают друг друга
(3) рекурсия, при которой функция вызывает сама себя
Что такое директива препроцессора?
(1) инструкция препроцессора
(2) программа, выполняющая предварительную обработку входных данных для другой программы
(3) буферный процессор
Что является достоинством языка С?
(1) эффективность
(2) переносимость
(3) высокая структурированность
(4) невысокие требования к квалификации программиста
Как формально можно определить прототип функции main() с параметрами?
(1) int main (int argc, char argv);
(2) int main (int argc, char *argv[]);
(3) int main (int argc, char **argv);
Какой цикл реализует приведенную структурную схему?files
(1) while
(2) do while
(3) for
Какая схема является структурной схемой условного оператора?
(1) files
(2) files
(3) files
(4) files
Нужно посчитать количество продукции, выпущенной каждым заводом и количество продукции каждого наименования, выпущенной всеми заводами. Вычисленные и исходные данные объединены в таблицу: filesКакой тип массива необходимо использовать для решения поставленной задачи?
(1) одномерный
(2) двумерный
(3) многомерный
Каким образом хранится в памяти массив a, начинающийся по адресу 1000 и объявленный как char a[7]?
(1) files
(2) files
(3) files
Какие элементы могут быть операндами оператора адресации &?
(1) переменная
(2) выражение
(3) константа
(4) элемент массива
Какие преимущества имеет использование указателей для массивов?
(1) повышение производительности
(2) лучшая наглядность и удобство в использовании по сравнению со стандартной записью массивов с индексами
(3) использование меньшего количества памяти
Что такое динамическая память?
(1) оперативная память компьютера, предоставляемая программе до начала ее выполнения
(2) оперативная память компьютера, предоставляемая программе во время ее выполнения
(3) вся доступная оперативная память, которая может быть выделена программе
Что обозначает тот факт, что формальные параметры функции локализованы в ней?
(1) то, что параметры недоступны вне определения функции
(2) то, что параметры доступны вне определения функции
(3) то, что операции над формальными параметрами в теле функции не изменяют значений фактических параметров
(4) то, что операции над формальными параметрами в теле функции изменяют значения фактических параметров
Что произойдет после выполнения приведенной программы? #include <stdio.h> #define n 10 void fun(int *mas, int k); int main( void ) { int arr[n] = {3,4,5,4,4}; int i; fun(arr, n); return 0; } void fun(int *mas, int k) { int i, s = 0; for (i=0; i<k; i++) ++mas[i]; }
(1) будет вычислена сумма всех элементов массива arr
(2) значения всех элементов массива arr будут увеличены на 1
(3) ничего не произойдет, так как функция fun(int *mas, int k) не возвращает значения
Какие объекты рассматриваются в языке С как файлы?
(1) дисковый файл
(2) терминал
(3) принтер
Что в приведенном описании структуры является ее тегом? struct addr { char name[30]; char street[40]; char city[20]; char state[3]; unsigned long int zip; } addr_info, binfo;
(1) addr
(2) name
(3) street
(4) city
(5) state
(6) zip
(7) addr_info
(8) binfo
Что такое перечисление (enum) в контексте языка С?
(1) совокупность нескольких переменных, часто различных типов
(2) тип данных, заданных списком принадлежащих ему значений
(3) тип, который позволяет хранить различные типы данных в одном и том же пространстве памяти (но не одновременно)
В каком случае в функцию fun() передается указатель на структуру?
(1) struct struct_type {int a, b; char ch; }; void fun(struct struct_type STRUCT3); int main (void) { struct struct_type struct2 = {2, 3, 'Z' }; fun(struct2); return 0; } void fun(struct struct_type STRUCT3) { printf("\n %c: %d + %d = %d\n", \ STRUCT3.ch, STRUCT3.a, STRUCT3.b, STRUCT3.a + STRUCT3.b); }
(2) struct struct_type { int a, b; char ch; }; void fun(struct struct_type parm); int main (void) { struct struct_type arg; arg.a = 1000; fun(arg); return 0; } void fun(struct struct_type parm) { printf("\n %d\n", parm.a); }
(3) struct struct_type { int a, b; char ch; }; void fun(struct struct_type *parm); int main (void) { struct struct_type arg,*PTR; PTR = &arg; PTR->a = 999; fun(PTR); return 0; } void fun(struct struct_type *parm) { printf("\n %d\n", parm->a); }
(4) struct struct_type { int a, b; char ch; }; void fun(struct struct_type *parm); int main (void) { struct struct_type arg,*PTR; PTR = &arg; PTR->a = 999; fun(PTR); return 0; } void fun(struct struct_type &parm) { printf("\n %d\n", parm->a); }
Какое утверждение является верным?
(1) 1 байт равен 1 биту
(2) 1 бит содержит 8 байт
(3) 1 байт содержит 8 бит
При какой продолжительности хранения память распределяется в начале выполнения программы и остается занятой на протяжении всего выполнения?
(1) при статической продолжительности хранения
(2) при автоматической продолжительности хранения
(3) при распределенной продолжительности хранения
Какое достоинство имеет использование рекурсии?
(1) компактность записи функции
(2) отсутствие возможности переполнения стека
(3) уменьшение использумой памяти
Какая строка является недопустимой?
(1) #include "test1.h"
(2) #define N 10, #define M 5
(3) #include <stdio.h> #include <conio.h>
Программа запускается с одним аргументом командной строки. Аргументом является строка. Каким образом необходимо задать аргументы командной строки для корректной его обработки при работе программы?
(1) files
(2) files
(3) files
В каком случае при выполнении приведенного кода возникнет зацикливание?
(1) int x=1, y = 1; for (; x < 5; x++) { y = y*2; printf("%d ", x); }
(2) int x, y = 1; for (x = 0; x < 5; x++) { x = y*2; printf("%d ", x); }
(3) int x=1, y = 1; for (; ; x++) { y = y*2; printf("%d ", x); if (x>=5) break; }
(4) int x = 5, y = 1; do y = x*2; while (y<=10);
Какой оператор используется для прерывания программного цикла при некотором условии?
(1) continue
(2) break
(3) return
(4) goto
Каким образом хранится в памяти массив a, начинающийся по адресу 1000 и объявленный как int a[7]?
(1) files
(2) files
(3) files
При выводе какой строки возникнут проблемы и почему? char str1[10] = "Course"; char str2[] = "Lection"; char str3[7] = "Example";
(1) str1, потому что для хранения массива символов выделено больше элементов, чем заполнено при инициализации
(2) str2, потому что при инициализации не указана размерность массива
(3) str3, потому что заданная размерность массива не предусмативает место для хранения нулевого символа
Какие утверждения будут верными после выполнения приведенного фрагмента кода? int x = 99; int *p1, *p2; p1 = &x; p2 = p1;
(1) указатель p2 содержит адрес указателя p1
(2) p2 разыменовывает указатель p1
(3) оба указателя (p1 и р2) ссылаются на х
Приведенная программа копирует строку а в строку b и выводит обе строки на экран: #include <stdio.h> #include <conio.h> int main() { int i; char a[10] = "Test", b[10] = ""; char *pa = a; char *pb = b; for (i=0; i<strlen(a); i++) *pb++ = *pa++; printf("a = %s\n", a); printf("b = %s\n", b); return 0; } Какая программа аналогична приведенной?
(1) #include <stdio.h> #include <conio.h> int main() { int i; char a[10] = "Test", b[10] = ""; char *pa = &a[1]; char *pb = &b[1]; for (i=0; i<strlen(a); i++) pb[i] = pa[i]; printf("a = %s\n", a); printf("b = %s\n", b); return 0; }
(2) #include <stdio.h> #include <conio.h> int main() { int i; char a[10] = "Test", b[10] = ""; char *pa = a[0]; char *pb = b[0]; for (i=0; i<strlen(a); i++) pb[i] = pa[i]; printf("a = %s\n", a); printf("b = %s\n", b); return 0; }
(3) #include <stdio.h> #include <conio.h> int main() { int i; char a[10] = "Test", b[10] = ""; char *pa = &a[0]; char *pb = &b[0]; for (i=0; i<strlen(a); i++) pb[i] = pa[i]; printf("a = %s\n", a); printf("b = %s\n", b); return 0; }
Какие утверждения являются верными?
(1) размер динамически распределяемой области памяти заранее известен
(2) динамически распределяемая область памяти не используется программой
(3) размер динамически распределяемой области памяти ограничен
Какой фрагмент кода содержит ошибку?
(1) double circle(double pi, int R) { return 2*pi*R; } int main(void) { int R=5; double pi=3.14, L; L = circle(pi, R); printf("L = %.2f\n", L); return 0; }
(2) int min(int a, b) { int m = (a<b) ? a : b; return m; } int main(void) { int x=-5, y=5, m; m = min(x,y); printf("min = %d\n", m); return 0; }
(3) int max(int a, int b) { int m = (a>b) ? a : b; return m; } int main(void) { double x=-5, y=5, m; m = max(x,y); printf("max = %d\n", m); return 0; }
Чему будет равно значение переменной s в результате выполнения приведенной программы? #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(a, n, m); printf("Сумма элементов а: %d\n", s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }
(1) 5
(2) 15
(3) 21
Файл g:\test.txt содержит две строки: files Чему будет равно значение переменной i в результате выполнения приведенного фрагмента кода? char str[30], i; FILE *fp; if((fp = fopen("g:\\test.txt", "r"))==NULL) { printf("Ошибка при открытии файла.\n"); exit(1); } fgets(str, 30, fp); i = strlen(str); fclose(fp);
(1) 10
(2) 11
(3) 12
(4) 30
Объявление какой структуры содержит ошибку?
(1) struct Worker { char fio[30]; int date, code; double salary; };
(2) struct List; struct Link { List *p; Link *prev; };
(3) struct Test { int a, b; Test t; };
(4) struct A {int a; double x; }; struct B {A a; double x; };
Задано перечисление numbers: enum numbers {two=2, tree, four, ten=10, eleven, last=ten+40}; Какое значение будет присвоено константе last?
(1) 10
(2) 12
(3) 40
(4) 50
Какие утверждения являются верными для приведенной программы? #define MAX 20 double sum(double, double); int main (void) { struct test { char A[MAX+1]; double ax; char B[MAX+1]; double by; }; struct test AB; printf("\nEnter 1st name: "); gets_s(AB.A, MAX); printf("\nEnter the first real number: "); scanf_s("%lf", &AB.ax); _flushall(); printf("\nEnter 2nd name: "); gets_s(AB.B, MAX); printf("\nEnter the second real number: "); scanf_s("%lf", &AB.by); printf("\n\nThe sum of two numbers %1.2f and %1.2f, %s and %s: %1.2f\n", AB.ax, AB.by, AB.A, AB.B, sum(AB.ax, AB.by)); return 0; } double sum(double x, double y) { return (x + y); }
(1) для корректного выполнения программы структура test должна быть объявлена глобально
(2) в функцию sum передается структура
(3) в функцию sum передаются части структуры
(4) программа не содержит ошибок
Сколько возможных значений может принимать байт?
(1) 2
(2) 255
(3) 256
Какое связывание имеет переменная с областью видимости в пределах блока?
(1) внутреннее связывание
(2) внешнее связывание
(3) не имеет связывания
В каком случае вычисление факториала выполняется с помощью рекурсивной функции?
(1) long fact(long n) { if (n==0 || n==1) return 1; return (n * fact(n-1)); }
(2) long fact(long n) { int i; long m = 1; if (n==0 || n==1) m = 1; else for (i=1; i<=n; i++) m *= i; return m; }
(3) long fact(long n) { if (n==0 || n==1) return 1; return (n>1) ? n * fact(n-1) : 1; }
Почему при использовании макросов с формальными параметрами увеличивается скорость выполнения кода?
(1) потому что объявление макроса находится в начале файла
(2) потому что макрос не чувствителен к типу данных
(3) потому что в таких случаях не надо тратить ресурсы на вызов функций
Какая папка предназначена для хранения файлов с исходным кодом в проекте, созданном в среде Microsoft Visual Studio 2010? files
(1) External Dependencies
(2) Header Files
(3) Resource Files
(4) Source Files
С каким количеством аргументов командной строки запускается программа (считается, что аргумент в заданном виде обрабатывается корректно?files
(1) 1
(2) 2
(3) 3
Чему будет равно значение переменной y в результате выполнения приведенного фрагмента кода? int x = 5, y; for(y=1; y<=x; ++y) printf("%d ", y); y = x*2;
(1) 1
(2) 10
(3) 11
При каких значениях переменной A значение переменной cond будет равно 1? int cond; int A = 1; cond = (A >= 100) && (A <= 150);
(1) при A = 50
(2) при A = 100
(3) при A = 120
(4) при A = 150
(5) при A = 200
По какой формуле вычисляется общий размер одномерного массива в байтах?
(1) всего байт = размер типа в байтах * количество элементов
(2) всего байт = число строк * число столбцов * размер типа в байтах
(3) всего байт = размер1* размер2*...* размерN *размер типа в байтах
Чему будет равно значение переменной n после выполнения приведенного фрагмента кода? int n = 0; char str2[10] = "Lection\0"; n = strlen(str2);
(1) 7
(2) 8
(3) 9
Чему будут равны значения переменных a, b и c после выполнения приведенного фрагмента кода? char a='A', b='B', c='C'; char *pc; pc = &a; c = *pc; *pc = 'C'; b = a;
(1) a = 'A', b = 'A', c = 'A'
(2) a = 'C', b = 'A', c = 'A'
(3) a = 'C', b = 'C', c = 'A'
Какая программа реализует сортировку массива целых чисел по возрастанию методом "пузырька" (методом прямого обмена)?
(1) #include <stdio.h> int main() { int i, j, N, buf; int arr[] = {3, 2, 4, 5, 1}; int *ptr1, *ptr2; N = sizeof(arr)/sizeof(arr[0]); for (i=0; i<N; i++) { ptr1 = &arr[i]; for (j=0; j<N-1; j++) { if (*ptr1 > *(ptr1+1)) { buf = *ptr1; *ptr1 = *(ptr1+1); *(ptr1+1) = buf; } }; }; return 0; }
(2) #include <stdio.h> int main() { int i, j, N, buf; int arr[] = {3, 2, 4, 5, 1}; int *ptr1, *ptr2; N = sizeof(arr)/sizeof(arr[0]); ptr1 = arr; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { if (*ptr1 > *(ptr1+1)) { buf = *ptr1; *ptr1 = *(ptr1+1); *(ptr1+1) = buf; } ptr1++; }; return 0; }
(3) #include <stdio.h> int main() { int i, j, N, buf; int arr[] = {3, 2, 4, 5, 1}; int *ptr1, *ptr2; N = sizeof(arr)/sizeof(arr[0]); ptr1 = arr; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { ptr1 = &arr[j]; if (*ptr1 > *(ptr1+1)) { buf = *ptr1; *ptr1 = *(ptr1+1); *(ptr1+1) = buf; } }; return 0; }
В каком случае память выделяется динамически? int arr1[10] = {1,2,3,4,5}; (1) int *arr2 = (int *)calloc(10, sizeof(int)); (2) int *arr3 = (int *)malloc(10*sizeof(int)); (3)
(1) в случае (1)
(2) в случае (2)
(3) в случае (3)
Функция is_in определяет, входит ли символ c в строку s: int is_in(char *s, char c) (1) { while(*s) (2) if(*s==c) return 1; (3) else s++; (4) return 0; (5) } Что произойдет при вызове функции is_in("Lection 10", 'i')?
(1) после выполннеия оператора в строке (3) произойдет выход из функции
(2) после выполннеия оператора в строке (5) произойдет выход из функции
(3) при выполнении функции возникнет ошибка, так как функция содержит два оператора return
Какая функция возвращает указатель?
(1) void fun(int *mas, int k) { int i, s = 0; for (i=0; i<k; i++) ++mas[i]; }
(2) int *out2(int A[], int B[], int n) { int i; int *ptr = (int *)calloc(n, sizeof(int)); for (i = 0; i < n; i++) ptr[i] = A[i] + B[i]; return ptr; }
(3) int sum(int* mas, int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }
(4) char *xgets(char *s) { char ch, *p; int t; p = s; for(t=0; t<80; ++t){ ch = getchar(); switch(ch) { case '\n': s[t] = '\0'; /* завершает строку */ return p; case '\b': if(t>0) t--; break; default: s[t] = ch; } } s[79] = '\0'; return p; }
Какие действия выполняет приведенная программа? #include <stdio.h> int main( void ) { FILE *stream; char list[30]; int i, numread, numwritten; if( (stream = fopen("g:\\fread.out", "w+t")) != NULL ) { for ( i = 0; i < 26; i++ ) list[i] = (char)('z' - i); numwritten = fwrite( list, sizeof( char ), 26, stream ); printf( "Wrote %d items\n", numwritten ); fclose( stream ); } else printf( "Problem opening the file\n" ); if( (stream = fopen("g:\\fread.out", "r+t" )) != NULL ) { numread = fread( list, sizeof( char ), 26, stream ); printf( "Number of items read = %d\n", numread ); printf( "Contents of buffer = %.26s\n", list ); fclose( stream ); } else printf( "File could not be opened\n" ); }
(1) создает файл fread.txt
(2) записывает в файл латинский алфавит в обратном порядке
(3) читает из файла сформированную строку и выводит ее на экран
Объявлена структура: struct addr { char name[30]; char street[40]; char city[20]; char state[3]; unsigned long int zip; }; Каким образом данная структура хранится в памяти?
(1) files
(2) files
(3) files
Сколько памяти будет выделено для хранения приведенного объединения? union hold { int digit; double bigf; char letter; };
(1) 1 байт
(2) 4 байта
(3) 8 байт
Функция f1() выводит на экран переданное ей значение. Каким образом должна быть описана данная функция для корректного выполнения приведенной программы? struct struct_type { int a, b; char ch; } ; int main(void) { struct struct_type arg; arg.a = 1000; f1(arg); return 0; }
(1) void f1(struct struct_type *parm) { printf("%d", parm.a); }
(2) void f1(struct_type parm) { printf("%d", parm.a); }
(3) void f1(struct struct_type parm) { printf("%d", parm.a); }
Какое из перечисленных шестнадцатиричных чисел является наибольшим?
(1) CA1
(2) A3F
(3) D6F
В каких функциях видна переменная t? int c = 9; int sum(int a, int b) { return a+b; } int t = 8; int main(void) { int n=4, m=3, s1, s2; s1 = sum(n,m); s2 = mul(n,m); return 0; } int mul(int a, int b) { return a*b; }
(1) main()
(2) sum()
(3) mul()
Задана функция вычисления факториала: long fact(long n) { return (n>1) ? n * fact(n-1) : 1; } Когда завершится рекурсивный процесс?
(1) когда значение переменной n будет равно 0
(2) когда значение переменной n будет равно 1
(3) когда значение переменной n будет больше 1
Чему будет равно значение переменной x в результате выполнения приведенной программы? #include <stdio.h> #define SQR(x) (x*x) int main() { int x, y=2; x = SQR(y+1); printf("x = %d", x); return 0; }
(1) 4
(2) 5
(3) 7
(4) 9
Какой файл проекта, созданного в Microsoft Visual Studio 2010, содержит настройки среды Visual Studio (информацию об открытых окнах, их расположении и прочих пользовательских параметрах)?files
(1) Example.sdf
(2) Example.sln
(3) Example.suo
Приведенная программа выводит в файл значения аргументов командной строки: int main(int argc, char* argv[]) { char name[30]; FILE *f; f = fopen("g:\\test.txt", "w+"); fprintf(f, "%s\n%s", argv[0], argv[1]); return 0; } Запуск программы выполняется из командной строки с помощью команды Example.exe arg1 arg2. Чему будет равно значение argv[0]?
(1) arg1
(2) arg2
(3) Example.exe
Ниже приведены несколько вариантов программы для нахождения всех делителей целого положительного числа (условный оператор if (!(num % div)) определяет, делится ли число num на div без остатка). В каком случае цикл будет выполнен хотя бы один раз для переменной num = 3?
(1) int num, half, div; printf("Введите число: "); scanf_s("%d", &num); half = num / 2; div = 2; while (div <= half) { if (!(num % div)) printf("%d ", div); div++; }
(2) int num, half, div; printf("Введите число: "); scanf_s("%d", &num); half = num / 2; div = 2; do { if (!(num % div)) printf("%d ", div); div++; } while (div <= half);
(3) int num, half, div; printf("Введите число: "); scanf_s("%d", &num); half = num / 2; for (div = 2; div <= half; div++) { if (!(num % div)) printf("%d ", div); }
В результате выполнения какого фрагмента кода на экран будут выведены числа от 0 до 10?
(1) for(t=0; t<100; t++) { printf("%d \n", t); if(t==10) t=100; }
(2) int t; for(t=0; t<100; t++) { printf("%d \n", t); if(t==10) break; }
(3) int t; for(t=0; t<100; t++) { if(t==10) printf("%d \n", t); }
При инициализации какого массива возникнет ошибка?
(1) int arr1[] = {1,2,3,4,5};
(2) int arr2[][2] = {{1,2,3}, {4,5,6}};
(3) int arr2[][] = {{1,2}, {3,4}, {5,6}};
(4) int XYZ[][3][4] = { { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }, { {13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24} } };
Заданы две строки: char str1[10] = "Lection"; char str2[10] = "Lection\0"; Какое утверждение является верным?
(1) strcmp(str1, str2) < 0
(2) strcmp(str1, str2) = 0
(3) strcmp(str1, str2) > 0
Что делает приведенная программа? #include <stdio.h> #include <conio.h> int main() { int n=0, i=0, j=0; char ch, str[30]=""; char *ptr1, *ptr2; printf("Введите строку: "); scanf("%s", str); printf("Введите символ: "); ch = _getche(); ptr1 = str; while(*ptr1!='\0') { ptr2 = str; while (*ptr2!='\0') { if(*ptr1==*ptr2) n++; ++ptr2; } printf("\n%c - %d", *ptr1, n); n = 0; ++ptr1; } printf("\n"); return 0; }
(1) определяет количество символов в строке
(2) определяет количество вхождений заданного символа в строку
(3) определяет количество вхождений каждого символа в строку
Требуется написать программу, которая копирует введенную пользователем строку str1 в строку str2 в обратном порядке. Например, если пользователь ввел строку string, то str2 в результате выполнения данной программы должна быть равна gnirts. Какая программа выполняет поставленную задачу?
(1) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1 + strlen(str1) - 1; ptr2 = str2; while (*ptr1) { if (!(*ptr1)) *ptr2 = '\0'; *ptr2 = *ptr1; ptr1--; ptr2++; } printf("str2 = %s\n", str2); return 0; }
(2) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1 + strlen(str1) - 1; ptr2 = str2; while (ptr1>=str1) { if (ptr1<str1) *ptr2 = '\0'; *ptr2 = *ptr1; ptr1--; ptr2++; } printf("str2 = %s\n", str2); return 0; }
(3) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1 + strlen(str1); ptr2 = str2; while (ptr1>=str1) { if (ptr1<str1) *ptr2 = '\0'; *ptr2 = *ptr1; ptr1--; ptr2++; } printf("str2 = %s\n", str2); return 0; }
В каком случае будет выделен наибольшой размер памяти?
(1) int *arr = (int *)malloc(10*sizeof(int));
(2) double *arr = (double *)calloc(6, sizeof(double));
(3) char arr[] = "Lection 10";
В каких программах используются прототипы функций?
(1) int min(int a, b) { int m = (a<b) ? a : b; return m; } int main(void) { int x=-5, y=5, m; m = min(x,y); printf("min = %d\n", m); return 0; }
(2) #include <stdio.h> #include <conio.h> int main(void) { void printMessage (void); printMessage(); printf("\nPress any key: "); _getch(); return 0; } void printMessage (void) { printf("Function for Lection 10\n"); return; printf("123\n"); }
(3) #include <stdio.h> #include <string.h> int search(char *p[], char *name); char *names[] = { "Сергей", "Юрий", "Ольга", "Игорь", NULL}; int main(void) { if(search(names, "Ольга") != -1) printf("Ольга есть в списке.\n"); if(search(names, "Павел") == -1) printf("Павел в списке не найден.\n"); return 0; } int search(char *p[], char *name) { int t; for(t=0; p[t]; ++t) if(!strcmp(p[t], name)) return t; return -1; }
В результате выполнения какой программы значением переменной s будет строка в верхнем регистре?
(1) void print_upper(char *string); int main(void) { char s[80] = "Question for the lection"; print_upper(s); printf("\s = %s\n", s); return 0; } void print_upper(char *string) { int t; for(t=0; string[t]; ++t) putchar(string[t]); putchar('\n'); }
(2) void print_upper(char *string); int main(void) { char s[80] = "Question for the lection"; print_upper(s); return 0; } void print_upper(char *string) { int t; for(t=0; string[t]; ++t) string[t] = toupper(string[t]); }
(3) void print_upper(char *string); int main(void) { char s[80] = "Question for the lection"; print_upper(s); printf("\s = %s\n", s); return 0; } void print_upper(char *string) { int t; char str[80] = ""; strcpy(str, string); for(t=0; string[t]; ++t) str[t] = toupper(str[t]); }
В каком случае выполняется пакетная запись массива в файл?
(1) int main( void ) { int i, j, k, buf; FILE *stream; char str[10] = "Lection 11"; if( (stream = fopen("g:\\fread.txt", "w+t")) == NULL ) printf( "Problem opening the file\n" ); else fwrite(str,sizeof(char), sizeof(str)/sizeof(char), stream); fclose(stream); return 0; }
(2) #define N 5 int main( void ) { int i, j, k, buf; FILE *stream; int arr[N] = {3, 2, 4, 5, 1}; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { if (arr[j] > arr[j+1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } }; if( (stream = fopen("g:\\fread.txt", "w+t")) == NULL ) printf( "Problem opening the file\n" ); else for (i=0; i<N; i++) fprintf(stream, "%d ", arr[i]); fclose(stream); return 0; }
(3) #define N 5 int main( void ) { int i, j, k, buf; FILE *stream; int arr[N] = {3, 2, 4, 5, 1}; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { if (arr[j] > arr[j+1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } }; if( (stream = fopen("g:\\fread.txt", "w+t")) == NULL ) printf( "Problem opening the file\n" ); else fwrite(arr,sizeof(int), sizeof(arr)/sizeof(int), stream); fclose(stream); return 0; }
Какая программа содержит ошибку?
(1) struct { char title[51]; char author[51]; int year; int page; float price; } lb; int main (void) { strcpy_s(lb.title, 50, "Экстремальное вождение. Гоночные секреты"); strcpy_s(lb.author, 50, "М.Г. Горбачев"); lb.year = 2007; lb.page = 303; lb.price = 200.00F; printf("\nTitle:\t\t\t %s\n", lb.title); printf("Author:\t\t\t %s\n", lb.author); printf("Year:\t\t\t %d\n", lb.year ); printf("Number of pages:\t %d p.\n", lb.page ); printf("Price:\t\t\t %1.2f y.e.\n", lb.price); return 0; }
(2) int main (void) { struct Book { char title[51]; char author[51]; int year; int page; float price; } lb[2]; int i; strcpy_s(lb[0].title, 50, "Экстремальное вождение. Гоночные секреты"); strcpy_s(lb[0].author, 50, "М.Г. Горбачев"); lb[0].year = 2007; lb[0].page = 303; lb[0].price = 200.00F; strcpy_s(lb[1].title, 50, "Маракотова бездна"); strcpy_s(lb[1].author, 50, "А.К. Дойл"); lb[1].year = 1993; lb[1].page = 285; lb[1].price = 150.40F; for (i=0; i<2; i++) { printf("\nTitle:\t\t\t %s\n", lb[i].title); printf("Author:\t\t\t %s\n", lb[i].author); printf("Year:\t\t\t %d\n", lb[i].year ); printf("Number of pages:\t %d p.\n", lb[i].page ); printf("Price:\t\t\t %1.2f y.e.\n\n", lb[i].price); } return 0; }
(3) struct Book { char title[51]; char author[51]; int year; int page; float price; }; int main (void) { Book *lb; strcpy_s(lb.title, 50, "Экстремальное вождение. Гоночные секреты"); strcpy_s(lb.author, 50, "М.Г. Горбачев"); lb.year = 2007; lb.page = 303; lb.price = 200.00F; printf("\nTitle:\t\t\t %s\n", lb.title); printf("Author:\t\t\t %s\n", lb.author); printf("Year:\t\t\t %d\n", lb.year ); printf("Number of pages:\t %d p.\n", lb.page ); printf("Price:\t\t\t %1.2f y.e.\n", lb.price); return 0; }
Чему будет равно значение переменной str после выполнения приведенной программы? union test { char ch1[5]; char ch2[2]; char ch3[1]; }; int main(void) { union test t; char *str; strcpy(t.ch1, "test"); strcpy(t.ch2, "be"); t.ch3[0] = 'w'; str = t.ch1; return 0; }
(1) test
(2) best
(3) west
(4) be
(5) we
(6) w
Какая программа не содержит ошибок?
(1) struct struct_type { int a, b; char ch; } ; struct struct_type2 { int a, b; char ch; } ; void f1(struct struct_type2 parm); int main(void) { struct struct_type2 arg; arg.a = 1000; f1(arg); return 0; } void f1(struct struct_type2 parm) { printf("%d", parm.a); }
(2) struct struct_type { int a, b; char ch; } ; struct struct_type2 { int a, b; char ch; } ; void f1(struct struct_type2 parm); int main(void) { struct struct_type2 a, *arg; arg = &a; arg->a = 1000; f1(arg); return 0; } void f1(struct struct_type2 parm) { printf("%d", parm.a); }
(3) struct struct_type { int a, b; char ch; } ; struct struct_type2 { int a, b; char ch; } ; void f1(struct struct_type2 parm); int main(void) { struct struct_type arg; arg.a = 1000; f1(arg); return 0; } void f1(struct struct_type2 parm) { printf("%d", parm.a); }
Что такое битовое поле?
(1) любое поле, после имени которого через двоеточие указана длина поля в битах
(2) поле, над которым выполняются побитовые операции
(3) особый вид полей структуры
В каком случае переменные a и b видны в функции main()?
(1) int main (void) { printf("a = %d; b = %d\n", a, b); printf("Press any key: "); _getch(); return 0; } int a = 33, b = 34;
(2) int a = 33, b = 34; int main (void) { printf("a = %d; b = %d\n", a, b); printf("Press any key: "); _getch(); return 0; }
(3) int main (void) { extern int a, b; printf("a = %d; b = %d\n", a, b); printf("Press any key: "); _getch(); return 0; } int a = 33, b = 34;
Что такое глубина рекурсии?
(1) условие, которое будет удовлетворено и при котором функция выполняет свою задачу без рекурсивных вызовов
(2) число рекурсивных вызовов в каждый конкретный момент времени
(3) максимальное число рекурсивных вызовов без возвратов, которое происходит во время выполнения программы
В программе задан макрос #define MAX(x, y) ((x)>(y) ? (x) : (y)). В какой из приведенных программ он может быть использован?
(1) int main() { double x, y, z; printf("Введите два числа (через пробел): "); scanf("%d %d", &x, &y); z = MAX(x+10, y); printf("Наибольшим числом является %d", z); return 0; }
(2) int main() { char a, b; printf("Введите два символа (через пробел): "); scanf("%c %c", &a, &b); printf("Наибольшим числом является %c", MAX(a, b)); return 0; }
(3) int main() { float x, y; printf("Введите два числа (через пробел): "); scanf("%f %f", &x, &y); printf("Наибольшим числом является %f", MAX(x, y)); return 0; }
Переменные x и y объявлены следующим образом: int x; short y; Какие утверждения являются верными при выполнении арифметического выражения x + y?
(1) значение x будет преобразовано кshort
(2) значение y будет преобразовано к int
(3) результат выражения получит тип int
(4) результат выражения получит тип short
Приведенная программа формирует сообщение об ошибке из отдельных строк в зависимости от значения аргумента командной строки, который задает степень критичности ошибки: #include <stdio.h> #include <conio.h> #include <stdarg.h> #include <stdlib.h> #include <locale.h> void error(int severity, ... ); int main(int argc, char* argv[]) { char err[][30] = {"Сообщение1", "Сообщение2"}; int n; setlocale (LC_ALL, "rus"); n = argv[1]; switch (n) { case 0: error(0, "Ошибка!", '\0'); break; case 1: error(0, "Ошибка!", err[0], '\0'); break; default: error(1, "Ошибка!", err[0], err[1], '\0'); } return 0; } void error(int severity, ... ) { va_list ap; va_start(ap, severity); for (;;) { char *p = va_arg(ap, char*); if (p == '\0') break; printf("%s ", p); } va_end(ap); printf("\n"); } Программа запускается из командной строки командой Example.exe 0. Какое сообщение будет выведено на экран?
(1) Ошибка!
(2) Ошибка! Сообщение1
(3) Ошибка! Сообщение1 Сообщение2
Необходимо написать программу для проверки пароля, вводимого пользователем. Программа должна предоставлять пользователю только три попытки ввода пароля. Верный пароль - число 95. Какой фрагмент кода реализует поставленную задачу?
(1) int i, psw = 0; printf("Введите пароль: "); for (i=0; i<3 && psw!=95; i++) { scanf("%d", &psw); i++; }
(2) int i = 0, psw = 0; printf("Введите пароль: "); while (i<3 && psw!=95) { scanf("%d", &psw); i++; }
(3) int i, psw = 0; printf("Введите пароль: "); while (psw!=95) { for (i=0; i<3; i++) scanf("%d", &psw); }
В результате выполнения какого фрагмента кода значение переменной m будет равно 8?
(1) int k = 0, m; goto lbl; {int a = 3, b = 4; k = a + b; lbl: m = k + 1; }
(2) int k = 0, m; int a = 3, b = 4; k = a + b; goto lbl; lbl: m = k + 1;
(3) int k = 0, m; goto lbl; lbl: {int a = 3, b = 4; k = a + b; m = k + 1; }
В каком случае сумма всех элементов массива будет подсчитана правильно?
(1) #include <stdio.h> #define N 10 int main() { int i, sum; int arr[N] = {3, 4, 5, 4, 4}; for (i = 1, sum = 0; i<=N; i++) sum += arr[i]; printf("Сумма элементов: %d\n", sum); return 0; }
(2) #include <stdio.h> #define N 10 int main() { int i, sum; int arr[N] = {3, 4, 5, 4, 4}; for (i = 0, sum = 0; i<N; i++) sum += arr[i]; printf("Сумма элементов: %d\n", sum); return 0; }
(3) #include <stdio.h> #define N 10 int main() { int i, sum; int arr[N] = {3, 4, 5, 4, 4}; for (i = 0, sum = 0; i<N+1; i++) sum += arr[i]; printf("Сумма элементов: %d\n", sum); return 0; }
Ниже приведено несколько вариантов программы для преобразования строчных букв в прописные. Преобразование выполняется на основе таблицы кодов ASCII и основано на том, что для всех букв латинского алфавита код прописной буквы больше кода строчной буквы на 32. В результате выполнения какой программы заданная пользователем строка из строчных букв будет выведена на экран прописными буквами?
(1) #include <stdio.h> #include <string.h> #define N 10 int main() { char ch, strLow[N]; int i = 0; printf("Enter string in low register (%d symbols): \n", N); scanf("%s", strLow); ch= strLow[0]; while (ch!='\0') { putchar(strLow[i] - 32); i++; ch= strLow[i]; } printf("\n"); return 0; }
(2) #include <stdio.h> #include <string.h> #define N 10 int main() { char strLow[N]; int i; printf("Enter string in low register (%d symbols): \n", N); scanf("%s", strLow); for (i=0; i<strlen(strLow); i++) putchar(strLow[i] + 32); printf("\n"); return 0; }
(3) #include <stdio.h> #include <string.h> #define N 10 int main() { char strLow[N]; int i; printf("Enter string in low register (%d symbols): \n", N); scanf("%s", strLow); for (i=0; i<strlen(strLow); i++) putchar(strLow[i] - 32); printf("\n"); return 0; }
В результате выполнения какого фрагмента кода значение разности p1 - p2 будет не больше 2?
(1) char str[10] = "Test", *p1, *p2; p1 = str; p2 = p1; p2--; p1++;
(2) long num=3, *p1, *p2; p2 = &num; p1 = p2; p1++;
(3) char str[10] = "Test", *p1, *p2; p1 = str; p2 = p1; p1++;
(4) short num=10, *p1, *p2; p1 = &num; p2 = p1; p1++;
Какая схема соответсвует заданному фрагменту кода? int x = 88, *ptr1, **ptr2; ptr1 = &x; ptr2 = &ptr1;
(1) files
(2) files
(3) files
Задан фрагмент кода: int n, m; char *ptr; printf(&\nEnter a dimention of character array: &); scanf_s(&%d&, &n); _flushall(); ptr = (char *)malloc((n+1)*sizeof(char)); if (!ptr) { printf(&\nERROR! Out of memmory (error in malloc() function). Press any key...&); _getch(); exit(1); } printf(&Enter a character array (not more than %d characters): &, n); gets_s(ptr, n+1); m = strlen(ptr); printf(&\nStart line: %s&, ptr); ptr = (char *)realloc(ptr, (m+2)*sizeof(char)); if (!ptr) { printf(&\nERROR! Out of memmory (error in realloc() function). Press any key...&); _getch(); exit(1); } strcat_s(ptr, m+2, &!&); printf(&\nStart line and character \&%c\&: %s&, '!', ptr); free (ptr); В запросе размерности массива пользователь задал 80. В запросе ввода строки пользователь ввел строку "Lection 9". Для чего в данном случае будет использована функция realloc()?
(1) для увеличения размерности выделяемой памяти
(2) для уменьшения размерности выделяемой памяти
(3) для реализации дальнейшего добавления символа '!' к строке, заданной пользователем
Чему будет равно значение переменной x в результате выполнения приведенной программы? #include <stdio.h> #include <stdarg.h> int average(int first, ... ); int main( void ) { int x = average(2, 3, 4, -1); return 0; } int average( int first, ... ) { int count = 0, sum = 0, i = first; va_list marker; va_start(marker, first); while( i != -1 ) { sum += i; count++; i = va_arg(marker, int); } va_end(marker); return( sum ? (sum / count) : 0 ); }
(1) 1
(2) 2
(3) 3
Функция sum выполняет сложение двух одномерных массивов и возвращает результат через указатель: int *sum(int A[], int B[], int n) { int i; int *ptr = (int *)calloc(n, sizeof(int)); for (i = 0; i < n; i++) ptr[i] = A[i] + B[i]; return ptr; } В какой программе вызов функции sum выполняется верно?
(1) int main (void) { int i, n; int A[] = {1,2,3,4,5}, B[] = {2,2,2,2,2}; int ptrAB; n = (sizeof(A)/sizeof(A[0])); ptrAB = sum(A, B, n); printf("Result from function: "); for (i = 0; i < n; i++) printf(" %d", ptrAB[i]); free(ptrAB); return 0; }
(2) int main (void) { int i, n; int A[] = {1,2,3,4,5}, B[] = {2,2,2,2,2}; int *ptrAB = NULL; n = (sizeof(A)/sizeof(A[0])); *ptrAB = sum(A, B, n); printf("Result from function: "); for (i = 0; i < n; i++) printf(" %d", ptrAB[i]); free(ptrAB); return 0; }
(3) int main (void) { int i, n; int A[] = {1,2,3,4,5}, B[] = {2,2,2,2,2}; int *ptrAB = NULL; n = (sizeof(A)/sizeof(A[0])); ptrAB = sum(A, B, n); printf("Result from function: "); for (i = 0; i < n; i++) printf(" %d", ptrAB[i]); free(ptrAB); return 0; }
В каком случае при самом первом запуске программы в файл будет записан лог работы программы, содержащий описание всех выполненных в программе действий?
(1) int min(int, int); void AddToLog(FILE*, char*); int main(void) { FILE *fp; int x, y, m; if( (fp = fopen("g:\\log.txt", "r+")) == NULL ) printf( "Problem opening the file\n" ); x = -5; AddToLog(fp, "x was initializated\n"); y = 5; AddToLog(fp, "y was initializated\n"); m = min(x,y); AddToLog(fp, "min() function was called\n"); if (fp != NULL) fclose(fp); return 0; } int min(int a, int b) { int m = (a<b) ? a : b; return m; } void AddToLog(FILE *fp, char *str) { if (fp != NULL) fputs(str, fp); }
(2) int min(int, int); void AddToLog(FILE*, char*); int main(void) { FILE *fp; int x, y, m; if( (fp = fopen("g:\\log.txt", "a")) == NULL ) printf( "Problem opening the file\n" ); x = -5; AddToLog(fp, "x was initializated\n"); y = 5; AddToLog(fp, "y was initializated\n"); m = min(x,y); AddToLog(fp, "min() function was called\n"); if (fp != NULL) fclose(fp); return 0; } int min(int a, int b) { int m = (a<b) ? a : b; return m; } void AddToLog(FILE *fp, char *str) { if (fp != NULL) fputs(str, fp); }
(3) int min(int, int); void AddToLog(FILE*, char*); int main(void) { FILE *fp; int x, y, m; if( (fp = fopen("g:\\log.txt", "w+t")) == NULL ) printf( "Problem opening the file\n" ); x = -5; AddToLog(fp, "x was initializated\n"); y = 5; AddToLog(fp, "y was initializated\n"); m = min(x,y); AddToLog(fp, "min() function was called\n"); if (fp != NULL) fclose(fp); return 0; } int min(int a, int b) { int m = (a<b) ? a : b; return m; } void AddToLog(FILE *fp, char *str) { if (fp != NULL) fputs(str, fp); }
Каким образом должна быть объявлена структура Account и переменные acc1 и acc2 для корректного выполнения приведенной программы? void PrintStruct(char*, int, int); int main (void) { <Объявление структуры Account и переменных acc1, acc2> acc2 = &acc1; acc1.account = 346578; acc1.name = "Ivanov"; acc1.balance = 30000; PrintStruct(acc1.name, acc1.account, acc1.balance); acc2->account = 90005; acc2->name = "Pertov"; acc2->balance = 46000; PrintStruct(acc2->name, acc2->account, acc2->balance); return 0; } void PrintStruct(char *str, int a, int b) { printf("Name: %s\n", str); printf("Account: %d\n", a); printf("Balance: %d\n\n", b); }
(1) struct Account { int account; char name[30]; int balance; } acc1, *acc2;
(2) struct Account { int account; char *name; int balance; } *acc1, *acc2;
(3) struct Account { int account; char *name; int balance; } acc1, *acc2;
В какой программе выполняется верное обращение к полям объединения?
(1) int main(void) { union distance { int miles; long meters; } walk; walk->miles = 5; printf("Пройденное расстояние в милях %d\n", walk->miles); walk->meters = 10000; printf("Пройденное расстояние в метрах %d\n", walk->meters); return 0; }
(2) int main(void) { union distance { int miles; long meters; }; miles = 5; printf("Пройденное расстояние в милях %d\n", miles); meters = 10000; printf("Пройденное расстояние в метрах %d\n", meters); return 0; }
(3) int main(void) { union distance { int miles; long meters; } walk; walk.miles = 5; printf("Пройденное расстояние в милях %d\n", walk.miles); walk.meters = 10000; printf("Пройденное расстояние в метрах %d\n", walk.meters); return 0; }
Чему будут равны значения полей структурной переменной s после выполнения приведенной программы? typedef struct { char fio[30]; int group; float average; } student; void Init(student*); int main(void) { student s, *st; int i; st = &s; Init(st); return 0; } void Init(student *st) { printf("\nEnter name: "); scanf("%s", st->fio); printf("\nEnter group: "); scanf("%d", &st->group); printf("\nEnter average mark: "); scanf("%f", &st->average); }
(1) данным, которые пользователь введет с клавиатуры
(2) структура будет пустой, так как при выходе из фукнции Init значения всех локальных переменных очистятся
(3) при выполнении программы возникнет ошибка, так как переменная s не инициализирована
Какая программа содержит ошибку?
(1) int main(void) { struct test { unsigned int : 3; unsigned int f1 : 1; unsigned int f2 : 1; unsigned int f3 : 1; unsigned int type : 8; unsigned int index : 18; }; int b; struct test t; t.f1 = 10; t.type = 3439; b = t.f1 + t.type; printf("b = %d\n", b); return 0; }
(2) int main(void) { struct test { unsigned int : 3; unsigned int f1 : 1; unsigned int f2 : 1; unsigned int f3 : 1; unsigned int type : 8; unsigned int index : 18; }; int b; struct test t, *pt; pt = &t; pt->f1 = 11; t.type = 3439; b = t.f1 + t.type; printf("b = %d\n", b); return 0; }
(3) int main(void) { struct test { unsigned int : 3; unsigned int f1 : 1; unsigned int f2 : 1; unsigned int f3 : 1; unsigned int type : 8; unsigned int index : 18; }; int a : 4, b; struct test t; t.type = 3439; b = a = t.type; return 0; }
Чему будет равно значение переменной s после выполнения приведенного фрагмента кода? int test(); int a = 1; int main (void) { int b, s; extern int x; static int c; int a; a = 2; s = test(); return 0; } int test() { int t = a; return t; }
(1) 1
(2) 2
(3) 3
В какой программе используется косвенная рекурсия?
(1) void dec2bin(unsigned long int); int main (void) { unsigned long int n; setlocale(LC_ALL, "Russian"); printf("\n\t Введите целое десятичное число\n (или не числовой символ для завершения программы): "); while (scanf_s("%ul", &n) == 1) { printf("\n Двоичный эквивалент: "); dec2bin(n); printf("\n\n\t Введите целое десятичное число\n (или не числовой символ для завершения программы): "); } return 0; } void dec2bin(unsigned long int n) { int r; r = n % 2; if (n >= 2 ) dec2bin(n/2); printf("%d", r); return; }
(2) int gcd(int a, int b); int main (void) { int a = 0, b = 0; int in; do { printf("\n Enter the two different natural numbers, through the gap: "); in = scanf_s("%d%d", &a, &b); if (in != 2) exit(1); if ( (a != b) && (b != 0) ) break; if (b == 0) a = b; } while ( (a == b) ); printf("\n a = %d, b = %d, GCD = %d; \n", a, b, gcd(a,b)); return 0; } int gcd(int a, int b) { if ( (a % b) == 0) return b; else return gcd(b, a % b); }
(3) void fillOnly(int); void free_n(int); void fill_n(int); int main (void) { int n = 1; int in = 1; printf("\n Enter a length of string (naturel number): "); in = scanf_s("%i", &n); if (in != 1 || n < 1 || n > 15) { printf("\n Error input. Press any key to exit: "); _getch(); exit(0); } puts("\n\tResult:"); fill_n(n); printf("\n\n Press any key to exit: "); _getch(); return 0; } void fillOnly(int n) { if (n == 1) printf("\t%+3d\n", 1); else { fillOnly(n-1); printf("\t%+3d\n", n); free_n(n-1); } } void free_n(int n) { if (n == 1) printf("\t%+3d\n", -1); else { fillOnly(n-1); printf("\t%+3d\n", -n); free_n(n-1); } } void fill_n(int n) { if (n == 1) printf("\t%+3d\n", 1); else { if (n == 2) printf("\t%+3d\n\t%+3d\n", 1, 2); else { fillOnly(n-1); printf("\t%+3d\n", n); fill_n(n-2); } } }
Приведенная программа выводит на экран сочетания имён и фамилий, которые хранятся в подключаемом файле arr.txt: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <locale.h> #ifndef ARR #define ARR #include "..\arr.txt" #endif int main (void) { int i = 0 , j = 0, n; setlocale (LC_ALL, "rus"); printf("Введите количество человек (от 1 до 3): "); scanf("%d", &n); if (n<1 || n>3) { printf("Ошибка ввода данных. Нажмите любую клавишу: "); _getch(); exit(1); } #ifdef ARR for (i=0; i<n; i++) printf("%d. %s %s\n", i+1, names[i], surnames[i]); #endif return 0; } Содержание файла arr.txt: char *names[] = {"Иван", "Пётр", "Илья"}; char *surnames[] = {"Иванов", "Пётров", "Ильин"}; Где должен храниться подключаемый файл?
(1) в одном и том же каталоге с исполняемым файлом
(2) на один уровень выше испольняемого файла
(3) на два уровня выше исполняемого файла
В программе объявлены переменные: int x = 15, y = 2; float z; z = x/y; printf("z = %f\n", z); В результате выполнения какой операции будет выведено значение z = 7?
(1) z = x/y; printf("z = %f\n", z);
(2) z = x/y; printf("z = %d\n", (int)z);
(3) z = x/y; printf("z = %.1f\n", z);
Необходимо написать программу, которая имеет два аргумента командной строки и вычислиет их сумму. Какая программа выполняет поставленную задачу?
(1) int main(int argc, char* argv[]) { int n1, n2,sum; n1 = atoi(argv[0]); n2 = atoi(argv[1]); sum = n1 + n2; printf("sum = %d\n", sum); return 0; }
(2) int main(int argc, char* argv[]) { int n1, n2,sum; n1 = argv[0]; n2 = argv[1]; sum = n1 + n2; printf("sum = %d\n", sum); return 0; }
(3) int main(int argc, char* argv[]) { int n1, n2,sum; n1 = atoi(argv[1]); n2 = atoi(argv[2]); sum = n1 + n2; printf("sum = %d\n", sum); return 0; }
(4) int main(int argc, char* argv[]) { int n1, n2,sum; n1 = argv[1]; n2 = argv[2]; sum = n1 + n2; printf("sum = %d\n", sum); return 0; }
Какое утверждение является верным для приведенного фрагмента кода? int x; printf("Угадайте число:\n"); for (x=0; x!=123; ) scanf("%d", &x);
(1) цикл выполняется, пока пользователь не введет число 0
(2) цикл выполняется, пока пользователь не введет число 123
(3) цикл выполняется 123 раза
(4) при компиляции приведенного кода возникнет ошибка
Какой фрагмент кода полностью аналогичен заданному? int x = 10, y; if(x>9) y = 100; else y = 200;
(1) int x = 10, y; y = x<9 ? 100 : 200;
(2) int x = 10, y; y = x<9 ? 200 : 100;
(3) int x = 10, y; y = x>9 ? 100 : 200;
Чему будет равно значение переменной i в результате выполнения приведенной программы? #include <stdio.h> #define N 10 #define M 5 int main() { int i; int arr1[N] = {3, 4, 5, 4}; int arr2[M] = {1, 6, 3, 7, 9}; i = sizeof(arr1)/sizeof(arr1[0]) + sizeof(arr2)/sizeof(arr2[0]); printf("i = %d\n", i); return 0; }
(1) 4
(2) 5
(3) 9
(4) 15
Какая программа реализует такое же преобразование, как функция strcpy(str2, str1);?
(1) #include <stdio.h> #include <string.h> #define N 10 int main() { int i = 0; char ch; char str1[N] = "test"; char str2[N]; ch= str1[0]; while (ch!='\0') { str2[i] = str1[i]; i++; ch= str1[i]; } printf("%s",str2); return 0; }
(2) #include <stdio.h> #include <string.h> #define N 10 int main() { int i = 0; char ch; char str1[N] = "test"; char str2[N] = ""; ch= str1[0]; while (ch!='\0') { str2[i] = str1[i]; i++; ch= str1[i]; } return 0; }
(3) #include <stdio.h> #include <string.h> #define N 10 int main() { int i = 0; char ch; char str1[N] = "test"; char str2[N] = ""; ch= str1[0]; while (ch!='\0') { i++; str2[i] = str1[i]; ch= str1[i]; } return 0; }
Какая запись с использованием указателя эквивалента заданной записи инкремента? int x = 20; x++;
(1) int x = 20, *p; p = &x; *p = x; p++;
(2) int x = 20, *p; p = &x; *p++;
(3) int x = 20, *p; p = &x; (*p)++;
Какой фрагмент кода выполняет вычисление суммы всех элементов массива arr?
(1) int i, N, sum = 0; int arr[] = {3, 2, 4, 5, 1}; int *ptr; N = sizeof(arr)/sizeof(arr[0]); ptr = &arr[1]; for (i=0; i<N; i++) { sum += *ptr; ptr++; }
(2) int i, N, sum = 0; int arr[] = {3, 2, 4, 5, 1}; int *ptr; N = sizeof(arr)/sizeof(arr[0]); ptr = arr; for (i=0; i<N; i++) { sum += *ptr; ptr++; }
(3) int i, N, sum = 0; int arr[] = {3, 2, 4, 5, 1}; int *ptr; N = sizeof(arr)/sizeof(arr[0]); ptr = arr; for (i=0; i<N; i++) sum += *ptr;
В каком случае при возникновении ошибки при выделении памяти эта ошибка будет корректно обработана?
(1) ptr = (int *)malloc(size1*sizeof(int)); if (!ptr) { printf("\nERROR! Out of memory in malloc() function. Press any key: "); _getch(); exit(1); };
(2) ptr = (int *)malloc(size1*sizeof(int)); if (ptr) { printf("\nERROR! Out of memory in malloc() function. Press any key: "); _getch(); exit(1); };
(3) str[i] = (char *) calloc((N+1), sizeof(char)); if (str[i] == NULL) { printf("ERROR. Out of memmory. Press any key: "); _getch(); exit(1); }
Какое значение n должен задать пользователь для того, чтобы в результате выполнения приведенной программы на экран было выведено сообщение Ошибка! Сообщение 1 Сообщение 2? #include <stdio.h> #include <conio.h> #include <stdarg.h> void error(int severity, ... ); int main( void ) { char err[][30] = {"Сообщение 1", "Сообщение 2"}; int n = -1; printf("Введите степень критичности ошибки (целое число): "); scanf("%d", &n); switch (n) { case 0: error(0, "Ошибка!", '\0'); break; case 1: error(0, "Ошибка!", err[0], '\0'); break; default: error(1, "Ошибка!", err[0], err[1], '\0'); } return 0; } void error(int severity, ... ) { va_list ap; va_start(ap, severity); for (;;) { char *p = va_arg(ap, char*); if (p == '\0') break; printf("%s ", p); } va_end(ap); printf("\n"); }
(1) 0
(2) 1
(3) 2
Какая программа реализует сортировку "методом пузырька" по возрастанию с помощью функции, использующей вызов по ссылке?
(1) void bsort (int*, int); int main (void) { int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7}; int i, n; n = sizeof(A)/sizeof(A[0]); printf("Original array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); bsort (A, n); printf("\nSorted array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); return 0; } void bsort (int *arr, int size) { int i, j, buf; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] < arr[j + 1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } } } }
(2) void swap (int*, int*); void bsort (int*, int); int main (void) { int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7}; int i, n; n = sizeof(A)/sizeof(A[0]); printf("Original array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); bsort (A, n); printf("\nSorted array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); return 0; } void swap(int *pa, int *pb) { int temp; temp = *pa; *pa = *pb; *pb = temp; } void bsort (int *arr, int size) { int i, j; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] > arr[j + 1]) swap(&arr[j], &arr[j+1]); } } }
(3) void swap (int*, int*); void bsort (int*, int); int main (void) { int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7}; int i, n; n = sizeof(A)/sizeof(A[0]); printf("Original array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); bsort (A, n); printf("\nSorted array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); return 0; } void swap(int *pa, int *pb) { int temp; temp = *pa; *pa = *pb; *pb = temp; } void bsort (int *arr, int size) { int i, j, min; for (i=0; i < size - 1; i++) { min = i; for (j = i+1; j < size; j++) { if (arr[j] < arr[min]) { min = j; swap(&arr[i], &arr[min]); } } } }
Каким образом необходимо выполнить открытие файла для того, чтобы для каждого запуска программы сохранялся отдельный файл лога, содержащий описание всех действий, выполненных в программе (при условии, что программа запускается не более одного раза в минуту)? #include <stdio.h> #include <math.h> #include <time.h> #include <string.h> void AddToLog(FILE*, char*); char* GenerateFileName(); int main (void) { FILE *fp; char *strFile, strFn[30] = ""; double (*pFunc) (double); int c = 1; double y; strFile = GenerateFileName(); strcpy(strFn, strFile); <Открытие файла> while(1) { printf("Выберите функцию (0-выход): 1-sqrt, 2-sin, 3-tan\n"); scanf("%d", &c); switch(c) { case 1: pFunc = sqrt; AddToLog(fp, "Пользователь выбрал функцию 1 (вычисление квадратного корня)\n"); break; case 2: pFunc = sin; AddToLog(fp, "Пользователь выбрал функцию 2 (вычисление синуса)\n"); break; case 3: pFunc = tan; AddToLog(fp, "Пользователь выбрал функцию 3 (вычисление тангенса)\n"); break; case 0: AddToLog(fp, "Пользователь завершил выбор функции\n\n"); printf("Лог сохранен в файл %s\n", strFn); return; default: AddToLog(fp, "Пользователь задал неверный номер функции\n\n"); continue; } y = pFunc(1.1); AddToLog(fp, "Вычислено значение выбранной функции\n"); printf("f(1.1) = %.2f\n", y); AddToLog(fp, "Результат вычисления выведен на экран\n"); } if (fp != NULL) fclose(fp); return 0; } void AddToLog(FILE *fp, char *str) { if (fp != NULL) fputs(str, fp); } char* GenerateFileName() { char strTime[10] = ""; char strDate[10] = ""; char strFile[30] = "g:\\log_"; char *token; _strdate(strDate); _strtime(strTime); token = strtok(strDate, "/"); while( token != NULL ) { strncat(strFile,token,2); token = strtok( NULL, "/" ); } strncat(strFile,"_",1); token = strtok(strTime, ":"); while( token != NULL ) { strncat(strFile,token,2); token = strtok( NULL, "/" ); } strncat(strFile,".txt",4); }
(1) if( (fp = fopen(strFileName, "w+t")) == NULL ) printf( "Problem opening the file\n" );
(2) if( (fp = fopen(strFn, "w+t")) == NULL ) printf( "Problem opening the file\n" );
(3) if( (fp = fopen(strFileName, "a")) == NULL ) printf( "Problem opening the file\n" );
(4) if( (fp = fopen(strFileName, "r+")) == NULL ) printf( "Problem opening the file\n" );
Чему будет равно значение переменной s в результате выполнения приведенной программы? int main (void) { struct A { int number; int count; } a1[2], a2[2]; int s; a1[0].number = 1; a1[0].count = 12; a1[1].number = 1; a1[1].count = 12; a2[0] = a1[0]; s = a1[0].count + a2[0].count; return 0; }
(1) 13
(2) 24
(3) при вычислении значения переменной s возникнет ошибка, так как массив a2 не инициализирован
Какая программа не содержит ошибок?
(1) typedef union { short int i; char ch[2]; } pw; int putw(short int num, FILE *fp); int main(void) { FILE *fp; fp = fopen("g:\\test.tmp", "wb+"); if(fp == NULL) { printf("Файл не открыт.\n"); exit(1); } putw(1025, fp); fclose(fp); return 0; } int putw(short int num, FILE *fp) { union pw word; word.i = num; putc(word.ch[0], fp); return putc(word.ch[1], fp); }
(2) typedef union pw_union { short int i; char ch[2]; } pw; int putw(short int num, FILE *fp); int main(void) { FILE *fp; fp = fopen("g:\\test.tmp", "wb+"); if(fp == NULL) { printf("Файл не открыт.\n"); exit(1); } putw(1025, fp); fclose(fp); return 0; } int putw(short int num, FILE *fp) { union pw_union word; word.i = num; putc(word.ch[0], fp); return putc(word.ch[1], fp); }
(3) typedef union { short int i; char ch[2]; } pw; int putw(short int num, FILE *fp); int main(void) { FILE *fp; fp = fopen("g:\\test.tmp", "wb+"); if(fp == NULL) { printf("Файл не открыт.\n"); exit(1); } putw(1025, fp); fclose(fp); return 0; } int putw(short int num, FILE *fp) { pw word; word.i = num; putc(word.ch[0], fp); return putc(word.ch[1], fp); }
Какую ошибку содержит приведенная программа? void Init(struct student*); void Print(struct student*); int main(void) { struct student { char fio[30]; int group; float average; }; struct student s, *st; int i; st = &s; Init(st); Print(st); return 0; } void Init(struct student *st) { printf("\nEnter name: "); scanf("%s", st->fio); printf("\nEnter group: "); scanf("%d", &st->group); printf("\nEnter average mark: "); scanf("%f", &st->average); } void Print(struct student *st) { printf("\nName: %s", st->fio); printf("\nGrouproup: %d", st->group); printf("\nAverage mark: %.2f", st->average); }
(1) неверную передачу указателя структуры в функцию
(2) неверную передачу структуры в функцию
(3) локальное объявление структуры вместо глобального
(4) программа не содержит ошибок
Чему будет равно значение переменной b в результате выполнения приведенной программы? int main(void) { struct Options { unsigned int centerX : 1; unsigned int centerY : 1; unsigned int shadow : 2; unsigned int palette : 4; }; int b; struct Options t, *pt; t.shadow = 10; t.palette = 10; b = t.shadow + t.palette; printf("b = %d\n", b); return 0; }
(1) 10
(2) 12
(3) 20
Какая ошибка содержится в приведеном фрагменте кода? int min(int, int); int t; int main(void) { register int x=-5, y=5, m; int *p; p = &x; m = min(x,y); printf("min = %d\n", m); return 0; } int min(register int a, register int b) { int m = (a<b) ? a : b; return m; }
(1) спецификатор register применен к формальным параметрам функции min()
(2) спецификатор register применен к локальным переменным функции main()
(3) в функции main() указателю p присваивается адрес переменной, объявленной со спецификатором register
Необходимо решить задачу поиска пути между двумя городами. Карта дорог представлена в виде графа: filesПроцесс поиска представлен как последовательность шагов. На каждом шаге с использованием некоторого критерия выбирается точка, в котороую можно попасть из текущей. Если очередная выбранная точка совпала с заданной конечной точкой, то маршрут найден. Если не совпала - выполняется еще один шаг. Поскольку текущая точка может быть соединена с несколькими другими, то сначала выбирается точка с наименьшим номером. Для решения задачи задана программа (для появснения в программе приведены комментарии): #define N 8 void step(int, int, int); int map[N][N]; // карта: map[i,j]!=0, если точки i и j соединены int road[N]; // маршрут - номера точек карты int incl[N]; // incl[i]==1, если точка с номером i включена в road int start; // начальная точка маршрута int finish; // конечная точка маршрута int i, j; int main (void) { // инициализация массивов for (i=1; i<=N; i++) road[i] = 0; for (i=1; i<=N; i++) incl[i] = 0; for (i=1; i<=N; i++) for (j=1; j<=N; j++) map[i][j] = 0; // ввод значений элементов карты map[1][2] = 1; map[2][1] = 1; map[1][3] = 1; map[3][1] = 1; map[1][4] = 1; map[4][1] = 1; map[3][4] = 1; map[4][3] = 1; map[3][7] = 1; map[7][3] = 1; map[4][6] = 1; map[6][4] = 1; map[5][6] = 1; map[6][5] = 1; map[5][7] = 1; map[7][5] = 1; map[6][7] = 1; map[7][6] = 1; printf("Введите через пробел номер начальной и конечной точек: "); scanf("%d %d", &start, &finish); road[1] = start; // внести точку в маршрут incl[1] = 1; // пометить точку как включенную step(start, finish, 2); return 0; } void step(int s, int f, int p) { int c; // номер точки, в которую делается очередной шаг int i; if (s==f) { printf("Путь: "); for (i=1; i<=p-1; i++) printf("%d ", road[i]); printf("\n"); } else { // выбор очередной точки for (c=1; c<=N; c++) // проверка всех вершин if (map[s][c]!=0 && incl[c]==0) { // точка соединена с текущей и не включена в маршрут <Рекурсивный вызов - вариант 1> road[p] = c; // добавление вершины в путь incl[c] = 1; // пометка вершины как включенной <Рекурсивный вызов - вариант 2> incl[c] = 0; road[p] = 0; <Рекурсивный вызов - вариант 3> } } } В каком из отмеченных мест программы необходимо выполнить рекурсивный вызов функции step(c, f, p+1);?
(1) в строке Рекурсивный вызов - вариант 1
(2) в строке Рекурсивный вызов - вариант 2
(3) в строке Рекурсивный вызов - вариант 3
Что обозначает подключение #include "..\..\some.h"?
(1) то, что файл some.h находится на два уровня ниже, чем главный файл
(2) то, что файл some.h находится на два уровня выше, чем главный файл
(3) то, что для поиска файла some.h необходимо выполнить просмотр верхних уровней до тех пор, пока файл не будет найден
Какой фрагмент кода не содержит ошибок?
(1) char answer, strCourseName[100]; printf("Какую лекцию Вы изучаете?\n"); scanf_s("%s", strCourseName, 99); printf("Есть ли у Вас вопросы по лекции \"%s\" (y/n)?\n", strCourseName); scanf_s("%s", answer);
(2) char strCourseName[100]; int iLecCount, iLecNumber; printf("What course are you studing?\n"); scanf_s("%s", strCourseName, 99); printf("How many lections in the course \"%s\"?\n", strCourseName); scanf_s("%d", &iLecCount); printf("Which lection are you studing?\n"); scanf_s("%d", &iLecNumber); printf("You must study %d lections to complete the course\n", iLecCount-iLecNumber);
(3) char answer; char strLecName[50] = "Переменные и базовые типы данных языка С"; printf("Знакома ли Вам тема лекции "%s" (y/n)?\n", strLecName); scanf_s("%s", &answer);
Задана программа, исполняемый файл которой имеет имя Example.exe: int main(int argc, char* argv[]) { int n1, n2, m, sum; m = argc; n1 = atoi(argv[1]); n2 = atoi(argv[2]); sum = n1 + n2; printf("sum = %d\n", sum); return 0; } Программа запускается из командной строки командой Example.exe 2 3 5. Чему будет равно значение переменной m?
(1) 0
(2) 3
(3) 5
В результате выполнения какого фрагмента кода на экран будут выведены 5 строк по 5 звездочек?
(1) int i; for (i=0; i<5; i++) printf("*****\n");
(2) int i, j; for (i=0; i<5; i++) for (j=0; j<5; j++) printf("*");
(3) int i, j; for (i=0; i<5; i++) { for (j=0; j<5; j++) printf("*"); printf("\n"); }
(4) int i, j; for (i=0; i<5; i++) { for (j=i; j<5; j++) printf("*"); printf("\n"); }
Дана программа определения дня недели: int x; printf("Введите число от 1 до 7: "); scanf_s("%d", &x); switch (x<=5 ? 1 : x==6 ? 2 : 3) { case 1: printf("Сегодня рабочий день"); break; case 2: printf("Сегодня суббота"); break; case 3: printf("Сегодня воскресенье"); break; default: printf("Ошибка! Вы ввели неверное число"); break; } Какое сообщение будет выведено на экран, если в запросе ввода пользователь задаст число 8?
(1) Сегодня рабочий день
(2) Сегодня суббота
(3) Сегодня воскресенье
(4) Ошибка! Вы ввели неверное число
Какая программа реализует сортировку массива целых чисел по возрастанию методом "пузырька" (методом прямого обмена)?
(1) #include <stdio.h> #define N 5 int main() { int i, j, k, buf; int arr[N] = {3, 2, 4, 5, 1}; for (i=0; i<N; i++) for (j=0; j<-1; j++) { if (arr[j] < arr[j+1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } }; for (k=0; k<N; k++) printf("%d ", arr[k]); return 0; }
(2) #include <stdio.h> #define N 5 int main() { int i, j, k, buf; int arr[N] = {3, 2, 4, 5, 1}; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { if (arr[j] > arr[j+1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } }; for (k=0; k<N; k++) printf("%d ", arr[k]); return 0; }
(3) #include <stdio.h> #define N 5 int main() { int i, j, k, buf, min; int arr[N] = {3, 2, 4, 5, 1}; for (i=0; i<N-1; i++) { min = i; for (j=i+1; j<N; j++) { if (arr[j]<arr[min]) min = j; buf = arr[i]; arr[i] = arr[min]; arr[min] = buf; } } for (k=0; k<N; k++) printf("%d ", arr[k]); return 0; }
(4) #include <stdio.h> #define N 5 int main() { int i, j, k, buf, min; int arr[N] = {3, 2, 4, 5, 1}; for (i=0; i<N-1; i++) { min = i; for (j=i+1; j<N; j++) { if (arr[j]>arr[min]) min = j; buf = arr[i]; arr[i] = arr[min]; arr[min] = buf; } } for (k=0; k<N; k++) printf("%d ", arr[k]); return 0; }
Приведенный фрагмент кода должен запрашивать пароль не более трех раз: char s[5], psw[] = "password"; int i, k= 0; for (i=0; !k && i<3; i++) { printf("Введите пароль: \n"), gets(s); if (!(strcmp(s, psw))) k = 1; } if (k) printf("Добро пожаловать! TRUE"); else printf("Ошибка: Неверный пароль! FALSE"); Проверьте правильность этого кода для выполнения поставленной задачи и определите, сколько раз будет выполнен цикл for, если пользователь сразу введет верный пароль password?
(1) 0
(2) 1
(3) 3
Какие операции допустимы для заданных переменных? int n = 123, t; void *p; int *pn; pn = &n;
(1) p = pn
(2) pn = p
(3) t = *pn
(4) t = *p
Какая программа правильно определяет и выводит на экран время года по дате рождения, заданной пользователем?
(1) int m; char month[3], s[8] = ""; char *season[] = { "winter", "spring", "summer", "autumn" }; printf("Enter day of your birthday (MM.DD): "); scanf("%[^.]s", month); m = atoi(month); if ((m==12) || (m<3)) strcpy(s, &season[0]); else if ((m>2) && (m<6)) strcpy(s, &season[1]); else if ((m>5) && (m<9)) strcpy(s, &season[2]); else strcpy(s, &season[3]); printf("Your birthday is in %s\n", s);
(2) int m; char month[3], s[8] = ""; char *season[] = { "winter", "spring", "summer", "autumn" }; printf("Enter day of your birthday (MM.DD): "); scanf("%[^.]s", month); m = atoi(month); if ((m==12) || (m<3)) strcpy(s, season[1]); else if ((m>2) && (m<6)) strcpy(s, season[2]); else if ((m>5) && (m<9)) strcpy(s, season[3]); else strcpy(s, season[4]); printf("Your birthday is in %s\n", s);
(3) int m; char month[3], s[8] = ""; char *season[] = { "winter", "spring", "summer", "autumn" }; printf("Enter day of your birthday (MM.DD): "); scanf("%[^.]s", month); m = atoi(month); if ((m==12) || (m<3)) strcpy(s, season[0]); else if ((m>2) && (m<6)) strcpy(s, season[1]); else if ((m>5) && (m<9)) strcpy(s, season[2]); else strcpy(s, season[3]); printf("Your birthday is in %s\n", s);
В каком случае в процессе выполнения программы выполняется перераспределение выделенной памяти с целью ее уменьшения?
(1) #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> int main(void) { int n, m; char *ptr; printf("\n Enter a dimention of character array: "); scanf_s("%d", &n); _flushall(); ptr = (char *)malloc((n+1)*sizeof(char)); if (!ptr) { printf("\n\t 1st Error! "); printf("\n\n Press any key: "); _getch(); return -1; } printf(" Enter a character array of no more than %d characters: ", n); gets_s(ptr, n+1); m = strlen(ptr); printf("\n Start line:\n"); printf(" %s\n", ptr); ptr = (char *)realloc(ptr, (m+2)*sizeof(char)); if (!ptr) { printf("\n\t 2nd Error! "); printf("\n\n Press any key: "); _getch(); return -1; } strcat_s(ptr, m+2, "!"); printf("\n Start line and character \"%c\":\n", '!'); printf(" %s\n", ptr); free (ptr); printf("\n\n Press any key: "); _getch(); return 0; }
(2) #include <stdio.h> #include <stdlib.h> #define N 10 int main(void) { int i, n = 0; int arr1[N] = {1,2,3,4,5}, *arr; arr = (int *)calloc(N, sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in calloc() function. Press any key: "); _getch(); exit(1); }; for (i=0; i<N; i++) { arr[i] = i+1; n++; printf("arr[%d] = %d\n", i, arr[i]); } arr = (int *)realloc(arr, (N+2)*sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in realloc() function. Press any key: "); _getch(); exit(1); }; for (i=N; i<N+2; i++) { arr[i] = i+1; printf("arr[%d] = %d\n", i, arr[i]); } free(arr); return 0; }
(3) #include <stdio.h> #include <stdlib.h> #define N 10 int main(void) { int i, n = 0; int arr1[N] = {1,2,3,4,5}, *arr; arr = (int *)calloc(N, sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in calloc() function. Press any key: "); _getch(); exit(1); }; for (i=0; i<5; i++) { arr[i] = i+1; n++; } arr = (int *)realloc(arr, n*sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in realloc() function. Press any key: "); _getch(); exit(1); }; free(arr); return 0; }
Необходимо написать функцию sum, которая будет вычислять сумму всех элементов массива. В данную функцию должно передаваться два параметра - массив и размер массива. В какой программе функция sum объявлена верно?
(1) #include <stdio.h> #define n 10 int sum(int mas, int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int mas, int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }
(2) #include <stdio.h> #define n 10 int sum(int mas[], int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int mas[], int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }
(3) #include <stdio.h> #define n 10 int sum(int mas[0], int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int mas[0], int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }
(4) #include <stdio.h> #define n 10 int sum(int* mas, int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int* mas, int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }
В приведенной программе используются указатели на функции, которые выполняют сортировку целочисленного массива "методом пузырька": void PuzSortInc (int*, int ); void PuzSortDec (int*, int); int main (void) { int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7}; int i, n, alg; <Объявление указателя pFun на функции> n = sizeof(A)/sizeof(A[0]); printf("Исходный массив: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); printf("\nВыберите алгоритм сортировки (1 - \"методом пузырька\" по возрастанию,\ 2 - \"методом пузырька\" по убыванию: "); scanf("%d", &alg); switch (alg) { case 1: (*pFun[0])(A, n); break; case 2: (*pFun[1])(A, n); break; default: printf("ERROR! Такого алгоритма не определено!"); } printf("\nSorted array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); return 0; } void PuzSortInc (int* arr, int size) { int i, j, buf; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] > arr[j + 1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } } } } void PuzSortDec (int* arr, int size) { int i, j, buf; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] < arr[j + 1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } } } } Функция PuzSortInc() выполняет сортировку по возрастанию, функция PuzSortDec() - по убыванию. Каким образом должен быть объявлен указатель на функции для его использования в приведенной программе?
(1) void (*pFun) (int*, int);
(2) void (*pFun[2]) (int*, int)
(3) void (*pFun[2]) (int*, int) = {PuzSortInc, PuzSortDec};
(4) void *pFun[2] (int*, int) = {PuzSortInc, PuzSortDec};
Каким будет значение переменной line в результате выполнения приведенной программы? int main( void ) { FILE *stream; char line[81]; int result; if ( fopen_s( &stream, "g:\\fseek.out", "w+" ) != 0 ) { printf( "The file fseek.out was not opened\n" ); return -1; } fprintf( stream, "Ivanov - 09.06.1980 \n" "Petrov - 10.03.1986 \n" "Sidorov - 08.11.1985\n"); result = fseek( stream, -22L, SEEK_END); if( result ) perror( "Fseek failed" ); else { printf( "File pointer is set to middle of first line.\n" ); fgets( line, 80, stream ); printf( "%s", line ); } fclose( stream ); }
(1) Ivanov - 09.06.1980
(2) Petrov - 10.03.1986
(3) Sidorov - 08.11.1985
Каким образом должна быть объявлена структура group и переменная g для корреткной работы программы? int main (void) { struct stud { char *name; char *surname; int age; double av_mark; }; <Объявление структуры group и переменной gr> gr.number = 3; gr.quantity = 21; gr.student.name = "Ivan"; gr.student.surname = "Ivanov"; gr.student.age = 20; gr.student.av_mark = 4.25; printf("Group Number: %d\nThe number of students in the group: %d\n", gr.number, gr.quantity); printf("%s %s - %1.2f", gr.student.surname, gr.student.name, gr.student.av_mark); return 0; }
(1) struct group { int number; int quantity; stud student; } gr;
(2) struct group { int number; int quantity; stud *student; } gr;
(3) struct group { int number; int quantity; struct stud student; } gr;
Что будет выведено на экран в результате выполнения приведенной программы? int main(void) { union pw { int i; double d; char ch[2]; } pw = {121}; printf("pw.ch = %s", pw.ch); return 0; }
(1) pw.ch = 1
(2) pw.ch = 121
(3) pw.ch = y
(4) при выпонении программы возникнет ошибка, так как элемент pw.ch не инициализирован
Каким образом должна быть объявлена функция Init для корректной работы приведенной программы? struct student { char fio[30]; int group; float average; }; <Прототи функции Init> void Print(struct student*); int main(void) { struct student s, *st; int i; s = Init("Ivanov I.", 3801, 5.00); st = &s; Print(st); return 0; } struct student Init(char* n, int i, float f) { struct student s, *st; st = &s; strcpy(st->fio, n); st->group = i; st->average = f; return s; } void Print(struct student *st) { printf("\nName: %s", st->fio); printf("\nGrouproup: %d", st->group); printf("\nAverage mark: %.2f\n", st->average); }
(1) struct student* Init(char* n, int i, float f) { struct student s, *st; st = &s; strcpy(st->fio, n); st->group = i; st->average = f; return st; }
(2) struct student Init(char* n, int i, float f) { struct student s, *st; st = &s; strcpy(st->fio, n); st->group = i; st->average = f; return st; }
(3) struct student Init(char* n, int i, float f) { struct student s, *st; st = &s; strcpy(st->fio, n); st->group = i; st->average = f; return s; }
(4) struct student Init(char* n, int i, float f) { struct student s, *st; st = &s; strcpy(st->fio, n); st->group = i; st->average = f; return &s; }
Определите, что делает приведенная программа? void printBits(unsigned int var); int main (void) { unsigned int number, mask; printf("The program on demonstration digit-by-digit operation And ( & )\n"); printf("Enter a whole number of unsigned: "); scanf_s("%u", &number); printf("Enter the number of unsigned-mask: "); scanf_s("%u", &mask); printf("Binary representation of the starting number(%u) and\n", number); printf("Binary representation of the number-masks (%u):\n", mask); printBits(number); printBits(mask); printBits(number & mask); return 0; } void printBits(unsigned int var) { unsigned int b; unsigned int mask = 1 << 15; printf("\n%10u = ", var); for (b = 1; b <= 16; ++b) { printf("%c", var & mask ? '1' : '0'); var <<= 1; if (b % 8 == 0) putchar(' '); } }
(1) выполняет поразрядную операцию И над двумя целыми числами, представленными в двоичной системе счисления для 32-разрядного компьютера
(2) выполняет поразрядную операцию И над двумя целыми числами, представленными в двоичной системе счисления для 16-разрядного компьютера
(3) выполняет поразрядную операцию ИЛИ над двумя целыми числами, представленными в двоичной системе счисления для 32-разрядного компьютера
(4) выполняет поразрядную операцию ИЛИ над двумя целыми числами, представленными в двоичной системе счисления для 16-разрядного компьютера
Какие статические переменные видны в функции main()? int f(); static int d = 5, e = 8; int main(void) { int n = 1, m = 1; int s; s = f(); return 0; } int f() { int p; static int c = 0; p = c; printf("d = %d",d); return p; }
(1) c
(2) d
(3) e
Необходимо написать программу, которая будет определять, является ли заданная строка палиндромом (палиндром - это слово, которое читается одинаково слева направо и справа налево). Решение данной задачи основывается на просмотре строки одновременно слева направо и справа налево и сравнении соответствующих символов. Если в какой-то момент символы не совпадают, делается вывод о том, что строка не является палиндромом, если же удается достичь середины строки и при этом все соответствующие символы совпали, то строка является палиндромом. Какая программа выполняет поставленную задачу?
(1) char s[100]; int pal(char s[100]); int main() { printf("\nВведите строку: "); gets(s); if (pal(s)) printf("Строка является палиндромом"); else printf("Строка не является палиндромом"); return 0; } int pal(char s[100]) { int l; char s1[100]; l=s[0]==s[strlen(s)-1]; strncpy(s1, s+1, strlen(s)-2); s1[strlen(s)-2]='\0'; return l&&pal(s1); }
(2) char s[100]; int pal(char s[100]); int main() { printf("\nВведите строку: "); gets(s); if (pal(s)) printf("Строка является палиндромом"); else printf("Строка не является палиндромом"); return 0; } int pal(char s[100]) { int l; char s1[100]; if (strlen(s)<1) return 1; else { l=s[0]==s[strlen(s)-1]; strncpy(s1, s+1, strlen(s)-2); s1[strlen(s)-2]='\0'; return l&&pal(s1); } }
(3) char s[100]; int pal(char s[100]); int main() { printf("\nВведите строку: "); gets(s); if (pal(s)) printf("Строка является палиндромом"); else printf("Строка не является палиндромом"); return 0; } int pal(char s[100]) { int l; char s1[100]; if (strlen(s)"=1) return 1; else { l=s[0]==s[strlen(s)-1]; strncpy(s1, s+1, strlen(s)-2); s1[strlen(s)-2]='\0'; return l&&pal(s1); } }
Файл second.h, расположенный на диске D:, содержит следующие описания переменных и функций: extern int x, y; extern char ch; void func22(void) { y = 100; } void func23(void) { x = y/10; ch = 'R'; } В каком случае выполняется неверное подключение файла second.h в другом файле?
(1) #include <stdio.h> #include <conio.h> #include "D:\second.h" int x = 99, y = 77; char ch; void func1(void); int main(void) { ch = 'Z'; func1(); printf("\n Press any key: "); _getch(); return 0; } void func1(void) { func22(); func23(); printf("\n\t x = %d; y = %d;\ ch = %c\n", x, y, ch); }
(2) #include <stdio.h> #include <conio.h> #include <D:\second.h> int x = 99, y = 77; char ch; void func1(void); int main(void) { ch = 'Z'; func1(); printf("\n Press any key: "); _getch(); return 0; } void func1(void) { func22(); func23(); printf("\n\t x = %d; y = %d;\ ch = %c\n", x, y, ch); }
(3) #include <stdio.h> #include <conio.h> #include D:\second.h int x = 99, y = 77; char ch; void func1(void); int main(void) { ch = 'Z'; func1(); printf("\n Press any key: "); _getch(); return 0; } void func1(void) { func22(); func23(); printf("\n\t x = %d; y = %d;\ ch = %c\n", x, y, ch); }
Чем отличаются функции printf() и puts() при консольном выводе информации?
(1) функция printf() записывает данные в стандартный выходной поток в соответствии с заданной строкой форматирования
(2) функция puts() заменяет символ конца строки '\0' на символ новой строки '\n'
(3) функция printf() предназначена для вывода данных только в файл
Приведенная программа считает в обратном порядке, начиная с какого-либо значения (указанного в командной строке): int main(int argc, char *argv[]) { int disp, count; setlocale (LC_ALL, "rus"); if(argc<2) { printf("В командной строке на задано число\n"); exit(1); } if(argc==3 && !strcmp(argv[2], "display")) disp = 1; else disp = 0; for(count=atoi(argv[1]); count; --count) if(disp) printf("%d ", count); putchar('\a'); printf("Счет закончен"); return 0; } Что будет выведено на экран в результате выполнения приведенной программы, если ее запуск выполняется из командной строки командой Example.exe 5?
(1) 5 4 3 2 1
(2) 5 4 3 2 1 0
(3) ничего не будет выведено
Как организовать бесконечный цикл while?
(1) while (-1) { ... }
(2) while (0) { ... }
(3) while (1) { ... }
Что будет выведено на экран в результате выполнения приведенных инструкций при попытке пользователя вычислить значение 5^6? int a, b, res = 0; char op; int f = 1; printf("Введите 1й операнд: "); scanf("%d", &a); printf("Введите знак операции: "); scanf("%s", &op); printf("Введите 2й операнд: "); scanf("%d", &b); switch (op) { case '+': res = a+b; break; case '-': res = a-b; break; case '*': res = a*b; break; case '/': res = a/b; break; default: printf("Неизвестная операция\n"); f = 0; } if (f) printf ("Результат: %d", res);
(1) Неизвестная операция Результат: 0
(2) Неизвестная операция
(3) в процессе выполнения приведенного фрагмета кода возникнет ошибка
Что делает приведенная программа? #include <stdio.h> #define N 5 int main() { int m, i; int arr[N] = {3, 2, 4, 5, 1}; m = 1; for (i=1; i<N; i++) if (arr[i]<arr[m]) m = i; printf("a[m] = %d", arr[m]); return 0; }
(1) выполняет поиск максимального элемента в массиве
(2) выполняет поиск минимального элемента в массиве
(3) выполняет сортировку элементов массива по возрастанию
(4) выполняет сортировку элементов массива по убыванию
Каким будет результат выполнения приведенного программного кода? char t1 = 196; int i = 0; for (i=0; i<10; i++) printf("%c", t1);
(1) на экран 10 раз будет выведено число 196
(2) на экран 10 раз будет выведен символ, код которого 196
(3) при выполнении программы возникнет ошибка
Требуется написать программу, которая будет копировать одну строку в другую с помощью указателей. Какая программа выполняет поставленную задачу?
(1) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1; ptr2 = str2; while (*ptr1!='\0') { *ptr2 = *ptr1; ptr1++; } printf("str2 = %s\n", str2); return 0; }
(2) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1; while (*ptr1!='\0') { if (*ptr1=='\0') { *str2 = '\0'; break; } *str2 = *ptr1; ptr1++; str2++; } printf("str2 = %s\n", str2); return 0; }
(3) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1; ptr2 = str2; while (*ptr1!='\0') { if (*ptr1=='\0') { *ptr2 = '\0'; break; } *ptr2 = *ptr1; ptr1++; ptr2++; } printf("str2 = %s\n", str2); return 0; }
Указатель p инициализирован строковой константой: char *p = "тестовая строка". Что в данном случае хранится в указателе p?
(1) заданная строка
(2) адрес заданной строки
(3) первый элемент символьного массива
(4) указатель p может хранить только адрес и не может быть инициализирован строковой константой
После выполнения какой программы будет выполняться условие size2 < size3?
(1) #include <stdio.h> #include <stdlib.h> #define N 10 int main(void) { int size1, size2, size3, i, n = 0; int arr1[N] = {1,2,3,4,5}, *arr; size1 = sizeof(arr1); arr = (int *)calloc(N, sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in calloc() function. Press any key: "); _getch(); exit(1); }; for (i=0; i<N; i++) { arr[i] = i+1; printf("arr[%d] = %d\n", i, arr[i]); } size2 = N*sizeof(int); for (i=0; i<N/2; i++) { arr[i] = i+1; n++; } arr = (int *)realloc(arr, n*sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in realloc() function. Press any key: "); _getch(); exit(1); }; size3 = N*sizeof(int); free(arr); return 0; }
(2) #include <stdio.h> #include <stdlib.h> #define N 10 int main(void) { int size1, size2, size3, i, n = 0; int arr1[N] = {1,2,3,4,5}, *arr; size1 = sizeof(arr1); arr = (int *)calloc(N, sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in calloc() function. Press any key: "); _getch(); exit(1); }; for (i=0; i<N; i++) { arr[i] = i+1; printf("arr[%d] = %d\n", i, arr[i]); } size2 = N*sizeof(int); for (i=0; i<N/2; i++) { arr[i] = i+1; n++; } arr = (int *)realloc(arr, n*sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in realloc() function. Press any key: "); _getch(); exit(1); }; size3 = n*sizeof(int); free(arr); return 0; }
(3) #include <stdio.h> #include <stdlib.h> #define N 10 int main(void) { int size1, size2, size3, i, n = 0; int arr1[N] = {1,2,3,4,5}, *arr; size1 = sizeof(arr1); arr = (int *)calloc(N, sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in calloc() function. Press any key: "); _getch(); exit(1); }; for (i=0; i<N; i++) { arr[i] = i+1; n++; printf("arr[%d] = %d\n", i, arr[i]); } size2 = N*sizeof(int); arr = (int *)realloc(arr, (N+2)*sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in realloc() function. Press any key: "); _getch(); exit(1); }; for (i=N; i<N+2; i++) { arr[i] = i+1; printf("arr[%d] = %d\n", i, arr[i]); } for (i=0, n=0; i<N+2; i++) n++; size3 = n*sizeof(int); free(arr); return 0; }
Что произойдет после выполнения приведенной программы? #include <stdio.h> #define n 10 void fun(int *mas, int k); int main( void ) { int arr[n] = {3,4,5,4,4}; int i; fun(arr, n); return 0; } void fun(int *mas, int k) { int i, s = 0; for (i=0; i<k; i++) ++mas[i]; }
(1) будет вычислена сумма всех элементов массива arr
(2) значения всех элементов массива arr будут увеличены на 1
(3) ничего не произойдет, так как функция fun(int *mas, int k) не возвращает значения
Приведенная программа использует указатель на функции, которые выполняют различные действия: вычисление квадратного корня, вычисление синуса, вычисление тангенса: int main (void) { double (*pFunc) (double); int c = 1; double y; while(1) { printf("Выберите функцию (0-выход): 1-sqrt, 2-sin, 3-tan\n"); scanf("%d", &c); switch(c) { case 1: pFunc = sqrt; break; case 2: pFunc = sin; break; case 3: pFunc = tan; break; case 0: return; default: continue; } y = pFunc(1.1); printf("f(1.1) = %.2f\n", y); } return 0; } Какое вычисление будет выполнено в том случае, если пользователь в запросе выбора функции задаст число 3?
(1) sqrt(1.1)
(2) sin(1.1)
(3) tan(1.1)
Задан файл, содержащий список названий и стоимости мониторов: filesВ результате выполнения какой программы на экран будет выведена информация о пункте (2) из списка?
(1) int main( void ) { FILE *stream; char str[81]; int result; if ( fopen_s( &stream, "g:\\list.txt", "r+" ) != 0 ) { printf( "The file list.txt was not opened\n" ); return -1; } result = fseek( stream, 0L, SEEK_SET); if( result ) perror( "Fseek failed" ); else { fgets( str, 80, stream ); printf( "%s", str ); } fclose( stream ); return 0; }
(2) int main( void ) { FILE *stream; char str[81]; int result; if ( fopen_s( &stream, "g:\\list.txt", "r+" ) != 0 ) { printf( "The file list.txt was not opened\n" ); return -1; } result = fseek( stream, 37L, SEEK_SET); if( result ) perror( "Fseek failed" ); else { fgets( str, 80, stream ); printf( "%s", str ); } fclose( stream ); return 0; }
(3) int main( void ) { FILE *stream; char str[81]; int result; if ( fopen_s( &stream, "g:\\list.txt", "r+" ) != 0 ) { printf( "The file list.txt was not opened\n" ); return -1; } result = fseek( stream, 38L, SEEK_SET); if( result ) perror( "Fseek failed" ); else { fgets( str, 80, stream ); printf( "%s", str ); } fclose( stream ); return 0; }
В какой программе используются вложенные структуры?
(1) int main (void) { struct student { char *name; char *surname; int group; int ses[5]; double av; struct student *p; } st; int i, sum = 0; st.name = "Ivan"; st.surname = "Ivanov"; st.group = 1024; st.ses[0] = 5; st.ses[1] = 4; st.ses[2] = 5; st.ses[3] = 5; st.ses[4] = 5; for (i=0; i<5; i++) sum +=st.ses[i]; st.av = (double)sum/5; printf("Name: %s %s\n", st.surname, st.name); printf("Group: %d\n", st.group); printf("Average mark: %.2f\n\n", st.av); return 0; }
(2) int main (void) { struct student { char *name; char *surname; int group; int ses[5]; double av; } st; int i, sum = 0; st.name = "Ivan"; st.surname = "Ivanov"; st.group = 1024; st.ses[0] = 5; st.ses[1] = 4; st.ses[2] = 5; st.ses[3] = 5; st.ses[4] = 5; for (i=0; i<5; i++) sum +=st.ses[i]; st.av = (double)sum/5; printf("Name: %s %s\n", st.surname, st.name); printf("Group: %d\n", st.group); printf("Average mark: %.2f\n\n", st.av); return 0; }
(3) int main (void) { struct stud { char *name; char *surname; int age; double av_mark; } st; struct group { int number; int quantity; struct stud *student; } gr; gr.student = &st; gr.number = 3; gr.quantity = 21; gr.student->name = "Ivan"; gr.student->surname = "Ivanov"; gr.student->age = 20; gr.student->av_mark = 4.25; printf("Group Number: %d\nThe number of students in the group: %d\n", gr.number, gr.quantity); printf("%s %s - %1.2f", gr.student->surname, gr.student->name, gr.student->av_mark); return 0; }
Что будет выведено на экран в результате выполнения приведенной программы? int main(void) { enum coin { penny, nickel, dime, quarter=100, half_dollar, dollar}; enum coin money; printf("%d ", penny); printf("%d ", nickel); printf("%d ", dime); printf("%d ", quarter); printf("%d ", half_dollar); printf("%d ", dollar); return 0; }
(1) 0 1 2 3 4 5
(2) 0 1 2 100 4 5
(3) 0 1 2 100 101 102
(4) penny nickel dime quarter=100 half_dollar dollar
Необходимо написать программу, в которой будут три функции: Init - функция инициализации структуры, Print - функция вывода структуры на экран, Modify - функция изменения полей структуры. Определите, удовлетворяет ли приведенная программа поставленной задаче? Если не удовлетворяет, укажите, почему? typedef struct { char fio[30]; char phone[20]; int age; } note; note Init(char*, char*, int); void Print(note*); void Modify(note); int main(void) { note n[3], *pn; char *strName[3] = {"Ivanov I.", "Pertov P.", "Sidorov S."}; char *strPhone[3] = {"12-34-56", "78-90-12", "34-56-78"}; int i, age = 25; for (i=0; i<3; i++) { n[i] = Init(strName[i], strPhone[i], age+i); pn = &n[i]; Print(pn); } Modify(n[0]); pn = &n[0]; Print(pn); return 0; } note Init(char* f, char* p, int a) { note n, *pn; pn = &n; strcpy(pn->fio, f); strcpy(pn->phone, p); pn->age = a; return n; } void Print(note *pn) { printf("\nName: %s", pn->fio); printf("\nPhone: %s", pn->phone); printf("\nAge: %d\n", pn->age); } void Modify(note n) { strcpy(n.fio, "Vasiliev V."); strcpy(n.phone, "89-01-23"); n.age = 30; }
(1) программа выполняет поставленную задачу
(2) программа не выполняет поставленную задачу, так как работа функции Init не соответсвует задаче
(3) программа не выполняет поставленную задачу, так как работа функции Print не соответсвует задаче
(4) программа не выполняет поставленную задачу, так как работа функции Modify не соответсвует задаче
Чему будет равно значение переменной t.a после выполнения приведенной программы? int main(void) { struct test { unsigned int a : 2; unsigned int b : 8; }; int c; struct test t; t.b = 255; t.a = t.b & 3; printf("t.a = %d\n", t.a); return 0; }
(1) 3
(2) 7
(3) 15
Какой спецификатор используется для создания переменных, доступных во всех модулях программы, в которых они объявлены?
(1) auto
(2) static
(3) extern
(4) register
Какая программа верно вычисляет сумму элементов массива с помощью рекурсии?
(1) int summa(int N, int a[6]); int main() { int i,n; int a[6] = {8, 65, 10, 2, 4, 1}; n = sizeof(a)/sizeof(a[0]); printf("Сумма: %d", summa(n-1, a)); } int summa(int N, int a[6]) { return a[N]+summa(N-1, a); }
(2) int summa(int N, int a[6]); int main() { int i,n; int a[6] = {8, 65, 10, 2, 4, 1}; n = sizeof(a)/sizeof(a[0]); printf("Сумма: %d", summa(n-1, a)); } int summa(int N, int a[6]) { if (N==0) return a[0]; else return a[N]+summa(N-1, a); }
(3) int summa(int N, int a[6]); int main() { int i,n; int a[6] = {8, 65, 10, 2, 4, 1}; n = sizeof(a)/sizeof(a[0]); printf("Сумма: %d", summa(n-1, a)); } int summa(int N, int a[6]) { int i, s = 0; for (i=0; i<N; i++) s += a[i]; return s; }
Для чего применяются директивы условной компиляции (#if, #ifdef, #ifndef)?
(1) для исключения компиляции отдельных частей программы
(2) для разветвления процесса вычислений на два направления
(3) для того, чтобы временно закомментировать фрагменты кода
Каким будет значение переменной FirstName после выполнения приведенного фрагмента кода, если в запросе программы пользователь введет данные о себе в виде Иван Иванов,30? char FirstName[100], LastName[100]; int Age; printf("Введите Ваши имя, фамилию и возраст: \n"); scanf("%[^,]s %s %d", FirstName, LastName, &Age);
(1) Иван
(2) Иванов
(3) Иван Иванов
Какая программа посимвольно выводит все аргументы, с которыми ее вызвали?
(1) int main(int argc, char *argv[]) { int t, i; for(t=0; t<argc-1; ++t) { i = 0; while(argv[t][i]) { putchar(argv[t][i]); ++i; } printf("\n"); } return 0; }
(2) int main(int argc, char *argv[]) { int t; for(t=0; t<argc; ++t) printf("%s\n", argv[t]); return 0; }
(3) int main(int argc, char *argv[]) { int t, i; for(t=0; t<argc; ++t) { i = 0; while(argv[t][i]) { putchar(argv[t][i]); ++i; } printf("\n"); } return 0; }
Что будет выводиться на экран во время выполнения приведенного фрагмента кода? int x, n = 1; while (n<=10) { x = n*n; printf("%d %d\n", n, x); }
(1) таблица чисел от 1 до 10 и их квадратов
(2) бесконечное число строк "1 1"
(3) 10 строк с квадратами чисел от 1 до 10
Каким будет результат выполнения приведенного фрагмента кода, если пользователь введет число 6? int num, half, div; printf("Введите число: "); scanf_s("%d", &num); half = num / 2; div = 2; do { if (!(num % div)) printf("%d ", div); div++; } while (div <= half);
(1) 1 2 3 6
(2) 2 3
(3) 2 3 6
В результате выполнения какой программы на экран будут выведены числа от 1 до 10 и для каждого числа его квадрат?
(1) #include <stdio.h> #define N 11 int main() { int i; int arr[N][2]; for (i=0; i<N; i++) { arr[i][0] = i; arr[i][1] = i*i; } for (i=0; i<N; i++) printf("%d,%d\n", arr[i][0], arr[i][1]); return 0; }
(2) #include <stdio.h> #define N 11 int main() { int i; int arr[N][2]; for (i=1; i<N; i++) { arr[i][1] = i; arr[i][2] = i*i; } for (i=0; i<N; i++) printf("%d,%d\n", arr[i][1], arr[i][2]); return 0; }
(3) #include <stdio.h> #define N 10 int main() { int i; int arr[N][2]; for (i=0; i<N-1; i++) { arr[i+1][0] = i+1; arr[i+1][1] = (i+1)*(i+1); } for (i=0; i<N-1; i++) printf("%d,%d\n", arr[i+1][0], arr[i+1][1]); return 0; }
(4) #include <stdio.h> #define N 11 int main() { int i; int arr[N][2]; for (i=1; i<N; i++) { arr[i][0] = i; arr[i][1] = i*i; } for (i=1; i<N; i++) printf("%d,%d\n", arr[i][0], arr[i][1]); return 0; }
Аналогом какой стандартной функции является приведенный фрагмент кода? int i = 0; char str[10] = "Test"; while (str[i]!='\0') i++;
(1) strcpy
(2) strcat
(3) strlen
Требуется написать программу, которая копирует введенную пользователем строку str1 в строку str2 в обратном порядке. Например, если пользователь ввел строку string, то str2 в результате выполнения данной программы должна быть равна gnirts. Какая программа выполняет поставленную задачу?
(1) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1 + strlen(str1) - 1; ptr2 = str2; while (*ptr1) { if (!(*ptr1)) *ptr2 = '\0'; *ptr2 = *ptr1; ptr1--; ptr2++; } printf("str2 = %s\n", str2); return 0; }
(2) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1 + strlen(str1) - 1; ptr2 = str2; while (ptr1>=str1) { if (ptr1<str1) *ptr2 = '\0'; *ptr2 = *ptr1; ptr1--; ptr2++; } printf("str2 = %s\n", str2); return 0; }
(3) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1 + strlen(str1); ptr2 = str2; while (ptr1>=str1) { if (ptr1<str1) *ptr2 = '\0'; *ptr2 = *ptr1; ptr1--; ptr2++; } printf("str2 = %s\n", str2); return 0; }
Чему будет равно значение переменной sum после выполнения прииведенного фрагмента кода? int m[][5] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}}; int *ptr; int i, j, n, k, sum = 0; n = sizeof(m)/sizeof(m[0]); k = sizeof(m[0])/sizeof(m[0][0]); ptr = m;} sum += *(ptr+i); } printf("n = %d\n", n); printf("k = %d\n", k); for (i=0; i<(n*k); i++) { if (!(*(ptr+i)%2)) sum += *(ptr+i);
(1) 120
(2) 64
(3) 56
В приведенной программе выполняется перераспределение памяти для увеличения размерности массива: #include <stdio.h> #include <stdlib.h> #define N 10 int main(void) { int i; int *arr; for (i=0; i<N; i++) { arr[i] = i+1; printf("arr[%d] = %d\n", i, arr[i]); } arr = (int *)realloc(arr, (N+2)*sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in realloc() function. Press any key: "); _getch(); exit(1); }; for (i=N; i<N+2; i++) { arr[i] = i+1; printf("arr[%d] = %d\n", i, arr[i]); } free(arr); return 0; } Определите, есть ли в этой программе ошибки?
(1) в программе нет ошибок
(2) используется неинициализированный указатель
(3) выполняется неверное перераспределение памяти
(4) выполняется неверное освобождение памяти
Чему будет равно значение переменной s в результате выполнения приведенной программы? #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(*a, n, m); printf("Сумма элементов а: %d\n", s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }
(1) 5
(2) 15
(3) 21
Требуется написать программу, в которой будет использоваться указатель на функции, которые выполняют сортировку целочисленного массива "методом пузырька": функция PuzSortInc() выполняет сортировку по возрастанию, функция PuzSortDec() - по убыванию. В какой программе предусмотрено корректное завершение работы программы, независимо от номера алгоритма, который задаст пользователь?
(1) void PuzSortInc (int*, int ); void PuzSortDec (int*, int); int main (void) { int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7}; int i, n, alg; void (*pFun) (int*, int) = NULL; n = sizeof(A)/sizeof(A[0]); printf("Исходный массив: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); printf("\nВыберите алгоритм сортировки (1 - \"методом пузырька\" по возрастанию,\ 2 - \"методом пузырька\" по убыванию: "); scanf("%d", &alg); switch (alg) { case 1: pFun = PuzSortInc; break; case 2: pFun = PuzSortDec; break; default: printf("ERROR! Такого алгоритма не определено!"); exit(1); } pFun(A,n); printf("\nSorted array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); return 0; } void PuzSortInc (int* arr, int size) { int i, j, buf; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] > arr[j + 1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } } } } void PuzSortDec (int* arr, int size) { int i, j, buf; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] < arr[j + 1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } } } }
(2) void PuzSortInc (int*, int ); void PuzSortDec (int*, int); int main (void) { int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7}; int i, n, alg; void (*pFun) (int*, int) = NULL; n = sizeof(A)/sizeof(A[0]); printf("Исходный массив: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); printf("\nВыберите алгоритм сортировки (1 - \"методом пузырька\" по возрастанию,\ 2 - \"методом пузырька\" по убыванию: "); scanf("%d", &alg); switch (alg) { case 1: pFun = PuzSortInc; break; case 2: pFun = PuzSortDec; break; default: printf("ERROR! Такого алгоритма не определено!"); } pFun(A,n); printf("\nSorted array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); return 0; } void PuzSortInc (int* arr, int size) { int i, j, buf; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] > arr[j + 1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } } } } void PuzSortDec (int* arr, int size) { int i, j, buf; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] < arr[j + 1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } } } }
(3) void PuzSortInc (int*, int ); void PuzSortDec (int*, int); int main (void) { int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7}; int i, n, alg; void (*pFun) (int*, int) = NULL; n = sizeof(A)/sizeof(A[0]); printf("Исходный массив: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); printf("\nВыберите алгоритм сортировки (1 - \"методом пузырька\" по возрастанию,\ 2 - \"методом пузырька\" по убыванию: "); scanf("%d", &alg); switch (alg) { case 1: pFun = PuzSortInc; break; case 2: pFun = PuzSortDec; break; default: printf("ERROR! Такого алгоритма не определено!"); } if (pFun) { pFun(A,n); printf("\nSorted array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); }; return 0; } void PuzSortInc (int* arr, int size) { int i, j, buf; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] > arr[j + 1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } } } } void PuzSortDec (int* arr, int size) { int i, j, buf; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] < arr[j + 1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } } } }
Сколько символов будет прочитано из файла функцией fread() в результате выполнения приведенной программы? int main(void) { FILE *fp; char str[30] = "Lection 11"; if((fp=fopen("g:\\test.txt", "wt+"))==NULL) { printf("Ошибка при открытии файла.\n"); exit(1); } fwrite(str, sizeof(char), strlen(str)-3, fp); rewind(fp); fread(str, sizeof(char), sizeof(str)/sizeof(char), fp); fclose(fp); return 0; }
(1) 7
(2) 30
(3) при выполнении программы возникнет ошибка при попытке чтения из файла большего количества символов, чем было записано
Необходимо написать программу, которая позволит ввести с клавиатуры данные о поездах. Также в программе должен быть предусмотрен поиск по номеру поезда. Какая программа выполняет поставленную задачу?
(1) int main (void) { struct train { char *nazn; int numb; char *time; } tr[3]; int i = 0, sum = 0, n, ch=0; char *str; while(ch!=121) { printf("\nEnter information about train (Q - quit): \n"); printf("Enter destination of the train: "); gets(tr[i].nazn); printf("Enter number of the train: "); gets(str); tr[i].numb = atoi(str); printf("Enter time of scheduled departure: "); gets(tr[i].time); ++i; printf("Quit? (y/n): "); ch = _getche(); }; printf("\n\nEnter train number for search: "); scanf("%d",&n); for (i=0; i<3; i++) { if (tr[i].numb == n) { printf("\n\tTrain: %s", tr[i].nazn); printf("\n\tTime: %s", tr[i].time); } } if (i>=3) printf("There is no train with this number"); return 0; }
(2) int main (void) { struct train { char nazn[40]; int numb; char time[10]; } tr[3]; int i = 0, sum = 0, n, ch=0; char str[10]; while(ch!=121) { printf("\nEnter information about train (Q - quit): \n"); printf("Enter destination of the train: "); gets(tr[i].nazn); printf("Enter number of the train: "); gets(str); tr[i].numb = atoi(str); printf("Enter time of scheduled departure: "); gets(tr[i].time); ++i; printf("Quit? (y/n): "); ch = _getche(); }; printf("\n\nEnter train number for search: "); scanf("%d",&n); for (i=0; i<3; i++) { if (tr[i].numb == n) { printf("\n\tTrain: %s", tr[i].nazn); printf("\n\tTime: %s", tr[i].time); } } if (i>=3) printf("There is no train with this number"); return 0; }
(3) int main (void) { struct train { char nazn[40]; int numb; char time[10]; } tr[3]; int i = 0, sum = 0, n, ch=0; char str[10]; while(ch!=121) { printf("\nEnter information about train (Q - quit): \n"); printf("Enter destination of the train: "); gets(tr[i]->nazn); printf("Enter number of the train: "); gets(str); tr[i]->numb = atoi(str); printf("Enter time of scheduled departure: "); gets(tr[i]->time); ++i; printf("Quit? (y/n): "); ch = _getche(); }; printf("\n\nEnter train number for search: "); scanf("%d",&n); for (i=0; i<3; i++) { if (tr[i]->numb == n) { printf("\n\tTrain: %s", tr[i].nazn); printf("\n\tTime: %s", tr[i].time); } } if (i>=3) printf("There is no train with this number"); return 0; }
Какая программа содержит ошибку?
(1) int main(void) { enum coin { penny, nickel, dime, quarter=100, half_dollar, dollar}; enum coin money; int s = 0; money = half_dollar; s = money + dollar; printf("s = %d", s); return 0; }
(2) int main(void) { enum coin { penny, nickel, dime, quarter, half_dollar, dollar}; enum coin money; char name[][12]={ "penny", "nickel", "dime", "quarter", "half_dollar", "dollar" }; money = half_dollar; printf("%s", name[money]); return 0; }
(3) int main(void) { enum coin { penny, nickel, dime, quarter=100, half_dollar, dollar}; enum coin money; int s = 0; s = money.half_dollar + money.dollar; return 0; }
В приведенной программе функция Copy выполняет копирование одной структуры типа sale в другую и возвращает структуру этого же типа: typedef struct sale_struct { char *title; int price; } sale; sale Copy(sale); int main(void) { sale s1,s2; struct sale_struct s3, s4; s1.title = "Book"; s1.price = 200; s3.title = "Cake"; s3.price = 60; return 0; } sale Copy(sale s) { sale s1; s1 = s; return s1; } Какие из перечисленных вызов функции Copy являются верными?
(1) s2 = Copy(s1);
(2) s3 = Copy(s1);
(3) s4 = Copy(&s3);
В каком случае приведено верное описание выполнения операции побитового отрицания ~ для числа 0х92С4?
(1) исходное число: 1001 0010 1100 0100 результат операции: 0000 0000 0000 0000
(2) исходное число: 1001 0010 1100 0100 результат операции: 1111 1111 1111 1111
(3) исходное число: 1001 0010 1100 0100 результат операции: 0110 1101 0011 1011
Что обозначает подключение #include "..\..\some.h"?
(1) то, что файл some.h находится на два уровня ниже, чем главный файл
(2) то, что файл some.h находится на два уровня выше, чем главный файл
(3) то, что для поиска файла some.h необходимо выполнить просмотр верхних уровней до тех пор, пока файл не будет найден
Какие новые объекты создаются при рекурсивном вызове функции?
(1) копия кода функции
(2) копия значений параметров функции
(3) копии всех объектов, связанных с функцией
В каком случае директива #define определяет макрос?
(1) #define VERSION 1
(2) #define VASYA "Василий Иванович"
(3) #define MAX (x, y) ((x)>(y) ? (x) : (y))
(4) #if VERSION == 1 #define INCFILE "vers1.h" #elseif VERSION == 2 #define INCFILE "vers1.h" #else #define INCFILE "versN.h" #endif #include INCFILE
Что будет выведено на экран в результате выполнения приведенного фрагмента кода на 32-битной платформе? printf("\n Maximum integer: %d\n ", INT_MAX);
(1) Maximum integer: 32767
(2) Maximum integer: 65535
(3) Maximum integer: 2147483647
(4) Maximum integer: 4294967295
При каком условии запуска программы из командной строки значение argc будет равно 0? int main(int argc, char *argv[]) { int t; for(t=0; t<argc; ++t) printf("%s\n", argv[t]); return 0; }
(1) при запуске программы без параметров, то есть командой ProgramName.exe
(2) при запуске программы командой ProgramName.exe 0
(3) ни при каких условиях
(4) при запуске программы с любым количеством параметров
Игра "Угадай число" заканчивавается, если задуманное число угадано, или количество попыток достигло определенного значения, например, 10. Главный цикл игры реализован следующим образом: int c = 0, n = 100, m; do { printf("Ваш вариант: "); scanf("%d", &m); c++; } while <Условие> c - число попыток, n - задуманное число. Каким должно быть условие завершения игры?
(1) ((n==m) || (c>10))
(2) ((n==m) && (c>10))
(3) (n!=m) || (c<=10))
(4) ((n!=m) && (c<10))
(5) ((n!=m) && (c<=10))
Что будет выведено на экран в результате выполнения приведенного фрагмента кода? int n = 1; while (n<=10) { if (n%2) printf("%d\n", n); n++; return; printf("%d\n", n); n++; }
(1) все числа от 1 до 10
(2) все нечетные числа от 1 до 10
(3) все четные числа от 1 до 10
(4) первое нечетное число - число 1
Какая программа вычисляет сумму четных элементов двумерного массива?
(1) #include <stdio.h> #define N 5 int main() { int i, j, sum=0; int arr[N][2] = {0,1,2,3,4,5,6,7,8,9}; for (i=0; i<N; i++) { for (j=0; j<N; j++) if (!(arr[i][j]%2)) sum = sum+arr[i][j]; } printf("sum = %d\n", sum); }
(2) #include <stdio.h> #define N 5 int main() { int i, j, sum=0; int arr[N][2] = {0,1,2,3,4,5,6,7,8,9}; for (i=0; i<N; i++) sum += arr[i][0]; printf("sum = %d\n", sum); return 0; }
(3) #include <stdio.h> #define N 5 #define M 2 int main() { int i, j, sum=0; int arr[N][2] = {0,1,2,3,4,5,6,7,8,9}; for (i=0; i<N; i++) sum += arr[i][1]; printf("sum = %d\n", sum); return 0; }
Какая программа реализует сортировку массива целых чисел по возрастанию методом "пузырька" (методом прямого обмена)?
(1) #include <stdio.h> #define N 7 int main() { int i, j, k, buf; char arr[N] = "Lection"; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { if (arr[j] < arr[j+1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } }; for (k=0; k<N; k++) printf("%d ", arr[k]); return 0; }
(2) #include <stdio.h> #define N 7 int main() { int i, j, k, buf, min; char arr[N] = "Lection"; for (i=0; i<N-1; i++) { min = i; for (j=i+1; j<N; j++) { if (arr[j]<arr[min]) min = j; buf = arr[i]; arr[i] = arr[min]; arr[min] = buf; } } for (k=0; k<N; k++) printf("%c ", arr[k]); return 0; }
(3) #include <stdio.h> #define N 7 int main() { int i, j, k, buf; char arr[N] = "Lection"; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { if (arr[j] > arr[j+1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } }; for (k=0; k<N; k++) printf("%d ", arr[k]); return 0; }
В программе объявлен указатель void *p. Какое утверждение является верным?
(1) указатель p может содержать адрес только объекта типа void
(2) к указателю p неприменима операция разыменования
(3) указатель p может быть автоматически преобразован к любому типу
В каком случае используется многоуровневая адресация?
(1) int x = 100, *ptr1, *ptr2; ptr1 = &x; ptr2 = &x;
(2) int x = 100, *ptr1, **ptr2; ptr1 = &x; ptr2 = &ptr1;
(3) int data[7]; int *pd[] = {&data[0], &data[4], &data[2]};
Задан указатель double **m на массив указателей: int i; double **m; m = (double **)calloc(10,sizeof(double *)); for (i=0; i<10; i++) m[i] = (double *)calloc(5,sizeof(double)); Как в данном случае освободить выделенную память?
(1) for (i=0; i<10; i++) free(m[i]);
(2) free(m);
(3) for (i=0; i<10; i++) free(m[i]); free(m);
В какой функции содержится ошибка?
(1) int fun(int *arr, int n) { int i, s=0; for (i=0; i<n; i++) s+=arr[i]; return s; }
(2) int fun(int *arr, int n) { int i, s=0; for (i=0; i<n; i++) arr[i] *= 2; return s; }
(3) int* fun() { int a = 10; return &a; }
Задан указатель на функции int (*pFun) (int, int). Какие утверждения являются верными?
(1) переменная pFun способна указывать на любую функцию
(2) переменная pFun способна указывать только на функцию, которая возвращает число типа int
(3) переменная pFun способна указывать только на функцию, которая возвращает число типа int и требует два числа этого типа в качестве параметра
Задан файл, содержащий список названий и стоимости мониторов: filesКакой файл будет получен в результате выполнения приведенной программы? int main( void ) { FILE *stream; char str[81]; int result; if ( fopen_s( &stream, "g:\\list.txt", "r+" ) != 0 ) { printf( "The file list.txt was not opened\n" ); return -1; } result = fseek( stream, -27L, SEEK_END); if( result ) perror( "Fseek failed" ); else { fputs( "5. NEC MultiSync EX231W - 10490 rub.", stream ); printf( "%s", str ); } fclose( stream ); return 0; }
(1) files
(2) files
(3) files
В каком случае структура верно определена с использованием ключевого слова typedef?
(1) struct foot_klub { char name[20]; int liga; float ochki; }; typedef struct foot_klub f_club; f_club a, *p, b[5];
(2) struct foot_klub { char name[20]; int liga; float ochki; }; typedef struct foot_klub *f_club; f_club a, *p, b[5];
(3) typedef struct { char name[20]; int liga; float ochki; }f_club; f_club a, *p, b[5];
При каких значениях переменной error в результате выполнения приведенной программы на экран будет выведено сообщение Возникла ошибка чтения (ERR_READ)? int main(void) { typedef enum { ERR_READ, ERR_WRITE, ERR_CONVERT} Err; Err error; switch (error) { case ERR_READ: printf("Возникла ошибка чтения (ERR_READ)\n"); break; case ERR_WRITE: printf("Возникла ошибка записи (ERR_WRITE)\n"); break; case ERR_CONVERT: printf("Возникла ошибка преобразования (ERR_CONVERT)\n"); break; default: printf("Возникла неизвестная ошибка\n"); break; }; return 0; }
(1) error = 0;
(2) error = 1;
(3) error = ERR_READ;
Необходимо написать функцию копирования значений всех полей одной структуры заданного типа в другую: typedef struct sale_struct { char *title; int price; } sale; Какая функция выполняет поставленную задачу?
(1) sale Copy(char* t, int p) { sale s1; s1.title = t; s1.price = p; return s1; }
(2) sale Copy(sale *s) { sale s1; s1 = s; return s1; }
(3) sale Copy(sale s) { sale s1; s1 = s; return s1; }
Значения каких переменных будут четными? a = 6 & 5; b = 6 | 5; c = 6 ^ 5;
(1) a
(2) b
(3) c
Для чего используется класс статической памяти?
(1) для улучшения ясности алгоритма, реализованного в программе
(2) для улучшения читаемости и ясности текста программы
(3) для исключения конфликта имен
Задана функция вычисления факториала: long fact (int n){ if ( n<1 ) return 1; else return n*fact(n-1); } Какой будет последовательность вызов, если в функции main задать long result=fact(3)?
(1) files
(2) files
(3) files
Какое действие выполняется при использовании заданного набора директив? #ifndef HEADER_INCLUDED #include "arr.h" #define HEADER_INCLUDED #enif
(1) выполняется подключение заголовочного файла arr.h, если определен символ HEADER_INCLUDED
(2) выполняется подключение заголовочного файла arr.h, если символ HEADER_INCLUDED не определен
(3) обязательное подключение файла arr.h
(4) принудительное отключение подключенного файла arr.h
Размер (в байтах) объектов каких типов данных не зависит от разрядности процессора?
(1) char
(2) int
(3) unsigned int
Каким образом будет предствален аргумент argv при запуске программы через командную строку echo Hello, world!?
(1) files
(2) files
(3) files
Какое назначение может иметь в программе приведенный цикл без тела? for(t=0; t<SOME_VALUE; t++) ;
(1) вычисление значения SOME_VALUE
(2) задержка выполнения последующей части программы
(3) задание цикла без тела недопустимо
В каком случае, если пользователь введет число -4, на экран будет выведено сообщение -4 в квадрате = -16?
(1) int isqrd, i; printf("Введите число: "); scanf("%d", &i); isqrd = i>0 ? i*i : -(i*i); printf("%d в квадрате = -%d", i, isqrd);
(2) int isqrd, i; printf("Введите число: "); scanf("%d", &i); isqrd = i<0 ? i*i : -(i*i); printf("%d в квадрате = %d", i, isqrd);
(3) int isqrd, i; printf("Введите число: "); scanf("%d", &i); isqrd = i>0 ? i*i : -(i*i); printf("%d в квадрате = %d", i, isqrd);
Чему будет равно значение переменной size в результате выполнения приведенного фрагмента кода? int arr[5][2] = {0,1,2,3,4,5,6,7,8,9}; size = sizeof(arr)/sizeof(arr[0]);
(1) 5
(2) 10
(3) 40
Какая программа реализует посимвольный ввод строки до тех пор, пока не будет нажата клавиша Enter, и последующий вывод введенной строки?
(1) #include <stdio.h> #include <conio.h> #define N 10 int main() { int i=0; char arr[N] = ""; printf("Last Name: "); while (i<N) { arr[i] = _getche(); if (arr[i]==13) break; i++; }; printf("\nYou have entered Last Name: %s", arr); return 0; }
(2) #include <stdio.h> #include <conio.h> #define N 10 int main() { int i=0; char arr[N] = ""; printf("Last Name: "); while ((i<N) && (arr[i]!=13)) { arr[i] = _getche(); i++; }; printf("\nYou have entered Last Name: %s", arr); return 0; }
(3) #include <stdio.h> #include <conio.h> #define N 10 int main() { int i=0; char arr[N] = ""; printf("Last Name: "); while (i<N) { arr[i] = _getche(); if (arr[i]==13) { arr[i] = '\0'; break; } i++; }; printf("\nYou have entered Last Name: %s", arr); return 0; }
В приведенном фрагменте кода используется константный указатель: int lec = 7, qst = 11; int *const plec = &lec; int *pqst; pqst = &qst; (*plec)++; printf("Number of the next lection is %d\n", lec ); Какая ошибка содержится в данном коде?
(1) константный указатель plec должен адресовать константу, а переменная lec не является константой
(2) константный указатель plec не может быть изменен
(3) приведенный фрагмент не содержит ошибок
Задан фрагмент кода: int m[][5] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}}; int *ptr; int i, j, n, k, el; n = sizeof(m)/sizeof(m[0]); k = sizeof(m[0])/sizeof(m[0][0]); ptr = &m[0][0]; На какой элемент массива m будет указывать указатель ptr+3?
(1) m[0][3]
(2) m[1][3]
(3) m[2][0]
(4) m[2][1]
В каком случае будет выделена память под двухмерный массив размером 4х10?
(1) int *arr = (int *)malloc((4*10)*sizeof(int));
(2) int i; int **m; m = (int **)calloc(10,sizeof(int *)); for (i=0; i<10; i++) m[i] = (int *)calloc(4,sizeof(int));
(3) int (*p)[10]; p = malloc(40*sizeof(int));
В какой программе используются функции (как стандартные, так и пользовательские) с переменным числом аргументов?
(1) #include <stdio.h> #include <stdarg.h> int average(int first, ... ); int main( void ) { int x = average(2, 3, 4, -1); return 0; } int average( int first, ... ) { int count = 0, sum = 0, i = first; va_list marker; va_start(marker, first); while( i != -1 ) { sum += i; count++; i = va_arg(marker, int); } va_end(marker); return( sum ? (sum / count) : 0 ); }
(2) #include <stdio.h> #include <conio.h> int main(void) { void printMessage (void); printMessage(); printf("\nPress any key: "); _getch(); return 0; } void printMessage (void) { printf("Function for Lection 10\n"); return; printf("123\n"); }
(3) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(&a[0][0], n, m); printf("Результат вычисления\n"); printf("Сумма элементов а[%d][%d] = %d\n", n, m, s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }
Функция xgets() в упрощенном виде демонстрирует работу стандартной функции gets(): char *xgets(char *s) { char ch, *p; int t; p = s; for(t=0; t<80; ++t){ ch = getchar(); switch(ch) { case '\n': s[t] = '\0'; return p; case '\b': if(t>0) t--; break; default: s[t] = ch; } } s[79] = '\0'; return p; } Каким образом можно вызвать эту функцию?
(1) char str[10]=""; str = xgets(str); printf("str = %s", str);
(2) char str[10]=""; xgets(str); printf("str = %s", str);
(3) char str[10]=""; char *p; p = xgets(str); printf("str = %s", str);
Какая программа выводит на экран все строки из файла?
(1) int main( void ) { FILE *stream; char str[31] = ""; if( fopen_s( &stream, "g:\\list.txt", "r" ) != 0 ) printf( "The file list.txt was not opened\n"); else { while (feof(stream)) { fgets(str, 31, stream); printf("%s", str); } printf("\n"); } return 0; }
(2) int main( void ) { FILE *stream; char str[31] = ""; if( fopen_s( &stream, "g:\\list.txt", "r" ) != 0 ) printf( "The file list.txt was not opened\n"); else { do { fgets(str, 31, stream); printf("%s", str); } while (!feof(stream)); printf("\n"); } return 0; }
(3) int main( void ) { FILE *stream; char str[31] = ""; if( fopen_s( &stream, "g:\\list.txt", "r" ) != 0 ) printf( "The file list.txt was not opened\n"); else { for( ; !feof(stream); ) { fgets(str, 31, stream); printf("%s", str); } printf("\n"); } return 0; }
Какая ошибка содержится в приведенной программе? int main (void) { struct train_info { char nazn[40]; int numb; char time[10]; }; typedef struct train_info train; train tr[3]; int i = 0, sum = 0, ch=0; char str[10], search[10]; while(ch!=121) { printf("\nEnter information about train (Q - quit): \n"); printf("Enter destination of the train: "); gets(tr[i].nazn); printf("Enter number of the train: "); gets(str); tr[i].numb = atoi(str); printf("Enter time of scheduled departure: "); gets(tr[i].time); ++i; printf("Quit? (y/n): "); ch = _getche(); }; printf("\n\nEnter train destination: "); gets(search); for (i=0; i<3; i++) { if (strcmp(tr[i].nazn,search)==0) { printf("\n\tTrain number: %d", tr[i].numb); printf("\n\tTime: %s", tr[i].time); } } if (i>=3) printf("There is no train to this destination"); return 0; }
(1) неверно используется ключевое слово typedef
(2) выполняется неверное обращение к полям структуры
(3) неверно объявлен массив tr
(4) программа не содержит ошибок
Какая ошибка допущена в приведенной программе? int main (void) { enum month {january = 1, february, march, april, may, june,july, august, september, october, november, december } aMonth; int days; printf("\n Enter the number of the month (1 - 12): "); scanf_s("%d", &aMonth); switch (aMonth) { case january: case march: case may: case july: case august: case october: case december: days = 31; break; case april: case june: case september: case november: days = 30; break; case february: days = 28; break; default: printf("\n\t Wrong number of the month\n"); days = 0; break; } if (days) printf("\n The number of days of the month: %d\n", days); if (aMonth == "february") printf("\n ... or 29 if it is a leap year\n"); return 0; }
(1) программа не содержит ошибок
(2) неверное определение оператора switch
(3) неверное обращение к полю перечисления при сравнении
Каким образом выполняется передача функции члена структуры?
(1) по значению
(2) по ссылке
(3) член структуры не может быть отдельно передан структуре
Какое действие выполняет приведенная программа? int main(void) { int date; int year = 26; int month = 12; int day = 31; year = year << 9; month = month << 5; date = day; date = date | month; date = date | year; return 0; }
(1) складывает год, месяц, число
(2) выполняет операцию побитового включающего ИЛИ для всех переменных
(3) записывает в одно слово полную дату (год, месяц, число)
Файл second.h, расположенный на диске D:, содержит следующие описания переменных и функций: extern int x, y; extern char ch; void func22(void) { y = 100; } void func23(void) { x = y/10; ch = 'R'; } В каком случае выполняется неверное подключение файла second.h в другом файле?
(1) #include <stdio.h> #include <conio.h> #include "D:\second.h" int x = 99, y = 77; char ch; void func1(void); int main(void) { ch = 'Z'; func1(); printf("\n Press any key: "); _getch(); return 0; } void func1(void) { func22(); func23(); printf("\n\t x = %d; y = %d;\ ch = %c\n", x, y, ch); }
(2) #include <stdio.h> #include <conio.h> #include <D:\second.h> int x = 99, y = 77; char ch; void func1(void); int main(void) { ch = 'Z'; func1(); printf("\n Press any key: "); _getch(); return 0; } void func1(void) { func22(); func23(); printf("\n\t x = %d; y = %d;\ ch = %c\n", x, y, ch); }
(3) #include <stdio.h> #include <conio.h> #include D:\second.h int x = 99, y = 77; char ch; void func1(void); int main(void) { ch = 'Z'; func1(); printf("\n Press any key: "); _getch(); return 0; } void func1(void) { func22(); func23(); printf("\n\t x = %d; y = %d;\ ch = %c\n", x, y, ch); }
Какие из перечисленных задач могут быть решены с помощью рекурсии?
(1) поиск пути между двумя городами
(2) вычисление суммы элементов одномерного массива
(3) вычисление арифметической прогрессии
В каком случае на экран будут выведены сочетания имен и фамилий, заданных в файле arr.h? Содержание файла arr.h: char *names[] = {"Иван", "Пётр", "Илья"}; char *surnames[] = {"Иванов", "Пётров", "Ильин"};
(1) #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <locale.h> #ifndef ARR #define ARR #include "arr.txt" #endif int main (void) { int i = 0 , j = 0, n; setlocale (LC_ALL, "rus"); printf("Введите количество человек (от 1 до 3): "); scanf("%d", &n); if (n<1 || n>3) { printf("Ошибка ввода данных. Нажмите любую клавишу: "); _getch(); exit(1); } #undef ARR #ifdef ARR for (i=0; i<n; i++) printf("%d. %s %s\n", i+1, names[i], surnames[i]); #endif return 0; }
(2) #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <locale.h> #ifndef ARR #define ARR #include <arr.txt> #endif int main (void) { int i = 0 , j = 0, n; setlocale (LC_ALL, "rus"); printf("Введите количество человек (от 1 до 3): "); scanf("%d", &n); if (n<1 || n>3) { printf("Ошибка ввода данных. Нажмите любую клавишу: "); _getch(); exit(1); } #ifdef ARR for (i=0; i<n; i++) printf("%d. %s %s\n", i+1, names[i], surnames[i]); #endif return 0; }
(3) #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <locale.h> #ifndef ARR #define ARR #include "arr.txt" #endif int main (void) { int i = 0 , j = 0, n; setlocale (LC_ALL, "rus"); printf("Введите количество человек (от 1 до 3): "); scanf("%d", &n); if (n<1 || n>3) { printf("Ошибка ввода данных. Нажмите любую клавишу: "); _getch(); exit(1); } #ifdef ARR for (i=0; i<n; i++) printf("%d. %s %s\n", i+1, names[i], surnames[i]); #endif return 0; }
Чему будет равен результат вычисления a + b, если переменные имеют заданные значения? int a = INT_MIN; int b = INT_MAX;
(1) -1
(2) 0
(3) 1
Какое утверждение является верным?
(1) если argc равно 1, то в командной строке после имени программы задан 1 аргумент
(2) в случае запуска программы echo Здравствуй, мир! количество аргументов argc равно 3
(3) аргумент argv представляет собой массив символьных строк, содержащих сами аргументы
Какие утверждения являются верными?
(1) операторы циклов for, while и do while не являются взаимозаменяемыми
(2) проверка условия выполняется на каждой итерации цикла
(3) в случаях, когда число итераций заранее неизвестно, удобнее использовать оператор while
Задан цикл, который выводит все числа от 1 до 10: int n = 1; (1) while (n<=10) (2) { if (n%2) (3) printf("%d\n", n); (4) n++; (5) printf("%d\n", n); (6) n++; (7) } Как изменить приведенный цикл, чтобы на экран выводились только нечетные числа от 1 до 10?
(1) в строке (5) удалить приращение переменной n
(2) после строки (5) добавить оператор continue
(3) изменить условие в строке (3) на (!(n%2))
Какая переменная после выполнения приведенного фрагмента кода определяет общий размер массива в байтах? int size1, size2, size3; int arr[5][2] = {0,1,2,3,4,5,6,7,8,9}; size1 = sizeof(arr)/sizeof(arr[0][0]); size2 = sizeof(arr)/sizeof(arr[0]); size3 = sizeof(arr);
(1) size1
(2) size2
(3) size3
Что делает приведенная программа? #include <stdio.h> #include <conio.h> int main() { int n=0, i=0; char ch, str[30]=""; printf("Введите строку: "); scanf("%s", str); printf("Введите символ: "); ch = _getche(); while(str[i]!='\0') { if(str[i]==ch) n++; i++; } return 0; }
(1) определяет количество символов в строке
(2) определяет количество вхождений заданного символа в строку
(3) определяет количество вхождений каждого символа в строку
Какое выражение нужно вставить в обозначенное место приведенного кода для того, чтобы значение переменной z было равно 40? int x = 10, y = 20, z; int *p1, *p2; p1 = &x; p2 = p1; <Выражение> z = (x==y) ? (x+y) : (y-x);
(1) x = y;
(2) p1 = &y;
(3) *p2 = y;
Какие утверждения являются верными?
(1) многоуровневая адресация упрощает программу
(2) при использовании многоуровневой адресации уменьшается вероятность возникновения ошибок
(3) многоуровневая адресация делает программу плохо читаемой
Каким может быть время жизни динамических переменных?
(1) от точки создания до конца программы
(2) от точки создания до явного освобождения памяти
(3) от точки создания до конца работы операционной системы
Какие переменные являются формальными параметрами функции sq()? int sq(int a, int x) { int i, res = 1; for (i=0; i<x; i++) res*= a; return res; } int main(void) { int n=4, b = 3, p; p = sq(n,b); printf("%d^%d = %d\n", n, b, p); return 0; }
(1) a
(2) x
(3) n
(4) b
Функция swap() имеет два аргумента-указателя и выполняет обмен значений элементов: void swap(int *pa, int *pb) { int temp; temp = *pa; *pa = *pb; *pb = temp; } В каком случае вызов функции swap() осуществляется неверно?
(1) int main (void) { int a = 10, b = 20; int *x, *y; x = &a; y = &b; printf("Initial values: a = %d, b = %d\n", a, b); swap(x, y); printf("New values: a = %d, b = %d\n", a, b); printf("... Press any key: \n"); _getch(); return 0; }
(2) int main (void) { int a = 10, b = 20; printf("Initial values: a = %d, b = %d\n", a, b); swap(a, b); printf("New values: a = %d, b = %d\n", a, b); printf("... Press any key: \n"); _getch(); return 0; }
(3) int main (void) { int a = 10, b = 20; printf("Initial values: a = %d, b = %d\n", a, b); swap(*a, *b); printf("New values: a = %d, b = %d\n", a, b); printf("... Press any key: \n"); _getch(); return 0; }
(4) int main (void) { int a = 10, b = 20; printf("Initial values: a = %d, b = %d\n", a, b); swap(&a, &b); printf("New values: a = %d, b = %d\n", a, b); printf("... Press any key: \n"); _getch(); return 0; }
Что такое текстовый поток?
(1) последовательность символов
(2) последовательность байтов, которая взаимно однозначно соответствует байтам на внешнем устройстве
(3) именованный объект, хранящий данные на каком-либо носителе
В чем отличие структуры от массива?
(1) структура может содержать элементы разных типов
(2) структура не имеет имени
(3) структура не может содержать несколько элементов одинакового типа
Частным случаем какого типа данных являются объединения (union)?
(1) структур
(2) массивов
(3) перечислений
Задана структура: struct fred { char x; int y; float z; char str[10]; } mike; В каком случае функции func() передается адрес отдельного члена структуры?
(1) func(&mike.x);
(2) func(mike.y);
(3) func(mike.str);
(4) func(&mike.str[2]);
Какой разряд байта является старшим?files
(1) 0-й
(2) 1-й
(3) 2-й
(4) 3-й
(5) 4-й
(6) 5-й
(7) 6-й
(8) 7-ой
(9) невозможно определить, так как это зависит от компилятора
Какие функции не могут использоваться функциями из других файлов? extern int x, y; extern char ch; static void func1(void) { y = 100; } int func2(int a) { int b; b = a; retun b; } extern void func2(void) { x = y/10; ch = 'R'; }
(1) func1
(2) func2
(3) func2
Какие утверждения являются верными?
(1) при прямой рекурсии функция вызывает сама себя
(2) при прямой рекурсии две и более функций вызывают друг друга
(3) при косвенной рекурсии функция вызывает сама себя
(4) при косвенной рекурсии две и более функций вызывают друг друга
Что такое препроцессор?
(1) инструкция препроцессора
(2) программа, выполняющая предварительную обработку входных данных для другой программы
(3) буферный процессор
Что является недостатком языка С?
(1) недостаточная структурированность
(2) непереносимость
(3) низкая эффективность
(4) высокие требования к квалификации программиста
Какое формальное определение прототипа функции main() с параметрами является неверным?
(1) int main (int argc, char argv);
(2) int main (int argc, char *argv[]);
(3) int main (int argc, char **argv);
Какой цикл реализует приведенную структурную схему?files
(1) while
(2) do while
(3) for
Структурная схема какого оператора представлена ниже?files
(1) оператора switch
(2) цикла do while
(3) оператора if
(4) конструкции if - else
Почему доступ к элементам многомерного массива происходит значительно медленнее, чем к элементам одномерного?
(1) место хранения для всех элементов многомерного массива определяется во время компиляции, поэтому для выделения памяти в этом случае требуется больше времени
(2) при обращении к многомерным массивам много времени затрачивается на вычисление адреса, так как при этом приходится учитывать значение каждого индекса
(3) многомерные массивы хранят больше данных
Почему доступ к элементам многомерного символьного массива происходит значительно медленнее, чем к элементам одномерного?
(1) место хранения для всех элементов многомерного массива определяется во время компиляции, поэтому для выделения памяти в этом случае требуется больше времени
(2) при обращении к многомерным массивам много времени затрачивается на вычисление адреса, так как при этом приходится учитывать значение каждого индекса
(3) многомерные массивы хранят больше данных
Какие элементы не могут быть операндами оператора адресации &?
(1) переменная
(2) выражение
(3) константа
(4) элемент массива
Какой недостаток имеет использование указателей для массивов?
(1) снижение производительности
(2) меньшая наглядность по сравнению со стандартной записью массивов с индексами
(3) использование большего количества памяти
Какое утверждение является верным для динамически распределяемой памяти?
(1) память выделяется один раз до начала работы программы
(2) выделенная область памяти не может быть освобождена до завершения работы программы
(3) память предоставляется программе при ее работе
Какие утверждения являются верными?
(1) память, выделенная локальным переменным при входе в функцию, освобождается после возврата из нее
(2) значения фактических параметров не могут быть изменены из тела функции ни при каких условиях
(3) при передаче в функцию в качестве параметра массива возможно изменение значений элементов этого массива из тела функции
Что произойдет после выполнения приведенной программы? #include <stdio.h> #define n 10 void fun(int *mas, int k); int main( void ) { int arr[n] = {3,4,5,4,4}; int i; fun(arr, n); for (i=0; i<n; i++) printf("arr[%d] = %d\n", i, arr[i]); return 0; } void fun(int *mas, int k) { int i, s = 0; for (i=0; i<k; i++) mas[i] *= 2; }
(1) ничего не произойдет, так как функция fun(int *mas, int k) не возвращает значения
(2) значения всех элементов массива arr будут увеличены в два раза
(3) размер памяти для хранения массива arr будет увеличен в два раза
В каком случае файлы не закрываются?
(1) в случае краха программы
(2) в случае нормального завершения работы программы
(3) в случае завершения программы путем вызова функции exit()
(4) в случае завершения программы путем вызова функции abort()
Какие переменные, имеющие тип заданной структуры, объявлены в приведенном описании? struct addr { char name[30]; char street[40]; char city[20]; char state[3]; unsigned long int zip; } addr_info, binfo;
(1) addr
(2) name
(3) street
(4) city
(5) state
(6) zip
(7) addr_info
(8) binfo
В чем заключается назначение перечислений (enum)?
(1) в том, чтобы повысить удобочитаемость программы
(2) в том, чтобы экономнее использовать память
(3) в том, чтобы иметь возможность использовать совокупность элементов разных типов
Какая программа содержит ошибку?
(1) struct struct_type {int a, b; char ch; }; void fun(struct struct_type STRUCT3); int main (void) { struct struct_type struct2 = {2, 3, 'Z' }; fun(struct2); return 0; } void fun(struct struct_type STRUCT3) { printf("\n %c: %d + %d = %d\n", \ STRUCT3.ch, STRUCT3.a, STRUCT3.b, STRUCT3.a + STRUCT3.b); }
(2) struct struct_type { int a, b; char ch; }; void fun(struct struct_type parm); int main (void) { struct struct_type arg; arg.a = 1000; fun(arg); return 0; } void fun(struct struct_type parm) { printf("\n %d\n", parm.a); }
(3) struct struct_type { int a, b; char ch; }; void fun(struct struct_type *parm); int main (void) { struct struct_type arg,*PTR; PTR = &arg; PTR->a = 999; fun(PTR); return 0; } void fun(struct struct_type *parm) { printf("\n %d\n", parm->a); }
(4) struct struct_type { int a, b; char ch; }; void fun(struct struct_type *parm); int main (void) { struct struct_type arg,*PTR; PTR = &arg; PTR->a = 999; fun(PTR); return 0; } void fun(struct struct_type &parm) { printf("\n %d\n", parm->a); }
Какие утверждения являются верными?
(1) бит может принимать любые значения
(2) 1 бит содержит 8 байт
(3) бит может принимать только значения 0 и 1
(4) 1 байт содержит 8 бит
При какой продолжительности хранения память под переменную выделяется в момент, когда выполнение программы входит в блок, в котором эта переменная определена, и освобождается, когда выполнение программы покидает этот блок?
(1) при статической продолжительности хранения
(2) при автоматической продолжительности хранения
(3) при распределенной продолжительности хранения
Какие достоинства имеет использование рекурсии?
(1) слишком объемная запись функции
(2) возможность переполнения стека
(3) увеличение использумой памяти
Какая строка является недопустимой?
(1) #include "test1.h"
(2) _#define M 5
(3) #include <stdio.h> #include <conio.h>
Почему язык С относится к языку среднего уровня?
(1) язык С менее совершенен по сравнению с традиционными языками высокого уровня
(2) язык С обладает недостаточной структурированностью
(3) язык С сочетает элементы языков высокого уровня с функциональностью ассемблера
Программа запускается с одним аргументом, задающим имя и фамилию, которые в результате выполнения программы выводятся в файл. Каким образом необходимо задать аргумент командной строки, чтобы имя и фамилия были выведены в файл в формате Имя Фамилия?
(1) files
(2) files
(3) files
В каком случае при выполнении приведенного кода не возникнет зацикливания?
(1) int x=0, y = 1; while (1) { y = y*2; printf("%d ", x); x++; }
(2) int x=1, y = 1; for (; x<5; x++) { y = y*2; printf("%d ", x); }
(3) int x, y = 1; for (x = 0; x < 5; x++) { x = y*2; printf("%d ", x); }
(4) int x=1, y = 1; for (; ; x++) { y = y*2; printf("%d ", x); if (x>=5) break; }
Какой оператор используется для выхода из функции при выполнении некоторых условий?
(1) continue
(2) break
(3) return
(4) goto
Какие утверждения являются верными?
(1) ячейка памяти с наименьшим адресом относится к первому элементу массива, а с наибольшим – к последнему
(2) элементы массива располагаются в памяти случайным образом, занимая свободные участки памяти
(3) элементы многомерного массива располагаются в памяти в порядке возрастания самого правого индекса
Строка инициализирована следующим образом: char str1[10] = "Course". Какое утверждение является верным?
(1) под строку выделяется 6 байт
(2) под строку выделяется 7 байт
(3) под строку выделяется 10 байт
Чему будет равно значение переменной z после выполнения приведенного фрагмента кода? int x = 99, y = 100, z; int *p1, *p2, *p3; p1 = &x; p2 = &y; p3 = p2; x = y; z = *p1 + *p2 + *p3;
(1) 299
(2) 300
(3) сумме адресов, хранящихся в указателях p1, p2 и p3
(4) при вычислении значения переменной z возникнет ошибка
Необходимо написать программу, которая копирует одну строку в другую. Какая программа выполняет поставленную задачу?
(1) #include <stdio.h> #include <conio.h> int main() { int i; char a[10] = "Test", b[10] = ""; char *pa = a; char *pb = b; for (i=0; i<strlen(a); i++) *pb++ = *pa++; printf("a = %s\n", a); printf("b = %s\n", b); return 0; }
(2) #include <stdio.h> #include <conio.h> int main() { int i; char a[10] = "Test", b[10] = ""; char *pa = &a[1]; char *pb = &b[1]; for (i=0; i<strlen(a); i++) pb[i] = pa[i]; printf("a = %s\n", a); printf("b = %s\n", b); return 0; }
(3) #include <stdio.h> #include <conio.h> int main() { int i; char a[10] = "Test", b[10] = ""; char *pa = a[0]; char *pb = b[0]; for (i=0; i<strlen(a); i++) pb[i] = pa[i]; printf("a = %s\n", a); printf("b = %s\n", b); return 0; }
Какие утверждения являются неверными?
(1) размер динамически распределяемой области памяти заранее известен
(2) динамически распределяемая область памяти не используется программой
(3) размер динамически распределяемой области памяти неограничен
Какой фрагмент кода не содержит ошибку?
(1) double circle(double pi, int R) { return 2*pi*R; } int main(void) { int R=5; double pi=3.14, L; L = circle(pi, R); printf("L = %.2f\n", L); return 0; }
(2) int min(int a, b) { int m = (a<b) ? a : b; return m; } int main(void) { int x=-5, y=5, m; m = min(x,y); printf("min = %d\n", m); return 0; }
(3) double max(double a, double b) { if (a>b) return a; return b; } int main(void) { double x=-5.00, y=5.12, m; m = max(x,y); printf("max = %.2f\n", m); return 0; }
Необходимо написать функцию, которая будет вычислять сумму всех элементов двухмерного массива. В какой программе вызов функции sum выполняется верно?
(1) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(a, n, m); printf("Сумма элементов а: %d\n", s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }
(2) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(a[0][0], n, m); printf("Сумма элементов а: %d\n", s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }
(3) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(&a[0][0], n, m); printf("Сумма элементов а: %d\n", s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }
Файл g:\test.txt содержит две строки: files Чему будет равен символ str[10] в результате выполнения приведенного фрагмента кода? char str[30], i; FILE *fp; if((fp = fopen("g:\\test.txt", "r"))==NULL) { printf("Ошибка при открытии файла.\n"); exit(1); } fgets(str, 30, fp); i = strlen(str); fclose(fp);
(1) '\n'
(2) '\r'
(3) '\0'
Какое объявление структур(-ы) не содержит ошибку?
(1) struct Worker { char fio[30]; int date, code; double salary; };
(2) struct List; struct Link { List *p; Link *prev; };
(3) struct Test { int a, b; Test t; };
(4) struct A {int a; double x; }; struct B {A a; double x; };
Какие утверждения являются верными?
(1) имена перечисляемых констант должны быть уникальными
(2) имена перечисляемых констант могут совпадать
(3) значения перечисляемых констант должны быть уникальными
(4) значения перечисляемых констант могут совпадать
Какие утверждения являются неверными для приведенной программы? #define MAX 20 double sum(double, double); int main (void) { struct test { char A[MAX+1]; double ax; char B[MAX+1]; double by; }; struct test AB; printf("\nEnter 1st name: "); gets_s(AB.A, MAX); printf("\nEnter the first real number: "); scanf_s("%lf", &AB.ax); _flushall(); printf("\nEnter 2nd name: "); gets_s(AB.B, MAX); printf("\nEnter the second real number: "); scanf_s("%lf", &AB.by); printf("\n\nThe sum of two numbers %1.2f and %1.2f, %s and %s: %1.2f\n", AB.ax, AB.by, AB.A, AB.B, sum(AB.ax, AB.by)); return 0; } double sum(double x, double y) { return (x + y); }
(1) для корректного выполнения программы структура test должна быть объявлена глобально
(2) в функцию sum передается структура
(3) в функцию sum передаются части структуры
(4) программа не содержит ошибок
Сколько возможных значений может принимать бит?
(1) 2
(2) 255
(3) 256
В каком случае переменная может быть использована в файле, содержащем ее определение?
(1) при внутреннем связывании
(2) при внешнем связывании
(3) при любом типе связывания
(4) ни при каком типе связывания
В каком случае для вычисления факториала не используется рекурсия?
(1) long fact(long n) { if (n==0 || n==1) return 1; return (n * fact(n-1)); }
(2) long fact(long n) { int i; long m = 1; if (n==0 || n==1) m = 1; else for (i=1; i<=n; i++) m *= i; return m; }
(3) long fact(long n) { return (n>1) ? n * fact(n-1) : 1; }
Засчет чего достигается увеличение скорости выполнения кода при использовании макроса с формальными параметрами очень большого размера?
(1) засчет увеличения размеров программы
(2) засчет уменьшения размеров программы
(3) засчет освобождения некоторых адресов памяти, используемых программой
Для чего предназначена папка External Dependencies в проекте, созданном в среде Microsoft Visual Studio 2010? files
(1) для хранения файлов с исходным кодом
(2) для хранения заголовочных файлов
(3) для хранения изображений иконок приложения
(4) для хранения файлов, которые не добавлены в проект явно, но используются в исходном коде
С каким количеством аргументов командной строки запускается программа (считается, что аргумент в заданном виде обрабатывается корректно?files
(1) 1
(2) 2
(3) 3
В результате выполнения какого фрагмента кода значение переменной y будет равно 10?
(1) int x = 5, y = 10; while (y<=x) { printf("%d ", y); y = x*3; }
(2) int x = 5, y; for(y=1; y<=x; ++y) { printf("%d ", y); y = x*2; }
(3) int x = 5, y = 1; do { y = x+1; x++; } while (y<=10);
При каких значениях переменной A значение переменной cond будет равно 0? int cond; int A = 1; cond = (A >= 100) && (A <= 150);
(1) при A = 50
(2) при A = 100
(3) при A = 120
(4) при A = 150
(5) при A = 200
По какой формуле вычисляется общий размер двумерного массива в байтах?
(1) всего байт = размер типа в байтах * количество элементов
(2) всего байт = число строк * число столбцов * размер типа в байтах
(3) всего байт = размер1* размер2*...* размерN *размер типа в байтах
В результате выполнения какого фграгмента программного кода значение переменной n будет больше 7?
(1) int n = 0; char str2[10] = "Lection\0"; n = strlen(str2);
(2) int n = 0; char str2[10] = "Lection"; n = strlen(str2);
(3) int n=0, num=10; char str1[10]="", str2[10]="Lection"; _itoa(num, str1, 10); strcat(str2, str1); n = strlen(str2);
Чему будут равны значения переменных a, b и c после выполнения приведенного фрагмента кода? int a=10, b=20, c=30; int *ptr; ptr = &a; c = *ptr; *ptr = 30; b = a;
(1) a = 10, b = 10, c = 10
(2) a = 30, b = 30, c = 10
(3) a = 30, b = 10, c = 10
Какая программа реализует сортировку массива целых чисел по убыванию методом "пузырька" (методом прямого обмена)?
(1) #include <stdio.h> int main() { int i, j, N, buf; int arr[] = {3, 2, 4, 5, 1}; int *ptr1, *ptr2; N = sizeof(arr)/sizeof(arr[0]); for (i=0; i<N; i++) { ptr1 = &arr[i]; for (j=0; j<N-1; j++) { if (*ptr1 < *(ptr1+1)) { buf = *ptr1; *ptr1 = *(ptr1+1); *(ptr1+1) = buf; } }; }; return 0; }
(2) #include <stdio.h> int main() { int i, j, N, buf; int arr[] = {3, 2, 4, 5, 1}; int *ptr1, *ptr2; N = sizeof(arr)/sizeof(arr[0]); ptr1 = arr; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { ptr1 = &arr[j]; if (*ptr1 < *(ptr1+1)) { buf = *ptr1; *ptr1 = *(ptr1+1); *(ptr1+1) = buf; } }; return 0; }
(3) #include <stdio.h> int main() { int i, j, N, buf; int arr[] = {3, 2, 4, 5, 1}; int *ptr1, *ptr2; N = sizeof(arr)/sizeof(arr[0]); ptr1 = arr; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { if (*ptr1 < *(ptr1+1)) { buf = *ptr1; *ptr1 = *(ptr1+1); *(ptr1+1) = buf; } ptr1++; }; return 0; }
В каком случае память выделяется динамически? int arr1[10] = {1,2,3,4,5}; (1) int *arr2 = (int *)calloc(10, sizeof(int)); (2) int *arr3 = (int *)malloc(10*sizeof(int)); (3) int arr4[][3] = {{1,2,3}, {4,5,6}}; (4)
(1) в случае (1)
(2) в случае (2)
(3) в случае (3)
(4) в случае (4)
Функция is_in определяет, входит ли символ c в строку s: int is_in(char *s, char c) (1) { while(*s) (2) if(*s==c) return 1; (3) else s++; (4) return 0; (5) } При выполнении какой строки произойдет выход из фукнции при ее вызове is_in("Lection 10", 'i')?
(1) (1)
(2) (2)
(3) (3)
(4) (4)
(5) (5)
Какая функция не возвращает указатель?
(1) void fun(int *mas, int k) { int i, s = 0; for (i=0; i<k; i++) ++mas[i]; }
(2) int *out2(int A[], int B[], int n) { int i; int *ptr = (int *)calloc(n, sizeof(int)); for (i = 0; i < n; i++) ptr[i] = A[i] + B[i]; return ptr; }
(3) int sum(int* mas, int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }
(4) char *xgets(char *s) { char ch, *p; int t; p = s; for(t=0; t<80; ++t){ ch = getchar(); switch(ch) { case '\n': s[t] = '\0'; return p; case '\b': if(t>0) t--; break; default: s[t] = ch; } } s[79] = '\0'; return p; }
Какой файл будет получен в результате выполнения приведенной программы? #include <stdio.h> int main( void ) { FILE *stream; char list[30]; int i, numread, numwritten; if( (stream = fopen("g:\\fread.out", "w+t")) != NULL ) { for ( i = 0; i < 26; i++ ) list[i] = (char)('z' - i); numwritten = fwrite( list, sizeof( char ), 26, stream ); printf( "Wrote %d items\n", numwritten ); fclose( stream ); } else printf( "Problem opening the file\n" ); if( (stream = fopen("g:\\fread.out", "r+t" )) != NULL ) { numread = fread( list, sizeof( char ), 26, stream ); printf( "Number of items read = %d\n", numread ); printf( "Contents of buffer = %.26s\n", list ); fclose( stream ); } else printf( "File could not be opened\n" ); }
(1) files
(2) files
(3) files
(4) files
Объявлена структура: struct Worker { char fio[30]; int date, code; }; Каким образом данная структура хранится в памяти?
(1) files
(2) files
(3) files
Сколько памяти будет выделено для хранения приведенного объединения? union payment { char card[25]; int sum; double date; };
(1) 1 байт
(2) 4 байта
(3) 8 байт
(4) 25 байт
Функция f1() выводит на экран переданное ей значение. Каким образом должна быть описана данная функция для корректного выполнения приведенной программы? struct struct_type { int a, b; char ch; } ; int main(void) { struct struct_type arg; arg.a = 1000; f1(&arg); return 0; }
(1) void f1(struct struct_type *parm) { printf("%d", parm.a); }
(2) void f1(struct struct_type *parm) { printf("%d", parm->a); }
(3) void f1(struct struct_type parm) { printf("%d", parm->a); }
(4) void f1(struct struct_type *parm) { printf("%d", &parm.a); }
Какое из перечисленных шестнадцатиричных чисел является наименьшим?
(1) CA1
(2) A3F
(3) D6F
Какие из перечисленных переменных видны в функции main()? int c = 9; int sum(int a, int b) { return a+b; } int t = 8; int main(void) { int n=4, m=3, s1, s2; s1 = sum(n,m); s2 = mul(n,m); return 0; } int k = 6; int mul(int a, int b) { return a*b; }
(1) c
(2) t
(3) k
Задана функция вычисления факториала: long fact(long n) { return (n>1) ? n * fact(n-1) : 1; } При каком значении завершится рекурсивный процесс?
(1) 0
(2) 1
(3) n
Чему будет равно значение переменной x в результате выполнения приведенной программы? #include <stdio.h> #define SQR(x) (x*x) int main() { int x, y=2; x = SQR(y+1); printf("x = %d", x); return 0; }
(1) 4
(2) 8
(3) 14
(4) 16
Какую информацию содержит файл Example.sln проекта, созданного в Microsoft Visual Studio 2010?files
(1) информацию о том, какие проекты входят в данное решение
(2) информацию об открытых окнах, их расположении и прочих пользовательских параметрах
(3) вспомогательную информацию о проекте, которая используется инструментами анализа кода Visual Studio
Приведенная программа выводит в файл значения аргументов командной строки: int main(int argc, char* argv[]) { char name[30]; FILE *f; f = fopen("g:\\test.txt", "w+"); fprintf(f, "%s\n%s", argv[0], argv[1]); return 0; } Запуск программы выполняется из командной строки с помощью команды Example.exe arg1 arg2. На какую строку указывает argv[1]?
(1) arg1
(2) arg2
(3) Example.exe
Ниже приведены несколько вариантов программы для нахождения всех делителей целого положительного числа (условный оператор if (!(num % div)) определяет, делится ли число num на div без остатка). Пользователь ввел значение переменной num = 3. В каком случае значение переменной div не изменится?
(1) int num, half, div; printf("Введите число: "); scanf_s("%d", &num); half = num / 2; div = 2; while (div <= half) { if (!(num % div)) printf("%d ", div); div++; }
(2) int num, half, div; printf("Введите число: "); scanf_s("%d", &num); half = num / 2; for (div = 2; div <= half; div++) { if (!(num % div)) printf("%d ", div); }
(3) int num, half, div; printf("Введите число: "); scanf_s("%d", &num); half = num / 2; div = 2; do { if (!(num % div)) printf("%d ", div); div++; } while (div <= half);
В результате выполнения какого фрагмента кода значение переменной t будет кратно 10?
(1) int t; for(t=0; t<100; t++) { printf("%d \n", t); if(t==10) t=100; }
(2) int t; for(t=0; t<100; t++) { printf("%d \n", t); if(t==10) break; }
(3) int t; for(t=0; t<100; t++) { if(t==10) printf("%d \n", t); }
При инициализации какого массива не возникнет ошибок?
(1) int arr1[] = {1,2,3,4,5};
(2) int arr2[][2] = {{1,2,3}, {4,5,6}};
(3) int arr2[][] = {{1,2}, {3,4}, {5,6}};
(4) int XYZ[][3][4] = { { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }, { {13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24} } };
Заданы две строки: char str1[10] = "Lection"; char str2[10] = "lection"; Какое утверждение является верным?
(1) strcmp(str1, str2) < 0
(2) strcmp(str1, str2) = 0
(3) strcmp(str1, str2) > 0
Какая программа определяет количество вхождений каждого символа в строку?
(1) #include <stdio.h> #include <conio.h> int main() { int n=0, i=0; char ch, str[30] = ""; char *ptr; printf("Введите строку: "); scanf("%s", str); printf("Введите символ: "); ch = _getche(); ptr = str; while(*ptr!='\0') { if(*ptr==ch) n++; ptr++; } printf("\n%c - %d", ch, n); return 0; }
(2) #include <stdio.h> #include <conio.h> int main() { int n=0, i=0, j=0; char ch, str[30]=""; char *ptr1, *ptr2; printf("Введите строку: "); scanf("%s", str); printf("Введите символ: "); ch = _getche(); ptr1 = str; while(*ptr1!='\0') { ptr2 = str; while (*ptr2!='\0') { if(*ptr1==*ptr2) n++; ++ptr2; } printf("\n%c - %d", *ptr1, n); n = 0; ++ptr1; } printf("\n"); return 0; }
(3) #include <stdio.h> #include <conio.h> int main() { int n=0, i=0, j=0; char ch, str[30]=""; char *ptr1, *ptr2; printf("Введите строку: "); scanf("%s", str); printf("Введите символ: "); ch = _getche(); ptr1 = str; ptr2 = str; while(*ptr1!='\0') { while (*ptr2!='\0') { if(*ptr1==*ptr2) n++; ++ptr2; } printf("\n%c - %d", *ptr1, n); n = 0; ++ptr1; } printf("\n"); return 0; }
В результате выполнения какой программы в строку str2 будет скопирована не только инвертированная строка str1, но и лишний "мусор"?
(1) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1 + strlen(str1) - 1; ptr2 = str2; while (*ptr1) { if (!(*ptr1)) *ptr2 = '\0'; *ptr2 = *ptr1; ptr1--; ptr2++; } printf("str2 = %s\n", str2); return 0; }
(2) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1 + strlen(str1) - 1; ptr2 = str2; while (ptr1>=str1) { if (ptr1<str1) *ptr2 = '\0'; *ptr2 = *ptr1; ptr1--; ptr2++; } printf("str2 = %s\n", str2); return 0; }
(3) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1 + strlen(str1); ptr2 = str2; while (ptr1>=str1) { if (ptr1<str1) *ptr2 = '\0'; *ptr2 = *ptr1; ptr1--; ptr2++; } printf("str2 = %s\n", str2); return 0; }
В каком случае будет выделен наименьший размер памяти?
(1) int *arr = (int *)malloc(10*sizeof(int));
(2) double *arr = (double *)calloc(6, sizeof(double));
(3) int arr[12] = {1,2,3,4,5};
В какой строке объявлен прототип функции search()? #include <stdio.h> #include <string.h> int search(char *p[], char *name); (1) char *names[] = { "Сергей", "Юрий", "Ольга", "Игорь", NULL}; int main(void) { if(search(names, "Ольга") != -1) (2) printf("Ольга есть в списке.\n"); return 0; } int search(char *p[], char *name) (3) { int t; for(t=0; p[t]; ++t) if(!strcmp(p[t], name)) return t; return -1; }
(1) в строке (1)
(2) в строке (2)
(3) в строке (3)
В результате выполнения какой программы изначальное значение переменной s не будет изменено?
(1) void print_upper(char *string); int main(void) { char s[80] = "Question for the lection"; print_upper(s); printf("\s = %s\n", s); return 0; } void print_upper(char *string) { int t; for(t=0; string[t]; ++t) putchar(string[t]); putchar('\n'); }
(2) void print_upper(char *string); int main(void) { char s[80] = "Question for the lection"; print_upper(s); return 0; } void print_upper(char *string) { int t; for(t=0; string[t]; ++t) string[t] = toupper(string[t]); }
(3) void print_upper(char *string); int main(void) { char s[80] = "Question for the lection"; print_upper(s); printf("\s = %s\n", s); return 0; } void print_upper(char *string) { int t; char str[80] = ""; strcpy(str, string); for(t=0; string[t]; ++t) str[t] = toupper(str[t]); }
В каком случае выполняется посимвольная запись массива в файл?
(1) int main( void ) { int i, j, k, buf; FILE *stream; char str[10] = "Lection 11"; if( (stream = fopen("g:\\fread.txt", "w+t")) == NULL ) printf( "Problem opening the file\n" ); else fwrite(str,sizeof(char), sizeof(str)/sizeof(char), stream); fclose(stream); return 0; }
(2) #define N 5 int main( void ) { int i, j, k, buf; FILE *stream; int arr[N] = {3, 2, 4, 5, 1}; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { if (arr[j] > arr[j+1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } }; if( (stream = fopen("g:\\fread.txt", "w+t")) == NULL ) printf( "Problem opening the file\n" ); else for (i=0; i<N; i++) fprintf(stream, "%d ", arr[i]); fclose(stream); return 0; }
(3) #define N 5 int main( void ) { int i, j, k, buf; FILE *stream; int arr[N] = {3, 2, 4, 5, 1}; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { if (arr[j] > arr[j+1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } }; if( (stream = fopen("g:\\fread.txt", "w+t")) == NULL ) printf( "Problem opening the file\n" ); else fwrite(arr,sizeof(int), sizeof(arr)/sizeof(int), stream); fclose(stream); return 0; }
Какая программа не содержит ошибок?
(1) struct { char title[51]; char author[51]; int year; int page; float price; } lb; int main (void) { strcpy_s(lb.title, 50, "Экстремальное вождение. Гоночные секреты"); strcpy_s(lb.author, 50, "М.Г. Горбачев"); lb.year = 2007; lb.page = 303; lb.price = 200.00F; printf("\nTitle:\t\t\t %s\n", lb.title); printf("Author:\t\t\t %s\n", lb.author); printf("Year:\t\t\t %d\n", lb.year ); printf("Number of pages:\t %d p.\n", lb.page ); printf("Price:\t\t\t %1.2f y.e.\n", lb.price); return 0; }
(2) int main (void) { struct Book { char title[51]; char author[51]; int year; int page; float price; } lb[2]; int i; strcpy_s(lb[0].title, 50, "Экстремальное вождение. Гоночные секреты"); strcpy_s(lb[0].author, 50, "М.Г. Горбачев"); lb[0].year = 2007; lb[0].page = 303; lb[0].price = 200.00F; strcpy_s(lb[1].title, 50, "Маракотова бездна"); strcpy_s(lb[1].author, 50, "А.К. Дойл"); lb[1].year = 1993; lb[1].page = 285; lb[1].price = 150.40F; for (i=0; i<2; i++) { printf("\nTitle:\t\t\t %s\n", lb[i].title); printf("Author:\t\t\t %s\n", lb[i].author); printf("Year:\t\t\t %d\n", lb[i].year ); printf("Number of pages:\t %d p.\n", lb[i].page ); printf("Price:\t\t\t %1.2f y.e.\n\n", lb[i].price); } return 0; }
(3) struct Book { char title[51]; char author[51]; int year; int page; float price; }; int main (void) { Book *lb; strcpy_s(lb.title, 50, "Экстремальное вождение. Гоночные секреты"); strcpy_s(lb.author, 50, "М.Г. Горбачев"); lb.year = 2007; lb.page = 303; lb.price = 200.00F; printf("\nTitle:\t\t\t %s\n", lb.title); printf("Author:\t\t\t %s\n", lb.author); printf("Year:\t\t\t %d\n", lb.year ); printf("Number of pages:\t %d p.\n", lb.page ); printf("Price:\t\t\t %1.2f y.e.\n", lb.price); return 0; }
Чему будет равно значение переменной str после выполнения приведенной программы? union test { char ch1[5]; char ch2[2]; char ch3[1]; }; int main(void) { union test t; char *str; strcpy(t.ch1, "test"); t.ch2[0] = 'b'; t.ch3[0] = 'w'; str = t.ch1; return 0; }
(1) test
(2) best
(3) west
(4) b
(5) w
Какая программа содержит ошибку?
(1) struct struct_type { int a, b; char ch; } ; struct struct_type2 { int a, b; char ch; } ; void f1(struct struct_type2 parm); int main(void) { struct struct_type2 arg; arg.a = 1000; f1(arg); return 0; } void f1(struct struct_type2 parm) { printf("%d", parm.a); }
(2) struct struct_type { int a, b; char ch; } ; struct struct_type2 { int a, b; char ch; } ; void f1(struct struct_type2 parm); int main(void) { struct struct_type2 a, *arg; arg = &a; arg->a = 1000; f1(arg); return 0; } void f1(struct struct_type2 parm) { printf("%d", parm.a); }
(3) struct struct_type { int a, b; char ch; } ; struct struct_type2 { int a, b; char ch; } ; void f1(struct struct_type2 parm); int main(void) { struct struct_type arg; arg.a = 1000; f1(arg); return 0; } void f1(struct struct_type2 parm) { printf("%d", parm.a); }
Каково преимущество использования битовых полей?
(1) экономия памяти под переменные
(2) уменьшение объема кода программы
(3) увеличение эффективности выполнения операций
В каком случае переменные a и b будут невидны в функции main()?
(1) int main (void) { printf("a = %d; b = %d\n", a, b); printf("Press any key: "); _getch(); return 0; } int a = 33, b = 34;
(2) int a = 33, b = 34; int main (void) { printf("a = %d; b = %d\n", a, b); printf("Press any key: "); _getch(); return 0; }
(3) int main (void) { extern int a, b; printf("a = %d; b = %d\n", a, b); printf("Press any key: "); _getch(); return 0; } int a = 33, b = 34;
Что такое текущий уровень рекурсии?
(1) условие, которое будет удовлетворено и при котором функция выполняет свою задачу без рекурсивных вызовов
(2) число рекурсивных вызовов в каждый конкретный момент времени
(3) максимальное число рекурсивных вызовов без возвратов, которое происходит во время выполнения программы
В программе задан макрос #define MAX(x, y) ((x)>(y) ? (x) : (y)). Для каких переменных он может быть использован?
(1) float x, y;
(2) int i, j;
(3) char a, b;
Какой тип будет иметь переменная ch после выполнения приведения типов для вычисления значения d? char ch = 'a'; int a; float b; double c = 4.5; double d; printf("Enter a:"); scanf("%d", &a); printf("Enter b:"); scanf("%lf", &b); d = (double)ch + a + b + c;
(1) char
(2) double
(3) int
Приведенная программа формирует сообщение об ошибке из отдельных строк в зависимости от значения аргумента командной строки, который задает степень критичности ошибки: #include <stdio.h> #include <conio.h> #include <stdarg.h> #include <stdlib.h> #include <locale.h> void error(int severity, ... ); int main(int argc, char* argv[]) { char err[][30] = {"Сообщение1", "Сообщение2"}; int n; setlocale (LC_ALL, "rus"); n = argv[1]; switch (n) { case 0: error(0, "Ошибка!", '\0'); break; case 1: error(0, "Ошибка!", err[0], '\0'); break; default: error(1, "Ошибка!", err[0], err[1], '\0'); } return 0; } void error(int severity, ... ) { va_list ap; va_start(ap, severity); for (;;) { char *p = va_arg(ap, char*); if (p == '\0') break; printf("%s ", p); } va_end(ap); printf("\n"); } Программа запускается из командной строки командой Example.exe 0. При этом вместо сообщения Ошибка! на экран выводится сообщение Ошибка! Сообщение1 Сообщение2. С чем это связано?
(1) переменной n необходимо присвоить значение argv[0]
(2) с переменной переменной n необходимо выполнить дополнительные вычисления
(3) argv[1] указывает на строку
Необходимо написать программу для проверки пароля, вводимого пользователем. Программа должна предоставлять пользователю только три попытки ввода пароля. Верный пароль - число 95. Какой фрагмент кода реализует поставленную задачу?
(1) int i, psw = 0; printf("Введите пароль: "); while (psw!=95) { for (i=0; i<3; i++) scanf("%d", &psw); }
(2) int i = 0, psw = 0; printf("Введите пароль: "); while (i<3 || psw!=95) { scanf("%d", &psw); i++; }
(3) int i, psw = 0; printf("Введите пароль: "); for (i=0; i<3 && psw!=95; i++) scanf("%d", &psw);
Почему применение оператора goto не является хорошим стилем программирования?
(1) синтаксис записи выражений с помощью оператора goto менее удобен по сравнению с другими опеараторами
(2) применение goto нарушает принципы структурного и модульного программирования
(3) работа оператора goto непредсказуема
Чему будет равно значение переменной sum в результате выполнения приведенной программы? #include <stdio.h> #define N 10 int main() { int i, sum; int arr[N] = {3, 4, 5, 4, 4}; for (i = 1, sum = 0; i<N; i++) sum += arr[i]; printf("Сумма элементов: %d\n", sum); return 0; }
(1) 16
(2) 17
(3) 20
Каким будет результат выполнения приведенной программы? #include <stdio.h> #include <string.h> #define N 10 int main() { char ch, strLow[N] = "test"; int i = 0; ch= strLow[0]; while (ch!='\0') { putchar(strLow[i] - 32); i++; ch= strLow[i]; } printf("\n"); return 0; }
(1) все символы строки strLow будут преобразованы в верхний регистр
(2) на экран будет выведена строка strLow в верхнем регистре
(3) при выполнении приведенной программы возникнет ошибка выполнения
В результате выполнения какого фрагмента кода значение разности p1 - p2 будет больше 2?
(1) char str[10] = "Test", *p1, *p2; p1 = str; p2 = p1; p2--; p1++;
(2) long num=3, *p1, *p2; p2 = &num; p1 = p2; p1++;
(3) char str[10] = "Test", *p1, *p2; p1 = str; p2 = p1; p1++;
(4) short num=10, *p1, *p2; p1 = &num; p2 = p1; p1++;
Какой фрагмент кода соответствует заданной схеме?files
(1) int x = 88, *ptr1, *ptr2; ptr1 = &x; ptr2 = &x;
(2) int x = 88, *ptr1, **ptr2; ptr1 = &x; ptr2 = &ptr1;
(3) int x = 88, *ptr2, **ptr1; ptr2 = &x; ptr1 = &ptr2;
При каких значениях размерности n символьного массива и строки, на которую указывает указатель ptr, в результате выполнения приведенной программы возникнет ошибка? #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> int main(void) { int n, m; char *ptr; printf("\nEnter a dimention of character array: "); scanf_s("%d", &n); _flushall(); ptr = (char *)malloc((n+1)*sizeof(char)); if (!ptr) { printf("\nERROR! Out of memmory (error in malloc() function). Press any key..."); _getch(); exit(1); } printf("Enter a character array (not more than %d characters): ", n); gets_s(ptr, n+1); m = strlen(ptr); strcat_s(ptr, m+2, "!"); printf("\nStart line and character \"%c\": %s", '!', ptr); free (ptr); printf("\n\nPress any key: "); _getch(); return 0; }
(1) n = 4, *ptr = "test"
(2) n = 5, *ptr = "test"
(3) n = 40, *ptr = "test"
Функция average вычисляет среднее арифметическое заданных аргументов: #include <stdio.h> #include <stdarg.h> int average(int first, ... ); int main( void ) { int x; <Вызов фукнции average()>; return 0; } int average( int first, ... ) { int count = 0, sum = 0, i = first; va_list marker; va_start(marker, first); while( i != -1 ) { sum += i; count++; i = va_arg(marker, int); } va_end(marker); return( sum ? (sum / count) : 0 ); } В результете какого вызова функции average значение переменной x будет равно 2?
(1) x = average(2, 3, 4, -1);
(2) x = average(2, 3, 1, 2, -1);
(3) x = average(2, 2);
Функция sum выполняет сложение двух одномерных массивов и возвращает результат через указатель: int *sum(int A[], int B[], int n) { int i; int *ptr = (int *)calloc(n, sizeof(int)); for (i = 0; i < n; i++) ptr[i] = A[i] + B[i]; return ptr; } В какой программе вызов функции sum выполняется неверно?
(1) int main (void) { int i, n; int A[] = {1,2,3,4,5}, B[] = {2,2,2,2,2}; int ptrAB; n = (sizeof(A)/sizeof(A[0])); ptrAB = sum(A, B, n); printf("Result from function: "); for (i = 0; i < n; i++) printf(" %d", ptrAB[i]); free(ptrAB); return 0; }
(2) int main (void) { int i, n; int A[] = {1,2,3,4,5}, B[] = {2,2,2,2,2}; int *ptrAB = NULL; n = (sizeof(A)/sizeof(A[0])); *ptrAB = sum(A, B, n); printf("Result from function: "); for (i = 0; i < n; i++) printf(" %d", ptrAB[i]); free(ptrAB); return 0; }
(3) int main (void) { int i, n; int A[] = {1,2,3,4,5}, B[] = {2,2,2,2,2}; int *ptrAB = NULL; n = (sizeof(A)/sizeof(A[0])); ptrAB = sum(A, B, n); printf("Result from function: "); for (i = 0; i < n; i++) printf(" %d", ptrAB[i]); free(ptrAB); return 0; }
В каком случае при первом запуске программы файл лога работы программы, содержащий описание всех выполненных в программе действий, не будет записан?
(1) int min(int, int); void AddToLog(FILE*, char*); int main(void) { FILE *fp; int x, y, m; if( (fp = fopen("g:\\log.txt", "r+")) == NULL ) printf( "Problem opening the file\n" ); x = -5; AddToLog(fp, "x was initializated\n"); y = 5; AddToLog(fp, "y was initializated\n"); m = min(x,y); AddToLog(fp, "min() function was called\n"); if (fp != NULL) fclose(fp); return 0; } int min(int a, int b) { int m = (a<b) ? a : b; return m; } void AddToLog(FILE *fp, char *str) { if (fp != NULL) fputs(str, fp); }
(2) int min(int, int); void AddToLog(FILE*, char*); int main(void) { FILE *fp; int x, y, m; if( (fp = fopen("g:\\log.txt", "a")) == NULL ) printf( "Problem opening the file\n" ); x = -5; AddToLog(fp, "x was initializated\n"); y = 5; AddToLog(fp, "y was initializated\n"); m = min(x,y); AddToLog(fp, "min() function was called\n"); if (fp != NULL) fclose(fp); return 0; } int min(int a, int b) { int m = (a<b) ? a : b; return m; } void AddToLog(FILE *fp, char *str) { if (fp != NULL) fputs(str, fp); }
(3) int min(int, int); void AddToLog(FILE*, char*); int main(void) { FILE *fp; int x, y, m; if( (fp = fopen("g:\\log.txt", "w+t")) == NULL ) printf( "Problem opening the file\n" ); x = -5; AddToLog(fp, "x was initializated\n"); y = 5; AddToLog(fp, "y was initializated\n"); m = min(x,y); AddToLog(fp, "min() function was called\n"); if (fp != NULL) fclose(fp); return 0; } int min(int a, int b) { int m = (a<b) ? a : b; return m; } void AddToLog(FILE *fp, char *str) { if (fp != NULL) fputs(str, fp); }
Какие варианты объявления структуры Account и переменных acc1 и acc2 являются неверными для приведенной программы? void PrintStruct(char*, int, int); int main (void) { <Объявление структуры Account и переменных acc1, acc2> acc2 = &acc1; acc1.account = 346578; acc1.name = "Ivanov"; acc1.balance = 30000; PrintStruct(acc1.name, acc1.account, acc1.balance); acc2->account = 90005; acc2->name = "Pertov"; acc2->balance = 46000; PrintStruct(acc2->name, acc2->account, acc2->balance); return 0; } void PrintStruct(char *str, int a, int b) { printf("Name: %s\n", str); printf("Account: %d\n", a); printf("Balance: %d\n\n", b); }
(1) struct Account { int account; char name[30]; int balance; } acc1, *acc2;
(2) struct Account { int account; char *name; int balance; } acc1, *acc2;
(3) struct Account { int account; char *name; int balance; } *acc1, *acc2;
В какой программе выполняется неверное обращение к полям объединения?
(1) int main(void) { union distance { int miles; long meters; } walk; walk->miles = 5; printf("Пройденное расстояние в милях %d\n", walk->miles); walk->meters = 10000; printf("Пройденное расстояние в метрах %d\n", walk->meters); return 0; }
(2) int main(void) { union distance { int miles; long meters; }; miles = 5; printf("Пройденное расстояние в милях %d\n", miles); meters = 10000; printf("Пройденное расстояние в метрах %d\n", meters); return 0; }
(3) int main(void) { union distance { int miles; long meters; } walk; walk.miles = 5; printf("Пройденное расстояние в милях %d\n", walk.miles); walk.meters = 10000; printf("Пройденное расстояние в метрах %d\n", walk.meters); return 0; }
Задана программа, позволяющая пользователю задать данные о студенте с клавиатуры: typedef struct { char fio[30]; int group; float average; } student; void Init(student*); int main(void) { student s, *st; int i; st = &s; Init(st); <Вывод данных на экран> return 0; } void Init(student *st) { printf("\nEnter name: "); scanf("%s", st->fio); printf("\nEnter group: "); scanf("%d", &st->group); printf("\nEnter average mark: "); scanf("%f", &st->average); } Необходимо дополнить программу функцией вывода заданных о студенте данных на экран и вызовом этой функции в программе. Какой вариант описания и вызова функции выполняет поставленную задачу?
(1) функция: void Print(student *st) { printf("\nName: %s", st->fio); printf("\nGrouproup: %d", st->group); printf("\nAverage mark: %.2f", st->average); } вызов: Print(st);
(2) функция: void Print(student st) { printf("\nName: %s", st.fio); printf("\nGrouproup: %d", st.group); printf("\nAverage mark: %.2f", st.average); } вызов: Print(st);
(3) функция: void Print(char *n, int i, float d) { printf("\nName: %s", n); printf("\nGrouproup: %d", i); printf("\nAverage mark: %.2f", d); } вызов: Print(st.fio, st.group, st.average);
(4) функция: void Print(char *n, int i, float d) { printf("\nName: %s", n); printf("\nGrouproup: %d", i); printf("\nAverage mark: %.2f", d); } вызов: Print(st->fio, st->group, st->average);
Определите, содержит ли приведенная программа ошибки? Если содержит, укажите, какие именно? int main(void) { struct test { unsigned int : 3; unsigned int f1 : 1; unsigned int f2 : 1; unsigned int f3 : 1; unsigned int type : 8; unsigned int index : 18; }; int a : 4, b; struct test t; t.type = 3439; b = a + t.type; //printf("t.type = %d\n", t.type); return 0; }
(1) в структуре test задано безымянное битовое поле
(2) битовое поле объявлено вне структуры
(3) переменной t присваивается недопустимое значение
(4) программа не содержит ошибок
Для какой локальной переменной, заданной в приведенном фрагменте кода, память выделяется при входе в блок и освобождается при выходе из него? int test(); int a = 1; int main (void) { int b, s; extern int x; static int c; s = test(); return 0; } int test() { int t = a; return t; } int x = 4;
(1) a
(2) b
(3) x
(4) c
В какой программе используется прямая рекурсия?
(1) void dec2bin(unsigned long int); int main (void) { unsigned long int n; setlocale(LC_ALL, "Russian"); printf("\n\t Введите целое десятичное число\n (или не числовой символ для завершения программы): "); while (scanf_s("%ul", &n) == 1) { printf("\n Двоичный эквивалент: "); dec2bin(n); printf("\n\n\t Введите целое десятичное число\n (или не числовой символ для завершения программы): "); } return 0; } void dec2bin(unsigned long int n) { int r; r = n % 2; if (n >= 2 ) dec2bin(n/2); printf("%d", r); return; }
(2) int gcd(int a, int b); int main (void) { int a = 0, b = 0; int in; do { printf("\n Enter the two different natural numbers, through the gap: "); in = scanf_s("%d%d", &a, &b); if (in != 2) exit(1); if ( (a != b) && (b != 0) ) break; if (b == 0) a = b; } while ( (a == b) ); printf("\n a = %d, b = %d, GCD = %d; \n", a, b, gcd(a,b)); return 0; } int gcd(int a, int b) { if ( (a % b) == 0) return b; else return gcd(b, a % b); }
(3) void fillOnly(int); void free_n(int); void fill_n(int); int main (void) { int n = 1; int in = 1; printf("\n Enter a length of string (naturel number): "); in = scanf_s("%i", &n); if (in != 1 || n < 1 || n > 15) { printf("\n Error input. Press any key to exit: "); _getch(); exit(0); } puts("\n\tResult:"); fill_n(n); printf("\n\n Press any key to exit: "); _getch(); return 0; } void fillOnly(int n) { if (n == 1) printf("\t%+3d\n", 1); else { fillOnly(n-1); printf("\t%+3d\n", n); free_n(n-1); } } void free_n(int n) { if (n == 1) printf("\t%+3d\n", -1); else { fillOnly(n-1); printf("\t%+3d\n", -n); free_n(n-1); } } void fill_n(int n) { if (n == 1) printf("\t%+3d\n", 1); else { if (n == 2) printf("\t%+3d\n\t%+3d\n", 1, 2); else { fillOnly(n-1); printf("\t%+3d\n", n); fill_n(n-2); } } }
Необходимо написать программу, которая выводит на экран сочетания имён и фамилий, которые хранятся в подключаемом файле arr.txt. Содержание файла arr.txt: char *names[] = {"Иван", "Пётр", "Илья"}; char *surnames[] = {"Иванов", "Пётров", "Ильин"}; Файл arr.txt хранится с исполняемым файлом в одном каталоге. Какая программа выполняется поставленную задачу?
(1) #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <locale.h> #ifndef ARR #define ARR #include "arr.txt" #endif int main (void) { int i = 0 , j = 0, n; setlocale (LC_ALL, "rus"); printf("Введите количество человек (от 1 до 3): "); scanf("%d", &n); if (n<1 || n>3) { printf("Ошибка ввода данных. Нажмите любую клавишу: "); _getch(); exit(1); } #ifdef ARR for (i=0; i<n; i++) printf("%d. %s %s\n", i+1, names[i], surnames[i]); #endif return 0; }
(2) #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <locale.h> #ifndef ARR #define ARR #include "..\arr.txt" #endif int main (void) { int i = 0 , j = 0, n; setlocale (LC_ALL, "rus"); printf("Введите количество человек (от 1 до 3): "); scanf("%d", &n); if (n<1 || n>3) { printf("Ошибка ввода данных. Нажмите любую клавишу: "); _getch(); exit(1); } #ifdef ARR for (i=0; i<n; i++) printf("%d. %s %s\n", i+1, names[i], surnames[i]); #endif return 0; }
(3) #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <locale.h> #ifndef ARR #define ARR #include <arr.txt> #endif int main (void) { int i = 0 , j = 0, n; setlocale (LC_ALL, "rus"); printf("Введите количество человек (от 1 до 3): "); scanf("%d", &n); if (n<1 || n>3) { printf("Ошибка ввода данных. Нажмите любую клавишу: "); _getch(); exit(1); } #ifdef ARR for (i=0; i<n; i++) printf("%d. %s %s\n", i+1, names[i], surnames[i]); #endif return 0; }
В программе объявлены переменные: int x = 15, y = 2; float z; z = x/y; printf("z = %f\n", z); В результате выполнения каких операций будет выведено значение z = 7.5?
(1) z = (float)(x/y); printf("z = %.1f\n", z);
(2) z = x/y; printf("z = %.1f\n", z);
(3) z = (float)x/y; printf("z = %f\n", z);
(4) float Z = 7.0; z = (float)x/y; printf("z = %.1f\n", Z);
(5) z = (1.0*x)/y; printf("z = %.1f\n", z);
Необходимо написать программу, которая имеет два аргумента командной строки и вычислиет их сумму. Какие из приведенных программ не выполняют поставленную задачу?
(1) int main(int argc, char* argv[]) { int n1, n2,sum; n1 = atoi(argv[0]); n2 = atoi(argv[1]); sum = n1 + n2; printf("sum = %d\n", sum); return 0; }
(2) int main(int argc, char* argv[]) { int n1, n2,sum; n1 = argv[0]; n2 = argv[1]; sum = n1 + n2; printf("sum = %d\n", sum); return 0; }
(3) int main(int argc, char* argv[]) { int n1, n2,sum; n1 = atoi(argv[1]); n2 = atoi(argv[2]); sum = n1 + n2; printf("sum = %d\n", sum); return 0; }
(4) int main(int argc, char* argv[]) { int n1, n2,sum; n1 = argv[1]; n2 = argv[2]; sum = n1 + n2; printf("sum = %d\n", sum); return 0; }
Сколько раз будет выполнен цикл for? int x; printf("Угадайте число:\n"); for (x=0; x!=123; ) scanf("%d", &x);
(1) 0
(2) 123
(3) заранее неизвестно
Какой фрагмент кода определяет максимальное из двух чисел?
(1) int a = rand(); int b = rand(); int maxab = (a > b) ? a : b; printf("maxab = %d", maxab);
(2) int a = rand(); int b = rand(); int maxab = (a > b) ? b : a; printf("maxab = %d", maxab);
(3) int a = rand(); int b = rand(); int maxab = (a < b) ? a : b; printf("maxab = %d", maxab);
Какая программа позволяет определить размерность массива arr (для определения размерности массива используется переменная size)?
(1) #include <stdio.h> #define N 10 int main() { int i, size; int arr[N] = {3, 4, 5, 4}; for (i=0, size=0; i<N; i++) { if (arr1[i]!=0) size++; } return 0; }
(2) #include <stdio.h> #define N 10 int main() { int i, size; int arr[N] = {3, 4, 5, 4}; size = sizeof(arr); return 0; }
(3) #include <stdio.h> #define N 10 int main() { int i, size; int arr[N] = {3, 4, 5, 4}; size = sizeof(arr)/sizeof(arr[0]); printf("size = %d\n", size); return 0; }
Аналогию какой функции представляет собой приведенная программа? #include <stdio.h> #include <string.h> #define N 10 int main() { int i = 0; char ch; char str1[N] = "test"; char str2[N] = ""; ch= str1[0]; while (ch!='\0') { str2[i] = str1[i]; i++; ch= str1[i]; } return 0; }
(1) strcpy(str2, str1);
(2) strcpy(str1, str2);
(3) strlen(str1);
(4) strlen(str2);
Какое выражение выполняет операцию инкремента значения, на которое ссылается указатель?
(1) (*p)++
(2) *p++
(3) *p = 10; p++;
В результате выполнения приведенного фрагмента кода на экран выводится значение переменной sum, равное 15: int i, N, sum = 0; int arr[] = {3, 2, 4, 5, 1}; int *ptr; N = sizeof(arr)/sizeof(arr[0]); ptr = arr; for (i=0; i<N; i++) sum += *ptr; Какое действие выполняет данный код?
(1) N-кратное наращивание значения переменной sum на величину, равную значению первого элемента массива arr
(2) вычисление суммы всех элементов массива arr
(3) N-кратное смещение указателя на значение, равное sum
В каком случае при возникновении ошибки при выделении памяти эта ошибка не будет корректно обработана?
(1) ptr = (int *)malloc(size1*sizeof(int)); if (!ptr) { printf("\nERROR! Out of memory in malloc() function. Press any key: "); _getch(); exit(1); };
(2) ptr = (int *)malloc(size1*sizeof(int)); if (ptr) { printf("\nERROR! Out of memory in malloc() function. Press any key: "); _getch(); exit(1); };
(3) str[i] = (char *) calloc((N+1), sizeof(char)); if (str[i] == NULL) { printf("ERROR. Out of memmory. Press any key: "); _getch(); exit(1); }
(4) ptr = (int *)malloc(30*sizeof(int));
Программа формирует сообщение об ошибке из отдельных строк в зависимости от степени критичности ошибки: #include <stdio.h> #include <conio.h> #include <stdarg.h> void error(int severity, ... ); int main( void ) { char err[][30] = {"Сообщение 1", "Сообщение 2"}; int n = -1; printf("Введите степень критичности ошибки (целое число): "); scanf("%d", &n); switch (n) { case 0: error(0, "Ошибка!", '\0'); break; case 1: error(0, "Ошибка!", err[0], '\0'); break; default: error(1, "Ошибка!", err[0], err[1], '\0'); } return 0; } void error(int severity, ... ) { va_list ap; va_start(ap, severity); for (;;) { char *p = va_arg(ap, char*); if (p == '\0') break; printf("%s ", p); } va_end(ap); printf("\n"); } Какое сообщение будет выведено на экран, если пользователь задаст значение n равным 0?
(1) Ошибка!
(2) Ошибка! Сообщение 1
(3) Ошибка! Сообщение 1 Сообщение 2
Какая программа реализует сортировку "методом пузырька" по убыванию с помощью функции, использующей вызов по ссылке?
(1) void bsort (int*, int); int main (void) { int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7}; int i, n; n = sizeof(A)/sizeof(A[0]); printf("Original array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); bsort (A, n); printf("\nSorted array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); return 0; } void bsort (int *arr, int size) { int i, j, buf; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] > arr[j + 1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } } } }
(2) void swap (int*, int*); void bsort (int*, int); int main (void) { int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7}; int i, n; n = sizeof(A)/sizeof(A[0]); printf("Original array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); bsort (A, n); printf("\nSorted array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); return 0; } void swap(int *pa, int *pb) { int temp; temp = *pa; *pa = *pb; *pb = temp; } void bsort (int *arr, int size) { int i, j; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] < arr[j + 1]) swap(&arr[j], &arr[j+1]); } } }
(3) void swap (int*, int*); void bsort (int* , int); int main (void) { int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7}; int i, n; n = sizeof(A)/sizeof(A[0]); printf("Original array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); bsort (A, n); printf("\nSorted array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); return 0; } void swap(int *pa, int *pb) { int temp; temp = *pa; *pa = *pb; *pb = temp; } void bsort (int *arr, int size) { int i, j, min; for (i=0; i < size - 1; i++) { min = i; for (j = i+1; j < size; j++) { if (arr[j] > arr[min]) { min = j; swap(&arr[i], &arr[min]); } } } }
При каком способе открытия файла файл лога, содержащий описание всех действий, выполненных в программе не будет создан(при условии, что программа запускается не более одного раза в минуту)? #include <stdio.h> #include <math.h> #include <time.h> #include <string.h> void AddToLog(FILE*, char*); char* GenerateFileName(); int main (void) { FILE *fp; char *strFile, strFn[30] = ""; double (*pFunc) (double); int c = 1; double y; strFile = GenerateFileName(); strcpy(strFn, strFile); <Открытие файла> while(1) { printf("Выберите функцию (0-выход): 1-sqrt, 2-sin, 3-tan\n"); scanf("%d", &c); switch(c) { case 1: pFunc = sqrt; AddToLog(fp, "Пользователь выбрал функцию 1 (вычисление квадратного корня)\n"); break; case 2: pFunc = sin; AddToLog(fp, "Пользователь выбрал функцию 2 (вычисление синуса)\n"); break; case 3: pFunc = tan; AddToLog(fp, "Пользователь выбрал функцию 3 (вычисление тангенса)\n"); break; case 0: AddToLog(fp, "Пользователь завершил выбор функции\n\n"); printf("Лог сохранен в файл %s\n", strFn); return; default: AddToLog(fp, "Пользователь задал неверный номер функции\n\n"); continue; } y = pFunc(1.1); AddToLog(fp, "Вычислено значение выбранной функции\n"); printf("f(1.1) = %.2f\n", y); AddToLog(fp, "Результат вычисления выведен на экран\n"); } if (fp != NULL) fclose(fp); return 0; } void AddToLog(FILE *fp, char *str) { if (fp != NULL) fputs(str, fp); } char* GenerateFileName() { char strTime[10] = ""; char strDate[10] = ""; char strFile[30] = "g:\\log_"; char *token; _strdate(strDate); _strtime(strTime); token = strtok(strDate, "/"); while( token != NULL ) { strncat(strFile,token,2); token = strtok( NULL, "/" ); } strncat(strFile,"_",1); token = strtok(strTime, ":"); while( token != NULL ) { strncat(strFile,token,2); token = strtok( NULL, "/" ); } strncat(strFile,".txt",4); }
(1) if( (fp = fopen(strFileName, "w+t")) == NULL ) printf( "Problem opening the file\n" );
(2) if( (fp = fopen(strFn, "w+t")) == NULL ) printf( "Problem opening the file\n" );
(3) if( (fp = fopen(strFileName, "a")) == NULL ) printf( "Problem opening the file\n" );
(4) if( (fp = fopen(strFileName, "r+")) == NULL ) printf( "Problem opening the file\n" );
Какое сообщение будет выведено на экран в результате выполненния приведенной программы? int main (void) { struct student { char *name; char *birthday; int group; } s1, s2; int s; s1.name = "Ivanov"; s1.birthday = "10.03.1985"; s1.group = 1014; s2.name = "Petrov"; s2.birthday = "08.04.1985"; s2.group = 1309; s2 = s1; if (s2.group == s1.group) printf("Students %s and %s are studying in the same group\n", s1.name, s2.name); else printf("Students %s and %s are not studying in the same group\n", s1.name, s2.name); return 0; }
(1) Students Ivanov and Petrov are studying in the same group
(2) Students Ivanov and Petrov are not studying in the same group
(3) при выполнении программы возникнет ошибка
Определите, есть ли в приведенной программе ошибки? Если есть, укажите, какие? typedef union pw_union { short int i; char ch[2]; } pw; int putw(short int num, FILE *fp); int main(void) { FILE *fp; fp = fopen("g:\\test.tmp", "wb+"); if(fp == NULL) { printf("Файл не открыт.\n"); exit(1); } putw(1025, fp); fclose(fp); return 0; } int putw(short int num, FILE *fp) { pw_union word; word.i = num; putc(word.ch[0], fp); return putc(word.ch[1], fp); }
(1) неверно используется ключевое слово typedef для определения объединения
(2) неверно объявлена переменная word в функции putw()
(3) программа не содержит ошибок
Что необходимо сделать для того, чтобы исправить содержащуюся в программе ошибку? void Init(struct student*); void Print(struct student*); int main(void) { struct student { char fio[30]; int group; float average; }; struct student s, *st; int i; st = &s; Init(st); Print(st); return 0; } void Init(struct student *st) { printf("\nEnter name: "); scanf("%s", st->fio); printf("\nEnter group: "); scanf("%d", &st->group); printf("\nEnter average mark: "); scanf("%f", &st->average); } void Print(struct student *st) { printf("\nName: %s", st.fio); printf("\nGrouproup: %d", st.group); printf("\nAverage mark: %.2f", st.average); }
(1) изменить оператор обращения к полям структуры в функции Print
(2) изменить типы формальных параметров в описаниях функций Init и Print
(3) объявить структуру student глобально
Чему будет равно значение переменной b в результате выполнения приведенной программы? int main(void) { struct Options { unsigned int centerX : 1; unsigned int centerY : 1; unsigned int shadow : 2; unsigned int palette : 4; }; int b; struct Options t, *pt; t.shadow = 12; t.palette = 10; b = t.shadow + t.palette; printf("b = %d\n", b); return 0; }
(1) 10
(2) 12
(3) 22
Для каких переменных разрешено применение спецификатора register? int min(int, int); int t; int main(void) { int x=-5, y=5, m; m = min(x,y); printf("min = %d\n", m); return 0; } int min(int a, int b) { int m = (a<b) ? a : b; return m; }
(1) t
(2) x
(3) m
(4) a
(5) b
Необходимо решить задачу поиска пути между двумя городами. Карта дорог представлена в виде графа: filesПроцесс поиска представлен как последовательность шагов. На каждом шаге с использованием некоторого критерия выбирается точка, в котороую можно попасть из текущей. Если очередная выбранная точка совпала с заданной конечной точкой, то маршрут найден. Если не совпала - выполняется еще один шаг. Поскольку текущая точка может быть соединена с несколькими другими, то сначала выбирается точка с наименьшим номером. Определите, выполняет ли приведенная программа поставленную задачу (для появснения в программе приведены комментарии): #define N 7 void step(int, int, int); int map[N][N]; // карта: map[i,j]!=0, если точки i и j соединены int road[N]; // маршрут - номера точек карты int incl[N]; // incl[i]==1, если точка с номером i включена в road int start; // начальная точка маршрута int finish; // конечная точка маршрута int i, j; int main (void) { // инициализация массивов for (i=0; i<N; i++) road[i] = 0; for (i=0; i<N; i++) incl[i] = 0; for (i=0; i<N; i++) for (j=0; j<N; j++) map[i][j] = 0; // ввод значений элементов карты map[0][1] = 1; map[1][0] = 1; map[0][2] = 1; map[2][0] = 1; map[0][3] = 1; map[3][0] = 1; map[2][3] = 1; map[3][2] = 1; map[2][6] = 1; map[6][2] = 1; map[3][5] = 1; map[5][3] = 1; map[4][5] = 1; map[5][4] = 1; map[4][6] = 1; map[6][4] = 1; map[5][6] = 1; map[6][5] = 1; printf("Введите через пробел номер начальной и конечной точек: "); scanf("%d %d", &start, &finish); road[0] = start; // внести точку в маршрут incl[0] = 1; // пометить точку как включенную step(start, finish, 2); return 0; } void step(int s, int f, int p) { int c; // номер точки, в которую делается очередной шаг int i; if (s==f) { printf("Путь: "); for (i=0; i<p-1; i++) printf("%d ", road[i]); printf("\n"); } else { // выбор очередной точки for (c=0; c<N; c++) // проверка всех вершин if (map[s][c]!=0 && incl[c]==0) { // точка соединена с текущей и не включена в маршрут road[p] = c; // добавление вершины в путь incl[c] = 1; // пометка вершины как включенной step(c, f, p+1); incl[c] = 0; road[p] = 0; } } }
(1) программа не выполняет поставленную задачу, так как в ней используется неверная индексация массива
(2) программа не выполняет поставленную задачу, так как неверно задана рекурсивная функция
(3) программа выполняет поставленную задачу
Что обозначает подключение #include "..\some.h"?
(1) то, что файл some.h находится на один уровень ниже, чем главный файл
(2) то, что файл some.h находится на один уровень выше, чем главный файл
(3) то, что для поиска файла some.h необходимо выполнить просмотр верхних уровней до тех пор, пока файл не будет найден
Какой фрагмент кода содержит не более одной ошибки?
(1) char answer, strCourseName[100]; printf("Какую лекцию Вы изучаете?\n"); scanf_s("%s", &strCourseName, 99); printf("Есть ли у Вас вопросы по лекции "%s" (y/n)?\n", strCourseName); scanf_s("%s", &answer);
(2) char answer; char strLecName[50] = "Переменные и базовые типы данных языка С"; printf("Знакома ли Вам тема лекции \"%s\" (y/n)?\n", &strLecName); scanf_s("%s", &answer);
(3) char strCourseName[100]; int iLecCount, iLecNumber; printf("Какой курс Вы изучаете?\n"); scanf_s("%s", &strCourseName, 99); printf("Сколько лекций содержится в курсе \"%s\"?\n", strCourseName); scanf_s("%d", &iLecCount); printf("Какую лекцию Вы изучаете?\n"); scanf_s("%d", &iLecNumber); printf("Вам осталось изучать %d лекции(-й)\n", iLecCount-iLecNumber);
Задана программа, исполняемый файл которой имеет имя Example.exe: int main(int argc, char* argv[]) { int n1, n2, m, sum; m = argc; n1 = atoi(argv[1]); n2 = atoi(argv[2]); sum = n1 + n2; printf("sum = %d\n", sum); return 0; } Программа запускается из командной строки командой Example.exe 2 3 5. Чему будет равно значение переменной sum?
(1) 5
(2) 7
(3) 9
(4) 10
В результате выполнения какого фрагмента кода на экран будут выведены 5 строк, в каждой из которых будет на 1 звездочку меньше, чем в предыдущей?
(1) int i, j; for (i=0; i<5; i++) for (j=0; j<5; j++) printf("*");
(2) int i, j; for (i=5; i>0; i--) { for (j=i; j<5; j++) printf("*"); printf("\n"); }
(3) int i, j; for (i=0; i<5; i++) { for (j=i; j<5; j++) printf("*"); printf("\n"); }
При выполнении какого варианта программы определения дня недели при вводе числа 8 на экране будет выведено сообщение Ошибка! Вы ввели неверное число?
(1) int x; printf("Введите число от 1 до 7: "); scanf_s("%d", &x); switch (x<=5 ? 1 : x==6 ? 2 : 3) { case 1: printf("Сегодня рабочий день"); break; case 2: printf("Сегодня суббота"); break; case 3: printf("Сегодня воскресенье"); break; default: printf("Ошибка! Вы ввели неверное число"); break; }
(2) int x; printf("Введите число от 1 до 7: "); scanf_s("%d", &x); switch (x>=5 ? 1 : x==6 ? 2 : x==7 ? 3 : 4) { case 1: printf("Сегодня рабочий день"); break; case 2: printf("Сегодня суббота"); break; case 3: printf("Сегодня воскресенье"); break; default: printf("Ошибка! Вы ввели неверное число"); break; }
(3) int x; printf("Введите число от 1 до 7: "); scanf_s("%d", &x); switch (x<=5 ? 1 : x==6 ? 2 : x==7 ? 3 : 4) { case 1: printf("Сегодня рабочий день"); break; case 2: printf("Сегодня суббота"); break; case 3: printf("Сегодня воскресенье"); break; case 4: printf("Ошибка! Вы ввели неверное число"); break; }
Какая программа реализует сортировку массива целых чисел по убыванию методом "пузырька" (методом прямого обмена)?
(1) #include <stdio.h> #define N 5 int main() { int i, j, k, buf; int arr[N] = {3, 2, 4, 5, 1}; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { if (arr[j] < arr[j+1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } }; for (k=0; k<N; k++) printf("%d ", arr[k]); return 0; }
(2) #include <stdio.h> #define N 5 int main() { int i, j, k, buf; int arr[N] = {3, 2, 4, 5, 1}; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { if (arr[j] > arr[j+1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } }; for (k=0; k<N; k++) printf("%d ", arr[k]); return 0; }
(3) #include <stdio.h> #define N 5 int main() { int i, j, k, buf, min; int arr[N] = {3, 2, 4, 5, 1}; for (i=0; i<N-1; i++) { min = i; for (j=i+1; j<N; j++) { if (arr[j]<arr[min]) min = j; buf = arr[i]; arr[i] = arr[min]; arr[min] = buf; } } for (k=0; k<N; k++) printf("%d ", arr[k]); return 0; }
(4) #include <stdio.h> #define N 5 int main() { int i, j, k, buf, min; int arr[N] = {3, 2, 4, 5, 1}; for (i=0; i<N-1; i++) { min = i; for (j=i+1; j<N; j++) { if (arr[j]>arr[min]) min = j; buf = arr[i]; arr[i] = arr[min]; arr[min] = buf; } } for (k=0; k<N; k++) printf("%d ", arr[k]); return 0; }
Приведенный фрагмент кода должен запрашивать пароль не более трех раз: char s[5], psw[] = "password"; int i, k= 0; for (i=0; !k && i<3; i++) { printf("Введите пароль: \n"), gets(s); if (strcmp(s, psw)) k = 1; } if (k) printf("Добро пожаловать! TRUE"); else printf("Ошибка: Неверный пароль! FALSE"); Проверьте правильность этого кода для выполнения поставленной задачи и определите, сколько раз будет выполнен цикл for, если пользователь сразу введет верный пароль password?
(1) 0
(2) 1
(3) 3
Какие операции недопустимы для заданных переменных? int n = 123, t; void *p; int *pn; pn = &n;
(1) p = pn
(2) pn = p
(3) t = *pn
(4) t = *p
Необходимо написать программу, которая определяет и выводит на экран время года по дате рождения, заданной пользователем. Какую ошибку содержит приведенный фрагмент кода? int m; char month[3], s[8] = ""; char *season[] = { "winter", "spring", "summer", "autumn" }; printf("Enter day of your birthday (MM.DD): "); scanf("%[^.]s", month); m = atoi(month); if ((m==12) || (m<3)) strcpy(s, &season[0]); else if ((m>2) && (m<6)) strcpy(s, &season[1]); else if ((m>6) && (m<9)) strcpy(s, &season[2]); else strcpy(s, &season[3]); printf("Your birthday is in %s\n", s);
(1) неверное объявление массива указателей
(2) неверное обращение к элементам массива указателей
(3) неверная индексация элементов массива указателей
(4) приведенный фрагмент кода не содержит ошибок
В каком случае в процессе выполнения программы выполняется перераспределение выделенной памяти с целью ее увеличения?
(1) #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> int main(void) { int n, m; char *ptr; printf("\n Enter a dimention of character array: "); scanf_s("%d", &n); _flushall(); ptr = (char *)malloc((n+1)*sizeof(char)); if (!ptr) { printf("\n\t 1st Error! "); printf("\n\n Press any key: "); _getch(); return -1; } printf(" Enter a character array of no more than %d characters: ", n); gets_s(ptr, n+1); m = strlen(ptr); printf("\n Start line:\n"); printf(" %s\n", ptr); ptr = (char *)realloc(ptr, (m+2)*sizeof(char)); if (!ptr) { printf("\n\t 2nd Error! "); printf("\n\n Press any key: "); _getch(); return -1; } strcat_s(ptr, m+2, "!"); printf("\n Start line and character \"%c\":\n", '!'); printf(" %s\n", ptr); free (ptr); printf("\n\n Press any key: "); _getch(); return 0; }
(2) #include <stdio.h> #include <stdlib.h> #define N 10 int main(void) { int i, n = 0; int arr1[N] = {1,2,3,4,5}, *arr; arr = (int *)calloc(N, sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in calloc() function. Press any key: "); _getch(); exit(1); }; for (i=0; i<N; i++) { arr[i] = i+1; n++; printf("arr[%d] = %d\n", i, arr[i]); } arr = (int *)realloc(arr, (N+2)*sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in realloc() function. Press any key: "); _getch(); exit(1); }; for (i=N; i<N+2; i++) { arr[i] = i+1; printf("arr[%d] = %d\n", i, arr[i]); } free(arr); return 0; }
(3) #include <stdio.h> #include <stdlib.h> #define N 10 int main(void) { int i, n = 0; int arr1[N] = {1,2,3,4,5}, *arr; arr = (int *)calloc(N, sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in calloc() function. Press any key: "); _getch(); exit(1); }; for (i=0; i<5; i++) { arr[i] = i+1; n++; } arr = (int *)realloc(arr, n*sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in realloc() function. Press any key: "); _getch(); exit(1); }; free(arr); return 0; }
Необходимо написать функцию sum, которая будет вычислять сумму всех элементов массива. В данную функцию должно передаваться два параметра - массив и размер массива. В какой программе функция sum объявлена неверно?
(1) #include <stdio.h> #define n 10 int sum(int mas, int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int mas, int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }
(2) #include <stdio.h> #define n 10 int sum(int mas[], int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int mas[], int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }
(3) #include <stdio.h> #define n 10 int sum(int mas[0], int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int mas[0], int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }
(4) #include <stdio.h> #define n 10 int sum(int* mas, int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int* mas, int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }
В приведенной программе используется указатель на функции, которые выполняют сортировку целочисленного массива "методом пузырька": void PuzSortInc (int*, int ); void PuzSortDec (int*, int); int main (void) { int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7}; int i, n, alg; <Объявление указателя pFun на функции> n = sizeof(A)/sizeof(A[0]); printf("Исходный массив: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); printf("\nВыберите алгоритм сортировки (1 - \"методом пузырька\" по возрастанию,\ 2 - \"методом пузырька\" по убыванию: "); scanf("%d", &alg); switch (alg) { case 1: pFun = PuzSortInc; break; case 2: pFun = PuzSortDec; break; default: printf("ERROR! Такого алгоритма не определено!"); } if (pFun) { pFun(A,n); printf("\nSorted array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); }; return 0; } void PuzSortInc (int* arr, int size) { int i, j, buf; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] > arr[j + 1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } } } } void PuzSortDec (int* arr, int size) { int i, j, buf; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] < arr[j + 1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } } } } Функция PuzSortInc() выполняет сортировку по возрастанию, функция PuzSortDec() - по убыванию. Каким образом должен быть объявлен указатель на функции для его использования в приведенной программе?
(1) void (*pFun) (int*, int);
(2) void *pFun (int*, int)
(3) void (*pFun) (int*, int) = {PuzSortInc, PuzSortDec};
Каким будет значение переменной line в результате выполнения приведенной программы? int main( void ) { FILE *stream; char line[81]; int result; if ( fopen_s( &stream, "g:\\fseek.out", "w+" ) != 0 ) { printf( "The file fseek.out was not opened\n" ); return -1; } fprintf( stream, "Ivanov - 09.06.1980 " "Petrov - 10.03.1986 \n" "Sidorov - 08.11.1985\n"); result = fseek( stream, 20L, SEEK_SET); if( result ) perror( "Fseek failed" ); else { fgets( line, 80, stream ); printf( "%s", line ); } fclose( stream ); return 0; }
(1) Ivanov - 09.06.1980
(2) Petrov - 10.03.1986
(3) Sidorov - 08.11.1985
В каком случае структура group и переменная g объявлены неверно для приведенной программы? int main (void) { struct stud { char *name; char *surname; int age; double av_mark; }; <Объявление структуры group и переменной gr> gr.number = 3; gr.quantity = 21; gr.student.name = "Ivan"; gr.student.surname = "Ivanov"; gr.student.age = 20; gr.student.av_mark = 4.25; printf("Group Number: %d\nThe number of students in the group: %d\n", gr.number, gr.quantity); printf("%s %s - %1.2f", gr.student.surname, gr.student.name, gr.student.av_mark); return 0; }
(1) struct group { int number; int quantity; char *name; char *surname; int age; double av_mark; } gr;
(2) struct group { int number; int quantity; struct stud student; } gr;
(3) struct group { int number; int quantity; stud student; } gr;
Что будет выведено на экран в результате выполнения приведенной программы? int main(void) { union pw { int i; double d; char ch[2]; } pw = {"y"}; printf("pw.i = %d", pw.i); return 0; }
(1) pw.i = 1
(2) pw.i = 121
(3) pw.i = y
(4) ни один из перечисленных вариантов, так как выполнена неверная инициализация объединения
В приведенной программе происходит инициализация структуры данных о студенте и последующий вывод этих данных: struct student { char fio[30]; int group; float average; }; struct student Init(char*, int, float); void Print(struct student*); int main(void) { struct student s, *st; int i; st = Init("Ivanov I.", 3801, 5.00); Print(st); return 0; } struct student Init(char* n, int i, float f) { struct student s, *st; st = &s; strcpy(st->fio, n); st->group = i; st->average = f; return s; } void Print(struct student *st) { printf("\nName: %s", st->fio); printf("\nGrouproup: %d", st->group); printf("\nAverage mark: %.2f\n", st->average); } Какие утверждения являются верными для приведенной программы?
(1) функция Init возвращает структуру
(2) функция Init возвращает указатель на структуру
(3) функция Init вызывается неверно
Определите, что делает приведенная программа? void printBits(unsigned int var); int main (void) { unsigned int number1, number2; printf("\n The program on demonstration digit-by-digit operator OR ( | ):\n"); printf("\n\t Enter the unsigned number of N1: "); scanf_s("%u", &number1); printf("\t Enter the unsigned number of N2: "); scanf_s("%u", &number2); printf("\n\t Binary representation of the number of N1 (%u) and\n", number1); printf("\t Binary representation of the number of N2 (%u):\n", number2); printBits(number1); printBits(number2); printBits(number1 | number2); printf("\n\n Press any key: "); _getch(); return 0; } void printBits(unsigned int var) { unsigned int b; unsigned int num = 1 << 31; printf("\n\t %10u = ", var); for (b = 1; b <= 32; ++b) { printf("%c", var & num ? '1' : '0'); var <<= 1; if (b % 8 == 0) putchar(' '); } }
(1) выполняет поразрядную операцию И над двумя целыми числами, представленными в двоичной системе счисления для 32-разрядного компьютера
(2) выполняет поразрядную операцию И над двумя целыми числами, представленными в двоичной системе счисления для 16-разрядного компьютера
(3) выполняет поразрядную операцию ИЛИ над двумя целыми числами, представленными в двоичной системе счисления для 32-разрядного компьютера
(4) выполняет поразрядную операцию ИЛИ над двумя целыми числами, представленными в двоичной системе счисления для 16-разрядного компьютера
Какие статические переменные будут не видны в функции main()? int f(); static int d = 5, e = 8; int main(void) { int n = 1, m = 1; int s; s = f(); return 0; } int f() { int p; static int c = 0; p = c; printf("d = %d",d); return p; }
(1) c
(2) d
(3) e
Приведенная программа должна определять, является ли заданная строка палиндромом (палиндром - это слово, которое читается одинаково слева направо и справа налево). В программе выполняется просмотр строки одновременно слева направо и справа налево и сравнение соответствующих символов. Если в какой-то момент символы не совпадают, делается вывод о том, что строка не является палиндромом, если же удается достичь середины строки и при этом все соответствующие символы совпали, то строка является палиндромом: char s[100]; int pal(char s[100]); int main() { printf("\nВведите строку: "); gets(s); if (pal(s)) printf("Строка является палиндромом"); else printf("Строка не является палиндромом"); return 0; } int pal(char s[100]) { int l; char s1[100]; if (strlen(s) = 1) return 1; else { l=s[0]==s[strlen(s)-1]; strncpy(s1, s+1, strlen(s)-2); s1[strlen(s)-2]='\0'; return l&&pal(s1); } } Выполняет ли программа поставленную задачу?
(1) не выполняет, так как неверно задано условие окончания рекурсии
(2) не выполняет, так как содержит ошибку в операторе l=s[0]==s[strlen(s)-1];
(3) выполняет
Файл second.h, расположенный на диске D:, содержит следующие описания переменных и функций: extern int x, y; extern char ch; void func22(void) { y = 100; } void func23(void) { x = y/10; ch = 'R'; } В каком случае подключение файла second.h в другом файле выполняется верно?
(1) #include <stdio.h> #include <conio.h> #include "D:\second.h" int x = 99, y = 77; char ch; void func1(void); int main(void) { ch = 'Z'; func1(); printf("\n Press any key: "); _getch(); return 0; } void func1(void) { func22(); func23(); printf("\n\t x = %d; y = %d;\ ch = %c\n", x, y, ch); }
(2) #include <stdio.h> #include <conio.h> #include <D:\second.h> int x = 99, y = 77; char ch; void func1(void); int main(void) { ch = 'Z'; func1(); printf("\n Press any key: "); _getch(); return 0; } void func1(void) { func22(); func23(); printf("\n\t x = %d; y = %d;\ ch = %c\n", x, y, ch); }
(3) #include <stdio.h> #include <conio.h> #include D:\second.h int x = 99, y = 77; char ch; void func1(void); int main(void) { ch = 'Z'; func1(); printf("\n Press any key: "); _getch(); return 0; } void func1(void) { func22(); func23(); printf("\n\t x = %d; y = %d;\ ch = %c\n", x, y, ch); }
Какие утверждения являются верными?
(1) функция printf() записывает данные в стандартный выходной поток в соответствии с заданной строкой форматирования
(2) функция puts() заменяет символ конца строки '\0' на символ новой строки '\n'
(3) функция printf() предназначена для вывода данных только в файл
(4) функции printf() и puts() полностью аналогичны и ничем не отличаются
Приведенная программа считает в обратном порядке, начиная с какого-либо значения (указанного в командной строке): int main(int argc, char *argv[]) { int disp, count; setlocale (LC_ALL, "rus"); if(argc<2) { printf("В командной строке на задано число\n"); exit(1); } if(argc==3 && !strcmp(argv[2], "display")) disp = 1; else disp = 0; for(count=atoi(argv[1]); count; --count) if(disp) printf("%d ", count); putchar('\a'); printf("Счет закончен"); return 0; } Что будет выведено на экран в результате выполнения приведенной программы, если ее запуск выполняется из командной строки командой Example.exe?
(1) 5 4 3 2 1
(2) 5 4 3 2 1 0
(3) В командной строке не задано число
(4) ничего не будет выведено
В каком случае цикл for будет выполняться бесконечно?
(1) int i; char ch; for (i=1; ; i++) { ch = getchar(); if (ch != 'y') i++; }
(2) int i = 0; char ch; for (; i<5 ; i++) { ch = getchar(); if (ch != 'y') i++; }
(3) int i; char ch; for (i=1; i<5 ; ) { ch = getchar(); if (ch != 'y') i++; }
(4) int i = 1; char ch; for ( ; ; ) { ch = getchar(); if (ch != 'y') i++; }
Чему будет равно значение переменной f при попытке пользователя вычислить значение 5^6? int a, b, res = 0; char op; int f = 1; printf("Введите 1й операнд: "); scanf("%d", &a); printf("Введите знак операции: "); scanf("%s", &op); printf("Введите 2й операнд: "); scanf("%d", &b); switch (op) { case '+': res = a+b; break; case '-': res = a-b; break; case '*': res = a*b; break; case '/': res = a/b; break; default: printf("Неизвестная операция\n"); f = 0; } f = f*2; if (f) printf ("Результат: %d", res);
(1) 0
(2) 1
(3) 2
Что делает приведенная программа? #include <stdio.h> #define N 5 int main() { int m, i; int arr[N] = {3, 2, 4, 5, 1}; m = 1; for (i=1; i<N; i++) if (arr[i]>arr[m]) m = i; printf("a[m] = %d", arr[m]); return 0; }
(1) выполняет поиск максимального элемента в массиве
(2) выполняет поиск минимального элемента в массиве
(3) выполняет сортировку элементов массива по возрастанию
(4) выполняет сортировку элементов массива по убыванию
В каком случае на экран в цикле будет выведен символ, код которого равен 196?
(1) char t1 = 196; int i = 0; for (i=0; i<10; i++) printf("%c", t1);
(2) char t1 = '196'; int i = 0; for (i=0; i<10; i++) printf("%c", t1);
(3) char t1 = "196"; int i = 0; for (i=0; i<10; i++) printf("%c", t1);
Требуется написать программу, которая будет копировать одну строку в другую с помощью указателей. Определите, выполняет ли приведенная программа поставленную задачу? Если не выполняет, объясните, почему? #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1; ptr2 = str2; while (*ptr1!='\0') { if (*ptr1=='\0') { *ptr2 = '\0'; break; } *ptr2 = *ptr1; ptr1++; } printf("str2 = %s\n", str2); return 0; }
(1) программа выполняет поставленную задачу
(2) программа не выполняет поставленную задачу, так как в цикле не происходит изменение указателя ptr2
(3) программа не выполяет поставленную задачу, так как неверно задано условие цикла
Указатель p инициализирован строковой константой: char *p = "тестовая строка". Где в данном случае хранится заданная строка?
(1) в указателе p
(2) в специальной таблице строк
(3) указатель p может хранить только адрес и не может быть инициализирован строковой константой
После выполнения какой программы будет выполняться условие size2 > size3?
(1) #include <stdio.h> #include <stdlib.h> #define N 10 int main(void) { int size1, size2, size3, i, n = 0; int arr1[N] = {1,2,3,4,5}, *arr; size1 = sizeof(arr1); arr = (int *)calloc(N, sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in calloc() function. Press any key: "); _getch(); exit(1); }; for (i=0; i<N; i++) { arr[i] = i+1; printf("arr[%d] = %d\n", i, arr[i]); } size2 = N*sizeof(int); for (i=0; i<N/2; i++) { arr[i] = i+1; n++; } arr = (int *)realloc(arr, n*sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in realloc() function. Press any key: "); _getch(); exit(1); }; size3 = N*sizeof(int); free(arr); return 0; }
(2) #include <stdio.h> #include <stdlib.h> #define N 10 int main(void) { int size1, size2, size3, i, n = 0; int arr1[N] = {1,2,3,4,5}, *arr; size1 = sizeof(arr1); arr = (int *)calloc(N, sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in calloc() function. Press any key: "); _getch(); exit(1); }; for (i=0; i<N; i++) { arr[i] = i+1; printf("arr[%d] = %d\n", i, arr[i]); } size2 = N*sizeof(int); for (i=0; i<N/2; i++) { arr[i] = i+1; n++; } arr = (int *)realloc(arr, n*sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in realloc() function. Press any key: "); _getch(); exit(1); }; size3 = n*sizeof(int); free(arr); return 0; }
(3) #include <stdio.h> #include <stdlib.h> #define N 10 int main(void) { int size1, size2, size3, i, n = 0; int arr1[N] = {1,2,3,4,5}, *arr; size1 = sizeof(arr1); arr = (int *)calloc(N, sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in calloc() function. Press any key: "); _getch(); exit(1); }; for (i=0; i<N; i++) { arr[i] = i+1; n++; printf("arr[%d] = %d\n", i, arr[i]); } size2 = N*sizeof(int); arr = (int *)realloc(arr, (N+2)*sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in realloc() function. Press any key: "); _getch(); exit(1); }; for (i=N; i<N+2; i++) { arr[i] = i+1; printf("arr[%d] = %d\n", i, arr[i]); } for (i=0, n=0; i<N+2; i++) n++; size3 = n*sizeof(int); free(arr); return 0; }
Что произойдет после выполнения приведенной программы? #include <stdio.h> #define n 10 void fun(int *mas, int k); int main( void ) { int arr[n] = {3,4,5,4,4}; int i; fun(arr, n); for (i=0; i<n; i++) printf("arr[%d] = %d\n", i, arr[i]); return 0; } void fun(int *mas, int k) { int i, s = 0; for (i=0; i<k; i++) mas[i] *= 2; }
(1) ничего не произойдет, так как функция fun(int *mas, int k) не возвращает значения
(2) значения всех элементов массива arr будут увеличены в два раза
(3) размер памяти для хранения массива arr будет увеличен в два раза
Приведенная программа использует указатель на функции, которые выполняют различные действия: вычисление квадратного корня, вычисление синуса, вычисление тангенса: int main (void) { double (*pFunc) (double); int c = 1; double y; while(1) { printf("Выберите функцию (0-выход): 1-sqrt, 2-sin, 3-tan\n"); scanf("%d", &c); switch(c) { case 1: pFunc = sin; break; case 2: pFunc = sqrt; break; case 3: pFunc = tan; break; case 0: return; default: continue; } y = pFunc(1.1); printf("f(1.1) = %.2f\n", y); } return 0; } Какое вычисление будет выполнено в том случае, если пользователь в запросе выбора функции задаст число 2?
(1) sqrt(1.1)
(2) sin(1.1)
(3) tan(1.1)
Задан файл, содержащий список названий и стоимости мониторов: filesВ результате выполнения какой программы на экран будет выведено только название и стоимость монитора, указанного в последнем пункте?
(1) int main( void ) { FILE *stream; char str[81]; int result; if ( fopen_s( &stream, "g:\\list.txt", "r+" ) != 0 ) { printf( "The file list.txt was not opened\n" ); return -1; } result = fseek( stream, -24L, SEEK_END); if( result ) perror( "Fseek failed" ); else { fgets( str, 80, stream ); printf( "%s", str ); } fclose( stream ); return 0; }
(2) int main( void ) { FILE *stream; char str[81]; int result; if ( fopen_s( &stream, "g:\\list.txt", "r+" ) != 0 ) { printf( "The file list.txt was not opened\n" ); return -1; } result = fseek( stream, -27L, SEEK_END); if( result ) perror( "Fseek failed" ); else { fgets( str, 80, stream ); printf( "%s", str ); } fclose( stream ); return 0; }
(3) int main( void ) { FILE *stream; char str[81]; int result; if ( fopen_s( &stream, "g:\\list.txt", "r+" ) != 0 ) { printf( "The file list.txt was not opened\n" ); return -1; } result = fseek( stream, -28L, SEEK_END); if( result ) perror( "Fseek failed" ); else { fgets( str, 80, stream ); printf( "%s", str ); } fclose( stream ); return 0; }
В какой программе не используются вложенные структуры?
(1) int main (void) { struct student { char *name; char *surname; int group; int ses[5]; double av; struct student *p; } st; int i, sum = 0; st.name = "Ivan"; st.surname = "Ivanov"; st.group = 1024; st.ses[0] = 5; st.ses[1] = 4; st.ses[2] = 5; st.ses[3] = 5; st.ses[4] = 5; for (i=0; i<5; i++) sum +=st.ses[i]; st.av = (double)sum/5; printf("Name: %s %s\n", st.surname, st.name); printf("Group: %d\n", st.group); printf("Average mark: %.2f\n\n", st.av); return 0; }
(2) int main (void) { struct student { char *name; char *surname; int group; int ses[5]; double av; } st; int i, sum = 0; st.name = "Ivan"; st.surname = "Ivanov"; st.group = 1024; st.ses[0] = 5; st.ses[1] = 4; st.ses[2] = 5; st.ses[3] = 5; st.ses[4] = 5; for (i=0; i<5; i++) sum +=st.ses[i]; st.av = (double)sum/5; printf("Name: %s %s\n", st.surname, st.name); printf("Group: %d\n", st.group); printf("Average mark: %.2f\n\n", st.av); return 0; }
(3) int main (void) { struct stud { char *name; char *surname; int age; double av_mark; } st; struct group { int number; int quantity; struct stud *student; } gr; gr.student = &st; gr.number = 3; gr.quantity = 21; gr.student->name = "Ivan"; gr.student->surname = "Ivanov"; gr.student->age = 20; gr.student->av_mark = 4.25; printf("Group Number: %d\nThe number of students in the group: %d\n", gr.number, gr.quantity); printf("%s %s - %1.2f", gr.student->surname, gr.student->name, gr.student->av_mark); return 0; }
В результате выполнения какой программы на экран будет выведена строка 0 1 2 100 101 102?
(1) int main(void) { enum coin { penny, nickel, dime, quarter=100, half_dollar, dollar}; enum coin money; printf("%d ", penny); printf("%d ", nickel); printf("%d ", dime); printf("%d ", quarter); printf("%d ", half_dollar); printf("%d ", dollar); return 0; }
(2) int main(void) { enum coin { penny, nickel, dime, quarter, half_dollar, dollar}; enum coin money; printf("%d ", penny); printf("%d ", nickel); printf("%d ", dime); printf("%d ", quarter); printf("%d ", half_dollar); printf("%d ", dollar); return 0; }
(3) int main(void) { enum coin { penny, nickel, dime, quarter, half_dollar=101, dollar}; enum coin money; printf("%d ", penny); printf("%d ", nickel); printf("%d ", dime); printf("%d ", quarter); printf("%d ", half_dollar); printf("%d ", dollar); return 0; }
Задана программа, в которой реализовано три функции: Init - функция инициализации структуры, Print - функция вывода структуры на экран, Modify - функция изменения полей структуры: typedef struct { char fio[30]; char phone[20]; int age; } note; note Init(char*, char*, int); void Print(note*); void Modify(note); int main(void) { note n[3], *pn; char *strName[3] = {"Ivanov I.", "Pertov P.", "Sidorov S."}; char *strPhone[3] = {"12-34-56", "78-90-12", "34-56-78"}; int i, age = 25; for (i=0; i<3; i++) { n[i] = Init(strName[i], strPhone[i], age+i); pn = &n[i]; Print(pn); } Modify(n[0]); pn = &n[0]; Print(pn); return 0; } note Init(char* f, char* p, int a) { note n, *pn; pn = &n; strcpy(pn->fio, f); strcpy(pn->phone, p); pn->age = a; return n; } void Print(note *pn) { printf("\nName: %s", pn->fio); printf("\nPhone: %s", pn->phone); printf("\nAge: %d\n", pn->age); } void Modify(note n) { strcpy(n.fio, "Vasiliev V."); strcpy(n.phone, "89-01-23"); n.age = 30; } Какая функция не соответсвует поставленной задаче?
(1) Init
(2) Print
(3) Modify
Чему будет равно значение переменной c после выполнения приведенной программы? int main(void) { struct test { unsigned int a : 2; unsigned int b : 8; }; int c; struct test t; t.b = 255; t.a = 3; c = t.b ^ t.a; printf("c = %d\n", c); return 0; }
(1) 0
(2) 63
(3) 252
(4) 255
Какой период хранения имеют локальные переменные функции без явно определенного спецификатора?
(1) auto
(2) static
(3) extern
Что произойдет при выполнении программы? int summa(int N, int a[6]); int main() { int i,n; int a[6] = {8, 65, 10, 2, 4, 1}; n = sizeof(a)/sizeof(a[0]); printf("Сумма: %d", summa(n-1, a)); } int summa(int N, int a[6]) { return a[N]+summa(N-1, a); }
(1) вычисление суммы элементов массива
(2) ошибка при вычислении значения переменной n
(3) аварийное завершение работы программы
Какие директивы относятся к директивам условной компиляции?
(1) if
(2) else
(3) #if
(4) #ifdef
(5) #define
Каким образом пользователь должен ввести данные о себе, чтобы в результате выполнения приведенного фрагмента кода программа вывела приветствие Приятно познакомиться, Иван Иванов!? char FirstName[100], LastName[100]; int Age; printf("Введите Ваши имя, фамилию и возраст: \n"); scanf("%s %[^,]s %d", FirstName, LastName, &Age); printf("Приятно познакомиться, %s %s!\n", FirstName, LastName);
(1) Иван Иванов 30
(2) Иван Иванов, 30
(3) Иван, Иванов, 30
Что делает приведенная программа? int main(int argc, char *argv[]) { int t, i; for(t=0; t<argc-1; ++t) { i = 0; while(argv[t][i]) { putchar(argv[t][i]); ++i; } printf("\n"); } return 0; }
(1) посимвольно выводит все аргументы, с которыми ее вызвали
(2) построчно выводит все аргументы, с которыми ее вызвали
(3) посимвольно выводит все аргументы, кроме последнего, с которыми ее вызвали
(4) построчно выводит все аргументы, кроме последнего, с которыми ее вызвали
В результате выполнения какого фрагмента кода на экран будет выведена таблица чисел от 1 до 10 и их квадратов?
(1) int x, n = 1; while (n<10) { x = n*n; printf("%d %d\n", n, x); n++; }
(2) int x, n = 1; while (n<=10) { x = n*n; printf("%d %d\n", n, x); }
(3) int x, n; for (n=1; n<=10; n++) { x = n*n; printf("%d %d\n", n, x); }
В какой программе будет корректно обработана ситуация деления на нуль?
(1) int a, b, res; char op; int f = 1; printf("Введите 1й операнд: "); scanf("%d", &a); printf("Введите знак операции: "); scanf("%s", &op); printf("Введите 2й операнд: "); scanf("%d", &b); switch (op) { case '+': res = a+b; break; case '-': res = a-b; break; case '*': res = a*b; break; case '/': res = a/b; break; default: printf("Неизвестная операция"); f = 0; } if (f) printf ("Результат: %d", res);
(2) int a, b, res; char op; int f = 1; printf("Введите 1й операнд: "); scanf("%d", &a); printf("Введите знак операции: "); scanf("%s", &op); printf("Введите 2й операнд: "); scanf("%d", &b); switch (op) { case '+': res = a+b; break; case '-': res = a-b; break; case '*': res = a*b; break; case '/': switch (b) { case 0: printf("Деление на 0!\n"); default: res = a/b; } break; default: printf("Неизвестная операция 111"); f = 0; } if (f) printf ("Результат: %d 222", res);
(3) int a, b, res; char op; int f = 1; printf("Введите 1й операнд: "); scanf("%d", &a); printf("Введите знак операции: "); scanf("%s", &op); printf("Введите 2й операнд: "); scanf("%d", &b); switch (op) { case '+': res = a+b; break; case '-': res = a-b; break; case '*': res = a*b; break; case '/': switch (b) { case 0: printf("Деление на 0!\n"); break; default: res = a/b; } break; default: printf("Неизвестная операция 111"); f = 0; } if (f) printf ("Результат: %d 222", res);
При выполнении какой программы возникнет ошибка, связанная с выходом за границы массива?
(1) #include <stdio.h> #define N 11 int main() { int i; int arr[N][2]; for (i=1; i<N; i++) { arr[i][1] = i; arr[i][2] = i*i; } for (i=0; i<N; i++) printf("%d,%d\n", arr[i][1], arr[i][2]); return 0; }
(2) #include <stdio.h> #define N 11 int main() { int i; int arr[N][2]; for (i=0; i<N; i++) { arr[i][0] = i; arr[i][1] = i*i; } for (i=0; i<N; i++) printf("%d,%d\n", arr[i][0], arr[i][1]); return 0; }
(3) #include <stdio.h> #define N 11 int main() { int i; int arr[N][2]; for (i=1; i<N; i++) { arr[i][0] = i; arr[i][1] = i*i; } for (i=1; i<N; i++) printf("%d,%d\n", arr[i][0], arr[i][1]); return 0; }
Аналогом какой стандартной функции является приведенный фрагмент кода? int i = 0; char str1[10] = "Test"; char str2[10] = ""; while (str1[i]!='\0') { str2[i] = str1[i]; i++; }
(1) strcpy(str1,str2);
(2) strcpy(str2,str1);
(3) strstr(str1,str2);
(4) strstr(str2,str1);
(5) strcmp(str1,str2);
(6) strcmp(str2,str1);
В результате выполнения какой программы в строку str2 будет скопирована не только инвертированная строка str1, но и лишний "мусор"?
(1) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1 + strlen(str1) - 1; ptr2 = str2; while (*ptr1) { if (!(*ptr1)) *ptr2 = '\0'; *ptr2 = *ptr1; ptr1--; ptr2++; } printf("str2 = %s\n", str2); return 0; }
(2) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1 + strlen(str1) - 1; ptr2 = str2; while (ptr1>=str1) { if (ptr1<str1) *ptr2 = '\0'; *ptr2 = *ptr1; ptr1--; ptr2++; } printf("str2 = %s\n", str2); return 0; }
(3) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1 + strlen(str1); ptr2 = str2; while (ptr1>=str1) { if (ptr1<str1) *ptr2 = '\0'; *ptr2 = *ptr1; ptr1--; ptr2++; } printf("str2 = %s\n", str2); return 0; }
Какая программа вычисляет сумму всех четных элементов за исключением элементов первой строки?
(1) int m[][5] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}}; int *ptr; int i, j, n, k, sum = 0; n = sizeof(m)/sizeof(m[0]); k = sizeof(m[0])/sizeof(m[0][0]); ptr = &m[1][0]; printf("n = %d\n", n); printf("k = %d\n", k); for (i=0; i<(n*k)-k; i++) { if (!(*(ptr+i)%2)) sum += *(ptr+i);
(2) int m[][5] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}}; int *ptr; int i, j, n, k, sum = 0; n = sizeof(m)/sizeof(m[0]); k = sizeof(m[0])/sizeof(m[0][0]); ptr = &m[1][1]; printf("n = %d\n", n); printf("k = %d\n", k); for (i=0; i<(n*k)-k; i++) { if (!(*(ptr+i)%2)) sum += *(ptr+i);
(3) int m[][5] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}}; int *ptr; int i, j, n, k, sum = 0; n = sizeof(m)/sizeof(m[0]); k = sizeof(m[0])/sizeof(m[0][0]); ptr = &m[1][1]; printf("n = %d\n", n); printf("k = %d\n", k); for (i=0; i<(n*k)-k; i++) { if (*(ptr+i)%2) sum += *(ptr+i);
В приведенной программе выполняется перераспределение памяти для увеличения размерности массива: #include <stdio.h> #include <stdlib.h> #define N 10 int main(void) { int i; int *arr; arr = (int *)realloc(arr, (N+2)*sizeof(int)); for (i=0; i<N; i++) { arr[i] = i+1; printf("arr[%d] = %d\n", i, arr[i]); } if (!arr) { printf("\nERROR! Out of memory in realloc() function. Press any key: "); _getch(); exit(1); }; for (i=N; i<N+2; i++) { arr[i] = i+1; printf("arr[%d] = %d\n", i, arr[i]); } free(arr); return 0; } Какие изменения нужно внести в программу для ее корректной работы?
(1) для корректной работы программы не требуются изменения
(2) изменить размер в функции выделения памяти
(3) изменить синтаксис функции освобождения памяти
(4) инициализировать указатель arr
Необходимо написать функцию, которая будет вычислять сумму всех элементов двухмерного массива. В какой программе вызов функции sum выполняется верно?
(1) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(a, n, m); printf("Сумма элементов а: %d\n", s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }
(2) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(a[0][0], n, m); printf("Сумма элементов а: %d\n", s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }
(3) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(&a[0][0], n, m); printf("Сумма элементов а: %d\n", s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }
Что произойдет при выполнении приведенной программы, если пользователь задаст номер алгоритма 9? void PuzSortInc (int*, int ); void PuzSortDec (int*, int); int main (void) { int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7}; int i, n, alg; void (*pFun) (int*, int) = NULL; n = sizeof(A)/sizeof(A[0]); printf("Исходный массив: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); printf("\nВыберите алгоритм сортировки (1 - \"методом пузырька\" по возрастанию,\ 2 - \"методом пузырька\" по убыванию: "); scanf("%d", &alg); switch (alg) { case 1: pFun = PuzSortInc; break; case 2: pFun = PuzSortDec; break; default: printf("ERROR! Такого алгоритма не определено!"); } pFun(A,n); printf("\nОтсортированный массив: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); return 0; } void PuzSortInc (int* arr, int size) { int i, j, buf; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] > arr[j + 1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } } } } void PuzSortDec (int* arr, int size) { int i, j, buf; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] < arr[j + 1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } } } }
(1) будет выведено сообщение об ошибке ERROR! Такого алгоритма не определено!, и программа корректно завершит свою работу
(2) вместо отсортированного массива будет выведен изначальный массив, так как никаких изменений в нем не произойдет
(3) произойдет сбой выполнения программы
Чему будет равно значение переменной m в результате выполнения приведенной программы? int main(void) { FILE *fp; char str[30] = "Lection 11"; int k, l, m; if((fp=fopen("g:\\test.txt", "wt+"))==NULL) { printf("Ошибка при открытии файла.\n"); exit(1); } k = fwrite(str, sizeof(char), strlen(str)-3, fp); rewind(fp); l = fread(str, sizeof(char), sizeof(str)/sizeof(char), fp); m= k+l; fclose(fp); return 0; }
(1) 14
(2) 30
(3) 37
(4) при выполнении программы возникнет ошибка при попытке чтения из файла большего количества символов, чем было записано
Необходимо написать программу, которая позволит ввести с клавиатуры данные о поездах. Также в программе должен быть предусмотрен поиск по пункту назначения поезда. Какая программа выполняет поставленную задачу?
(1) int main (void) { struct train { char *nazn; int numb; char *time; } tr[3]; int i = 0, sum = 0, ch=0; char str[10], search[10]; while(ch!=121) { printf("\nEnter information about train (Q - quit): \n"); printf("Enter destination of the train: "); gets(tr[i].nazn); printf("Enter number of the train: "); gets(str); tr[i].numb = atoi(str); printf("Enter time of scheduled departure: "); gets(tr[i].time); ++i; printf("Quit? (y/n): "); ch = _getche(); }; printf("\n\nEnter train destination: "); gets(search); for (i=0; i<3; i++) { if (strcmp(tr[i].nazn,search)==0) { printf("\n\tTrain number: %d", tr[i].numb); printf("\n\tTime: %s", tr[i].time); } } if (i>=3) printf("There is no train to this destination"); return 0; }
(2) int main (void) { struct train { char nazn[40]; int numb; char time[10]; } tr[3]; int i = 0, sum = 0, ch=0; char str[10], search[10]; while(ch!=121) { printf("\nEnter information about train (Q - quit): \n"); printf("Enter destination of the train: "); gets(tr[i]->nazn); printf("Enter number of the train: "); gets(str); tr[i]->numb = atoi(str); printf("Enter time of scheduled departure: "); gets(tr[i]->time); ++i; printf("Quit? (y/n): "); ch = _getche(); }; printf("\n\nEnter train destination: "); gets(search); for (i=0; i<3; i++) { if (strcmp(tr[i]->nazn,search)==0) { printf("\n\tTrain number: %d", tr[i]->numb); printf("\n\tTime: %s", tr[i]->time); } } if (i>=3) printf("There is no train to this destination"); return 0; }
(3) int main (void) { struct train { char nazn[40]; int numb; char time[10]; } tr[3]; int i = 0, sum = 0, ch=0; char str[10], search[10]; while(ch!=121) { printf("\nEnter information about train (Q - quit): \n"); printf("Enter destination of the train: "); gets(tr[i].nazn); printf("Enter number of the train: "); gets(str); tr[i].numb = atoi(str); printf("Enter time of scheduled departure: "); gets(tr[i].time); ++i; printf("Quit? (y/n): "); ch = _getche(); }; printf("\n\nEnter train destination: "); gets(search); for (i=0; i<3; i++) { if (strcmp(tr[i].nazn,search)==0) { printf("\n\tTrain number: %d", tr[i].numb); printf("\n\tTime: %s", tr[i].time); } } if (i>=3) printf("There is no train to this destination"); return 0; }
Определите, возникнут ли ошибки при выполнении приведенной программы? Если возникнут, объясните, почему? int main(void) { enum coin { penny, nickel, dime, quarter, half_dollar, dollar}; enum coin money; char name[][12]={ "penny", "nickel", "dime", "quarter", "half_dollar", "dollar" }; money = half_dollar; printf("%s", name[money]); return 0; }
(1) возникнет ошибка, так как при обращении к элементу массива name[money] необходимо указать целочисленный индекс
(2) возникнет ошибка, так как в операции присваивания значения переменной money отсутсвуют кавычки
(3) возникнет ошибка, так при обращении к элементу массива name[money] возникнет выход за границы массива
(4) при выполнении программы не возникнет ошибок
В приведенной программе функция Copy выполняет копирование одной структуры типа sale в другую и возвращает структуру этого же типа: typedef struct sale_struct { char *title; int price; } sale; sale Copy(sale); int main(void) { sale s1,s2; struct sale_struct s3, s4; s1.title = "Book"; s1.price = 200; s3.title = "Cake"; s3.price = 60; return 0; } sale Copy(sale s) { sale s1; s1 = s; return s1; } Какие из перечисленных вызов функции Copy являются неверными?
(1) s2 = Copy(s1);
(2) s3 = Copy(s1);
(3) s4 = Copy(&s3);
В каком случае выполняется операция побитового исключающего ИЛИ (^)?
(1) исходное число: 1001 0010 1100 0100 операнд-маска: 1000 0000 0000 0011 результат: 0001 0010 1100 0111
(2) исходное число: 1001 0010 1100 0100 операнд-маска: 1111 0000 0000 0000 результат: 1001 0000 0000 0000
(3) исходное число: 1001 0010 1100 0100 операнд-маска: 1000 0000 0000 0011 результат: 1001 0010 1100 0111
Что обозначает подключение #include "..\some.h"?
(1) то, что файл some.h находится на один уровень ниже, чем главный файл
(2) то, что файл some.h находится на один уровень выше, чем главный файл
(3) то, что для поиска файла some.h необходимо выполнить просмотр верхних уровней до тех пор, пока файл не будет найден
Какое утверждение являотся верным?
(1) при рекурсивном вызове функции все объекты, связанные с функцией, создаются заново
(2) при рекурсивном вызове функции создается новая копия ее кода
(3) при рекурсивном вызове функции создается новая копия значений ее параметров
В каком случае директива #define определяет символическую константу?
(1) #define VERSION 1
(2) #define VASYA "Василий Иванович"
(3) #define MAX (x, y) ((x)>(y) ? (x) : (y))
(4) #if VERSION == 1 #define INCFILE "vers1.h" #elseif VERSION == 2 #define INCFILE "vers1.h" #else #define INCFILE "versN.h" #endif #include INCFILE
Какой дипазон значений имеет тип unsigned int на 32-разрядных платформах?
(1) от –32768 до 32767
(2) от 0 до 65535
(3) от –2147483648 до 2147483647
(4) от 0 до 4294967295
При каком условии запуска программы из командной строки значение argc будет равно 1? int main(int argc, char *argv[]) { int t; for(t=0; t<argc; ++t) printf("%s\n", argv[t]); return 0; }
(1) при запуске программы без параметров, то есть командой ProgramName.exe
(2) при запуске программы командой ProgramName.exe 0
(3) ни при каких условиях
(4) при запуске программы с любым количеством параметров
Игра "Угадай число" заканчивавается, если задуманное число угадано, или количество попыток достигло определенного значения, например, 10. Какой фрагмент кода правильным образом реализует эту игру, если c - число попыток, n - задуманное число?
(1) int c = 0, n = 100, m; do { printf("Ваш вариант: "); scanf("%d", &m); c++; } while ((n!=m) && (c<=10))
(2) int c = 0, n = 100, m; do { printf("Ваш вариант: "); scanf("%d", &m); c++; } while ((n!=m) && (c<10))
(3) int c = 0, n = 100, m; do { printf("Ваш вариант: "); scanf("%d", &m); c++; } while (n!=m) || (c<=10))
В результате выполнения какого фрагмента кода на экран будет выведено одно число?
(1) int n = 1; while (n<=10) { if (n%2) printf("%d\n", n); n++; return; printf("%d\n", n); n++; }
(2) int n = 1; while (n<=10) { if (n%2) printf("%d\n", n); n++; continue; printf("%d\n", n); n++; }
(3) int n = 1; while (n<=10) { if (n%2) printf("%d\n", n); n++; break; printf("%d\n", n); n++; }
Чему будет равно значение переменной sum после выполнения приведенной программы? #include <stdio.h> #define N 5 #define M 2 int main() { int i, j, sum=0; int arr[N][2] = {0,1,2,3,4,5,6,7,8,9}; for (i=0; i<N; i++) { for (j=0; j<M; j++) if (!(arr[i][j]%2)) sum+=arr[i][j]; } printf("sum = %d\n", sum); return 0; }
(1) 20
(2) 25
(3) 45
Используя таблицу кодов ASCII, определите, что будет выведено на экран в результате выполнения приведенной программы? #include <stdio.h> #define N 7 int main() { int i, j, k, buf; char arr[N] = "Lection"; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { if (arr[j] > arr[j+1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } }; for (k=0; k<N; k++) printf("%c ", arr[k]); return 0; }
(1) L c e i n o t
(2) c e i n o t L
(3) t o n i e L
(4) L t o n i e
В программе объявлен указатель void *p. Какие утверждения являются неверными?
(1) указатель p может содержать адрес только объекта типа void
(2) к указателю p неприменима операция разыменования
(3) указатель p может быть автоматически преобразован к любому типу
Что такое многоуровневая адресация?
(1) ситуация, когда два разных указателя хранят адрес одной и той же переменной
(2) ситуация, когда один указатель cсылается на другой указатель
(3) ситуация, когда указатели хранятся в массиве
Задан указатель int **m на массив указателей: int i; int **m; m = (int **)calloc(5,sizeof(int *)); for (i=0; i<5; i++) m[i] = (int *)calloc(3,sizeof(int)); Как в данном случае освободить выделенную память?
(1) for (i=0; i<10; i++) free(m[i]);
(2) free(m);
(3) for (i=0; i<5; i++) free(m[i]); free(m);
(4) for (i=0; i<3; i++) free(m[i]); free(m);
(5) for (i=0; i<15; i++) free(m[i]); free(m);
Какая ошибка содержится в приведенной функции? int* fun() { int a = 10; return &a; }
(1) нельзя возвращать из функции указатель на локальную переменную
(2) синтаксическая ошибка
(3) функция не содержит ошибок
Какая переменная pFun способна указывать только на функцию, которая возвращает целое число и требует два целых числа в качестве параметра?
(1) int (*pFun) (int, int)
(2) int (*pFun) (int)
(3) void (*pFun) (int, int)
(4) double (*pFun) (double, double)
Задан файл, содержащий список названий и стоимости мониторов: filesКакой файл будет получен в результате выполнения приведенной программы? int main( void ) { FILE *stream; char str[81]; int result; if ( fopen_s( &stream, "g:\\list.txt", "r+" ) != 0 ) { printf( "The file list.txt was not opened\n" ); return -1; } result = fseek( stream, 0L, SEEK_END); if( result ) perror( "Fseek failed" ); else { fputs( "5. NEC MultiSync EX231W - 10490 rub.", stream ); printf( "%s", str ); } fclose( stream ); return 0; }
(1) files
(2) files
(3) files
В каком случае структура определена с использованием ключевого слова typedef неверно?
(1) struct foot_klub { char name[20]; int liga; float ochki; }; typedef struct foot_klub f_club; f_club a, *p, b[5];
(2) struct foot_klub { char name[20]; int liga; float ochki; }; typedef struct foot_klub *f_club; f_club a, *p, b[5];
(3) typedef struct { char name[20]; int liga; float ochki; }f_club; f_club a, *p, b[5];
При каких значениях переменной error в результате выполнения приведенной программы на экран будет выведено сообщение Возникла ошибка записи (ERR_WRITE)? int main(void) { typedef enum { ERR_READ, ERR_WRITE, ERR_CONVERT} Err; Err error; switch (error) { case ERR_READ: printf("Возникла ошибка чтения (ERR_READ)\n"); break; case ERR_WRITE: printf("Возникла ошибка записи (ERR_WRITE)\n"); break; case ERR_CONVERT: printf("Возникла ошибка преобразования (ERR_CONVERT)\n"); break; default: printf("Возникла неизвестная ошибка\n"); break; }; return 0; }
(1) error = 0;
(2) error = 1;
(3) error = ERR_WRITE;
Необходимо написать функцию копирования значений всех полей одной структуры заданного типа в другую: typedef struct sale_struct { char *title; int price; } sale; Какая функция не выполняет поставленную задачу?
(1) sale Copy(char* t, int p) { sale s1; s1.title = t; s1.price = p; return s1; }
(2) sale Copy(sale *s) { sale s1; s1 = s; return s1; }
(3) sale Copy(sale s) { sale s1; s1 = s; return s1; }
Значения каких переменных будут нечетными? a = 6 & 5; b = 6 | 5; c = 6 ^ 5;
(1) a
(2) b
(3) c
Какое утверждение является верным?
(1) класс статической памяти используется для улучшения ясности алгоритма, реализованного в программе
(2) класс статической памяти используется для улучшения читаемости и ясности текста программы
(3) класс статической памяти используется для исключения конфликта имен
Задана функция вычисления факториала: long fact (int n){ if ( n<1 ) return 1; else return n*fact(n-1); } Какая последовательность вызовов будет неверной, если в функции main задать long result=fact(3)?
(1) files
(2) files
(3) files
В каком случае будет подключен файл arr.h? #ifndef ARR #define ARR #include "arr.txt" #endif
(1) в случае, если символ ARR не определен
(2) в случае, если определен символ ARR
(3) файл arr.h будет подключен в любом случае
(4) файл arr.h ни в каком случае подключен не будет
Размер (в байтах) объектов каких типов данных зависит от разрядности процессора?
(1) char
(2) int
(3) unsigned int
При каком запуске программы echo через командную строку аргумент argv будет представлен заданным образом?files
(1) echo "Hello, world!"
(2) echo Hello, world!
(3) echo "Hello," "world!"
При вводе каких значений выполнение цикла завершится? int num; do { scanf("%d", &num); } while (num > 100);
(1) 200
(2) -100
(3) 100
(4) 120
В каком случае, если пользователь введет число 4, на экран будет выведено сообщение 4 в квадрате = -16?
(1) int isqrd, i; printf("Введите число: "); scanf("%d", &i); isqrd = i>0 ? -(i*i) : i*i; printf("%d в квадрате %d", i, isqrd);
(2) int isqrd, i; printf("Введите число: "); scanf("%d", &i); isqrd = i>0 ? i*i : -(i*i); printf("%d в квадрате %d", i, isqrd);
(3) int isqrd, i; printf("Введите число: "); scanf("%d", &i); isqrd = i<0 ? i*i : -(i*i); printf("%d в квадрате %d", i, isqrd);
Чему будет равно значение переменной size в результате выполнения приведенного фрагмента кода? int i, j, size; int arr[5][2] = {0,1,2,3,4,5,6,7,8,9}; size = sizeof(arr)/sizeof(arr[0][0]);
(1) 5
(2) 10
(3) 40
В каком случае окончанием ввода строки будет служить нажатие клавиши Enter?
(1) #include <stdio.h> #include <conio.h> #define N 10 int main() { int i=0; char arr[N] = ""; printf("Last Name: "); while (i<N) { arr[i] = _getche(); if (arr[i]==13) { arr[i] = '\0'; break; } i++; }; printf("\nYou have entered Last Name: %s", arr); return 0; }
(2) #include <stdio.h> #include <conio.h> #define N 10 int main() { int i=0; char arr[N] = ""; printf("Last Name: "); while ((i<N) && (arr[i]!=13)) { arr[i] = _getche(); i++; }; printf("\nYou have entered Last Name: %s", arr); return 0; }
(3) #include <stdio.h> #include <conio.h> #define N 10 int main() { int i=0; char arr[N] = ""; printf("Last Name: "); do { arr[i] = _getche(); i++; } while ((i<N) && (arr[i]!="Enter")); printf("\nYou have entered Last Name: %s", arr); return 0; }
В каком фрагменте кода при использовании константного указателя допущена ошибка?
(1) int lec = 7, qst = 11; int *const plec = &lec; int *pqst; pqst = &qst; plec++;
(2) int lec = 7, qst = 11; int *const plec = &lec; int *pqst; pqst = &qst; (*plec)++; printf("Number of the next lection is %d\n", lec );
(3) int lec = 7, qst = 11; int *const plec; int *pqst; pqst = &qst; plec = &lec;
Задан фрагмент кода: int m[][5] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}}; int *ptr; int i, j, n, k, el; n = sizeof(m)/sizeof(m[0]); k = sizeof(m[0])/sizeof(m[0][0]); ptr = &m[1][1]; На какой элемент массива m будет указывать указатель ptr+3?
(1) m[2][1]
(2) m[1][4]
(3) m[2][1]
(4) m[2][4]
В каком случае будет выделена память под двухмерный массив размером 10х4?
(1) int *arr = (int *)malloc((4*10)*sizeof(int));
(2) int i; int **m; m = (int **)calloc(10,sizeof(int *)); for (i=0; i<10; i++) m[i] = (int *)calloc(4,sizeof(int));
(3) int (*p)[10]; p = malloc(40*sizeof(int));
В какой программе не используются функции (как стандартные, так и пользовательские) с переменным числом аргументов?
(1) #include <stdio.h> #include <stdarg.h> int average(int first, ... ); int main( void ) { int x = average(2, 3, 4, -1); return 0; } int average( int first, ... ) { int count = 0, sum = 0, i = first; va_list marker; va_start(marker, first); while( i != -1 ) { sum += i; count++; i = va_arg(marker, int); } va_end(marker); return( sum ? (sum / count) : 0 ); }
(2) #include <stdio.h> #include <conio.h> int main(void) { void printMessage (void); printMessage(); printf("\nPress any key: "); _getch(); return 0; } void printMessage (void) { printf("Function for Lection 10\n"); return; printf("123\n"); }
(3) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(&a[0][0], n, m); printf("Результат вычисления\n"); printf("Сумма элементов а[%d][%d] = %d\n", n, m, s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }
Функция xgets() в упрощенном виде демонстрирует работу стандартной функции gets(): char *xgets(char *s) { char ch, *p; int t; p = s; for(t=0; t<80; ++t){ ch = getchar(); switch(ch) { case '\n': s[t] = '\0'; return p; case '\b': if(t>0) t--; break; default: s[t] = ch; } } s[79] = '\0'; return p; } Какие вызовы функции являются неверными?
(1) char str[10]=""; str = xgets(str); printf("str = %s", str);
(2) char str[10]=""; xgets(str); printf("str = %s", str);
(3) char str[10]=""; char *p; p = xgets(str); printf("str = %s", str);
В результате выполнения какой программы на экран ничего не будет выведено?
(1) int main( void ) { FILE *stream; char str[31] = ""; if( fopen_s( &stream, "g:\\list.txt", "r" ) != 0 ) printf( "The file list.txt was not opened\n"); else { while (feof(stream)) { fgets(str, 31, stream); printf("%s", str); } printf("\n"); } return 0; }
(2) int main( void ) { FILE *stream; char str[31] = ""; if( fopen_s( &stream, "g:\\list.txt", "r" ) != 0 ) printf( "The file list.txt was not opened\n"); else { do { fgets(str, 31, stream); printf("%s", str); } while (!feof(stream)); printf("\n"); } return 0; }
(3) int main( void ) { FILE *stream; char str[31] = ""; if( fopen_s( &stream, "g:\\list.txt", "r" ) != 0 ) printf( "The file list.txt was not opened\n"); else { for( ; !feof(stream); ) { fgets(str, 31, stream); printf("%s", str); } printf("\n"); } return 0; }
Какая ошибка содержится в приведенной программе? int main (void) { typedef struct { char nazn[40]; int numb; char time[10]; } train; train tr[3]; int i = 0, sum = 0, ch=0; char str[10], search[10]; while(ch!=121) { printf("\nEnter information about train (Q - quit): \n"); printf("Enter destination of the train: "); gets(tr[i].nazn); printf("Enter number of the train: "); gets(str); tr[i].numb = atoi(str); printf("Enter time of scheduled departure: "); gets(tr[i].time); ++i; printf("Quit? (y/n): "); ch = _getche(); }; printf("\n\nEnter train destination: "); gets(search); for (i=0; i<3; i++) { if (strcmp(tr[i].nazn,search)==0) { printf("\n\tTrain number: %d", tr[i].numb); printf("\n\tTime: %s", tr[i].time); } } if (i>=3) printf("There is no train to this destination"); return 0; }
(1) неверно используется ключевое слово typedef
(2) выполняется неверное обращение к полям структуры
(3) неверно объявлен массив tr
(4) программа не содержит ошибок
Какая ошибка допущена в приведенной программе? int main (void) { enum month {january = 1, february, march, april, may, june,july, august, september, october, november, december } aMonth; int days; printf("\n Enter the number of the month (1 - 12): "); scanf_s("%d", &aMonth); switch (aMonth) { case january: case march: case may: case july: case august: case october: case december: days = 31; break; case april: case june: case september: case november: days = 30; break; case february: days = 28; break; default: printf("\n\t Wrong number of the month\n"); days = 0; break; } if (days) printf("\n The number of days of the month: %d\n", days); if (aMonth == 2) printf("\n ... or 29 if it is a leap year\n"); return 0; }
(1) программа не содержит ошибок
(2) неверное определение оператора switch
(3) неверное обращение к полю перечисления при сравнении
Какое утверждение является верным?
(1) член структуры передается функции по значению
(2) член структуры передается функции по ссылке
(3) член структуры не может быть отдельно передан структуре
Чему будет равно значение переменной year в результате выполнения приведенного фрагмента кода? int year = 26; year = year << 9;
(1) 6656
(2) 13312
(3) 26624
Файл second.h, расположенный на диске D:, содержит следующие описания переменных и функций: extern int x, y; extern char ch; void func22(void) { y = 100; } void func23(void) { x = y/10; ch = 'R'; } В каком случае подключение файла second.h в другом файле выполняется верно?
(1) #include <stdio.h> #include <conio.h> #include "D:\second.h" int x = 99, y = 77; char ch; void func1(void); int main(void) { ch = 'Z'; func1(); printf("\n Press any key: "); _getch(); return 0; } void func1(void) { func22(); func23(); printf("\n\t x = %d; y = %d;\ ch = %c\n", x, y, ch); }
(2) #include <stdio.h> #include <conio.h> #include <D:\second.h> int x = 99, y = 77; char ch; void func1(void); int main(void) { ch = 'Z'; func1(); printf("\n Press any key: "); _getch(); return 0; } void func1(void) { func22(); func23(); printf("\n\t x = %d; y = %d;\ ch = %c\n", x, y, ch); }
(3) #include <stdio.h> #include <conio.h> #include D:\second.h int x = 99, y = 77; char ch; void func1(void); int main(void) { ch = 'Z'; func1(); printf("\n Press any key: "); _getch(); return 0; } void func1(void) { func22(); func23(); printf("\n\t x = %d; y = %d;\ ch = %c\n", x, y, ch); }
В арифметической прогрессии каждый следующий член равен предыдущему, увеличенному на разность прогрессии: a{i} = a{i-1} + d. Приведенная программа содержит рекурсивную функцию для вычисления заданного члена арифметической прогрессии: int Sum(int x, int step, int n) { if (n==1) return(x); else return(Sum(x, step, n-1)+step); } int main() { int x, s, n; int pr; printf("Введите первый член, число элементов и разность прогрессии:"); scanf("%d %d %d", &x, &n, &s); <Вызов функции sum()> printf("pr = %d", pr); return 0; } Пользователь вводит данные для вычисления через пробел в следующей последовательности: первый член арифметической прогрессии, разность прогрессии, количестов элементов. В какой последовательности эти параметры должны быть заданы при вызове рекурсивной функии sum()?
(1) pr = Sum(x, s, n);
(2) pr = Sum(s, x, n);
(3) pr = Sum(n, s, x);
В каком случае сочетания имен и фамилий, заданных в файле arr.h, не будут выведены на экран? Содержание файла arr.h: char *names[] = {"Иван", "Пётр", "Илья"}; char *surnames[] = {"Иванов", "Пётров", "Ильин"};
(1) #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <locale.h> #ifndef ARR #define ARR #include "arr.txt" #endif int main (void) { int i = 0 , j = 0, n; setlocale (LC_ALL, "rus"); printf("Введите количество человек (от 1 до 3): "); scanf("%d", &n); if (n<1 || n>3) { printf("Ошибка ввода данных. Нажмите любую клавишу: "); _getch(); exit(1); } #undef ARR #ifdef ARR for (i=0; i<n; i++) printf("%d. %s %s\n", i+1, names[i], surnames[i]); #endif return 0; }
(2) #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <locale.h> #ifndef ARR #define ARR #include <arr.txt> #endif int main (void) { int i = 0 , j = 0, n; setlocale (LC_ALL, "rus"); printf("Введите количество человек (от 1 до 3): "); scanf("%d", &n); if (n<1 || n>3) { printf("Ошибка ввода данных. Нажмите любую клавишу: "); _getch(); exit(1); } #ifdef ARR for (i=0; i<n; i++) printf("%d. %s %s\n", i+1, names[i], surnames[i]); #endif return 0; }
(3) #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <locale.h> #ifndef ARR #define ARR #include "arr.txt" #endif int main (void) { int i = 0 , j = 0, n; setlocale (LC_ALL, "rus"); printf("Введите количество человек (от 1 до 3): "); scanf("%d", &n); if (n<1 || n>3) { printf("Ошибка ввода данных. Нажмите любую клавишу: "); _getch(); exit(1); } #ifdef ARR for (i=0; i<n; i++) printf("%d. %s %s\n", i+1, names[i], surnames[i]); #endif return 0; }
Чему будет равен результат вычисления a + b, если переменные имеют заданные значения? int a = SCHAR_MIN; int b = SCHAR_MAX;
(1) -1
(2) 0
(3) 1
Какие утверждения являются неверными?
(1) если argc равно 1, то в командной строке после имени программы задан 1 аргумент
(2) в случае запуска программы echo Здравствуй, мир! количество аргументов argc равно 3
(3) аргумент argv представляет собой массив символьных строк, содержащих сами аргументы
Какие утверждения являются неверными?
(1) операторы циклов for, while и do while не являются взаимозаменяемыми
(2) проверка условия выполняется на каждой итерации цикла
(3) в случаях, когда число итераций заранее не известно, удобнее использовать оператор while
В каком случае на экран будут выведены только нечетные числа от 1 до 10?
(1) int n = 1; while (n<=10) { if (n%2) printf("%d\n", n); n++; printf("%d\n", n); n++; }
(2) int n = 1; while (n<=10) { if (!(n%2)) printf("%d\n", n); n++; continue; printf("%d\n", n); n++; }
(3) int n = 1; while (n<=10) { if (n%2) printf("%d\n", n); n++; continue; printf("%d\n", n); n++; }
Какой смысл приобретает переменная size1 после выполнения приведенного фрагмента кода? int size1, size2, size3; int arr[5][2] = {0,1,2,3,4,5,6,7,8,9}; size1 = sizeof(arr)/sizeof(arr[0][0]); size2 = sizeof(arr)/sizeof(arr[0]); size3 = sizeof(arr);
(1) определяет общее количество элементов в двумерном массиве
(2) определяет количечество подмассивов в двумерном массиве
(3) определяет общий размер массива в байтах
Что делает приведенная программа? #include <stdio.h> #include <conio.h> int main() { int n=0, i=0, j=0; char ch, str[30]=""; printf("Введите строку: "); scanf("%s", str); printf("Введите символ: "); ch = _getche(); for(i=0; i<strlen(str); i++) { for (j=0; j<strlen(str); j++) { if(str[j]==str[i]) n++; } printf("\n%c - %d", str[i], n); n = 0; } printf("\n"); return 0; }
(1) определяет количество символов в строке
(2) определяет количество вхождений заданного символа в строку
(3) определяет количество вхождений каждого символа в строку
Какое выражение нужно вставить в обозначенное место приведенного кода для того, чтобы значение переменной z было равно 10? int x = 10, y = 20, z; int *p1, *p2; p1 = &x; p2 = p1; <Выражение> z = (x==y) ? (x+y) : (y-x);
(1) x = y;
(2) p1 = &y;
(3) *p2 = y;
Какие утверждения являются неверными?
(1) многоуровневая адресация упрощает программу
(2) при использовании многоуровневой адресации уменьшается вероятность возникновения ошибок
(3) многоуровневая адресация делает программу плохо читаемой
Какие утверждения являются верными?
(1) динамические переменные существуют от точки создания до явного освобождения памяти
(2) динамические переменные существуют от точки создания до конца работы операционной системы
(3) динамические переменные существуют от точки создания до конца программы
Какие переменные являются формальными параметрами функции sum()? int sum(int a, int b) { return a+b; } int main(void) { int n=4, m=3, s; s = sum(n,m); printf("%d + %d = %d\n", n, m, s); return 0; }
(1) a
(2) b
(3) n
(4) m
В результате выполнения какой программы изначальные значения переменных a и b изменятся?
(1) void swap(int*, int*); int main (void) { int a = 10, b = 20; swap(a, b); return 0; } void swap(int pa, int pb) { int temp; temp = pa; pa = pb; pb = temp; }
(2) void swap(int*, int*); int main (void) { int a = 10, b = 20; swap(&a, &b); return 0; } void swap(int *pa, int *pb) { int temp; temp = *pa; *pa = *pb; *pb = temp; }
(3) void swap(int*, int*); int main (void) { int a = 10, b = 20; int *x, *y; x = &a; y = &b; swap(x, y); return 0; } void swap(int *pa, int *pb) { int temp; temp = *pa; *pa = *pb; *pb = temp; }
Что такое двоичный поток?
(1) последовательность символов
(2) последовательность байтов, которая взаимно однозначно соответствует байтам на внешнем устройстве
(3) именованный объект, хранящий данные на каком-либо носителе
Описан шаблон структуры: struct addr { char name[30]; char street[40]; char city[20]; char state[3]; unsigned long int zip; }; Какие утверждения в данном случае являются верными?
(1) объявлена переменная addr
(2) объявлен тип addr
(3) после объявления структуры не должно быть ;
Значения каких типов может содержать приведенное объединение? union hold { int digit; double bigf; char letter; };
(1) одновременно значения всех типов: int, double, char
(2) одно из значений типа int, или double, или char
(3) любых типов, кроме перечисленных: int, double, char
Задана структура: struct fred { char x; int y; float z; char str[10]; } mike; Каким образом члены структуры могут быть переданы в функцию?
(1) func(x);
(2) func(mike.y);
(3) func(mike.str);
(4) func(mike.str[2]);
Каким образом нумерются разряды байта?
(1) files
(2) files
(3) files
(4) files
Какие функции могут использоваться функциями из других файлов? int func1(int a); static void func2(void); extern void func3(void);
(1) func1
(2) func2
(3) func3
Какие утверждения являются неверными?
(1) при прямой рекурсии функция вызывает сама себя
(2) при прямой рекурсии две и более функций вызывают друг друга
(3) при косвенной рекурсии функция вызывает сама себя
(4) при косвенной рекурсии две и более функций вызывают друг друга
Какие действия выполняет препроцессор языка С?
(1) макроподстановку
(2) включение именованных файлов
(3) условную компиляцию
По какой причине использование языка С предъявляет высокие требования к квалификации использующего его программиста?
(1) программы на языке С менее наглядны по сравнению с программами на других языках, их сложнее сопровождать
(2) язык С используется для создания исключительно сложных систем
(3) в языке С отсутствует контроль за действиями программиста
Какое формальное определение прототипа функции main() с параметрами является верным?
(1) int main (int argc, char *argv[]);
(2) int main (int argc, char *argv);
(3) int main (int argc, char argv);
Какой цикл является циклом с предусловием?
(1) while
(2) do while
(3) for
Структурная схема какого оператора представлена ниже?files
(1) оператора switch
(2) цикла do while
(3) оператора if
(4) конструкции if - else
Какие утверждения являются верными?
(1) скорость доступа к элементам массива не зависит от его размерности
(2) ячейка памяти с наименьшим адресом относится к первому элементу одномерного массива, а с наибольшим – к последнему
(3) элементы массива нумеруются с нуля
(4) в случае, когда размерность массива меньше, чем требуется, возникает ошибка компиляции
Какие утверждения являются верными?
(1) скорость доступа к элементам символьного массива не зависит от его размерности
(2) ячейка памяти с наименьшим адресом относится к первому элементу одномерного массива, а с наибольшим – к последнему
(3) элементы символьного массива нумеруются с нуля
(4) в случае, когда размерность массива меньше, чем требуется, возникает ошибка компиляции
Что такое указатель?
(1) переменная, инициализированная каким-либо значением
(2) переменная, содержащая адрес другой переменной
(3) самостоятельный тип данных в языке С
При использовании какого метода обращения к элементам массива производительность будет выше?
(1) при использовании стандартной записи массивов с индексами
(2) при использовании указателей для массивов
(3) скорость доступа к элементам массива не зависит от метода доступа и определяется только размером массива
Какие утверждения являются верными для статически распределяемой памяти?
(1) память выделяется один раз до начала работы программы
(2) выделенная область памяти не может быть освобождена до завершения работы программы
(3) память предоставляется программе при ее работе
Какое утверждение является неверным?
(1) память, выделенная локальным переменным при входе в функцию, освобождается после возврата из нее
(2) значения фактических параметров не могут быть изменены из тела функции ни при каких условиях
(3) при передаче в функцию в качестве параметра массива возможно изменение значений элементов этого массива из тела функции
Чему будет равно значение переменной s в результате выполнения приведенной программы? #include <stdio.h> #define n 5 void fun(int *mas, int k); int sum(int *mas, int k); int main( void ) { int arr[n] = {3,4,1,2}; int i, s; fun(arr, n); s = sum(arr, n); return 0; } void fun(int *mas, int k) { int i, s = 0; for (i=0; i<k; i++) ++mas[i]; } int sum(int *mas, int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }
(1) 10
(2) 14
(3) 15
В каком случае файлы автоматически закрываются?
(1) в случае краха программы
(2) в случае нормального завершения работы программы
(3) в случае завершения программы путем вызова функции exit()
(4) в случае завершения программы путем вызова функции abort()
Какие поля имеет приведенная структура? struct addr { char name[30]; char street[40]; char city[20]; char state[3]; unsigned long int zip; } addr_info, binfo;
(1) addr
(2) name
(3) street
(4) city
(5) state
(6) zip
(7) addr_info
(8) binfo
В чем заключается назначение объединений (union)?
(1) в том, чтобы повысить удобочитаемость программы
(2) в том, чтобы экономнее использовать память
(3) в том, чтобы иметь возможность использовать совокупность элементов разных типов
В какой программе в качестве параметра используется структура?
(1) struct struct_type { int a, b; char ch; }; void fun(struct struct_type parm); int main (void) { struct struct_type arg; arg.a = 1000; fun(arg); return 0; } void fun(struct struct_type parm) { printf("\n %d\n", parm.a); }
(2) struct struct_type { int a, b; char ch; }; void fun(struct struct_type *parm); int main (void) { struct struct_type arg,*PTR; PTR = &arg; PTR->a = 999; fun(PTR); return 0; } void fun(struct struct_type *parm) { printf("\n %d\n", parm->a); }
(3) struct struct_type { int a, b; char ch; }; void fun(struct struct_type *parm); int main (void) { struct struct_type arg,*PTR; PTR = &arg; PTR->a = 999; fun(PTR); return 0; } void fun(struct struct_type &parm) { printf("\n %d\n", parm->a); }
Какие утверждения являются неверными?
(1) бит может принимать любые значения
(2) 1 бит содержит 8 байт
(3) бит может принимать только значения 0 и 1
(4) 1 байт содержит 8 бит
Каким образом выделяется память при статической продолжительности хранения?
(1) память выделяется в начале выполнения программы и остается занятой на протяжении всего выполнения
(2) память под переменную выделяется в момент, когда выполнение программы входит в блок, в котором эта переменная определена, и освобождается, когда выполнение программы покидает этот блок
(3) память выделяется по возможности в регистрах процессора
Какие утверждения являются верными?
(1) при использовании рекурсии увеличивается расход памяти на повторные вызовы функции и передачу ей копий параметров
(2) при использовании рекурсии полностью отсутствует вероятность переполнения стека
(3) при использовании рекурсии функция записывается более компактно
Каким образом несколько директив могут быть объявлены в одной строке?
(1) #define N 10, #define M 5
(2) #include <stdio.h> #include <conio.h>
(3) объявление нескольких директив в одной строке недопустимо
Какое утверждение является верным?
(1) язык С допускает прямую трансляцию в машинный код
(2) язык С обладает недостаточной структурированностью, поэтому является языком среднего уровня
(3) язык С менее совершенен по сравнению с традиционными языками высокого уровня
Программа запускается с одним аргументом, задающим имя и фамилию. В каком случае в файл будет выведено только имя?
(1) files
(2) files
(3) files
В каком случае при выполнении приведенного кода возникнет зацикливание?
(1) int x=0, y = 1; while (1) { y = y*2; printf("%d ", x); x++; }
(2) int x=1, y = 1; for (; x<5; x++) { y = y*2; printf("%d ", x); }
(3) int x=1, y = 1; for (; ; x++) { y = y*2; printf("%d ", x); if (x>=5) break; }
(4) int x, y = 1; for (x = 0; x < 5; x++) { x = y*2; printf("%d ", x); }
Какой оператор используется для продолжения итераций цикла при выполнении некоторых условий?
(1) continue
(2) break
(3) return
(4) goto
Каким образом выделяется память под двумерный массив int a[3][2]?
(1) files
(2) files
(3) files
В каком случае значение переменной z будет равно изначальному значению переменной x?
(1) int x = 99, y = 100, z; int *p1, *p2; p1 = &x; p2 = p1; z = *p2;
(2) int x = 99, y = 100, z; int *p1, *p2; p1 = &x; p2 = &y; x = y; z = *p1;
(3) int x = 99, y = 100, z; int *p1, *p2; p1 = &y; p2 = p1; y = x; z = *p2;
Необходимо написать программу, которая копирует одну строку в другую. Какие программы не выполняют поставленную задачу?
(1) #include <stdio.h> #include <conio.h> int main() { int i; char a[10] = "Test", b[10] = ""; char *pa = a; char *pb = b; for (i=0; i<strlen(a); i++) *pb++ = *pa++; printf("a = %s\n", a); printf("b = %s\n", b); return 0; }
(2) #include <stdio.h> #include <conio.h> int main() { int i; char a[10] = "Test", b[10] = ""; char *pa = &a[1]; char *pb = &b[1]; for (i=0; i<strlen(a); i++) pb[i] = pa[i]; printf("a = %s\n", a); printf("b = %s\n", b); return 0; }
(3) #include <stdio.h> #include <conio.h> int main() { int i; char a[10] = "Test", b[10] = ""; char *pa = a[0]; char *pb = b[0]; for (i=0; i<strlen(a); i++) pb[i] = pa[i]; printf("a = %s\n", a); printf("b = %s\n", b); return 0; }
(4) #include <stdio.h> #include <conio.h> int main() { int i; char a[10] = "Test", b[10] = ""; char *pa = &a[0]; char *pb = &b[0]; for (i=0; i&lt;strlen(a); i++) pb[i] = pa[i]; printf("a = %s\n", a); printf("b = %s\n", b); return 0; }
Какие утверждения о размере динамически распределяемой области памяти являются верными?
(1) размер памяти заранее известен
(2) размер памяти ограничен
(3) размер памяти достаточно большой
Какая ошибка допущена в приведенном фрагменте кода? double max(double a, b) { if (a>b) return a; return b; } int main(void) { double x=-5.00, y=5.12; printf("max = %.2f\n", max(x,y)); return 0; }
(1) в функции max два оператора возврата из функции (return)
(2) в объявлении функции max отсутсвтует спецификатор типа переменной b
(3) функция max вызывается из функции printf
Необходимо написать функцию, которая будет вычислять сумму всех элементов двухмерного массива. В какой программе вызов функции sum выполняется неверно?
(1) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(a, n, m); printf("Сумма элементов а: %d\n", s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }
(2) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(a[0][0], n, m); printf("Сумма элементов а: %d\n", s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }
(3) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(&a[0][0], n, m); printf("Сумма элементов а: %d\n", s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }
Файл g:\test.txt содержит две строки: files Чему будет равен символ str[11] в результате выполнения приведенного фрагмента кода? char str[30], i; FILE *fp; if((fp = fopen("g:\\test.txt", "r"))==NULL) { printf("Ошибка при открытии файла.\n"); exit(1); } fgets(str, 30, fp); i = strlen(str); fclose(fp);
(1) '\n'
(2) '\r'
(3) '\0'
Определите, содержит ли приведенное объявление структур ошибки? Если содержит, то укажите, какие именно? struct A {int a; double x; }; struct B {A a; B b; double x; };
(1) элемент структуры B не может иметь тип другой структуры A
(2) поля разных структур в одной программе не могут иметь одинаковые имена
(3) элементы b структуры B не может иметь тип этой же структуры
(4) объявления не содержат ошибок
Какие утверждения являются неверными?
(1) имена перечисляемых констант должны быть уникальными
(2) имена перечисляемых констант могут совпадать
(3) значения перечисляемых констант должны быть уникальными
(4) значения перечисляемых констант могут совпадать
Определите, содержит ли приведенная программа ошибки? Если содержит, укажите, какие именно? #define MAX 20 double sum(double, double); int main (void) { struct test { char A[MAX+1]; double ax; char B[MAX+1]; double by; }; struct test AB; printf("\nEnter 1st name: "); gets_s(AB.A, MAX); printf("\nEnter the first real number: "); scanf_s("%lf", &AB.ax); _flushall(); printf("\nEnter 2nd name: "); gets_s(AB.B, MAX); printf("\nEnter the second real number: "); scanf_s("%lf", &AB.by); printf("\n\nThe sum of two numbers %1.2f and %1.2f, %s and %s: %1.2f\n", AB.ax, AB.by, AB.A, AB.B, sum(ax, by)); return 0; } double sum(double x, double y) { return (x + y); }
(1) программа содержит ошибку, так как структура test должна быть объявлена глобально
(2) программа содержит ошибку, так как неверно передаются поля структуры test при использовании их в качестве аргументов функции sum
(3) программа не содержит ошибок
Какие значения может принимать байт?
(1) 0 и 1
(2) от 0 до 255
(3) любые целочисленные значения
В каком случае переменная может быть использована в других файлах?
(1) при внутреннем связывании
(2) при внешнем связывании
(3) при любом типе связывания
(4) ни при каком типе связывания
Задана функция вычисления факториала: long fact(long n) { if (n==0 || n==1) return 1; return (n * fact(n-1)); } Какое утверждение является верным?
(1) в функции используется прямая рекурсия
(2) в функции используется косвенная рекурсия
(3) в функции не используется рекурсия
Какое влияние на скорость выполнения кода оказывает использование макросов с формальными параметрами?
(1) увеличивает скорость выполнения кода
(2) уменьшает скорость выполнения кода
(3) зависит от конкретного макроса
(4) никак не влияет
Для чего предназначена папка Resource Files в проекте, созданном в среде Microsoft Visual Studio 2010? files
(1) для хранения файлов с исходным кодом
(2) для хранения заголовочных файлов
(3) для хранения изображений иконок приложения
(4) для хранения файлов, которые не добавлены в проект явно, но используются в исходном коде
С каким количеством аргументов командной строки запускается программа (считается, что аргумент в заданном виде обрабатывается корректно?files
(1) 1
(2) 2
(3) 3
В результате выполнения какого фрагмента кода значение переменной y будет равно 11?
(1) int x = 5, y = 10; while (y<=x) { printf("%d ", y); y = x*2+1; }
(2) int x = 5, y = 10; while (y<=x) y = x+1; y = x*2+1;
(3) int x = 5, y = 1; do { y = x+1; x++; } while (y<=10);
При каких значениях переменной A значение переменной cond будет равно 0? int cond,; cond = (A==5) || ((A>10) && (A<1));
(1) при A = 0
(2) при A = 1
(3) при A = 5
(4) при A = 7
(5) при A = 10
(6) при A = 11
По какой формуле вычисляется общий размер многомерного массива в байтах?
(1) всего байт = размер типа в байтах * количество элементов
(2) всего байт = число строк * число столбцов * размер типа в байтах
(3) всего байт = размер1* размер2*...* размерN *размер типа в байтах
Чему будет равно значение переменной n после выполнения приведенного фрагмента кода? int n=0, num=10; char str1[10]="", str2[10]="Lection"; _itoa(num, str1, 10); strcat(str2, str1); n = strlen(str2);
(1) 7
(2) 8
(3) 9
Чему будут равны значения переменных a, b и c после выполнения приведенного фрагмента кода? char a='A', b='B', c='C'; char *pc1, *pc2; pc1 = &c; pc2 = pc1; c = b; *pc2 = a;
(1) a = 'A', b = 'B', c = 'C'
(2) a = 'A', b = 'B', c = 'B'
(3) a = 'A', b = 'B', c = 'A'
Какая программа реализует сортировку массива целых чисел по возрастанию методом прямого выбора?
(1) #include <stdio.h> int main() { int i, j, N, buf; int arr[] = {3, 2, 4, 5, 1}; int *ptr1, *ptr2; N = sizeof(arr)/sizeof(arr[0]); ptr1 = arr; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { ptr1 = &arr[j]; if (*ptr1 < *(ptr1+1)) { buf = *ptr1; *ptr1 = *(ptr1+1); *(ptr1+1) = buf; } }; return 0; }
(2) #include <stdio.h> int main() { int i, j, N, buf, min; int arr[] = {3, 2, 4, 5, 1}; int *ptr; N = sizeof(arr)/sizeof(arr[0]); ptr = arr; for (i=0; i<N-1; i++) { min = i; for (j=i+1; j<N; j++) { if (*(ptr+j)<*(ptr+min)) min = j; buf = *(ptr+i); *(ptr+i) = *(ptr+min); *(ptr+min) = buf; } } return 0; }
(3) #include <stdio.h> int main() { int i, j, N, buf; int arr[] = {3, 2, 4, 5, 1}; int *ptr1, *ptr2; N = sizeof(arr)/sizeof(arr[0]); ptr1 = arr; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { ptr1 = &arr[j]; if (*ptr1 > *(ptr1+1)) { buf = *ptr1; *ptr1 = *(ptr1+1); *(ptr1+1) = buf; } }; return 0; }
В каком случае память выделяется статически? int arr1[10] = {1,2,3,4,5}; (1) int *arr2 = (int *)calloc(10, sizeof(int)); (2) int *arr3 = (int *)malloc(10*sizeof(int)); (3) int arr4[][3] = {{1,2,3}, {4,5,6}}; (4)
(1) в случае (1)
(2) в случае (2)
(3) в случае (3)
(4) в случае (4)
Функция is_in определяет, входит ли символ c в строку s: int is_in(char *s, char c) (1) { while(*s) (2) if(*s==c) return 1; (3) else s++; (4) return 0; (5) } Чему будет равно значение переменной i в результате вызова int i = is_in("Lection 10", 'a')?
(1) 0
(2) 1
(3) при выполнении функции возникнет ошибка, так как функция содержит два оператора return
Задана функция xgets(): char *xgets(char *s) { char ch, *p; int t; p = s; for(t=0; t<80; ++t){ ch = getchar(); switch(ch) { case '\n': s[t] = '\0'; return p; case '\b': if(t>0) t--; break; default: s[t] = ch; } } s[79] = '\0'; return p; } Какие утвержедения являются верными?
(1) в функцию передается символьный массив
(2) функция возвращает указатель
(3) объявление функции содержит ошибку
В результате выполнения какой программы будет получен приведенный файл?files
(1) #include <stdio.h> int main( void ) { FILE *stream; char list[30]; int i, numread, numwritten; if( (stream = fopen("g:\\fread.out", "w+t")) != NULL ) { for ( i = 0; i < 26; i++ ) list[i] = (char)('a' + i); numwritten = fwrite( list, sizeof( char ), 26, stream ); printf( "Wrote %d items\n", numwritten ); fclose( stream ); } else printf( "Problem opening the file\n" ); if( (stream = fopen("g:\\fread.out", "r+t" )) != NULL ) { numread = fread( list, sizeof( char ), 26, stream ); printf( "Number of items read = %d\n", numread ); printf( "Contents of buffer = %.26s\n", list ); fclose( stream ); } else printf( "File could not be opened\n" ); }
(2) #include <stdio.h> int main( void ) { FILE *stream; char list[30]; int i, numread, numwritten; if( (stream = fopen("g:\\fread.out", "w+t")) != NULL ) { for ( i = 0; i < 26; i++ ) list[i] = (char)('z' - i); numwritten = fwrite( list, sizeof( char ), 26, stream ); printf( "Wrote %d items\n", numwritten ); fclose( stream ); } else printf( "Problem opening the file\n" ); if( (stream = fopen("g:\\fread.out", "r+t" )) != NULL ) { numread = fread( list, sizeof( char ), 26, stream ); printf( "Number of items read = %d\n", numread ); printf( "Contents of buffer = %.26s\n", list ); fclose( stream ); } else printf( "File could not be opened\n" ); }
(3) #include <stdio.h> int main( void ) { FILE *stream; char list[30]; int i, numread, numwritten; if( (stream = fopen("g:\\fread.txt", "w+t")) != NULL ) { for ( i = 0; i < 26; i++ ) list[i] = (char)('z' - i); numwritten = fwrite( list, sizeof( char ), 26, stream ); printf( "Wrote %d items\n", numwritten ); fclose( stream ); } else printf( "Problem opening the file\n" ); if( (stream = fopen("g:\\fread.txt", "r+t" )) != NULL ) { numread = fread( list, sizeof( char ), 26, stream ); printf( "Number of items read = %d\n", numread ); printf( "Contents of buffer = %.26s\n", list ); fclose( stream ); } else printf( "File could not be opened\n" ); }
(4) #include <stdio.h> int main( void ) { FILE *stream; char list[30]; int i, numread, numwritten; if( (stream = fopen("g:\\fread.txt", "w+t")) != NULL ) { for ( i = 0; i < 26; i++ ) list[i] = (char)('a' + i); numwritten = fwrite( list, sizeof( char ), 26, stream ); printf( "Wrote %d items\n", numwritten ); fclose( stream ); } else printf( "Problem opening the file\n" ); if( (stream = fopen("g:\\fread.txt", "r+t" )) != NULL ) { numread = fread( list, sizeof( char ), 26, stream ); printf( "Number of items read = %d\n", numread ); printf( "Contents of buffer = %.26s\n", list ); fclose( stream ); } else printf( "File could not be opened\n" ); }
Объявлена структура: struct Account { int account; char name[30]; int balance; }; Каким образом данная структура хранится в памяти?
(1) files
(2) files
(3) files
Сколько памяти будет выделено для хранения приведенного объединения? union payment { char card[10]; int sum; double date; };
(1) 1 байт
(2) 4 байта
(3) 8 байт
(4) 10 байт
Функция f1() выводит на экран переданное ей значение. Каким образом должна быть описана данная функция для корректного выполнения приведенной программы? typedef struct { int a, b; char ch; } struct_type; int main(void) { struct_type arg; arg.a = 1000; f1(&arg); return 0; }
(1) void f1(struct_type parm) { printf("%d", parm.a); }
(2) void f1(struct struct_type *parm) { printf("%d", parm->a); }
(3) void f1(struct_type *parm) { printf("%d", parm->a); }
(4) void f1(struct struct_type &parm) { printf("%d", parm->a); }
Чему будет равно шестнадцатиричное число D6F в десятичной системе счисления?
(1) 3424
(2) 3439
(3) 54799
Какие из перечисленных переменных видны в функции sum()? int c = 9; int sum(int a, int b) { return a+b; } int t = 8; int main(void) { int n=4, m=3, s1, s2; s1 = sum(n,m); s2 = mul(n,m); return 0; } int k = 6; int mul(int a, int b) { return a*b; }
(1) c
(2) t
(3) k
Задана функция вычисления факториала: long fact(long n) { return (n>1) ? n * fact(n-1) : 1; } Какое утверждение является неверным?
(1) рекурсия завершится при любом значении n больше 1
(2) рекурсия завершится при любом значении n, равном 1
(3) рекурсия завершится при любом значении n, равном 0
Чему будет равно значение переменной z в результате выполнения приведенной программы? #include <stdio.h> #define DIV(x, y) (x/y) int main() { float x=2.0, y=2.0; float z; z = DIV(x+1, y+1); printf("x = %.1f", x); return 0; }
(1) 1.0
(2) 2.0
(3) 3.5
Какую информацию содержит файл Example.suo проекта, созданного в Microsoft Visual Studio 2010?files
(1) информацию о том, какие проекты входят в данное решение
(2) информацию об открытых окнах, их расположении и прочих пользовательских параметрах
(3) вспомогательную информацию о проекте, которая используется инструментами анализа кода Visual Studio
Приведенная программа выводит в файл значения аргументов командной строки: int main(int argc, char* argv[]) { char name[30]; FILE *f; f = fopen("g:\\test.txt", "w+"); fprintf(f, "%s\n%s", argv[0], argv[1]); return 0; } Запуск программы выполняется из командной строки с помощью команды Example.exe arg1 arg2. На какую строку указывает argv[2]?
(1) arg1
(2) arg2
(3) Example.exe
(4) NULL, так как элементы массива нумеруются с 0, то argv[2] должен указывать на 3-ий элемент, но этот элемент не задан
Ниже приведены несколько вариантов программы для нахождения всех делителей целого положительного числа (условный оператор if (!(num % div)) определяет, делится ли число num на div без остатка). Пользователь ввел значение переменной num = 3. В каком случае цикл не выполнится ни одного раза?
(1) int num, half, div; printf("Введите число: "); scanf_s("%d", &num); half = num / 2; div = 2; while (div <= half) { if (!(num % div)) printf("%d ", div); div++; }
(2) int num, half, div; printf("Введите число: "); scanf_s("%d", &num); half = num / 2; div = 2; do { if (!(num % div)) printf("%d ", div); div++; } while (div <= half);
(3) int num, half, div; printf("Введите число: "); scanf_s("%d", &num); half = num / 2; for (div = 2; div <= half; div++) { if (!(num % div)) printf("%d ", div); }
В результате выполнения какого фрагмента кода значение переменной t будет равно 10?
(1) int t; for(t=0; t<100; t++) { printf("%d \n", t); if(t==10) t=100; }
(2) int t; for(t=0; t<100; t++) { printf("%d \n", t); if(t==10) break; }
(3) int t; for(t=0; t<100; t++) { if(t==10) printf("%d \n", t); }
Почему при инициализации массива int arr2[][2] = {{1,2,3}, {4,5,6}}; возникнет ошибка компиляции?
(1) потому что компилятор не смжет определить длину подмассивов, так как не указана размерность самого левого измерения
(2) потому что указаны лишние фигурные скобки
(3) потому что подмассивы имеют неверную размерность
Заданы две строки: char str1[10] = "Lection"; char str2[10] = "lection"; Какое утверждение является верным и почему?
(1) strcmp(str1, str2) < 0, так как код символа L меньше кода символа l
(2) strcmp(str1, str2) = 0, так как длины строк одинаковы
(3) strcmp(str1, str2) > 0, так как код символа L больше кода символа l
Какая программа определяет количество вхождений каждого символа в строку?
(1) #include <stdio.h> #include <conio.h> int main() { int n=0, i=0, j=0; char ch, str[30]=""; char *ptr1, *ptr2; printf("Введите строку: "); scanf("%s", str); printf("Введите символ: "); ch = _getche(); ptr1 = str; while(*ptr1!='\0') { ptr2 = str; while (*ptr2!='\0') { if(*ptr1==*ptr2) n++; } printf("\n%c - %d", *ptr1, n); n = 0; } printf("\n"); return 0; }
(2) #include <stdio.h> #include <conio.h> int main() { int n=0, i=0, j=0; char ch, str[30]=""; char *ptr1, *ptr2; printf("Введите строку: "); scanf("%s", str); printf("Введите символ: "); ch = _getche(); ptr1 = str; ptr2 = str; while(*ptr1!='\0') { while (*ptr2!='\0') { if(*ptr1==*ptr2) n++; ++ptr2; } printf("\n%c - %d", *ptr1, n); n = 0; ++ptr1; } printf("\n"); return 0; }
(3) #include <stdio.h> #include <conio.h> int main() { int n=0, i=0, j=0; char ch, str[30]=""; char *ptr1, *ptr2; printf("Введите строку: "); scanf("%s", str); printf("Введите символ: "); ch = _getche(); ptr1 = str; while(*ptr1!='\0') { ptr2 = str; while (*ptr2!='\0') { if(*ptr1==*ptr2) n++; ++ptr2; } printf("\n%c - %d", *ptr1, n); n = 0; ++ptr1; } printf("\n"); return 0; }
Чему будет равно значение переменной str2 после выполнения приведенной программы? #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1; ptr2 = str2; while (ptr1>=str1) { if (ptr1<str1) *ptr2 = '\0'; *ptr2 = *ptr1; ptr1--; ptr2++; } printf("str2 = %s\n", str2); return 0; }
(1) в переменную str2 будет скопирована введенная пользователем строка str1
(2) в переменную str2 будет в обратном порядке скопирована введенная пользователем строка str1
(3) в переменную str2 будет скопирован первый символ строки str1
Какой объем памяти будет выделен для хранения массива int arr[12] = {1,2,3,4,5};?
(1) 5 байт
(2) 20 байт
(3) 40 байт
(4) 48 байт
В каких программах не используются прототипы функций?
(1) int min(int a, b) { int m = (a<b) ? a : b; return m; } int main(void) { int x=-5, y=5, m; m = min(x,y); printf("min = %d\n", m); return 0; }
(2) #include <stdio.h> #include <conio.h> int main(void) { void printMessage (void); printMessage(); printf("\nPress any key: "); _getch(); return 0; } void printMessage (void) { printf("Function for Lection 10\n"); return; printf("123\n"); }
(3) #include <stdio.h> #include <string.h> int search(char *p[], char *name); char *names[] = { "Сергей", "Юрий", "Ольга", "Игорь", NULL}; int main(void) { if(search(names, "Ольга") != -1) printf("Ольга есть в списке.\n"); if(search(names, "Павел") == -1) printf("Павел в списке не найден.\n"); return 0; } int search(char *p[], char *name) { int t; for(t=0; p[t]; ++t) if(!strcmp(p[t], name)) return t; return -1; }
В результате выполнения какой программы изначальное значение переменной s будет изменено?
(1) void print_upper(char *string); int main(void) { char s[80] = "Question for the lection"; print_upper(s); printf("\s = %s\n", s); return 0; } void print_upper(char *string) { int t; for(t=0; string[t]; ++t) putchar(string[t]); putchar('\n'); }
(2) void print_upper(char *string); int main(void) { char s[80] = "Question for the lection"; print_upper(s); printf("\s = %s\n", s); return 0; } void print_upper(char *string) { int t; char str[80] = ""; strcpy(str, string); for(t=0; string[t]; ++t) str[t] = toupper(str[t]); }
(3) void print_upper(char *string); int main(void) { char s[80] = "Question for the lection"; print_upper(s); return 0; } void print_upper(char *string) { int t; for(t=0; string[t]; ++t) string[t] = toupper(string[t]); }
Приведенная программа выводит заданную строку в файл: int main( void ) { int i, j, k, buf; FILE *stream; char str[11] = "Lection 11"; if( (stream = fopen("g:\\fread.txt", "w+t")) == NULL ) printf( "Problem opening the file\n" ); else { k = fwrite(str,sizeof(char), sizeof(str)/sizeof(char), stream); printf("k = %d\n", k); fclose(stream); } return 0; } Какие утверждения являются верными?
(1) строка выводится в файл поэлементно
(2) в вызове функции fwrite содержится ошибка
(3) в программе выполняется пакетный вывод символьного массива в файл
Какая программа не содержит ошибок?
(1) struct { char title[51]; char author[51]; int year; int page; float price; } *lb; int main (void) { strcpy_s(lb->title, 50, "Экстремальное вождение. Гоночные секреты"); strcpy_s(lb->author, 50, "М.Г. Горбачев"); lb->year = 2007; lb->page = 303; lb->price = 200.00F; printf("\nTitle:\t\t\t %s\n", lb->title); printf("Author:\t\t\t %s\n", lb->author); printf("Year:\t\t\t %d\n", lb->year ); printf("Number of pages:\t %d p.\n", lb->page ); printf("Price:\t\t\t %1.2f y.e.\n", lb->price); return 0; }
(2) struct Book { char title[51]; char author[51]; int year; int page; float price; }; int main (void) { Book *lb; strcpy_s(lb.title, 50, "Экстремальное вождение. Гоночные секреты"); strcpy_s(lb.author, 50, "М.Г. Горбачев"); lb.year = 2007; lb.page = 303; lb.price = 200.00F; printf("\nTitle:\t\t\t %s\n", lb.title); printf("Author:\t\t\t %s\n", lb.author); printf("Year:\t\t\t %d\n", lb.year ); printf("Number of pages:\t %d p.\n", lb.page ); printf("Price:\t\t\t %1.2f y.e.\n", lb.price); return 0; }
(3) int main (void) { struct Book { char title[51]; char author[51]; int year; int page; float price; } lb[2]; int i; strcpy_s(lb[0].title, 50, "Экстремальное вождение. Гоночные секреты"); strcpy_s(lb[0].author, 50, "М.Г. Горбачев"); lb[0].year = 2007; lb[0].page = 303; lb[0].price = 200.00F; strcpy_s(lb[1].title, 50, "Маракотова бездна"); strcpy_s(lb[1].author, 50, "А.К. Дойл"); lb[1].year = 1993; lb[1].page = 285; lb[1].price = 150.40F; for (i=0; i<2; i++) { printf("\nTitle:\t\t\t %s\n", lb[i].title); printf("Author:\t\t\t %s\n", lb[i].author); printf("Year:\t\t\t %d\n", lb[i].year ); printf("Number of pages:\t %d p.\n", lb[i].page ); printf("Price:\t\t\t %1.2f y.e.\n\n", lb[i].price); } return 0; }
Чему будет равно значение переменной str после выполнения приведенной программы? union test { char ch1[5]; char ch2[2]; char ch3[1]; }; int main(void) { union test t; char *str; t.ch3[0] = 'w'; strcpy(t.ch2, "be"); strcpy(t.ch1, "test"); t.ch1[2] = '\0'; str = t.ch2; return 0; }
(1) test
(2) best
(3) west
(4) be
(5) te
(6) w
Содержит ли приведенная программа ошибки? Если содержит, укажите, какие? struct struct_type { int a, b; char ch; } ; struct struct_type2 { int a, b; char ch; } ; void f1(struct struct_type2 parm); int main(void) { struct struct_type arg; arg.a = 1000; f1(arg); return 0; } void f1(struct struct_type2 parm) { printf("%d", parm.a); }
(1) программа содержит ошибку, так как неверно задан тип переменной arg
(2) программа содержит ошибку, так как при вызове функции f1 возникает несоответствие типов
(3) программа не содержит ошибок
Каковы недостатки использования битовых полей?
(1) экономия памяти под переменные
(2) уменьшение объема кода программы
(3) увеличение эффективности выполнения операций
Как можно решить проблему невидимости переменных a и b в функции main() для приведенного фрагмента кода? int main (void) { printf("a = %d; b = %d\n", a, b); printf("Press any key: "); _getch(); return 0; } int a = 33, b = 34;
(1) добавить в функцию main() объявление переменных a и b со спецификатором extern
(2) объявить и инициализировать переменные a и b перед функцией main()
(3) переменные a и b должны быть объявлены локально, так как в функции main() допускается использовать только локальные переменные
Что такое базовый уровень рекурсии?
(1) условие, которое будет удовлетворено и при котором функция выполняет свою задачу без рекурсивных вызовов
(2) число рекурсивных вызовов в каждый конкретный момент времени
(3) максимальное число рекурсивных вызовов без возвратов, которое происходит во время выполнения программы
Каким образом должен быть задан макрос MAX, чтобы приведенная программа корректно работала? int main() { char a, b; printf("Введите два символа (через пробел): "); scanf("%c %c", &a, &b); printf("Наибольшим числом является %c", MAX(a, b)); return 0; }
(1) #define MAX(x, y) ((x)>(y) ? (x) : (y))
(2) #define MAX(x, y) { ((x)>(y) ? (x) : (y)) }
(3) #define MAX(char x, char y) ((x)>(y) ? (x) : (y))
Заданы переменные: char ch = 'a'; int a; float b; double c = 4.5; Какой тип получит арифметическое выражение ch + a + b + c?
(1) char
(2) double
(3) int
(4) приведенное выражение нельзя вычислить, так как в операции сложения нельзя задавать символьные переменные
Приведенная программа формирует сообщение об ошибке из отдельных строк в зависимости от значения аргумента командной строки, который задает степень критичности ошибки: #include <stdio.h> #include <conio.h> #include <stdarg.h> #include <stdlib.h> #include <locale.h> void error(int severity, ... ); int main(int argc, char* argv[]) { char err[][30] = {"Сообщение1", "Сообщение2"}; int n; setlocale (LC_ALL, "rus"); n = atoi(argv[1]); switch (n) { case 0: error(0, "Ошибка!", '\0'); break; case 1: error(0, "Ошибка!", err[0], '\0'); break; default: error(1, "Ошибка!", err[0], err[1], '\0'); } return 0; } void error(int severity, ... ) { va_list ap; va_start(ap, severity); for (;;) { char *p = va_arg(ap, char*); if (p == '\0') break; printf("%s ", p); } va_end(ap); printf("\n"); } Программа запускается из командной строки командой Example.exe 0. Какое сообщение будет выведено на экран?
(1) Ошибка!
(2) Ошибка! Сообщение1
(3) Ошибка! Сообщение1 Сообщение2
Необходимо написать программу для проверки пароля, вводимого пользователем. Программа должна предоставлять пользователю только три попытки ввода пароля. Верный пароль - число 95. Какой фрагмент кода реализует поставленную задачу?
(1) int i, psw = 0; printf("Введите пароль: "); scanf("%d", &psw); for (i=0; i<3 && psw!=95; i++) scanf("%d", &psw);
(2) int i = 1, psw = 0; printf("Введите пароль: "); while (i<3 && psw!=95) { scanf("%d", &psw); i++; }
(3) int i = 0, psw = 0; printf("Введите пароль: "); do { scanf("%d", &psw); i++; } while (i<3 && psw!=95);
Что делает приведенный фрагмент кода? int x = 0; loop1: x++; if (x<=5) { printf("%d \n", x); goto loop1; }
(1) выводит на экран только первое значение x, удовлетворяющее заданному условию
(2) выводит на экран числа от 1 до 5
(3) приведенный фрагмент кода содержит ошибку (метка loop1 объявлена раньше опеаратора goto)
Какая программа вычисляет сумму только четных элементов массива?
(1) #include <stdio.h> #define N 10 int main() { int i, sum; int arr[N] = {3, 4, 5, 4, 4}; for (i = 0, sum = 0; i<N; i++) sum += arr[i]; printf("Сумма элементов: %d\n", sum); return 0; }
(2) #include <stdio.h> #define N 10 int main() { int i, sum; int arr[N] = {3, 4, 5, 4, 4}; for (i = 0, sum = 0; i<N; i++) if (arr[i]%2) sum += arr[i]; printf("Сумма элементов: %d\n", sum); return 0; }
(3) #include <stdio.h> #define N 10 int main() { int i, sum; int arr[N] = {3, 4, 5, 4, 4}; for (i = 0, sum = 0; i<N; i++) if (!(arr[i]%2)) sum += arr[i]; printf("Сумма элементов: %d\n", sum); return 0; }
Каким будет результат выполнения приведенной программы? #include <stdio.h> #include <string.h> #define N 10 int main() { char strLow[N]; int i; printf("Enter string in low register (%d symbols): \n", N); scanf("%s", strLow); for (i=0; i<strlen(strLow); i++) putchar(strLow[i] - 32); printf("\n"); return 0; }
(1) все символы строки strLow будут преобразованы в верхний регистр
(2) на экран будет выведена строка strLow в верхнем регистре
(3) при выполнении приведенной программы возникнет ошибка выполнения
Чему будет равно значение переменной i после выполнения приведенного фрагмента кода? int i; char str[10] = "Test", *p1, *p2; p1 = str; p2 = p1; p2--; p1++; i = 2 * (p1 - p2);
(1) 1
(2) 2
(3) 4
Какой фрагмент кода соответствует заданной схеме?files
(1) int x = 88, *ptr1, *ptr2; ptr1 = &x; ptr2 = &x;
(2) int x = 88, *ptr1, **ptr2; ptr1 = &x; ptr2 = &ptr1;
(3) int x = 88, *ptr2, **ptr1; ptr2 = &x; ptr1 = &ptr2;
Необходимо написать программу заполнения одномерного символьного массива заданным числом (вводимым с клавиатуры) символов с добавлением символа восклицательного знака "!" в конце массива символов. При выполнении какой программы не возникнет ошибки в случае, если пользователь задаст размерность n символьного массива равной 4 и строку "test"?
(1) int main(void) { int n, m; char *ptr; printf("\nEnter a dimention of character array: "); scanf_s("%d", &n); _flushall(); ptr = (char *)malloc((n+1)*sizeof(char)); if (!ptr) { printf("\nERROR! Out of memmory (error in malloc() function). Press any key..."); _getch(); exit(1); } printf("Enter a character array (not more than %d characters): ", n); gets_s(ptr, n+1); m = strlen(ptr); printf("\nStart line: %s", ptr); strcat_s(ptr, m+2, "!"); printf("\nStart line and character \"%c\": %s", '!', ptr); free (ptr); printf("\n\nPress any key: "); _getch(); return 0; }
(2) int main(void) { int n, m; char *ptr; printf("\nEnter a dimention of character array: "); scanf_s("%d", &n); _flushall(); ptr = (char *)malloc((n+1)*sizeof(char)); if (!ptr) { printf("\nERROR! Out of memmory (error in malloc() function). Press any key..."); _getch(); exit(1); } printf("Enter a character array (not more than %d characters): ", n); gets_s(ptr, n+1); m = strlen(ptr); printf("\nStart line: %s", ptr); ptr = (char *)realloc(ptr, (m+2)*sizeof(char)); if (!ptr) { printf("\nERROR! Out of memmory (error in realloc() function). Press any key..."); _getch(); exit(1); } strcat_s(ptr, m+2, "!"); printf("\nStart line and character \"%c\": %s", '!', ptr); free (ptr); printf("\n\nPress any key: "); _getch(); return 0; }
(3) int main(void) { int n, m; char *ptr; printf("\nEnter a dimention of character array: "); scanf_s("%d", &n); _flushall(); ptr = (char *)malloc(n*sizeof(char)); if (!ptr) { printf("\nERROR! Out of memmory (error in malloc() function). Press any key..."); _getch(); exit(1); } printf("Enter a character array (not more than %d characters): ", n); gets_s(ptr, n+1); m = strlen(ptr); printf("\nStart line: %s", ptr); strcat_s(ptr, m+2, "!"); printf("\nStart line and character \"%c\": %s", '!', ptr); free (ptr); printf("\n\nPress any key: "); _getch(); return 0; }
Функция average вычисляет среднее арифметическое заданных аргументов: #include <stdio.h> #include <stdarg.h> int average(int first, ... ); int main( void ) { int x; <Вызов фукнции average()>; return 0; } int average( int first, ... ) { int count = 0, sum = 0, i = first; va_list marker; va_start(marker, first); while( i != -1 ) { sum += i; count++; i = va_arg(marker, int); } va_end(marker); return( sum ? (sum / count) : 0 ); } В результете какого вызова функции average значение переменной x будет равно 3?
(1) x = average(2, 3, 4, -1);
(2) x = average(1, 6, 2);
(3) x = average(2, 6, 2, 1, -1);
Функция sum выполняет сложение двух одномерных массивов и возвращает результат через указатель: int *sum(int A[], int B[], int n) { int i; int *ptr = (int *)calloc(n, sizeof(int)); for (i = 0; i < n; i++) ptr[i] = A[i] + B[i]; return ptr; } Как вызвать функцию sum?
(1) int A[] = {1,2,3,4,5}, B[] = {2,2,2,2,2}; int ptrAB = NULL; n = (sizeof(A)/sizeof(A[0])); ptrAB = sum(A, B, n);
(2) int A[] = {1,2,3,4,5}, B[] = {2,2,2,2,2}; int *ptrAB = NULL; n = (sizeof(A)/sizeof(A[0])); *ptrAB = sum(A, B, n);
(3) int A[] = {1,2,3,4,5}, B[] = {2,2,2,2,2}; int *ptrAB = NULL; n = (sizeof(A)/sizeof(A[0])); ptrAB = sum(A, B, n);
В каком случае при первом запуске программы в файл будет записан лог работы программы, содержащий описание всех выполненных в программе действий?
(1) void AddToLog(FILE*, char*); int main (void) { FILE *fp; double (*pFunc) (double); int c = 1; double y; if( (fp = fopen("g:\\log.txt", "a")) == NULL ) printf( "Problem opening the file\n" ); while(1) { printf("Выберите функцию (0-выход): 1-sqrt, 2-sin, 3-tan\n"); scanf("%d", &c); switch(c) { case 1: pFunc = sqrt; AddToLog(fp, "Пользователь выбрал функцию 1 (вычисление квадратного корня)\n"); break; case 2: pFunc = sin; AddToLog(fp, "Пользователь выбрал функцию 2 (вычисление синуса)\n"); break; case 3: pFunc = tan; AddToLog(fp, "Пользователь выбрал функцию 3 (вычисление тангенса)\n"); break; case 0: AddToLog(fp, "Пользователь завершил выбор функции\n"); return; default: AddToLog(fp, "Пользователь задал неверный номер функции\n"); continue; } y = pFunc(1.1); AddToLog(fp, "Вычислено значение выбранной функции\n"); printf("f(1.1) = %.2f\n", y); AddToLog(fp, "Результат вычисления выведен на экран\n\n"); } if (fp != NULL) fclose(fp); return 0; } void AddToLog(FILE *fp, char *str) { if (fp != NULL) fputs(str, fp); }
(2) void AddToLog(FILE*, char*); int main (void) { FILE *fp; double (*pFunc) (double); int c = 1; double y; if( (fp = fopen("g:\\log.txt", "r+")) == NULL ) printf( "Problem opening the file\n" ); while(1) { printf("Выберите функцию (0-выход): 1-sqrt, 2-sin, 3-tan\n"); scanf("%d", &c); switch(c) { case 1: pFunc = sqrt; AddToLog(fp, "Пользователь выбрал функцию 1 (вычисление квадратного корня)\n"); break; case 2: pFunc = sin; AddToLog(fp, "Пользователь выбрал функцию 2 (вычисление синуса)\n"); break; case 3: pFunc = tan; AddToLog(fp, "Пользователь выбрал функцию 3 (вычисление тангенса)\n"); break; case 0: AddToLog(fp, "Пользователь завершил выбор функции\n"); return; default: AddToLog(fp, "Пользователь задал неверный номер функции\n"); continue; } y = pFunc(1.1); AddToLog(fp, "Вычислено значение выбранной функции\n"); printf("f(1.1) = %.2f\n", y); AddToLog(fp, "Результат вычисления выведен на экран\n\n"); } if (fp != NULL) fclose(fp); return 0; } void AddToLog(FILE *fp, char *str) { if (fp != NULL) fputs(str, fp); }
(3) void AddToLog(FILE*, char*); int main (void) { FILE *fp; double (*pFunc) (double); int c = 1; double y; if( (fp = fopen("g:\\log.txt", "w+t")) == NULL ) printf( "Problem opening the file\n" ); while(1) { printf("Выберите функцию (0-выход): 1-sqrt, 2-sin, 3-tan\n"); scanf("%d", &c); switch(c) { case 1: pFunc = sqrt; AddToLog(fp, "Пользователь выбрал функцию 1 (вычисление квадратного корня)\n"); break; case 2: pFunc = sin; AddToLog(fp, "Пользователь выбрал функцию 2 (вычисление синуса)\n"); break; case 3: pFunc = tan; AddToLog(fp, "Пользователь выбрал функцию 3 (вычисление тангенса)\n"); break; case 0: AddToLog(fp, "Пользователь завершил выбор функции\n"); return; default: AddToLog(fp, "Пользователь задал неверный номер функции\n"); continue; } y = pFunc(1.1); AddToLog(fp, "Вычислено значение выбранной функции\n"); printf("f(1.1) = %.2f\n", y); AddToLog(fp, "Результат вычисления выведен на экран\n\n"); } if (fp != NULL) fclose(fp); return 0; } void AddToLog(FILE *fp, char *str) { if (fp != NULL) fputs(str, fp); }
Какие варианты объявления структуры Account и переменных acc1 и acc2 являются верными для приведенной программы? void PrintStruct(char*, int, int); int main (void) { <Объявление структуры Account и переменных acc1, acc2> acc2 = &acc1; acc1.account = 346578; strcpy(acc1.name, "Ivanov"); acc1.balance = 30000; PrintStruct(acc1.name, acc1.account, acc1.balance); acc2->account = 90005; strcpy(acc2->name, "Pertov"); acc2->balance = 46000; PrintStruct(acc2->name, acc2->account, acc2->balance); return 0; } void PrintStruct(char *str, int a, int b) { printf("Name: %s\n", str); printf("Account: %d\n", a); printf("Balance: %d\n\n", b); }
(1) struct Account { int account; char name[30]; int balance; } acc1, *acc2;
(2) struct Account { int account; char *name; int balance; } acc1, *acc2;
(3) struct Account { int account; char *name; int balance; } *acc1, *acc2;
В какой программе выполняется верное обращение к полям объединения?
(1) int main(void) { union distance { int miles; long meters; } d, *walk; walk = &d; walk->miles = 5; printf("Пройденное расстояние в милях %d\n", walk->miles); walk->meters = 10000; printf("Пройденное расстояние в метрах %d\n", walk->meters); return 0; }
(2) int main(void) { union distance { int miles; long meters; }; miles = 5; printf("Пройденное расстояние в милях %d\n", miles); meters = 10000; printf("Пройденное расстояние в метрах %d\n", meters); return 0; }
(3) int main(void) { union distance { int miles; long meters; } walk; walk.miles = 5; printf("Пройденное расстояние в милях %d\n", walk.miles); walk.meters = 10000; printf("Пройденное расстояние в метрах %d\n", walk.meters); return 0; }
Задана программа, позволяющая пользователю задать данные о студенте с клавиатуры: typedef struct { char fio[30]; int group; float average; } student; void Init(student*); int main(void) { student s, *st; int i; st = &s; Init(st); <Вывод данных на экран> return 0; } void Init(student *st) { printf("\nEnter name: "); scanf("%s", st->fio); printf("\nEnter group: "); scanf("%d", &st->group); printf("\nEnter average mark: "); scanf("%f", &st->average); } Необходимо дополнить программу функцией вывода заданных о студенте данных на экран и вызовом этой функции в программе. Какой вариант описания и вызова функции не выполняет поставленную задачу?
(1) функция: void Print(student *st) { printf("\nName: %s", st->fio); printf("\nGrouproup: %d", st->group); printf("\nAverage mark: %.2f", st->average); } вызов: Print(st);
(2) функция: void Print(student st) { printf("\nName: %s", st.fio); printf("\nGrouproup: %d", st.group); printf("\nAverage mark: %.2f", st.average); } вызов: Print(st);
(3) функция: void Print(char *n, int i, float d) { printf("\nName: %s", n); printf("\nGrouproup: %d", i); printf("\nAverage mark: %.2f", d); } вызов: Print(st.fio, st.group, st.average);
(4) функция: void Print(char *n, int i, float d) { printf("\nName: %s", n); printf("\nGrouproup: %d", i); printf("\nAverage mark: %.2f", d); } вызов: Print(st->fio, st->group, st->average);
Определите, содержит ли приведенная программа ошибки? Если содержит, укажите, какие именно? int main(void) { struct test { unsigned int : 3; unsigned int f1 : 1; unsigned int f2 : 1; unsigned int f3 : 1; unsigned int type : 8; unsigned int index : 18; }; int b; struct test t, *pt; pt = &t; pt->f1 = 11; t.type = 3439; b = t.f1 + t.type; printf("b = %d\n", b); return 0; }
(1) в структуре test задано безымянное битовое поле
(2) поле t.f1 не инициализировано, поэтому не может участвовать в операции вычисления значения переменной b
(3) программа не содержит ошибок
Какая локальная переменная, заданная в приведенном фрагменте кода, располагается в сегменте данных и существует все время, пока работает программа? int test(); int a = 1; int main (void) { int b, s; extern int x; static int c; s = test(); return 0; } int test() { int t = a; return t; } int x = 4;
(1) a
(2) b
(3) x
(4) c
Какие утверждения являются верными для приведенной программы? void fillOnly(int); void free_n(int); void fill_n(int); int main (void) { int n = 1; int in = 1; printf("\n Enter a length of string (naturel number): "); in = scanf_s("%i", &n); if (in != 1 || n < 1 || n > 15) { printf("\n Error input. Press any key to exit: "); _getch(); exit(0); } puts("\n\tResult:"); fill_n(n); printf("\n\n Press any key to exit: "); _getch(); return 0; } void fillOnly(int n) { if (n == 1) printf("\t%+3d\n", 1); else { fillOnly(n-1); printf("\t%+3d\n", n); free_n(n-1); } } void free_n(int n) { if (n == 1) printf("\t%+3d\n", -1); else { fillOnly(n-1); printf("\t%+3d\n", -n); free_n(n-1); } } void fill_n(int n) { if (n == 1) printf("\t%+3d\n", 1); else { if (n == 2) printf("\t%+3d\n\t%+3d\n", 1, 2); else { fillOnly(n-1); printf("\t%+3d\n", n); fill_n(n-2); } } }
(1) в программе определено 3 рекурсивных функции
(2) в программе определено 4 рекурсивных функции
(3) в каждой пользовательской функции используются прямая и косвенная рекурсия
Что произойдет при выполнении приведенной программы: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <locale.h> #ifndef ARR #define ARR #include <arr.txt> #endif int main (void) { int i = 0 , j = 0, n; setlocale (LC_ALL, "rus"); printf("Введите количество человек (от 1 до 3): "); scanf("%d", &n); if (n<1 || n>3) { printf("Ошибка ввода данных. Нажмите любую клавишу: "); _getch(); exit(1); } #ifdef ARR for (i=0; i<n; i++) printf("%d. %s %s\n", i+1, names[i], surnames[i]); #endif return 0; } Содержание подключаемого файла arr.txt: char *names[] = {"Иван", "Пётр", "Илья"}; char *surnames[] = {"Иванов", "Пётров", "Ильин"};
(1) на экран будут выведены сочетания всех имён и фамилий, заданных в массивах
(2) на экран будут выведены сочетания имён и фамилий для количества людей, заданного пользователем
(3) программа не будет выполнена, так как содержит ошибку
Каким будет значение переменной d после выполнения заданных операций и почему? int a = 15, b = 2; float c = 1.0F; float d; d = c*(a/b);
(1) d = 7.5, так как d имеет тип с плавающей точкой
(2) d = 7, так как в результате выполнения арифметического выражения будет выполнено преобразование к типу int
(3) d = 7.0, так как при выполнении деления произойдет потеря точности
Необходимо написать программу, которая имеет два аргумента командной строки и вычислиет их разность. Какая программа выполняет поставленную задачу?
(1) int main(int argc, char* argv[]) { int n1, n2,sum; n1 = atoi(argv[0]); n2 = atoi(argv[1]); sum = n1 - n2; printf("sum = %d\n", sum); return 0; }
(2) int main(int argc, char* argv[]) { int n1, n2,sum; n1 = argv[0]; n2 = argv[1]; sum = n1 - n2; printf("sum = %d\n", sum); return 0; }
(3) int main(int argc, char* argv[]) { int n1, n2,sum; n1 = argv[1]; n2 = argv[2]; sum = n1 - n2; printf("sum = %d\n", sum); return 0; }
(4) int main(int argc, char* argv[]) { int n1, n2,sum; n1 = atoi(argv[1]); n2 = atoi(argv[2]); sum = n1 - n2; printf("sum = %d\n", sum); return 0; }
Сколько раз будет выполнен цикл for? int x=123; printf("Угадайте число:\n"); for (x=0; x==123; ) scanf("%d", &x);
(1) 0
(2) 123
(3) заранее неизвестно
Какой фрагмент кода определяет минимальное из двух чисел?
(1) int a = rand(); int b = rand(); int minab = (a > b) ? a : b; printf("minab = %d", minab);
(2) int a = rand(); int b = rand(); int minab = (a > b) ? b : a; printf("minab = %d", minab);
(3) int a = rand(); int b = rand(); int minab = (a < b) ? a : b; printf("minab = %d", minab);
Какая программа позволяет определить общий размер массива arr в байтах (для определения размерности массива используется переменная size)?
(1) #include <stdio.h> #define N 10 int main() { int i, size; int arr[N] = {3, 4, 5, 4}; for (i=0, size=0; i<N; i++) { if (arr1[i]!=0) size++; } return 0; }
(2) #include <stdio.h> #define N 10 int main() { int i, size; int arr[N] = {3, 4, 5, 4}; size = sizeof(arr); return 0; }
(3) #include <stdio.h> #define N 10 int main() { int i, size; int arr[N] = {3, 4, 5, 4}; size = sizeof(arr)/sizeof(arr[0]); printf("size = %d\n", size); return 0; }
Какие утверждения будут верными после выполнения приведенной программы? #include <stdio.h> #include <string.h> #define N 10 int main() { int i = 0; char ch; char str1[N] = "test"; char str2[N]; ch= str1[0]; while (ch!='\0') { str2[i] = str1[i]; i++; ch= str1[i]; } return 0; }
(1) длина строки str1 больше длины строки str2
(2) строки str1 и str2 одинаковы
(3) длина строки str2 больше длины строки str1
Какое действие будет выполнено первым при выполнении оператора *p++ = 10?
(1) указатель будет увеличен на количество байт, соответсвующее его типу
(2) по адресу, записанному в указателе p, будет записано значение 10
(3) значение, на которое ссылается указатель p, будет увеличено на 10
Чему будет равно значение переменной sum после выполнения приведенного фрагмента кода? int i, N, sum = 0; int arr[] = {3, 2, 4, 5, 1}; int *ptr; N = sizeof(arr)/sizeof(arr[0]); ptr = &arr[1]; for (i=0; i<N-1; i++) { sum += *ptr; ptr++; }
(1) 11
(2) 12
(3) 15
В каком случае при возникновении ошибки при выделении памяти эта ошибка будет корректно обработана?
(1) ptr = (int *)malloc(30*sizeof(int));
(2) ptr = (int *)malloc(size1*sizeof(int)); if (ptr) { printf("\nERROR! Out of memory in malloc() function. Press any key: "); _getch(); exit(1); };
(3) ptr = (int *)malloc(size1*sizeof(int)); if (!ptr) { printf("\nERROR! Out of memory in malloc() function. Press any key: "); _getch(); exit(1); };
(4) str[i] = (char *) calloc((N+1), sizeof(char)); if (str[i] == NULL) { printf("ERROR. Out of memmory. Press any key: "); _getch(); exit(1); }
Программа формирует сообщение об ошибке из отдельных строк в зависимости от степени критичности ошибки: #include <stdio.h> #include <conio.h> #include <stdarg.h> void error(int severity, ... ); int main( void ) { char err[][30] = {"Сообщение 1", "Сообщение 2"}; int n = -1; printf("Введите степень критичности ошибки (целое число): "); scanf("%d", &n); switch (n) { case 0: error(0, "Ошибка!", '\0'); break; case 1: error(0, "Ошибка!", err[0], '\0'); break; default: error(1, "Ошибка!", err[0], err[1], '\0'); } return 0; } void error(int severity, ... ) { va_list ap; va_start(ap, severity); for (;;) { char *p = va_arg(ap, char*); if (p == '\0') break; printf("%s ", p); } va_end(ap); printf("\n"); } Какое сообщение будет выведено на экран, если пользователь задаст значение n равным 10?
(1) Ошибка!
(2) Ошибка! Сообщение 1
(3) Ошибка! Сообщение 1 Сообщение 2
(4) при выполнении программы возникнет ошибка, так как в программе не предусмотрена обработка данного значения степени критичности ошибки
Какая программа реализует сортировку методом прямого выбора по убыванию с помощью функции, использующей вызов по ссылке?
(1) void bsort (int*, int); int main (void) { int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7}; int i, n; n = sizeof(A)/sizeof(A[0]); printf("Original array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); bsort (A, n); printf("\nSorted array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); return 0; } void bsort (int *arr, int size) { int i, j, buf; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] < arr[j + 1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } } } }
(2) void swap (int*, int*); void bsort (int* , int); int main (void) { int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7}; int i, n; n = sizeof(A)/sizeof(A[0]); printf("Original array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); bsort (A, n); printf("\nSorted array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); return 0; } void swap(int *pa, int *pb) { int temp; temp = *pa; *pa = *pb; *pb = temp; } void bsort (int *arr, int size) { int i, j; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] > arr[j + 1]) swap(&arr[j], &arr[j+1]); } } }
(3) void swap (int*, int*); void bsort (int* , int); int main (void) { int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7}; int i, n; n = sizeof(A)/sizeof(A[0]); printf("Original array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); bsort (A, n); printf("\nSorted array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); return 0; } void swap(int *pa, int *pb) { int temp; temp = *pa; *pa = *pb; *pb = temp; } void bsort (int *arr, int size) { int i, j, min; for (i=0; i < size - 1; i++) { min = i; for (j = i+1; j < size; j++) { if (arr[j] < arr[min]) { min = j; swap(&arr[i], &arr[min]); } } } }
Что произойдет при двух запусках программы в течение одной минуты? #include <stdio.h> #include <math.h> #include <time.h> #include <string.h> void AddToLog(FILE*, char*); char* GenerateFileName(); int main (void) { FILE *fp; char *strFile, strFn[30] = ""; double (*pFunc) (double); int c = 1; double y; strFile = GenerateFileName(); strcpy(strFn, strFile); if( (fp = fopen(strFn, "a+")) == NULL ) printf( "Problem opening the file\n" ); while(1) { printf("Выберите функцию (0-выход): 1-sqrt, 2-sin, 3-tan\n"); scanf("%d", &c); switch(c) { case 1: pFunc = sqrt; AddToLog(fp, "Пользователь выбрал функцию 1 (вычисление квадратного корня)\n"); break; case 2: pFunc = sin; AddToLog(fp, "Пользователь выбрал функцию 2 (вычисление синуса)\n"); break; case 3: pFunc = tan; AddToLog(fp, "Пользователь выбрал функцию 3 (вычисление тангенса)\n"); break; case 0: AddToLog(fp, "Пользователь завершил выбор функции\n\n"); printf("Лог сохранен в файл %s\n", strFn); return; default: AddToLog(fp, "Пользователь задал неверный номер функции\n\n"); continue; } y = pFunc(1.1); AddToLog(fp, "Вычислено значение выбранной функции\n"); printf("f(1.1) = %.2f\n", y); AddToLog(fp, "Результат вычисления выведен на экран\n"); } if (fp != NULL) fclose(fp); return 0; } void AddToLog(FILE *fp, char *str) { if (fp != NULL) fputs(str, fp); } char* GenerateFileName() { char strTime[10] = ""; char strDate[10] = ""; char strFile[30] = "g:\\log_"; char *token; _strdate(strDate); _strtime(strTime); token = strtok(strDate, "/"); while( token != NULL ) { strncat(strFile,token,2); token = strtok( NULL, "/" ); } strncat(strFile,"_",1); token = strtok(strTime, ":"); while( token != NULL ) { strncat(strFile,token,2); token = strtok( NULL, "/" ); } strncat(strFile,".txt",4); }
(1) будет создано два отдельных .txt файла с логами выполнения программы
(2) будет создан один .txt файл, в файле будут содержаться логи выполнения для обоих запусков программы
(3) будет создан один .txt файл, в файле будут содержаться логи выполнения для первого запуска программы
(4) будет создан один .txt файл, в файле будут содержаться логи выполнения для последнего запуска программы
Какое сообщение будет выведено на экран в результате выполненния приведенной программы? int main (void) { struct student { char *name; char *birthday; int group; } s1, s2; int s; s1.name = "Ivanov"; s1.birthday = "10.03.1985"; s1.group = 1014; s2.name = "Petrov"; s2.birthday = "08.04.1985"; s2.group = 1309; s2.group = s1.group; if (s2.group == s1.group) printf("Students %s and %s are studying in the same group\n", s1.name, s2.name); else printf("Students %s and %s are not studying in the same group\n", s1.name, s2.name); return 0; }
(1) при выполнении программы возникнет ошибка
(2) Students Ivanov and Petrov are studying in the same group
(3) Students Ivanov and Petrov are not studying in the same group
Определите, есть ли в приведенной программе ошибки? Если есть, укажите, какие? typedef union pw_union { short int i; char ch[2]; } pw; int putw(short int num, FILE *fp); int main(void) { FILE *fp; fp = fopen("g:\\test.tmp", "wb+"); if(fp == NULL) { printf("Файл не открыт.\n"); exit(1); } putw(1025, fp); fclose(fp); return 0; } int putw(short int num, FILE *fp) { union pw word; word.i = num; putc(word.ch[0], fp); return putc(word.ch[1], fp); }
(1) неверно объявлена переменная word в функции putw()
(2) неверно объявлено объединение с использованием ключевого слова typedef
(3) программа не содержит ошибок
Что необходимо сделать для того, чтобы исправить содержащуюся в программе ошибку? void Init(struct student*); void Print(struct student*); int main(void) { struct student { char fio[30]; int group; float average; }; struct student s, *st; int i; st = &s; Init(&st); Print(st); return 0; } void Init(struct student *st) { printf("\nEnter name: "); scanf("%s", st.fio); printf("\nEnter group: "); scanf("%d", &st.group); printf("\nEnter average mark: "); scanf("%f", &st.average); } void Print(struct student *st) { printf("\nName: %s", st->fio); printf("\nGrouproup: %d", st->group); printf("\nAverage mark: %.2f", st->average); }
(1) изменить оператор обращения к полям структуры в функции Init
(2) изменить типы формальных параметров в описаниях функций Init и Print
(3) объявить структуру student глобально
(4) изменить вызов функции Init
Чему будет равно значение переменной b в результате выполнения приведенной программы? int main(void) { struct Options { unsigned int centerX : 1; unsigned int centerY : 1; unsigned int shadow : 2; unsigned int palette : 4; }; int b; struct Options t, *pt; t.shadow = 10; t.palette = 12; b = t.shadow + t.palette; printf("b = %d\n", b); return 0; }
(1) 10
(2) 12
(3) 14
(4) 22
Для каких переменных не допускается применение спецификатора register? int min(int, int); int t; int main(void) { int x=-5, y=5, m; m = min(x,y); printf("min = %d\n", m); return 0; } int min(int a, int b) { int m = (a<b) ? a : b; return m; }
(1) t
(2) x
(3) m
(4) a
(5) b
Необходимо решить задачу поиска пути между двумя городами. Карта дорог представлена в виде графа: filesПроцесс поиска представлен как последовательность шагов. На каждом шаге с использованием некоторого критерия выбирается точка, в котороую можно попасть из текущей. Если очередная выбранная точка совпала с заданной конечной точкой, то маршрут найден. Если не совпала - выполняется еще один шаг. Поскольку текущая точка может быть соединена с несколькими другими, то сначала выбирается точка с наименьшим номером. Для решения данной задачи задана программа (для появснения в программе приведены комментарии): #define N 8 void step(int, int, int); int map[N][N]; // карта: map[i,j]!=0, если точки i и j соединены int road[N]; // маршрут - номера точек карты int incl[N]; // incl[i]==1, если точка с номером i включена в road int start; // начальная точка маршрута int finish; // конечная точка маршрута int i, j; int main (void) { // инициализация массивов for (i=0; i<N; i++) road[i] = 0; for (i=0; i<N; i++) incl[i] = 0; for (i=0; i<N; i++) for (j=0; j<N; j++) map[i][j] = 0; // ввод значений элементов карты map[1][2] = 1; map[2][1] = 1; map[1][3] = 1; map[3][1] = 1; map[1][4] = 1; map[4][1] = 1; map[3][4] = 1; map[4][3] = 1; map[3][7] = 1; map[7][3] = 1; map[4][6] = 1; map[6][4] = 1; map[5][6] = 1; map[6][5] = 1; map[5][7] = 1; map[7][5] = 1; map[6][7] = 1; map[7][6] = 1; printf("Введите через пробел номер начальной и конечной точек: "); scanf("%d %d", &start, &finish); road[1] = start; // внести точку в маршрут incl[1] = 1; // пометить точку как включенную step(start, finish, 2); return 0; } void step(int s, int f, int p) { int c; // номер точки, в которую делается очередной шаг int i; if (s==f) { printf("Путь: "); for (i=1; i<=p-1; i++) printf("%d ", road[i]); printf("\n"); } else { // выбор очередной точки for (c=1; c<=N; c++) // проверка всех вершин if (map[s][c]!=0 && incl[c]==0) { // точка соединена с текущей и не включена в маршрут road[p] = c; // добавление вершины в путь incl[c] = 1; // пометка вершины как включенной step(c, f, p+1); incl[c] = 0; road[p] = 0; } } } Какие утверждения являются неверными для приведенной программы?
(1) программа не выполняет поставленную задачу, так как в ней используется неверная индексация массива
(2) программа не выполняет поставленную задачу, так как неверно задана рекурсивная функция
(3) программа выполняет поставленную задачу
Каким образом должен быть подключен файл some.h, находящийся на два уровня выше, чем главный файл?
(1) #include "..\some.h"
(2) #include "..\..\some.h"
(3) #include "..\..\..\some.h"
Какой фрагмент кода содержит ошибки?
(1) char answer, strCourseName[100]; printf("Какую лекцию Вы изучаете?\n"); scanf_s("%s", &strCourseName, 99); printf("Есть ли у Вас вопросы по лекции \"%s\" (y/n)?\n", strCourseName); scanf_s("%s", &answer);
(2) char strCourseName[100]; int iLecCount, iLecNumber; printf("What course are you studing?\n"); scanf_s("%s", strCourseName, 99); printf("How many lections in the course \"%s\"?\n", strCourseName); scanf_s("%d", &iLecCount); printf("Which lection are you studing?\n"); scanf_s("%d", &iLecNumber); printf("You must study %d lections to complete the course\n", iLecCount-iLecNumber);
(3) char answer; char strLecName[50] = "Переменные и базовые типы данных языка С"; printf("Знакома ли Вам тема лекции "%s" (y/n)?\n", strLecName); scanf_s("%s", &answer);
Задана программа, исполняемый файл которой имеет имя Example.exe: int main(int argc, char* argv[]) { int n1, n2, n3, m, sum; m = argc; n1 = atoi(argv[1]); n2 = atoi(argv[2]); n3 = atoi(argv[3]); sum = n1 + n2 + n3 + m; printf("sum = %d\n", sum); return 0; } Программа запускается из командной строки командой Example.exe 2 3 5. Чему будет равно значение переменной sum?
(1) 5
(2) 7
(3) 9
(4) 10
В результате выполнения какого фрагмента кода на экран будут выведены 5 строк, в каждой из которых будут содержаться звездочки, причем в каждой последующей строки будет на одну звездочку больше, чем в предыдущей?
(1) int i, j; for (i=0; i<5; i++) for (j=0; j<5; j++) printf("*");
(2) int i, j; for (i=5; i>0; i--) { for (j=i; j<5; j++) printf("*"); printf("\n"); }
(3) int i, j; for (i=0; i<5; i++) { for (j=i; j<5; j++) printf("*"); printf("\n"); }
(4) int i, j; for (i=5; i>0; i--) { for (j=i-1; j<5; j++) printf("*"); printf("\n"); }
Дана программа определения дня недели: int x; printf("Введите число от 1 до 7: "); scanf_s("%d", &x); switch (x<=5 ? 1 : x==6 ? 2 : 3) { case 1: printf("Сегодня рабочий день"); break; case 2: printf("Сегодня суббота"); break; case 3: printf("Сегодня воскресенье"); break; default: printf("Ошибка! Вы ввели неверное число"); break; } Какое число нужно ввести, чтобы на экран было выведено сообщение Ошибка! Вы ввели неверное число?
(1) 1
(2) 5
(3) 7
(4) 8
(5) сообщение Ошибка! Вы ввели неверное число никогда не будет выведено
Какая программа реализует сортировку массива целых чисел по убыванию методом прямого выбора?
(1) #include <stdio.h> #define N 5 int main() { int i, j, k, buf; int arr[N] = {3, 2, 4, 5, 1}; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { if (arr[j] < arr[j+1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } }; for (k=0; k<N; k++) printf("%d ", arr[k]); return 0; }
(2) #include <stdio.h> #define N 5 int main() { int i, j, k, buf; int arr[N] = {3, 2, 4, 5, 1}; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { if (arr[j] > arr[j+1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } }; for (k=0; k<N; k++) printf("%d ", arr[k]); return 0; }
(3) #include <stdio.h> #define N 5 int main() { int i, j, k, buf, min; int arr[N] = {3, 2, 4, 5, 1}; for (i=0; i<N-1; i++) { min = i; for (j=i+1; j<N; j++) { if (arr[j]>arr[min]) min = j; buf = arr[i]; arr[i] = arr[min]; arr[min] = buf; } } for (k=0; k<N; k++) printf("%d ", arr[k]); return 0; }
Приведенный фрагмент кода должен запрашивать пароль не более трех раз: char s[5], psw[] = "password"; int i, k= 0; for (i=0; !k && i<3; i++) { printf("Введите пароль: \n"), gets(s); if (strcmp(s, psw)) k = 1; } if (k) printf("Добро пожаловать! TRUE"); else printf("Ошибка: Неверный пароль! FALSE"); Проверьте правильность этого кода для выполнения поставленной задачи и определите, сколько раз будет выполнен цикл for, если пользователь не знает верного пароля?
(1) 0
(2) 1
(3) 3
При компиляции какого фрагмента кода возникнет ошибка?
(1) int n = 123, t, *pn; void *p; pn = &n; p = pn; t = *pn;
(2) int n = 123, t, *pn; void *p; pn = &n; p = pn; t = *p;
(3) int n = 123, t, *pn; void *p; pn = &n; p = &n; t = *pn;
Необходимо написать программу, которая определяет и выводит на экран время года по дате рождения, заданной пользователем. Какую ошибку содержит приведенный фрагмент кода? int m; char month[3], s[8] = ""; char *season[] = { "winter", "spring", "summer", "autumn" }; printf("Enter day of your birthday (MM.DD): "); scanf("%[^.]s", month); m = atoi(month); if ((m==12) || (m<3)) strcpy(s, season[0]); else if ((m>2) && (m<6)) strcpy(s, season[1]); else if ((m>6) && (m<9)) strcpy(s, season[2]); else strcpy(s, season[3]); printf("Your birthday is in %s\n", s);
(1) неверное объявление массива указателей
(2) неверное обращение к элементам массива указателей
(3) неверная индексация элементов массива указателей
(4) приведенный фрагмент кода не содержит ошибок
В процессе выполнения приведенной программы возникает ошибка: #include <stdio.h> #include <stdlib.h> #define N 10 int main(void) { int i; int *arr; arr = (int *)calloc(N, sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in calloc() function. Press any key: "); _getch(); exit(1); }; for (i=0; i<N+2; i++) { arr[i] = i+1; printf("arr[%d] = %d\n", i, arr[i]); } free(arr); return 0; } Каким образом можно изменить программу для ее корреткной работы?
(1) выделить больший размер памяти в функции calloc()
(2) добавить операцию перераспределения памяти
(3) изменить процедуру заполнения массива, изменив условие выхода из цикла на i<N
Необходимо написать функцию sum, которая будет вычислять сумму всех элементов массива. В данную функцию должно передаваться два параметра - массив и размер массива. В какой программе функция sum объявлена верно?
(1) #include <stdio.h> #define n 10 int sum(int mas, int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int mas, int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }
(2) #include <stdio.h> #define n 10 int sum(int mas[], int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int mas[], int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }
(3) #include <stdio.h> #define n 10 int sum(int mas[n], int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int mas[n], int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }
(4) #include <stdio.h> #define n 10 int sum(int* mas, int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int* mas, int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }
В приведенной программе используется указатель на функции, которые выполняют сортировку целочисленного массива "методом пузырька": void PuzSortInc (int*, int ); void PuzSortDec (int*, int); int main (void) { int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7}; int i, n, alg; <Объявление указателя pFun на функции> n = sizeof(A)/sizeof(A[0]); printf("Исходный массив: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); printf("\nВыберите алгоритм сортировки (1 - \"методом пузырька\" по возрастанию,\ 2 - \"методом пузырька\" по убыванию: "); scanf("%d", &alg); switch (alg) { case 1: pFun = PuzSortInc; break; case 2: pFun = PuzSortDec; break; default: printf("ERROR! Такого алгоритма не определено!"); } if (pFun) { pFun(A,n); printf("\nSorted array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); }; return 0; } void PuzSortInc (int* arr, int size) { int i, j, buf; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] > arr[j + 1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } } } } void PuzSortDec (int* arr, int size) { int i, j, buf; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] < arr[j + 1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } } } } Функция PuzSortInc() выполняет сортировку по возрастанию, функция PuzSortDec() - по убыванию. Какой способ объявления указателя pFun является неверным для приведенной программы?
(1) void (*pFun) (int*, int);
(2) void (*pFun) (int*, int) = NULL;
(3) void *pFun (int*, int)
(4) void (*pFun) (int*, int) = {PuzSortInc, PuzSortDec};
Каким будет значение переменной line в результате выполнения приведенной программы? int main( void ) { FILE *stream; char line[81]; int result; if ( fopen_s( &stream, "g:\\fseek.out", "w+" ) != 0 ) { printf( "The file fseek.out was not opened\n" ); return -1; } fprintf( stream, "Ivanov - 09.06.1980 \n" "Petrov - 10.03.1986 \n" "Sidorov - 08.11.1985\n"); result = fseek( stream, 0L, SEEK_SET); if( result ) perror( "Fseek failed" ); else { fgets( line, 80, stream ); printf( "%s", line ); } fclose( stream ); return 0; }
(1) Ivanov - 09.06.1980
(2) Petrov - 10.03.1986
(3) Sidorov - 08.11.1985
Какая программа содержит ошибку?
(1) int main (void) { struct stud { char *name; char *surname; int age; double av_mark; }; struct group { int number; int quantity; struct stud student; } gr; gr.number = 3; gr.quantity = 21; gr.student.name = "Ivan"; gr.student.surname = "Ivanov"; gr.student.age = 20; gr.student.av_mark = 4.25; printf("Group Number: %d\nThe number of students in the group: %d\n", gr.number, gr.quantity); printf("%s %s - %1.2f", gr.student.surname, gr.student.name, gr.student.av_mark); return 0; }
(2) int main (void) { struct stud { char *name; char *surname; int age; double av_mark; }; struct group { int number; int quantity; struct stud *student; } gr; gr.number = 3; gr.quantity = 21; gr.student.name = "Ivan"; gr.student.surname = "Ivanov"; gr.student.age = 20; gr.student.av_mark = 4.25; printf("Group Number: %d\nThe number of students in the group: %d\n", gr.number, gr.quantity); printf("%s %s - %1.2f", gr.student.surname, gr.student.name, gr.student.av_mark); return 0; }
(3) int main (void) { struct stud { char *name; char *surname; int age; double av_mark; } st; struct group { int number; int quantity; struct stud *student; } gr; gr.student = &st; gr.number = 3; gr.quantity = 21; gr.student->name = "Ivan"; gr.student->surname = "Ivanov"; gr.student->age = 20; gr.student->av_mark = 4.25; printf("Group Number: %d\nThe number of students in the group: %d\n", gr.number, gr.quantity); printf("%s %s - %1.2f", gr.student->surname, gr.student->name, gr.student->av_mark); return 0; }
Что будет выведено на экран в результате выполнения приведенной программы? int main(void) { union pw { int i; double d; char ch[2]; } pw = {"y"}; printf("pw.d = %.2f", pw.d); return 0; }
(1) pw.d = 1.00
(2) pw.d = 121.00
(3) pw.d = y
(4) ни один из перечисленных вариантов, так как выполнена неверная инициализация объединения
Что будет выведено на экран в результате выполнения приведенной программы? struct student { char fio[30]; int group; float average; }; struct student Init(char*, int, float); void Print(struct student*); int main(void) { struct student s1, s2, s3, *st; int i; s1 = Init("Ivanov I.", 3801, 5.00); s2 = Init(s1.fio, 4209, 4.50); s3 = Init("Petrov P", s1.group, s2.average); st = &s3; Print(st); return 0; } struct student Init(char* n, int i, float f) { struct student s, *st; st = &s; strcpy(st->fio, n); st->group = i; st->average = f; return s; } void Print(struct student *st) { printf("\nName: %s", st->fio); printf("\nGrouproup: %d", st->group); printf("\nAverage mark: %.2f\n", st->average); }
(1) данные о студенте Ivanov I. из группы 3801
(2) данные о студенте Ivanov I. из группы 4209
(3) данные о студенте Petrov P. из группы 3801
(4) данные о студенте Petrov P. из группы 4209
(5) программа содержит ошибку
Какая программа выполняет поразрядную операцию И над двумя целыми числами, представленными в двоичной системе счисления для 16-разрядного компьютера?
(1) void printBits(unsigned int var); int main (void) { unsigned int number, mask; printf("The program on demonstration digit-by-digit operation And ( & )\n"); printf("Enter a whole number of unsigned: "); scanf_s("%u", &number); printf("Enter the number of unsigned-mask: "); scanf_s("%u", &mask); printf("Binary representation of the starting number(%u) and\n", number); printf("Binary representation of the number-masks (%u):\n", mask); printBits(number); printBits(mask); printBits(number & mask); return 0; } void printBits(unsigned int var) { unsigned int b; unsigned int mask = 1 << 15; printf("\n%10u = ", var); for (b = 1; b <= 16; ++b) { printf("%c", var & mask ? '1' : '0'); var <<= 1; if (b % 8 == 0) putchar(' '); } }
(2) void printBits(unsigned int var); int main (void) { unsigned int number, mask; printf("The program on demonstration digit-by-digit operation And ( ' )\n"); printf("Enter a whole number of unsigned: "); scanf_s("%u", 'number); printf("Enter the number of unsigned-mask: "); scanf_s("%u", 'mask); printf("Binary representation of the starting number(%u) and\n", number); printf("Binary representation of the number-masks (%u):\n", mask); printBits(number); printBits(mask); printBits(number ' mask); return 0; } void printBits(unsigned int var) { unsigned int b; unsigned int mask = 1 << 31; printf("\n%10u = ", var); for (b = 1; b <= 32; ++b) { printf("%c", var ' mask ? '1' : '0'); var <<= 1; if (b % 8 == 0) putchar(' '); } }
(3) void printBits(unsigned int var); int main (void) { unsigned int number1, number2; printf("\n The program on demonstration digit-by-digit operator OR ( | ):\n"); printf("\n\t Enter the unsigned number of N1: "); scanf_s("%u", &number1); printf("\t Enter the unsigned number of N2: "); scanf_s("%u", &number2); printf("\n\t Binary representation of the number of N1 (%u) and\n", number1); printf("\t Binary representation of the number of N2 (%u):\n", number2); printBits(number1); printBits(number2); printBits(number1 | number2); printf("\n\n Press any key: "); _getch(); return 0; } void printBits(unsigned int var) { unsigned int b; unsigned int num = 1 << 31; printf("\n\t %10u = ", var); for (b = 1; b <= 32; ++b) { printf("%c", var & num ? '1' : '0'); var <<= 1; if (b % 8 == 0) putchar(' '); } }
Какие статические переменные будут видны в функции f()? int f(); static int d = 5, e = 8; int main(void) { int n = 1, m = 1; int s; s = f(); return 0; } int f() { int p; static int c = 0; p = c; printf("d = %d",d); return p; }
(1) c
(2) d
(3) e
Приведенная программа должна определять, является ли заданная строка палиндромом (палиндром - это слово, которое читается одинаково слева направо и справа налево). В программе выполняется просмотр строки одновременно слева направо и справа налево и сравнение соответствующих символов. Если в какой-то момент символы не совпадают, делается вывод о том, что строка не является палиндромом, если же удается достичь середины строки и при этом все соответствующие символы совпали, то строка является палиндромом: char s[100]; int pal(char s[100]); int main() { printf("\nВведите строку: "); gets(s); if (pal(s)) printf("Строка является палиндромом"); else printf("Строка не является палиндромом"); return 0; } int pal(char s[100]) { int l; char s1[100]; if (strlen(s)<1) return 1; else { l=s[0]==s[strlen(s)-1]; strncpy(s1, s+1, strlen(s)-2); s1[strlen(s)-2]='\0'; return l&&pal(s1); } } Какое граничное условие имеет реализованная в программе рекурсия?
(1) строка пустая
(2) строка состоит из одного символа
(3) граничное условие отсутствует
Файл second.h, расположенный на диске D:, содержит следующие описания переменных и функций: extern int x, y; extern char ch; void func22(void) { y = 100; } void func23(void) { x = y/10; ch = 'R'; } Каким образом файл second.h должен быть подключен для возможности использования описанных в нем переменных и функций в другом файле?
(1) #include <stdio.h> #include <conio.h> #include "D:\second.h"
(2) #include <stdio.h> #include <conio.h> #include <D:\second.h>
(3) #include <stdio.h> #include <conio.h> #include D:\second.h
Какие утверждения являются неверными?
(1) функция printf() записывает данные в стандартный выходной поток в соответствии с заданной строкой форматирования
(2) функция puts() заменяет символ конца строки '\0' на символ новой строки '\n'
(3) функция printf() предназначена для вывода данных только в файл
(4) функции printf() и puts() полностью аналогичны и ничем не отличаются
Приведенная программа считает в обратном порядке, начиная с какого-либо значения (указанного в командной строке): int main(int argc, char *argv[]) { int disp, count; setlocale (LC_ALL, "rus"); if(argc<2) { printf("В командной строке на задано число\n"); exit(1); } if(argc==3 && !strcmp(argv[2], "display")) disp = 1; else disp = 0; for(count=atoi(argv[1]); count; --count) if(disp) printf("%d ", count); putchar('\a'); printf("Счет закончен"); return 0; } Что будет выведено на экран в результате выполнения приведенной программы, если ее запуск выполняется из командной строки командой Example.exe 5 display?
(1) 5 4 3 2 1
(2) 5 4 3 2 1 0
(3) ничего не будет выведено
В каком случае цикл for не будет бесконечным?
(1) int i = 0; char ch; for (; i<5 ; i++) { ch = getchar(); if (ch != 'y') i++; }
(2) int i; char ch; for (i=1; i<5 ; ) { ch = getchar(); if (ch != 'y') i++; }
(3) int i; char ch; for (i=1; ; i++) { ch = getchar(); if (ch != 'y') i++; }
(4) int i = 1; char ch; for ( ; ; ) { ch = getchar(); if (ch != 'y') i++; }
Чему будет равен результат вычисления значения 5+6 в результате выполнения приведенного фрагмента кода? int a, b, res; char op; int f = 1; printf("Введите 1й операнд: "); scanf("%d", &a); printf("Введите знак операции: "); scanf("%s", &op); printf("Введите 2й операнд: "); scanf("%d", &b); switch (op) { case '+': res = a+b; case '-': res = a-b; break; case '*': res = a*b; break; case '/': res = a/b; break; default: printf("Неизвестная операция"); f = 0; } if (f) printf ("Результат: %d", res);
(1) -1
(2) 5
(3) 6
(4) 11
Какая программа выполняет поиск максимального элемента в массиве?
(1) #include <stdio.h> #define N 5 int main() { int m, i; int arr[N] = {3, 2, 4, 5, 1}; m = 1; for (i=1; i<N; i++) if (arr[i]<arr[m]) m = i; printf("a[m] = %d", arr[m]); return 0; }
(2) #include <stdio.h> #define N 5 int main() { int m, i; int arr[N] = {3, 2, 4, 5, 1}; m = 1; for (i=1; i<N; i++) if (arr[i]>arr[m]) m = i; printf("a[m] = %d", arr[m]); return 0; }
(3) #include <stdio.h> #define N 5 int main() { int m, i; int arr[N] = {3, 2, 4, 5, 1}; m = 1; for (i=1; i<N-1; i++) if (arr[i]<arr[m]) m = i; printf("a[m] = %d", arr[m]); return 0; }
Используя таблицу кодировки символов ASCII, определите, что будет выведено на экран в результате выполнения приведенного фрагмента кода? int i = 0; char t1 = 218; char tr = 191; char b1 = 192; char br = 217; char g = 196; char v = 179; printf("%c", t1); for (i=0; i<32; i++) printf("%c",g); printf("%c\n", tr); printf("%c", v); for (i=0; i<32; i++) printf("%c",' '); printf("%c\n", v); printf("%c", b1); for (i=0; i<32; i++) printf("%c",g); printf("%c\n", br);
(1) хаотичный набор символов
(2) прямоугольная рамка
(3) при выполнении программы возникнет ошибка
Что делает приведенная программа? #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1; ptr2 = str2; while (*ptr1!='\0') { if (*ptr1=='\0') { *ptr2 = '\0'; break; } *ptr2 = *ptr1; ptr1++; ptr2++; } printf("str2 = %s\n", str2); return 0; }
(1) копирует строку str1 в строку str2
(2) копирует строку str2 в строку str1
(3) просматривает все символы строки str1
(4) просматривает все символы строки str2
Указатель p инициализирован строковой константой: char *p = "тестовая строка". Какое утверждение является верным в данном случае?
(1) заданная строка хранится в указателе p
(2) заданная строка хранится в специальной таблице строк
(3) указатель p может хранить только адрес и не может быть инициализирован строковой константой
Какое утверждение будет верным после выполнения приведенной программы? #include <stdio.h> #include <stdlib.h> #define N 10 int main(void) { int size1, size2, size3, i, n = 0; int arr1[N] = {1,2,3,4,5}, *arr; size1 = sizeof(arr1); arr = (int *)calloc(N, sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in calloc() function. Press any key: "); _getch(); exit(1); }; for (i=0; i<N; i++) { arr[i] = i+1; n++; printf("arr[%d] = %d\n", i, arr[i]); } size2 = N*sizeof(int); arr = (int *)realloc(arr, (N+2)*sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in realloc() function. Press any key: "); _getch(); exit(1); }; for (i=N; i<N+2; i++) { arr[i] = i+1; printf("arr[%d] = %d\n", i, arr[i]); } for (i=0, n=0; i<N+2; i++) n++; size3 = n*sizeof(int); free(arr); return 0; }
(1) size1 > size2
(2) size2 < size3
(3) size1 = size 3
Чему будет равно значение переменной s в результате выполнения приведенной программы? #include <stdio.h> #define n 5 void fun(int *mas, int k); int sum(int *mas, int k); int main( void ) { int arr[n] = {3,4,1,2}; int i, s; fun(arr, n); s = sum(arr, n); return 0; } void fun(int *mas, int k) { int i, s = 0; for (i=0; i<k; i++) ++mas[i]; } int sum(int *mas, int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }
(1) 10
(2) 14
(3) 15
Приведенная программа использует указатель на функции, которые выполняют различные действия: вычисление квадратного корня, вычисление синуса, вычисление тангенса: int main (void) { double (*pFunc) (double); int c = 1; double y; while(1) { printf("Выберите функцию (0-выход): 1-sqrt, 2-sin, 3-tan\n"); scanf("%d", &c); switch(c) { case 1: pFunc = sin; break; case 2: pFunc = sqrt; break; case 3: pFunc = tan; break; case 0: return; default: continue; } y = pFunc(1.1); printf("f(1.1) = %.2f\n", y); } return 0; } Какое вычисление будет выполнено в том случае, если пользователь в запросе выбора функции задаст число 1?
(1) sqrt(1.1)
(2) sin(1.1)
(3) tan(1.1)
Задан файл, содержащий список названий и стоимости мониторов: filesЧему будет равно значение переменной str в результате выполнения приведенной программы? int main( void ) { FILE *stream; char str[81]; int result; if ( fopen_s( &stream, "g:\\list.txt", "r+" ) != 0 ) { printf( "The file list.txt was not opened\n" ); return -1; } result = fseek( stream, -24L, SEEK_END); if( result ) perror( "Fseek failed" ); else { fgets( str, 80, stream ); printf( "%s", str ); } fclose( stream ); return 0; }
(1) 1. NEC MultiSync PA241W - 36600 rub.
(2) NEC MultiSync PA241W - 36600 rub.
(3) 4. BenQ G2220HD - 4530 rub.
(4) BenQ G2220HD - 4530 rub.
Какой файл будет создан в результате выполнения приведенной программы? int main (void) { struct student { char *name; char *surname; int group; int ses[5]; double av; struct student *p; } st; FILE *fp; int i, sum = 0; st.name = "Ivan"; st.surname = "Ivanov"; st.group = 1024; st.ses[0] = 5; st.ses[1] = 4; st.ses[2] = 5; st.ses[3] = 5; st.ses[4] = 5; for (i=0; i<5; i++) sum +=st.ses[i]; st.av = sum/5; if ((fp = fopen("g:\\marks.txt", "w+t")) == 0) printf("Open file error"); else { fprintf(fp, "Name: %s %s\n", st.surname, st.name); fprintf(fp, "Group: %d\n", st.group); fprintf(fp, "Average mark: %.2f\n\n", st.av); fclose(fp); }; return 0; }
(1) files
(2) files
(3) files
В результате выполнения какой программы на экран будет выведена строка penny nickel dime quarter=100 half_dollar dollar?
(1) int main(void) { enum coin { penny, nickel, dime, quarter=100, half_dollar, dollar}; enum coin money; printf("%d ", penny); printf("%d ", nickel); printf("%d ", dime); printf("%d ", quarter); printf("%d ", half_dollar); printf("%d ", dollar); return 0; }
(2) int main(void) { enum coin { penny, nickel, dime, quarter, half_dollar, dollar}; enum coin money; printf("%d ", penny); printf("%d ", nickel); printf("%d ", dime); printf("%d ", quarter); printf("%d ", half_dollar); printf("%d ", dollar); return 0; }
(3) int main(void) { enum coin { penny, nickel, dime, quarter, half_dollar=101, dollar}; enum coin money; printf("%d ", penny); printf("%d ", nickel); printf("%d ", dime); printf("%d ", quarter); printf("%d ", half_dollar); printf("%d ", dollar); return 0; }
(4) ни в одном из приведенных случаев
Задана программа, в которой реализовано три функции: Init - функция инициализации структуры, Print - функция вывода структуры на экран, Modify - функция изменения полей структуры: typedef struct { char fio[30]; char phone[20]; int age; } note; note Init(char*, char*, int); void Print(note*); void Modify(note); int main(void) { note n[3], *pn; char *strName[3] = {"Ivanov I.", "Pertov P.", "Sidorov S."}; char *strPhone[3] = {"12-34-56", "78-90-12", "34-56-78"}; int i, age = 25; for (i=0; i<3; i++) { n[i] = Init(strName[i], strPhone[i], age+i); pn = &n[i]; Print(pn); } Modify(n[0]); pn = &n[0]; Print(pn); return 0; } note Init(char* f, char* p, int a) { note n, *pn; pn = &n; strcpy(pn->fio, f); strcpy(pn->phone, p); pn->age = a; return n; } void Print(note *pn) { printf("\nName: %s", pn->fio); printf("\nPhone: %s", pn->phone); printf("\nAge: %d\n", pn->age); } void Modify(note n) { strcpy(n.fio, "Vasiliev V."); strcpy(n.phone, "89-01-23"); n.age = 30; } Какие функции соответсвуют поставленной задаче?
(1) Init
(2) Print
(3) Modify
Чему будет равно значение переменной c после выполнения приведенной программы? int main(void) { struct test { unsigned int a : 2; unsigned int b : 8; }; int c; struct test t; t.b = 255; t.a = 3; c = t.b | t.a; printf("c = %d\n", c); return 0; }
(1) 0
(2) 63
(3) 252
(4) 255
Какой спецификатор используется для создания переменных, значение которых сохраняется в регистре центрального процессора, а не в памяти?
(1) auto
(2) static
(3) extern
(4) register
Что произойдет при выполнении программы? int summa(int N, int a[6]); int main() { int i,n; int a[6] = {8, 65, 10, 2, 4, 1}; n = sizeof(a)/sizeof(a[0]); printf("Сумма: %d", summa(n-1, a)); } int summa(int N, int a[6]) { if (N==0) return a[0]; else return a[N]+summa(N-1, a); }
(1) вычисление суммы элементов массива
(2) ошибка при вычислении значения переменной n
(3) аварийное завершение работы программы
Ниже приведен фрагмент условного включения различных версий заголовочного файла: #if VERSION == 1 #define INCFILE "vers1.h" #elseif VERSION == 2 #define INCFILE "vers1.h" #else #define INCFILE "versN.h" #endif #include INCFILE Какие из используемых в заданном фрагменте директив относятся к директивам условной компиляции?
(1) #if
(2) #define
(3) #elseif
(4) #else
(5) #endif
(6) #include
В результате выполнения какого программного кода после ввода пользователем Иван Иванов, 30 будет выведено сообщениеПриятно познакомиться, Иван Иванов!?
(1) char FirstName[100], LastName[100]; int Age; printf("Введите Ваши имя, фамилию и возраст: \n"); scanf("%s %s %d", FirstName, LastName, &Age); printf("Приятно познакомиться, %s %s!\n", FirstName, LastName);
(2) char FirstName[100], LastName[100]; int Age; printf("Введите Ваши имя, фамилию и возраст: \n"); scanf("%[^,]s %s %d", FirstName, LastName, &Age); printf("Приятно познакомиться, %s %s!\n", FirstName, LastName);
(3) char FirstName[100], LastName[100]; int Age; printf("Введите Ваши имя, фамилию и возраст: \n"); scanf("%s %[^,]s %d", FirstName, LastName, &Age); printf("Приятно познакомиться, %s %s!\n", FirstName, LastName);
Что делает приведенная программа? int main(int argc, char *argv[]) { int t, i; for(t=0; t<argc; ++t) { i = 0; while(argv[t][i]) { putchar(argv[t][i]); ++i; } printf("\n"); } return 0; }
(1) посимвольно выводит все аргументы, с которыми ее вызвали
(2) построчно выводит все аргументы, с которыми ее вызвали
(3) посимвольно выводит все аргументы, кроме последнего, с которыми ее вызвали
(4) построчно выводит все аргументы, кроме последнего, с которыми ее вызвали
В результате выполнения какого фрагмента кода на экран будет выведена таблица чисел от 1 до 9 и их квадратов?
(1) int x, n = 1; while (n<10) { x = n*n; printf("%d %d\n", n, x); n++; }
(2) int x, n = 1; while (n<=10) { x = n*n; printf("%d %d\n", n, x); }
(3) int x, n; for (n=1; n<9; n++) { x = n*n; printf("%d %d\n", n, x); }
В какой программе ситуация деления на нуль обрабатывается некорректно?
(1) int a, b, res; char op; int f = 1; printf("Введите 1й операнд: "); scanf("%d", &a); printf("Введите знак операции: "); scanf("%s", &op); printf("Введите 2й операнд: "); scanf("%d", &b); switch (op) { case '+': res = a+b; break; case '-': res = a-b; break; case '*': res = a*b; break; case '/': res = a/b; break; default: printf("Неизвестная операция"); f = 0; } if (f) printf ("Результат: %d", res);
(2) int a, b, res; char op; int f = 1; printf("Введите 1й операнд: "); scanf("%d", &a); printf("Введите знак операции: "); scanf("%s", &op); printf("Введите 2й операнд: "); scanf("%d", &b); switch (op) { case '+': res = a+b; break; case '-': res = a-b; break; case '*': res = a*b; break; case '/': switch (b) { case 0: printf("Деление на 0!\n"); default: res = a/b; } break; default: printf("Неизвестная операция 111"); f = 0; } if (f) printf ("Результат: %d 222", res);
(3) int a, b, res; char op; int f = 1; printf("Введите 1й операнд: "); scanf("%d", &a); printf("Введите знак операции: "); scanf("%s", &op); printf("Введите 2й операнд: "); scanf("%d", &b); switch (op) { case '+': res = a+b; break; case '-': res = a-b; break; case '*': res = a*b; break; case '/': switch (b) { case 0: printf("Деление на 0!\n"); break; default: res = a/b; } break; default: printf("Неизвестная операция 111"); f = 0; } if (f) printf ("Результат: %d 222", res);
Какое утверждение является верным для приведенной программы? #include <stdio.h> #define N 11 int main() { int i; int arr[N][2]; for (i=1; i<N; i++) { arr[i][1] = i; arr[i][2] = i*i; } for (i=1; i<N; i++) printf("%d,%d\n", arr[i][1], arr[i][2]); return 0; }
(1) программа выводит на экран числа от 1 до 10 и их квадраты
(2) программа выводит на экран квадраты чисел от 1 до 9
(3) при выполнении программы возникнет ошибка в связи с выходом за границы массива
Аналогом какой стандартной функции является приведенный фрагмент кода? int i = 0, k = 0; char str1[10] = "Test"; char str2[10] = "Test1"; if (strlen(str1)>(strlen(str2))) k = 1; if (strlen(str1)<(strlen(str2))) k = -1; if (strlen(str1)==(strlen(str2))) while (str1[i]!='\0') { if (str2[i]!=str1[i]) { k = -1; break; } i++; }
(1) strcpy(str1,str2);
(2) strstr(str1,str2);
(3) strcmp(str1,str2);
Чему будет равно значение переменной str2 после выполнения приведенной программы? #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1; ptr2 = str2; while (ptr1>=str1) { if (ptr1<str1) *ptr2 = '\0'; *ptr2 = *ptr1; ptr1--; ptr2++; } printf("str2 = %s\n", str2); return 0; }
(1) в переменную str2 будет скопирована введенная пользователем строка str1
(2) в переменную str2 будет в обратном порядке скопирована введенная пользователем строка str1
(3) в переменную str2 будет скопирован первый символ строки str1
Какая программа вычисляет сумму всех нечетных элементов за исключением элементов первой строки?
(1) int m[][5] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}}; int *ptr; int i, j, n, k, sum = 0; n = sizeof(m)/sizeof(m[0]); k = sizeof(m[0])/sizeof(m[0][0]); ptr = &m[1][0]; printf("n = %d\n", n); printf("k = %d\n", k); for (i=0; i<(n*k)-k; i++) { if (!(*(ptr+i)%2)) sum += *(ptr+i);
(2) int m[][5] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}}; int *ptr; int i, j, n, k, sum = 0; n = sizeof(m)/sizeof(m[0]); k = sizeof(m[0])/sizeof(m[0][0]); ptr = &m[1][1]; printf("n = %d\n", n); printf("k = %d\n", k); for (i=0; i<(n*k)-k; i++) { if (*(ptr+i)%2) sum += *(ptr+i);
(3) int m[][5] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}}; int *ptr; int i, j, n, k, sum = 0; n = sizeof(m)/sizeof(m[0]); k = sizeof(m[0])/sizeof(m[0][0]); ptr = &m[1][0]; printf("n = %d\n", n); printf("k = %d\n", k); for (i=0; i<(n*k)-k; i++) { if (*(ptr+i)%2) sum += *(ptr+i);
В приведенной программе выполняется перераспределение памяти для увеличения размерности массива: #include <stdio.h> #include <stdlib.h> #define N 10 int main(void) { int i; int *arr = (int *)malloc(N*sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in calloc() function. Press any key: "); _getch(); exit(1); }; for (i=0; i<N; i++) { arr[i] = i+1; printf("arr[%d] = %d\n", i, arr[i]); } arr = (int *)realloc(arr, (N+2)*sizeof(int)); if (!arr) { printf("\nERROR! Out of memory in realloc() function. Press any key: "); _getch(); exit(1); }; for (i=N; i<N+2; i++) { arr[i] = i+1; printf("arr[%d] = %d\n", i, arr[i]); } free(arr); return 0; } Какие изменения необходимо внести в программу для ее корректной работы?
(1) для корректной работы программы не требуются изменения
(2) для выделения памяти для хранения массива всегда должна использоваться функция calloc(N, sizeof(int))
(3) добавление новых элементов в массив должно выполняться до перераспределения памяти
Необходимо написать функцию, которая будет вычислять сумму всех элементов двухмерного массива. В какой программе вызов функции sum выполняется неверно?
(1) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(a, n, m); printf("Сумма элементов а: %d\n", s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }
(2) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(a[0][0], n, m); printf("Сумма элементов а: %d\n", s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }
(3) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(&a[0][0], n, m); printf("Сумма элементов а: %d\n", s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }
Что произойдет при выполнении приведенной программы, если пользователь задаст номер алгоритма 9? void PuzSortInc (int*, int ); void PuzSortDec (int*, int); int main (void) { int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7}; int i, n, alg; void (*pFun) (int*, int) = NULL; n = sizeof(A)/sizeof(A[0]); printf("Исходный массив: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); printf("\nВыберите алгоритм сортировки (1 - \"методом пузырька\" по возрастанию,\ 2 - \"методом пузырька\" по убыванию: "); scanf("%d", &alg); switch (alg) { case 1: pFun = PuzSortInc; break; case 2: pFun = PuzSortDec; break; default: printf("ERROR! Такого алгоритма не определено!"); } if (pFun) { pFun(A,n); printf("\nSorted array: "); for (i = 0; i < n; i++) printf(" %3d", A[i]); }; return 0; } void PuzSortInc (int* arr, int size) { int i, j, buf; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] > arr[j + 1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } } } } void PuzSortDec (int* arr, int size) { int i, j, buf; for (i = 0; i < size - 1; i++ ) { for (j = 0; j < size - 1; j++) { if (arr[j] < arr[j + 1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } } } }
(1) будет выведено сообщение об ошибке ERROR! Такого алгоритма не определено!, и программа корректно завершит свою работу
(2) вместо отсортированного массива будет выведен изначальный массив, так как никаких изменений в нем не произойдет
(3) произойдет сбой выполнения программы
Чему будет равно значение переменной m в результате выполнения приведенной программы? int main(void) { FILE *fp; char str[30] = "Lection 11"; int k, l, m; if((fp=fopen("g:\\test.txt", "wt+"))==NULL) { printf("Ошибка при открытии файла.\n"); exit(1); } k = fwrite(str, sizeof(char), strlen(str)-3, fp); rewind(fp); l = fread(str, sizeof(char), sizeof(str)/sizeof(char), fp); m= l - k; fclose(fp); return 0; }
(1) 0
(2) 27
(3) при выполнении программы возникнет ошибка при попытке чтения из файла большего количества символов, чем было записано
Необходимо написать программу, которая позволит ввести с клавиатуры данные о поездах. Также в программе должен быть предусмотрен поиск по пункту назначения поезда. Какая программа не выполняет поставленную задачу?
(1) int main (void) { struct train { char *nazn; int numb; char *time; } tr[3]; int i = 0, sum = 0, ch=0; char str[10], search[10]; while(ch!=121) { printf("\nEnter information about train (Q - quit): \n"); printf("Enter destination of the train: "); gets(tr[i].nazn); printf("Enter number of the train: "); gets(str); tr[i].numb = atoi(str); printf("Enter time of scheduled departure: "); gets(tr[i].time); ++i; printf("Quit? (y/n): "); ch = _getche(); }; printf("\n\nEnter train destination: "); gets(search); for (i=0; i<3; i++) { if (strcmp(tr[i].nazn,search)==0) { printf("\n\tTrain number: %d", tr[i].numb); printf("\n\tTime: %s", tr[i].time); } } if (i>=3) printf("There is no train to this destination"); return 0; }
(2) int main (void) { struct train { char nazn[40]; int numb; char time[10]; } tr[3]; int i = 0, sum = 0, ch=0; char str[10], search[10]; while(ch!=121) { printf("\nEnter information about train (Q - quit): \n"); printf("Enter destination of the train: "); gets(tr[i]->nazn); printf("Enter number of the train: "); gets(str); tr[i]->numb = atoi(str); printf("Enter time of scheduled departure: "); gets(tr[i]->time); ++i; printf("Quit? (y/n): "); ch = _getche(); }; printf("\n\nEnter train destination: "); gets(search); for (i=0; i<3; i++) { if (strcmp(tr[i]->nazn,search)==0) { printf("\n\tTrain number: %d", tr[i]->numb); printf("\n\tTime: %s", tr[i]->time); } } if (i>=3) printf("There is no train to this destination"); return 0; }
(3) int main (void) { struct train { char nazn[40]; int numb; char time[10]; } tr[3]; int i = 0, sum = 0, ch=0; char str[10], search[10]; while(ch!=121) { printf("\nEnter information about train (Q - quit): \n"); printf("Enter destination of the train: "); gets(tr[i].nazn); printf("Enter number of the train: "); gets(str); tr[i].numb = atoi(str); printf("Enter time of scheduled departure: "); gets(tr[i].time); ++i; printf("Quit? (y/n): "); ch = _getche(); }; printf("\n\nEnter train destination: "); gets(search); for (i=0; i<3; i++) { if (strcmp(tr[i].nazn,search)==0) { printf("\n\tTrain number: %d", tr[i].numb); printf("\n\tTime: %s", tr[i].time); } } if (i>=3) printf("There is no train to this destination"); return 0; }
Определите, возникнут ли ошибки при выполнении приведенной программы? Если возникнут, объясните, почему? int main(void) { enum coin { penny, nickel, dime, quarter=100, half_dollar, dollar}; enum coin money; char name[][12]={ "penny", "nickel", "dime", "quarter", "half_dollar", "dollar" }; money = half_dollar; printf("%s", name[money]); return 0; }
(1) возникнет ошибка, так как при обращении к элементу массива name[money] необходимо указать целочисленный индекс
(2) возникнет ошибка, так как в операции присваивания значения переменной money отсутсвуют кавычки
(3) возникнет ошибка, так при обращении к элементу массива name[money] возникнет выход за границы массива
(4) при выполнении программы не возникнет ошибок
В приведенной программе функция Copy выполняет копирование одной структуры типа sale в другую и возвращает структуру этого же типа: typedef struct sale_struct { char *title; int price; } sale; sale Copy(sale); int main(void) { sale s1,s2; struct sale_struct s3, s4; s1.title = "Book"; s1.price = 200; s3.title = "Cake"; s3.price = 60; return 0; } sale Copy(sale s) { sale s1; s1 = s; return s1; } Какие из перечисленных вызов функции Copy являются верными?
(1) s2 = Copy(s1);
(2) s4 = Copy(s3);
(3) s1 = Copy(s3);
В каком случае выполняется операция побитового включающего ИЛИ (|)?
(1) исходное число: 1001 0010 1100 0100 операнд-маска: 1000 0000 0000 0011 результат: 0001 0010 1100 0111
(2) исходное число: 1001 0010 1100 0100 операнд-маска: 1111 0000 0000 0000 результат: 1001 0000 0000 0000
(3) исходное число: 1001 0010 1100 0100 операнд-маска: 1000 0000 0000 0011 результат: 1001 0010 1100 0111
Каким образом должен быть подключен файл some.h, находящийся на два уровня выше, чем главный файл?
(1) #include "..\some.h"
(2) #include "..\..\some.h"
(3) #include "..\..\..\some.h"
Какие утверждения являются неверными?
(1) при рекурсивном вызове функции все объекты, связанные с функцией, создаются заново
(2) при рекурсивном вызове функции создается новая копия ее кода
(3) при рекурсивном вызове функции создается новая копия значений ее параметров
В каком случае директива #define определяет символы, управляющие условной компиляцией?
(1) #define VERSION 1
(2) #define VASYA "Василий Иванович"
(3) #define MAX (x, y) ((x)>(y) ? (x) : (y))
(4) #if VERSION == 1 #define INCFILE "vers1.h" #elseif VERSION == 2 #define INCFILE "vers1.h" #else #define INCFILE "versN.h" #endif #include INCFILE
Какой дипазон значений имеет тип int на 32-разрядных платформах?
(1) от –32768 до 32767
(2) от 0 до 65535
(3) от –2147483648 до 2147483647
(4) от 0 до 4294967295
При какой команде запуска заданной программы из командной строки значение argc будет равно 1? int main(int argc, char *argv[]) { int t; for(t=0; t<argc; ++t) printf("%s\n", argv[t]); return 0; }
(1) ProgramName.exe
(2) ProgramName.exe 1
(3) ProgramName.exe 1 2
Игра "Угадай число" заканчивавается, если задуманное число угадано, или количество попыток достигло определенного значения, например, 10. Какой фрагмент кода реализует эту игру неверно, если c - число попыток, n - задуманное число?
(1) int c = 0, n = 100, m; do { printf("Ваш вариант: "); scanf("%d", &m); c++; } while ((n!=m) && (c<=10))
(2) int c = 0, n = 100, m; do { printf("Ваш вариант: "); scanf("%d", &m); c++; } while ((n!=m) && (c<10))
(3) int c = 0, n = 100, m; do { printf("Ваш вариант: "); scanf("%d", &m); c++; } while ((n!=m) || (c<=10))
В результате выполнения какого фрагмента кода на экран будет выведено больше одного числа?
(1) int n = 1; while (n<=10) { if (n%2) printf("%d\n", n); n++; return; printf("%d\n", n); n++; }
(2) int n = 1; while (n<=10) { if (n%2) printf("%d\n", n); n++; continue; printf("%d\n", n); n++; }
(3) int n = 1; while (n<=10) { if (n%2) printf("%d\n", n); n++; break; printf("%d\n", n); n++; }
Что делает приведенная программы? #include <stdio.h> #define N 5 #define M 2 int main() { int i, j, sum=0; int arr[N][2] = {0,1,2,3,4,5,6,7,8,9}; for (i=0; i<N; i++) { for (j=0; j<M; j++) if (!(arr[i][j]%2)) sum+=arr[i][j]; } printf("sum = %d\n", sum); return 0; }
(1) вычисляет сумму всех элементов массива
(2) вычисляет сумму четных элементов массива
(3) вычисляет сумму нечетных элементов массива
Используя таблицу кодов ASCII, определите, что будет выведено на экран в результате выполнения приведенной программы? #include <stdio.h> #define N 7 int main() { int i, j, k, buf; char arr[N] = "Lection"; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { if (arr[j] < arr[j+1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } }; for (k=0; k<N; k++) printf("%c ", arr[k]); return 0; }
(1) L c e i n o t
(2) c e i n o t L
(3) t o n i e L
(4) L t o n i e
Почему к указателю типа void* неприменима операция разыменования?
(1) потому что не существует автоматического преобразования от void* к указателю на другой тип
(2) потому что неизвестен тип, на который он ссылается
(3) потому что указатель void* может указывать только на функцию
Какие утверждения являются верными для приведенного фрагмента кода? int x = 100, *ptr1, **ptr2; ptr1 = &x; ptr2 = &ptr1;
(1) указатель ptr1 содержит адрес переменной x
(2) указатель ptr2 содержит адрес переменной x
(3) для получения значения переменной x необходимо выполнить операцию *ptr1
(4) для получения значения переменной x необходимо выполнить операцию *ptr2
При какой инициализации указателя int **m на массив указателей необходимо выполнить освобождение памяти приведенным способом? for (i=0; i<5; i++) free(m[i]); free(m);
(1) int i; int **m; m = (int **)calloc(3,sizeof(int *)); for (i=0; i<3; i++) m[i] = (int *)calloc(5,sizeof(int));
(2) int i; int **m; m = (int **)calloc(5,sizeof(int *)); for (i=0; i<5; i++) m[i] = (int *)calloc(3,sizeof(int));
(3) int i; int **m; m = (int **)calloc(10,sizeof(int *)); for (i=0; i<10; i++) m[i] = (int *)calloc(5,sizeof(int));
В какой функции содержится ошибка?
(1) void fun(int *arr, int n) { int i, s=0; for (i=0; i<n; i++) arr[i] *= 2; return s; }
(2) int* fun() { int a = 10; return &a; }
(3) int fun(int *arr, int n) { int i, s=0; for (i=0; i<n; i++) s+=arr[i]; return s; }
Какая переменная pFun способна указывать только на функцию, которая возвращает целое число и требует целое число в качестве параметра?
(1) int (*pFun) (int, int)
(2) int (*pFun) (int)
(3) void (*pFun) (int, int)
(4) double (*pFun) (double, double)
Задан файл, содержащий список названий и стоимости мониторов: filesКакой файл будет получен в результате выполнения приведенной программы? int main( void ) { FILE *stream; char str[81]; int result; if ( fopen_s( &stream, "g:\\list.txt", "r+" ) != 0 ) { printf( "The file list.txt was not opened\n" ); return -1; } result = fseek( stream, 0L, SEEK_END); if( result ) perror( "Fseek failed" ); else { fputs( "\n5. NEC MultiSync EX231W - 10490 rub.", stream ); printf( "%s", str ); } fclose( stream ); return 0; }
(1) files
(2) files
(3) files
В каком случае структура верно определена с использованием ключевого слова typedef?
(1) struct monitor_info { char model[40]; int price; }; typedef struct monitor_info monitor; monitor a, *p, b[5];
(2) struct monitor_info { char model[40]; int price; }; typedef struct monitor_info *monitor; monitor a, *p, b[5];
(3) typedef struct { char model[40]; int price; } monitor; monitor a, *p, b[5];
При каких значениях переменной error в результате выполнения приведенной программы на экран будет выведено сообщение Возникла ошибка преобразования (ERR_CONVERT)? int main(void) { typedef enum { ERR_READ, ERR_WRITE, ERR_CONVERT} Err; Err error; switch (error) { case ERR_READ: printf("Возникла ошибка чтения (ERR_READ)\n"); break; case ERR_WRITE: printf("Возникла ошибка записи (ERR_WRITE)\n"); break; case ERR_CONVERT: printf("Возникла ошибка преобразования (ERR_CONVERT)\n"); break; default: printf("Возникла неизвестная ошибка\n"); break; }; return 0; }
(1) error = 1;
(2) error = 2;
(3) error = ERR_CONVERT;
Необходимо написать функцию копирования значений всех полей одной структуры заданного типа в другую: typedef struct sale_struct { char *title; int price; } sale; Для выполнения поставленной задачи была создана функция: sale Copy(char* t, int p) { sale s1; s1.title = t; s1.price = p; return s1; } Какие утверждения являются верными?
(1) функция Copy выполняет поставленную задачу
(2) функция Copy не содержит ошибок, но не выполняет поставленную задачу
(3) при вызове функии Copy в нее нужно передать структуру типа sale_struct
Значение какой переменной будет наибольшим? a = 6 & 5; b = 6 | 5; c = 6 ^ 5;
(1) a
(2) b
(3) c
Какие утверждения являются неверными?
(1) класс статической памяти используется для улучшения ясности алгоритма, реализованного в программе
(2) класс статической памяти используется для улучшения читаемости и ясности текста программы
(3) класс статической памяти используется для исключения конфликта имен
В функции main выполняется вызов рекурсивной функции fact(): long result=fact(3). Вызовы функции выполняются в приведенной последовательности: filesКаким образом должна выглядеть функция fact()?
(1) long fact (int n) { if ( n<1 ) return 1; else return n*fact(n-1); }
(2) long fact(long n) { int i; long m = 1; if (n==0 || n==1) m = 1; else for (i=1; i<=n; i++) m *= i; return m; }
(3) long fact (int n) { return n*fact(n-1); }
Для чего используется приведенный фрагмент кода? #ifndef HEADER_INCLUDED #include "arr.h" #define HEADER_INCLUDED #enif
(1) для подключения файла arr.h при каждой компиляции
(2) для отключения файла arr.h при каждой компиляции
(3) для обеспечения подключения файла arr.h только один раз
Какие утверждения являются верными?
(1) объект типа int всегда занимает 16 бит
(2) объект типа char всегда занимает 8 бит
(3) допустимый диапазон для всех типов данных не зависит от разрядности процессора
При каком запуске программы echo через командную строку аргумент argv будет представлен заданным образом?files
(1) echo "Hello, world!"
(2) echo Hello, world!
(3) echo "Hello," "world!"
При вводе каких значений выполнение цикла не будет завершено? int num; do { scanf("%d", &num); } while (num > 100);
(1) 200
(2) -100
(3) 100
(4) 120
Для каких значений переменной i в результате выполнения приведенного фрагмента кода знак квадрата числа будет противоположен знаку самого числа? int isqrd = 0, i; printf("Введите число: "); scanf("%d", &i); isqrd = (!(i%2) && i>0) ? i*i : -(i*i); printf("%d в квадрате %d", i, isqrd);
(1) -1
(2) 4
(3) 5
Какое утверждение будет истинным после выполнения приведенного фрагмента кода? int size1, size2, size3; int arr[5][2] = {0,1,2,3,4,5,6,7,8,9}; size1 = sizeof(arr)/sizeof(arr[0][0]); size2 = sizeof(arr)/sizeof(arr[0]); size3 = sizeof(arr);
(1) size3 > size2 > size1
(2) size2 > size3
(3) size1 < size3
Необходимо написать программу, в которой формирование строки будет выполняться через посимвольный ввод до тех пор, пока пользователь не нажмет клавишу Enter. После завершния ввода пользователя введенная строка должна быть выведена на экран. Определите, удовлетворяет ли приведенная программа поставленной задаче? Если не удовлетворяет, объясните, почему? #include <stdio.h> #include <conio.h> #define N 10 int main() { int i=0; char arr[N] = ""; printf("Last Name: "); while (i<N) { arr[i] = _getche(); if (arr[i]==13) break; i++; }; printf("\nYou have entered Last Name: %s", arr); return 0; }
(1) программа удовлетворяет поставленной задаче
(2) программа не удовлетворяет поставленной задаче, так как в сформированной строке отсутсвует символ окончания строки
(3) программа не удовлетворяет поставленной задаче, так как в условии цикла не выполняется проверка кода введенного символа (есть только проверка длины строки)
(4) программа не удовлетворяет поставленной задаче, так как неверно задано условие проверки кода введенного символа
Какой фрагмент кода не содержит ошибок в использовании константного указателя?
(1) int lec = 7, qst = 11; int *const plec = &lec; int *pqst; pqst = &qst; plec++;
(2) int lec = 7, qst = 11; int *const plec = &lec; int *pqst; pqst = &qst; (*plec)++; printf("Number of the next lection is %d\n", lec );
(3) int lec = 7, qst = 11; int *const plec; int *pqst; pqst = &qst; plec = &lec;
Задан фрагмент кода: int m[][5] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}}; int *ptr; int i, j, n, k, el; n = sizeof(m)/sizeof(m[0]); k = sizeof(m[0])/sizeof(m[0][0]); ptr = &m[0][0]; Чему будет равно значение элемента массива m, на который будет указывать указатель ptr+3?
(1) 3
(2) 4
(3) 11
(4) 12
Под какой массив выделяется память в приведенном фрагменте кода? int (*p)[10]; p = malloc(40*sizeof(int));
(1) под одномерный массив размерностью 10
(2) под одномерный массив размерностью 40
(3) под двухмерный массив размерностью 4х10
(4) под двухмерный массив размерностью 10х4
В какой программе количество вызовов функций (как стандартных, так и пользовательских) с переменным числом аргументов наибольшее?
(1) #include <stdio.h> #include <stdarg.h> int average(int first, ... ); int main( void ) { int x = average(2, 3, 4, -1); int y = average(5, 3, -1); return 0; } int average( int first, ... ) { int count = 0, sum = 0, i = first; va_list marker; va_start(marker, first); while( i != -1 ) { sum += i; count++; i = va_arg(marker, int); } va_end(marker); return( sum ? (sum / count) : 0 ); }
(2) #include <stdio.h> #include <conio.h> int main(void) { void printMessage (void); printMessage(); printf("\nPress any key: "); _getch(); return 0; } void printMessage (void) { printf("Function for Lection 10\n"); return; printf("123\n"); }
(3) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(&a[0][0], n, m); printf("Результат вычисления суммы элементов\n"); printf("Сумма элементов а[%d][%d] = %d\n", n, m, s); printf("Число строк: %d\n", n); printf("Число столбцов: %d\m", m); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }
Функция xgets() в упрощенном виде демонстрирует работу стандартной функции gets(): char *xgets(char *s) { char ch, *p; int t; p = s; for(t=0; t<80; ++t){ ch = getchar(); switch(ch) { case '\n': s[t] = '\0'; return p; case '\b': if(t>0) t--; break; default: s[t] = ch; } } s[79] = '\0'; return p; } Каким образом можно вызвать эту функцию?
(1) char str[10]=""; printf("str = %s", xgets(str));
(2) char str[10]=""; str = xgets(str); printf("str = %s", str);
(3) char str[10]=""; char *p; p = xgets(str); printf("str = %s", str);
(4) char str[10]=""; xgets(str); printf("str = %s", str);
Какая программа выводит на экран все строки из файла?
(1) int main( void ) { FILE *stream; char str[31] = ""; if( fopen_s( &stream, "g:\\list.txt", "r" ) != 0 ) printf( "The file list.txt was not opened\n"); else { while (feof(stream)) { fgets(str, 31, stream); printf("%s", str); } printf("\n"); } return 0; }
(2) int main( void ) { FILE *stream; char str[31] = ""; if( fopen_s( &stream, "g:\\list.txt", "r" ) != 0 ) printf( "The file list.txt was not opened\n"); else { do { fgets(str, 31, stream); printf("%s", str); } while (feof(stream)); printf("\n"); } return 0; }
(3) int main( void ) { FILE *stream; char str[31] = ""; if( fopen_s( &stream, "g:\\list.txt", "r" ) != 0 ) printf( "The file list.txt was not opened\n"); else { for( ; !feof(stream); ) { fgets(str, 31, stream); printf("%s", str); } printf("\n"); } return 0; }
Какая ошибка содержится в приведенной программе? int main (void) { typedef struct { char nazn[40]; int numb; char time[10]; } train, train_info; train_info ti[3]; train tr[3]; int i = 0, sum = 0, ch=0; char str[10], search[10]; while(ch!=121) { printf("\nEnter information about train (Q - quit): \n"); printf("Enter destination of the train: "); gets(tr[i].nazn); printf("Enter number of the train: "); gets(str); tr[i].numb = atoi(str); printf("Enter time of scheduled departure: "); gets(tr[i].time); ++i; printf("Quit? (y/n): "); ch = _getche(); }; printf("\n\nEnter train destination: "); gets(search); for (i=0; i<3; i++) { if (strcmp(tr[i].nazn,search)==0) { printf("\n\tTrain number: %d", tr[i].numb); printf("\n\tTime: %s", tr[i].time); } } if (i>=3) printf("There is no train to this destination"); return 0; }
(1) программа не содержит ошибок
(2) неверно используется ключевое слово typedef
(3) выполняется неверное обращение к полям структуры
(4) неверно объявлен массив tr
Что будет выведено на экран в результате выполнения приведенной программы, если в запросе ввода номера месяца пользователь задаст число 2? int main (void) { enum month {january, february, march, april, may, june,july, august, september, october, november, december } aMonth; int days; printf("\n Enter the number of the month (1 - 12): "); scanf_s("%d", &aMonth); switch (aMonth) { case january: case march: case may: case july: case august: case october: case december: days = 31; break; case april: case june: case september: case november: days = 30; break; case february: days = 28; break; default: printf("\n\t Wrong number of the month\n"); days = 0; break; } if (days) printf("\n The number of days of the month: %d\n", days); if (aMonth == 2) printf("\n ... or 29 if it is a leap year\n"); return 0; }
(1) The number of days of the month: 31
(2) The number of days of the month: 30
(3) The number of days of the month: 28 ... or 29 if it is a leap year
Какие утверждения являются неверными?
(1) член структуры передается функции по ссылке
(2) член структуры передается функции по значению
(3) член структуры не может быть отдельно передан структуре
Чему будет равно значение переменной d в результате выполнения приведенного фрагмента кода? int d; int a = 10; int b = 15; a >>= 1; b <<= 1; d = a + b;
(1) 18
(2) 19
(3) 34
(4) 35
Файл second.h, расположенный на диске D:, содержит следующие описания переменных и функций: extern int x, y; extern char ch; void func22(void) { y = 100; } void func23(void) { x = y/10; ch = 'R'; } Каким образом файл second.h должен быть подключен для возможности использования описанных в нем переменных и функций в другом файле?
(1) #include <stdio.h> #include <conio.h> #include "D:\second.h"
(2) #include <stdio.h> #include <conio.h> #include <D:\second.h>
(3) #include <stdio.h> #include <conio.h> #include D:\second.h
В арифметической прогрессии каждый следующий член равен предыдущему, увеличенному на разность прогрессии: a{i} = a{i-1} + d. Приведенная программа содержит рекурсивную функцию для вычисления заданного члена арифметической прогрессии: int Sum(int x, int step, int n) { if (n==1) return(x); else return(Sum(x, step, n-1)+step); } int main() { int x, s, n; int pr; printf("Введите первый член, число элементов и разность прогрессии:"); scanf("%d %d %d", &x, &n, &s); <Вызов функции sum()> printf("pr = %d", pr); return 0; } Пользователь вводит данные для вычисления через пробел в следующей последовательности: первый член арифметической прогрессии, разность прогрессии, количестов элементов. Какая последовательность задания этих параметров является неверной для вызова рекурсивной функии sum()?
(1) pr = Sum(x, s, n);
(2) pr = Sum(s, x, n);
(3) pr = Sum(n, s, x);
Задана программа, в которой выполняется подключение файла arr.h: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <locale.h> #ifndef ARR #define ARR #include "arr.txt" #endif int main (void) { int i = 0 , j = 0, n; setlocale (LC_ALL, "rus"); printf("Введите количество человек (от 1 до 3): "); scanf("%d", &n); if (n<1 || n>3) { printf("Ошибка ввода данных. Нажмите любую клавишу: "); _getch(); exit(1); } #undef ARR #ifdef ARR for (i=0; i<n; i++) printf("%d. %s %s\n", i+1, names[i], surnames[i]); #endif return 0; } Содержание файла arr.h: char *names[] = {"Иван", "Пётр", "Илья"}; char *surnames[] = {"Иванов", "Пётров", "Ильин"}; Определите, будут ли выведены на экран сочетания имён и фамилий из файла arr.h при выполнении приведенной программы? Если не будут, то почему?
(1) имена и фамилии не будут выведены, так как используется директива #undef
(2) имена и фамилии не будут выведены, так как в программе допущена ошибка - директива #undef используется в теле функции main()
(3) имена и фамилии будут выведены на экран
Чему будет равен результат вычисления b - a, если переменные имеют заданные значения? int a = 2*SCHAR_MAX; int b = UCHAR_MAX;
(1) -1
(2) 0
(3) 1
Какие утверждения являются верными?
(1) в случае запуска программы echo Здравствуй, мир! количество аргументов argc равно 3
(2) аргумент argv представляет собой указатель на массив символьных строк, содержащих сами аргументы
(3) если argc равно 1, то в командной строке после имени программы задан 1 аргумент
Какой оператор цикла обычно используется в случаях, когда цикл требуется обязательно выполнить хотя бы один раз?
(1) for
(2) while
(3) do while
В каком случае на экран будут выведены только четные числа от 1 до 10?
(1) int n = 1; while (n<=10) { if (n%2) printf("%d\n", n); n++; printf("%d\n", n); n++; }
(2) int n = 1; while (n<=10) { if (!(n%2)) printf("%d\n", n); n++; continue; printf("%d\n", n); n++; }
(3) int n = 1; while (n<=10) { if (n%2) printf("%d\n", n); n++; continue; printf("%d\n", n); n++; }
Какой смысл приобретает переменная size2 после выполнения приведенного фрагмента кода? int size1, size2, size3; int arr[5][2] = {0,1,2,3,4,5,6,7,8,9}; size1 = sizeof(arr)/sizeof(arr[0][0]); size2 = sizeof(arr)/sizeof(arr[0]); size3 = sizeof(arr);
(1) определяет общее количество элементов в двумерном массиве
(2) определяет количечество подмассивов в двумерном массиве
(3) определяет общий размер массива в байтах
Какая программа определяет количество вхождений каждого символа в строку?
(1) #include <stdio.h> #include <conio.h> int main() { int n=0, i=0, j=0; char ch, str[30]=""; printf("Введите строку: "); scanf("%s", str); printf("Введите символ: "); ch = _getche(); for(i=0; i<strlen(str); i++) { for (j=0; j<strlen(str); j++) { if(str[j]==str[i]) n++; } printf("\n%c - %d", str[i], n); n = 0; i++; } printf("\n"); return 0; }
(2) #include <stdio.h> #include <conio.h> int main() { int n=0, i=0, j=0; char ch, str[30]=""; printf("Введите строку: "); scanf("%s", str); printf("Введите символ: "); ch = _getche(); for(i=0; i<strlen(str); i++) { for (j=0; j<strlen(str); j++) { if(str[j]==str[i]) n++; } printf("\n%c - %d", str[i], n); n = 0; } printf("\n"); return 0; }
(3) #include <stdio.h> #include <conio.h> int main() { int n=0, i=0; char ch, str[30]=""; printf("Введите строку: "); scanf("%s", str); printf("Введите символ: "); ch = _getche(); while(str[i]!='\0') { if(str[i]==ch) n++; i++; } return 0; }
Какое выражение нужно вставить в обозначенное место приведенного кода для того, чтобы значение переменной z было равно 0? int x = 10, y = 20, z; int *p1, *p2; p1 = &x; p2 = p1; <Выражение> z = (x==y) ? (x+y) : (y-x);
(1) x = y;
(2) p1 = &y;
(3) *p2 = y;
(4) переменная z никогда не примет значение 0
Каковы недостатки многоуровневой адресации?
(1) усложнение программы
(2) плохая читаемость программы
(3) увеличение вероятности возникновения ошибок
Какое утверждение является неверным?
(1) динамические переменные существуют от точки создания до явного освобождения памяти
(2) динамические переменные существуют от точки создания до конца работы операционной системы
(3) динамические переменные существуют от точки создания до конца программы