ТОП 10:

Целочисленная арифметика и условный оператор



Условный оператор часто используется в целочисленных алгоритмах. Он позволяет выполнять разнообразные проверки условий. Так, например, остаток от деления на двойку поможет распознать, четное или нечетное число. Пусть m целочисленная переменная, представляющая целое число. Следующий код выведет соответствующее сообщение:

if(m % 2 == 0) printf("Число четное\n");
else printf("Число нечетное\n");

Многие целочисленные алгоритмы представляют из себя переборные задачи, реализуемые циклическими процессами, в теле цикла которых выполняется проверка некоторого условия. Например, пусть требуется найти все числа, меньшие 1000, которые нацело делятся на 13.
Поскольку это циклический процесс с явно заданным числом повторений, подойдет цикл for. Фрагмент кода:

int n; // рабочая переменная, параметр цикла
for(n=13; n<1000; n++)
if(n % 13 == 0) // остаток от деления на 13 равен 0
printf("Число %d делится нацело на 13\n", n);

Фигурные скобки в теле цикла можно опустить, так как в теле выпоняется один оператор - условный.

 

 

Задания для самостоятельной работы к уроку 9

Эти задания похожи на небольшие головоломки. Вам для каждой нужно придумать алгоритм. Решение этих задач - серьезный шаг к освоению программирования и знания языка Си.

1. Определить, является ли число a делителем числа b? А наоборот? (Получить два ответа в одной программе.)
2. Дано натуральное число. Верно ли, что оно заканчивается четной цифрой?
3. Дано натуральное число N. Вычислить 2 в степени N без операции возведения в степень.
4. Дано натуральное число. Верно ли, что первая и последняя его цифры совпадают?
5. Дано натуральное число n. Приписать по единице в начало и конец записи числа n. Например, если было число 6789, то должно получиться 167891.
6. Составить программу для расчета факториала натурального числа N (факториал числа N равен 1*2*... *N).
7. Дано натуральное число. Определить, равен ли квадрат этого числа сумме кубов его цифр.
8. Даны натуральные числа n, m. Получить сумму m последних цифр числа n.
9. Напечатать минимальное число, большее 200, которое нацело делится на 17. (Подсказка - используйте подходящий оператор цикла.)
10. Напечатать максимальное из натуральных чисел, меньшее 500, которое нацело делится на 39.
11. Определить, является ли заданное число степенью числа 3. (Не использовать функцию возведения в степень.)

Для тех, кто справился с заданиями (или некоторыми из них) - присылайте отчеты (по 3-5 заданиям). Если возникают вопросы - спрашивайте, не стесняйтесь.

 

Урок 10. Для чего нужен генератор случайных чисел

Как подключить генератор случайных чисел

Случайные числа используются во многих игровых программах. Например, возьмем стандартную игру "косынка", в ней каждый раз раздача карт происходит по-разному, причем пользователь никак не влияет на этот процесс, а все это делает генератор случайных чисел. В языке Си эту роль выполняет функции rand. Вот ее синтаксис:

int chislo = rand();

Функция rand() генерирует любое положительное число от 0 до числа RAND_MAX, значение которого можно найти в подключаемом файле #include<stdlib.h>, как и саму функцию rand().
Но если вы в таком виде обратитесь к этой функции, как ни странно, значение у нее все время будет одним и тем же. Тут все дело в том, что случайное число генерируется, исходя из определенных параметров. Для превращения функции rand() действительно в генератор случайных чисел нужно в начале программы использовать функцию srand(), которая в качестве аргумента просит первоначальное случайное число. И по этому числу уже будет генерироваться случайное число функцией rand(). Таким числом может быть текущее значение времени, которое компьютер может "узнать" у таймера.
Таким образом, пример начальных действий для использования функций генератора случайных чисел:

int chislo;
srand(time(NULL));
chislo = rand();

Теперь мы добились настоящей генерации случайных чисел. И каждый запуск программы будет выдавать различные цифры (но от повторения никто не застрахован).
Однако полученное число может оказаться очень большим. Иногда желательно, чтобы числа попадали в некоторый заданный диапазон. Здесь на выручку придет знакомая операция "остаток от деления".
Следующая демонстрационная программа получает 10 случайных чисел в диапазоне от 0 до 99 и выводит их на экран:

#include <stdio.h>
#include<stdlib.h>
int main()
{
int j,i;
srand(time(NULL));
printf("RAND_MAX=%d\n",RAND_MAX); // вывод максимально возможного числа
for(j=0;j<10;j++)
{
i=rand() % 100; // остаток от деления на 100
printf("%d\n",i);
}
}

Ну а если вам нужен другой диапазон случайных чисел? Вот синтаксис регулирования диапазона чисел:

начальное значение + rand()% конечное значение

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

int chislo = -3 + rand() % 7;

Небольшой тотализатор

Напишем небольшую программу-отгадывалку. Программа "задумывает" число в диапазоне от 0 до 9 и предлагает пользователю угадать число за 3 попытки. Если число угадано, программа поздравляет игрока и завершает работу.
Полный листинг приводится ниже.

#include <stdio.h>
#include<stdlib.h>
int main()
{
int i, k; // i - случайное число; k - число, введенное пользователем
int j; // j - параметр цикла
srand(time(NULL));
i=rand() % 10; // получено случайное число
for(j=0;j<3;j++) // дано три попытки
{
printf("Введите число от 0 до 9 включительно\n");
scanf("%d", &k); // пользователь вводит число
if(i==k) // число отгадано
{
printf("Congratulations!!! You are winner!!!\n");
return 0; // выход из программы
}
}
printf("Sorry...\n");
return 0; // выход из программы
}

Задания для самостоятельной работы к уроку 10

1. Генератор случайных чисел можно привлекать при подборе проверочных исходных данных для программ.
Получить с помощью генератора случайных чисел:
а) 30 целых чисел, лежащих в диапазоне от -20 до 20;
б) 25 действительных чисел, лежащих в диапазоне от -50 до 50;
в) 27 натуральных чисел, не превосходящих 20;
г) 15 чисел, среди которых 7 двоек и 8 троек.

2. Написать программу проверки знания таблицы умножения. Программа должна вывести 10 примеров, сомножители должны генерироваться случайным образом в диапазоне от 1 до 10. Программа должна выставить оценку: за 10 правильных ответов - "отлично", за 9 и 8 - "хорошо", за 7 и 6 - "удовлетворительно", за 5 и менее - "плохо".

3. Написать программу проверки умения складывать и вычитать двузначные числа. Программа должна вывести 10 примеров, числа должны генерироваться случайным образом. Вычитаемое не должно быть больше уменьшаемого с тем, чтобы результат не был отрицательным.
Программа должна выставить оценку: за 10 правильных ответов - "отлично", за 9 и 8 - "хорошо", за 7 и 6 - "удовлетворительно", за 5 и менее - "плохо".

 

 

 

Урок 11. Что еще надо знать о циклах

Как выйти из цикла независимо от условия

Если условие никогда не становится ложным (неверным), то цикл никогда не заканчивается; в таком случае говорят, что программа "зациклилась" — это серьезная логическая ошибка. В языке Си любое число, не равное нулю, обозначает истинное условие, а ноль — ложное условие, поэтому гипотетически возможны следующие два вида записи циклов:

while(1)
{ тело_цикла... } // бесконечный цикл

while(0)
{ тело_цикла.. } // цикл не выполнится ни разу

Тем не менее, первый цикл довольно часто используется в алгоритмах. Другое дело, что надо иметь возможность выйти из цикла в любой нужный момент и перейти к следующему за циклом оператору. Для этого используют специальный оператор break. Он поможет, в частности, выйти из "бесконечного цикла". Схема использования этого оператора:

while(1)
{ ...
if(условие)break;
...
}

Можно также сказать компьютеру, что надо завершить текущий шаг цикла и сразу перейти к новому шагу (не выходя из цикла) — для этого применяют оператор continue:

while(1)
{ ...
if(условие)continue;
...
}

Этот оператор применяется сравнительно нечасто, слишком он "запутывает" цикл, делает его непонятным.




Последнее изменение этой страницы: 2016-04-07; Нарушение авторского права страницы

infopedia.su не принадлежат авторские права, размещенных материалов. Все права принадлежать их авторам. Обратная связь - 54.166.199.178