Главная страница
Навигация по странице:

  • Обработка символьных и строковых данных Символьный тип ( char

  • Основные функции преобразования символов

  • Основные функции для работы со строками

  • * strncat(char *sp, const char *si, int kol);


  • FILE *uin, *uout;

  • Шафеева практика С. Практикум по программированию на языке с методические указания к лабораторным работам Омск 2008 2


    Скачать 1.01 Mb.
    НазваниеПрактикум по программированию на языке с методические указания к лабораторным работам Омск 2008 2
    АнкорШафеева практика С.pdf
    Дата06.04.2018
    Размер1.01 Mb.
    Формат файлаpdf
    Имя файлаШафеева практика С.pdf
    ТипПрактикум
    #17709
    КатегорияИнформатика. Вычислительная техника
    страница4 из 7
    1   2   3   4   5   6   7
    int vvod(int d[])
    { int i, k; printf("Vvedite chislo elementov "); scanf("%d",&k); printf("Vvedite massiv is %d elementov \n", k); for ( i=0; i}
    float sr(int k, int f[], double *g)
    { int i;
    Рис.11 ka = vvod(a)
    Вывод sr(ka,a,&ga) kb = vvod(b)
    Вывод sr(kb,b,&gb
    ) kc = vvod(c)
    Вывод sr(kc,c,&gc)
    Ввод k i=1,k
    Ввод d i а) б) в)
    Начало
    Конец
    Конец п\п
    VVOD (d[]) return k s=0, p=1 i=1,k s = s + f i,
    ; p = p* f i
    return s/k
    Конец п\п sr (k, f[ ],*g)
    *g =
    k
    g

    34 long int s, p ; s = 0; p = 1; for ( i = 0; i{ s += f[i];
    // s = s + f[i]; p *= f[i];
    // p = p * f[i];
    }
    *g = pow((double)p, 1.0/k); return ((float)s)/k;
    }
    void main ()
    { int ka, kb, kc; double ga, gb, gc; int a[5], b[5], c[5]; clrscr(); ka=vvod(a); printf("srA = %5.2f \t ", sr(ka,a,&ga)); printf(" srGA = %5.2f \n", ga); kb=vvod(b); printf("srA = %5.2f \t ",sr(kb,b, &gb)); printf("srGB = %5.2f \n", gb); kc=vvod(c); printf("srA = %5.2f \t ",sr(kc,c, &gc)); printf("srGC = %5.2f \n", gc); getch();
    }
    Задание 1 (программа 9_1)
    Написать и отладить программу для задачи из лабораторной работы 7 с выделением алгоритма обработки или формирования массива. Организо- вать вызов процедуры с параметрами-массивами для двух наборов исход- ных данных. (Для ускорения отладки массив можно задать константой).
    Задание 2 (программа 9_2)
    1. Даны массивы A [1..6], B [1..6], C [1..6], вычислить суммы положи- тельных и отрицательных элементов. Получить А*B, B*С, А*C. Вычисле- ние произведения массивов оформить подпрограммой.
    2. Даны массивы A [1..5], B [1..6]. Получить новые массивы путем сдвига элементов в массивах на два разряда вправо, освободившиеся сле- ва элементы обнулить. Сдвиг элементов в массиве оформить подпрограм- мой, из подпрограммы вернуть выпавшие справа разряды.
    3. Даны два одномерных массива А [1..6] и C [1..6]. Получить A
    2
    , С
    2
    ,
    А*С. Подсчитать число четных и число нечетных чисел в полученных массивах. Перемножение массивов и подсчет выполнить в подпрограмме.

    35 4. Даны матрицы целых чисел S[1..3,0..2], K[1..3,0..2], в которых име- ется по два одинаковых числа. Найти и напечатать их значения и индексы.
    5. Вычислить значение функции Z = x1+e x2
    , где x1, x2 - корни уравне- ния A
    i x
    2
    +B
    i x+C
    i
    = 0, где i = 1,2,..,N. Коэффициенты уравнения заданы в массивах A [1..N], B [1..n], C [1..N]. Для вычисления корней использовать подпрограмму.
    6. Составить подпрограмму для переменных двух квадратных матриц, с помощью которой вычислить вторую, третью и четвертую степени мат- рицы M [1..5,1..5]. Для каждой матрицы вычислить сумму и среднее ариф- метическое значение элементов.
    7. Даны массивы A [1..6], B [1..6], C [1..6]. Преобразовать их, каждому элемен-ту массива, присваивая значение, соседнего с ним справа. Послед- нему элементу присвоить значение первого. Напечатать исходные, резуль- тирующие массивы и отдельно последние два элемента результирующего.
    8. По заданным вещественным массивам A[1..6], B[1..6] и С[1..6] вы- числить (minA
    i
    )/maxA
    i
    + (maxC
    i
    )/min(C
    i
    ) + max(B+C)
    I
    / min(B+C)
    i
    9. Даны массивы A [1..6], B[1..8]. Выбрать из них положительные эле- менты и записать соответственно в массивы A [1..k] и B [1..k], где k<6, n<8; из отрицательных элементов сформировать массивы A2 [1..6-k],B2
    [1..8-n]. Напечатать суммы и произведения элементов для каждого.
    10. Даны массивы A [1..6], B [1..6], C [1..6]. Переставить элементы в них таким образом, чтобы слева подряд были записаны отрицательные, а справа положительные, подсчитать количество положительных и число отрицательных в каждом массиве.
    11. Даны две целые квадратные матрицы четного порядка. Элементы массивов с четными номерами строки и столбца заменить нулем (стереть).
    Напечатать исходные и полученные массивы, количество четных и число нечетных чисел в каждом.
    12. Даны одномерные массивы A[1..6], B[1..8], C[1..10]. Записать их в виде матриц AA [1..3,1..2], BB [1..2,2..4], CC [1..5,1..2], найти наименьшие элементы в каждой и напечатать их номера.
    13. Даны две целые квадратные матрицы шестого порядка. Распеча- тать элементы главных диагоналей каждой из них и вычислить суммы элементов отдельно главной и побочной диагоналей.
    14. По заданным 10 элементам вещественных массивам A, B и С вы- числить










    i i
    B
    min
    A
    min при
    )
    i min(c i
    c)
    max(b i
    minB
    i minA
    при i
    c)
    ))/min(b i
    (max(c
    )
    i
    ))/max(a i
    (b
    (max z
    15. Даны матрицы целых чисел V (-1..2,0..3), W [1..3,0..2]. Сформиро- вать из них одномерные массивы VV и WW, записывая элементы построч- но. Напечатать индексы исходных мартиц для максимальных значений.

    36 16. Дана матрица чисел H [1..5,1..6]. Переставить элементы в строкам матрицы таким образом, чтобы они были расположены в порядке возрас- тания их модулей. Подсчитать сколько в исходных матрицах положитель- ных и отрицательных чисел.
    17. Дана матрица чисел G [1..2,1..6]. Переставить элементы в матрице так, чтобы элементы каждого столбца матрицы были смещены циклически вправо. Перестановку элементов в столбце реализовать подпрограммой, напечатать два «выпавших» элемента.
    18. Даны массивы A [1..6], B [1..6], C [1..6]. Упорядочить элементы в них в порядке убывания их модулей, напечатать наименьшее и наиболь- шее значения.
    19. Даны две матрицы целых чисел V [1..2,1..3], W [1..2,1..3]. Найти общие суммы элементов строк, из функции вернуть две суммы.
    20. Даны две целые квадратные матрицы шестого порядка. Вычислить суммы элементов выше главной диагонали и ниже нее. Определить, можно ли отражением относительно главной диагонали преобразовать одну в другую.
    Лабораторная работа 10
    Обработка символьных и строковых данных
    Символьный тип (char) – это тип данных, используемый для описания отдельных символов (знаков, букв, кодов) [1,6,7] .
    Основные функции преобразования символов , вво- да/вывода символов, строк (stdio.h) приведены в приложении Е.
    Строка – это массив символов. В языке С строка представляет собой массив элементов типа char, завершающийся признаком конца строки „\0‟.
    Основные функции для работы со строками ():
    unsigned strlen(const char *str); (Определяет длину строки str.)
    char *strcpy(char *sp, const char *si); (Копирует строку si в строку sp.)
    char * strncpy(char *sp, const char *si, int kol); (Копирует первые kol сим- волов строки si в строку sp).
    int strcmp (const char *str1, const char *str2); (Сравнивает строки str1иstr2.)
    int strncmp(const char *str1, const char *str2, int kol); (Сравнивает строку
    str1 с kol символами str2.)
    char *strcat (char *const char *si);(Объединяет строки
    (конкатенация).)
    char * strncat(char *sp, const char *si, int kol); (Приписывает kol символов строки si к строке sp )
    char * strstr (const char *str1, const char *str2); (Ищет в строке str1 под- строку str2. )
    char *strchr (const char *str, int c); (Ищет в строке str первое вхождение символа с.)

    37
    char * strrchr (const char *str, int c); (Ищет в str последнее вхождение „с‟)
    int strpbrk (const char *str1, const char *str2); (Ищет в строке str1 первое появление любого из строки str2.)
    В приложении Е сведены функции для работы со строками [7] из библиотек и .
    Пример: Ввести строку st1.Сформировать строку st2 перестанов- кой символов исходной строки в обратном порядке и заменой всех строч- ных латинских букв прописными.
    #include
    #include
    #include
    #include
    void main()
    { int i, j; char st1[255], st2[255]; clrscr(); printf("Введите строки \n");
    gets (st1);
    // ввод строки printf ("исходная строка : %s\n",st1); j = strlen(st1)-1;
    //максимальный индекс элемента в строке for ( i=0; i{ st2[i] = toupper(st1[j]);
    // изменить регистр j -= j;
    // j = j-1
    } st2[i] = '\0';
    // символ конца строки printf("новая строка %s ",st2) ; printf ("\n");
    // перевод строки getch();
    }
    Задание 1 (программа 10_1)
    1. Дана строка из 20 символов. Вывести из нее на печать только строчные буквы латинского алфавита.
    2. Вывести на печать все строчные, а затем все прописные буквы рус- ского и латинского алфавитов.
    3. В заданной строке подсчитать частоту появления букв «a», «b».
    4. Дан текст из 60 литер. Напечатать только строчные русские буквы, входящие в этот текст.
    5. Дана последовательность символов, содержащая символ «я». Опре- делить порядковый номер символа «я» в последовательности.

    38 6. Дана последовательность символов. Определить в ней символ, ко- торый по алфавиту предшествует другим.
    7. Напечатать в алфавитном порядке все различные строчные буквы, входящие в заданный текст из 100 литер.
    8. Определить, является ли заданная последовательность символов в строке симметричной: читается одинаково слева направо и справа налево.
    9. Напечатать текст, образованный символами с порядковыми номе- рами 56, 89, 84 и 69 и текст с изменением регистра.
    10. Даны две строки с1 и с2, содержащие до 5 цифр каждая. Преобра- зовать их к данным целого типа, используя процедуру VAL, вычислить арифметическое выражение с3
    = (с1-с2)/(с1+с2).
    11. Вычислить суммы кодов всех букв, входящих в слова SUM и
    ALFA. Сравнить слова и определить, какое из них больше.
    12. Напечатать заданный текст с удалением из него всех букв b, непо- средственно перед которыми находится буква с.
    13. Имеется символьная переменная d, присвоить логической пере- менной T значение true, если значение d-цифра, и значение false в против- ном случае.
    14. Если в заданный тексте входит каждая из букв слова key, тогда напечатать «yes» , иначе – «no».
    15. Написать программу, которая предварительно запрашивает ваше имя, а затем приветствует вас по имени.
    16. Ввести вещественное число, преобразовать его в строку. Подсчи- тать количество разрядов в целой и дробной частях. Найти представление числа в виде мантиссы (по модулю меньшее единицы) и порядка.
    17. Ввести строку, состоящую из нулей, единиц и десятичной точки.
    Преобразовать ее в десятичное число.
    Задание 2 (программа 10_2)
    1. Дана строка, содержащая не более двадцати латинских букв. Все вхождение «max» в ней заменить на «min» и «макс» на «мин». Подсчи- тать число таких замен.
    2. Дана строка, содержащая сорок латинских букв. Подсчитать все вхождение «abc» в строку и их удалить. Вывести на экран два варианта полученных строк, заполняя образовавшую «дыру» последующими буква- ми с добавлением в конце пробелов, и, оставляя на месте удаленных сим- волов пробелы.
    3. Определить сколько различных символов входит в заданный текст, содержащий не более 100 литер и оканчивающийся точкой.
    4. Определить номера позиций гласных букв в заданном тексте.
    5. Напечатать заданный текст из 60 символов, удалив из него повтор- ные вхождения каждой литеры.

    39 6. Дана строка, состоящая из слов, разделенных пробелами, в конце строки – точ- ка. Определить, сколько в строке слов, содержащих четное число символов.
    7. Дан набор слов на английском языке, разделенных пробелами, в конце точка. Выделить в последовательности нечетные слова прописными буквами.
    8. Дан непустой текст из строчных букв, за которыми следует точка.
    Определить упорядочены ли эти буквы по алфавиты. Напечатать результат проверки и исходный текст прописными буквами.
    9. Дана последовательность от двух до восьми слов, в каждом из кото- рых от одной до десяти строчных букв; между соседними словами – не менее одного пробела, за последним словом – точка. Напечатать слово с максимальной длиной.
    10. Дано несколько слов, в каждом из которых от одной до семи строчных букв, между соседними словами – не менее одного пробела, за последним словом – точка. Напечатать эти слова в алфавитном порядке.
    11. Дана последовательность, содержащая от одного до восьми слов, в каждом из которых от одной до пяти строчных букв; между соседними словами – запятая, за последним словом – точка. Напечатать эту же после- довательность, удалив из нее повторные вхождения слов.
    12. В заданном тексте (слова разделены пробелами) поменять местами первое и последнее слово.
    13. Даны числа K и текст из слов, разделенных пробелами, в конце – точка. Определить количество слов в тексте, состоящих из K букв.
    14. Дана последовательность, содержащая от двух до десяти слов, в каждом из которых от одной до восьми строчных букв; между соседними словами – не менее одного пробела, за последним словом – точка. Напеча- тать те слова, в которых буквы слова упорядочены по алфавиту.
    15. Дана последовательность, содержащая от двух до десяти слов, в каждом из которых от одной до пяти строчных букв; между соседними словами – запятая, за последним словом – точка. Напечатать эту же после- довательность слов, но в обратном порядке.
    16. В заданный текст входят только цифры и буквы. Определить, яв- ляется ли текст десятичной, шестнадцатеричной или двоичной записью целого либо вещественного числа (указать при выводе какого).
    17. В заданном тексте найти и, если есть, напечатать все слова-палиндромы (сло- ва, которые одинаково читаются слева направо и справа налево).
    18. Дан текст из слов, разделенных пробелами, в конце - точка. Найти слово наименьшей длины (содержащее наименьшей количество букв).
    19. Разработать программу шифровки – дешифровки текста путем заме- ны каждой буквы текста другой, с кодом на N больше (меньше) исходной.
    20. Дана непустая последовательность слов, в каждом на которых от одной до шести букв; между соседними словами – запятая, за последним –

    40 точка. Напечатать те слова, у которых одинаковые «соседи». (Определить процедуру, которая вводит очередное слово и присваивает его шестили- терной строке, а запятую или точку присваивает некоторой глобальной пе- ременной).
    Лабораторная работа 11
    Файлы
    Цель работы: создание, чтение и обработка файлов из программы.
    Под файлом обычно подразумевается именованная область памяти на внешнем носителе. Стандартная библиотека содержит три класса для ра- боты с файлами:
    Прежде чем читать информацию из файла или записывать в него, нужно его открыть. В библиотеке для этого имеется специальная функция
    FILE *fopen(char *fname, char *mode);
    где *fname – имя файла, *mode – режим [1, 5, 6, 10].
    Функция возвращает указатель (ссылку) на файл, который должен быть предвари- тельно описан.
    Пример. Объявим указатели на переменные файлового типа
    FILE *uin, *uout;
    // (указатели на переменные файлового типа)
    uin = fopen(“name1”, “r”); // открыть файл “name1” для чтения и далее идентифицировать как uin
    uout = fopen(”name2”, “w”); // открывается для записи и связывается с идентификатором uout.
    Если производиться открытие несуществующего файла, то он созда- ется. Для открытия файла с именем test рекомендуется метод, который по- зволяет определить ошибку при открытии файла [8,10].
    # include
    // работа с файлами и константа NULL
    (FILEOPEN.C)
    # include
    //для функции exit()
    void main()
    {
    FILE *fp;
    // fp – файловая переменная
    if (( fp = fopen("test", "w"))==NULL)
    { puts("Не могу открыть файл\n");
    // печать строки exit(1);
    } puts("Файл открыт\n");
    }

    41
    После окончания работы с файлом необходимо его закрыть функци- ей int fclose(FILE *fp) , которая возвращает нуль, если операция выполне- на успешно, и иное значение в противном случае. Функция является реко- мендуемой, поскольку файлы при нормальном завершении закрываются автоматически.
    Пример. Вычислить суммы элементов в столбцах двумерного числово- го массива А[1..2,1..4], заданного в файле FILE1.dat. Полученные значения поместить в файл FILE2.dat. Для решения задачи разработана СА (рис.12)
    Программа:
    #include
    #include
    void main()
    { int a[2][4];
    // объявление переменных int s[4]; int i, j;
    FILE * f1,* f2; // объявление файловых переменных clrscr(); // очистка экрана f1 = fopen("FILE1.dat", "r"); // открыть файл file1.dat для чтения for(i=0; i<2; ++i) for ( j=0; j<4; ++j )
    Начало
    Объявление ф.п. f1,f2
    Открыть f1
    i=1,2 j=1,4
    Ввод a ij из файла f1
    Закрыть f1,
    Открыть f2 j=1,4
    S
    j
    =0 i=1,2
    S
    j
    =S
    j
    +a ij
    Вывод S
    j в файл f2
    Закрыть f2
    Конец
    Рис.12

    42 fscanf(f1, "%d", &a[i][j]);
    // чтение из файла, связанного с f1
    fclose(f1); // закрыть файл, связанный с f1 f2 = fopen("FILE2.dat","w");
    // открыть файл для записи fprintf(f2, "1 2 3 4 – столбцы \n"); fprintf(f2, "суммы по столбцам \n"); for ( j=0; j<4; ++j )
    { s[j] = 0; for (i=0; i<2; ++i) s[j] = s[j] + a[i][j]; fprintf(f2, "%d", s[j]);
    }
    // на экран ничего не выводится
    // результат действий программы в file2.dat
    }
    Задание 1 (программа 11_1)
    Выполнить задачу из лабораторной работы 9, считывая исходные данные из одного файла и записывая полученные результаты в другой текстовый файл. Файл с исходными данными должен быть подготовлен предварительно.
    1   2   3   4   5   6   7


    написать администратору сайта