Смекни!
smekni.com

Методические указания к лабораторным работам по дисциплине «Программирование на языке высокого уровня» (стр. 6 из 10)

//* присвоить адрес целой переменной указателю 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 &bsol;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&bsol;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 необязательна должна быть первой, хотя с нее всегда начинается выполнение Си-программы.

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

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

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

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

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

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

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

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

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

тело функции

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

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

return выражение;

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

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

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

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

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

Объявление функции (прототип)

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

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

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

[, список - описателей]',

В отличие от формата определения функции в формате прототипа за заголовком функции следует точка с запятой (т.е. прототип функции не имеет тела), и заголовок функции может заканчиваться списком - описателей.

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

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

Вызов функций.

Вызов функции имеет следующий формат:

выражение ( [список - выражении]);

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

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

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

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

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

-2. Происходит замена формальных параметров на фактические. Первое выражение в списке всегда соответствует первому формальному параметру, второе - второму и т.д. .