bmstu_iu6_Cpp1 (823967), страница 11

Файл №823967 bmstu_iu6_Cpp1 (Методические пособия по C++ Г.С.Иванова 3 части) 11 страницаbmstu_iu6_Cpp1 (823967) страница 112021-07-27СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 11)

Параметр ptrptr используется для хранения позиции в строке.// Использование ранее применяемой функции strtok() при параллельном// программировании может приводить к ошибкам9) int atoi(const char *s); // функция возвращает целое число,// в символьном виде записанное в строке s10) double atof(const char *s); //функция возвращает вещественное число// двойной точности, в символьном виде записанное в строке s11) char *itoa(int value,char *s,int radix); // функция// осуществляет преобразование целого числа value в строку s// в соответствии с заданной системой счисления radix (от 2 до 36).12) char *_gcvt(double value, int digits, char *buffer );// функция преобразует число value в строку buffer c учетом параметра// digits, который определяет количество значащих цифр13) char *_ecvt(double value,int count,int *dec,int *sign);// функция преобразует число value в строку buffer c учетом параметров// count – количество цифр,14) char *_fcvt(double value,int count,int *dec,int *sign);// функция преобразует число value в строку результата// count – количество цифр, dec, sign – позиции точки и знака15) int sscanf( const char *buffer, const char *format [, argument ] ...

);// функция для разбора элементов строки buffer по указанному формату16) int sprintf( char *buffer, const char *format [,argument] ... );// функции для формирования строки из элементов по указанному форматуОглавление66Для предотвращения возможной ошибки переполнения буфера в MS Visual C++ 2008добавлены функции strcat_s, strcpy_s, strncpy_s, в которых указывается допустимая длина строки, принимающей результат.Пример 3.3. Разработать программу, которая выделяет слова их исходной строки сиспользованием функции strtok_s().#include <locale.h>#include <stdio.h>#include <conio.h>#include <string.h>int main( void ){// исходная строкаchar string[]="A string\tof ,,tokens\nand some more tokens";// строка разделителейchar seps[] = " ,\t\n", *token, *context;setlocale(0,"russian");token = strtok_s( string,seps,&context);while(token!=NULL){printf("%s ",token);token=strtok_s(NULL,seps,&context);}puts("\nНажмите любую клавишу для завершения...");_getch();return 0;}Результаты:A string of tokens and some more tokensНажмите любую клавишу для завершения…Пример 3.4.

Демонстрация преобразования результатов для вывода.#include <locale.h>#include <stdio.h>#include <conio.h>#include <stdlib.h>int main(int argc, char* argv[])Оглавление67{setlocale(0,"russian");// позиция точки и знакаintdecimal,sign;char*buffer;intprecision = 10;doublesource = 3.1415926535;// точностьbuffer =_ecvt( source, precision, &decimal, &sign );printf ("source: %12.10f\nbuffer: '%s'\ndecimal: %d\nsign: %d\n",source, buffer, decimal, sign );puts("Нажмите любую клавишу для завершения...");_getch();return 0;}Результат работы программы:source: 3,1415926535buffer: '3141592654'decimal: 1sign: 0Нажмите любую клавишу для завершения...Пример 3.5. Составить программу, осуществляющую ввод строк, содержащих имя,фамилию, отчество и год рождения, записанные через пробел.

Каждая введенная строкадолжна преобразовываться в строку, содержащую фамилию, инициалы и возраст в 2010году. Например:Petrov Petr Petrovich 1987 => Petrov P.P. 23#include <string.h>#include <stdlib.h>#include <locale.h>#include <stdio.h>#include <conio.h>int main(int argc, char* argv[]){setlocale(0,"russian");char st[40],strez[40],strab[40],*ptr1,*ptr2,*ptr3;int old;Оглавление68while ( puts("Введите строку или Сtrl-z:"),gets_s(st, sizeof(st)-1)!=NULL){strcpy(strez,st);// копирование st в strezptr1=strchr(strez,' ');// поиск первого пробела*(ptr1+2)='.';// вставка точки после инициалаptr2=strchr(st,' ');// поиск первого пробелаptr2=strchr(ptr2+1,' ');// поиск второго пробелаstrncpy(ptr1+3,ptr2+1,1);// копирование второго инициалаstrncpy(ptr1+4,". \0",3);//вставка ".",пробела и конца строкиptr3=strchr(ptr2+1,' ');// поиск третьего пробелаold=2010-atoi(ptr3+1);// определение возрастаstrcat(strez,itoa(old,strab,10));// добавление возрастаputs(strez);}puts("Нажмите любую клавишу для завершения...");_getch();return 0;}Результаты выполнения программы (вводимые данные выделены полужирным):Введите строку или Сtrl-z:Ivanov Ivan Ivanovich 1958Ivanov I.I.

52Введите строку или Сtrl-z:Petrov Petr Petrovich 1987Petrov P.P. 23Введите строку или Сtrl-z:^ZНажмите любую клавишу для завершения...3.6 СтруктурыИногда, при составлении программ необходимо объединить в единое целое разнородную, но логически связанную информацию. Например, нам необходимо хранить данные библиотечной карточки, содержащей следующую информацию о книге: фамилии иОглавление69инициалы авторов; название книги; место издания; издательство; год издания; количествостраниц. Объединить такую разнородную информацию можно связав ее в структуру.Структура – это набор разнотипных переменных, объединенных общим именем.Объявление структуры создает ее шаблон, который можно использовать при созданиипеременных типа этой структуры.Переменные, входящие в структуру, называются ее членами (элементами или полями). Как правило, все члены структуры логически связаны между собой.Объявление структур может выполнить двумя способами: так как это было предложено делать в Си и с использованием оператора создания нового типа typedef.Объявление структуры по правилам Си:struct [<Имя структуры>] {<Описание полей>} [<Список переменных>];Такое описание структуры позволяет организовать два варианта реализации:а) описание структуры выполняется отдельно от объявления списка переменных,например:struct student{char name[22],family[22];int old;}; // описание структурыstruct student stud1,stud2,*ptrstud; // объявление переменныхб) описание структуры выполняется совместно с объявлением переменных, в этомслучае имя структуре можно не присваивать, например:struct{char name[22], family[22];int old;} stud1, stud2, *ptrstud;2.

Описание структуры средствами С++:typedef struct {<Описание полей>} <Имя типа структуры>;Фактически посредством typedef мы объявляем новый тип данных, например:typedef struct{char name[22],family[22];int old;} student;Оглавление70В данном случае student – это имя нового типа данных. Соответственно возможнообъявление переменных этого типа, например:student stud1,stud[10],*ptrstud; // объявляются: переменная, массив и// указатель типа studentВ последнем случае память под размещение структуры надо запрашивать специально, например:ptrstud=new student;Обращение к элементам структуры выполняется с указанием имени переменной иимени поля:<Имя переменной>.<Имя поля><Имя массива>[<Индекс>].<Имя поля>(*<Имя указателя>).<Имя поля>Примеры:stud1.namestud[i].name(*ptrstud).nameЕсли переменная – указатель, то удобнее использовать сокращенную форму записиобращения к элементу структуры<Имя указателя> -> <Имя поля>, например:ptrstud->nameСтатические и внешние структуры (см.

раздел 4.1.1) при объявлении можно инициализировать. При этом значения полей указываются после символа равенства в фигурныхскобках через запятую, например:static student stud1={″Петр″,″Петров″,18},*ptrstud={″Иван″,″Иванов″,19};Чаще всего структуры используются как элементы массивов. Чтобы объявить массивструктур, необходимо определить тип структуры и объявить массив переменных этоготипа. Как во всех массивах, нумерация элементов массива структур начинается с 0, а переменная, содержит адрес первого элемента массива.Пример 3.6.

Написать программу формирования массива данных об игрушках, содержащих их название, количество и стоимость, и определения товара с наибольшей стоимости (см. рисунок 3.12).toynamecostkolРисунок 3.12 – Структура toyОглавление71#include <locale.h>#include <stdio.h>#include <conio.h>#include <string.h>typedef struct{char name[15]; float cost; int kol;}toy;int main(int argc, char* argv[]){setlocale(0,"russian");toy mas[10];int i,n=-1,k;char st[15];float sumcost=0,maxcost=0,num;st[0]='\0';while( (puts("Введите название или end"), scanf("\n%s",st),strcmp(st,"end")!=0)&&(n<9) ){n++;strcpy(mas[n].name,st);printf("Введите стоимость и количество:");scanf("%f %d",&mas[n].cost,&mas[n].kol);}puts("=======puts(" NСписок товаров======");Название Стоимость Количество");puts("==================================");for(i=0;i<=n;i++){printf("%3dprintf(" %9.2f%10s",i+1,mas[i].name);%5d\n",mas[i].cost,mas[i].kol);sumcost=mas[i].cost*mas[i].kol;// определение суммыif (sumcost>maxcost){maxcost=sumcost;// определение максимальной стоимости товараОглавление72strcpy(st,mas[i].name);// сохранение названия товара}}printf("Товар %10s имеет максимальную стоимость= %8.3f\n",st,maxcost);puts("Нажмите любую клавишу для завершения...");_getch();return 0;}Результат работы программы (вводимые данные выделены полужирно):Введите название или endKuklaВведите стоимость и количество: 256 23Введите название или endMishkaВведите стоимость и количество: 400 20Введите название или endend=======NСписок товаров======Название Стоимость Количество==================================1Kukla256,00232Mishka400,0020ТоварMishka имеет максимальную стоимость 8000,000Нажмите любую клавишу для завершения...Поля структуры могут быть не только скалярными, но и структурными.

Характеристики

Тип файла
PDF-файл
Размер
1009,74 Kb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6381
Авторов
на СтудИзбе
308
Средний доход
с одного платного файла
Обучение Подробнее