Главная / Программирование /
Программирование на языке C в Microsoft Visual Studio 2010 / Тест 12
Программирование на языке C в Microsoft Visual Studio 2010 - тест 12
Упражнение 1:
Номер 1
Что такое файл?
Ответ:
 (1) последовательность символов 
 (2) последовательность байтов, которая взаимно однозначно соответствует байтам на внешнем устройстве 
 (3) именованный объект, хранящий данные на каком-либо носителе 
Номер 2
Что такое текстовый поток?
Ответ:
 (1) последовательность символов 
 (2) последовательность байтов, которая взаимно однозначно соответствует байтам на внешнем устройстве 
 (3) именованный объект, хранящий данные на каком-либо носителе 
Номер 3
Что такое двоичный поток?
Ответ:
 (1) последовательность символов 
 (2) последовательность байтов, которая взаимно однозначно соответствует байтам на внешнем устройстве 
 (3) именованный объект, хранящий данные на каком-либо носителе 
Упражнение 2:
Номер 1
Какие объекты рассматриваются в языке С как файлы?
Ответ:
 (1) дисковый файл 
 (2) терминал 
 (3) принтер 
Номер 2
В каком случае файлы не закрываются?
Ответ:
 (1) в случае краха программы 
 (2) в случае нормального завершения работы программы 
 (3) в случае завершения программы путем вызова функции exit()
 
 (4) в случае завершения программы путем вызова функции abort()
 
Номер 3
В каком случае файлы автоматически закрываются?
Ответ:
 (1) в случае краха программы 
 (2) в случае нормального завершения работы программы 
 (3) в случае завершения программы путем вызова функции exit()
 
 (4) в случае завершения программы путем вызова функции abort()
 
Упражнение 3:
Номер 1
Файл g:\test.txt содержит две строки:
Чему будет равно значение переменной 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 
Номер 2
Файл g:\test.txt содержит две строки:
Чему будет равен символ 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'
 
Номер 3
Файл g:\test.txt содержит две строки:
Чему будет равен символ 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'
 
Упражнение 4:
Номер 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)('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) читает из файла сформированную строку и выводит ее на экран 
Номер 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" );
}
Ответ:
 
(1)  
 
(2)  
 
(3)  
 
(4)  
Номер 3
В результате выполнения какой программы будет получен приведенный файл?
Ответ:
 (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" );
}
 
Упражнение 5:
Номер 1
В каком случае выполняется пакетная запись массива в файл?
Ответ:
 (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;
}
 
Номер 2
В каком случае выполняется посимвольная запись массива в файл?
Ответ:
 (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;
}
 
Номер 3
Приведенная программа выводит заданную строку в файл:
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) в программе выполняется пакетный вывод символьного массива в файл 
Упражнение 6:
Номер 1
В каком случае при самом первом запуске программы в файл будет записан лог работы программы, содержащий описание всех выполненных в программе действий?
Ответ:
 (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);
}
 
Номер 2
В каком случае при первом запуске программы файл лога работы программы, содержащий описание всех выполненных в программе действий, не будет записан?
Ответ:
 (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);
}
 
Номер 3
В каком случае при первом запуске программы в файл будет записан лог работы программы, содержащий описание всех выполненных в программе действий?
Ответ:
 (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);
}
 
Упражнение 7:
Номер 1
Каким образом необходимо выполнить открытие файла для того, чтобы для каждого запуска программы сохранялся отдельный файл лога, содержащий описание всех действий, выполненных в программе (при условии, что программа запускается не более одного раза в минуту)?
#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" );
 
Номер 2
При каком способе открытия файла файл лога, содержащий описание всех действий, выполненных в программе не будет создан(при условии, что программа запускается не более одного раза в минуту)?
#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" );
 
Номер 3
Что произойдет при двух запусках программы в течение одной минуты?
#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 файл, в файле будут содержаться логи выполнения для последнего запуска программы 
Упражнение 8:
Номер 1
Каким будет значение переменной 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
 
Номер 2
Каким будет значение переменной 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
 
Номер 3
Каким будет значение переменной 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
 
Упражнение 9:
Номер 1
Задан файл, содержащий список названий и стоимости мониторов: В результате выполнения какой программы на экран будет выведена информация о пункте (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;
}
 
Номер 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, -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;
}
 
Номер 3
Задан файл, содержащий список названий и стоимости мониторов: Чему будет равно значение переменной 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.
 
Упражнение 10:
Номер 1
Сколько символов будет прочитано из файла функцией 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) при выполнении программы возникнет ошибка при попытке чтения из файла большего количества символов, чем было записано 
Номер 2
Чему будет равно значение переменной 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) при выполнении программы возникнет ошибка при попытке чтения из файла большего количества символов, чем было записано 
Номер 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) при выполнении программы возникнет ошибка при попытке чтения из файла большего количества символов, чем было записано 
Упражнение 11:
Номер 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, -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)  
 
(2)  
 
(3)  
Номер 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, 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)  
 
(2)  
 
(3)  
Номер 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, 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)  
 
(2)  
 
(3)  
Упражнение 12:
Номер 1
Какая программа выводит на экран все строки из файла?
Ответ:
 (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;
}
 
Номер 2
В результате выполнения какой программы на экран ничего не будет выведено?
Ответ:
 (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;
}
 
Номер 3
Какая программа выводит на экран все строки из файла?
Ответ:
 (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;
}