Gets(имя строковой переменной); 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Gets(имя строковой переменной);



Функция читает символы из строки ввода до тех пор, пока не встретит символ новой строки ‘\n’, который создается нажатием клавиши <ввод>. К прочитанным символам (без ’\n’) присоединяется нуль-символ ‘\0’ и полученное значение присваивается соответствующей переменной-строке.

 

Вывод строки символов на экран:

printf(″ Вы ввели %s″, S);

Функция puts(имя строковой переменной); выводит на экран дисплея строку символов, автоматически добавляя к ней символ перехода на начало новой строки (\n).

Аналогом такой функции будет: printf(“%s \n”,имя строковой переменной);

Пример: Ввести строку. Посчитать в ней все буквы «а».

#include<stdio.h>

#include<string.h>

main()

{char s[20];

int i,k=0;

puts("введите строку");gets(s);

k=0;for(i=0;i<strlen(s);i++) if(s[i]= ='a')k++;

printf(“количество=%d\n”,k);}

 

 

24. Функции работы с символьными массивами в ЯП Си (gets, puts, strlen, strcmp). Примеры использования.

В языке Си нет специально определенного строкового типа данных. Строка в языке Си представляет собой массив, состоящий из символов, последним из которых является символ \0. Нулевой символ позволяет функциям, работающим со строками, обнаруживать концы строк. На длину символьного массива в Си нет ограничения. Индекс первого символа строки — 0.

Строка описывается как символьный массив.

Например:

char S[20];

Большинство действий со строковыми объектами в Си выполняются при помощи стандартных библиотечных функций, для этого включите в начало программы заголовочный файл string.h: #include <string.h>, чтобы использовать строковые функции.

Ввод – вывод строк

Ввод строки символов с клавиатуры:

scanf(″%s″, S);

Спецификатор %s указывает, что будет читаться строка. Операция взятия адреса перед именем строки в данном случае не нужна. Функцией scanf() по формату %s строка вводится только до первого пробела!

scanf(″%80s″, S);

Спецификатор ″%80s″ указывает на то, что будет прочитано не более 80 символов, что позволяет избежать переполнения строки.

Для ввода фраз, состоящих из слов, разделенных пробелами, используется функция

Gets(имя строковой переменной);

Функция читает символы из строки ввода до тех пор, пока не встретит символ новой строки ‘\n’, который создается нажатием клавиши <ввод>. К прочитанным символам (без ’\n’) присоединяется нуль-символ ‘\0’ и полученное значение присваивается соответствующей переменной-строке.

 

Вывод строки символов на экран:

printf(″ Вы ввели %s″, S);

Функция puts(имя строковой переменной); выводит на экран дисплея строку символов, автоматически добавляя к ней символ перехода на начало новой строки (\n).

Аналогом такой функции будет: printf(“%s \n”,имя строковой переменной);

Определение длины строк

Функция strlen(имя строковой переменной) возвращает длину строки в символах(при этом завершающий нулевой байт не учитывается).

Копирование строк

Оператор присваивания для строк не определен!

Для строковых переменных s1 и s2  операция s1 = s2; не определена.

Чтобы корректно скопировать одну строку в другую используется функция strcpy(s1, s2); - копирует значение строки s2 в строку s1, включая завершающие нули.

Сравнение строк

Если i – переменная типа int, и если s1 и s2 – указатели на char, то оператор

i = strcmp(s1, s2); установит i равной –1 или другому отрицательному числу, если строка s1 в алфавитном порядке меньше строки s2. Если строки в точности совпадают, функция возвратит нуль. Если строка s1 в алфавитном порядке больше строки s2, она вернет +1 или другое положительное число.

Функция strcmp() чувствительна к регистру букв – при сравнении строчные буквы считаются большими, чем их прописные эквиваленты (так как буквы нижнего регистра имеют большие ASCII-значения, чем буквы верхнего регистра).

Пример: Ввести строку. Посчитать в ней все буквы «а».

#include<stdio.h>

#include<string.h>

main()

{char s[20];

int i,k=0;

puts("введите строку");gets(s);

k=0;for(i=0;i<strlen(s);i++) if(s[i]= ='a')k++;

printf(“количество=%d\n”,k);}

 

 

25. Структурированный тип данных структура в ЯП Си (определение, объявление, обращение к полям, пример).

Структуры

Структура - это структурированный тип данных, представляющий собой поименованную совокупность разнотипных элементов. Тип структура обычно используется при разработке информационных систем, баз данных.

Формат описания структурного типа:

struct имя_типа

{определения_элементов};

В конце обязательно ставится точка с запятой (это оператор).

Например, если требуется объединить информацию о сотруднике какого-либо предприятия, может подойти следующая структура:

  struct sotrudnik

                      { int nom;

                       char fio[25];

                       float zarplata;};

Элементы такой структуры (номер, фамилия, зарплата) называются полями. Каждое поле имеет имя и тип.

После этого sotrudnik становится именем структурного типа, который может быть назначен некоторым переменным:

struct sotrudnik sot1, sot2;

Здесь sot1 и sot2 — переменные структурного типа.

Допускаются и другие варианты описания структурных переменных. Можно вообще не задавать имя типа, а описывать сразу переменные:

  struct  

         { int nom;

         char fio[25];

         float zarplata;} sot1, sot2;

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

Обращение к элементам (полям) структурной величины производится с помощью уточненного имени:

имя_структуры.имя_элемента

Примеры:

sotl.fam; sot1.zarplata;

Значения элементов структуры могут определяться вводом, присваиванием, инициализацией. Пример инициализации в описании:

student sot1={300, "Кротов", 3500};

Если список инициализаций будет короче, то оставшиеся поля структурной переменной заполняются нулями.

Поля структуры могут сами иметь структурный тип.

Например, в структуре Person, содержащей сведения – ФИО, дата рождения, сделать дату рождения внутренней структурой date по отношению к структуре Person. Тогда шаблон такой конструкции будет выглядеть так:

struct date {int day, month, year;};

struct Person  

  {char fio[40];

    struct date f1;

    };

Объявляем переменную:

struct Person a;

Тогда обращение к полям структурной переменной a будет выглядеть следующим образом:

a. fio                    a. f1. day                         a. f1. month              a. f1. year

 

 

26. Массивы структур в ЯП Си (объявление, обращение к элементам и их полям, примеры).

Структуры

Структура - это структурированный тип данных, представляющий собой поименованную совокупность разнотипных элементов. Тип структура обычно используется при разработке информационных систем, баз данных.

Формат описания структурного типа:

struct имя_типа

{определения_элементов};

В конце обязательно ставится точка с запятой (это оператор).

Например, если требуется объединить информацию о сотруднике какого-либо предприятия, может подойти следующая структура:

  struct sotrudnik

                      { int nom;

                       char fio[25];

                       float zarplata;};

Элементы такой структуры (номер, фамилия, зарплата) называются полями. Каждое поле имеет имя и тип.

После этого sotrudnik становится именем структурного типа, который может быть назначен некоторым переменным:

struct sotrudnik sot1, sot2;

Здесь sot1 и sot2 — переменные структурного типа.

Допускаются и другие варианты описания структурных переменных. Можно вообще не задавать имя типа, а описывать сразу переменные:

  struct  

         { int nom;

         char fio[25];

         float zarplata;} sot1, sot2;

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

Обращение к элементам (полям) структурной величины производится с помощью уточненного имени:

имя_структуры.имя_элемента

Примеры:

sotl.fam; sot1.zarplata;

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

Пример:

Сформировать массив структур, содержащих информацию о студентах (фамилия, оценка по математике). Вывести на экран весь список и вычислить средний балл в группе по математике.

#include<stdio.h>

void main()

{struct student /*описание структурного типа*/

 {char fam[20];

 int oc;};

 struct student a[10]; /*объявление массива структур*/

 int i,n=4;float sum=0,sred;

 for(i=0;i<n;i++) /*заполнение массива структур данными*/

{printf("введите фамилию\n");scanf("%s",&a[i].fam); /*обращение к полям структуры*/

printf("введите оценку\n");scanf("%d",&a[i].oc);}

 puts("список студентов:");

 for(i=0;i<n;i++)/*вывод массива структур на экран*/

printf("%20s%4d\n",a[i].fam,a[i].oc);

 for(i=0;i<n;i++)sum+=a[i].oc; /*поиск суммы оценок*/

 sred=sum/n;printf("средний балл=%f\n",sred);

}

 

 

27. Работа с файлами на диске в ЯП Си (объявление указателя, режим доступа к элементам, открытие, закрытие, средства ввода вывода,).

Файл – это набор данных, размещенный на внешнем носителе и рассматриваемый в процессе обработки как единое целое. В файлах размещаются данные, предназначенные для длительного хранения. Файл хранится во внешней памяти на внешнем носителе, и по мере необходимости данные из файла вызываются в оперативную память для обработки. Любой файл рассматривается как байтовая последовательность, отсутствует понятие типа файла. Последний байт файла имеет значение EOF.

Каждому файлу в программе присваивается внутреннее логическое имя, используемое в дальнейшем при обращении к нему. Логическое имя (идентификатор файла) – это указатель на файл, т.е. на область памяти, где содержится вся необходимая информация о файле.

Формат объявления указателя на файл следующий:

FILE *имя указателя;

Открытие файла

Прежде чем начать работать с файлом, т.е. получить возможность чтения или записи информации в файл, его нужно открыть для доступа.

Для этого обычно используется функция

имя файловой переменной= fopen (“путь и имя файла”, “режим”);

Пример:

FILE *f;

f = fopen (" d:\\urok\\file1.dat ", "w");

Обратный слеш «\», как специальный символ в строке записывается дважды.

При успешном открытии функция fopen возвращает указатель на файл. При ошибке возвращается NULL. (Данная ситуация обычно возникает, когда неверно указывается путь к открываемому файлу, например, если указать путь, запрещенный для записи.)

Режим доступа к файлу:

w – файл открывается для записи (write); если файла с заданным именем нет, то он будет создан; если же такой файл уже существует, то перед открытием прежняя информация уничтожается;

r – файл открывается для чтения (read); если такого файла нет, то возникает ошибка;

a – файл открывается для добавления (append) новой информации в конец;

r+ (w+) – файл открывается для редактирования данных, т.е. возможны и запись, и чтение информации;

t – файл открывается в текстовом режиме;

b – файл открывается в двоичном режиме;

Последние два режима используются совместно с рассмотренными выше. Возможны следующие комбинации режимов доступа: “w+b”, “wb+”, “rw+”, “w+t”, “rt+”, а также некоторые другие комбинации.

Каждый открытый файл имеет маркер или указатель чтения-записи данных. При открытии файла этот указатель устанавливается на начало данных.

Функции работы с файлами

fclose (имя указателя на файл); - закрытие файла

fcloseall (); - закрытие всех файлов

fprintf ( имя указателя на файл,форматная_строка, список_аргументов); - запись в файл (например, fprintf(f,"%4d",c);)

fscanf (имя указателя на файл, форматная_строка, список_аргументов) – считывание информации из файла (например, fscanf(f,"%d",&c);) При достижении конца файла возвращается значение EOF.

fputs ( строковая переменная, указатель на файл ) – запись строки в файл; функция не добавляет символ перехода на новую строку в результирующую строку. Поэтому после fputs() необходимо вызывать функцию fputc() с символом новой строки в качестве первого аргумента:

fputc(′\n′, fp);

При записи в файл символ ‘ \n ’ трансформируется в символы возврата каретки и перевода строки.

fgets ( строковая переменная, максимальное число читаемых символов плюс единица, указатель на файл ) - читает строку символов из файла, функция возвращает указатель на строку при успешном завершении и константу NULL в случае ошибки либо достижения конца файла

Пример: fgets (s, 50, f);

функции прочитает из файла одну строку текста полностью, если ее длина меньше 50 символов с учетом символа '\n', который функция также сохранит в строке. Последним (50-ым) элементом строки s будет символ '\0', добавленный fgets(). Если строка окажется длиннее, то функция прочитает 49 символов и в конце запишет '\0'. В таком случае '\n' в считанной строке содержаться не будет.

 

 

28. Указатели в ЯП Си. Операции над указателями.

Указатели

Указатель — это адрес поля памяти, занимаемого программным объектом.

Для хранения адресов используются переменные типа «указатель». Значение указателя равно первому байту участка памяти, на который он ссылается. Формат описания указателей:

тип *имя_переменной;

Примеры описания указателей:

int *i; char *c; float *f;

После такого описания переменная i может принимать значение указателя на величину целого типа; переменная c предназначена для хранения указателя на величину типа char; переменная f — на величину типа float.

В заголовочном файле stdio.h определена константа — нулевой указатель с именем NULL.

Например:

f=NULL;

Нулевой указатель обозначает отсутствие конкретного адреса ссылки.

Указатель типа void указывает на неопределенный тип данных. При работе с такими указателями используется операция приведения типов:

void *p;

char c,s=’f’;

p=&s;

c=* (char*) p;

Значение указателя можно вывести на экран с помощью функции printf, используя спецификацию % p (pointer), результат выводится в шестнадцатеричном виде.

Пример:

int a = 5, *p;

p = &a; 

printf(“a = %d, *p = %d, p = %p.\n”, a, *p, p);

Результат может быть следующим:

a = 5, *p = 5, p = FFF4, p1 = FFF6, p2 = FFF8.

 

Операции над указателями

Операция & — «взять адрес»   дает в результате адрес переменной в памяти.

Пример:

int a=5;

char s='G';

float r=1.2 E8;

Тогда допустимы операторы i=& a; c=& s; f=& r;

Операция * является знаком операции разадресации: «значение, расположенное по указанному адресу».

После приведенных выше описаний в записи выражений взаимозаменяемыми становятся а и *i, s и *c, r и *f.

Например, два оператора

х=а+2; и x=*i+2;

или a++ и   (* i)++

тождественны друг другу

 

 

29. Динамическая и статическая память. Функции работы с динамической памятью в ЯП Си.



Поделиться:


Последнее изменение этой страницы: 2021-01-08; просмотров: 76; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.104.248 (0.069 с.)