Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций по курсу 'Информатика'.doc
Скачиваний:
11
Добавлен:
14.07.2019
Размер:
483.84 Кб
Скачать

Общий вид программы.

Программа на экране компонуется следующим образом:

#include <stdio.h>

main()

{

операторы реализующие алгоритм.

}

Пример: Написать программу, вычисляющую 50 значений функции sin(x). Начальное значение - x и шаг - h заданы с экрана.

#include <stdio.h> // библиотека ввода-вывода

#include <math.h> // библиотека стандартных математических функций

main()

{

float x , h ;

int i ;

printf (“\nначальное значение аргумента функции x=”);

scanf ( “ %f” , &x) ;

printf (“\nвведите шаг h=”);

scanf ( “ %f” , &h) ;

for ( i=1 ; i<=50 ; i++ ) // цикл вычисляющий значения функции с шагом h.

{

printf (“\nx=%f y=%f”, x , sin(x)) ;

x+=h ;

}

}

Вложенные циклы.

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

Построим все возможные перестановки из трех цифр.

  1. 566 070  379 999

#include <stdio.h>

main()

{

int i , j, k ;

for ( i=0 ; i<=9 ; i++ )

for ( j=0 ; j<=9 ; j++ )

for ( k=0 ; k<=9 ; k++ )

printf ( “ \n%d %d %d” , i ,j , k ) ; // распечатываются все возможные

// перестановки

}

Каждай следующий цикл строго внутри предыдущего, тело самого внутреннего цикла состоит из одного оператора, поэтому фигурных скобок не требуется. Следующий цикл состоит ровно из одного оператора цикла и т. д. Можно записать эту программу и со скобками, чтобы показать уровни вложенности.

#include <stdio.h>

main()

{

int i , j, k ;

for ( i=0 ; i<=9 ; i++ )

{

for ( j=0 ; j<=9 ; j++ )

{

for ( k=0 ; k<=9 ; k++ )

{

printf ( “ \n%d %d %d” , i ,j , k ) ;

}

}

}

}

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

Изменим условие предыдущей задачи: Найти такие перестановки, чтобы все цифры были различны.

#include <stdio.h>

main()

{

int i , j, k ;

for ( i=0 ; i<=9 ; i++ )

for ( j=0 ; j<=9 ; j++ )

if (j!=i)

for ( k=0 ; k<=9 ; k++ )

if (( i!=k)&&(j!=k))

printf ( “ \n%d %d %d” , i ,j , k ) ; // распечатываются все возможные

// перестановки без повторов.

}

Еще усложним ситуацию: Отбросить перестановки с различным порядком одних и тех же цифр.

123 321 231 132 - из таких перестановок будем учитывать только одну с возрастающим порядком цифр 123.

#include <stdio.h>

main()

{

int i , j, k ;

for ( i=0 ; i<=7 ; i++ )

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

for ( k=j+1 ; k<=9 ; k++ )

printf ( “ \n%d %d %d” , i ,j , k ) ; // распечатываются все возможные

// перестановки c различным порядком цифр.

}

Решим еще одну интересную задачу.

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

, где - количество цифр числа .

#include <stdio.h>

main()

{

int a , x, k, i=1 ;

printf(“введите первый член последовательности ”) ;

scanf (“%d” , &a) ;

printf ((“\n%d – й член последовательности %d”, i , a) ;

for (i=2 ; i<=5 ; i++ ) // цикл вычисляющий члены последовательности

{

x=a ; k=0 ; // обнуление счетчика количества цифр в числе а

while ( x>0 ) // цикл по подсчету цифр числа пока оно не превратится в 0

{

k++ ; // подсчет цифр

x=x/10 ; // уменьшение числа на один разряд

}

a=a*k ; // вычисление следующего члена последовательности

printf ((“\n%d – й член последовательности %d”, i , a) ;

}

}