- •1.Пример выполнения упражнения тренинга на умение 1 Задание
- •2.Пример выполнения упражнения тренинга на умение 2 Задание
- •3.Пример выполнения упражнения тренинга на умение 3 Задание
- •4.Пример выполнения упражнения тренинга на умение 4 Задание
- •5.Пример выполнения упражнения тренинга на умение 5 Задание
- •6.Пример выполнения упражнения тренинга на умение 6 Задание
- •7.Пример выполнения упражнения тренинга на умение 7 Задание
- •8.Пример выполнения упражнения тренинга на умение 8 Задание
- •9.Пример выполнения упражнения тренинга на умение 9 Задание
- •Int Vs(char *s,char *sl, int Mdl);
ТРЕНИНГ УМЕНИЙ
1.Пример выполнения упражнения тренинга на умение 1 Задание
Объявить:
переменную р1как указатель на поле для финансовых расчетов (15 значащих цифр),
р2 как указатель на большие положительные и отрицательные целые числа;
переменную х для финансовых расчетов (15 значащих цифр),
переменную удля хранения больших положительных и отрицательных целых чисел;
переменную ркак указатель на поле без типа.
В будущей программе р1 будет постоянно использоваться с адресом поля x. Написать операторы:
присваивающие переменной р и р2 значение адреса у;
используя р, присвоить у значение 567899;
используя р1, присвоить x значение 3456789.
Решение
р1 – указатель на поле типа long double, p2 - указатель на поле типа long
исходя из условия задачи определяем, что инициировать нужно р1, значения остальных указателей будут определяться операторами присваивания
Объявляем и инициируем: long double х; long double * р1 = &x;// инициация р1 long y; long * p2; void p;
p2 = &y; p = &y;// Ошибка? Несоответствие типов? *p = 567899;// Ошибка! Несоответствие типов! *p1 = 3456789;
используя рекомендацию пункта 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. Объявить указанные массивы и написать операторы, формирующие их начальные значения.
Решение
Определяем тип элементов массива: SL – типа char x – типа int y – типа double
Размерности массивов: SL(30,80) x( 5) у(3, 5)
В соответствии с заданием, инициализировать нужно массив х
Объявляем массивы и инициализируем массив х char SL[30][81];//добавляем для каждого слова один байт // для символа ‘\0’- признака окончания строки int x[5] = {1,3,35,60,135}; double y[3][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]); }