ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Sort_vozr(ptr1,n1);Sort_vozr(ptr2,n2); while((i1<n1) && (i2<n2)) { if(ptr1[i1]<ptr2[i2]) ptr3[i3]=ptr1[i1++]; Else ptr3[i3]=ptr2[i2++]; i3++; } while((i1<n1) || (i2<n2)) { if(i1<n1) ptr3[i3++]=ptr1[i1++]; Else ptr3[i3++]=ptr2[i2++]; } printf("\nРезультат:\n"); for(i1=0;i1<n1+n2;i1++) printf("%d ",ptr3[i1]); printf("\n"); Free(ptr1); Free(ptr2); Free(ptr3); } void sort_vozr(int*x,int n) { Int k,buf,i,j; for(i=0;i<n-1;i++) { for(k=i,j=i+1;j<n;j++) { if(x[k]>x[j]) k=j; } buf=x[k]; x[k]=x[i]; x[i]=buf; } } void vvod_mas(int*x,int n) { Int i; for(i=0;i<n;i++) { printf("[%d]=",i); scanf("%d",&x[i]); } } 2. Написать программу, которая вводит строку и проверяет, является ли данная строка палиндромом. Палиндромом называется та строка, которая при считывании и с начало и с конца одинакова, например 1234321 или сос. После ввода строки считаем длину строки и динамически выделяем место, куда переписываем данную строку и проверяем, совпали они или нет. 3. Ввести строку. Если длина строки а) >10, то удалить 2 первых символа строки и 3 последних символа в строке б)< 10, то удалить символ, находящийся по середины строки. Функция сalloc()
Функция сalloc() как и функция malloc() осуществляется запрос на выделение свободной памяти и при наличии таковой, запрошенный объем свободной памяти выделяется на нужды программы, но различие в том что выделяемая память инициализируется нулями. void * сalloc(unsigned num,unsigned size) Функция calloc выделяет область памяти размером num* size байтов. В случае успеха, calloc возвращает указатель на начало выделенного блока памяти. Если для выделенной памяти не хватает места, возвращает NULL. 1. объявляется указатель на какой-то тип данных. тип_данных *имя_указателя; 2. вызов функции calloc() для выделения области памяти имя_указателя=(тип_данных *) calloc (количество, sizeof(тип_данных)); 3. проверка, выделилась ли память if(!имя_указателя) { printf (“Нет места!!!!\n”); exit (1);// прекращение работы программы, причем в качестве аргумента, может быть //использовано любое целое число. Одна по соглашению было принято передавать 1, если причиной //прерывания программы послужила ошибка и 0 в остальных случаях. } 4. использование выделенной памяти. 5. освобождение памяти free( имя_указателя ); Функцию calloc() можно использовать как и функцию malloc(). Функция realloc() void * realloc(void *ptr,unsigned size) Функция realloc изменяет размер динамически выделенной памяти, на которую указывает ptr на новый размер - size байтов. Т.е для того чтобы можно было изменить размер памяти его необходимо обязательно динамически выделить с помощь функции malloc или функции calloc и при изменении размера выделяется новая память, а не меняется размер выделенной памяти следовательно необходимо переадресовывать указатель. Рассмотрим пример использования функции realloc. void main(){ int *p1, *p2; p1= (int *)malloc(5*sizeof(int)); if(!p1){ printf(“Error!!!!”); exit(1);} …………………… p2=(int *)realloc(p1,10*sizeof(int));//10 это новый размер массива, т.е. добавляется //еще 5 елементов if(p2)//если память выделилась p1=p2;//переадресация указателя else{ printf(“Error!!!!”); exit(1);} ………………………… } Задача: Вести размер массива и динамически выделить память. Заполнить элементы массива и удалить все 5 находящиеся в массиве. #include<stdio.h> #include<stdlib.h> void vvod_mas(int *,const int); void vivod_mas(int *,const int); void main(){ int n,k=0; int *x,*y; printf("Введите размер массива: "); scanf("%d",&n); x=(int *)malloc(n*sizeof(int)); if(!x) return; Vvod_mas(x,n); printf("Содержание массива:\n"); Vivod_mas(x,n); for(int i=0;i<n;i++){ if(x[i]==5){ k++; printf("\nk=%d\n",k); for(int j=i+1;j<n-k;j++) x[j-1]=x[j]; } } n=n-k; y=(int*)realloc(x,n*sizeof(int)); If(y) x=y; Else Return; printf("Содержание нового массива:\n"); Vivod_mas(x,n); } void vvod_mas(int *p,const int k){ for(int i=0;i<k;i++){ printf("[%d]=",i); scanf("%d",(p+i)); } } void vivod_mas(int *p,const int k){ for(int i=0;i<k;i++) printf("[%d]=%d\n",i,*(p+i)); } СТРУКТУРА Не нашли, что искали? Воспользуйтесь поиском:
|