Источник https://proproprogs.ru/c_base/c_vvedenie-v-massivy
1
2
3
4
5
6
7
8
| #include <stdio.h>
#define TOTAL_MARKS 13
int main(void)
{
int marks[TOTAL_MARKS];
return 0;
}
|
Обход массива с помощью цикла for
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| #include <stdio.h>
#define TOTAL_MARKS 13
int main(void)
{
int marks[TOTAL_MARKS];
marks[2] = 4;
marks[0] = 2;
marks[12] = 5;
// marks[13] = 1; // никогда так не делайте!!!
for(int i = 0; i < TOTAL_MARKS; ++i)
printf("%d ", marks[i]);
return 0;
}
|
Размер массива ( количество элементов и байт )
1
2
3
4
5
6
7
8
| #include <stdio.h>
int main(void)
{
printf( "%zu %zu\n", sizeof( marks ) / sizeof( *marks ), sizeof( marks ) );
return 0;
}
|
Тип size_t. Подсчёт количества элементов
1
2
3
4
5
6
7
8
9
10
| #include <stdio.h>
int main ( void ) {
size_t bytes_marks = sizeof( marks );
size_t len_marks = bytes_marks / sizeof( marks[ 0 ] );
printf( "%zu zu", len_marks, bytes_marks );
return 0;
}
|
Указатель ( pointer )
Предположим, что у нас существует некий массив с именем ar
Для получения значения первого элемента, с индексом 0, мы можем использовать звёздочку
*ar
Для того, чтобы пройти по всем элементам, можно использовать *(ar+i)
У первого элемента переменная i будет равна нулю
1
2
| for( int i = 0; i < sizeof( ar ) / sizeof( *ar ); ++i )
printf( "%d ", *( ar + i ) );
|
copy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| #include <stdio.h>
// Функция для копирования массива source в массив destination
// sizeSource - размер исходного массива, sizeDestination - размер целевого массива
void copyArray(int source[], int destination[], int sizeSource, int sizeDestination) {
// Определяем минимальный размер для копирования
int minSize = (sizeSource < sizeDestination) ? sizeSource : sizeDestination;
for (int i = 0; i < minSize; i++) {
destination[i] = source[i];
}
}
int main() {
// Определим исходный массив
int sourceArray[] = {1, 2, 3, 4, 5};
// Определим массив, в который будем копировать
int destinationArray[3]; // Пусть размер целевого массива будет меньше исходного
// Вычисляем размеры массивов
int sizeSource = sizeof(sourceArray) / sizeof(sourceArray[0]);
int sizeDestination = sizeof(destinationArray) / sizeof(destinationArray[0]);
// Копируем массив
copyArray(sourceArray, destinationArray, sizeSource, sizeDestination);
// Выводим исходный массив
printf("Исходный массив: ");
for (int i = 0; i < sizeSource; i++) {
printf("%d ", sourceArray[i]);
}
// Выводим скопированный массив
printf("\nСкопированный массив: ");
for (int i = 0; i < sizeDestination; i++) {
printf("%d ", destinationArray[i]);
}
return 0;
}
|
insert
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
| #include <stdio.h>
#define TOTAL_MARKS 100
int main() {
int marks[TOTAL_MARKS];
int num_elements = 0; // текущее количество элементов в массиве
int value, position, i;
// Предположим, что массив уже содержит некоторые значения, и num_elements их количество
// Здесь должен быть код для инициализации массива marks и переменной num_elements
// Чтение значения и позиции для вставки
printf("Введите значение для вставки: ");
scanf("%d", &value);
printf("Введите позицию для вставки: ");
scanf("%d", &position);
// Проверка, достаточно ли места в массиве для вставки
if (num_elements >= TOTAL_MARKS) {
printf("В массиве нет места для вставки нового элемента.\n");
return -1;
}
// Проверка корректности введенной позиции
if (position < 0 || position > num_elements) {
printf("Некорректная позиция для вставки.\n");
return -1;
}
// Сдвиг элементов для освобождения места для нового элемента
for (i = num_elements; i > position; i--) {
marks[i] = marks[i - 1];
}
// Вставка элемента
marks[position] = value;
num_elements++; // Увеличиваем количество элементов после вставки
// Вывод массива после вставки
printf("Массив после вставки:\n");
for (i = 0; i < num_elements; i++) {
printf("%d ", marks[i]);
}
printf("\n");
return 0;
}
|
sort
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| #include <stdio.h>
int main(void)
{
char a[] = {-3, 5, 0, -8, 1, 10};
int size = sizeof(a) / sizeof(a[0]);
int pos;
for(int i = 0; i < size-1; ++i) {
pos = i;
for(int j = i+1; j < size; ++j) {
if(a[pos] > a[j])
pos = j;
}
if(pos != i) {
int t = a[i];
a[i] = a[pos];
a[pos] = t;
}
}
for(int i = 0; i < size; ++i)
printf("%d ", a[i]);
return 0;
}
|
mamo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| // автор - Мамонов Сергей
#include <stdio.h>
#define TOTAL 10
int main ( void ) {
int digs[ TOTAL ] = { 0 };
size_t count = 0;
size_t sz_ar = sizeof( digs ) / sizeof( *digs );
while ( count < sz_ar && scanf( "%d", &digs[ count ] ) == 1 )
count++;
int num = -1;
// int indx = -1; // попробую вот это убрать из кода ниже
for ( int i = 0; i < count; ++i ) {
if ( digs[ i ] == 5 ) {
count = count < TOTAL ? count + 1 : count;
for ( int j = count - 1; j > i; j-- )
digs[ j ] = digs[ j - 1 ]; // сдвигаем что можно - вправо
if ( i + 1 < TOTAL )
digs[ i + 1 ] = num--; // тут был возможен выход за пределы i + 1
} // я добавил условие i + 1 < TOTAL
}
for ( int i = 0; i < count; i++ )
printf( "%d ", digs[ i ] );
return 0;
}
// автор - Сергей Мамонов
// https://stepik.org/lesson/1191295/step/6?discussion=9121391&thread=solutions&unit=1204283
|
copy 2
Источник https://proproprogs.ru/c_base/c_strokovye-funkcii-strlen-strcpy-strncpy-strcat-strncat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| #include <stdio.h>
int main(void)
{
char source[100] = "Source string";
char destination[10];
const char* src = source;
char* dst = destination;
int max_len_copy = sizeof(destination);
while(*src != '\0' && max_len_copy-- > 1)
*dst++ = *src++;
*dst = '\0';
puts(destination);
return 0;
}
|
strcat
Источник https://pubs.opengroup.org/onlinepubs/009695399/functions/strcat.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| #include <stdio.h>
#include <string.h>
int main(void)
{
char str_cat[100] = "Sergey";
char str[15] = "Balalkirev";
strcat(str_cat, str);
printf("%s", str_cat);
printf("\n");
size_t max_add = sizeof(str) - strlen(str) - 1;
strncat(str, str_cat, max_add);
str[sizeof(str) - 1] = '\0';
printf("%s", str);
return 0;
}
|
strcmp
Источник https://proproprogs.ru/c_base/c_strokovye-funkcii-sravneniya-poiska-simvolov-i-fragmentov
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| #include <stdio.h>
#include <string.h>
int main(void)
{
char s1[12] = "Hello";
char s2[10] = "Hello";
int res = strcmp(s1, s2);
if(res == 0)
puts("Strings are equal!");
else
puts("Strings are not equal!");
return 0;
}
|
strchr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| #include <stdio.h>
#include <string.h>
int main(void)
{
char str[] = "Abrakadabra";
char *ptr = strchr(str, 'a');
printf("str = %p\nptr = %p\n", str, ptr);
if(ptr != NULL)
printf("*ptr = %c\n", *ptr);
return 0;
}
|