Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
attachments_05-09-2012_18-55-54 / ТРЕНИНГ УМЕНИЙ.doc
Скачиваний:
10
Добавлен:
09.04.2015
Размер:
118.78 Кб
Скачать

ТРЕНИНГ УМЕНИЙ

1.Пример выполнения упражнения тренинга на умение 1 Задание

Объявить:

  • переменную р1как указатель на поле для финансовых расчетов (15 значащих цифр),

  • р2 как указатель на большие положительные и отрицательные целые числа;

  • переменную х для финансовых расчетов (15 значащих цифр),

  • переменную удля хранения больших положительных и отрицательных целых чисел;

  • переменную ркак указатель на поле без типа.

В будущей программе р1 будет постоянно использоваться с адресом поля x. Написать операторы:

  • присваивающие переменной р и р2 значение адреса у;

  • используя р, присвоить у значение 567899;

  • используя р1, присвоить x значение 3456789.

Решение

  1. р1 – указатель на поле типа long double, p2 - указатель на поле типа long

  2. исходя из условия задачи определяем, что инициировать нужно р1, значения остальных указателей будут определяться операторами присваивания

  3. Объявляем и инициируем: long double х; long double * р1 = &x;// инициация р1 long y; long * p2; void p;

  4. p2 = &y; p = &y;// Ошибка? Несоответствие типов? *p = 567899;// Ошибка! Несоответствие типов! *p1 = 3456789;

  5. используя рекомендацию пункта 5 алгоритма умения, применяем операцию преобразования типа там, где обнаружено несоответствие типа: p = (void) &y; В этом месте вспомним, что явное преобразование типа для указателя типа void можно не делать, так как выполняется по умолчанию. Поэтому оператор p2 = &y; можно оставить без изменения! А вот оператор *p = 567899; необходимо переписать в виде: *(long *) p = 567899;

Окончательное решение всей задачи имеет вид:

long double х; long double * р1 = &x;// инициация р1 long y; long * p2; void p;

p2 = &y; p = &y; *(long *) p = 567899; *p1 = 3456789;

2.Пример выполнения упражнения тренинга на умение 2 Задание

В программе будет использоваться массив слов SL, содержащий не более 30 слов, каждое длиной не более 80 букв, массив целых чисел x(i), i = 1,..5, имеющий начальные значения элементов : <1, 3, 35, 60, 135 > ; массив вещественных чисел для научных расчетов точностью до 15 значащих цифр y (i,j), i = 1,..3; j = 1,..5. Объявить указанные массивы и написать операторы, формирующие их начальные значения.

Решение

  1. Определяем тип элементов массива: SL – типа char x – типа int y – типа double

  2. Размерности массивов: SL(30,80) x( 5) у(3, 5)

  3. В соответствии с заданием, инициализировать нужно массив х

  4. Объявляем массивы и инициализируем массив х char SL[30][81];//добавляем для каждого слова один байт // для символа ‘\0’- признака окончания строки int x[5] = {1,3,35,60,135}; double y[3][5];

  5. Напишем операторы цикла: // цикл для ввода массива строк SL for (i = 0; i <30; i ++) { printf (“Введите строку %d ”, i); gets (SL[i]); } // цикл для ввода массива чисел у for (i = 0; i <30; i ++) for (j=0; j<3;j++) {printf( “y[%d][%d] = ”, i,j); scanf (“%lf”, &y[i][j]); } Окончательно, с учетом вспомогательных переменных, фрагмент программы будет иметь вид:

char SL[30][81]; int x[5] = {1,3,35,60,135}; double y[3][5]; int i,j; // цикл для ввода массива строк SL for (i = 0; i <30; i ++) { printf (“Введите строку %d ”, i); gets (SL[i]); } // цикл для ввода массива чисел у for (i = 0; i <30; i ++) for (j=0; j<3;j++) {printf( “y[%d][%d] = ”, i,j); scanf (“%lf”, &y[i][j]); }

Соседние файлы в папке attachments_05-09-2012_18-55-54