Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
    Начать продвижение сайта
  • Литерные указатели






    Строковая константа, записаная в СИ в виде изображение есть массив литер или символов.

    Количество байтов=количество литер+1 (для символа ’\ Ф ’)

    ПРИМЕР 10-6

    Char * pstr

    Pstr=’ С указатели ’

    Строка не копируется, а только указатели на массив.

    ПРИМЕР 10-7

    Char s _str[] =” как массив ”

    Char *p_str=” с указателем”

    s_str ---Элементы этого массива могут изменяться, но ссылается в оперативную память

    p_str --- Это указатель инициализированный

    В Си нет операторов для работы с массивом в целом -> недопустимо

     

    10.5 Литерные указатели.

     

    Строковая константа есть массив литер (символов). Количество байтов равно количеству литер +1 (для символа окончания строки \0).

     

    Пример 10.6

    char *pstr;

    pstr=”с указателем”:

     

    ! Различие между декларациями строк как массива и с помощью указателя:

    Пример 10.7

    char s_str[]=”как массив”; /*11dyte*/

    char p_str =” с указателем”; / *13byte*/

     

    с   у к а з а т е л е м \0

    p_str

     

    к а к   м а с с и в \0

    s_str

     

    Замечание

    s_str:

    - элементы s_str могут изменяться.

    - s_str всегда ссылается на одно и то же место в памяти.

     

    p_str:

    - при изменении указателя он будет ссылаться на что либо другое.

     

     

    !!! В Си нет оператора для работы с массивом в целом (=> недопустимо s_str изменить).

     

    10.6 Массивы указателей.

           
     
    . . . рис.4     схема . . .
     
    . . . схема     рис.4 . . .


     

     
     
     

     

     
     
     

    схема
    Рис.4

     

     

     
     
    схема


    Рис.4

     

     

    Удобно в Си текст, представлять массивом указателей.

     

     

    Пример 10.9

    #define KL 100

    int n1, n2;

    char *v[KL];

    char *temp;

    int k;

    temp=v[n1];

    v[n1]=v[n2];

    v[n2]=temp;

    k=KL;

    while (k--> 0)

    printf(“%s\n”, *v++);

    10.7 Инициализация массива указателей

    Пример 10.10:

    Char*m_name[]= { ”ошибка”, ”январь”, ”февраль”, ”март”, ”апрель”,

    ”июнь”, ”июль”, ”август”, ”сентябрь”, ”октябрь”, ”ноябрь”, ”декабрь” };

    /* обращаемся по номеру месяца */

    (n< 1 || n> 12)? m_name[0]: m_name[n];

    10.8 Многомерные массивы

    Пример 10.11:

    /* представляется как массив массивов */

    int mpr[2][9]=

    {

    /* даты */ {1, 7, 8, 1, 2, 9, 24, 7, 8},

    /* месяцы */ {1, 1, 3, 5, 5, 5, 8, 11, 11}

    }

    Это даты праздничных дней Украины не привязанных к Церковному

    календарю.

    Обращение к элементам двумерного массива.

    ……………………………………………………………………………

    d_may1=mpr[0][3];

    m_may1=mpr[1][3];

    10.9 Указатели вместо многомерных массивов

    Пример 10.12:

    int a[3][4] /* массив массивов */

    0 1 2 3

             
           
           

     

    Int*b[3]

    0)

    1)

    2)

     

    Массив а занимает 24 байта (2 байта * количество элементов)

    Массив b занимает первые 6 байт. У массива b не выделена пока память под собственно элементы. Это выделение может быть выполнено 2 способами:

    1) при инициализации;

    2) либо явно динамическим захватом памяти (см. 2 семестр);

    Преимущество 2-го способа состоит в том, что строки в массиве b

    могут быть различной длины. Это преимущество используется в литерных массивах.

    Пример 10.13:

    Берем из примера 10.10 первые 3 Элемента массива и выделяем под них память 2 способами.

    1)

    /* объявление массива строк как массива массивов char

     

    m_name1[][10]={”ошибка”, ”янв.”, ”февр.”};

    посчитает

    компилятор обязательно задается

     

     

    о ш и б к а \0     я н в . \0           ф е в . \0            

    10 20 30

     

    Количество не использованных байтов: 12 (40%)

    2)

    char*m_name2[]={”ошибка”, ”янв.”, ”фев.”};

     

    0) ошибка\0

     

    1) янв.\0

     

    2) фев.\0

     

     

    Библиотека для работы со строками string.h

    1 strlen(s), где s – строка

    Определяет длину строки (информационной части, без \0)

    int l;

    l=strlen(“пример”); /* l=6 */

    2 strcat(s1, s2) /* s1+=s2 */

    s2 конкатенируется к s1(s1 – меняется, s2 – не меняется)

    char a[]=”Белеет ”, /* a~Белеет */

    b[]=”парус ”; /* b~парус */

    strcat(a, b); /* a~Белеет парус */

     

    3 strcpy(s1, s2)

    Копирование строки s2 в s1 (s1 – меняется, s2 – не меняется)

    char a[]=”Белеет ”,

    b[]=”парус ”;

    char *c;

    strcpy(c, a); /* c~”Белеет ” */

    strcat(c, b); /* c~”Белеет парус ” */

    4 strcmp(s1, s2)

    Сравнение строк (в лексико-графическом порядке)

    /* Происходит посимвольное вычитание ASCII кодов */

     

    0, если s1=s2

    =0, иначе (разница в коде):

    strcmp=

    < 0, s1< s2

    > 0, s1> s2

    Пример:

    int r1, r2, r3;

    char a[]=”ПО96а”,

    b[]=”ПО96б”ж

    char *c;

    strcpy(c, a); /* c~”ПО96а” */

    r1=strcmp(a, c); /* r1=0 */

    r2=strcmp(a, b); /* r2< 0 */

    r3=strcmp(b, c); /* r3> 0 */

     

    Библиотека проверки символов ctype.h

    Тип всех функций - int. Все функции отвечают на вопрос в соответствии с названием функции:

    ”Являются ли аргумент этой функции тем, что сформулировано в названии? ”

    Результат: 1 или 0.

    Тип аргумента – int!!! Хотя все функции анализируют символы, но символьная константа имеет тип int.(т.к. в константе могут быть символы, которые в ASCII кодируются 2 байтами, а char только

    1 байт.

    isdigit(c) – цифра (0..9) (если цифра, то вернет 1, иначе 0)

    isalpha(c) – буква (латынь)

    isalnum(c) – буква (латынь) или цифра

    isupper (c) – прописная буква

    islower (c) – строчная буква

    Пример:

    int c1=’9’, c2=’s’, c3=’G’, c4=’y’, c5=’=’;

    int r1, r2, r3, r4, r5;

    r1=isdigit(c1); r1=1

    r2=isalpha(c2); r2=1

    r3=isalnum(c1); r3=1

    r3=isalnum(c5); r3=0

    r4=isupper(c3); r4= 1

    r5=islower(c4); r5=1

    Преобразование символов.

    1) atoi(s) - выполняет преобразование строки в int

    2) atol(s) - выполняет преобразование строки в длинный int

    Строка s – это аргумент содержащий изображение этого числа.

    Результатом является целое или длинное целое число.

    Пример:

    int i;

    long l;

    i=atoi (”1996”); i=1996

    l=atol(”1999000”); l=1999000

     


    11 СТРУКТУРЫ В ЯЗЫКЕ СИ

     

    Структура языка Си- это эквивалент записи.

    Структура - одна или несколько переменных возможно различных типов, которые сгрупированы под одним именем.

     

    ПР.11.1

    /* строка таблицы */

     

    Ф.И.О МАТЕМ ФИЗ Р.ЯЗ

     

    Элементы разных типов

     

    ПР.11.2

    Представление

    /* точка А в пространстве */ можно выполнить с помощью структуры:

    xa ya za

     

    Элементы массива безликие.

    Элементы структуры имеют имена.

     

    ПР.11.3

    /* окружность на плоскости */

     

    x0 y0 R

     

    11.1 Объявление структурного типа в языке СИ

     

    синтаксис:

    struct [< имя = тег> ]

    {< декларация..члена1>;

    ...

    < декларация члена N>;

    };

    - Декларация структуры

     

    = тип

    - Если после слова struct указать имя (tag), то это есть имя типа, кот. можно далее пользоваться как именем любого другого базового типа (как float, int).

    - Имена тегов и членов могут совпадать с именами других переменных.

    - Объявление структурного типа – это образец, а не декларация данных (память не выделяется).

     

    - ПР.11.4 /* для 11.2 */

     

    Struct без тега struct point c тегом

    { int xa; { int xa;

    int ya; int ya;

    int za; int za;

    }; };

     

    ПР.11.5 /* для 11.3 */

     

    Struct Struct circle

    { float x0; { float x0;

    float y0; float y0;

    float r; float r;

    }; };

     

    11.2. Декларация переменных структурного типа.

     

    I сп < декларация типа структ. >

    < список переменных>; 1 оператор

     

     

    II сп struct < тег> < список переменных>; 2 оператора

     

    ПР.11.6 /* прямая: через точки А и В */

     

    Struct struct point a, b;

    { int xa; см.11.4

    int ya;

    int za;

    } a, b;

     

    Инициализация:

     

    Переменные структурного типа можно инициализировать как и все другие.

     

    ПР.11.7 /* окружность с центром (2; 3) и радиусом 5.5 */

     

    Без тега

    Struct

    { float x0;

    float y0;

    float r;

    } pr = {2.0, 3.0, 5.5};

    c тегом

    struct circle pr = {2.0, 3.0, 5.5}

     

    Доступ к элементам структуры

     

    < имя структуры>.< имя члена>

     

    Пример 11.8

    /*расстояние от начала координат до точки pt*/

    struct

    {float x;

    float y; } pt={20.0, 15.0};

    double dist;

    dist=sqrt((double)pt.x*pt.x+(double)pt.y*py.y);

    printf(“От начала координат”);

    printf(“до точки (%f, %f)”, pt.x, pt.y);

    printf(“расстояние %f”, dist);

     

     






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.