Студопедия — Примеры. 1. Пройдём по массиву и найдём все чётные элементы.
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Примеры. 1. Пройдём по массиву и найдём все чётные элементы.






1. Пройдём по массиву и найдём все чётные элементы.

?

  #include <conio.h> #include <stdio.h>   void main() { int A[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int even[10]; int evenCounter = 0; int *iter, *end;   //iter хранит адрес первого элемента массива //end хранит адрес следующего за последним "элемента" массива end = &A[10]; for (iter = A; iter < end; iter++) { if (*iter % 2 == 0) even[evenCounter++] = *iter; }   //Выводим задом наперёд чётные числа for (--evenCounter; evenCounter >= 0; evenCounter--) { printf("%d ", even[evenCounter]); }   getch(); }

2. При сортировке элементов часто приходится их перемещать. Если объект занимает много места, то операция обмена местами двух элементов будет дорогостоящей. Вместо этого можно создать массив указателей на исходные элементы и отсортировать его. Так как размер указателей меньше, чем размер элементов целевого массива, то и сортировка будет происходить быстрее. Кроме того, массив не будет изменён, часто это важно.

?

  #include <conio.h> #include <stdio.h>   #define SIZE 10   void main() { double unsorted[SIZE] = {1.0, 3.0, 2.0, 4.0, 5.0, 6.0, 8.0, 7.0, 9.0, 0.0}; double *p[SIZE]; double *tmp; char flag = 1; unsigned i;   printf("unsorted array\n"); for (i = 0; i < SIZE; i++) { printf("%.2f ", unsorted[i]); } printf("\n");   //Сохраняем в массив p адреса элементов for (i = 0; i < SIZE; i++) { p[i] = &unsorted[i]; }   do { flag = 0; for (i = 1; i<SIZE; i++) { //Сравниваем СОДЕРЖИМОЕ if (*p[i] < *p[i-1]) { //обмениваем местами АДРЕСА tmp = p[i]; p[i] = p[i-1]; p[i-1] = tmp; flag = 1; } } } while(flag);   printf("sorted array of pointers\n"); for (i = 0; i < SIZE; i++) { printf("%.2f ", *p[i]); } printf("\n");   printf("make sure that unsorted array wasn't modified\n"); for (i = 0; i < SIZE; i++) { printf("%.2f ", unsorted[i]); }   getch(); }

3. Более интересный пример. Так как размер типа char всегда равен 1 байт, то с его помощью можно реализовать операцию swap – обмена местами содержимого двух переменных.

?

  #include <conio.h> #include <conio.h> #include <stdio.h>   void main() { int length; char *p1, *p2; char tmp; float a = 5.0f; float b = 3.0f;   printf("a = %.3f\n", a); printf("b = %.3f\n", b);   p1 = (char*) &a; p2 = (char*) &b; //Узнаём сколько байт перемещать length = sizeof(float); while (length--) { //Обмениваем местами содержимое переменных побайтно tmp = *p1; *p1 = *p2; *p2 = tmp; //не забываем перемещаться вперёд p1++; p2++; }   printf("a = %.3f\n", a); printf("b = %.3f\n", b);   getch(); }

В этом примере можно поменять тип переменных a и b на double или любой другой (с соответствующим изменением вывода и вызова sizeof), всё равно обмениваются местами байты двух переменных.

4. Найти длину строки, введённой пользователем, используя указатель

?

  #include <conio.h> #include <stdio.h>   void main() { char buffer[128]; char *p; unsigned length = 0;   scanf("%127s", buffer); p = buffer; while (*p!= '\0') { p++; length++; }   printf("length = %d", length); getch(); }

Обратите внимание на участок кода

?

  while (*p!= '\0') { p++; length++; }

его можно переписать

?

  while (*p!= 0) { p++; length++; }

или

?

  while (*p) { p++; length++; }

или, убрав инкремент в условие

?

  while (*p++) { length++; }

 

 

Персональный сайт Тенишева Дамира Шамильевича. (с) Damir Tenisheff, Тенишев Дамир Шамильевич 2003-2008







Дата добавления: 2015-08-12; просмотров: 519. Нарушение авторских прав; Мы поможем в написании вашей работы!



Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Предпосылки, условия и движущие силы психического развития Предпосылки –это факторы. Факторы психического развития –это ведущие детерминанты развития чел. К ним относят: среду...

Анализ микросреды предприятия Анализ микросреды направлен на анализ состояния тех со­ставляющих внешней среды, с которыми предприятие нахо­дится в непосредственном взаимодействии...

Типы конфликтных личностей (Дж. Скотт) Дж. Г. Скотт опирается на типологию Р. М. Брансом, но дополняет её. Они убеждены в своей абсолютной правоте и хотят, чтобы...

Субъективные признаки контрабанды огнестрельного оружия или его основных частей   Переходя к рассмотрению субъективной стороны контрабанды, остановимся на теоретическом понятии субъективной стороны состава преступления...

ЛЕЧЕБНО-ПРОФИЛАКТИЧЕСКОЙ ПОМОЩИ НАСЕЛЕНИЮ В УСЛОВИЯХ ОМС 001. Основными путями развития поликлинической помощи взрослому населению в новых экономических условиях являются все...

МЕТОДИКА ИЗУЧЕНИЯ МОРФЕМНОГО СОСТАВА СЛОВА В НАЧАЛЬНЫХ КЛАССАХ В практике речевого общения широко известен следующий факт: как взрослые...

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия