Задание 1 - Обработка числовых данных (лабораторная по Си)
Лабораторная работа для школ и вузов по решению задач по обработке числовых данных с помощью ветвления и циков на языке C (Си). Перечень задач лабораторной работы (клик по ссылке направляет на решение задачи, если таковое имеется):
- Для данных чисел a, b и c определить, сколько корней имеет уравнение ax^2 + bx + c = 0, и распечатать их. Если уравнение имеет комплексные корни, то распечатать их в виде v +- iw.
- Подсчитать количество натуральных чисел n (111 <= n <= 999), в записи которых есть две одинаковые цифры.
- Подсчитать количество натуральных чисел n (102 <= n <= 987), в которых все три цифры различны.
- Подсчитать количество натуральных чисел n (11 <= n <= 999), являющихся палиндромами, и распечатать их.
- Подсчитать количество цифр в десятичной записи целого неотрицательного числа n.
- Определить, верно ли, что куб суммы цифр натурального числа n равен n^2.
- Определить, является ли натуральное число n степенью числа 3.
- Для данного вещественного числа a среди чисел 1, 1 + (1/2), 1 + (1/2) + (1/3), ... найти первое, большее a.
- Для данного вещественного положительного числа a найти наименьшее целое положительное n такое, что 1 + 1/2 + 1/3 + ... + 1/n > a.
- Даны натуральное число n и вещественное число x. Среди чисел exp(cos(x^2k))sin(x^3k) (k = 1, 2, ..., n) найти ближайшее к какому-нибудь целому.
- Дано натуральное число n. Найти значение числа, полученного следующим образом: из записи числа n выбросить цифры 0 и 5, оставив прежним порядок остальных цифр.
- Дано натуральное число n. Получить все такие натуральные q, что n делится на q^2 и не делится на q^3.
- Дано натуральное число n. Получить все его натуральные делители.
- Дано целое число m > 1. Получить наибольшее целое k, при котором 4^k < m.
- Дано натуральное число n. Получить наименьшее число вида 2^r, превосходящее n.
- Распечатать первые n простых чисел (p – простое число, если p >= 2 и делится только на 1 и на себя).
- Даны вещественные числа x и y (x > 0, y > 1). Получить целое число k (положительное, отрицательное или равное нулю), удовлетворяющее условию y^k-1 <= x < y^k.
- Распечатать первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk+1 = fk-1+ fk; k = 1, 2, 3, ...).
- Распечатать числа Фибоначчи (см. задачу 3.34), являющиеся простыми числами со значениями меньше n.
- Вычислить с точностью eps > 0 значение числа e - предел последовательности {xi} при i ? ? xi = (1 + 1 / i)^i, i = 1, 2, ... . Считать, что требуемая точность достигнута, если |xi - xi+1| < eps.
- Вычислить квадратные корни вещественных чисел x = 2.0, 3.0, ... , 100.0. Распечатать значения x, , количество итераций, необходимых для вычисления корня с точностью eps > 0. Для a > 0 величина вычисляется следующим образом: a0 = 1; ai+1 = 0.5 ? (ai + a / ai ) i = 0, 1, 2, ... . Считать, что требуемая точность достигнута, если |ai - ai+1| < eps.
- Натуральное число называется совершенным, если оно равно сумме всех своих делителей, за исключением самого себя. Дано натуральное число n. Получить все совершенные числа, меньшие n.
- Определить, является ли число простых чисел, меньших 10000, простым числом.
Работоспособность всех программ проверена в CodeBlocks 16.01 (MinGW, Windows 10). Свои решения нерешённых программ и пожелания по улучшению существующих можете давать в комментариях внизу страницы.
Скачать файл лабораторной и все исходные коды программ в архиве:
№2: Подсчитать количество натуральных чисел n (111 <= n <= 999), в записи которых есть две одинаковые цифры.
#include <stdio.h>
int main()
{
int i, count = 0;
for (i = 111; i <= 999; i++)
if (i / 100 == i % 10 || i / 100 == i % 100 / 10 || i % 100 / 10 == i % 10)
count++;
printf("%d", count);
return 0;
}
№3: Подсчитать количество натуральных чисел n (102 <= n <= 987), в которых все три цифры различны.
#include <stdio.h>
int main()
{
int i, count = 0;
for (i = 102; i <= 987; i++)
if (i / 100 != i % 10 && i / 100 != i % 100 / 10 && i % 100 / 10 != i % 10)
count++;
printf("%d", count);
return 0;
}
№4: Подсчитать количество натуральных чисел n (11 <= n <= 999), являющихся палиндромами, и распечатать их.
#include <stdio.h>
int main()
{
int i;
for (i = 11; i <= 999; i++)
if (i < 100 && i / 10 == i % 10)
printf("%d\n", i);
else if (i > 100 && i / 100 == i % 10)
printf("%d\n", i);
return 0;
}
№5: Подсчитать количество цифр в десятичной записи целого неотрицательного числа n.
#include <stdio.h>
int main()
{
int n, count = 0;
printf("Enter n: ");
scanf("%d", &n);
while (n > 0){
count++;
n /= 10;
}
printf("Number of digits: %d", count);
return 0;
}
№6: Определить, верно ли, что куб суммы цифр натурального числа n равен n^2.
#include <stdio.h>
int main()
{
int n, square, cube, sum = 0;
printf("Enter n: ");
scanf("%d", &n);
square = n * n;
while (n > 0){
sum = sum + (n % 10);
n /= 10;
}
cube = sum * sum * sum;
if (cube == square)
printf("True");
else
printf("False");
return 0;
}
№7: Определить, является ли натуральное число n степенью числа 3.
#include <stdio.h>
int main()
{
int n;
printf("Enter n: ");
scanf("%d", &n);
while (n % 3 == 0)
n /= 3;
if (n == 1)
printf("The number is a power of 3.");
else
printf("The number is not a power of 3.");
return 0;
}
№8: Для данного вещественного числа a среди чисел 1, 1 + (1/2), 1 + (1/2) + (1/3), ... найти первое, большее a.
#include <stdio.h>
int main()
{
int n = 1;
float a, num = 0;
printf("Enter a: ");
scanf("%f", &a);
while (num < a) {
num += (1.0 / n++);
}
printf("Answer: %f", num);
return 0;
}
№9: Для данного вещественного положительного числа a найти наименьшее целое положительное n такое, что 1 + 1/2 + 1/3 + ... + 1/n > a.
#include <stdio.h>
int main()
{
int n = 1;
float a, count = 1.0;
scanf("%f", &a);
while (count < a) {
n++;
count = count + (1.0 / n);
}
printf("%d", n);
return 0;
}
№11: Дано натуральное число n. Найти значение числа, полученного следующим образом: из записи числа n выбросить цифры 0 и 5, оставив прежним порядок остальных цифр.
#include <stdio.h>
int main()
{
int n = 1;
float a, count = 1.0;
scanf("%f", &a);
while (count < a) {
n++;
count = count + (1.0 / n);
}
printf("%d", n);
return 0;
}
№13: Дано натуральное число n. Получить все его натуральные делители.
#include <stdio.h>
int main()
{
int n, i;
scanf("%d", &n);
for (i = 1; i <= n/2; i++)
if (n % i==0)
printf("%d ", i);
printf("%d", n);
return 0;
}
№14: Дано целое число m > 1. Получить наибольшее целое k, при котором 4^k < m.
#include <stdio.h>
int main()
{
int m, k = 0, num = 1;
printf("Enter m > 1: ");
scanf("%d", &m);
if (m <= 1){
printf("Number must be > 1");
return 0;
}
while (num * 4 < m){
num *= 4;
k++;
}
printf("k = %d (%d)", k, num);
return 0;
}
№15: Дано натуральное число n. Получить наименьшее число вида 2^r, превосходящее n.
#include <stdio.h>
int main()
{
int n, r = 0, num = 1;
printf("Enter n > 1: ");
scanf("%d", &n);
if (n < 1){
printf("Number must be > 1");
return 0;
}
while (num <= n){
num *= 2;
r++;
}
printf("Answer: 2^%d (%d)", r, num);
return 0;
}
№16: Распечатать первые n простых чисел (p – простое число, если p >= 2 и делится только на 1 и на себя).
#include <stdio.h>
int main()
{
int n, i = 0, i1, k = 1, k1 = 0;
scanf("%d", &n);
while (n > i){
k++;
for (i1 = 1; i1 <= k; i1++)
if (k % i1 == 0)
k1++;
if (k1 == 2){
printf("%d ", k);
i++;
}
k1 = 0;
}
return 0;
}
№18: Распечатать первые n чисел Фибоначчи (f0 = 1; f1 = 1; fk+1 = fk-1+ fk; k = 1, 2, 3, ...).
#include <stdio.h>
int main()
{
int n, i, f0 = 1, f1 = 1;
printf("Enter n: ");
scanf("%d", &n);
printf("Pervye %d chisel Fibonachi: ", n);
for (i=1; i<=n; i++){
if (f0 >= f1) {
printf("%d ", f1);
f1 = f0 + f1;
} else {
printf("%d ", f0);
f0 = f1 + f0;
}
}
return 0;
}
№19: Распечатать числа Фибоначчи (см. задачу 3.34), являющиеся простыми числами со значениями меньше n.
#include <stdio.h>
int main()
{
int n, i, f0 = 1, f1 = 1, k, k1;
printf("Enter n: ");
scanf("%d", &n);
while (f0 <= n || f1 <= n){
if (f0 >= f1) {
k = f1;
f1 = f0 + f1;
} else {
k = f0;
f0 = f1 + f0;
}
for (i = 1; i <= k; i++)
if (k % i == 0)
k1++;
if (k1 <= 2)
printf("%d ", k);
k1 = 0;
}
return 0;
}