Ok, I changed the C++ program a little and now it says that I'm right and you are wrong:

Click to reveal..

Code:
#include <cstdlib>
#include <iostream>

using namespace std;

#define BOY 0
#define GIRL 1

int main(int argc, char *argv[])
{
    int child1, child2;
    int i;
    int hits;
    int tries;
    
    srand ( time(NULL) );
    
    
    cout << "\nMan:";
    hits = 0;
    tries = 0;
    for(i=0;i<1000;i++)
    {
        child1 = BOY;
        child2 = rand() % 2;
         
        if((child1 == BOY) || (child2 == BOY)) tries++;
        if((child1 == BOY) && (child2 == BOY)) hits++;
    }
    cout << "\n" << hits << "/" << tries << " = " << static_cast<double>(hits)/tries;
    
    
    cout << "\nWoman:";
    hits = 0;
    tries = 0;
    for(i=0;i<1000;i++)
    {
        if(rand() % 2)
        {
                  child1 = BOY;
                  child2 = rand() % 2;
        }
        else
        {
                  child1 = rand() % 2;
                  child2 = BOY;
        }
        
         
        if((child1 == BOY) || (child2 == BOY)) tries++;
        if((child1 == BOY) && (child2 == BOY)) hits++;
    }
    cout << "\n" << hits << "/" << tries << " = " << static_cast<double>(hits)/tries;
    
    
    cout << "\n";
    
    system("PAUSE > NUL");
    return EXIT_SUCCESS;
}




Now it doesn't try all possibilities and eliminate those that are known to be false in the first place, but first decides which child is the child that is known to be a boy and randomizes the other child. This seems more like it's valid, so I believe again that the propability is 50% for both, the man and the woman.