close

Вход

Забыли?

вход по аккаунту

?

Лаба 1

код для вставкиСкачать
Лабораторная работа №1
Вид программ на С
Существует 32 ключевых слова, при помощи которых создаются программы на языке С. Все ключевые слова С записываются строчными буквами. В С прописные и строчные буквы различаются: else –
ключевое слово, а ELSE –
нет
. Ключевое слово не может быть использовано в каких
-
либо других целях в С
-
программах. Таким образом, оно не может служить в качестве имени переменной или функции.
Все С
-
программы содержат одну или более функций. Единственная функция, которая всегда должна
присутствовать
, называется main()
(
в программах на С++ это не обязательно
)
, и она является первой функцией, получающей управление. Хотя main() не является частью языка, тем не менее,
она трактуется часть. Не следует пытаться использовать main как, наприме
р, имя переменной.
Типичный вид С
-
программ
глобальные объявления
возвращаемый_тип ﵡ
(список параметров)
последовательность операторов
возвращаемый_тип 1(список параметров)
последовательность операторов
возвращаемый_тип N(список параметр
ов)
последовательность операторов
Операторы манипулируют переменными и константами и тем самым образуют выражения. Все они базовые элементы языков С и С++
.
Библиотеки и компоновка
Крайне редко программа на С состоит только из операторов написанных программистом, поскольку стандартный С не предоставляет методов выполнения ввода
-
вывода.
Язык С определяет стандартные библиотеки, предоставляющие функции, выполняющие наиболее типичные задачи.
Для пользования какой
-
либо библиотекой е нужно подключить. Дл
я этого используются команды препроцессора. Например:
#include <stdio.h>
под
ключает библиотеку ввода
-
вывода,
#include <math.h>
библиотеку математических функций.
Библиотека функций ввода
-
вывода включает, в частности функции вывода на консоль printf() и
ввода с консоли scanf().
Функция printf
( ) имеет следующий прототип
int
printf
(
const
char
*
форматная строка
, …);
Таблица 1
Код
%c
%d
%i
%e
%E
%f
%g
%G
%o
%s
%u
%x
%X
%p
%
n
%%
Формат
Символ
Знаковое десятичное целое число
Знаковое десятичное целое чи
сло
Научная нотация (
e
–
строчная)
Научная нотация (
E
–
прописная)
Десятичное число с плавающей точкой
Использует или %
e
, или %
f
, соответствующее более короткому представл
е
нию
Использует или %
E
, или %
f
, соответствующее более короткому представл
е
нию
Беззнак
овое восьмеричное число
Строка символов
Беззнаковое десятичное число
Беззнаковое шестнадцатиричное число (строчные буквы)
Беззнаковое шестнадцатиричное число (прописные буквы)
Вывод указателя
Ассоциированный аргумент –
это указатель на целое, в которое зап
исывается число уже выведенных символов
Выводит знак %
Пример (вывод чисел)
#
include
<
stdio
.
h
>
int main(void)
{
double f;
for(f=1.0; f<1.0e+10; f=f*10)
printf("%g ", f);
getchar();
unsigned int num;
for(num=0; num<255; num++) {
printf("%o "
, num);
printf("%x ", num);
printf("%X ", num);
}
getchar();
}
Стандартный ввод с консоли, как правило, осуществляется с помощью scanf
()
. Она читает все стандартные типы данных и автоматически преобразует числа к правильному внутреннему формату. Стан
дартный вид scanf
()
следующий:
int
scanf
(
const
char
* форматная_строка,
…);
форматная_строка
определяет способ чтения значений в переменные, на которые указ
ы
вает список аргументов. Форматная строка состоит из трх типов символов:
-
Спецификаторы формата
-
Спец
иальные символы
-
Стандартные символы
Функция scanf
()
возвращает число введнных полей. Она возвращает EOF
, если обнаруживается преждевременный конец файла. Спецификаторы формата перечислены в таблице 2.
Таблица 2
Код
%c
%d
%i
%e
%f
%lf
%g
%o
%s
%x
%p
%
n
%
u
%[]
Значение
Читает одиночные символы
Читает десятичное число
Читает десятичное число
Читает число с плавающей запятой
Читает число с плавающей запятой
Читает число с плавающей запятой двойной точности
Читает число с плавающей запятой
Читает восьмеричное число
Читает строку
Читает шестнадцатеричное
число
Читает указатель
Получает целочисленное значение, равное числу прочитанных символов
Читает беззнаковое целое
Сканирует множество символов
В scanf
( )
следует передавать адреса. Это означает, что все аргум
енты должны быть указателями на переменные. Например, для чтения целого в переменную count
надо использовать следующий вызов scanf
()
:
scanf
(“%
d
”, &
count
);
Библиотека математических функций содержит в частности функции sin
(),
cos
(),
tan
()
, pow
(). Первые т
ри функции имеют один аргумент и возвращают значения функций синуса, косинуса и тангенса соответственно, четвртая функция имеет два аргумента –
основание a
и показатель степени b
и возвращает значение функции
a
b
.
Идентификаторы
Имена, использующиеся для переменных, функций, меток и других определяемых пользователем объектов, называются идентификаторами. Идентификаторы могут состоять как из одного, так и из нескольких символов. Тем не менее в С только первые 31 символ являются значимыми. (В С++ -
все симво
лы значимые.) Первым символом
должна быть буква или знак подчркивания, а за ним могут стоять буквы, числа или знак подчеркивания.
Идентификатор не может совпадать с ключевым словом С и не должен иметь тоже имя, что и функция, уже содержащаяся в библиотек
е С.
Типы данных в С и С++
Имеется 5 базовых типов данных в С: символьный, целочисленный, вещественный с ординарной точностью, вещественный с двойной точностью и void. Значения типа char используются для хранения ASCII
-
кодов или любых 8
-
битных величин. П
еременные типа int используются для хранения целых величин. Переменные типа float и double содержат вещественные числа.
Тип void имеет три назначения. Первое –
указание о невозвращении значения функцией. Второе –
указание о неполучении параметров функцией.
Третье –
создание нетипизированных указателей.
С поддерживает несколько других типов, включая структуры, объединения, битовые поля, перечисления и типы,
определяемые пользователем.
С++ содержит дополнительно типы bool и wchar_t. Т
ип bool принимает булевы значения true
и false
. Т
ип wchar_t –
для хранения двухбайтных (широких) символов.
Некоторые производители компиляторов поддерживают дополнительные типы данных -
__int
n
, где n
число бит (
может принимать значения -
8, 16, 32, 64) которые занимает переменная соответствующего типа.
Модификаторы типов
За исключением типа void, основные типы данных могут иметь различные модификаторы. Модификаторы используются для более точного управления ситуацией. Ниже приведн список модификаторов:
signed
unsigned
long
short
Модификаторы signed
, unsigned
, long
и short
могут применяться к целочисленным типам. К символам можно применять signed
и
unsigned
. long
может применяться к типу double.
Использование signed для целочисленных типов является избыточным (но допустимым), по
скольку объявление целочисленных типов по умолчанию предполагает знаковое число.
Различие между знаковыми и беззнаковыми целочисленными типами
заключается в способе интерпретации старшего бита. Если использовать знаковый тип, то компилятор генерирует код, предполагающий, что старший бит используется как знак числа. Если знаковый бит равен 0, то число положительное, а если 1 –
отрицательное. Ниже приведены простые примеры:
127 в двоичном представлении: 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 1
-
127 в двоичном предс
тавлении: 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1
знаковый бит
Следует предупредить, что фактически все компьютеры используют дополнительную арифметику, что приводит к представлению -
127 в виде, отличном от приведнного примера. 1 1 1 1 1 1 1 1
1 0 0 0
0 0 0 1
Знаковые числа важны для многих алгоритмов, но они могут вмещать только половину значений, которые могут вмещать их беззнаковые собратья. Например, 32767 выглядит следующим образом:
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Если старший бит установлен в
1, то число будет интерпретироваться как -
1. Если же объявить его как unsigned short int, то, е
с
ли старший бит установлен, число будет содержать 65535.
Модификаторы доступа
С имеет 2 типа модификаторов, которые используются для контроля за способом дост
упа
или модификации переменных. Эти модификаторы называются const и volatile.
Переменные типа const не могут изменяться во время выполнения программы. Например:
const
int
a
;
создаст целочисленную переменную, называемую а, которая не может быть модифицирована в программе. Она может использоваться в других типах выражений. Она может использоваться в других типах выражений. Переменная с модификатором const получает сво значение или при инициализации, или каким
-
либо аппаратно
-
зависимым способом. Например, нижеприведнная строка присваивает count значение 100:
const
int
count
= 100;
Помимо инициализации константа не может быть модифицирована программой.
Модификатор volatile испол
ьзуется для сообщения компилятору о возможности изменения значения способами, не определнными в программе. Это важно, поскольку компилятор автоматически оптимизирует некоторые выражения, делая предположения, что содержимое переменных не изменяется в выраж
ениях. Также некоторые виды оптимизации могут изменять порядок вычисления выражений во время процесса компиляции. Модификатор volatile предотвращает возникновение данных изменений.
Возможно использование этих модификаторов вместе. Например, если предполага
ется, что 0х30 является адресом порта, содержимое которого изменяется внешним устройством, то следующее объявление предохранит от побочных эффектов:
const volatile unsigned char *port = 0x30;
Объявление переменных
Все переменные должны объявляется перед
использованием. Ниже показана стандартная форма объявления:
тип список_переменных
;
Здесь тип
должен быть корректным типом данных С, а список_переменных
может содержать одно или более имн идентификаторов, разделнных запятыми. Ниже показаны некоторые ви
ды объявлений:
int i, j, k;
short int si;
unsigned int ui;
double
balance
, profit
, loss
;
Помните, что в С имя переменной ничего не делает со своим типом.
Имеется три основных места, где объ
являю
тся
переменные:
внутри функций, при определении
параметро
в функции и вне функций. Эти переменные называются соответственно локальными переменными, формальными параметрами и глобальными переменными.
Локальные переменные
Переменные, объявляемые внутри функций, называются локальными переменными
. С локальными пере
менными могут работать только операторы, находящиеся в блоке, где данные переменные объявлены. Вне этого блока локальные переменные неизвестны. Блок кода начинается с открытия фигурной скобки и заканчивается закрытием фигурной скобки.
Пример void f(void)
{
int t;
scanf(“%d”, &t);
if(t == 1) {
char s[80];
printf(“enter name:”);
gets(s);
puts(s);
}
/* s здесь неизвестна */
}
Поскольку локальные переменные уничтожаются при выходе из функции
, в которой они объявлялись, то эти переменные не могут
хранить значение между вызовами функций. (Как будет видно, имеется возможность заставить компилятор сохранять значения путм использования модификатора static
.
)
Формальные параметры
Если функция использует аргументы, то в ней должны объявляться переменн
ые, которые будут принимать значения аргументов. Данные переменные называются формальными параметрами функции. Они ведут себя, как любые другие локальные переменные в функции. Как показано в следующем фрагменте программы, они объявляются в круглых скобках,
следующих за именем функции.
int is_in(char *s, char c)
{
while(*s)
if(*s == c) return 1;
else s++;
return 0;
}
Как и с локальными переменными, формальным параметрам можно присваивать значения или использовать их в любых допустимых выражениях С. Даже если эти переменные играют особую роль для некоторых задач по получению значений аргументов, переданных в функцию, то они могут использоваться, как и остальные локальные переменные.
Глобальные переменные
В противоположность локальным переменным глоб
альные переменные видны всей программе и могут использоваться любым участком кода. Они хранят свои значения на протяжении всей работы программы, Глобальные переменные создаются путм объявления вне функции. К ним можно получить доступ в любом выражении, не
зависимо от того, в какой функции находится данное выражение.
В следующей программе программа count объявлена вне функций. Общепринятым является объявление глобальных переменных в начале программе.
#include <stdio.h>
void func1(void), func2(void);
int c
ount;
int main(void)
{
count = 100;
func1();
return 0;
}
void func1(void)
{
func2();
printf(“count is %d”, count); /* выведет 100 */
}
void func2(void)
{
int count;
for(count=1; count<10; count++)
putchar(„ „);
}
Хотя ни main(), ни func1() не
объявляют переменную count, но они оба могут е использовать, func2() объявляет локальную переменную count. Когда func2() обращается к count, она обращается только к локальной переменной, а не к глобальной.
Оператор присваивания
Общий вид оператора прис
ваивания следующий:
имя_переменной = выражение
;
где выражение может быть как простой одиночной константой, так и сложной комбинацией переменных, операторов и констант.
Преобразование типов при присваивании
Преобразование типов предназначено для ситуаци
и, в которой переменные одного типа смешиваются с переменными другого типа. Когда возникает подобная ситуация в операторе присваивания
, используется следующее правило: значение справа от оператора присваивания преобразуется к типу объекта, стоящего слева.
Константы
Константы в С –
это фиксированные значения, которые не могут изменяться програм
мой. Они могут быть любых типов, как показано в таблице
Тип данных
Пример константы
葉
ﱯﹴ
イ葉
。
ﱥ
„a‟ „
n‟ „9‟
‹
‴︳
‱︳
露
Контрольн
ые вопросы:
1.
Какой общий вид программ на языке С?
2.
Какие есть основные типы данных на языке С?
3.
Какие есть основные типы данных на языке С++?
4.
Что такое локальная переменная?
5.
Что такое глоба
льная переменная?
6.
Что такое формальный параметр функции?
Задание
Номер варианта
Задание
1
, 10, 19, 28
Создать программу, п
роизв
одящую вычисления
по формуле:
, где
a
,
b
вводятся с клавиатуры при помощи функции scanf().
Использу
йте
для переменных
сначала тип данных int, потом double. Если в результате вычислений получились расхождения, объясните их
.
2
, 11, 20, 29
Создать программу, производящую вычисления по формуле:
, где
a
,
b
вводятся с клавиатуры при помощи
функции scanf()
.
Используйте для переменных сначала тип данных int, потом double. Если в результате вычислений получились расхождения, объясните их.
3
, 12, 21, 30
Создать программу, производящую вычисления по формуле:
, где
a
,
b
вво
дятся с клавиатуры при помощи функции scanf().
Используйте для переменных сначала тип данных int, потом double. Если в результате вычислений получились расхождения, объясните их.
4
, 13, 22
Создать программу, производящую вычисления по формуле:
, где
a
,
b
вводятся с клавиатуры при помощи функции scanf().
Используйте для переменных сначала тип данных int, потом double. Если в результате вычислений получились расхождения, объясните их.
5
, 1
4, 23
Создать программу,
в
ычисл
яющую площадь
по
верхности цилиндра с радиусом основания r и высотой h
, где
эти величины вводятся с клавиатуры при помощи функции scanf()
.
6
, 15, 24
Создать программу,
вычисляющую площадь
поверхности конуса
с радиусом основания r и высотой h, где эти величины вводятся с к
лавиатуры при помощи функции scanf().
7
, 16, 25
Создать программу, вычисляющую площадь
поверхности
параллелепипеда с длиной а, шириной b и высотой c
, где эти величины вводятся с клавиатуры при помощи функции scanf().
8
, 17, 26
Создать программу, вычисляю
щую площадь
поверхности
сферы с радиусом r, который вводится с клавиатуры при помощи функции scanf().
9
,
18, 27
Создать программу, в
ычисл
яющую
объм шара с радиусом r, который вводится с клавиатуры при помощи функции scanf().
Требования к отчету
Отчет д
олжен содержать:
1)
конспект теоретической части,
2)
лабораторное задание,
3)
текст программы (в электронном виде),
4)
результаты выполнения программ.
Автор
maximrazor
Документ
Категория
Без категории
Просмотров
234
Размер файла
89 Кб
Теги
лаба
1/--страниц
Пожаловаться на содержимое документа