- •Министерство образования Российской федерации новосибирский государственный технический университет
- •Часть 1
- •Работа подготовлена на кафедре
- •Последовательность этапов решения задач при нисходящем проектировании
- •Семь основных элементов программирования.
- •Другие функции вывода: puts() и putchar()
- •Типы данных
- •Использование gets() и getch() для ввода
- •Условные операторы
- •Операции сравнения
- •Логические операции
- •Операторы присваивания
- •Оператор запятая
- •Лабораторная работа № 1 условные операторы. Операторы цикла.
- •Цель работы
- •Общие положения Оператор if
- •Циклические конструкции в программах
- •3. Пример программной реализации
- •4. Варианты заданий
- •5. Контрольные вопросы.
- •Лабораторная работа № 2 массивы целых чисел. Символьные массивы.
- •1. Цель работы.
- •2. Общие положения.
- •3. Примеры программных реализаций
- •Пример 3. Введенное натуральное число записать в виде строки.
- •4. Варианты заданий
- •5. Контрольные вопросы
- •Лабораторная работа № 3 методы сортировки.
- •Цель работы
- •Общие положения
- •Сортировка простыми включениями.
- •Сортировка простым выбором.
- •Сортировка простым обменом.
- •Пример программной реализации
- •Варианты заданий.
- •Лабораторная работа № 4
- •Способы передачи параметров
- •Функция main()
- •Области действия функций. Определения и объявления
- •Примеры программных реализаций
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа № 5 функции. Массивы указателей.
- •Цель работы
- •Общие положения
- •Примеры программных реализаций
- •Варианты заданий
- •Контрольные вопросы
Использование gets() и getch() для ввода
Использование scanf(), однако, порождает другую проблему. Снова выполните программу, но теперь введите ваше имя и фамилию. Заметьте, что программа использует в своем ответе только имя. Почему? Потому, что введенный вами после имени пробел сигнализирует scanf() о конце вводимой строки.
Возможны два способа решения этой проблемы. Вот первый из них:
#include <stdio.h>
main ()
{
char first[20], middle[20], last[20];
printf("Как Вас зовут:");
scanf("%s %s %s",first, middle, last);
printf("Дорогой %s, или вам приятней %s?\n", last, first);
}
Это означает, что имеется три компоненты имени; в примере функция scanf() не пойдет дальше, пока вы действительно не введете три строки. Но что, если необходимо прочитать полное имя, как одну строку, включая пробелы? Вот второй способ решения:
#include <stdio.h>
main ()
{
char name [60];
printf("Как вас зовут: ");
gets (name);
printf ("Привет, % s\n", name);
}
Функция gets() читает все, что вы набираете до тех пор, пока не нажмете Ввод. Она не помещает Ввод в строку; однако в конец строки добавляет нулевой символ (‘\0’).
Наконец, есть еще функция getch(). Она читает единственный символ с клавиатуры, не выдавая его на экран (в отличии от scanf() и gets()). Заметим, что у нее нет параметра ch; getch() является функцией типа char, ее значение может быть непосредственно присвоено ch.
Условные операторы
Имеется несколько операторов, о которых мы еще не говорили: условные и логические операторы. При этом возникают некоторые непростые моменты в выражениях, которые мы приберегли для обсуждения условных (true или false - истина или ложь) операторов.
Операции сравнения
Операции сравнения позволяют сравнивать два значения, получая результат в зависимости от того, дает ли сравнение истину или ложь. Если сравнение дает ложь, то результирующее значение равно нулю, если значение истинно, то результат равен 1. Ниже приведен список операций сравнения:
> больше
>= больше или равно
< меньше
<= меньше или равно
== равно
!= не равно
Почему нас должно заботить, является ли нечто истиной или ложью? Загрузите и выполните программу деления чисел и посмотрите, что произойдет, когда вы введете 0 для второго значения. Программа напечатает сообщение об ошибке (Divide by zero - Деление на ноль) и остановится. Теперь сделайте следующие изменения в программе и запустите ее снова.
#include <stdio.h>
main ()
{
float a,b,ratio;
printf("Введите два числа: ");
scanf("%f %f",&a,&b);
if (b = = 0.0)
printf("Отношение не определено\n");
else
{
ratio= a / b;
printf("Отношение = %f \n",ratio);
}
}
Оператор, находящийся в двух следующих за оператором scanf() строках, известен как условный оператор if. Вы можете понимать его так: "Если значение выражения (b = = 0.0) истинно, сразу вызвать printf(). Если значение выражения ложно, присвоить a / b переменной ratio, затем вызвать printf()".
Теперь, если вы введете 0 в качестве второго значения, то ваша программа напечатает сообщение «Отношение не определено» и будет ожидать от вас нажатия любой клавиши. Если второе значение - ненулевое, то программа вычисляет и печатает ratio, а затем ожидает нажатия клавиши - и все это благодаря оператора if.