Лекция 2 (продолжение)
Пример со строками (память!!!)
Строки - указатели (память!!!)
Динамические массивы (ввод массива)
Ввод одномерного массива
Три варианта расчета суммы
Проверка вычисления суммы
Ввод матрицы из файла (1)
Ввод матрицы из файла (2)
345.50K
Category: programmingprogramming

Лекция 2 (продолжение). Массивы, описание, передача в функцию в качестве параметров

1. Лекция 2 (продолжение)

Массивы, описание,
передача в функцию в
качестве параметров

2. Пример со строками (память!!!)

S2
#include <stdio.h>
void main()
{char s1[]="1", s2[]="t";
printf("s1 ");
scanf("%s", s1);
printf("s2 "); scanf("%s", s2);
printf("1____s1= %s\n", s1);
printf("2____s2= %s\n", s2);
s2[3]='K';
printf("3____s1= %s\n", s1);
printf("4____s2= %s\n", s2);
printf("s1 ");
scanf("%s", s1);
printf("5____s2= %s\n", s2);}
Программирование
t \0 1
1
5 6 7
5 6 7
A
\0
2
8
K
B
S1
3
9
9
C
4 \0
\0
\0
D E \0
1____s1= 789
2____s2= 56789
3____s1= 7K9
4____s2= 567K9
s1 ABCDE
5____s2= 56ABCDE
2

3. Строки - указатели (память!!!)

S1
#include <stdio.h>
void main()
{char *s1="1", *s2[]="t";
printf("s1 ");
scanf("%s", s1);
printf("s2 "); scanf("%s", s2);
printf("1____s1= %s\n", s1);
printf("2____s2= %s\n", s2);
s2[3]='K';
printf("3____s1= %s\n", s1);
printf("4____s2= %s\n", s2);
printf("s1 ");
scanf("%s", s1);
printf("5____s2= %s\n", s2);}
Программирование
1 \0 t
1 2 3
5
5
A B C
\0
4
6
6
D
S2
\0
7 8 9 \0
7 K 9 \0
E \0
1____s1= 1256789
2____s2= 56789
3____s1= 12567K9
4____s2= 567K9
s1 ABCDE
5____s2= CDE
3

4. Динамические массивы (ввод массива)

int
GetArray(int *p)
На входе – адрес
{
первого элемента
int
i,N;
printf("n=");
scanf("%d", &N);
На выходе число
realloc(p,N);
элементов
if (p == NULL) return(0);
printf("input %d elements =",N);
for (i=0; i<N; i++)
scanf("%d", &p[i]);
Перевыделение памяти
fflush(stdin) ;
на N элементов
return(N);
}
Программирование
4

5. Ввод одномерного массива

#include <stdio.h>
выделение памяти на 1
#include <alloc.h>
элемент
void main(void)
{ int *p=(int *) malloc(1);
int n=0, i;
Ввод массива с
fflush(stdin);
увеличением памяти
n=GetArray(p);
if (p!=NULL)
for (i=0; i<n; i++) printf("%d ", p[i]);
else printf("________ ");
printf("\n");
free(p);
getch();
}
Программирование
5

6. Три варианта расчета суммы

Три варианта расчета суммы
int sum0(int A[],int n)
{ int s,i;
for (i=s=0; i<n; i++)
s += A[i];
return(s);}
int sum1(int *p, int n)
{ int s,i;
for (i=s=0; i<n; i++)
s += p[i];
return(s);}
Выбор элемента по
int
sum2 ( int *p, int n)
номеру
{ int s;
for (s=0; n >0; n--)
Выбор элемента по
s += *p++;
текущему адресу и
return(s); }
перемещение указателя
на следующий элемент
Программирование
6

7. Проверка вычисления суммы

void main(void)
{ int*p=(int *) malloc(1);
int n, i;
n=GetArray(p);
printf("s1=%d \n", sum1(p,n));
printf("s2=%d \n", sum2(p,n));
printf("s0=%d \n", sum0(p,n));
free(p);
fflush(stdin) ;
getchar();
}
Программирование
7

8. Ввод матрицы из файла (1)

#define LINES 31
#define COLUMNS 79
void Input_Matrix(int *n, int *m,
float MATR[LINES][COLUMNS],char *file_inp)
{int i , j;
FILE *f1; f1=fopen(file_inp,"r");
fscanf(f1,"%i %i\n", n,m);
for(i=0; i < *n; i++)
for(j=0; j < *m; j++)
fscanf(f1,"%f",&MATR[i][j]);
fclose(f1);}
Вызов
int m=0, n=0;
float A[LINES][COLUMNS];
Input_Matrix(&n , &m, A,”M.dat”);
Программирование
8

9. Ввод матрицы из файла (2)

void Input_Matrix (int *n, int *m,
float MATR [ LINES ] [ COLUMNS ] ,char *file_inp)
void Input_Matrix (int *n, int *m,
float MATR [ ] [ COLUMNS ] , char *file_inp)
void Input_Matrix (int *n, int *m,
float *MATR ,char *file_inp)
{int i , j;
FILE *f1;f1=fopen(file_inp,"r");
fscanf(f1,"%i %i\n", n,m);
Пересчет индекса
for(i=0; i < *n; i++)
for(j=0; j < *m; j++)
fscanf(f1,"%f", &MATR [ i * (*m) + j )
]
);
fclose(f1);
}
Программирование
9

10.

Программирование
10
English     Русский Rules