игра брюс 2048
Главная / Программирование / Программирование на языке 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 содержит две строки: 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 


Номер 2
Файл 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' 


Номер 3
Файл 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' 


Упражнение 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) files 

 (2) files 

 (3) files 

 (4) files 


Номер 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" ); }  


Упражнение 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
Задан файл, содержащий список названий и стоимости мониторов: 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; }  


Номер 2
Задан файл, содержащий список названий и стоимости мониторов: 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; }  


Номер 3
Задан файл, содержащий список названий и стоимости мониторов: 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. 


Упражнение 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)

 (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)

 (2) 27 

 (3) при выполнении программы возникнет ошибка при попытке чтения из файла большего количества символов, чем было записано 


Упражнение 11:
Номер 1
Задан файл, содержащий список названий и стоимости мониторов: 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 


Номер 2
Задан файл, содержащий список названий и стоимости мониторов: 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 


Номер 3
Задан файл, содержащий список названий и стоимости мониторов: 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 


Упражнение 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; }  




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