Разделы презентаций


Массивы в языке Си

Содержание

Пример. Динамическое выделение памяти для одномерного массива. Суммирование элементов массива.#include#include#includeint main(){int *a, summa=0; unsigned k; //длина массива  int i; printf("Enter the length of array k>0 :"); scanf("%u",&k);//выделение памяти a=(int*)calloc(k, sizeof(int));printf("Input elements: ");for(i=0;i

Слайды и текст этой презентации

Слайд 1Массивы в языке Си
Нумерация элементов массива начинается с нуля. Имя

массива – указатель на его первый элемент, т.е. mas==&mas[0]. При

объявлении массива указывается его длина. Например, int mas[10];


mas 0 1 … i … 9
Значение i-ого элемента массива можно представить двумя способами: mas[i]; или *(mas+i).
Массивы в языке СиНумерация элементов массива начинается с нуля. Имя массива – указатель на его первый элемент,

Слайд 2Пример. Динамическое выделение памяти для одномерного массива. Суммирование элементов массива.
#include
#include
#include
int

main()
{int *a, summa=0;
unsigned k; //длина массива 
int i;
printf("Enter

the length of array k>0 :");
scanf("%u",&k);
//выделение памяти
a=(int*)calloc(k, sizeof(int));
printf("Input elements: ");

for(i=0;i {printf("a[%d]=" ,i);
scanf("%d",a+i);
}
for (i=0;i summa+=a[i];
printf("summa=%d\n", summa);
return(0);
}


Слайд 3Матрица в языке C
Для матрицы при объявлении указывается число строк

и столбцов.
Нумерация элементов матрицы начинается с нуля.
int

b[10][20]. 0 Обращение к элементу:
b 1 b[i][j]
… *(b[i]+j)
*(*(b+i)+j)
9
**int *int int
Матрица в языке CДля матрицы при объявлении указывается число строк и столбцов.Нумерация элементов матрицы начинается с нуля.

Слайд 4Пример. Динамическое выделение памяти для двумерного массива. Суммирование элементов матрицы.
#include
#include
#include
main()
{int

**b,i,j,m,n,summa=0;
printf("Input n,m >0 ");
scanf("%d%d",&n,&m);
/*выделение памяти для массива

указателей на строки матрицы*/
b=(int**)calloc(n,sizeof(int *));
for(i=0;i

/*выделение памяти для строки */
{b[i]=(int*)calloc(m,sizeof(int));
for(j=0;j{//ввод элемента матрицы
printf("b[%d][%d]=" ,i,j);
scanf("%d",b[i]+j);
}
}
for (i=0;i for(j=0;j summa+=b[i][j];
printf("summa=%d\n",summa);
return(0); }


Слайд 5Динамические структуры данных
Динамические структуры данных - структуры, размер которых в

программе явно не определяется. Память под элементы, входящие в эти

структуры, выделяется в процессе работы программы.
Пример динамических структур – связанные списки.
Основные типы списков уже изучались в языке Паскаль.
Динамические структуры данныхДинамические структуры данных - структуры, размер которых в программе явно не определяется. Память под элементы,

Слайд 6Пусть исходные данные для создания списка – числа 1, 2,

3 и 0 (0-признак окончания ввода данных).
Линейные однонаправленные списки
Очередь



lst

Стек



lst
1
2
3
NULL
3


2

1

NULL

Пусть исходные данные для создания списка – числа 1, 2, 3 и 0 (0-признак окончания ввода данных).

Слайд 7Элемент двунаправленного списка содержит указатель не только на следующий, но

и на предыдущий элемент списка.
Линейные двунаправленные списки
Очередь

поле данных
указатель на след.
lst
указатель

на пред.
Стек


lst

1

NULL

2

NULL

3

3

2

NULL

NULL

1

Элемент двунаправленного списка содержит указатель не только на следующий, но и на предыдущий элемент списка.Линейные двунаправленные спискиОчередь												поле

Слайд 8В циклическом списке последняя запись указывает на первую. Для циклического

списка удобно возвращать адрес последней записи.
Циклические однонаправленные списки
Очередь
lst


Стек отличается от

очереди порядком расположения полей данных. Порядок данных для стека указан на предыдущем рис. в скобках.
Циклические двунаправленные списки – очередь (стек). lst



1 (3)

2 (2)

3 (1)

1 (3)

2 (2)

3 (1)

В циклическом списке последняя запись указывает на первую. Для циклического списка удобно возвращать адрес последней записи.Циклические однонаправленные

Слайд 9Пример 1: Написать программу, которая вводит целые положительные числа в

стек, а затем вычисляет их сумму.
#include
#include
#include

/* содержит описание функций динамического
распределения памяти */
struct node
{node *next; int info; };

node *stack()
//формирование стека
{int n;
node *p, *lst;
/* p - указатель на текущую добавляемую запись, lst - указатель на предыдущую запись (на вершину стека) */

lst=NULL; //пустой стек
printf("Enter positive integers\n");
while(scanf("%d",&n)==1&&n>0)
//ввод до Ctrl+Z или n<=0
{
p=(node *) malloc(sizeof(node));
/* используется операция преобразования типа из указателя на char в указатель на struct node */
p->info=n;
p->next=lst;
lst=p;
}
return(lst);
/*вернет указатель на вершину стека*/
}


Слайд 10int sumspisok (node *lst)
{
int sum=0;
node *p;//указатель на текущую запись

p=lst;
while(p!=NULL)

//лучше while(p)
{
sum+=p->info;
p=p->next;
}
return(sum);


}

int main()
{
printf (" summ = %7d", sumspisok(stack()) ) ;
return 0;
}
int sumspisok (node *lst){int sum=0; node *p;//указатель на текущую записьp=lst;while(p!=NULL) //лучше while(p)  {	  sum+=p->info;

Слайд 11Циклический список
В циклическом списке поле указателя последнего элемента содержит указатель

на первый элемент:






Указатель lst используется для доступа к циклическому списку.
Обычно

такой список определяется с помощью указателя на последний элемент. Если список пуст, то lst=NULL. Циклический список может быть использован для реализации стека и очереди.
Циклический список В циклическом списке поле указателя последнего элемента содержит указатель на первый элемент:Указатель lst используется для

Слайд 12Пустая очередь: lst
lst p


Очередь не пуста:
lst p=lst p lst
p



Новый элемент добавляется после последнего, так как

это очередь.

NULL

Пустая очередь:		lstlst		pОчередь не пуста:			lst			p=lst	p	lst	pНовый элемент добавляется после последнего, так как это очередь. NULL

Слайд 13Пример. Подпрограмма занесения значения X в очередь на базе циклического

списка.
node *add_elem(node *lst, int x)
{
node *p;

p=(node *)malloc(sizeof(node));
p->info=x;
if (lst==NULL) p->next=p; //очередь пуста
else //очередь не пуста
{
p->next=lst->next;
lst->next=p;
}
lst=p; return(lst);
}
Пример. Подпрограмма занесения значения X в очередь на базе циклического списка.node *add_elem(node *lst, int x)  {

Слайд 14void printspisok_1(node *lst) //вывод списка на экран
{node *p;

p=lst;
do{p=p->next;
printf("%7d",p->info);

}
while(p!=lst);
}

int main()
{node *lst=NULL;
int n;

printf("Enter positive integers \n");
while(scanf("%d",&n)==1&&n>0)
lst=add_elem(lst,n);
if(lst) printspisok_1(lst);
else
puts("list is empty");
return 0;
}

Слайд 15Двунаправленные связанные списки
Каждый элемент содержит два указателя: на следующий и

на предыдущий элемент.
Такие списки могут быть использованы для организации очереди

и стека.
Пример : Занесение X в стек на базе линейного двунаправленного связанного списка.

#include
#include

struct node2
{
node2 *next, *prev;
int info;
};

Двунаправленные связанные спискиКаждый элемент содержит два указателя: на следующий и на предыдущий элемент.Такие списки могут быть использованы

Слайд 16
node2 *addstack (node2 *lst, int x)
{
node2 *p;
p= (node2 *)malloc (sizeof

(node2) ) ;
p->info=x;
if(lst!=NULL)
lst->prev=p; /* новая запись размещается перед той, на

которую указывал lst */
p->next=lst;
p->prev=NULL;
lst=p;
return (lst) ;
}
node2 *addstack (node2 *lst, int x){node2 *p;p= (node2 *)malloc (sizeof (node2) ) ;p->info=x;if(lst!=NULL)lst->prev=p; /* новая запись размещается

Слайд 17void printlist_2(node2 *lst)
{ node2 *p,*t;

p=lst;
puts("forward");
while(p)
{
printf("%7d",p->info);

t=p;p=p->next;
}
puts("\nback");
p=t;
while(p)
{
printf("%7d",p->info);
t=p;p=p->prev;

}
puts("");
}

int main()
{
node2 *lst=NULL;
int n;
printf("Enter positive integers\n");
while(scanf("%d",&n)==1&&n>0)
lst=addstack(lst,n);
printlist_2(lst);
return 0;
}


Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика