Читайте также: |
|
Введення виведення рядків можна здійснити за допомогою функцій форматного введення/ виведення scanf, printf, вказавши в форматному рядку формат %s:
scanf(“%s”, рядок); /* рядок вказується без & попереду!!! */
printf (“%s”, рядок);
Наприклад:
char s1[10]; printf("\nInput string s1: ");
scanf("%s", s1);
printf("\nYour string s1: %s", s1);
Але при введенні scanf рядок буде зчитаний до першого пробілу, наприклад, якщо необхідно ввести для рядка s1 таку послідовність “Миру мир”, то після роботи scanf в рядок потрапить лише “Миру”.
Для уникнення цього «побічного ефекту» рядок можна вводити та виводити, використавши спеціальні функції рядкового введення/ виведення gets() та puts() з бібліотеки <stdoi.h>. Загальний опис цих функцій такий:
§ gets(рядок) зчитує рядок, що вводиться, до натиснення клавиші <Enter>. В кінець рядка автоматично додається символ ‘\0’;
§ puts(рядок) виводить на екран заданий рядок і переводить курсор на новий екранний рядок.
Наприкдад:
char s2[10];
puts("\nInput string s2: ");
gets(s2);
puts("\nYour string s2: ");
puts(s2);
Спеціальні функції обробки рядків бібліотеки <string.h>
Назва функції | Опис призначення | |
strlen(s) | визначає довжину рядка, не враховуючи ознаку кінця. char s[ ] = “abcdef”; int len; len = strlen(s); // len набуде значення 6. | |
strcat(s1, s2) | «доклеює» до рядка s1 рядок s2. char s[ ]=”ab”, p[ ]=”cd”; strcat(s, p); // s набуде значення “abcd” | |
strncat(s1, s2, n) | «доклеює» до рядка s1 перші n символів з рядка s2. | |
strcpy(s1, s2) | копіює з рядка s2 символи до рядка s1. Ця функція за смислом аналогічна присвоєнню s1=s2, але в мові Сі присвоювати рядки один одному неможна! | |
strncpy(s1, s2, n) | копіює з рядка s2 перші n символів до рядка s1. | |
strchr(s, c) | перевіряє, чи є в рядку заданий символ с, якщо символ є, то повертає частину рядка s, що починається з першого входження символу с. | |
strrchr(s, c) | перевіряє, чи є в рядку заданий символ с, якщо символ є, то повертає частину рядка s, що починається з останнього входження символу с. | |
char s[ ]=”xxaabbaaxx”; char c=’a’; | strchr (s,c); à ”aabbaaxx” strrchr (s, c) à “axx” | |
strspn(s1, s2) | визначає номер першого символу, який входить в рядок s1, але не входить до рядка s2. | |
strstr(s1, s2) | визначає, чи входить рядок s2 в рядок s1. Якщо входить, то повертає частину рядка s1, що починається з першого входження s2. | |
strtok(s1, s2) | визначає частину рядка s1, яка розташована перед першим однаковим символом в рядках s1 та s2. | |
char s [ ]=”xxaabbcc”; char p[ ]=”ab”; | strspn(s,p); à 0 strstr(s, p) à “abbcc” strtok(s,p) à”xx” | |
strnset(s, c, n) | вставляє n разів на початок рядка s символ с. | |
strupr(s) | переводить малі букви в рядку в великі (“xx”à”XX”). | |
strlwr(s) | переводить великі букви в рядку в малі (“XX”à”xx”). | |
strrev(s) | переписує вміст рядка в зворотному порядку (“abc”à”cba”). | |
strcmp(s1, s2) | виконує порівняння рядків. Якщо рядок s1 співпадає з s2, то функція повертає 0, якщо рядок s1 менший (в алфавітному порядку) ніж s2, то повертається від’ємне значення, якщо більший – додатне. | |
char s[ ] = “abc”; char p[ ] = “abc”; char t[ ] = “def”; | strcmp(s, p); à 0 strcmp(s, t); à від’ємне значення strcmp(t, s); à додатне значення | |
Контрольні питання
4. Хід роботи
4.1 Постановка завдання
¨ Скласти програми Сі згідно з варіантом завдання. Розглянути два варіанта алгоритму розв’язку: з циклом з перед-умовою та циклом з після-умовою. У звіті навести дві схеми алгоритму та проаналізувати переваги та недоліки кожного з них для розв’язку цього завдання;
¨ встановити точку останову(Ctrl+F8) на заголовку оператора циклу;
¨ відкрити вікно для перегляду значення вхідної змінної, змінної-параметра циклу та значення результуючої змінної(Ctrl+F7, задати ім’я необхідної змінної);
¨ повторно запустити програму на виконання та виконати трасування тіла циклу, контролюючи значення параметру циклу та виконання(невиконання) умови циклу.
Рекомендації до виконання роботи
В програмування використовуються декілька систем числення: десяткова, двійкова, вісімкова, шістнадцяткова. Кожна з цих систем є позиційною(порядковою), тобто значущість цифри в записі числа залежить від її розташування в цьому числі. Наприклад, в числі 12 одиниця більш значуща(має більшу “питому вагу”), тому що розташована в розряді десятків, а двійка в розряді одиниць.
Ціле число в позиційній системі числення визначається як сума ,
де N - подане ціле число, k - кількість цифр в числі (кількість розрядів), m - кількісний еквівалент цифри, W – основа системи числення, i - номер розряду цифри.
Розряди нумеруються з кінця числа, наприклад, для числа 25735:
Розряди | |||||
Число |
Як суму в десятковій системі числення це число можна записати так:
Отже, для того, щоб в програмі розбити число на цифри, необхідно послідовно ділити його на W – основу системи числення, брати остачу від ділення:
та залишати цілу частину від частки:
Цей процес повторюється доки ціла частина від частки більша за 0.
Приклад виконання роботи
4. 1. Постановка завдання скласти програми Сі, після виконання якої на екрані будуть надруковані цифри цілого числа N та номери розрядів, у яких вони розташовані.
4.2. Математична інформаційна модель постановки задачі(МПЗ).
Вхідні дані | Дії | Вихідні дані |
N цілого типу. | 1. k=0; N=|N|; 2. Доки N ¹ 0, виконувати 3-5, інакше – пункт 6. 3. .Вивести m, k. 4. k=k+1; . Перехід до пункту 2. Останов. | m, k – цілі |
4.4. Схема алгоритму розв’язку задачі. (рис.1.)в звіті необхідно побудувати також алгоритм для циклу з після-умовою та провести його тестування)
Тестовий приклад (розглянуто цикл з перед-умовою, в звіті додати цикл з пост-умовою).
Наприклад, для введення подано число 379.
N = 379; k = 0;.
На початку циклу відбувається перевірка: N<>0? (379<>0?) Результат - TRUE.
1ша ітерація.
m = 379 mod 10 = 9, k = 1, N = 379 div 10 = 37 2га ітерація. 37<>0®TRUE m = 37 mod 10 = 7, k=2, N=3. 3тя ітерація. 3<>0®TRUE m = 3 mod 10 = 3, k=3, N=3 div 10 = 0.
4та ітерація. 0<>0®FALSE. Цикл закінчено.
Управління передається до наступного оператора після циклу, що завершує програму.
4.5. Алгоритмічна модель
Вхідні дані | Розрахунок вихідних даних | |||||
вручну | Сі | |||||
N=379 | m=3, k=0 m=7, k=1 m=3, k=2 | Перед-умова | Перед-умова | Після-умова | Після-умова | |
3 0 7 1 9 2 | 3 0 7 1 9 2 | ? | ? | |||
N=0 | m=0, k=0 | 0 0 | ? | ? | ||
N=-12 | m=2, k=0 m=1, k=1 | 2 0 1 1 | 2 0 1 1 | ? | ? | |
#include <stdio.h> |
#include <conio.h> |
#include <stdlib.h> /* для abs */ |
const int w=10; |
main() |
{ |
long n; short m, k=0; |
clrscr(); |
printf(“\nВведіть n: ”); |
scanf(“%ld”, &n); |
n=abs(n); |
while (n!= 0) |
{ |
m= n% w; |
printf(“\n Цифра %hd розташована в розряді № %hd”, m, k); |
k++; |
n=n/10; |
} |
getch(); |
} |
4.6. Агоритмічнопрограмна модель – програма Сі
4.6. Результати
Вхідні дані | Розрахунок вихідних даних | |||||
вручну | Сі | |||||
N=379 | m=3, k=0 m=7, k=1 m=3, k=2 | Перед-умова | Перед-умова | Після-умова | Після-умова | |
4 0 8 1 9 2 | 3 0 7 1 9 2 | ? | ? | |||
N=0 | m=0, k=0 | 0 0 | ? | ? | ||
N=-12 | m=2, k=0 m=1, k=1 | 3 0 1 1 | 3 0 1 1 | ? | ? | |
4.7. Аналіз результату. По всіх тестових прикладах результати, що були отримані вручну та програмно повністю співпадають, це доводить правильність роботи програми.
4.8. Опис програмного інтерфейсу з користувачем.
Після запуску програми на екран виводиться повідомлення-запрошення про введення значення х. Необхідно ввести дійсне значення x. Обмежень на значення х не встановлюється.
Після розрахунку на екран виводиться значення у.
Для завершення роботи програми необхідно натиснути будь-яку клавішу на клавіатурі.
5. Висновок.
Варіанти завдань
1. Визначення суми парних цифр цілого числа.
2. Визначення добутку непарних цифр цілого числа.
3. Визначення суми перших 5 цифр з дробової частини дійсного числа.
4. Визначення чи дорівнює сума перших двох цифр цілого числа сумі останніх двох цифр.
5. Визначення чи дорівнює сума цифр з цілої частини дійсного числа сумі такої ж кількості цифр з дробової частини.
6. Визначення скільки нулів в записі цілого числа.
7. Визначення, чи дорівнює сума цифр цілої частини дійсного числа сумі такої ж кількості цифр в дробовій частині.
8. Вилучення з запису цілого числа нулів.
9. Перевірити, чи виконується для заданого цілого ознака ділення на 3.
10. Виведення на екран перших (з ліва) К цифр цілого числа (К задає користувач).
11. Виведення на екран Р цифр з дробової частини дійсного числа(Р задає користувач).
12. Перевірити, чи дорівнює квадрат числа кубу суми його цифр.
13. Визначення, чи є серед С цифр дробової частини дійсного числа цифра 0.
14. Визначення кількості цифр Т в записі цілого числа (Т задає користувач).
15. Замінити місцями цілу та дробову частини дійсного числа.
16. Визначення чи симетричні цифри дійсного числа відносно крапки.
17. Визначення кількості цифр, в записі цілого числа, що більші за 3 та менші 7.
18. Визначення різниці між сумою цифр цілої та такої ж кількості цифр дробової частини дійсного числа.
19. Перевірити, чи виконується для заданого числа ознака ділення на 9.
20. Визначення, чи дорівнює ціле число квадрату суми його цифр.
21. Визначення добутку цифр цілого числа.
22. Визначення, чи дорівнює квадрат суми цифр числа сумі квадратів його цифр.
23. Перевірити, чи є число степенем числа 3.
24. Замінити першу та останню цифри цілого числа на цифру Р(Р задає користувач).
25. Замінити місцями першу та останню цифри цілого числа.
26. *Перевірити, чи є число паліндромом, тобто таким, що зліва направо та з права наліво читається однаково.
27. *Визначити найбільший спільний дільник чисел А та В.
28. *Вивести на екран всі “досконалі” числа в діапазоні від 0 до 100000. Число “досконале”, якщо воно дорівнює добутку своїх цифр.
29. Перевірити, чи виконується для заданого цілого ознака ділення на 2.
30. Визначення суми перших 3 цифр з дробової частини дійсного числа.
4.1.2.Постановка завдання
¨ Скласти програми Сі згідно з варіантом завдання;
¨ встановити точку останову на заголовку оператора циклу;
¨ відкрити вікно для перегляду значення вхідної змінної, змінної-параметра циклу та значення результуючої змінної;
¨ повторно запустити програму на виконання та виконати трасування тіла циклу, контролюючи значення параметру циклу та виконання(невиконання) умови циклу.
Рекомендації до виконання роботи
Наприклад. Обчислити суму N членів ряду:
Елементи цього ряду мають рекурентне співвідношення, тому що кожний наступний член ряду можна визначити через попередній.
Кожний член ряду можна подати як дріб виду з початковими значеннями a =1, b =1.
Для отримання наступного значення a необхідно до попереднього додати х, а для отримання наступного значення b до попереднього необхідно додати 1. Отже,
Виходячи з цього, загальним членом ряду буде , де , а S буде обчислюватися за формулою: .
Виходячи з математичної постановки задачі члени ряду обчислюються в циклі, кількість ітерацій циклу заздалегідь відома, крок зміни параметру циклу 1. Тому при розробці схеми алгоритму та програми доцільним буде використати цикл з параметром (рис. 2, а).
Якщо важко визначити загальний член ряду, можна скористатися проміжними змінними для визначення члену ряду і подати обчислення S за такою схемою:
1. для .
Враховуючи те, що значення b збігається зі значенням і, то вираз спрощається:
для .
Схема алгоритму для такого способу обчислення наведена на рис.2, б.
Під час виконання ї роботи можна обрати будь-який спосіб обчислення суми ряду.
Звіт з лабораторної оформляється згідно до загальних вимог до оформлення звітів.
Варіанти завдання (ідентифікатор y на особистий - prizv)
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.
Дата добавления: 2015-10-26; просмотров: 202 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Обробка масивів даних. Одновимірні масиви | | | Предательство |