#include <stdio.h>
    int i, j; 
    int madness(int x);
    int main(void) 
    {
    int i, total = 0;
    j = 1;
    for (i = 0; i<3; i++) { total += madness(i); }
    printf("Total = %d\n", total);
    return 0;
    }  
    int madness(int x) 
    {
     static int i;
     static int sum = 0;
     for (i = 0; i<x; i++, j++) { sum += j; }
     return sum;
     }
1st call to madness function with i=0;
since static variables initialize only once ,so with first call to madness function it assigns i=0 and sum=0.since x=0 in this function so value of sum remains the same and it returns 0.
2nd call to madness function with i=1;
Here we have x=1,j=1,sum=0  and  function run loop  
 for (i = 0; i<1; i++, j++) { sum += j; }
so we get sum=1 and the value of j got 2 Now which will be used in the next function call.Now j becomes 2 and function return 1. so it's added to our total .Now total becomes 1.
3rd call to madness function with i=2;
here x=2,j=2,sum=1(from previous call static values remains the same)
Now you are smart enough to calculate this result
for (i = 0; i<2; i++, j++) { sum += j; }
here sum becomes 6 and return this value . since our previous value of total is 1 .Now it becomes 6+1=7 Which is your required answer.