Мегаобучалка Главная | О нас | Обратная связь


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



2019-12-29 289 Обсуждений (0)
Лабораторная работа № 6 0.00 из 5.00 0 оценок




Тема: Указатели .

Указатель - это память, распределенная для другой переменной. Если переменная объявлена как указатель, она может хранить адрес и таким образом указывать на другое значение. При объявлении переменной типа указатель необходимо указать тип данных, адрес которых будет содержать переменная, и имя указателя с предшествующей звездочкой. Формат объявления указателя:

спецификатор – типа* [модификатор] идентификатор ;

Спецификатор - типа задает тип объекта и может быть любого основного типа, типа структуры, смеси. Указатели могут указывать также на функции, массивы, другие указатели.

Задавая вместо спецификатора типа ключевое слово void, можно как бы отстрочить спецификацию типа, на который ссылается указатель. Ключевое слово void означает отсутствие типа и позволяет отложить определение типа. Переменная, объявленная как указатель (* ) на тип void , может быть использован для ссылки на объект любого типа.

В качестве модификатора при объявлении указателя могут выступать ключевые слова: const , near , far , huge .

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

Некоторые приемы программирования с использованием указателя:

1) char * pobt;      2) int * pobtas ;

1)означает что, объявляется указатель на объект типа char. Этим объектом может быть переменная типа char, массив элементами которых являются символы. Каждое из этих объявлений выделяет память для'переменной типа указатель, но каждый из указателей рobt -и pobtas пока ни на что не указывает. До тех пор пока указателю не будет присвоен адрес какого либо объекта, его нельзя использовать в программе.

Для получения адреса какого либо объекта используется операция «адрес» (&) . Например, выражение &ivai, где ival переменная целого типа, означает «получить адрес переменной ival» Используя операцию «адрес» указателям можно присваивать адреса объектов. Например:

char cval , * cptr ;

int ival, *iptr;

cptr = &cval;

iptr = & ival ;

Теперь указатель cptr содержит адрес переменной cval a указатель iptr - адрес переменной ivat;

Доступ к объекту через указатель осуществляется с помощью операции « разадресации» (*), которая рассматривает свой операнд как адрес некоторого объекта и использует этот адрес для выборки содержимого.

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

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

void *имя - указателя;

Ключевое слово void в объявлении указателя позволяет отстрочить определение типа, на который ссылается указатель. Указатель на тип void может быть использован для ссылки на объект любого типа. Например:

{ int a = ]25 ;

doudled =10. 39375;

void * vp ;

 //* присвоить адрес целой переменной указателю vp *//

vp =& a ;

 //* Привести указатель vp к типу int и разадресовать его *//

printf («a=%d\n» s* ((int*)vp));

vp=&d;

printf («d='!..lf\n», * ((double* ) vp ));}

}

Указатель vp объявлен как указатель, который может указывать на объект любого типа;

Следующие операции недопустимы с указателями:

-сложение двух указателей;

-вычитание двух указателей на различные объекты:

-сложение указателей с числом с плавающей точкой;

-вычитание из указателей числа с плавающей точкой;

-умножение указателей ;
-деление указателей ;

Поразрядные операции и операции сдвига указателей;

Преобразование указателей выполняется применением указателей приведения типа указателя: (тип*) указатель;

Например:

{ int i, *ptr ;

i = 0x&e4l;

ptr - &i;

       printf («%d\n». *ptr); //* Печатается- 291 19*// 

printf («%d\n», *((char) ptr)); // * Печатается 65 *//

// Программа преобразующий строку символов в целый тип с.

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

#include<stdio.h>

#include<string.h>
int main(void)

 

{char *string=« ПОВТАС»:

printf («Дли на заданной строки-%d \n», strlen (string));

 return 0:

}

       Результат: Длина заданной строки = 6

/*Программа, преобразующий строчные строки символов (например: «povtas-1-92») на прописные («POVTAS-1-92»), */

 #include<string.h>

 #include<stdio.h>

 #inchide<ctype.h>

Int mam(void)

{int length,!;

char *string=«povtas-l-92»;

length=strlen(string);

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

{ string|il=toupper(stringli|);}

printf(«После преобразования-> %s\n»,string);

return 0; }

Результат: После преобразования-> POVTAS-l-92

 

Варианты задач

1: В компьютер вводятся фамилии и рост студентов группы ПОВТАС-1-97. Вывести на экран фамилии тех студентов, рост которых больше 170 см (для определения кандидатов в баскетбольную команду).

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

3: Заданна последовательность натуральных чисел N, Найти в этой последовательности взаимно простые числа.

Примечание:  Числа а, в, с,.... d называются взаимно простыми

числами, если наибольший обший их делитель (НОД) равен 1, Числа 5, , 10, 7,3-взаимно простые, т.к. НОД (5;10;7;3)=1

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

5: Найти НОД заданных трех натуральных чисел.

6: Найти наименьшее общее кратное (НОК) нескольких (3,4, ....) заданных натуральных чисел.

7: Дано натуральное число N. Выбросить из записи числа цифры 3 и 7, оставив прежним порядок остальных цифр.

8: Написать программу сложения двух простых дробей. (Числители и знаменатели вводятся в переменные М, N, P и Q с клавиатуры). Результат сложения вывести на экран также в виде простой дроби.

9: Дано натуральное число N. Заменить в нем все «двойки» на «пятерки».

10: Даны два числа. Написать программу, в результате выполнения которой выводится первое число, если оно больше второго, и оба числа, если это не так.

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

12: Даны три числа а,. b, с. Написать программу, в результате выполнения которой числа удвоятся, если а > b > с, и числа будут замены на их абсолютные величины в прочих случаях:

13: Написать программу, в результате выполнения которой выясняется, входит ли цифра 2 в запись данного целого числа n.

 

14: Составить программу, по которой для любого введенного целого а определяется его четность. Выводится число 1, если а нечетное, и число 2, если а четное.

15: Натуральное число называется совершенным, если оно равно сумме всех своих делителей, за исключением самого себя. Число 6 является совершенным, так как 6=1 +2+3, число 8 не является совершенным, так как 8  1+2+4. Написать программу вывода всех совершенных чисел, меньших заданного числа N.

 

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

 Тема: Функции.

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

В языке Си программа строится только из функций.

Функция - это независимая совокупность объявлений и операторов, обычно предназначенная для выполнения определенной задачи. Каждая функция должна иметь имя, которое используется для вызова функции. Имя одной из функций, main , которая должна присутствовать, в каждой Си программе зарезервировано. В программе могут содержатся и другие функции, причем функция main необязательна должна быть первой, хотя с нее всегда начинается выполнение Си-программы.

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

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

-определение функции;

-объявление функции;

-вызов функции;

Определение функции.

Определение функции имеет следующий формат:

[спеццфикатор-класса-памяти\ [спецификатор-типа]

описатель( [спис --формальпых-параметров] )

Тело функции

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

Функция возвращает значение, если ее выполнение заканчивается выполнением оператора return в теле функции следующего формата:

return выражение;

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

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

Тело функции -это составной оператор, содержащий операторы, определяющие действия функции. Он также может содержать объявления переменных, используемых в этих операторах.

Все переменные, объявленные в теле функции, имеют класс памяти auto, если они не объявлены иначе, и являются локальными. Когда вызывается функция, то для локальных переменных отводится память в стеке и производится их инициализация (если она задана).

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



2019-12-29 289 Обсуждений (0)
Лабораторная работа № 6 0.00 из 5.00 0 оценок









Обсуждение в статье: Лабораторная работа № 6

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (289)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.01 сек.)