Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
11
Добавлен:
09.04.2015
Размер:
232.96 Кб
Скачать

Void main ()

{ float Z[N][M], X[N];

int i,j;

clrscr();

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

for(j= 0;j<M; j++)

{ printf("Z[%d][%d] = ", i,j);

scanf("%f",&Z[i][j]); //ввод элемента Z[i][j] матрицы Z

}

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

X[i] = Smatr(Z[i],M); //обращение к функции Smatr и

// формирование элемента X[i] вектора Х

for(i 0;i<N; i++)

{

for(j= 0;j<M; j++)

printf("%7.2f ", Z[i][j]); //выдача введенной матрицы

printf("\n");

}

printf("***********\n");

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

printf("%7.2f ",X[i]); // выдача вектора Х

getch();

}

float Smatr ( float *mz, int m1) // заголовок функции Smatr

{ //начало тела функции

int j;

float s;

for(j= 0;j<m1; j++)

s+=mz[j];

return s;

}// конец тела функции

В этой программе фактический параметр Z[i] – это адресiой строки матрицыZ. Соответствующий ему формальный параметр (float *mz) – это указатель на элемент типаfloat, а выражениеmz[j] в функции реализует обращение кj- элементуiой строки матрицыZ, т. е. к элементуZ[i][j].

Ну а если мы хотим использовать динамический массив? Как реализовать данную задачу, например, в последнем примере? Это возможно сделать с помощью указателя на указатель.

Возможный вариант программы с динамическими массивами Z иX, использующей уже проверенную функциюSmatr, представлен ниже:

# include <stdio.h>

# include <conio.h>

float Smatr(float *mz, int m1);

Void main()

{ int N,M,i,j;

float **Z, *X, zz;

clrscr();

printf("N= ");

scanf("%d",&N); //ввод количества строк

printf("M= ");

scanf("%d",&M); //ввод количества столбцов

X = new float[N];//выделение памяти для массива Х

Z = new float*[N];// выделение памяти для массива указателей // на указатели типа float*

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

Z[i]=new float [M]; //выделение памяти для i – ой строки

// массива Z

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

for ( j=0;j<M;j++)

{printf("Z[%d][%d]=",i,j);

scanf("%f",&zz); //ввод вспомогательной переменной

Z[i][j]=zz; //формирование значения элемента Z[i][j]

}

printf("\n********************\n");

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

{printf("\n");

for ( j=0;j<M;j++)

printf("%6.2f",Z[i][j]); //распечатка введенной матрицы

}

printf("\n********************\n");

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

{ X[i] = Smatr(Z[i],M); //обращение к функции Smatr и // формирование элемента X[i]

printf("%6.2f\n",X[i]); //выдача значения элемента X[i]

}

getch();

}

float Smatr(float *mz, int m1)

{

int j;

float s;

for (j=0;j<m1; j++)

s+=mz[j];

return s;

}

В этой программе для ввода массива Z использована вспомогательная переменнаяzz. Однако можно было обойтись и без вспомогательной переменной. В этом случае фрагмент программы, обеспечивающий ввод, выглядит следующим образом:

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

for ( j=0;j<M;j++)

{printf("Z[%d][%d]=",i,j);

scanf("%f", Z[i] + j); //ввод элемента Z[i][j]

}

Вспомним, что адрес нулевого элемента iой строки массиваZ, аZ[i] + jадресjго элементаiой строки массиваZ.

2.3. Функции обработки строк

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

Рассмотрим функцию копирования строк с именем strcpy:

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