помогите пожалуйста. не могу скачать ms. visual studio |
Символьные массивы в языке С. Работа со строками
Задание 2
- В программе для строк добавьте символ окончания строки. Проанализируйте результат выполнения программы.
- Скопированную строку выведите на экран дисплея с разрядкой (с пробелами) между символами.
- Произведите копирование одной строки в другую при их задании через клавиатуру.
- Введите с клавиатуры две строки, различающиеся одним символом. Напишите программу по определению индексов двух различных символов для введенных строк. Длину строк возьмите не менее 7 символов.
- Произведите копирование одной строки в другую без применения функции strcpy().
- С клавиатуры введите свою фамилию (буквами латинского алфавита), выведите ее на консоль в прямом и обратном порядке, например, Ivanov, vonavI.
Пример 3. Напишите программу преобразования десятичной системы счисления в двоичную. Исходное десятичное число считайте целым без знака.
Программный код решения примера:
#include <stdio.h> #include <conio.h> int main (void) { const char D[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; int newNumber[80]; long int inputNumber; int i = 0, base = 2; printf("\n\t Enter a positive integer: "); scanf_s("%ld", &inputNumber); // Прямой процесс преобразования десятичного числа в двоичное do { newNumber[i] = inputNumber % base; ++i; inputNumber /= base; } while ( inputNumber != 0 ); //Запись преобразованного числа в обратном порядке printf("\n\t Result after conversion: "); for (--i; i >= 0; --i) printf("%d", newNumber[i]); printf("\n\n Press any key: "); _getch(); return 0; }
В программе использован квалификатор (спецификатор) типа const, который указывает компилятору, что символьный массив не может изменяться в программе.
Результат выполнения программы показан на рис. 6.3.
Задание 3
- Проверьте работу программы с помощью инженерного калькулятора (см. calc через Пуск–Выполнить).
- Подсчитайте число итераций цикла для преобразования числа 13 в двоичное число.
- Вместо цикла do–while примените цикл while.
- Напишите программу преобразования двоичного числа в десятичное число. Проверьте работу программы с помощью инженерного калькулятора.
- Проверьте программу для преобразования десятичных чисел в числа с основанием 3 и 8.
Пример 4. С помощью функции strcat() присоедините одну строку к другой с пробелом и без.
Пусть имеются строки str1 и str2. Функция strcat() присоединяет к строке str1 копию строки str2 и завершает строку str1 нулевым символом. Процесс присоединения называется конкатенацией.
Программный код решения примера:
#include <stdio.h> #include <conio.h> #include <string.h> #define N 79 int main (void) { char str1[N+1], str2[N+1]; printf("\n\t Print 1 string of characters: "); gets_s(str1, N); // для MS Visual Studio printf("\t Print 2 string of characters: "); gets_s(str2, N); // для MS Visual Studio strcat_s(str1, N, str2); // для MS Visual Studio printf("\n\t Result after concatenation: %s\n", str1); printf("\n Press any key: "); _getch(); return 0; }
Возможный результат выполнения программы показан на рис. 6.4.
Задание 4
- Дополните программу присоединением трех строк, например, имени, отчества и фамилии пользователя с учетом необходимых пробелов.
- Примените посимвольный ввод строк и произведите их конкатенацию с выводом на дисплей результата конкатенации.
- Произведите конкатенацию имени и фамилии пользователя с помощью операторов цикла, т.е. без помощи функции strcat(). Предусмотрите пробел между именем и фамилией.
- Присоедините к своему имени свою фамилию, записанную в обратном порядке.
Пример 5. Для заданного двухмерного символьного массива сравните длину каждой строки друг с другом и вывести результат сравнения: 1-я строка меньше или больше 2-й строки, строки равны между собой.
Для сравнения двух строк используем библиотечную функцию strcmp(), которая сравнивает в лексикографическом порядке две строки и возвращает целое значение, зависящее от результата сравнения [6.2]. Если первая строка меньше второй, то возвращается значение меньше нуля, если строки равны (по длине), то возвращается нуль, если первая строка больше второй, то возвращается число больше нуля.
Программный код решения примера:
#include <stdio.h> #include <conio.h> #include <string.h> // Для функции strcmp() #define n 2 #define m 80 int main (void) { int i, x; char str[n][m] = { "hello,", "Hello," }; printf("\n\t Array of strings:\n"); for (i = 0; i < n; ++i) printf("\t %d) %s\n\t (Length: %d)\n", i+1, str[i], strlen(str[i])); printf("\n\t Comparision of lines: "); for (i = 0; i < (n - 1); ++i) {x = strcmp(str[i], str[i+1]); printf("\n\t Return the function of \"strcmp()\": %d", x); if (x == 0) printf("\n Line %d is equal to %d?nd line.", i+1, i+2); else if (x > 0) printf("\n Line %d is not equal to %d?nd line.", i+1, i+2); else if (x < 0) printf("\n Line %d is not equal to %d-nd line.", i+1, i+2); } printf("\n\n Press any key: "); _getch(); return 0; }
Результат выполнения программы показан на рис. 6.5.