- •Министерство образования и науки российской федерации
- •1. Основы алгоритмизации
- •2. Основы программирования на языке Си
- •Типы данных
- •Функции ввода-вывода
- •Условные операторы
- •If (выражение) оператор1;
- •If (выражение)
- •Операторы цикла
- •Оператор switch
- •Операторы прерывания break и continue
- •Массивы
- •Функции
- •1) Способ.
- •2) Способ.
- •Домашнее задание Алгоритмизация и программирование
Оператор switch
Оператор switch, как и условные операторы, используется для ветвления программы в зависимости от значения некоторого выражения.
Синтаксис этого оператора имеет вид:
switch (выражение)
{ case выражение 1: операторы_1;
case выражение 2: операторы_2;
…
case выражение n: операторы_n
default: операторы_d; }
где выражение 1, выражение 2,..., выражение n – константные выражения целого типа.
После вычисления целого выражения в круглых скобках его результат последовательно сравнивается с указанными константными выражениями, начиная с самого первого. При совпадении указанных значений выполняется операторы, следующие за соответствующим константным выражением до конца тела оператора switch.
Если не будет обнаружено ни одного совпадения, то выполняется оператор(ы) в цепи, помеченной ключевым словом default.
Впрочем, последняя может и отсутствовать в операторе switch. Работа переключателя приведена на рисунке 2.4.
Рис. 2.4. Схема работы оператора switch
Операторы прерывания break и continue
Оператор прерывания break имеет следующий вид:
break;
Оператор прерывает выполнение операторов while, do, for и switch и передает управление следующему за ними оператору.
В случае вложенных друг в друга выше перечисленных операторов оператор break прерывает их выполнение только на текущем уровне вложенности. Оператор break не может быть использован ни в каких других конструкциях языка Си, кроме выше перечисленных.
В отличии от оператора break оператор прерывания continue прерывает не выполнение самих операторов while, do или for, а только их текущую итерацию и имеет вид:
continue;
Пример
По номеру дня недели напечатать его название.
# include stdio.h
void main( )
{ int n ;
printf (Введите номер дня недели \n );
scanf ( %d, &n);
switch (n)
{ case 1: printf (Понедельник); break;
case 2: printf (Вторник); break;
case 3: printf (Среда); break;
………………………………………
………………………………………
case 7: printf(Воскресенье); break;
default: printf(Неверный номер дня недели); }
}
Оператор break используется здесь для исключения последующих функций printf() после первого совпадения значения переменной n с константами 1, 2,…7.
Блок-схема оператора switch для решения вышеуказанной задачи приведена ниже.
Пример
Напечатать таблицу умножения.
# include stdio.h
void main()
{
int i, j ;
for ( i=1; i<10; i++ )
{
for ( j=1; j<10; j++ )
printf (“%d*%d=%2d\t “, i, j, i*j ) ;
printf (“\n”) ;
}
}
Массивы
Массив – это упорядоченная совокупность однородных компонент.
Массивы описываются следующим образом:
тип имя_массива [размер] ;
где: тип – определяет тип компонент массива,
размер – выражение целого типа, определяющее количество компонент описываемого массива.
Обращение к элементам массива осуществляется по имени массива и номеру его компоненты в квадратных скобках, причем нумерация компонент начинается с нуля.
При описании массивы могут быть инициализированы, например,
float m[5] {1.2, 3.01, 0.2, 1.1, 5.0};
Возможно и такое описание массива:
int m[ ] = { 1, 4, 2, 3, 7, 3 } ;
В соответствии с синтаксисом в языке Си существуют только одномерные массивы, однако элементами одномерного массива, в свою очередь, могут быть массивы. Поэтому двумерный массив определяется как массив массивов.
Аналогично определяются многомерные массивы. Стандарт языка Си требует, чтобы транслятор мог обрабатывать определения массивов с размерностью до 31.
Например, конструкция float b[5][3]; описывает двумерный массив с именем b, содержащий пять элементов, каждый из которых содержит по три элемента..
Инициализирование двумерных массивов может быть различным:
int a[2][3] = { 1, 5, 6, 9, 7, 8 } ;
int a[2][3] = {{ 1, 5, 6}, {9, 7, 8}} ;
int a[ ][ ] = {{1, 5, 6}, { 9, 7, 8}} ;
Одномерные массивы символов представляют собой строки. Строки должны заканчиваться специальным нуль-символом \0.
Инициализация строки может осуществляться по-разному:
char s1[ 6] {L, i, n, u, x, \0};
char s1[ 6] Linux;
Для ввода массивов используются циклы for.
Одномерные массивы:
float a[7] ; int i ;
for ( i=0; i<7; i++ )
{ printf (“ a[%d] = ”, i+1) ;
scanf (“ %f “, &a[i] ) ; }
Двумерные массивы:
float a[4][5] ; int i , j ;
for ( i=0; i<4; i++ )
for ( j=0; j<5; j++ )
{ printf (“ a[%d][%d] = ”, i+1, j+1) ;
scanf (“ %f ”, &a[i][j] ) ; }
Ввод строк:
a) char str[20] ; scanf ( “ %s “, str ) ;
b) char str[20] ; gets ( str ) ;
В первом случае ввод идет до первого пробела, во втором – можно вводить и пробелы, конец ввода определяется нажатием клавиши “Enter”.
Пример
Вычислить среднее геометрическое положительных элементов целочисленного массива X[12].
void main()
{
int X[12], i, k=0; float sg=1;
for ( i=0; i<12; i++ )
{ printf (“ X[%d] = ”, i+1) ;
scanf (“ %d “, &X[i] ) ;
if (X[i] >0 ) { sg *= X[i] ; k++ ; }
}
sg = pow (sg , 1./k ) ;
printf (“среднее геометрическое = %f “, sg);
}
Пример
Найти сумму целых положительных чисел, меньших 50 и кратных 4 из целочисленного массива С[3][7].
void main()
{
int С[3][7], i, j, s=0;
for ( i=0; i<3; i++ )
for ( j=0; j<7; j++ )
{ printf (“ C[%d][%d] = ”, i+1, j+1 ) ;
scanf (“ %d “, &C[i][j] ) ;
if ( C[i][j] >0 && C[i][j]<50 && C[i][j]%4==0 )
s + = C[i][j] ;
}
printf (“сумма = %d “, s ) ;
}
