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

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

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

Теоретическая часть

Структура программы. Функция вывода. Рассмотрим довольно простую программу на С — печать строки текста:

Пример 1:

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

#include<stdio.h>

void main ()

{

printf ("Welcome to C!\n");

}

Результат работы программы:

Welcome to С!

Рассмотрим подробно каждую строчку программы. Строка:

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

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

Строка:

void main ()

должна обязательно присутствовать в каждой программе. Скобки после main означают, что main является «строительным блоком» программы, называемым функцией. Программа С может содержать одну или большее количество функций, однако одна из функций обязательно должна быть main.

Левая фигурная скобка ({) должна предварять тело каждой функции. Соответственно правая фигурная скобка должна стоять в конце каждой функции. Эта пара скобок и часть программы между ними называется блоком.

Строка:

printf("Welcome to C!\n");

дает компьютеру команду выполнить действие, а именно вывести на экран строку символов, находящуюся внутри кавычек. Такую строку называют символьной строкой, сообщением или литералом. Вся строка, включая printf, аргументы внутри круглых скобок и точку с запятой (;), называется оператором. Каждый оператор должен заканчиваться точкой с запятой (иногда называемой символом конца оператора). Результатом выполнения оператора printf является вывод сообщения Welcome to С! на экран. Символы обычно печатаются именно так, как они записаны внутри двойных кавычек в операторе printf. Заметьте, что символы \n не появились на экране. Обратная косая черта (\) называется esc-символом. Он указывает, что printf предстоит выполнить нечто нестандартное. Когда встречается обратная косая черта, printf считывает следующий за ним символ и, объединяя его с обратной косой четой, создает esc-код. Esc-код \n означает новую строку, результатом является перевод курсора на начало следующей строки на экране. Функция printf — одна из многих функций, входящих в стандартную библиотеку.

Правая фигурная скобка (}) означает, что выполнение функции main окончено.

Задание 1: Выполнить пример 1, приведенный в методических рекомендациях.

Функция printf может напечатать Welcome to С! несколькими различными способами. Например, результат выполнения программы в примере 2 такой же, что и в примере 1. Дело в том, что каждая последующая функция printf возобновляет печать с того самого места, на котором остановилась предыдущая функция printf. Первая функция printf печатает Welcome и следующий за ним пробел, вторая функция printf начинает печатать в позиции, следующей сразу за пробелом.

Один оператор printf может напечатать несколько строк, если использовать символы перехода на новую строку, как показано в примере 3. Каждый раз, когда встречается esc-код \n (новая строка), функция printf переводит курсор на начало следующей строки.

Пример 2:

/* Печать в одну строку двумя вызовами printf */

#include<stdio.h>

main ()

{

printf("Welcome ");

printf("to C!\n");

}

Результат работы программы:

Welcome to C!

Пример 3:

/* Печать нескольких строк одним вызовом printf */

#include<stdio.h>

main()

{

printf("Welcome\nto\nC!\n");

}

Результат работы программы:

Welcome

to

C!

Задание 2: Выполнить пример 2 и пример 3, приведенные в методических рекомендациях.

Задание 3: Напишите программу, выводящую на печать вашу фамилию и имя следующими тремя способами:

  • В одну строку применив один оператор printf;

  • В одну строку применив два оператора printf;

  • В две строки применив один оператор printf.

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

Пример 4:

/* Программа сложения */

#include <stdio.h>

main ()

{

int integer1, integer2, sum; /* объявление */

printf("Vvedite pervoe celoe chislo\n"); /* подсказка */

scanf("%d", &integer1); /* прочитать целое */

printf("Vvedite vtoroe celoe chislo \n"); /* подсказка */

scanf("%d", &integer2); /* прочитать целое */

sum = integer1 + integer2; /* присвоить сумму */

printf("Summa ravna %d\n", sum); /* напечатать сумму */

return 0; /* показывает успешное завершение программы */

}

Результат работы программы:

Vvedite pervoe celoe chislo

45

Vvedite vtoroe celoe chislo

72

Summa ravna 117

Комментарий /* Программа сложения */ объясняет назначение программы. Строка:

#include <stdio.h>

является директивой для препроцессора С. Строка, начинающаяся символом #, выполняется препроцессором до того, как программа начнет компилироваться. Эта специфическая строка сообщает препроцессору, что необходимо включить в программу содержание стандартного заголовочного файла ввода/вывода (stdio.h). Этот заголовочный файл содержит информацию и объявления, используемые компилятором во время компиляции вызовов стандартных функций ввода/вывода, таких, как printf. Кроме того, заголовочный файл содержит информацию, которая помогает компилятору определить, корректно ли написаны обращения к библиотечным функциям.

Как было отмечено выше, каждая программа начинает исполняться с функции main. Левая фигурная скобка отмечает начало тела main, а правая соответственно конец. Строка:

int integer1, integer2, sum;

является объявлением. Группы символов integer1, integer2 и sum — имена переменных. Переменная — это ячейка памяти, в которую можно записывать значение, предназначенное для использования программой. Приведенное выше объявление сообщает, что переменные integer1, integer2 и sum принадлежат к типу int и, следовательно, в этих переменных будут храниться целые величины. Все переменные, которые используются в программе, должны быть объявлены. При объявлении указывается имя и тип переменной. Именем переменной в С может служить любой допустимый идентификатор.

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

Оператор:

printf("Vvedite pervoe celoe chislo \n");

печатает на экране символы Vvedite pervoe celoe chislo и переводит курсор на начало следующей строки.

Оператор:

scanf("%d", &integer1);

вызывает scanf, чтобы получить от пользователя некое значение. Функция scanf считывает данные со стандартного устройства ввода, которым обычно является клавиатура. В нашем случае функция scanf имеет два аргумента, %d и &integer1. Первый аргумент — управляющая строка, задает формат считывания, тем самым определяется тип данных, которые предстоит ввести пользователю. Так, в частности, %d — спецификация преобразования, означающая, что вводимые данные должны быть целым числом (буква d используется для «десятичных целых»). Знак % в данном контексте трактуется scanf (в дальнейшем мы увидим, что это в полной мере относится и к printf), как esc-код (подобно \), а комбинация %d является esc-кодом (подобно \n). Второй аргумент scanf начинается со знака амперсанда (&), которым в С задается операция взятия адреса следующей за ним переменной. Амперсанд, когда он используется совместно с именем переменной, сообщает scanf ячейку памяти, в которой хранится переменная integer1. В последующем компьютер будет хранить величину для integer1 в этой ячейке.

Когда компьютер выполняет вышеприведенный оператор scanf, он ждет, пока пользователь не введет значение для переменной integer1. Пользователь вводит целое число, после чего нажимает клавишу Enter, посылая, таким образом, число в компьютер. После этого компьютер присваивает данное число, или значение, переменной integer1. Любая последующая ссылка в программе на integer1 будет представлять именно это значение.

Оператор

printf("Vvedite vtoroe celoe chislo \n");

печатает на экране сообщение Enter second integer, после чего переводит курсор на начало следующей строки.

Оператор

scanf("%d", &integer2);

получает от пользователя значение для переменной integer2. В результате выполнения оператора присваивания

sum = integer1 + integer2;

вычисляется сумма переменных integer1 и integer2, и ее значение присваивается переменной sum посредством операции присваивания =. Оператор читается как «sum получает значение integer1 + integer2».

Оператор

printf("Summa ravna %d\n", sum);

вызывает функцию printf, чтобы напечатать на экране текст Sum is, после которого следует численное значение переменной sum. В данном случае printf имеет два аргумента, "Sum is %d\n" и sum. Первый аргумент — управляющая строка, определяет формат вывода. Он содержит несколько символов, которые будут отображены, и спецификатор преобразования %d, определяющий, что будет напечатано целое число. Второй аргумент задает значение, которое будет напечатано.

Вычисления могут выполняться и непосредственно внутри оператора printf. Мы могли бы скомбинировать два предыдущих оператора в один:

printf("Summa ravna %d\n", integerl + integer2);

Оператор:

return 0;

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

Правая фигурная скобка означает, что функция main окончена.

Задание 4: Выполнить пример 4, приведенный в методических рекомендациях.

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

Кроме упомянутого выше типа данных int для объявления целочисленных чисел, в Си существуют и другие типы данных для объявления переменных и констант вещественного, символьного и других типов.

Имеются следующие базовые (фундаментальные) типы:

Char

Символьный

Int

целый

Float

вещественный

Double

вещественный с двоичной точностью

Void

пустой тип

С базовыми типами данных могут использоваться модификаторы типа. К модификаторам относятся:

Unsigned

беззнаковый

Signed

знаковый

Short

короткий

Long

длинный

В функциях printf и scanf необходимо использовать следующие спецификации преобразования для соответствующих типов:

%i — для ввода/вывода целых со знаком,

%d — для ввода/вывода беззнаковых целых,

%f — для ввода/вывода дробных, в виде числа с плавающей точкой,

%n.mf — для вывода дробных в формате с фиксированной точкой, где n — количество цифр целой части, m — дробной;

Количество спецификаций преобразования в функциях printf и scanf должно ОБЯЗАТОЛЬНО соответствовать количеству переменных, указанных полсе управляющей строки.

Кроме переменных в программе могут быть объявлены константы – данные, которые не могут быть изменены в процессе выполнения программы. Для объявления констант перед указанием типа константы и ее имени необходимо добавить ключевое слово const.

Пример 5:

#include<stdio.h> /*подсоединение раздела библиотеки

с функциями ввода/вывода */

void main() // определение головного модуля

{

int i1, i2, i3; // три переменные целого типа со знаком

int ix= 5, iy= -7; /* определение и инициализация

переменных целого типа */

long int l1, l2; // длинные целые знаковые переменные- четыре байта

long unsigned int lu1= 125, lu2= 1234567;

/* под длинные целые беззнаковые переменные выделяется по четыре байта и в них записываются соответствующие значения */

float f1= -1.575, f2= 3.14; /* переменные вещественного

типа по четыре байта */

char let, symb= ‘z’, n_str= ‘\n’; /* символьные переменные , выделяется по одному байту */

short int s1= 100, s2= 50; // два байта

const unsigned int u= 113; //целочисленная константа

const float pi= 3.14; // вещественная константа

printf("Vvedite 3 celih chisla:\n");

scanf("%d%d%d", &i1, &i2, &i3);

printf("Vvedennoe pervoe chislo=%d\n Vvedennoe vtoroe chislo =%d\n Vvedennoe tret’e chislo =%d\n", i1, i2, i3);

printf("Celoe bez znaka ix = %d\n Celoe so znakom iy = %i\n", ix, iy);

printf("Veshestvenoe f1 = %.3f\n Veshestvenoe f2 = %.2f\n", f1, f2);

printf("Simvol symbl = %c\n Kod simvola %c = %d \n", symb, symb, symb);

/* Данные типа char занимают в памяти 1 байт. Код от 0 до 255 в этом байте задает один из 256 возможных символов. Тип char является типом «целое». */

}

Задание 6: Выполнить пример 5, приведенный в методических рекомендациях.

Задание 7: Модифицируйте пример 4 так, чтобы он работал с вещественными числами.

Задание 8: Написать программу, которая запрашивает у пользователя три вещественных числа и выводит на экран их сумму, произведение и среднее арифметическое.

Математические функции. Для работы математических функций в Си необходимо подключить библиотеку math.h. Эта библиотека содержит ряд математических функций:

sqrt(x);

Возвращает корень квадратный переменной х

abs(n);

Возвращает модуль числа n. n – целое число.

sin(x);

Возвращает синус числа х

cos(x);

Возвращает косинус числа х