Основы программирования на языке Си

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

РОССИЙСКОЙ ФЕДЕРАЦИИ

Старооскольский технологически институт им. А.А. Угарова (филиал) федерального государственного автономного образовательного учреждения высшего образования

«Национальный исследовательский технологический университет «МИСиС»

(СТИ НИТУ «МИСиС»)

Кафедра высшей математики и информатики

Методические указания по выполнению домашнего задания

по курсу «Информатика»

для студентов бакалавриата очной формы обучения специальностей:

13.03.02 – Электроэнергетика и электротехника

15.03.04 – Автоматизация технологических процессов и производств

09.03.02 – Информационные системы и технологии

Старый Оскол

ТЕОРЕТИЧЕСКОЕ ВВЕДЕНИЕ

Основы алгоритмизации

Любой алгоритм может быть представлен в виде комбинации трех элементарных алгоритмических структур:

· линейной;

· ветвления;

· цикла.

Блок-схемы этих структур представлены на рисунках 1.1 – 1.4.

Основы программирования на языке Си - student2.ru

Рис. 1.1. Алгоритм линейной структуры.

Основы программирования на языке Си - student2.ru

Рис. 1.2. Алгоритм структуры ветвления.

Простейший алгоритм линейной структуры представляет собой линейную последовательность операций. При этом каждая операция выполняется вне зависимости от результата другой.

Алгоритм является ветвящимся, если для его реализации используется несколько ветвей направлений. Выбор ветви определяется некоторым признаком, принимающим два или более значения. Обычно это логические значения – ²истина² и ²ложь².

Циклический алгоритм представляет собой многократно повторяющийся фрагмент, содержащий следующие элементы:

1) инициализация цикла;

2) тело цикла;

3) модификация параметра цикла;

4) проверка условия окончания цикла.

Указанный порядок элементов соответствует циклу с постусловием, когда проверка условия окончания выполняется после выполнения тела цикла.

Если же пункт 4 предшествует пункту 2, то такой цикл называется циклом с предусловием.

На рисунках 1.3 – 1.4 представлены структурные схемы циклических алгоритмов с постусловием и с предусловием.

Основы программирования на языке Си - student2.ru

Рис.1.3. Циклический алгоритм с постусловием.

Основы программирования на языке Си - student2.ru

Рис. 1.4. Циклический алгоритм с предусловием

Пример

Дана функция f(x), непрерывная на отрезке [a;b], которому принадлежит корень уравнения f(x)= 0.

Вычислить приближённое значение этого корня с точностью e=10-4 методом Ньютона и посчитать количество приближений к корню.

Очередное n+1‑ое приближение к корню уравнения вычисляется по формуле:

xn+1= xn - f(xn) / f¢ (xn)

до тех пор, пока соблюдается условие:

|xn+1- xn| ³ e

Начальное приближение x0к корню уравнениявыбирается из условия:

f (x0)*f²(x0) > 0.

Блок-схема для данной задачи приведена на рисунке 1.5.

Основы программирования на языке Си - student2.ru

Рис. 1.5. Комбинация алгоритмов: линейного, ветвления и итерационного цикла

Типы данных

В Си используются следующие основные типы данных.:

1) целый тип;

· int – целый ( от -32768 до 32767 à 2 байта)

· long int – длинный целый ( à 4 байта)

· unsigned int – бесзнаковый целый (от 0 до 65535 à2байта)

2) вещественный тип;

· float – вещественный одинарной точности ( 4 байта )

· double – вещественный удвоенной точности ( 8 байт )

· long double - вещественный максимальной точности ( 10 байтов )

3) символьный тип;

· char – символы с кодом от -127 до 128 à 1 байт

· unsigned char –символы с кодом от 0 до 255 à 1 байт

Значениями символьных переменных являются символьные константы, они эквивалентны целым числам, совпадающими с кодами этих символов.

Например, записи: x=’A’ и x=65 для переменной x типа char эквивалентны, так как код символа ‘A’ по таблице ASCII равен 65.

4) тип void - неопределенный тип, используется при определении функций, не возвращающих значения.

Диапазон значений для каждого типа зависит от аппаратных средств и соответствующей реализации компилятора языка Си.

Все переменные до их первого использования в программе должны быть определены, то есть для них должна быть выделена память. Мы будем рассматривать переменные автоматической памяти.

Например,

int x, y = 0; float s, a ;

Функции ввода-вывода

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

Функции printf() и scanf() осуществляют форматированный вывод на стандартное устройство вывода (монитор) и ввод со стандартного устройства ввода (клавиатура).

Обращение к функции printf() выглядит следующим образом

printf (format, list) ;

где

format – форматная строка, символы которой выводятся без изменений, за исключением управляющих символов и спецификаций формата, начинающихся с символа ¢%¢.

list – список переменных, значения которых подставляются в спецификации формата (может и отсутствовать)

Спецификации формата задают способ преобразования данных из списка list.

Для задания типа могут использоваться следующие символы:

· d - для целых десятичных чисел со знаком;

· u - для целых десятичных чисел без знака;

· o - для восьмеричных чисел без знака;

· x - для шестнадцатиричных чисел без знака;

· f - для вещественных чисел со знаком с фиксированной точкой;

· c - одиночные символы;

· s - строки символов.

Так например, если i = 10, x = 1,45 и y = 123,47, то результатом работы следующей конструкции

printf(²i = %d \t x = %f \t y = %f \n², i, x, y);

будет вывод

i = 10 x = 1.45 y = 123.47

Спецификации формата функции scanf() те же самые, что и для функции printf(), однако список list содержит уже не имена переменных, а их адреса. Например, функция

scanf (²%d %f², &i, &x);

осуществляет ввод с клавиатуры значений переменных i и x целого и вещественного типов соответственно.

Если же вводится строка символов, то необходимо использовать спецификацию формата ¢%s¢, но применять операцию & уже не надо.

Условные операторы

Условный оператор в Си имеет полную и сокращенную форму.

1) Сокращенная форма условного оператора имеет вид:

if (выражение) оператор1;

где ²оператор1² – простой или составной оператор.

Условный оператор if выполняет следующие действия. Если выражение в круглых скобках вырабатывает ненулевое значение (истина), то выполняется “оператор1”, в противном случае выполняется следующий за оператором if оператор.

Блок – схема оператора if приведена на рисунке 2.2.

2) Полная форма условного оператора имеет вид:

If (выражение)

оператор1;

Else

оператор2;

где ²оператор1² и ²оператор2² – простые или составные операторы.

Если выражение в круглых скобках вырабатывает ненулевое значение (истина), то выполняется ²оператор1², в противном случае выполняется оператор2². Блок – схема оператора if…else приведена на рисунке 2.3.

Основы программирования на языке Си - student2.ru

Рис. 2.2.Схема работы оператора if

Основы программирования на языке Си - student2.ru

Рис. 2.3. Схема работы оператора if…else.

Пример

Найти максимальное число из трех целых чисел x, y, z.

int x, y, z, max;

scanf (“%d %d %d”, &x, &y, &z);

if (x > y)

max = x;

else

max = y;

if (z > max)

max =z;

printf (“max = %d”, max);

Пример

Вычислить значение функции:

Основы программирования на языке Си - student2.ru

Возможны два пути решения:

1)

if ( x > 0)

y = 1;

if (x = = 0)

y = 0;

if ( x < 0)

y = - 1;

2)

if (x > 0)

y = 1;

else

if (x < 0)

y = - 1;

else

y = 0;

Операторы цикла

Синтаксис оператора цикла for следующий:

Оператор switch

Оператор switch, как и условные операторы, используется для ветвления программы в зависимости от значения некоторого выражения.

Синтаксис этого оператора имеет вид:

Switch (выражение)

{ case выражение 1: операторы_1;

case выражение 2: операторы_2;

case выражение n: операторы_n

default: операторы_d; }

где выражение 1, выражение 2,..., выражение n – константные выражения целого типа.

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

Если не будет обнаружено ни одного совпадения, то выполняется оператор(ы) в цепи, помеченной ключевым словом default.

Впрочем, последняя может и отсутствовать в операторе switch. Работа переключателя приведена на рисунке 2.4.

Основы программирования на языке Си - student2.ru

Рис. 2.4. Схема работы оператора switch

Пример

По номеру дня недели напечатать его название.

# 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 для решения вышеуказанной задачи приведена ниже.

Основы программирования на языке Си - student2.ru

Пример

Напечатать таблицу умножения.

# 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”) ;

}

}

Основы программирования на языке Си - student2.ru

Массивы

Массив – это упорядоченная совокупность однородных компонент.

Массивы описываются следующим образом:

тип имя_массива [размер] ;

где: тип – определяет тип компонент массива,

размер – выражение целого типа, определяющее количество компонент описываемого массива.

Обращение к элементам массива осуществляется по имени массива и номеру его компоненты в квадратных скобках, причем нумерация компонент начинается с нуля.

При описании массивы могут быть инициализированы, например,

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.

1) Одномерные массивы:

float a[7] ; int i ;

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

{ printf (“ a[%d] = ”, i+1) ;

scanf (“ %f “, &a[i] ) ; }

2) Двумерные массивы:

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] ) ; }

3) Ввод строк:

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);

}

Основы программирования на языке Си - student2.ru

Пример

Найти сумму целых положительных чисел, меньших 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 ) ;

}

Основы программирования на языке Си - student2.ru

Функции

Все программы на языке Си должны содержать одну главную функцию main(), с которой начинается выполнение программы. Функция main() может содержать вызовы других функций, которые в свою очередь могут содержать вызовы следующих функций и т.д.

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

Определение функции содержит:

тип_функции имя_функции (спецификация_формальных параметров)

{ определения_объектов;

исполняемые_операторы;

}

При этом имеет место следующее:

1. Формальные параметры могут отсутствовать.

2. Тело функции – это составной оператор или блок.

3. Переменные, объявленные в теле функции, являются локальными; переменные, объявленные вне функций, являются глобальными.

4. Определения функций не могут быть вложенными.

5. В теле функции может использоваться оператор return для возврата из функции результата. Оператор return может вернуть не более одного значения.

6. Тип функции определяется типом, возвращаемого ею значения. Если функция не вырабатывает значения, то она должна быть объявлена типом void. Если тип функции не объявлен, то по умолчанию она имеет тип int.

7. Необходимо различать объявление функции или прототип функции от определения функции. Определение функции задает действия самой функции, а прототип функции только объявляет функцию и не содержит тела функции.

8. Обращение к функции (иначе говоря, вызов функции) имеет вид:

имя_функции (список фактических параметров)

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

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

9. Функция может иметь несколько операторов return. Например,

float min (float a, float b)

{ if (a<=b) return a; else return b; }

Пример.

Вычислить среднее значение функции y(x)=5x3 + x2 + x в точках a, b, (a+b)/2, где a = 3, b = 4.

Программу можно составить двумя способами: 1) без использования прототипа функции; 2) с использованием прототипа:

Способ.

# include <stdio.h>

# include <math.h>

float y( float x )

{ return 5* pow( x, 3 ) + x * x + x ; }

void main( )

{

float a = 3, b = 4, s = 0 ;

s = ( y(a) + y(b) + y((a+b)/2) ) / 3. ;

printf( “среднее значение y(x) равно %f “, s);

}

Способ.

# include <stdio.h>

# include <math.h>

/*Прототип функции y(x) */

float y( float x ) ;

void main( )

{

float a = 3, b = 4, s ;

s = ( y(a) + y(b) + y((a+b)/2) ) / 3. ;

printf(“среднее значение y(x) равно %f “, s );

}

float y( float x )

{ return 5* pow( x, 3 ) + x * x + x ; }

Блок-схема для каждой функции чертится отдельно. Для вызова функции используется блок «предопределенный процесс».

Основы программирования на языке Си - student2.ru Основы программирования на языке Си - student2.ru

Пример (параметрами функции являются одномерные массивы).

Заданы три случайные величины X [5] , Y [7], Z [9]. Используя функцию для расчета математического ожидания, найти математические ожидания заданных случайных величин.

Для расчета математического ожидания используется следующая формула: Основы программирования на языке Си - student2.ru

# include <stdio.h>

float mo( float A[ ], int n )

{

int i;

float s=0;

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

s+=A[ i ] ;

s \ = n;

return s;

}

void main( )

{

float mx, my, mz, X[5] = {3,4,5.3,2,4.1},

Y[7] = {4,5,5,3,4,3,7},

Z[9] = {5,6,5,7,6,7,5,6,4 } ;

mx = mo( X, 5 );

my = mo( Y, 7 );

mz = mo( Z, 9 );

printf ( “мат.ожидание X равно %f “, mx ) ;

printf ( “мат.ожидание Y равно %f “, my ) ;

printf ( “мат.ожидание Z равно %f “, mz ) ;

}

Основы программирования на языке Си - student2.ru Основы программирования на языке Си - student2.ru

ДОМАШНЕЕ ЗАДАНИЕ

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

РОССИЙСКОЙ ФЕДЕРАЦИИ

Старооскольский технологически институт им. А.А. Угарова (филиал) федерального государственного автономного образовательного учреждения высшего образования

«Национальный исследовательский технологический университет «МИСиС»

(СТИ НИТУ «МИСиС»)

Кафедра высшей математики и информатики

Методические указания по выполнению домашнего задания

по курсу «Информатика»

для студентов бакалавриата очной формы обучения специальностей:

13.03.02 – Электроэнергетика и электротехника

15.03.04 – Автоматизация технологических процессов и производств

09.03.02 – Информационные системы и технологии

Старый Оскол

ТЕОРЕТИЧЕСКОЕ ВВЕДЕНИЕ

Основы алгоритмизации

Любой алгоритм может быть представлен в виде комбинации трех элементарных алгоритмических структур:

· линейной;

· ветвления;

· цикла.

Блок-схемы этих структур представлены на рисунках 1.1 – 1.4.

Основы программирования на языке Си - student2.ru

Рис. 1.1. Алгоритм линейной структуры.

Основы программирования на языке Си - student2.ru

Рис. 1.2. Алгоритм структуры ветвления.

Простейший алгоритм линейной структуры представляет собой линейную последовательность операций. При этом каждая операция выполняется вне зависимости от результата другой.

Алгоритм является ветвящимся, если для его реализации используется несколько ветвей направлений. Выбор ветви определяется некоторым признаком, принимающим два или более значения. Обычно это логические значения – ²истина² и ²ложь².

Циклический алгоритм представляет собой многократно повторяющийся фрагмент, содержащий следующие элементы:

1) инициализация цикла;

2) тело цикла;

3) модификация параметра цикла;

4) проверка условия окончания цикла.

Указанный порядок элементов соответствует циклу с постусловием, когда проверка условия окончания выполняется после выполнения тела цикла.

Если же пункт 4 предшествует пункту 2, то такой цикл называется циклом с предусловием.

На рисунках 1.3 – 1.4 представлены структурные схемы циклических алгоритмов с постусловием и с предусловием.

Основы программирования на языке Си - student2.ru

Рис.1.3. Циклический алгоритм с постусловием.

Основы программирования на языке Си - student2.ru

Рис. 1.4. Циклический алгоритм с предусловием

Пример

Дана функция f(x), непрерывная на отрезке [a;b], которому принадлежит корень уравнения f(x)= 0.

Вычислить приближённое значение этого корня с точностью e=10-4 методом Ньютона и посчитать количество приближений к корню.

Очередное n+1‑ое приближение к корню уравнения вычисляется по формуле:

xn+1= xn - f(xn) / f¢ (xn)

до тех пор, пока соблюдается условие:

|xn+1- xn| ³ e

Начальное приближение x0к корню уравнениявыбирается из условия:

f (x0)*f²(x0) > 0.

Блок-схема для данной задачи приведена на рисунке 1.5.

Основы программирования на языке Си - student2.ru

Рис. 1.5. Комбинация алгоритмов: линейного, ветвления и итерационного цикла

Основы программирования на языке Си

Приведем текст простой программы на языке Си.

/* Первая программа на Си */

# include <stdio.h>

main()

{

printf(“Добро пожаловать в Си!\n”);

}

Строка, ограниченная символами /* и */, является комментарием и игнорируется компилятором языка. Строки комментариев могут находиться везде, где может появиться пробел. Отметим, что комментарии не могут быть вложенными.

Строки, начинающиеся с символа “#”, представляют собой директивы препроцессора - специальной программы, сканирующей до компиляции исходный код программы в поисках символа “#”. В данном случае препроцессору дается указание включить в текст нашей программы файл stdio.h для работы с функциями ввода-вывода. Дело в том, что в языке Си отсутствуют операторы ввода-вывода, а вместо них используются стандартные библиотечные функции.

Каждая программа на языке Си содержит одну или более функций, среди которых должна присутствовать функция main(), с которой и начинается выполнение программы. Тело функции представляет собой программный блок и ограничено фигурными скобками.

В теле функции main() содержится вызов библиотечной функции printf(), которая выводит текст “Добро пожаловать в Си!”. При этом печатные символы отображаются на стандартном устройстве вывода, а часть символов распознается в качестве управляющих. В нашем случае это символ перевода строки ¢\n¢.

Отметим, что каждый оператор языка Си должен оканчиваться символом “;”

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

Наконец, с помощью загрузчика программа размещается в памяти ЭВМ и ей передается управление (рис. 2.1).

Основы программирования на языке Си - student2.ru

Рис. 2.1. Процесс выполнения программы на языке Си.

Типы данных

В Си используются следующие основные типы данных.:

1) целый тип;

· int – целый ( от -32768 до 32767 à 2 байта)

· long int – длинный целый ( à 4 байта)

· unsigned int – бесзнаковый целый (от 0 до 65535 à2байта)

2) вещественный тип;

· float – вещественный одинарной точности ( 4 байта )

· double – вещественный удвоенной точности ( 8 байт )

· long double - вещественный максимальной точности ( 10 байтов )

3) символьный тип;

· char – символы с кодом от -127 до 128 à 1 байт

· unsigned char –символы с кодом от 0 до 255 à 1 байт

Значениями символьных переменных являются символьные константы, они эквивалентны целым числам, совпадающими с кодами этих символов.

Например, записи: x=’A’ и x=65 для переменной x типа char эквивалентны, так как код символа ‘A’ по таблице ASCII равен 65.

4) тип void - неопределенный тип, используется при определении функций, не возвращающих значения.

Диапазон значений для каждого типа зависит от аппаратных средств и соответствующей реализации компилятора языка Си.

Все переменные до их первого использования в программе должны быть определены, то есть для них должна быть выделена память. Мы будем рассматривать переменные автоматической памяти.

Например,

int x, y = 0; float s, a ;

Функции ввода-вывода

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

Функции printf() и scanf() осуществляют форматированный вывод на стандартное устройство вывода (монитор) и ввод со стандартного устройства ввода (клавиатура).

Обращение к функции printf() выглядит следующим образом

printf (format, list) ;

где

format – форматная строка, символы которой выводятся без изменений, за исключением управляющих символов и спецификаций формата, начинающихся с символа ¢%¢.

list – список переменных, значения которых подставляются в спецификации формата (может и отсутствовать)

Спецификации формата задают способ преобразования данных из списка list.

Для задания типа могут использоваться следующие символы:

· d - для целых десятичных чисел со знаком;

· u - для целых десятичных чисел без знака;

· o - для восьмеричных чисел без знака;

· x - для шестнадцатиричных чисел без знака;

· f - для вещественных чисел со знаком с фиксированной точкой;

· c - одиночные символы;

· s - строки символов.

Так например, если i = 10, x = 1,45 и y = 123,47, то результатом работы следующей конструкции

printf(²i = %d \t x = %f \t y = %f \n², i, x, y);

будет вывод

i = 10 x = 1.45 y = 123.47

Спецификации формата функции scanf() те же самые, что и для функции printf(), однако список list содержит уже не имена переменных, а их адреса. Например, функция

scanf (²%d %f², &i, &x);

осуществляет ввод с клавиатуры значений переменных i и x целого и вещественного типов соответственно.

Если же вводится строка символов, то необходимо использовать спецификацию формата ¢%s¢, но применять операцию & уже не надо.

Условные операторы

Условный оператор в Си имеет полную и сокращенную форму.

1) Сокращенная форма условного оператора имеет вид:

if (выражение) оператор1;

где ²оператор1² – простой или составной оператор.

Условный оператор if выполняет следующие действия. Если выражение в круглых скобках вырабатывает ненулевое значение (истина), то выполняется “оператор1”, в противном случае выполняется следующий за оператором if оператор.

Блок – схема оператора if приведена на рисунке 2.2.

2) Полная форма условного оператора имеет вид:

If (выражение)

оператор1;

Else

оператор2;

где ²оператор1² и ²оператор2² – простые или составные операторы.

Если выражение в круглых скобках вырабатывает ненулевое значение (истина), то выполняется ²оператор1², в противном случае выполняется оператор2². Блок – схема оператора if…else приведена на рисунке 2.3.

Основы программирования на языке Си - student2.ru

Рис. 2.2.Схема работы оператора if

Основы программирования на языке Си - student2.ru

Рис. 2.3. Схема работы оператора if…else.

Пример

Найти максимальное число из трех целых чисел x, y, z.

int x, y, z, max;

scanf (“%d %d %d”, &x, &y, &z);

if (x > y)

max = x;

else

max = y;

if (z > max)

max =z;

printf (“max = %d”, max);

Пример

Вычислить значение функции:

Основы программирования на языке Си - student2.ru

Возможны два пути решения:

1)

if ( x > 0)

y = 1;

if (x = = 0)

y = 0;

if ( x < 0)

y = - 1;

2)

if (x > 0)

y = 1;

else

if (x < 0)

y = - 1;

else

y = 0;

Операторы цикла

Синтаксис оператора цикла for следующий:

Наши рекомендации