Процедурное программирование на языке С. Часть 2. Указатели на объекты. Многоуровневая адресация: Методические указания к лабораторным работам по курсам «Алгоритмические языки и программирование» и «Процедурное программирование», страница 14

}


КОНТРОЛЬНЫЕ ВОПРОСЫ И ЗАДАНИЯ

1. Разобрать примеры 5.1 и 5.2, используя режим Debug.

2.  В главной функции с клавиатуры ввести значение переменных n, kиt .

В функции f1()  динамически выделить  память под целочисленную квадратную  матрицу c  элементами aij , i = 1,…nj = 1,…, n и ввести значения всех элементов матрицы. В главной функции после вызова функции  f1()  вывести  на экран значение  элемента akt .

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

·  akt   -    возвращаемое значение функции f1() .

·  В функцию f1 передается адрес, по которому записывается значение  akt  .

·  Возвращаемым значением функции f1() является адрес строки матрицы, содержащей akt  .

·  В функцию f1() передается адрес, по которому записывается адрес k-ой строки матрицы .

·  Возвращаемым значением функции f1() является «начальный адрес матрицы».

·  В функцию f1() передается адрес, по которому записывается «начальный адрес матрицы» .

·  Возвращаемым значением функции f1() является адрес элемента akt  .

·  В функцию f1()  передается адрес, по которому записывается адрес элемента akt  .

Замечание. Количество параметров функции f1() зависит от конкретного способа.

3. Что будет на экране после выполнения программы:

#include <stdio.h>

#include <stdlib.h>

void fun (char ** q, char * t)

{char *A[]={"hello","day","month","year"};

 *q = A[0];*t='m';

}

 void main (void)

{ char *ptr,  ch;int i = 0;

  fun(&ptr, &ch);

    for (; i<4; ch = *ptr++, i++)  

       {switch (ch)

               { case 'm': printf ("%c", 'g'); break;

                     case 'l': printf ("%c", 'w');

                     default : printf ("%c", 'a');}

        }

}

4. Что будет на экране после выполнения программы:

#include <stdio.h>

#include <stdlib.h>

char ** fun (char * t)

{char*S[]={"hello","day","month","year"};

 int j=0; char **A;

 A=(char **)malloc(sizeof(char *));

    for (; j<4; j++)   A[j]=S[j];

 *t = 'm';

 return A;

}

void main (void)

{int j=0, i= 0; char **ptr,  *ch;

 ch = (char *)malloc(sizeof(char));   ptr = fun(ch);

    for (; i<4; ch = *(ptr+j),j++, i++)  

       {switch (*ch)

               { case 'm': printf ("%c", 'g'); break;

                 case 'l': printf ("%c", 'w');

 default : printf ("%c", 'a');}

   } 

 }


ЛАБОРАТОРНАЯ  РАБОТА  6

Целью лабораторной работы 6 является освоение  библиотечных функций для обработки символьной информации.

ВАРИАНТЫ  ЗАДАНИЙ

Вариант 1. В главной функции ввести переменную n, определяющую максимальное количество символов в вводимом далее предложении. Это количество  не  должно превышать длину строки экрана (80 символов). С клавиатуры ввести предложение из слов и чисел с точкой на конце, динамически выделив для него память. Посчитать  количество  слов в предложении и вывести его на экран. Завести массив из всех чисел в предложении. Посчитать количество элементов массива, найти максимальный элемент, вывести эти данные на экран.

Вариант 2. В главной функции ввести переменную n, определяющую максимальное количество символов в вводимом далее предложении. Это количество  не  должно превышать длину строки экрана (80 символов). С клавиатуры ввести предложение из слов и чисел с точкой на конце, динамически выделив для него память. Слова и числа могут отделяться друг  от друга одним и более пробелов. Удалить лишние  пробелы  в  предложении  и  вывести  новое предложение на экран. Завести массив из всех чисел в предложении. Посчитать количество элементов массива, расположить  числа в порядке возрастания и вывести эти данные на экран.

Вариант 3. В главной функции ввести переменную n, определяющую максимальное количество символов в вводимом далее предложении. Это количество  не  должно превышать длину строки экрана (80 символов). С клавиатуры ввести предложение из слов и чисел с точкой на конце, динамически выделив для него память. Каждому слову поставить в соответствие число, которое получается как сумма кодов его букв. Найти  максимальное  число и вывести его на экран вместе с соответствующим ему словом.