Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
odin.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
81.56 Кб
Скачать

Билет 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 name[20];

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]

**a -указатель на элемент матрицы, содержит адресс массива указателей на каждую строку матрицы

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

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]