Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Название:Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Автор:
- Жанр:
- Издательство:Вильямс
- Год:0101
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание
Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Резюме
Главной темой этой главы было управление выполнением программы. Язык С предлагает много средств для структурирования программ. Операторы while и for позволяют строить циклы с предусловием. Оператор for особенно хорошо подходит для циклов, в которых производится инициализация и обновление. Инициализировать и обновлять более одной переменной в цикле for можно с помощью операции запятой. Для менее распространенных случаев, когда требуется цикл с постусловием, в языке С предусмотрен оператор do while.
Типичная конструкция цикла while имеет следующий вид:
получить первое значение
while (значение удовлетворяет условию проверки)
{
обработать значение получить следующее значение
}
Цикл for, выполняющий те же действия, выглядит так:
for (получить первое значение; значение удовлетворяет условию проверки;
получить следующее значение) обработать значение
Во всех этих циклах условие проверки служит для выяснения, должна ли выполняться еще одна итерация цикла. В общем случае цикл продолжает работу, если проверочное выражение имеет ненулевое значение, иначе цикл завершается. Часто условием проверки является выражение отношения, которое представляет собой выражение, содержащее операцию отношения. Такое выражение получает значение 1, если отношение истинно, и 0 — во всех остальных случаях. Переменные типа Bool, введенного стандартом С99, могут принимать только значения 1 и 0, обозначающие “истину” и “ложь”.
В дополнение к операциям отношений в главе рассматривались арифметические операции присваивания языка С, такие как += и *=. Эти операции модифицируют значения операнда слева от знака операции, выполняя над ним указанные арифметические операции.
240 глава 6
Следующей темой были массивы. Массив объявляется с применением квадрата скобок для указания количества элементов в нем. Первый элемент произвольного ъ сива имеет номер 0, второй — номер 1 и т.д. Например, объявление
double hippos[20];
создает массив из 20 элементов; отдельные элементы массива получают имена в диа зоне от hippos [0] до hippos [19]. Манипулировать индексами, используемыми , нумерации элементов массива, удобно с помощью циклов. Наконец, в главе было пс зано, как создавать и выполнять функцию с возвращаемым значением.
Вопросы для самоконтроля
Ответы на вопросы для самоконтроля приведены в приложении А.
1. Каким будет значение quack после выполнения каждой строки кода? Каждый последних пяти операторов использует значение quack, сгенерированное пр шествующим оператором.
int quack = 2; quack += 5; quack *= 10; quack -= 6; quack /= 8; quack % = 3;
2. При условии, что переменная value имеет тип int, определите, какой вьп будет получен в результате выполнения следующего цикла:
for ( value = 36; value > 0; value /= 2) printf("%3d", value);
Какие проблемы могли бы возникнуть, если бы переменная value имела i double вместо int?
3. Запищите выражение для каждого из следующих условий проверки.
а. х больше 5.
б. Функция scanf() предпринимает неудачную попытку прочитать одно зна ние типа double (по имени х).
в. х имеет значение 5.
4. Запищите выражение для каждого из следующих условий проверки.
а. Функция scanf() успешно читает одно целое число.
б. х не равно 5.
в. х равно 20 или больше.
5. Приведенная ниже программа не идеальна. Какие ошибки вы можете найти?
#include int main(void)
{
int i, j, list(10); for (1 = 1, i <= 10, i++)
{
list [i] = 2*i + 3; for (j = 1, j > = i, j++) printf(" %d", list[j]); printf("\n");
}
Управляющие операторы С: циклы 241
6. Воспользуйтесь вложенными циклами для написания программы, которая выводит следующую последовательность символов:
$$$$$$$$
$$$$$$$$
$$$$$$$$
$$$$$$$$
7. Что выведет каждая из следующих программ?
#include int main(void)
{
int i = 0;
while (++i < 4)
printf("Hi ! ");
do
printf("Bye! "); while (i++< 8); return 0;
}
#include
int main(void)
{
int i; char ch;
for (i = 0, ch = 'A'; i < 4; i++, ch += 2 * i) printf("%c", ch); return 0;
}
8. Что выведут приведенные далее программы в случае ввода Go west, young man! ? (В кодировке ASCII символ ! следует за символом пробела.)
#include int main(void)
{
char ch;
scanf("%c", &ch); while ( ch != 'g')
{
printf("%c", ch); scanf("%c", &ch);
}
return 0;
}
#include int main(void)
{
char ch;
scanf("%c", &ch); while ( ch != 'g')
{
242 глава 6
printf ("%c",++ch); scanf("%c", &ch);
}
return 0;
}
#include int main(void)
{
char ch; do {
scanf("%c", &ch); printf("%c", ch);
} while ( ch != 'g'); return 0;
}
#include int main(void)
{
char ch;
scanf("%c", &ch);
for ( ch = ch != 'g'; scanf("%c", &ch))
printf("%c", ch); return 0;
)
9. Что выведет следующая программа?
#include int main(void)
{
int n, m; n = 30;
while (++n <= 33) printf("%d|",n); n = 30;
do
printf("%d|",n); while (++n <= 33);
printf("\n***\n");
for (n = 1; n*n < 200; n += 4) printf("%d\n", n);
printf("\n***\n");
for (n = 2, m = 6; n < m; n *= 2, m+= 2) printf("%d %d\n", n, m);
printf("\n***\n"); for (n = 5; n > 0; n--)
{
for (m = 0; m <= n; m++) printf("="); printf("\n");
}
return 0;
}
Управляющие операторы С: циклы 243
10. Взгляните на следующее объявление: double mint[10];
а. Какое имя назначено массиву?
б. Сколько элементов в массиве?
в. Какие виды значений могут храниться в каждом элементе массива?
г. Что из перечисленного ниже является корректным использованием функции scanf() с этим массивом?
• scanf("%lf", mint [2])
• scanf("%lf", &mint[2])
• scanf("%lf", &mint)
11. Кое-кому нравится считать двойками, поэтому он написал программу, которая создает массив и заполняет его четными числами 2, 4, 6, 8 и т.д. Есть ли ошибки в этой программе?
#include
#define SIZE 8 int main(void)
{
int by_twos[SIZE]; int index;
for (index = 1; index <= SIZE; index++) by_twos[index] = 2 * index; for (index = 1; index <= SIZE; index++) printf("%d ", by_twos); printf("\n"); return 0;
}
12. Вы хотите написать функцию, которая возвращает значение типа long. Что должно включать определение этой функции?
13. Определите функцию, которая принимает аргумент типа int и возвращает результат его возведения в квадрат как значение типа long.
14. Что выведет следующая программа?
#include int main(void)
{
int k;
for(k= 1, printf! "%d: Hi ! \ n", k); printf("k= %d\n", k) , k*k < 26; k+=2, printf ("Now k is %d\n", k) ) printf ("k is %d in the loopin\n", k); return 0;
}
Упражнения по программированию
1. Напишите программу, которая создает массив из 26 элементов и помещает в него 26 строчных букв английского алфавита. Также предусмотрите вывод содержимого этого массива.
244 Глава 6
2. Воспользуйтесь вложенными циклами, чтобы написать программу, которая выводит следующую последовательность символов:
$
$$
$$$
$$$$
$$$$$
3. Воспользуйтесь вложенными циклами, чтобы написать программу, которая выводит следующую последовательность символов:
F
FE
FED
FEDC
FEDCB
FEDCBA
Примечание: если в вашей системе не используется ASCII или какая-то другая кодировка, в которой буквы представлены в числовом порядке, то для инициализации символьного массива буквами алфавита вы можете применять следующее объявление:
char lets[27] = "ABODEFGHIJKLMNOPQRSTUVWXYZ";
Затем для выбора конкретных букв можно использовать индексы массива, например, lets [0] для 'А' и т.д.
Читать дальшеИнтервал:
Закладка: