Алгоритмы (C): различия между версиями

Материал из Информационная безопасностя
Перейти к навигации Перейти к поиску
Строка 4: Строка 4:
 
<syntaxhighlight lang="c" line>
 
<syntaxhighlight lang="c" line>
 
#include <stdio.h>
 
#include <stdio.h>
#include <windows.h>
+
#include <Windows.h>
  
 
int main() {
 
int main() {
     SetConsoleOutputCP(CP_UTF8);
+
    SetConsoleCP(1251);
 +
     SetConsoleOutputCP(1251);
 
     int n, x;
 
     int n, x;
  

Версия 15:16, 20 июня 2022

Код программ

Сумма вводимых целых чисел

 1 #include <stdio.h>
 2 #include <Windows.h>
 3 
 4 int main() {
 5     SetConsoleCP(1251);
 6     SetConsoleOutputCP(1251);
 7     int n, x;
 8 
 9     printf("Введите число слагаемых:");
10     scanf_s("%d", &n);
11 
12     int s = 0;
13     for(int i = 1; i <= n; i++) {
14         printf("Введите слагаемое №%d:", i);
15         scanf_s("%d", &x);
16         s += x;
17     }
18 
19     printf("Сумма равна %d", s);
20 }

Произведение целых чисел

 1 #include <stdio.h>
 2 #include <windows.h>
 3 
 4 int main() {
 5     SetConsoleOutputCP(CP_UTF8);
 6     int n, x;
 7 
 8     printf("Введите число множителей:");
 9     scanf_s("%d", &n);
10 
11     int p = 1;
12     for(int i = 1; i <= n; i++) {
13         printf("Введите множитель №%d:", i);
14         scanf_s("%d", &x);
15         p *= x;
16     }
17 
18     printf("Произведение равно %d", p);
19 }

Сколько нечетных среди n введенных

 1 #include <stdio.h>
 2 #include <windows.h>
 3 
 4 int main() {
 5     SetConsoleOutputCP(CP_UTF8);
 6     int n, x;
 7 
 8     printf("Введите n:");
 9     scanf_s("%d", &n);
10 
11     int count = 0;
12     for(int i = 1; i <= n; i++) {
13         printf("Введите целое число:");
14         scanf_s("%d", &x);
15         if (x % 2 != 0) {
16             count++;
17         }
18     }
19 
20     printf("Количество нечетных равно %d", count);
21 }

Защита от неверного ввода

 1 #include <stdio.h>
 2 #include <windows.h>
 3 
 4 int main() {
 5     SetConsoleOutputCP(CP_UTF8);
 6     float x;
 7 
 8     do {
 9         printf("Введите x>0:");
10         scanf_s("%f", &x);
11         if (x <= 0) {
12             printf("Неверный ввод\n");
13         }
14     } while (x <= 0);
15 }

Вывод 10 первых степеней двойки

 1 #include <stdio.h>
 2 #include <windows.h>
 3 
 4 int main() {
 5     SetConsoleOutputCP(CP_UTF8);
 6     int x = 2;
 7 
 8     for (int i = 1; i <= 10; i++) {
 9         printf("%3d %5d\n", i, x);
10         x *= 2;
11     }
12 }

Вывод всех двухзначных чисел, кратных 5

 1 #include <stdio.h>
 2 #include <windows.h>
 3 
 4 int main() {
 5     SetConsoleOutputCP(CP_UTF8);
 6     int x = 10;
 7 
 8     while (x < 100) {
 9         printf("%3d\n", x);
10         x += 5;
11     }
12 }

Вывод n первых чисел Фибоначчи

 1 #include <stdio.h>
 2 #include <windows.h>
 3 
 4 int main() {
 5     SetConsoleOutputCP(CP_UTF8);
 6     int n, a, b;
 7 
 8     printf("Введите целое число n (n > 1):");
 9     scanf_s("%d", &n);
10 
11     a = 1; b = 1;
12     printf("%d %d ", a, b);
13     for (int i = 1; i <= n - 2; ++i) {
14         int tmp = a;
15         a = b;
16         b += tmp;
17         printf("%d ", b);
18     }
19 }

Найти НОД(A,B), используя алгоритм Евклида:

 1 #include <stdio.h>
 2 #include <windows.h>
 3 
 4 int main() {
 5     SetConsoleOutputCP(CP_UTF8);
 6     int a, b;
 7 
 8     printf("Введите целое число a:");
 9     scanf_s("%d", &a);
10     printf("Введите целое число b:");
11     scanf_s("%d", &b);
12 
13     while (b != 0) {
14         int tmp = a;
15         a = b;
16         b = tmp % b;
17     }
18 
19     printf("НОД(A, B) = %d", a);
20 }

Найти сумму цифр целого числа m

 1 #include <stdio.h>
 2 #include <windows.h>
 3 
 4 int main() {
 5     SetConsoleOutputCP(CP_UTF8);
 6     int m;
 7 
 8     printf("Введите целое число m:");
 9     scanf_s("%d", &m);
10 
11     int sum = 0;
12     int m1 = abs(m);
13 
14     while (m1 > 0) {
15         sum += m1 % 10;
16         m1 /= 10;
17     }
18 
19     printf("Сумма цифр числа %d равна %d", m, sum);
20 }

Найти max из введенных чисел

 1 #include <stdio.h>
 2 #include <windows.h>
 3 
 4 int main() {
 5     SetConsoleOutputCP(CP_UTF8);
 6     int n, x;
 7 
 8     printf("Введите количество чисел:");
 9     scanf_s("%d", &n);
10 
11     printf("Введите число 1:");
12     scanf_s("%d", &x);
13     int max = x;
14 
15     for (int i = 2; i <= n; i++) {
16         printf("Введите число %d:", i);
17         scanf_s("%d", &x);
18         if (x > max) {
19             max = x;
20         }
21     }
22 
23     printf("Максимальное из введенных чисел: %d", max);
24 }

Найти min, удовлетворяющее условию p(x)

 1 #include <stdio.h>
 2 #include <windows.h>
 3 #include <stdbool.h>
 4 #include <float.h>
 5 
 6 bool p(double x) {
 7     return x > 0;
 8 }
 9 
10 int main() {
11     SetConsoleOutputCP(CP_UTF8);
12     int n, x;
13 
14     printf("Введите целое число n (n > 0):");
15     scanf_s("%d", &n);
16 
17     bool exists = false;
18     double min = DBL_MAX;
19     for (int i = 0; i < n; ++i) {
20         printf("Введите %d число:", i+1);
21         scanf_s("%d", &x);
22         if ((x < min) && p(x)) {
23             min = x;
24             exists = true;
25         }
26     }
27 
28     if (exists) {
29         printf("Минимальное из введенных чисел, удовлетворяющих условию: %f", min);
30     } else {
31         printf("Нет чисел, удовлетворяющих условию");
32     }
33 }

Есть ли среди введенных число k?

 1 #include <stdio.h>
 2 #include <windows.h>
 3 #include <stdbool.h>
 4 
 5 int main() {
 6     SetConsoleOutputCP(CP_UTF8);
 7     int x, n, k;
 8 
 9     printf("Введите целое число n (n > 0):");
10     scanf_s("%d", &n);
11 
12     printf("Введите целое число k:");
13     scanf_s("%d", &k);
14 
15     bool exists = false;
16     for (int i = 0; i < n; i++) {
17         printf("Введите %d число:", i+1);
18         scanf_s("%d", &x);
19         if (x == k) {
20             exists = true;
21             break;
22         }
23     }
24 
25     if (exists) {
26         printf("Число %d было введено", k);
27     } else {
28         printf("Число %d не было введено", k);
29     }
30 }

Является ли число N>1 простым?

 1 #include <stdio.h>
 2 #include <windows.h>
 3 #include <stdbool.h>
 4 #include <math.h>
 5 
 6 int main() {
 7     SetConsoleOutputCP(CP_UTF8);
 8     int n;
 9 
10     printf("Введите целое число n (n > 1):");
11     scanf_s("%d", &n);
12 
13     bool isPrime = true;
14     for (int i = 2; i <= round(sqrt(n)); i++) {
15         if (n % i == 0) {
16             isPrime = false;
17             break;
18         }
19     }
20 
21     if (isPrime) {
22         printf("Число %d является простым", n);
23     } else {
24         printf("Число %d является составным", n);
25     }
26 }

Разложение числа на простые множители

 1 #include <stdio.h>
 2 #include <windows.h>
 3 
 4 int main() {
 5     SetConsoleOutputCP(CP_UTF8);
 6     int x;
 7 
 8     printf("Введите целое число x (x > 1):");
 9     scanf_s("%d", &x);
10 
11     int i = 2;
12     printf("%d = 1", x);
13     do {
14         if (x % i == 0) {
15             printf(" * %d", i);
16             x = x / i;
17         } else {
18             i++;
19         }
20     } while (x != 1);
21 }