- •Содержание
- •Как пользоваться данной книгой
- •Благодарности
- •Введение
- •Что вам даст эта книга
- •Программные средства
- •Глава 1
- •Компьютерная программа
- •Пройти два квартала на север; повернуть налево на 90 градусов; пройти 50 футов прямо; повернуть налево на 90 градусов; подняться на четыре ступеньки; открыть дверь и войти.
- •Языки программирования
- •Компиляторы
- •Интерпретатор
- •Скорость
- •Переносимость
- •Структурирование
- •Библиотеки функций
- •Необходимые пояснения
- •Что такое объектно-ориентированное программирование
- •Карточка члена клуба
- •Взять карточки
- •Клубная Карточка
- •Клубная карточка: Изменить адрес (Смит, Западная Авеню, 12)
- •Что Си может и чего не может
- •Этапы программирования
- •План программы
- •Текст программы
- •Компиляция программы
- •Компоновка программы
- •Тестирование программы
- •Изучение основ программирования
- •Что нужно, чтобы писать программы
- •Вопросы
- •Упражнения
- •Глава 2
- •Структура программы
- •Main() Функция, означающая начало программы— точку входа
- •(Прим.Перев.)
- •Прописные и строчные символы
- •Инструкция return
- •Использование комментариев
- •/*Эта программа выводит сообщение на экран*/ main()
- •/*Эта программа выводит сообщение на экран */ main()
- •/*Эта программа выводит сообщение на экран, она содержит инструкцию return(0) для совместимости с компиляторами, не имеющими автоматического возврата в систему
- •/*Эта программа выводит сообщение на экран, она содержит
- •//Эта программа выводит сообщение на экран
- •//Эта программа выводит сообщение на экран, она содержит
- •Понятие параметров
- •Puts("Привет");
- •Директива #include
- •Вопросы
- •Упражнения
- •Добро пожаловать в мой мир. Командовать парадом буду я.
- •Глава 3
- •Символьные данные
- •Целочисленные величины
- •Вещественные числа
- •Почему надо использовать целые числа?
- •Константы и переменные
- •Имена констант и переменных
- •Определение констант
- •#Define my_friend "Марина"
- •Определение переменных
- •Присваивание значения
- •Определение строковой переменной
- •#Define client "Кейт Тиммонс"
- •Типы данных и функции
- •Литералы
- •Проектирование программы
- •Упражнения
- •Глава 4
- •Функция puts()
- •Puts("Всем привет!");
- •#Define message "Всем привет"
- •Функция putchar()
- •Двойственность символьных переменных
- •Управляющие коды
- •Код «новая строка»
- •Код «табуляция»
- •Код «возврат каретки»
- •Код «возврат на шаг»
- •Код «перевод страницы»
- •Отображение специальных символов на экране монитора
- •Мы зовем ее "Наташа"
- •Puts("Мы зовем ее "Наташа"");
- •#Define message "Привет!" main()
- •Вывод чисел
- •Моими счастливыми номерами являются 12 и 21
- •Моими счастливыми номерами являются 21 и 12
- •17 Равно 11 в шестнадцатеричной и 21
- •Printf("Стоимость составляет %8.2f", amount);
- •Стоимость составляет 45.58
- •Printf("Стоимость составляет %2.2f", amount);
- •Стоимость составляет 45.58
- •Printf("Стоимость составляет %-8.2f
- •Стоимость составляет 45.58 в долларах сша
- •Printf("я позвонил, чтобы сказать %8s", message);
- •Я позвонил, чтобы сказать Привет
- •Выбор правильных средств вывода информации
- •Вам исполнилось 43 года.
- •Проектирование программы
- •(Прим.Перев.)
- •Puts("Пожалуйста, введите сумму полученного займа:");
- •Упражнения
- •Наименование товара: Гибкий диск Цена за 1 упаковку: 3.55
- •Внимание! Внимание! Внимание! Внимание! Нежелательное отклонение параметров среды.
- •Глава 5
- •Функция gets()
- •Пожалуйста, введите Ваше имя:
- •Пожалуйста, введите Ваше имя: Петр Иванов Подтвердите, Ваше имя: Петр Иванов
- •Функция getchar()
- •«Для продолжения нажмите Enter»
- •Printf("Для продолжения нажмите Enter"); getchar();
- •Оператор получения адреса &
- •Функция scanf()
- •Входной поток
- •Использование функции scanf()
- •Пожалуйста, введите целое число и нажмите Enter:
- •Выбор соответствующих средств ввода данных
- •Будьте осторожны при использовании scanf()
- •Неинициализированные переменные
- •Вопросы
- •Упражнения
- •Глава 6
- •Арифметические операторы
- •Для того чтобы дать 57 долларов сдачи, используйте: 2 банкнот(ы) достоинством 20 долларов
- •Типы данных и операторы
- •Выражения
- •Значение равно 24
- •Приоритет операторов и порядок вычислений
- •40 * Rate /* обычный недельный заработок */ hours - 40 /* сверхурочные часы */
- •Счетчики
- •Новое значение переменной равно старому значению плюс 1
- •Операторы инкремента
- •Первое значение переменной count равно 0
- •Printf("Второе значение переменной
- •Первое значение переменной count равно 0
- •Первое значение переменной count равно 0
- •Аккумуляторы
- •Присваивание начального значения
- •Остерегайтесь логических ошибок
- •Ищите образцы
- •Диагностические проблемы
- •Значение regular равно 400 значение extra равно -2 значение d_time равно 40
- •Вопросы
- •Глава 7
- •Как использовать функции
- •Puts("Сколько байтов в одном килобайте?"); puts("Для получения ответа нажмите Enter");
- •Переменные в функциях
- •Автоматические (локальные) переменные
- •Внешние (глобальные) переменные
- •Статические переменные
- •Значение autovar равно 0 значение statvar равно 0 значение autovar равно 0 значение statvar равно 0 значение autovar равно 0 значение statvar равно 0 значение autovar равно 0 значение statvar равно 0
- •Передача параметров
- •Puts("Привет!");
- •Фактических параметров. (Прим.Перев.)
- •Введите стоимость единицы товара: 100
- •Возвращаемые значения
- •Возврат значений типа float
- •Использование return() в функции main()
- •Использование макроопределений
- •#Define enter printf("Пожалуйста, введите число: ")
- •#Define enter printf("Пожалуйста, введите число: ") main()
- •#Define enter printf("Пожалуйста,
- •Проектирование программы
- •Автоматические или внешние переменные?
- •Неправильный ввод
- •Введите размер скидки (в виде десятичной дроби):
- •Вопросы
- •Упражнения
- •Глава 8
- •Условия
- •Составные инструкции
- •Дополненный Опросник
- •Вложенные инструкции if
- •Конструкция switch/case/default
- •Проектирование программы
- •Проверка правильности ввода
- •Вопросы
- •Упражнения
- •Глава 9
- •Цикл for;
- •Использование цикла for
- •Создание паузы в программе
- •Использование переменных
- •Вложенные циклы
- •Использование цикла do...While
- •Вложенные циклы do
- •Использование цикла while
- •Printf("Введите размер скидки: "); scanf("%f", &discount);
- •Проектирование программы
- •Использование флагов
- •Использование инструкции break
- •Вопросы
- •Упражнения
- •3. Цена Налог Итого
- •Глава 10
- •Массивы
- •Определение массива
- •Ввод значений в массив
- •Введите значение температуры #n
- •Работа с массивами
- •Просмотр массива
- •Поиск в массиве
- •Передача массива функции
- •Использование массивов
- •Сравнение двух строк
- •Слияние строк
- •Массивы строк
- •Вопросы
- •Упражнения
- •Глава 11
- •Использование структур
- •Определение структуры
- •Определение структурных переменных
- •Присвоение начального значения
- •Puts("Введите сведения о диске
- •Структуры и функции
- •Значение переменной tax равно 35
- •Указатели и функции
- •Вопросы
- •Упражнения
- •Глава 12
- •Что такое файловая структура
- •Указатель на файл
- •R Указывает на то, что будет выполняться
- •Как закрыть файл
- •Функции ввода и вывода
- •Работа с символами
- •Посимвольное чтение из файла
- •Работа со строками
- •Printf("Пожалуйста, введите имя: "); gets(name);
- •Форматированный ввод и вывод
- •Дискеты 1.120000 100
- •Дискеты 1.120000 100лента 7.340000 150картридж 75.000000 3
- •Дискеты 1.120000 Memoryexлента
- •Дискеты 1.120000 Memoryexлента
- •Чтение форматированных файлов
- •Текстовый и двоичный форматы
- •Двоичный формат
- •Печать данных
- •Инструкции
- •Проектирование программы
- •Вопросы
- •Упражнения
- •Глава 13
- •Прикладная программа
- •Глобальные определения
- •Добавление записей: функция addcd()
- •Удаление записи: функция delcd()
- •Printf("Введите название диска: "); gets(delname);
- •Редактирование данных: функция chcd()
- •Printf("Введите название диска: "); gets(disc.Name);
- •Вывод записи на экран: функция locate()
- •Нажмите Enter");
- •Печать записей: функция plist()
- •Приложение I
- •Глава 1
- •Глава 2
- •Добро пожаловать в мой мир.Командовать парадом буду я.
- •Глава 3
- •Для вещественных чисел:
- •Глава 4
- •Printf("%80s","Страница");
- •Наименование товара: Гибкий диск Цена за 1 упаковку: 3.55
- •Внимание! Внимание! Внимание! Внимание! Нежелательное отклонение параметров среды.
- •Глава 5
- •Переменная initial определена как символьная.
- •Глава 6
- •В программе используется переменная shipping, которая не была определена. Вторая инструкция scanf() оканчивается апострофом, вместо точки с запятой.
- •Глава 7
- •Puts("Это первое"); main(); return(0);
- •Собственная функция может помещаться только после функции main(), а не перед ней.
- •Puts("Это первое"); dothis();
- •Глава 8
- •В первой инструкции printf() литерал
- •Глава 9
- •Переменные row и column определены с типом float, но если вы хотите использовать их в цикле, они должны относиться к типу int.
- •Глава 10
- •Индексы всех элементов массива temps заключены в круглые скобки, вместо квадратных. Переменные high и low не определены. Переменная total определена,
- •Глава 11
- •Ко всем переменным, используемым в инструкциях ввода и вывода, обращение происходит без использования имени структурной переменной.
- •Глава 12
- •Файл заголовков называется stdio.H, а не stdio.C. Указатель на файл должен определяться со звездочкой перед именем: *fp. В цикле while
- •Приложение II
Переменные row и column определены с типом float, но если вы хотите использовать их в цикле, они должны относиться к типу int.
Инструкция putchar('\n') помещена таким образом, что она будет выполнена только один раз. Таблица, таким образом, будет
выведена в одну линию. Поместите инструкцию на одну строку выше, перед закрывающей фигурной скобкой.
Глава 10
.Напишите программу, в которой массивы используются для хранения имен, адресов и номеров телефо- нов 20 человек.
main()
{
char names[20][20], street[20][20], city[20][20];
char state[20][3], zip[20][6],
phone[20][13], lookfor[20];
int count; for(count=0;count<20;count++)
{
puts("Введите имя"); gets(names[count]); puts("Введите название улицы"); gets(street[count]); puts("Введите город"); gets(city[count]); puts("Введите штат"); gets(state[count]); puts("Введите индекс"); gets(zip[count]);
puts("Введите номер телефона");
gets(phone[count]);
}
}
.Внесите в программу из упражнения 1 изменения так, чтобы иметь возможность ввода имени и после- дующего просмотра массива в поисках номера телефона соответствующего человека.
main()
{
char names[20][20], street[20][20], city[20][20];
char state[20][3], zip[20][6],
phone[20][13], lookfor[20];
int count; for(count=0;count<20;count++)
{
puts("Введите имя: "); gets(names[count]);
puts("Введите название улицы: "); gets(street[count]); puts("Введите город: "); gets(city[count]); puts("Введите штат: "); gets(state[count]); puts("Введите индекс: "); gets(zip[count]);
puts("Введите номер телефона: "); gets(phone[count]);
}
puts("Введите имя: "); gets(lookfor);
for(count=0; count<20;count++)
{
if(strcmp(names[count],lookfor)==0)
printf("%s %s\n", names[count], phone[count]);
}
}
.Объясните, почему следующая программа написана неправильно:
main()
{
int temps(31); int index, total;
for (index = 0; index < 31; index++)
{
printf("Введите значение
температуры #%d: ", index); scanf("%d", &temps(index));
}
high = temps(0);
low = temps(0); index = 1; while (index < 31)
{
if (temps(index) > high)
high = temps(index);
else
index++;
}
low = temps(index);
printf("Минимальное значение
температуры равно %d\n", low); printf("Максимальное значение
температуры равно %d\n", high);
}
Индексы всех элементов массива temps заключены в круглые скобки, вместо квадратных. Переменные high и low не определены. Переменная total определена,
но не используется в программе. Конструкция if...else написана с ошибкой: если рассматриваемое значение не превышает текущее значение переменной high, это не значит, что оно непременно меньше текущего значения переменной low.
Глава 11
.Напишите программу, в которой структура используется для составления инвентарной описи. Информа- ция включает в себя название продукта, цену, количество, имя поставщика.
struct product
{
char name[20]; float cost; int quantity; char vendor[20];
} item;
main()
{
puts("Введите сведения о товаре\n\n"); printf("Введите наименование:");
gets(item.name); printf("Введите цену:"); scanf("%f", &item.cost);
printf("Введите количество единиц:"); scanf("%d", &item.quantity); printf("Введите имя поставщика:"); gets(item.vendor);
}
.Внесите изменения в программу из упражнения 1 с тем, чтобы можно было вводить информацию в мас- сив структур, состоящий из 20 элементов.
struct product
{
char name[20]; float cost; int quantity; char vendor[20];
} item[20];
main()
{
int count; for(count=0;count<20;count++)
{
puts("\nВведите сведения о товаре\n\n"); printf("Введите наименование:"); gets(item[count].name); printf("Введите цену:");
scanf("%f", &item[count].cost); printf("Введите количество единиц:"); scanf("%d", &item[count].quantity); printf("Введите имя поставщика:"); gets(item[count].vendor);
}
}
.Внесите изменения в программу из упражнения 2 так, чтобы выводить на экран общую стоимость вклю- ченных в опись товаров.
struct product
{
char name[20]; float cost; int quantity; char vendor[20];
} item[20];
main()
{
¶a++ae æepcue u+uru æɵuyye+a sneuwpo++ɵu usgawenacwæou "Books-shop".
Pacupocwpa+e+ue, upogaua, uepesauuca ga++on u+uru unu ee ¬acwen 3AMPE[EHª.
O æcex +apyue+uex upoca6a coo6yawa uo agpecy piracy@books-shop.com
float total; int count; total=0;
for(count=0;count<20;count++)
{
puts("\nВведите сведения о товаре\n\n"); printf("Введите наименование: "); gets(item[count].name); printf("Введите цену: ");
scanf("%f", &item[count].cost); printf("Введите количество единиц: "); scanf("%d", &item[count].quantity); printf("Введите имя поставщика: "); gets(item[count].vendor); total = total + (item[count].cost *
item[count].quantity);
}
printf("Общая стоимость включенных в опись \
товаров составляет %8.2f", total);
}
.Напишите программу, в которой две переменные типа float определяются в main() как локальные, а за- тем используются в функции, вычисляющей квадраты обоих чисел.
main()
{
float num1, num2; puts("Введите первое число"); scanf("%f",&num1); puts("Введите второе число"); scanf("%f",&num2); doubleit(&num1, &num2);
}
doubleit(dcount1, dcount2) float *dcount1, *dcount2;
{
float sq1, sq2;
sq1 = *dcount1 * *dcount1; sq2 = *dcount2 * *dcount2;
printf("Квадрат %f равен %f\n",*dcount1, sq1); printf("Квадрат %f равен %f\n",*dcount2, sq2);
}
Для того чтобы вернуть значения вызывающей функции, используйте следующую программу:
main()
{
float num1, num2;
puts("Введите первое число"); scanf("%f",&num1); puts("Введите второе число"); scanf("%f",&num2); doubleit(&num1, &num2);
printf("Квадрат первого числа равен %f\n", num1); printf("Квадрат второго числа равен %f", num2);
}
doubleit(dcount1, dcount2) float *dcount1, *dcount2;
{
float sq1, sq2;
*dcount1 = *dcount1 * *dcount1;
*dcount2 = *dcount2 * *dcount2;
}
.Объясните, почему следующая программа написана неверно:
main()
{
struct CD
{
char description[40]; char category[12]; char name[20];
float cost; int number;
} disc;
puts("Введите сведения о диске"); printf("Введите название: "); gets(name); printf("Введите описание: "); gets(description);
printf("Введите категорию: "); gets(category);
printf("Введите цену: "); scanf("%f", &cost); printf("Введите номер ячейки: "); scanf("%d", &number);
puts("Введена следующая информация о диске: "); printf("Название: %s\n", name); printf("Описание: %s\n", description); printf("Категория: %s\n", category); printf("Цена: %6.2f\n", cost); printf("Номер п/п: %d\n", number);
}
