Чтение онлайн

ЖАНРЫ

Язык Си - руководство для начинающих

Д. МАРТИН

Шрифт:

Мы можем одновременно и обрадовать и огорчить вас: такое решение оказывается возможным, но вы должны узнать несколько больше о работе функций; поэтому обсуждение данной идеи откладывается до гл. 10.

РЕЗЮМЕ

Основной темой данной главы было обсуждение возможностей управления ходом выполнения программы. Язык Си предоставляет много средств для структурирования программ. С помощью операторов while и for реализуются циклы с предусловием. Второй оператор особенно подходит для циклов, включающих в себя инициализацию и коррекцию переменной. Использование операции "запятая" в цикле for позволяет

инициализировать и корректировать более одной переменной. Для тех редких случаев, когда требуется использовать цикл с постусловием, язык Си предоставляет оператор do while. Операторы break, continue и goto обеспечивают дополнительные возможности управления ходом выполнения программы.

ЧТО ВЫ ДОЛЖНЫ БЫЛИ УЗНАТЬ В ЭТОЙ ГЛАВЕ

Три типа циклов в языке Си: while, for и do while.

Различие между циклами с предусловием и с постусловием.

Почему циклы с предусловием используются гораздо чаще, чем циклы с постусловием.

Дополнительные операции присваивания: += -= *= /= %=.

Как пользоваться операцией "запятая".

Когда использовать операторы break и continue: по возможности редко.

Когда использовать оператор goto: когда вы хотите иметь неудобные, трудные для понимания программы.

Как использовать оператор while для защиты программы от ошибок при вводе данных.

ВОПРОСЫ И ОТВЕТЫ

Вопросы

1. Определите значение переменной quack после выполнения каждого оператора из приведенной ниже их последовательности.

int quack = 2;

quack + = 5;

quack * = 10;

quack - = 6;

quack / = 8;

quack % = 3;

2. Что будет получено на выходе в результате работы следующего цикла?

for(value = 36; value > 0; value /= 2) printf("%3d", value);

3. Как можно модифицировать операторы if в программе угадывание числа2 чтобы был возможен ввод как прописных, так и строчных букв?

4. Мы подозреваем, что следующая программа не совсем правильная. Какие ошибки вы сможете в ней обнаружить?

main /* строка 1 */ 

{ /* строка 2 */

int i, j, lisl[10]; /* строка 3 */

for (i = 1, i < = 10, i++ ) /* строка 5 */

{ /* строка 6 */

list[i] = 2*i + 3; /* строка 7 */

for(j = 1, j >= i, j++ ) /* строка 8 */

printf(" %d \n", lisl[j]); /* строка 9 */

} /* строка 10 */

5. Воспользуйтесь пложенными циклами при написании программы, выводящей на печать следующую фигуру:

$$$$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$$$  

6. Напишите программу, которая создает массив из 26 элементов и помещает в него 26 строчных букв.

Ответы

1. 2, 7, 70, 64, 8, 2

2. 36 18 9 4 2 1.

Вспомните, как выполняется деление целых чисел. Результатом деления 1 на 2 будет 0, поэтому работа цикла завершится после

того, как переменная value станет равной 1.

3. if(response == 'б' || response == 'Б').

4. строка 3: должно быть list[10].

строка 5: вместо запятых должны стоять символы "точка с запятой".

строка 5: переменная i должна изменяться в диапазоне от 0 до 9, а не от 1 до 10.

строка 8: вместо запятых должны стоять символы "точка с запятой".

строка 8: знак >= должен быть заменен на <=. В противном случае при значении i, равном 1, цикл никогда не завершится.

строка 10: между строками 9 и 10 должна находиться еще одна закрывающая фигурная скобка. Одна скобка закрывает составной оператор, а другая тело программы.

5.

main6.

{ int i, j;

for(i = 1; i <= 4; i++)

{

for( j = 1; j <= 8; j++)

printf("$");

}

printf("\N");

}

main

{ int i;

char ch, alpha[26];

for(i = 0, ch = 'a'; i <= 26; i++, ch++)

alpha[i] == ch;

УПРАЖНЕНИЯ

1. Модифицируйте программу угадывание числа2 в соответствии с нашими предположениями об улучшении ее работы.

2. Реализуйте наше предложение о повышении эффективности pаботы программы нахождения простых чисел.

3. Воспользуйтесь вложенными циклами при написании программы, выводящей на печать следующую фигуру:

$

$$

$$$

$$$$

$$$$$

9. Как правильно пользоваться функциями

ФУНКЦИИ

СТРОИТЕЛЬНЫЕ БЛОКИ ПРОГРАММЫ

СВЯЗЬ МЕЖДУ ФУНКЦИЯМИ: АРГУМЕНТЫ, УКАЗАТЕЛИ, ВОЗВРАТ ЗНАЧЕНИЯ

ТИПЫ ФУНКЦИЙ

КЛЮЧЕВОЕ СЛОВО return

Принципы программирования на языке Си основаны на понятии функции. В представленных ранее примерах программирования мы уже воспользовались несколькими функциями: printf, scanf, getchar, putchar и strlen. Эти функции являются системными, однако мы создали и несколько своих собственных функций под общим именем main. Выполнение программы всегда начинается с команд, содержащихся в функции main, затем последняя вызывает другие функции, например getchar. Теперь мы переходим к вопросу о том, как создавать свои собственные функции н делать их доступными для функции main, а также друг для друга.

Во-первых, что такое функция? Функция - самостоятельная единица программы, спроектированная для реализации конкретной задачи. Функции в языке Си играют ту же роль, какую играют функции, подпрограммы и процедуры в других языках, хотя детали их структуры могут быть разными. Вызов функции приводит к выполнению некоторых действии. Например, при обращении к функции printf осуществляется вывод данных на экран. Другие же функции позволяют получать некоторую величину, используемую затем в программе. К примеру, функция strlen "сообщает" программе длину конкретной строки. В общем функции могут выполнять действия и получать значения величин, используемых в программе.

Поделиться с друзьями: