Answer and Explanation:
#include <iostream>
#include <string>
#include <time.h>
#include <vector>
using namespace std;
//Takes user info
int user_info(string *name,char *gender){
    char G;
    cout<<"What is your name?: ";
    getline(cin, *name);
    cout<<"What is your gender(m/f):";
    cin>>G;
    cout<<endl;
    *gender = tolower(G);
    return 0;
}
//Toss coin(part 2)
bool coin_toss(double seed){
    double r;
    r = (double)seed/(double)RAND_MAX;
    //cout<<r;
    if (r<0.5) return true;
    return false;
}
//check results
float toss_result(vector<char> v,int *h){
    int num_heads=0;
    int num_toss = v.size();
    *h = 0;
    for(int i=0;i<num_toss;i++){
        if(v[i]=='h'){num_heads++;(*h)++;}
    }
    return (float)num_heads/(float)num_toss;
}
void show_result(int total_num,int head_num,float ratio){
    cout<<"it took you "<<total_num<<" tosses to get 3 heads in a row"<<endl;
    cout<<"on average you flipped heads "<<(ratio*100)<<"% of the time"<<endl;
}
int main()
{
    string name;
    char gender;
    string K; //Mr or Mrs
  
    cout<<"Welcome to coin toss! Get 3 heads in row to win!"<<endl;
  
    //part 1
    user_info(&name,&gender);
  
    if(gender == 'f') K = "Mrs.";
    else K = "Mr.";
  
    cout<<"Try to get 3 heads in a row. Good luck "<<K<<name<<"!"<<endl;
    char dummy = getchar();
  
    //part 2
    int num_toss;
    vector<char> toss_results;//store toss results
    bool result;//result of toss
    srand(time(0));
    while(true){
        //cout<<rand()<<endl;
        result = coin_toss(rand());
        cout<<"Press <enter> to flip"<<endl;
        while (1)
        {
            if ('\n' == getchar())
            break;
        }
      
  
      
        if(result) {toss_results.push_back('h');cout<<"HEAD"<<endl;}
        else {toss_results.push_back('t');cout<<"TAIL"<<endl;}
      
        num_toss = toss_results.size();
      
        if(num_toss>=3){
            if ((toss_results[num_toss-1] == 'h')&&(toss_results[num_toss-2] == 'h')&&(toss_results[num_toss-3] == 'h')){
                break;
            }
        }
    }
  
    //part 3
    float ratio_head;
    int num_of_heads;
    ratio_head = toss_result(toss_results,&num_of_heads);
  
    //part 4
  
    show_result(toss_results.size(),num_of_heads,ratio_head);
  
    return 0;
}