50450

Программирование на языке высокого уровня. Методические указания

Книга

Информатика, кибернетика и программирование

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

Русский

2014-01-23

105.5 KB

3 чел.

  1.  Теоретические положения

1. 1. Представление символьной информации

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

Символьные константы

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

'< символ >'

 <символ> может быть любым символом из множества представимых символов (в том числе любым специальным символом), за исключением символов апостроф ('), обратный слэш (\) и новая строка, для представления которых в качестве символьных констант, необходимо вставить перед ними символ "обратный слэш": ' \' ' и '\\'. Для представления символа новой строки используется запись '\n'. Символьные константы имеют тип int. Младший байт хранит код символа, а старший байт – знаковое расширение младшего байта. Помимо односимвольных констант, существуют двухсимвольные константы, например, 'An', '\n\t', '\007\007'. Они представляются 16-битовым значением типа int, причем первый символ заносится в младший байт, а второй — в старший.

Символьные строки

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

" <символы> "

<символы> – это произвольное (в том числе нулевое) количество символов из множества представимых символов, за исключением символов: двойная кавычка ("), обратный слэш (\),  новая строка. Чтобы использовать эти символы внутри символьной строки, нужно представить их с помощью соответствующих специальных символов, как показано на следующих примерах:

"Это символьная строка\n"

"Первый \\ Второй"

"\"Да, конечно\", — сказала она."

""

Каждый символ символьной строки (в том числе каждый специальный символ) хранится в отдельном байте оперативной памяти. Символ с кодом 0 ('\0') автоматически добавляется в качестве последнего байта символьной строки и служит признаком ее конца. Тип символьной строки — массив элементов типа char. (Массивом называется упорядоченная совокупность однотипных элементов. Обращение к какому-либо элементу массива происходит по индексу, т.е. порядковому номеру данного элемента. В языке Си индексация элементов массива начинается с нуля, т.е. первому элементу соответствует индекс 0, второму – индекс 1 и т.д). Для символьных строк число элементов в массиве равно числу символов строки плюс один, поскольку символ '\0' (признак конца символьной строки) тоже является элементом массива.

Пример:

char s[10]; /*объявление строки из 10 символов, включая признак ее конца*/

1. 2. Операторы

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

1.2.1. Пустой оператор

Синтаксис:

;

Действие: пустой оператор это оператор, состоящий только из точки с запятой. Выполнение пустого оператора не меняет состояния программы.

Пример:

for ( i = 0; i < 10; line[i+ +] = 0) ;

В приведенном примере третье выражение в заголовке оператора цикла for инициализирует первые 10 элементов массива line нулем. Тело оператора for состоит из пустого оператора, так как нет необходимости в других операторах.

Пустой оператор может быть помечен меткой.

 

1.2.2. Составной оператор

Синтаксис:

{

[< объявление >]

[< оператор >]

}

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

Пример:

if ( i > 0 )   {    line[i] = х;    х + + ;    i – –;  }

1.2.3. Оператор-выражение

Синтаксис:

< выражение >;

Действие: < выражение > вычисляется в соответствии с правилами вычисления выражений. Отличие оператора-выражения состоит в том, что значение содержащегося в нем выражения никак не используется. Кроме того, он может быть записан лишь там, где по синтаксису допустим оператор.

Примеры:

х = у + 3;

f(x);

1.2.4. Условный оператор if

Синтаксис:

if (< выражение >)

< оператор1>

[else

< оператор2> ]

Действие: Сначала вычисляется < выражение >. Тело условного оператора if выполняется в зависимости от значения < выражения >. Если значение выражения истинно (не равно нулю), то выполняется < оператор1 >. Если же значение выражения ложно (равно нулю), то выполняется < оператор2 >, непосредственно следующий за ключевым словом else. Если значение < выражения > ложно, но конструкция else опущена, то управление передается на оператор, следующий в программе за оператором if.

Пример:

if (i > 0)     y = x/i;   else    {    х = i;    y = f(x); }

Оператор if может быть вложен в < оператор1 > или < оператор2 > другого оператора if. При вложении операторов if рекомендуется для ясности группирования операторов использовать фигурные скобки, ограничивающие < оператор1 > и < оператор2 >. Если же фигурные скобки отсутствуют, то компилятор ассоциирует каждое ключевое слово else с ближайшим оператором if, у которого отсутствует конструкция else.

На ключевое слово if можно поставить метку, а на ключевое слово else  нельзя.

1.2.5. Оператор пошагового цикла for

Синтаксис:

for ([< начальное-выражение >];

      [< условное-выражение >];

      [< выражение-приращения >])

< оператор >

Действие: тело оператора цикла for выполняется до тех пор, пока < условное-выражение > не станет ложным. Если оно изначально ложно, то тело цикла не будет выполнено ни разу. < Начальное-выражение > и < выражение-приращения > обычно используются для инициализации и модификации параметров цикла или других значений.

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

1) Если условное выражение истинно (не равно нулю), то выполняется тело оператора. Затем вычисляется выражение приращения (если оно есть), и процесс повторяется.

2) Если условное выражение опущено, то его значение принимается за истину и процесс выполнения продолжается, как описано выше. В этом случае оператор цикла for представляет бесконечный цикл, который может завершиться только при выполнении в его теле операторов break, goto, return.

3) Если условное выражение ложно, то выполнение оператора for заканчивается и управление передается следующему за ним оператору в программе. Оператор for может завершиться и при выполнении операторов break, goto, return в теле оператора.

Пример:

for (i = space = tab = 0; i < MAX; i ++ )   {

  if ( line[i] = = "\x20" )  /* если встретился пробел, */

     space + + ;                 /* счетчик символов пробела инкрементируется */

  if  (line[i] = = "\t" )  {   /* если встретился символ горизонтальной табуляции,*/

     tab + + ;                     /* инкрементируется счетчик символов табуляции */

     line[i] = "\x20";         /*символ табуляции заменяется на символ пробела*/

  } }

1.2.6. Оператор цикла с предусловием while

Синтаксис:

while (< выражение >)

          < оператор >

Действие: тело оператора цикла while выполняется до тех пор, пока значение < выражения > не станет ложным (т.е. равным нулю). Вначале вычисляется < выражение >. Если < выражение > изначально ложно, то тело оператора while вообще не выполняется и управление сразу передается на следующий за телом цикла оператор программы. Если < выражение > истинно, то выполняется тело цикла. Перед каждым следующим выполнением тела цикла < выражение > вычисляется заново. Этот процесс повторяется до тех пор, пока < выражение > не станет ложным. Оператор цикла while может также завершиться при выполнении операторов break, goto, return внутри своего тела.

Пример:

while ( i > = 0 )   { string1[i] = string2[i];    i– – ; }

1.2.7. Оператор цикла с постусловием do

Синтаксис:

do

< оператор >

while (< выражение >);

Действие: тело оператора цикла выполняется один или несколько раз до тех пор, пока значение < выражения > не станет ложным. Вначале выполняется тело цикла — < оператор >, затем вычисляется условие — < выражение >. Дальнейшие действия аналогичны ранее описанным для цикла while. Оператор do может также завершиться при выполнении в своем теле операторов break, goto, return.

Пример:

do    {      y = f(x);      х – –;   }    while ( x > 0 );

1.2.8. Оператор продолжения continue

Синтаксис:

continue;

Действие: оператор продолжения continue передает управление на следующую итерацию в операторах цикла do, for, while. Остающиеся в теле цикла операторы при этом не выполняются.

1.2.9. Оператор-переключатель switch

Синтаксис:

switch (< выражение >)

{

[< объявление >]

[case < константное-выражение >:]

   [ < оператор > ]

         …

[case < константное-выражение >:]

   [ < оператор > ]

         …

[default:

   < оператор > ]

}

Действие: оператор-переключатель switch предназначен для выбора одного из нескольких альтернативных путей выполнения программы. Выполнение оператора-переключателя начинается с вычисления значения выражения переключения (выражения, следующего за ключевым словом switch в круглых скобках). После этого управление передается одному из < операторов > тела переключателя. В теле переключателя содержатся конструкции case < константное-выражение >: , которые синтаксически представляют собой метки операторов. Константные выражения в данном контексте называются константами варианта. Оператор, получающий управление, — это тот оператор, значение константы варианта которого совпадает со значением выражения переключения. Значение каждой константы варианта должно быть уникальным внутри тела оператора-переключателя.

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

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

Пример:

switch (i)   {case 1:  if (a > 0)   { case 2:  b = 3;   else  case 3:    k = 0;    }  }

Оператор в теле переключателя может быть помечен множественными метками case.

1.2.10. Оператор разрыва break

Синтаксис:

break;

Действие: оператор разрыва break прерывает выполнение операторов do, for, while или switch. Он может содержаться только в теле этих операторов. Управление передается оператору программы, следующему за прерванным.

1.2.11. Оператор перехода goto

Синтаксис:

goto < метка >;

< метка >: < оператор >

Действие:

Оператор перехода goto передает управление непосредственно на < оператор >, помеченный < меткой >. Метка представляет собой идентификатор. Область действия метки ограничивается функцией, в которой она определена. При последовательном выполнении операторов, помеченный оператор выполняется так же, как если бы он не имел метки. Можно войти в блок, тело цикла, условный оператор, оператор-переключатель по метке. Нельзя с помощью оператора goto передать управление на конструкции case и default в теле переключателя.

Пример:

if ( errorcode > 0 )    goto exit;       …  exit:     return (errorcode);

1.2.12. Оператор возврата return

Синтаксис:

return [< выражение >];

Действие: оператор возврата return заканчивает выполнение функции, в которой он содержится, и возвращает управление в вызывающую функцию. Управление передается в точку вызывающей функции, непосредственно следующую за оператором вызова. Значение < выражения >, если оно задано, вычисляется, приводится к типу, объявленному для функции, содержащей оператор возврата return, и возвращается в вызывающую функцию. Если < выражение > опущено, то возвращаемое функцией значение не определено. Если оператор return отсутствует в теле функции, то управление автоматически передается в вызывающую функцию после выполнения последнего оператора в вызванной функции. Возвращаемое значение вызванной функции в этом случае не определено.

  1.  Задания к лабораторному практикуму

2.1. Лабораторная работа №1

" Изучение методики создания прикладного программного
обеспечения компьютера "

Цель работы

Знакомство с базовыми средствами создания прикладного программного обеспечения.

Задание

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

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#define MAX 4

void main(void)  {

  int i, j;

  float a[MAX][MAX], b[MAX][MAX], c[MAX], d[MAX][MAX];

 float s, s1;

//initializing

randomize();

for (i = 0; i < MAX; i++) {

  for (j = 0; j < MAX; j++)  {

     a[i][j] = random(30);

     b[i][j] = random(100);

      c[i] = a[i][j] + b[i][j];

   }

}

s = 0;

s1 = MAX;

for (i = 0; i < MAX; i++) {

  for (j = 0; j < MAX; j++) {

      d[i][j] = a[i][j]*b[i][j] - c[j];

       s += d[i][j];

       if (d[i][j] != s) {  s1 *= d[i][j] ;  }

  }

}

printf("s = %2.f   s1 = %f    \n\n ", s, s1);

for (i = 0; i < MAX; i++) {

  for (j = 0; j < MAX; j++) {

    printf("    %2.3f",d[i][j]);

  }

  printf("\n");

}

getch();

}

Контрольные вопросы

  1.  Операционная система.
  2.  Файловая система.
  3.  Среда разработки программного обеспечения.
  4.  Текстовый редактор.
  5.  Компилятор, редактор связей, загрузчик.
  6.  Отладчик.
  7.  Программирование ввода-вывода.

2.2. Лабораторная работа №2

" Разработка программ обработки символьной информации"

Цель работы

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

Задание

Разработать программу обработки символьной информации, выбранную в соответствии с вариантом из табл. 1 Приложения.

Общие требования:

  •  в программе недопустимо использование функций библиотек работы со строками;
  •  при выполнение операций над символами в строке недопустимо использование вспомогательных строк, допускается использование одиночных вспомогательных символов.

Контрольные вопросы

  1.  Символьные и строковые константы.
  2.  Символьные строки.
  3.  Специальные символы.
  4.  Управляющие конструкции языка Си.

2.3. Лабораторная работа №3

" Разложение в ряд математических функций "

Цель работы

Получение навыков создания циклических программ.

Задание

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

Контрольные вопросы

  1.  Циклические программы.
  2.  Управляющие конструкции языка Си.

  1.  Содержание отчета

  1.  Титульный лист.
  2.  Задание кафедры и вариант.
  3.  Цель работы.
  4.  Краткие теоретические сведения.
  5.  Формализованный алгоритм.
  6.  Листинг программы.
  7.  Контрольный пример.
  8.  Выводы по работе.

4. Библиографический список

1. Бочков С. О. Язык программирования Си для персонального компьютера / С. О. Бочков, Д. М. Субботин – М.: Радио и связь, 1990. – 384 с.

2. Уэйт М. Язык Си. Руководство для начинающих: Пер. с англ. / М. Уэйт, С. Прата, Д. Мартин – М.: Мир, 1988. – 512 с.

Приложение

Таблица 1

Задания к лабораторной работе № 2

№ п/п

Задание

1

Написать программу, которая печатает вводимый текст по одному слову на строке.

2

Написать программу, удаляющую символ в строке s1, который совпадает с любым символом строки s2.

3

Написать программу, выдающую первую позицию в строке s1, в которой встретился любой символ из строки s2, или -1, если s1 не содержит символов из s2.

4

Написать программу, которая расширяет краткие записи вида a-z в строке s1 в соответствующий полный список abc…xyz в строке s2.

5

Написать программу, которая выдает позицию самого правого вхождения строки t в строку s, или -1, если t не входит в s.

6

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

7

Написать программу, которая «переворачивает» строку s.

8

Написать программу получения строки s, состоящей из символов, принадлежащих одновременно строкам s1 и s2. В строке s не должны содержаться повторяющиеся символы.

9

Написать программу получения строки s, состоящей из символов строки s1, имеющих в ней нечетные позиции, и символов строки s2, имеющих в ней четные позиции.

10

Написать программу поиска последнего вхождения подстроки s в строку s1.

11

Написать программу замены в строке s некоторой подстроки. Начальная позиция заменяемой подстроки и сама подстрока вводятся пользователем.

Продолжение таблицы 1

Задания к лабораторной работе № 2

12

Написать программу замены всех пар одинаковых символов в введенных пользователем строках одним символом.

13

Написать программу, выдающую число вхождений подстроки s1 в строку s.

14

Написать программу разбиения строки s на 3 подстроки s1, s2, s3 следующим образом: s1 – третья четверть строки s,  s2 - первая четверть строки s, s3  включает остальные символы строки s.

15

Написать программу сравнения строк s1 и s2, которая возвращает 0, если каждый символ первой строки равен символу с соответствующей позицией второй строки,  и 1 - в противном случае.

16

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

17

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

18

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

19

Написать программу, заменяющую все пары, тройки и т.д. одинаковых символов строки s на один символ.

20

Написать программу слияния подстрок двух строк s1 и s2 в строку s следующим образом: первая подстрока образуется выбором символов, находящихся на четных позициях строки s1; вторая подстрока – второй четверти строки s2.

21

Удалить из строки s все символы, встречающиеся не менее одного раза в строке s1 и не более трех раз в строке s2.

22

Написать программу, выдающую последнюю позицию в строке s, в которой встретился введенный пользователем символ, и -1, если нет такового символа.

Окончание таблицы 1

Задания к лабораторной работе № 2

23

Написать программу  поочередного копирования из строк s1 и s2 в строку s, соответственно, каждого второго (из s1) и четвертого (из s2) символов.

24

Написать программу слияния заданных подстрок строк s1, s2, s3 в строку s. Для этого, если не достигнут конец любой из подстрок, последовательно выбираются: из строки s1 – очередной символ с нечетной позицией, из строки s2 - очередной символ с четной позицией, из строки s3 - очередной из средних n символов, где n задается пользователем.

25

Написать программу слияния заданных подстрок строк s1 и s2 в строку s. Подстроки задаются следующим образом: из строки s1 выбирается ее первая половина, из строки s2 – третья четверть. В результирующую строку вначале копируется подстрока из s1, затем - подстрока из s2. 

26

Написать программу слияния заданных подстрок строк s1 и s2 в строку s. Подстроки задаются следующим образом: из строки s1 выбирается ее вторая четверть, из строки s2 - вторая половина. В результирующую строку вначале копируется подстрока из s1, затем - подстрока из s2.

27

Написать программу разбиения строки s на две подстроки s1 и s2 следующим образом: подстрока s1 образуется из всех нечетных символов первой половины строки s; подстрока s2 образуется из оставшихся символов строки s.

28

Написать программу разбиения строки s на две подстроки s1 и s2 следующим образом: подстрока s1 образуется из всех четных символов третьей  четверти строки s; подстрока s2 образуется из оставшихся символов строки s.

Таблица 2

Задания к лабораторной работе № 3

№ п/п

Функция и ее разложение

1

2

   x

3

4

x

5

6

x

7

8

10

x

Окончание таблицы 2

Задания к лабораторной работе № 3

11

x

12

13

14

15

16

Введение в программирование на языке Си

Методические указания к лабораторным работам по курсам
"Программир
ование", "Программирование на языке высокого уровня"

Составители: Ведищев Виталий Викторович,

Журавлева Марина Гарриевна

Редактор Курьянова Т. М.

Подписано в печать             Формат 60х84 1/16. Бумага газетная. Ротапринт. Печ.л. 1,3. Тираж 200 экз. Заказ N      . Липецкий государственный технический университет. 398600 Липецк, ул. Московская, 30.

Типография ЛГТУ. 398600 Липецк, ул. Московская, 30.

19


 

А также другие работы, которые могут Вас заинтересовать

42264. ИЗУЧЕНИЕ КОНСТРУКЦИИ И ИССЛЕДОВАНИЕ КОММУТАЦИОННЫХ ВОЗМОЖНОСТЕЙ МКС 26 KB
  Изучение конструкции и исследование коммутационных возможностей МКС на АТСК100 2000. Изучить конструкцию 2х и 3х позиционных МКС. Определить коммутационные возможности каждого типа МКС.
42265. ОПРЕДЕЛЕНИЕ ПОЛОЖЕНИЯ ОПТИЧЕСКОЙ ОСИ В ОДНООСНЫХ КРИСТАЛЛАХ КОНОСКОПИЧЕСКИМ МЕТОДОМ 4.42 MB
  Поэтому при изготовлении деталей необходимо знать положение оптической оси относительно рабочих поверхностей детали. Одним из методов определения ее положения является коноскопический основанный на том что в направлении оптической оси кристалла у одноосного кристалла оптическая ось совпадает с кристаллографической анизотропия оптических свойств отсутствует. Он состоит из широкого источника света S скрещенных поляризатора П и анализатора А кристаллической пластины К вырезанной перпендикулярно оптической оси кристалла и двух...
42266. ВОССТАНАВЛИВАЮЩЕЕСЯ НАПРЯЖЕНИЕ НА ПОЛЮСАХ ВЫКЛЮЧАТЕЛЯ 205.5 KB
  Эти процессы наблюдаются при трехфазном КЗ однофазном КЗ в сетях с заземленной нейтралью а также при двухфазном КЗ как в сетях высокого так и низкого напряжения. Описание установки Процессы восстановления напряжения моделируются в установке принципиальная схема которой показана на рис. В один полупериод питающего напряжения диод является проводящим и напряжение на нем практически равно нулю в другой – непроводящим. Эти процессы повторяются с частотой питающего напряжения и на экране электронного осциллографа используемого для их...
42267. Планирование и организация рекламной деятельности туристского агентства Черномор Тур 177.49 KB
  Реклама - настолько сильное средство, что она может помочь продать совершенно плохой и негодный, неконкурентоспособный товар. Реклама, прежде всего, стимулирует спрос на предлагаемые товары. Механизм действия рекламы очень прост - потенциальный покупатель, услышав (увидев) о каком-либо товаре, которого у него нет, сразу захочет его купить, разумеется, при наличии денег.
42269. КООРДИНАТНАЯ АТС ТИПА АТСКУ 33.5 KB
  Основными особенностями координатных систем являются применение коммутационных блоков построенных на МКС с использованием звеньевого включения; регистровое косвенное управление; обходной способ установления соединения с применением общих управляющих устройствмаркеров. функцию управления поиском осуществляет маркер чаще всего обслуживающий всего один коммутационный блок ступени искания. В функции маркера входит определение номера входящей линии по которой поступил вызов; определение исходящей линии любой свободной или по информации...
42270. ОПРЕДЕЛЕНИЕ РАЗРЕШАЮЩЕЙ СПОСОБНОСТИ ПРИЗМ 601 KB
  По критерию Релея раздельное наблюдение изображения 1 и 2 двух близко расположенных точечных объектов возможно когда расстояние x между ними равно радиусу центрального дифракционного кружка т. В этом случае контраст элементов результирующего изображения который вычисляется по формуле .26 показан объектив в фокальной плоскости которого построены дифракционные изображения 1 и 2 с расстоянием x между ними. Использование критерия Релея приводит к контрасту результирующего изображения К=026.
42271. Прилади й методи контролю метеорологічних умов на виробництві 128.5 KB
  До показників які характеризують метеорологічні умови мікроклімат належать: температура відносна вологість швидкість руху повітря теплої випромінювання. Пояснення термінів що є в таблиці 5: Холодний період року період року який характеризуєте середньодобовою температурою зовнішнього повітря рівною 10С і нижче. Теплий період року період року який характеризуєте середньодобовою температурою зовнішнього повітря вище 10С. Вимірювання температури повітря.