Блоги |
Массив Функция #include <stdio.h> char *month_name (int n); main () { int m, i; char *ch; char str[20]; // 1 --------------------------------------------- scanf("%d", &m); ch = month_name(m); i = 0; while (*ch != '\0') { str[i] = *ch; ch++; i++; } str[i] = '\0'; printf("%s\n", str); // 2 --------------------------------------------- scanf ("%d", &m); ch = month_name(m); while (*ch != '\0') |
|||
Этот пример поможет закрепить понимание, как работать с указателем на массив. В выводе программы обратите внимание, адреса различаются между собой на 4 байта, т.е. переменная типа int занимает 4 байта. Также из примера можно удостовериться, что элементы массива располагаются в памяти последовательно друг за другом.
Когда переменная-указатель объявляется (например, #include <stdio.h> main () { // объявление массива и его инициализация int arr[10] = {101, 102, 103, 104, 105, 106, 107, 108, 109, 110}; int *p, *q; // указатели на тип int int i; printf("Массив: "); |
|||
Ответ к упражнению 3.3. Упрощенная версия. Программа разворачивает строку наподобие a-z в строку abc...xyz. Если первая строка некорректно записана (например, z-a или oiy), то вторая строка содержит только символ конца строки. #include <stdio.h> int expand (char s[], char s1[]); main () { int i; char str[3], str1[50]; i = 0; while (i < 3) { str[i] = getchar(); i++; } str[i] = '\0'; expand(str, str1); printf("%s\n", str1); } int expand (char s[], char s1[]) { int c1, c2, i; i = 0; if (s[1] == '-' && s[0] < s[2]) { c1 = s[0]; c2 = s[2]; while (c1 <= c2) { s1[i] = c1; ++i; ++c1; } } s1[i] = '\0'; } |
|||
Ответ к упражнению 3.2. Замена управляющих последовательностей обычными символами#include <stdio.h> #define MAX 1000 void escape (char s[], char s1[]); main () { char str[MAX], str1[MAX]; int i, c; for (i = 0; (c = getchar()) != EOF; ++i) str[i] = c; escape (str1, str); printf("%s\n", str1); } void escape (char to[], char from[]) { int i, k; i = k = 0; while (from[i] != '\0') { switch (from[i]) { case '\n': to[k++] = '\\'; to[k++] = 'n'; break; case '\t': to[k++] = '\\'; to[k++] = 't'; break; default: to[k++] = from[i]; break; } ++i; } to[k] = '\0'; } Примечание. Используется постфиксная форма инкремента (k++). В этом случае k сначала используется и только потом увеличивается на единицу. Замена пар символов "\n" и "\t" управляющими последовательностями#include <stdio.h> |
|||
В книге описана функции поиска элемента в упорядоченном массиве с помощью алгоритма двоичного поиска (дихотомии). Пример рабочей программы с использованием этой функции: #include <stdio.h> int binsearch (int x, int v[], int n); main () { int n = 10; int i, k = 2; int arr[n]; for (i = 0; i < n; i++) { arr[i] = k; k += 3; printf ("%d ", arr[i]); } printf ("\n"); scanf ("%i", &k); i = binsearch (k, arr, n); printf("%d\n", i); } int binsearch (int x, int v[], int n) { int low, high, mid; low = 0; high = n - 1; while (low <= high) { mid = (low + high) / 2; if (x < v[mid]) high = mid - 1; else if (x > v[mid]) low = mid + 1; else return mid; } return -1; } |
|||


Последние комментарии
3 дня 22 часа назад
4 дня 15 часов назад
4 дня 19 часов назад
4 дня 21 час назад
5 дней 17 часов назад
5 дней 17 часов назад
6 дней 17 часов назад
1 неделя 17 часов назад
1 неделя 2 дня назад
1 неделя 4 дня назад