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

Int scanf(char *управляющая строка);

Символ пробела в управляющей строке дает команду пропустить один или более пробелов в потоке ввода. Кроме пробела может восприниматься символ табуляции или новой строки. Ненулевой символ указывает на чтение и отбрасывание этого символа.

Разделителями между двумя вводимыми числами являются символы пробела, табуляции или новой строки. Знак * после % и перед кодом формата (спецификатором формата) дает команду прочитать данные указанного типа, но не присваивать это значение.

Например:

scanf("%d%*c%d",&i,&j);

при вводе 50+20 присвоит переменной i значение 50, переменной j - значение 20, а символ + будет прочитан и проигнорирован.

В команде формата может быть указана наибольшая ширина поля, которая подлежит считыванию.

Например:

scanf("%5s",str);

указывает необходимость прочитать из потока ввода первые 5 символов. При вводе 1234567890ABC массив str будет содержать только 12345, остальные символы будут проигнорированы. Разделители: пробел, символ табуляции и символ новой строки - при вводе символа воспринимаются, как и все другие символы.

Если в управляющей строке встречаются какие-либо другие символы, то они предназначаются для того, чтобы определить и пропустить соответствующий символ. Поток символов 10plus20 оператором

scanf("%dplus%d",&x,&y);

присвоит переменной x значение 10, переменной y - значение 20, а символы plus пропустит, так как они встретились в управляющей строке.

Одной из мощных особенностей функции scanf() является возможность задания множества поиска (scanset). Множество поиска определяет набор символов, с которыми будут сравниваться читаемые функцией scanf() символы. Функция scanf() читает символы до тех пор, пока они встречаются в множестве поиска. Как только символ, который введен, не встретился в множестве поиска, функция scanf() переходит к следующему спецификатору формата. Множество поиска определяется списком символов, заключённых в квадратные скобки. Перед открывающей скобкой ставиться знак %. Давайте рассмотрим это на примере.

#include <stdio.h> void main(void) {     char str1[10], str2[10];     scanf("%[0123456789]%s", str1, str2);     printf("\n%s\n%s",str1,str2); } Введём набор символов: 12345abcdefg456 На экране программа выдаст: 12345 abcdefg456

При задании множества поиска можно также использовать символ "дефис" для задания промежутков, а также максимальную ширину поля ввода.

scanf("%10[A-Z1-5]", str1);

Можно также определить символы, которые не входят в множество поиска. Перед первым из этих символов ставиться знак ^. Множество символов различает строчные и прописные буквы.

Напомню, что при использовании функции scanf(), ей в качестве параметров нужно передавать адреса переменных. Выше был написан код:

char str[80];        // массив на 80 символов scanf("%s",str);

Обратите внимание на то, что перед str не стоит символ &. Это сделано потому, что str является массивом, а имя массива - str является указателем на первый элемент массива. Поэтому знак & не ставиться. Мы уже передаем функции scanf() адрес. Ну проще говоря str это адрес в памяти компьютера где будет храниться значение первого элемента массива.

Примеры программ.

Пример 1. Эта программа выводит на экран запрос "Сколько вам лет?:" и ждёт ввода данных. Если, например, ввести число 20, то программа выведет строку "Вам 20 лет.". При вызове функции scanf(), перед переменной age мы поставили знак &, так как функции scanf() нужны адреса переменных. Функция scanf() запишет введённое значение по указанному адресу. В нашем случае введённое значение 20 будет записано по адресу переменной age.

/* Пример 1 */ #include <stdio.h> void main(void) {     int age;     printf("\nСколько вам лет?:");     scanf("%d",&age);     printf("Вам %d лет.", age); }

 

Пример 2. Программа калькулятор. Этот калькулятор может только складывать числа. При вводе 100+34 программа выдаст результат: 100+34=134.

/* Пример 2 */ #include <stdio.h> void main(void) {     int x, y;     printf("\nКалькулятор:");     scanf("%d+%d", &x, &y);     printf("\n%d+%d=%d", x, y, x+y); }

 

Пример 3. Этот пример показывает как установить ширину поля считывания. В нашем примере ширина поля равна пяти символам. Если вы введёте строку с большим количеством символов, то все символы после 5-го будут отброшены. Обратите внимание на вызов функции scanf(). Знак & не стоит перед именем массива name так как имя массива name является адресом первого элемента массива.

/* Пример 3 */ #include <stdio.h> void main(void) {     char name[5];     printf("\nВведите ваш логин (не более 5 символов):");     scanf("%5s", name);     printf("\nВы ввели %s", name); }

 

Пример 4. Последний пример в этой статье показывает как можно использовать множество поиска. После запуска программы введите число от 2 до 5.

/* Пример 4 */ #include <stdio.h> void main(void) {     char bal;     printf("Ваша оценка 2,3,4,5:");     scanf("%[2345]", &bal);     printf("\nОценка %c", bal); }

16. Типы данных. Операторы описания типов.

Типы:

1.Скалярные

А)указатели

Б)арифметические

- базовые

1.целые

2.вещественные(плавающие)

2.Векторные

А)массивы

Б)структуры

В)перечисления

Г)смесь

В Си имеются 4 основных(базовых) типа данных определяемых с помощью ключевых слов:

Int – integer (целый)

Float – вещественный(плавающий)

Double – вещественный двойной точности

Char – charter – текстовый

Char 1 байт

Int 2 байта

Float 4 байта

Double 8 байт

18. Массивы

Вопрос: КАК применяются массивы?

Наверное, если раньше вы не встречались с этим словом, само понятие "массив" у вас вызывает исключительно архитектурные ассоциации: "жилой массив". Это своего рода набор зданий, расположенных на некоторой территории. Массив в программировании на любом языке - это набор данных одного типа (int, float, double...), также объединённых на одной территории. КАК? Сейчас расскажу. До сих пор мы задавали отдельно переменные: int a=9; float f=4.14, char *str="Машина". Однако, вы удивитесь, когда я скажу, что массивы мы давно уже используем. А вы-то и не знали. Когда мы задавали строчку: char str[6]="машина" мы объявляли массив типа char, иными словами резервировали некоторую область памяти, длиной в 6 ячеек или клеточек (0, 1, 2, 3, 4, 5), в которую записывали символы типа char. В каждой клеточке может храниться только один символ. В любой момент мы могли обратиться к любому символу, используя индексацию, номер этой клеточки. Так, команда: cout<<str[2]; даст нам на экране букву: "ш". Если же мы напишем такое выражение: str[0]='п'; то в строке str (массиве str), будет записано: "пашина".  Идём дальше. Используя индексацию, мы можем вывести слово наоборот: int i; for(i=0; i<strlen(str)-1; i++) //вывод элементов массива cout<<str[i]<<endl; Меняя переменную цикла i от 0 до длины строки str -1, то есть до 6-1=5, мы последовательно выводим её содержимое на экран в столбик.  Так же можно осуществить и заполнение массива значениями: int i; for(i=0; i<strlen(str)-1; i++) //ввод элементов массива cin>>str[i]>>endl; Учтите, что число элементов массива меняться не может! Чтобы знать свои права, рассмотрим остальные свойства массивов. Вопрос: КАКие свойства у массивов?

Свойства массивов: 1. В массиве хранятся отдельные значения, которые называются элементами. 2. Все элементы массива должны быть одного типа данных (int, float, char*...). 3. Все элементы хранятся в памяти последовательно, и первый имеет нулевой адрес. 4. Имя массива является константой и содержит адрес первого элемента массива. Массивы могут состоять не только из символов, но и из строк. Представьте себе, что вы пишите игру-говорилку, где игрок попадает в гости к симпатичной девушке, которая вступает с ним в диалог. От того, как он ответит на них, зависит обломится ему что-то или нет. Поскольку мы сами не можем говорить за электронную девушку, должен быть какой-то набор фраз, из которого случайным образом выбирается какая-то одна. Программным языком выражаясь, мы создаём массив строк. Выбирая случайным образом индекс i, мы выводим на экран фразу: cout<<massiv[i]; i может быть и 0 и 20 и 40, поэтому вопросы и высказывания девушки не предсказуемы. А задать такой массив можно так: char *massiv[4]={"Привет, как дела?", "Как тебя зовут?", "Какой твой любимый цвет?", "Кем ты работаешь?"}; Обратите внимание, что объявляя массив, мы помещаем его элементы в фигурные скобки, разделяя их запятыми. В конце обязательно надо поставить ; Вопрос: КАК объявляются и применяются массивы float? Массивы float Пример1. Найти среднее арифметическое элементов заданного массива.

#include<stdio.h> #define TEN 10 //так объявляются константы. Менять значения TEN после этого объявления мы не имеем права //Здесь же константе TEN мы присвоили значение 10 void main() { float a[TEN], s=0; //мы объявили массив типа float из TEN(десяти) элементов и переменную s int i; //переменная цикла printf("Введите массив: "); for(i=0; i<TEN; i++)  scanf("%d", m[i]); /*последовательный ввод массива*/ for(i=0; i<TEN; i++) s = s+a[i]; /*нахождение суммы элементов*/ s=s/TEN; //нахождение среднего арифметического делением суммы на TEN, то есть на 10 printf("s = %8.2f", s); }

Как видите, работа с массивами почти не отличается от работы с обычными числами. Удобно представлять массивы, как наборы чисел. Как правило инициализация, ввод и вывод элементов массива осуществляются через цикл for, так как в данном случае заранее известно число элементов. Вопрос: КАК ещё объявляются массивы? Вот примеры объявления массивов разных типов: int masi[6]={0, 5, 345, 123, 4, -5};

float masf[4]={0.001, 0.01, 0.1, 1}; char masc1[4]={'R', 'o', 'c', 'k'}; char masc2[4]="Rock"; char *masc3="Rock"; char masc4[]="Rock"; //когда заранее не известно сколько элементов Как видите, массивы символов можно объявлять четрьмя разными способами, и это не предел.