Охарактеризовать множество значений, которые могут принимать величины этого типа;
3. Опишите управляющие структуры, используемые в языке программирования С++.
Дать описание структуры выбора
if (логическое выражение)
оператор;
if( позвонят в дверь= =true)
Пойдем открывать;
Дать описание структуры повторения
Самый часто используемый цикл — это цикл for, его структура показана ниже:
for ( /*инициализация переменной; условие; изменение значения переменной*/ ) {
// тело цикла (тут находится код который будет повторяться)
Цикл while — очень простой цикл, вот его структура:
while ( /*условие*/ )
{
// тело цикл - тут находится код, который необходимо повторять
}
Есть еще один тип циклов — do while. Этот цикл полезен, когда необходимо выполнить код по крайней мере — 1 раз. Рассмотрим его структуру:
do {
// тело цикла
} while ( /*условие*/ );
Дать описание структуры множественного выбора
switch (ZNAC) { case -: x=y-z; break;
case +: x=y+z; break;
case *: x=y*z; break;
case /: x=y/z; break;
default: cout<<А калькулятор у меня только арифметический! Чего это вы тут такое левое нажимаете?; break; }
4. Опишите способы создания и обработки одномерных массивов на языке программирования С++
Дать определение массива
Массив это структура данных, представленная в виде группы ячеек одного типа, объединенных под одним единым именем. Массивы используются для обработки большого количества однотипных данных. Имя массива является указателем, что такое указатели расскажу немного позже. Отдельная ячейка данных массива называется элементом массива. Элементами массива могут быть данные любого типа. Массивы могут иметь как одно, так и более одного измерений. В зависимости от количества измерений массивы делятся на одномерные массивы, двумерные массивы, трёхмерные массивы и так далее до n-мерного массива. Чаще всего в программировании используются одномерные и двумерные массивы, поэтому мы рассмотрим только эти массивы.
Описать структуру одномерного массива в языке С++
Одномерный массив — массив, с одним параметром, характеризующим количество элементов одномерного массива. Фактически одномерный массив — это массив, у которого может быть только одна строка, и n-е количество столбцов. Столбцы в одномерном массиве — это элементы массива. На рисунке 1 показана структура целочисленного одномерного массива a. Размер этого массива — 16 ячеек.
Рисунок 1 — Массивы в С++
Заметьте, что максимальный индекс одномерного массива a равен 15, но размер массива 16 ячеек, потому что нумерация ячеек массива всегда начинается с 0. Индекс ячейки – это целое неотрицательное число, по которому можно обращаться к каждой ячейке массива и выполнять какие-либо действия над ней (ячейкой).
//синтаксис объявления одномерного массива в С++:
/*тип данных*/ /*имя одномерного массива*/[/*размерность одномерного массива*/];
//пример объявления одномерного массива, изображенного на рисунке 1:
int a[16];
где, int-целочисленный тип данных;
а - имя одномерного массива; 16 — размер одномерного массива, 16 ячеек.
Всегда сразу после имени массива идут квадратные скобочки, в которых задаётся размер одномерного массива, этим массив и отличается от всех остальных переменных.
//ещё один способ объявления одномерных массивов
int mas[10], a[16];
Объявлены два одномерных массива masи а размерами 10 и 16 соответственно. Причём в таком способе объявления все массивы будут иметь одинаковый тип данных, в нашем случае - int.
// массивы могут быть инициализированы при объявлении:
int a[16] = { 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 }; // инициализация одномерного массива
Инициализация одномерного массива выполняется в фигурных скобках после знака равно, каждый элемент массива отделяется от предыдущего запятой.
int a[]={5,-12,-12,9,10,0,-9,-12,-1,23,65,64,11,43,39,-15}; // инициализации массива без определения его размера.
В данном случае компилятор сам определит размер одномерного массива. Размер массива можно не указывать только при его инициализации, при обычном объявлении массива обязательно нужно указывать размер массива. Разработаем простую программу на обработку одномерного массива.
// array.cpp: определяет точку входа для консольного приложения.
#include "stdafx.h"
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
cout << "obrabotka massiva" << endl;
int array1[16] = { 5, -12, -12, 9, 10, 0, -9,
-12, -1, 23, 65, 64, 11, 43, 39, -15 }; // объявление и инициализация одномерного массива
cout << "indeks" << "\t\t" << "element massiva" << endl; // печать заголовков
for (int counter = 0; counter < 16; counter++) //начало цикла
{
//вывод на экран индекса ячейки массива, а затем содержимого этой ячейки, в нашем случае - это целое число
cout << "array1[" << counter << "]" << "\t\t" << array1[counter] << endl;
}
system("pause");
return 0;
}
Привести примеры объявления массивов
5. Опишите способы создания и обработки двумерных массивов на языке программирования С++
Дать определение массива
Описать структуру двумерного массива в языке С++
С позволяет создавать многомерные массивы. Простейшим видом многомерного массива является двумерный массив. Двумерный массив - это массив одномерных массивов. Двумерный массив объявляется следующим образом:
тип имя_массива[размер второго измерения][размер первого измерения];
Следовательно, для объявления двумерного массива целых с размером 10 на 20 следует написать:
int d[10] [20] ;
Посмотрим внимательно на это объявление. В противоположность другим компьютерным языкам, где размерности массива отделяются запятой, С помещает каждую размерность в отдельные скобки.
Для доступа к элементу с индексами 3, 5 массива d следует использовать
d[3] [5]
В следующем примере в двумерный массив заносятся числа от 1 до 12, после чего массив выводится на экран.
#include <stdio.h> int main(void) { int t,i, num[3][4]; /* загрузка чисел */ for(t=0; t<3; ++t) for (i=0; i<4; ++i) num[t][i] = (t*4)+i+1;
/* вывод чисел */ for (t=0; t<3; ++t) { for (i=0; i<4; ++i) printf("%d ",num[t][i]); printf ("\n"); } return 0; }
В данном примере num[0][0] имеет значение 1, num[0][1] имеет значение 2, num[0][2] - 3 и так далее. num[2][3] имеет значение 12.
Двумерные массивы сохраняются в виде матрицы, где первый индекс отвечает за строку, а второй -за столбец. Это означает, что правый индекс изменяется быстрее левого, если двигаться по массиву в порядке расположения элементов в памяти. На рис. показано графическое представление двумерного массива в памяти. Левый индекс можно рассматривать как указатель на строку.
Число байт в памяти, требуемых для размещения двумерного массива, вычисляется следующим образом:
число байт = размер второго измерения * размер первого измерения * sizeof (базовый тип)
Предполагая наличие в системе 2-байтных целых, целочисленный массив с размерностями 10 на 5 будет занимать 10 * 5 * 2, то есть 100 байт.
Когда двумерный массив используется как аргумент функции, передается указатель на первый элемент. Функция, получающая двумерный массив, должна, как минимум, определять размер первого измерения, поскольку компилятору необходимо знать длину каждой строки для корректной индексации массива. Например, функция, получающая двумерный целочисленный массив с размерностями 5, 10, будет объявляться следующим образом:
void func1 (int х[] [10]) { ... }
Можно определить размер второго измерения, но это не обязательно. Компилятору нужно знать размер первого измерения для правильного выполнения операторов типа
х [2] [4]
в функции. Если длина строки не известна, невозможно узнать, где начинается следующая строка.
Краткая программа, приведенная ниже, использует двумерный массив для хранения оценок каждого студента в классах учителя. Программа предполагает, что учитель имеет три класса и в каждом классе может быть максимум 30 студентов. Обратим внимание, как осуществляется доступ к grade из каждой функции:
#include <conio.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> #define CLASSES 3 #define GRADES 30 int grade[CLASSES][GRADES]; void disp_grades(int g[] [GRADES]), enter_grades(void); int get_grade(int num); int main(void) /* программа для хранения оценок */ { char ch; for (;;) { do { printf("(E)nter grades\n"); printf("(R)eport grades\n"); printf("(Q) uit\n"); ch = toupper(getche()); } while(ch!='E' && ch!='R' && ch!='Q'); switch(ch) { case 'E': enter_grades(); break; case 'R': disp_grades(grade); break; case 'Q': return 0; } } }
/* ввод каждой оценки студентов */ void enter_grades(void) { int t, i; for(t=0; t<CLASSES; t++) { printf("Class # %d:\n", t+1); for(i=0; i<GRADES; ++i) grade[t][i] = get_grade (i); } }
/* реальный ввод оценки */ int get_grade(int num) { char s [80]; printf("enter grade for student # %d:\n", num+1); gets (s); return(atoi(s)); }
/* вывод оценок класса */ void disp_grades(int g[] [GRADES]) { int t, i; for(t=0; t<CLASSES; ++t) { printf("Class # %d:\n", t+1); for(i=0; i<GRADES; ++i) printf("grade for student #%d is %d\n", i+1, g[t][i]); } }
Привести примеры программ по обработке массивов
6. Опишите принципы работы с файлами последовательного доступа
А. Как произвести открытие файла
Файлом называют способ хранения информации на физическом устройстве. Файл — это понятие, которое применимо ко всему — от файла на диске до терминала.
В C++ отсутствуют операторы для работы с файлами. Все необходимые действия выполняются с помощью функций, включенных в стандартную библиотеку. Они позволяют работать с различными устройствами, такими, как диски, принтер, коммуникационные каналы и т.д. Эти устройства сильно отличаются друг от друга. Однако файловая система преобразует их в единое абстрактное логическое устройство, называемое потоком.
Текстовый поток — это последовательность символов. При передаче символов из потока на экран, часть из них не выводится (например, символ возврата каретки, перевода строки).
Двоичный поток — это последовательность байтов, которые однозначно соответствуют тому, что находится на внешнем устройстве.