[Язык C] Упражнения по программированию: циклы и массивы (глава 6)


Настал долгожданный момент сделать «домашку» по шестой главе книжки Стивена Прата “C Primer Plus”. Нас ожидает аж 18 увлекательных заданий.

1. Напишите программу, которая создает массив из 26 элементов и помещает в
него 26 строчных букв английского алфавита. Также предусмотрите вывод содержимого этого массива.

Первая же программа дала мне по голове дубиной 🙂 Довольно долго не выходило, все время то с b начиналось, то не работало.. Итог, мой первый блин:

 #include <stdio.h>
 int main(void)
 {
 char alphabet[25];
 char letter = 'a'-1;
 int n;

 for (n=0; n<=25; n++)
        {
        letter+=1;
        alphabet[n] = letter;
        printf("Index [%d]=%c\n", n, alphabet[n]);
        }

 getchar();
 return 0;
 }

Далее, подрихтовал, в процессе вспомнил очередность работы инкрементов:

#include <stdio.h>
 int main(void)
 {
 char alphabet[26];
 char letter;
 int n;

 for (n=0, letter = 'a'; n<26; n++)
        {
        alphabet[n] = letter++; // increment works afterwars!
        printf("Index [%d]=%c\n", n, alphabet[n]);
        }

 getchar();
 return 0;
 }

В интернетах есть другие варианты решения, решил в них разобраться и здесь привести.. Итак, второй подход, английский (дух старой школы):

 #include <stdio.h>
 #define SIZE 26
 int main(void)
 {
 char alphabet[SIZE];
 char letter;
 int n;

 for (letter='a'; (letter - 'a') < SIZE; letter++)
        alphabet[letter - 'a'] = letter;

 for (n=0; n < 26; n++)
        printf("Index [%d]=%c\n", n, alphabet[n]);

 getchar();
 return 0;
 }

Третий подход, китайский, минималистичный:

 #include <stdio.h>
 #define SIZE 26
 int main(void)
 {
 char alphabet[SIZE];
 int n;

 for (n=0; n < 26; n++)
        alphabet[n] = 'a' + n;

 for (n=0; n < 26; n++)
        printf("Index [%d]=%c\n",n, alphabet[n] );

 getchar();
 return 0;
 }

2. Воспользуйтесь вложенными циклами, чтобы написать программу, которая выводит следующую последовательность символов:

$
$$
$$$
$$$$
$$$$$

Код:

 #include <stdio.h>
 int main(void)
 {

 int row, col, n;

 for (row = 0; row<5; row++)
        {
        for (col = 0; col <= row; col++)
                printf("$");
        printf("\n");
        }

 getchar();
 return 0;
 }

3. Воспользуйтесь вложенными циклами, чтобы написать программу, которая выводит следующую последовательность символов:

F
FE
FED
FEDC
FEDCB
FEDCBA

Примечание: если в вашей системе нс используется ASCII или какая-то другая
кодировка, в которой буквы представлены в числовом порядке, то для инициализации символьного массива буквами алфавита вы можете применять следующее объявление:
char lets[27] = «ABCDEFGHIJKLMNOPQRSTUVWXYZ»;
Затем для выбора конкретных букв можно использовать индексы массива, например, lets [О] для ‘А’ и т.д.

 #include <stdio.h>
 int main(void)
 {

 int row, col;
 char letter;

 for (row = 0; row < 6; row++)
        {
        letter = 'F';
        for (col = 0; col <= row; col++)
                {
                printf("%c", letter--);
                }
        printf("\n");
        }

 getchar();
 return 0;
 }

4. Воспользуйтесь вложенными циклами, чтобы написать программу, которая выводит следующую последовательность символов:

А
BC
DEF
GНIJ
KLMNO
PQRSTU

Если в вашей системе не используется кодировка, в которой буквы представлены в числовом порядке, см. примечание в упражнении 3.

#include <stdio.h>
 int main(void)
 {

 int row, col;
 char letter = 'A';

 for (row=0; row<6; row++)
        {
         for(col=0; col<=row; col++)
                printf("%c", letter++);
         printf("\n");
        }

 getchar();
 return 0;
 }

5. Напишите программу, которая предлагает пользователю ввести прописную букву. Воспользуйтесь вложенными циклами, чтобы написать программу, которая выводит фигуру в виде пирамиды, подобную приведенной ниже (вместо пробелов я поставил подчеркивания, чтобы вам было нагляднее — прим. Тангара):

____А
___АВА
__АВСВА
_ABCDCBA
ABCDEDCBA

Эта фигура должна расширяться вплоть до введенного символа. Например, представленная фигура с^тала результатом ввода символа Е. Подсказка: для обработки строк воспользуйтесь внешним циклом. Для формирования строки применяйте три внутренних цикла: один для манипуляции пробелами, второй для вывода букв в порядке возрастания и третий для вывода букв в порядке убывания. Если в вашей системе не используется ASCII или подобная ей кодировка, в которой буквы представлены в числовом порядке, см. примечание в упражнении 3

А вот это задание весьма интересное, но оно гораздо сложнее предыдущих.

Для начала надо разбить эту задачу на «модули». Первый модуль — просто напросто проставить пробелы лесенкой в другую сторону, не такую как в предыдущих примерах; вот вам задание лично от меня:

Воспользуйтесь вложенными циклами, чтобы написать программу, которая выводит следующую последовательность символов:

XXX
XX
X

Поначалу я сочинил вот такую, довольно жопную программу:

#include <stdio.h>
 int main(void)
 {
 int row, col;
 int y=3;

 for (row=0; row<3; row++)
        {
        for (col=0; col<y; col++)
             {
             printf("x");
             }
        y--;
        printf("\n");
        }

 getchar();
 return 0;
 }

После того, как я написал эту абракадабру, я решил поискать как это делали в книжке и увидел, что в книжке есть подобны пример в листинге 6.18. (программа rows2.с). Забавно, что когда я проходил вышеупомянутый листинг, вроде все было понятно.. Новая мудрость: понятно как работает != смочь такое сделать самому. На основе этого листинга я понял, что особо не овладел циклами for; вот как правильно выводить лесенку с буквой хэ:

 #include <stdio.h>
 int main(void)
 {

 int row, col;

 for (row = 0; row < 3; row++)
         {
         for (col = row; col < 3; col++)
                 printf("X");
         printf("\n");
         }

 getchar();
 return 0;
 }

Вывод: 

XXX
XX
X

Почему так — становится ясно, когда на бумажке распишешь по шагам как что меняется. Становится ясно, что при уменьшающемся количестве элементов в строке, удобнее задавать «ход программы» в изначальном операторе, а не в условии цикла.

Этот пример впервые показал мне, насколько важно перед составлением программы прописывать ее на бумажке, а не просто бросаться на амбразуру кодинга. Но вернемся к нашим баранам — программе-пирамиде.

Сначала я начал делать эту программу неправильно. Ну как неправильно.. Скорее не так, как надо. Это еще одна мудрость — перед программированием, и даже перед тем, как начать продумывать исполнение отдельных модули — нужно подумать о программе в концептуальном плане, на уровне идеи.

Что я начал делать — тройной вложенный цикл. Черт дери. Который никак не работал. У меня в итоге челленж возник — заставить его заработать. Но в середине мучений — я понял (когда рассказывал о программе Штукенции) — что надо тупо сделать цикл не тройной вложенности, а двойной. Вот что вышло (это пример прототипа программы, которая выводит Х, а не последовательность букв):

#include <stdio.h>
 int main(void)
 {
 int row, space, down;

 for (row=0; row<5; row++)
        {
         for(space=row; space<4; space++)
                printf("_");
         for(down=row; down>=0; down--)
                printf("X");
         printf("\n");
        }

 getchar();
 return 0;
 }

Вывод:

____X
___XX
__XXX
_XXXX
XXXXX

Тут есть один внешний цикл и два внутренних. Изначально я по дурости во второй (цикл, который выводит _) засунул третий (который выводит Х) и пытался это заставить работать… %)

Итак, теперь вместо Х проставляем алфавит, а также добавляем четверный цикл, который выводит алфавит в обратном порядке. Тут хочу сказать о самом важном уроке, который я понял по мере составления этой программы — МОДУЛЬНОСТЬ. Нужно любую задачу разбивать на небольшие кусочки; когда ты в них разберешься — потому уже все собирать воедино.

Итак, выводим алфавит, первую часть:

#include <stdio.h>
 int main(void)
 {

 int row, space, down;
 char letter, a;

 printf("Enter the letter:\n");
 scanf("%c", &letter);

 for (row=0; row<5; row++)
        {
         for(space=row; space<4; space++)
                printf("_");
         for(down=row, a=letter; down>=0; down--)
                printf("%c", a++);
         printf("\n");
        }

 getchar(); getchar();
 return 0;
 }

Это нам выведет:

____A
___AB
__ABC
_ABCD
ABCDE

Пол дела сделано. Теперь надо вывести алфавит наоборот, т.е. пирамиду DCBA. Тоже делаем это в отдельной тестовой программе:

#include <stdio.h>
 int main(void)
 {

 int row, space, down;
 char letter;

 for (row=0; row<5; row++)
        {
         for(down=row, letter='A'+row; down>=0; down--, letter--)
                printf("%c", letter);
         printf("\n");
        }

 getchar(); getchar();
 return 0;
 }

Вывод:

A
BA
CBA
DCBA
EDCBA

Теперь объединяем этот подход с основной программой (подчеркивание я заменил на пробел):

#include <stdio.h>
 int main(void)
 {

 int row, space, down, up;
 char letter, a, b;

 printf("Enter the letter:\n");
 scanf("%c", &letter);

 for (row=0; row<5; row++)
        {
         for(space=row; space<4; space++)
                printf(" ");
         for(down=row, a=letter; down>=0; down--)
                printf("%c", a++);
         for(up=row, b=letter+row-1; up>0; up--, b--)
                printf("%c", b);
         printf("\n");
        }

 getchar(); getchar();
 return 0;
 }

Ура, пирамида! На эту программу у меня ушел не один час… Но оно того стоило — это была эпическая битва 🙂

6. Напишите программу для вывода таблицы, в каждой строке которой представлено целое число, его квадрат и его куб. Запросите у пользователя верхний и нижний пределы таблицы. Используйте цикл for.

#include <stdio.h>
 int main(void)
 {
 int min, max;
 int sqrt, cube;

 printf("Enter the lower number:\n");
 scanf("%d", &min);
 printf("Enter the upper number:\n");
 scanf("%d", &max);
 printf("Number   Square   Cube\n");

 for (min; min <= max; min++)
            printf("%4d %7d %7d\n" , min, min*min, min*min*min);
        printf("\n");

 getchar(); getchar();getchar();
 return 0;
 }

7. Напишите программу, которая читает слово в символьный массив, а затем вы водит это слово в обратном порядке. Подсказка: воспользуйтесь функцией strlen() (глава 4) для вычисления индекса последнего символа массива.

 #include <stdio.h>
 #include <string.h>
 int main(void)
 {
 char word[40];
 int i;

 printf ("Enter the word:\n");
 scanf("%s", word);

 for (i = strlen(word)-1; i>=0; i--)
        printf("%c", word[i]);

 getchar();getchar();
 return 0;
 }

8. Напишите программу, которая запрашивает два числа с плавающей запятой и выводит значение их разности, деленной на их произведение. Программа должна обрабатывать пары вводимых чисел до тех пор, пока пользователь не введет нечисловое значение.

 #include <stdio.h>
 int main(void)
 {
 float n1, n2;

 printf("Enter two floating-point numbers:\n");

 while (scanf("%f %f" , &n1, &n2))
 {
        printf("result: %f\n",((n1-n2)/(n1*n2)));
        printf("Enter new values or any non-number to quit:\n");
 }

 getchar();getchar();
 return 0;
 }

9. Модифицируйте упражнение 8 так, чтобы программа использовала функцию для возврата результатов вычислений.

 #include <stdio.h>

 float calc (float n1, float n2);

 int main(void)
 {
 float n1, n2;

 printf("Enter two floating-point numbers:\n");

 while (scanf("%f %f" , &n1, &n2))
 {
        printf("result: %f\n", calc(n1, n2));
        printf("Enter new values or any non-number to quit:\n");
 }

 getchar();getchar();
 return 0;
 }

 float calc (float n1, float n2)
 {
 return ((n1-n2)/(n1*n2));
 }

10. Напишите программу, которая запрашивает ввод нижнего и верхнего пределов последовательности целых чисел, вычисляет сумму всех квадратов целых чисел, начиная с квадрата нижнего целочисленного предела и заканчивая квадратом верхнего целочисленного предела, после чего отображает результат на экране. Затем программа должна запрашивать ввод следующих предельных значений и отображать ответ, пока пользователь не введет значение верхнего предела, который меньше или равен нижнему пределу. Результаты выполнения программы должны выглядеть следующим образом:

Введите нижний и верхний целочисленные пределы: 5 9
Сумма квадратов целых чисел от 25 до 81 равна 255
Введите следующую комбинацию пределов: 3 25
Сумма квадратов целых чисел от 9 до 625 равна 95
Введите следующую комбинацию пределов: 5 5
Работа завершена

На мой взгляд, условие этой программы (а точнее пример ее вывода) — не очень удачный, по нему сложно понять, что делает программа. В общем, тут имеется в виду не сумма «25 до 81«, а «25+36+49+64+81». Чисто, пояснение 🙂

Код:

 #include <stdio.h>

 int main(void)
 {

 int min, max;
 int summ = 0;
 int m, M;

 printf("Enter min and max numbers:\n");

 scanf("%d %d", &min, &max);

 while (min != max)
        {
         for (m=min, M=max+1; m != M; m++)
                 summ += m*m;
         printf("Summ of squares of integer: %d %d\n", min, max);
         printf("The Summ of the squares from %d to %d is %d\n",
                min*min, max*max, summ);
         summ=0;                       
         printf("Enter next set of limits:\n");
         scanf("%d %d", &min, &max);
        }
 printf("Done!");

 getchar();
 return 0;
 }

11. Напишите программу, которая читает восемь целых чисел в массив, после чего выводит их в обратном порядке.

 #include <stdio.h>

 int main(void)
 {

 long i, n;
 int array[7];

 printf("Enter 8 integers:\n");

 for (i=0; i<8; i++)
         scanf("%d", &array[i]);

 for (i=7; i>=0; i--)
        printf("%d", array[i]);

 getchar(); getchar();
 return 0;
 }

12. Взгляните на следующие две бесконечных последовательности:
1.0 + 1.0/2.0 + 1.0/3.О + 1.0/4.0 +…
1.0 — 1.0/2.0 + 1.0/3.0 — 1.0/4.0 +…
Напишите программу, которая подсчитывает промежуточные суммы этих двух последовательностей до тех пор, пока не будет обработано заданное количество элементов. Подсказка: произведение нечетного количества значений -1 равно -1, а произведение четного количества значений -1 равно 1. Предоставьте пользователю возможность вводить предел интерактивно; нулевое или отрицательное значение должно завершать ввод. Просмотрите промежуточные суммы для 100, 1000 и 10,000 элементов. Сходятся л и эти последовательности к какому-то значению?

Первый вариант решения получился корявый; кроме того с ошибкой в знаке:

 #include <stdio.h>

 int main(void)
 {

 float n1 = 0;
 float n2 = 0;
 float z; // number of elements
 float x;

 printf("Enter number of elements to count:\n");

 scanf ("%f", &z);

 while (z > 0)
        {
        for (x=1.0; x<=z; x++)
                {
                // to check printf("x=%.1f z=%.1f\n", x, z);
                n1+=(1.0/x);
                }
        for (x=1.0; x<=z; x++)
                {
                n2-=(1.0/x);
                x+=1.0;
                n2+=(1.0/x);
                }
     printf("First result: %f,\n second result: %f\n", n1, n2);
     printf("Enter another number of elements or 0 to quit:\n");
     n1 = 0; n2 = 0;
     scanf ("%f", &z);
        }

 getchar();
 return 0;
 }

Второй вариант, исправленный и отшлифованный (отступы приходится двигать немного, чтобы влезало):

 #include <stdio.h>

 int main(void)
 {

 float n1 = 0;
 float n2 = 0;
 float z; // number of elements
 float x; // counter for (for)
 float sign = 1;

 printf("Enter number of elements to count:\n");

 scanf ("%f", &z);

 while (z > 0)
        {
        for (x=1; x<=z; x++)
                {
                n1+=(1/x);
                n2+=(1/x)*sign;
                sign=(-sign);
                }
     printf("1 + 1/2 + 1/3 + 1/4 + ... 1/%.0f = %f\n", z, n1);
     printf("1 - 1/2 + 1/3 - 1/4 + ... 1/%.0f = %f\n", z, n2);
     printf("Enter another number of elements or 0 to quit:\n");
     n1 = 0; n2 = 0;
     scanf ("%f", &z);
        }

 getchar();
 return 0;
 }

Вывод (в дальнейшем слово вывод буду опускать и так понятно):

Enter number of elements to count:
1 + 1/2 + 1/3 + 1/4 + ... 1/100 = 5.187378
1 - 1/2 + 1/3 - 1/4 + ... 1/100 = 0.688172
Enter another number of elements or 0 to quit:
1 + 1/2 + 1/3 + 1/4 + ... 1/1000 = 7.485478
1 - 1/2 + 1/3 - 1/4 + ... 1/1000 = 0.692646
Enter another number of elements or 0 to quit:
1 + 1/2 + 1/3 + 1/4 + ... 1/10000 = 9.787613
1 - 1/2 + 1/3 - 1/4 + ... 1/10000 = 0.693091

13. Напишите программу, которая создает восьмиэлементный массив типа int и помещает в него элементы начальных восьми степеней 2, а затем выводит полученные значения. Применяйте цикл for для вычисления элементов массива, и ради разнообразия для отображения значений воспользуйтесь циклом do while.

 #include <stdio.h>

 int main(void)
 {

 int array[8];
 int degree=1;
 int i;

 for (i=0; i < 8; i++)
        {
        degree*=2;
        array[i]=degree;
        }
 i=0;
 do {
 printf("[%d] = %d\n", i, array[i]);
 i++;
 } while (i<8);

 getchar();
 return 0;
 }
[0] = 2
[1] = 4
[2] = 8
[3] = 16
[4] = 32
[5] = 64
[6] = 128
[7] = 256

14. Напишите программу, которая создает два восьмиэлементных массива типа
double и использует цикл для ввода значений восьми элементов первого массива. Программа должна накапливать в элементах второго массива суммы первого массива с нарастающим итогом. Например, четвертый элемент второго массива должен быть равен сумме первых четырех элементов первого массива, а пятый элемент второго массива — сумме пяти первых элементов первого массива. (Это можно сделать с помощью вложенных циклов, однако если учесть тот факт, что пятый элемент второго массива равен четвертому элементу второго массива плюс пятый элемент первого массива, можно избежать вложенных циклов и применить для решения задачи единственный цикл). В завершение воспользуйтесь циклом для вывода содержимого обоих массивов, при этом первый массив должен отображаться в первой строке, а каждый элемент второго массива должен помещаться непосредственно под соответствующим элементом первого массива.

 #include <stdio.h>

 int main(void)
 {

 int n1[8], n2[8];
 int i;
 int summ=0;

 printf("Enter 8 values:\n");

 n2[0]=0;
 for (i = 0; i<8; i++)
        {
        scanf("%d", &n1[i]);
        summ+=n1[i];
        n2[i]=summ;
        }
 i=0;
 for (i = 0; i<8; i++)
        {
        printf("%5d", n1[i]);
        }
 i=0;
 printf("\n");
 for (i = 0; i<8; i++)
        {
         printf("%5d", n2[i]);
        }

 getchar(); getchar();
 return 0;
 }
Enter 8 values:
    5   15   25   11   12   13   14   15
    5   20   45   56   68   81   95  110

15. Напишите программу, которая читает строку ввода, а затем выводит ее в обратном порядке. Ввод можно сохранять в массиве значений типа char; предполагается, что строка состоит не более чем из 255 символов. Вспомните, что для чтения символа за раз можно применять функцию scanf () со спецификатором %с, а при нажатии клавиши генерируется символ новой строки (\n).

С этой простой на вид программой пришлось повозиться. Мой первый вариант решения оказался довольно кривым:

 #include <stdio.h>
 int main(void)
 {

 char input [255];
 int i;

 printf("Enter something\n");

 scanf ("%c", &input[0]);

 for (i=0; input[i++] != '\n'; )
        scanf ("%c", &input[i]);

 for (i-=1; i>=0; i--)
        printf("%c", input[i]);

 getchar();
 return 0;
 }

Это был пример того, когда for применять не стоит… С while гораздо удобнее:

 #include <stdio.h>
 int main(void)
 {

 char input [255];
 int i=0;

 printf("Enter something\n");

 while (scanf ("%c", &input[i]), input[i] != '\n')
        i++;

 for ( ; i>=0; i--)
        printf("%c", input[i]);

 getchar();
 return 0;
 }

16. Дафна делает вклад в сумме $100 под простые 10%. (То есть ежегодный прирост вклада составляет 10% от первоначальной суммы.) Дейдра вкладывает $100 под сложные 5%. (Это значит, что ежегодное увеличение вклада составляет 5% от текущего баланса, включающего предыдущий прирост вклада.) Напишите программу, которая вычисляет, сколько нужно лет, чтобы сумма на счету Дейдры превзошла сумму на счету Дафны. Выведите также размеры обоих вкладов на тот момент.

 #include <stdio.h>
 int main(void)
 {

 float dap = 100.0;
 float dei = 100.0;
 int year;

 for (year=0; dap >= dei; year++)
        {
         dap += (100.0*10)/100.0;
         dei += (dei*5)/100.0;
        }

printf("Year: %2d | Daphna: %.1f | Deidra: %.1f\n", year, dap, dei);

 getchar();
 return 0;
 }
Year: 27 | Daphna: 370.0 | Deidra: 373.3

17. Чаки Лаки выиграл миллион долларов (после уплаты всех налогов), который он поместил на счет со ставкой 8% годовых. В последний день каждого года Чаки снимает со счета по $100000. Напишите программу, которая вычисляет, сколько лет пройдет до того, как на счету Чаки не останется денег.

 #include <stdio.h>
 int main(void)
 {

 float s = 1000000.0f;
 int year=0;

 while (s > 0)
        {
         year++;
         s -= 100000.0f;
         s = (s*1.08f);
         printf("Year: %d, balance: %.1f\n", year, s);
        }

 printf("Bankrupt in %2d  years ($ %.1f balance)", year, s);

 getchar();
 return 0;
 }
Year: 1, balance: 972000.1
Year: 2, balance: 941760.1
Year: 3, balance: 909101.0
Year: 4, balance: 873829.1
Year: 5, balance: 835735.5
Year: 6, balance: 794594.4
Year: 7, balance: 750161.9
Year: 8, balance: 702174.9
Year: 9, balance: 650348.9
Year: 10, balance: 594376.9
Year: 11, balance: 533927.1
Year: 12, balance: 468641.2
Year: 13, balance: 398132.6
Year: 14, balance: 321983.2
Year: 15, balance: 239741.9
Year: 16, balance: 150921.2
Year: 17, balance: 54994.9
Year: 18, balance: -48605.5
Bankrupt in 18  years ($ -48605.5 balance)

18. Профессор Робинс присоединился к группе в социальной сети. Вначале у него было пять друзей. Он заметил, что количество его друзей увеличивалось следующим образом. По истечении первой недели один человек вышел из числа друзей, а количество друзей удвоилось. По истечении второй недели двое вышли из числа друзей, а количество друзей удвоилось. Выражаясь в общем, по истечении N-й недели N людей выходили из числа друзей, а количество друзей удваивалось. Напишите программу, которая вычисляет количество друзей в конце каждой недели. Программа должна продолжать подсчет до тех пор, пока количество друзей не превысит число Данбара. Число Данбара — это приблизительная оценка максимального размера сплоченной социальной группы, в которой каждый член знает всех остальных членов и осведомлен об их взаимоотношениях друг с другом. Его приближенное значение равно 150.

#include <stdio.h>
 int main(void)
 {

 int friends = 5;
 int week;
 const int dunbar_number = 150;

 for (week=1; (friends - week)*2 < dunbar_number; week++)
        {
         friends = (friends - week)*2;
        }

 printf("At %d week Proffesson Robins had %d friends", week, friends);

 getchar();
 return 0;
 }
At 8 week Proffesson Robins had 146 friends

Фуф! Вот и всё 🙂 Это был непростой бой, но кажется, мы с вами немного усвоили как составлять циклы.

Буду рад вашим комментариям!


Запись опубликована в рубрике С (Си). Добавьте в закладки постоянную ссылку.

4 комментария на «[Язык C] Упражнения по программированию: циклы и массивы (глава 6)»

  1. olega говорит:

    решаю 18ую и набрёл на пост. Сверился — все ок)
    больше всего провозился с задачами «пирамиды из букв»..радует, что до всего сам додумался)

  2. Nikolai говорит:

    Вот мой код к 17 заданию.
    1 // Миллион под 8% годовых. В конце года — 100 000$
    3 #include
    4
    5 int main(void)
    6 {
    7 float sum = 1000 000.0f;
    8 float pb = 0.08;
    9 float sum_t = 100 000.0f;
    10 int i = 0;
    11 int size = 1;
    12 int year = 0;
    13 while(0 < sum){
    14 for(i =0; i < size; i++)
    15 sum = sum + (sum * pb);
    16 printf("%.2lf plus 8%%\n", sum);
    17 for(i =0; i < size; i++)
    18 sum = sum — sum_t;
    19 printf("%.2lf minus 100 000$\n", sum);
    20 year++;
    21 }
    22 printf("Money left %.2lf over the %d years \n", sum, year);
    23 return 0;
    24 }

  3. Юлия говорит:

    В задании 12 вы не инициализировали заново переменную sign в конце цикла while, поэтому результат иногда получает отрицательное значение.

  4. serxio говорит:

    5
    int main(void){
    int line, left, right, space;
    char symbol, lt, rt, sp;
    printf(«enter the symbol\n»);
    scanf(«%c», &symbol);
    for (line = 0; line < 5; line++)
    { sp = '_';
    for (space = line; space = 0; left—)
    printf(«%c», lt++);
    for(right = line, rt = (symbol — 4) + (line — 1); right >= 0; right—)
    if (line == 0)
    printf(«%c», sp);
    else
    printf(«%c», rt—);
    printf(«\n»);
    };
    return 0;

    };

Добавить комментарий

🇬🇧 Attention! Comments with URLs/email are not allowed.
🇷🇺 Комментарии со ссылками/email удаляются автоматически.