
- •Билет 1. Логические операции. Логические выражения.
- •Билет 2. Поразрядные логические операции.
- •Билет 3.Условный оператор.
- •If (условие)
- •Билет 5 . Оператор цикла с постусловие do-while. Прерывание работы цикла.
- •Билет 6. Оператор цикла for. Прерывание работы цикла.
- •Билет 7. Оператор выбора switch.
- •Билет 8. Массивы; их описание. Размещение в памяти, инициализации.
- •Билет 9. Строки их описание, инициализация.
- •Билет 17. Функции текстового преобразования sscanf и sprintf
- •Билет 18. Аргументы функции main.
Билет 9. Строки их описание, инициализация.
Строки в с++ позволяют нам работать с символьными данными. Благодаря ним мы можем читать с клавиатуры текст, как-то его обрабатывать и затем, например, снова его выводить
Строка – это последовательность символов. Если в выражении встречается
одиночный символ, он должен быть заключен в одинарные кавычки. При
использовании в выражениях строка заключается в двойные кавычки.
Признаком конца строки является нулевой символ ‘\0’. В С\С++ в отличии от
других языков программирования отсутствует тип данных строка, строки в Си
можно описать с помощью массива символов (массив элементов типа char), в
массиве следует предусмотреть место для хранения признака конца строки ('\0').
Например, описание строки из 25 символов должно выглядеть так:
char s[26];
Здесь элемент s[25] предназначен для хранения символа конца строки.
char s[7]="Привет";
Можно описать и массив строк
char m[3][25]={"Пример ", "использования", " строк"}
Определен массив из 3 строк по 25 байт в каждой.
Для работы с указателями можно использовать и указатели (char *). Адрес
первого символа и будет начальным значением указателя.
Рассмотрим несколько примеров объявления и ввода строк.
#include <iostream>
#include <stdio.h>
#include
Создание строк
Для создания (не в памяти, а их инициализации) строк применяют функции strcpy и strcat, а также несколько их аналогов. Перед использованием функции strcpy (STRing CoPY) следует проверить, выделена ли память под обе строки. Объявление функции копирования строк:
char *strcpy(char *dest, const char *src);
wchar_t *wcscpy(wchar_t *dest, const wchar_t *src);
char *strncpy(char *dest, const char *src, size_t maxlen);
wchar_t *wcsncpy(wchar_t *dest, const wchar_t *src, size_t maxlen);
Билет 10. Функции для определения длины строки, сравнение и копирование строк.
Функции <string.h>
strlen (char* str);
длина строки (без учета 0-символа);
strcpy (char* str1,char* str2);
strncpy (char* str1,char* str2, число_байтов);
копирование строк здесь 2-я строка переписывается в первую, размер которой должен быть достаточным для такого копирования;
char s[80]; . . . strcpy(s,”ИСТАС”);
сравнение строк strcmp (char* str1,char* str2)
strncmp (char* str1,char* str2, число_байтов)
эта функция возвращает
положительное число, если первый аргумент больше второго, отрицательное число, если первый аргумент меньше второго,
0, если эти аргументы равны (сравниваются числовые коды символов, из которых состоят строки);
if(strcmp(”ЭТИЛ”,”ЭТАНОЛ”)>0){.........}
Strlen – определение длины строки (без учета 0-ого символа)
Strcpy – копирование строки (должен быть достаточный размер строки в которую копируют)
Strcmp – сравнивание строк
strlen(имя_строки) определяет длину указанной строки, без учёта нуль-символа
Копирование строк
strcpy(s1,s2) выполняет побайтное копирование символов из строки s2 в строку s1
strncpy(s1,s2, n) выполняет побайтное копирование n символов из строки s2 в строку s1. возвращает значения s1
strcmp(s1,s2) сравнивает строку s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2, <0 — если s1>s2 С учётом регистра
strncmp(s1,s2) сравнивает n символов строки s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2, <0 — если s1>s2 С учётом регистра
stricmp(s1,s2) сравнивает строку s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2, <0 — если s1>s2 Без учёта регистра
strnicmp(s1,s2) сравнивает n символов строки s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2, <0 — если s1>s2 Без учёта регистра
Билет 11. Структуры. Шаблоны структуры, имя структуры, указатель на структуру, доступ к элементам структуры.
Структура является собранием одного или более объектов (переменных,
массивов, указателей, других объектов), которые для удобства работы с ними объединены под одним именем.
struct z {
Шаблон
структуры
char vid[20];
long summa;
char data[11];
} x,*a,*b;
a=(struct z*)malloc(n*sizeof(struct z));
b=&x;
x.summa=10000; b->summa=5000;
a[i].summa=200; (a+i)->summa=100;
strcpy(x.name,”Иванов”);
strcpy(b->name,”Петров”);
strcpy(a[i].name,”Сидоров”);
strcpy((a+i)->name,”Федоров”);
Определение структуры состоит из двух шагов:
объявление структуры (задание нового типа данных определенного
определение переменных типа структура;
Билет 12. Заказ памяти для одномерного массива.
Для ввода n элементов одномерного массива, назовем его А, требуется организовать цикл, для ввода каждого i – го элемента, где i=0,1,2, …, n–1. Аналогичный цикл требуется организовать и для вывода элементов массива. На рисунке 2.2 изображена графическая схема ввода и вывода элементов массива.
Ввод–вывод динамического массива осуществляется по тому же алгоритму. Из приведенного ниже примера программы ввода и вывода динамического массива видно, что отличие заключается лишь в описании массива.
Одномерный массив - это фиксированное количество элементов одного и того же типа, объединенных общим именем, где каждый элемент имеет свой номер. Нумерация элементов массива в С# начинается с нуля, то есть, если массив состоит из 10 элементов, то его элементы будут иметь следующие номера: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
Одномерный массив в С# реализуется как объект, поэтому его создание представляет собой двухступенчатый процесс. Сначала объявляется ссылочная переменная на массив, затем выделяется память под требуемое количество элементов базового типа, и ссылочной переменной присваивается адрес нулевого элемента в массиве. Базовый тип определяет тип данных каждого элемента массива. Количество элементов, которые будут храниться в массиве, определяется размер массива.
В общем случае процесс объявления переменной типа массив, и выделение необходимого объема памяти может быть разделено. Кроме того на этапе объявления массива можно произвести его инициализацию. Поэтому для объявления одномерного массива может использоваться одна из следующих форм записи:
Форма записи Пояснения
базовый_тип [] имя__массива;
Например:
int [] a; Описана ссылка на одномерный массив, которая в дальнейшем может быть использована:
для адресации на уже существующий массив;
передачи массива в метод в качестве параметра
отсроченного выделения памяти под элементы массива.
базовый_тип [] имя__массива = new базовый_тип [размер];
Например:
int []a=new int [10]; Объявлен одномерный массив заданного типа и выделена память под одномерный массив указанной размерности. Адрес данной области памяти записан в ссылочную переменную. Элементы массива равны нулю.
Замечание. Надо отметить, что в C# элементам массива присваиваются начальные значения по умолчанию в зависимости от базового типа. Для арифметических типов - нули, для ссылочных типов - null, для символов - пробел.
базовый_тип [] имя__массива={список инициализации};
Например:
int []a={0, 1, 2, 3}; Выделена память под одномерный массив, размерность которого соответствует количеству элементов в списке инициализации. Адрес этой области памяти записан в ссылочную переменную. Значение элементов массива соответствует списку инициализации.
Обращения к элементам массива происходит с помощью индекса, для этого нужно указать имя массива и в квадратных скобках его номер. Например, a[0], b[10], c[i].
#include <alloc.h>
/* #include <malloc.h> для c++ */
int i,n,*x;
printf(”Введите n:”);
scanf(”%d”,&n);
x=(int*)malloc(n*sizeof(int));
printf(”\nВведите элементы массива:”);
for(i=0;i<n;i++)
scanf(”%d”,&x[i]); /* scanf(”%d”,x+i); */
printf(”\nИсходный массив:\n”);
for(i=0;i<n;i++)
printf(”%d ”,x[i]);
. . .
Освобождение памяти выделенной для x
free(x);
Билет 13. Заказ памяти для матрицы.
Заказ памяти под матрицу бывает также динамической и не динамической.
Матрица двухмерный массив.
**a |
|
|
|
|
|
|
|
|
|
*a[0] |
a[0][0] |
a[0][1] |
|
a[0][m-1] |
*a[1] |
a[1][0] |
a[1][1] |
|
a[1][m-1] |
|
|
|
|
|
*a[n-1] |
a[n-1][0] |
a[n-1][1] |
|
a[n-1][m-1] |

#include <alloc.h>
/* #include <malloc.h> для c++ */
int i,j,n,m,**a;
printf(”Введите n и m:”);
scanf(”%d%d”,&n,&m);
a=(int**)malloc(n*sizeof(int*));
for(i=0;i<n;i++)
a[i]=(int*)malloc(m*sizeof(int));
printf(”\nВведите элементы массива:”);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf(”%d”,&a[i][j]);
printf(”\nМатрица A:\n”);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf(”%5d”,a[i][j]);
printf(”\n”);
}
*a[i] – содержит адрес начального (нулевого) Элемента i-той строки.

for(i=n-1;i>=0;i--)
free(a[i]);
free(a);
Билет 14. Заказ памяти для массива структур.
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main()
{
char s[80],Fam[80]="";
char *Temp,*Facultet;
int Lmax,Len;
FILE *in;
in=fopen("Spisok.dat","r");
if(in==NULL)
{
printf("fail not open");
}
gets(s);
Lmax=0;
while(fgets(s,80,in))
{
Temp=strtok(s,"(");
Facultet=strtok(NULL,")");
if(strcmp(Facultet,"eyis"))
continue;
if((Len=strlen(Temp))>Lmax)
{
Lmax=Len;
strcpy(Fam,Temp);
}
}
fclose(in);
printf("%s-%d ", Fam,strlen(Fam));
getch();
}
Билет 15. Функции, формальные и фактические аргументы. Имя функции как аргумент другой функции.
Функции
Функция задаётся следующим образом:
тип_функции имя_функции (формальные аргументы)
{
текст
}
имя_функции – это идентификатор;
формальные_аргументы – это список имен аргументов,
которые будут переданы функции.
Функция не может быть описана внутри других функций.
К заданной функции можно обратиться из любой другой функции, при этом возможны две формы обращения:
1. имя_переменной = имя_функции(фактические аргументы);
2. имя_функции(фактические аргументы);
Фактические_аргументы должны соответствовать формальным по количеству, типу и порядку следования.
Билет 16. Классы памяти, области действия имен переменных. Блоки.
Класс памяти |
Время cуществования переменной |
Область действия |
auto register static extern extern static |
Временно Временно Постоянно Постоянно Постоянно |
Локальная Локальная Локальная Глобальная Глобальная (1 файл) |
#include <stdio.h>
#include <conio.h>
f()
{
static int i=0;
i++;
return;
}
main()
{
f(); /* i=1 */
f(); /* i=2 */
f(); /* i=3 */
getch();
}