Member 13083812 Ответов: 2

Программирование на языке Си-как вывести пошаговую сумму квадратов?


Я использую visual studio для записи суммы квадратов. но у меня возникли некоторые проблемы с отображением 1^2 + 2^2 + 3^3 в char * formatSeries (int n).

Вот мой код. Пожалуйста, дайте какое-нибудь предложение. Спасибо.
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <string.h>

 long sumofsq(int n);

char* formatSeries(int n)
{
   int c = 2;
   printf("%d ^%d+", sumofsq(n), c);        <--Need help in this part for  
                                            display. example 3=1^2+2^2+3^2
}

void main() 
{
   int n = 5;
   printf("Given n = %d\n", n);
   printf("The sum of square for the series %s is %d \n", formatSeries(n),
   sumofsq(n));    
}

long sumofsq(int n)
{
   int sum = 0, i;
   for (i = 1; i <= n; i++)
     sum = sum + (i*i);
   return sum;
}

Код в void main.
printf(" The sum of square for the series %s is %d\n", formatSeries(n), sumofsq(n));

Возникли проблемы с этим выходом.
1^2 + 2^2 + 3^2 + 4^2 + 5^2 + 6^2 < - - - - - проблема в этом. Я не могу получить этот дисплей

Результат должен выглядеть примерно так.

Сумма квадратов для ряда 1^2 + 2^2 + 3^2 + 4^2 + 5^2 + 6^2 это 91.

Что я уже пробовал:

char* formatSeries(int n)
{
   int c = 2;
   printf("%d ^%d+", sumofsq(n), c);        <--Need help in this part for  
                                            display. example 3=1^2+2^2+3^2
}

Patrice T

И какой дисплей вы получаете ?

2 Ответов

Рейтинг:
2

OriginalGriff

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

1^2+2^2+3^2 = 3
Вместо
3 = 1^2+2^2+3^2

Таким образом, вы можете сделать это с помощью двух вызовов printf:
1) в цикл for внутри sumofsq чтобы напечатать каждый термин x ^ y (с разделительным знаком"+")
2) напечатать конечный результат, когда sumofsq завершает работу и возвращает значение.

Это твое домашнее задание, поэтому я не буду давать тебе код!
Но начните с биннинга formatSeries функция и получение sumofsq чтобы напечатать каждый термин по мере его обработки.


Рейтинг:
1

Patrice T

Этот код хорош, если вы научитесь строить строку и возвращать ее в качестве результата.

void main()
{
int n = 5;
printf("Given n = %d\n", n);
printf("The sum of square for the series %s is %d \n", formatSeries(n), sumofsq(n));
}

Но очевидно, что это не так.
Вы можете изменить его, чтобы упростить другие части
void main()
{
int n = 5;
printf("Given n = %d\n", n);
printf("The sum of square for the series ");
formatSeries(n); // so that this part can print the formula directly
printf(" is %d \n", sumofsq(n));
}

Цитата:
printf("%d ^%d+", sumofsq(n), c);

Здесь вы хотите напечатать формулу, а не ее результат.

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.