Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Gets(имя строковой переменной); ⇐ ПредыдущаяСтр 6 из 6
Функция читает символы из строки ввода до тех пор, пока не встретит символ новой строки ‘\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 с.) |