ЗНАЕТЕ ЛИ ВЫ?

Последовательный поиск элемента массива



 

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

#define n 5

void main ()

{

int a[n], i, k, num=-1;

clrscr ();

randomize ();

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

{

a[i]=random (10);

printf (“%3i”, a[i];)

}

Printf (“\nk=”);

Scanf (“%i, &k”);

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

if (a[i]==k)

{

printf (“a[%i]=%i\n”, i, a[i]); num=i;

}

If(num<0)

Printf (“Not”);

Getch();

}

Лабораторная работа №10 «Составление программ с использованием случайных чисел»

Вариант 3:Найти минимальное число из 10 случайных чисел. Диапазон генерации случайного числа задается пользователем в начале работы программы.

начало
#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

A[n],i,min,s,n=10
#define n 10

Void main ()

{

int a[n], i,s, min;

6 [3209]" strokeweight="2pt">

i=0; i<n; i++
Clrscr();

Randomize();

 

Scanf (“%i”,&s);

Scanf (“%i”,&k)

min
For (i=0; i<n; i++);

{

A[i]=random(s-k+1)+k
A[i]=random(s-k+1)+k;

конец
If(i==0) min=a[i];

If(a[i]<min) min=a[i];

Printf(“%3i”,a[i]);

i=0
}

Да
Нет
Printf(“\n s=%i”,min);

Getch ();

{

Getch();

Min=a[i]
}

 

a[i]<min
>
Min=a[i]
A[i]
Да
Нет

 

 


Лабораторная работа №11

Вариант 3: Массив A из 10 элементов заполняется случайными числами от 0 до 9. Сформировать новый массив B, заполенный элементами массива A в обратном порядке (Пример: A:0,1,2,3,4,5,6,7,8,9; B:9,8,7,6,5,4,3,2,1,0) Вывести на экран массивы A и B.

 

 

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

void main ()

{

int a[10],b[10],i,n=9;

clrscr();

randomize ();

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

{

a[i]=random (10);

printf ("%3i",a[i]);

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

{

b[i]=a[n];

n--;

printf ("%3i",b[i]);

}

getch();

}

 

Сортировка массивов

Сортировка массива методом прямого массива (методом пузырька). Сущность метода заключается в том, что соседние элементы массива сравниваются между собой и в случае неправильного расположения они меняются местами (первый со вторым, второй с третьим и т.д.). Последовательное сравнение всех для сортировки массива из n элементов, требуется n-1 проходов.

 

 

Сортировка массива методом прямого обмена (метод пузырька)

 

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

# define n 5

Void main ()

{

Int a[n],i,k,p,temp;

Clrscr();

Randomize();

For (i=0;i<n;i++)

{

A[i]=random(10);

Printf (“%3i”,a[i]);

}

Printf (“\n”);

For (i=0;i<n;i++)

{

P=0;

For (k=0;k<n-i-1;k++)

If (a[k]>a[k+1])

{

Temp=a[k];

a[k]=a[k+1];

a[k+1]=temp;

P++;

}

If (p==0) break;

}

For (i=0;i<n;i++)

Printf (“%3i”,a[i]);

Getch ();

}

Оптимизация алгоритма сортировки осуществляется двумя методами:

1. Сокращением длины прохода (т.к. один элемент за проход встает на свое место);

2. За счет сокращения количества проходов (вводится счетчик количества перестановок за проход, и если после очередного прохода он равен нулю, то массив считается отсортированным и сортировка прекращается);

 

Сортировка прямым выбором

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

 

Сортировка массива методом прямого выбора.

 

 

Метод пузырька лучше использовать с массивом из 10 элементов так как на это уйдет меньше времени, чем методом прямого выбора потому что пузырек сделает 9 проходов, в то время как прямой выбор будет производить 100 проходов.

 

Метод прямого выбора лучше использовать с массивом из 10000 потому что в пузырьковой сортировке потребуется 9999 проходов.

 

Сортировка методом прямого выбора

 

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

# define n 10

void main ()

{

int a[n],i,k,min,n_min,temp;

clrscr();

randomize();

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

{

a[i]=random(10);

printf (“%3i”,a[i]);

}

for (i=0;i<n-1;i++);

{

min=a[i];

n_min=i;

for (k=i+1;k<n;k++)

if (a[k]<min)

{

min=a[k];

n_min=k;

}

temp=a[i]

a[i]=a[n_min];

a[n_min]=temp

}

printf (“\n”);

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

printf (“%3i”,a[i]);

getch ();

}

 

Бинарный поиск в массиве

Бинарный поиск производится в предварительно отсортированном, по возрастанию массиве. Сущность бинарного поиска состоит в том, что в исходном массиве выбирается элемент, с индексом «C» и его значение сравнивается с искомым. Если значения совпали, то поиск заканчивается. Если значение элемента больше чем элемента с индексом «С», то поиск производится в части массива с индексами меньшими C. Т.е. в процессе поиска сдвигается граница интервала в котором ищется требуемое значение, причем сдвигается либо верхняя, либо нижняя граница, поиск заканчивается, когда верхняя и нижняя границы совпадут.

 

#include <stdio.h>

#include <conio.h>

#define n 10

Void main()

{

Int a[n],I,b,c;

Int low =0; high=n-1;

For (i=0;i<n;i++)

{

A[i]=I;

Printf (“%3i”,a[i]);

}

Printf (“\n”);

Scanf (“%i”,&b);

While (low<high)

{

C=(high+low)/2;

If (a[c]<b)

Low=c+1;

Else

High=c;

}

If (a[low]==b)

Printf (“a[%i]=%i,low,a[low]);

Else

Printf (“NO”);

getch ();

}

 

Многомерные массивы

 

Float a[5][10] – пример описания двумерного массива.

 

Двумерный массив трактуется как одномерный массив, элементами которого является массив с указанным в описании типом элементов.

A[0][0] A[0][1] A[0][2] A[0][9]
A[1][0] A[1][1] A[1][2] A[1][9]
A[4][0] A[4][1] A[4][2] A[4][9]

 

Данная запись объявляет массив из 5-ти элементов каждый из которых есть массив из 10-ти вещественных чисел. Отдельные величины этого массива обозначаются именами с двумя индексами.

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

Инициализация – это задание начальных значений.

 

int B[3][3]={11,12,13,21,22,23,31,32,33};

 

A[0][0]=11 A[0][1]=12 A[0][2]=13
A[1][0]=21 A[1][1]=22 A[1][2]=23
A[2][0]=31 A[2][1]=32 A[2][2]=33

 

 

Лабораторная работа № 13

Вариант №3

 

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

void main ()

{

int a[1][1],i,n,m,k;

clrscr();

randomize();

\\printf ("Enter the number of lines ");

scanf ("%i",&m);

\\printf ("Enter the number of column ");

scanf ("%i",&n);

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

{

for(k=0;k<m;k++)

{

a[i][k]=random(6+6+1)-6;

if (a[i][k]<0) a[i][k]=0;

printf ("%3i",a[i][k]);

}

printf ("\n");

}

getch();

 

 

Указатель

 

Указатель – это адрес поля памяти занимаемого программным объектом.

Формат описания указателя:

Тип *имя_указателя;

Операция взятия адреса переменной – &; Применение этой операции к имени переменной дает в результате её адрес в памяти.

 

Int a=5;

Char c=”G”;

Float r=1.2;

Память FFC0 FFC1 FFC2 FFC3 FFC4 FFC5 FFC6
Переменные A   C R
Значения G 1.2

 

Int *pti; pti=&a; pti=>FFC0

Char *ptc; ptc=&a; ptc=>FFFC2

Float *ptf; ptf=&a; ptf=>FFC3

 

Указателем могут присваиваться значения адресов объектов только того типа, с которым они описаны.

 

В заголовочном файле <stdio.h> определена константа – нулевой указатель с именем NULL, после её присвоения к указателю в нем будет отсутствовать какой либо адрес.

Операция разадоресации – *. С её помощью можно сослаться через указатель на соответствующую переменную.

 

Int a=5;

Int *pti=&a;

Int b;

B=a+5; => b=*pti+5;

 

Указатели и массивы

 

Имя массива трактуется как указатель – константа на массив.

Int x[10]

X=&X[0]

X[0] => *(X+0) => FF00

X[1] => *(X+1) => FF02

X[N] *(X+N);

 

Доступ к элементам массивов, кроме индексированных имен, можно организовать через указатели по принципу ИМЯ [индекс]ó*(имя+индекс);

Для указателей работают свои правила сложения:

1. Если к указателю добавить число, то значение адреса хранимого указателем изменится не на это число а на величину равную (число*размер типа указателя);

 

Int x[10]

Int y[10]

X=Y – неправильная запись, так как нельзя изменять константу;

 

X[i][k] i*10+k;

*(x+i*10+k);

X+I – сложение адресов;

I*10 – длинна строки;

*(*(k+i)+k);

 

В языке Си, символ «[]» играет роль, знака операции сложения адреса массива с индексом элемента массива.

 

 

Символы и символьные строки

 

Char – символьный тип данных;

Тип записи:

Char= a’5’;

Размер типа char 1байт, каждому символу присваивается свой код.

Функции ввода с клавиатуры:

a=getch();

scanf(“%c”,&);

putch(a);

printf (“%c”,a);

printf (“%i”,a);

Заголовочный файл <ctype.h> объявляет функции для проверок символов. Функции возвращают не нулевое значение (истинна), когда аргумент удовлетворяет описанному условию или принадлежит указанному классу символов и нуль в противном случае.

 

isupper(c) буква верхнего регистра
islower(c) Буква нижнего регистра
idigit(c) Десятичная цифра
isalpha(c) isupper(c) или islower(c) есть истина
isalnum(c) isalpha(c) или isdigit(c) есть истинна
iscntrl(c) управляющий символ
isgraph(c) печатаемый символ кроме пробела
isprint(c) Печатаемый символ включая пробел
ispunct(c) печатаемый символ кроме пробела, буквы или цифры
isspace(c) пробел, смена страницы, новая строка, возврат каретки, табуляция, вертикальная табуляция  

 

Tolower(c) – переводит с на нижний регистр;

Toupper(c) – переводит с на верхний регистр;

 

В языке «Си» нет специально определенного строкового типа данных. Символьные строки организуются как массивы символов, последний из которых \0, внутренний код которого равен нулю.

Char a[20]=”word”;

Char a[]=”word”;

Char a[]={‘w’,’o’,’r’,’d’,’\0’};

<string.h>

Gets(str); -ввод

Puts(str); -вывод

Аргументами функций является имя строки.

#include <stdio.h>

#include <string.h>

#include <conio.h>

void main ()

{

char C,S[10];

int i;

clrscr();

printf ("vvod stroki");

gets (S);

for (i=0; i<=(strlen(S)-1)/2;i++)

{

C=S[i];

S[i]=S[streln(s)-i-1];

S[strlen(S)-i-1]=C;

}

printf ("\n perevernutaya stroka");

puts(S);

}

 

Char a[20]={‘a’,’B’,’c’,’D’,’e’,’F’,’\0’};

Char b[20]=”fedcba”

 

Strcat

Strcat(a,b);

Объединяет Строка 1 и Строка 2 и записывает результат в Строка2

Printf (“String 1:%s\n”,a);

Printf (“String 2:%s\n”,b);

Результат:

String 1: aBcDeFfedcba

String 2: fedcba

 

Strcpt

Strcpy(a,b);

Printf (“String 1:%s\n”,a);

Printf (“String 2:%s\n”,b);

Результат:

String 1: fedcba

String 2: fedcba

Strlen

Strlen(строка)

Int l;

l=strlen(a);

Printf (“String 1: %i\n”,l);

Результат:

String 1: 6;

 

Strcmp

Strcmp (Строка1, Строка2)

l=strcmp(a,b); printf (“String 1<String 2: l=%i\n”,l);

l=strcmp(b,a); printf (“String 1>String 2: l=%i\n”,l);

l=strcmp(a,a); printf (“String 1=String 2: l=%i\n”,l);

Результат:

String 1< String 2: l=-5

String 1> String 2: l=5

String 1= String 2: l=0

Strlwr

Strlwr (Строка)

Scrlw(a);

Printf (“String 1: %s\n”,a);

Результат:

String 1: abcdef

 

Strupr

Strupr (Строка)

Strupr(a);

Printf(“String 1:%s\n”,a);

Результат:

String 1: ABCDFEF

 

Strset

Strset (Строка, Символ)

Strset(a,’*’);

Результат:

String 1:*****

 

120 дней суддома





Последнее изменение этой страницы: 2017-01-25; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.238.107.166 (0.027 с.)