int main() {
  char times[20][15] = {
      "Corinthians", "Atlético-MG",   "Grêmio",      "Santos",
      "São Paulo",   "Internacional", "Sport",       "Palmeiras",
      "Ponte Preta", "Flamengo",      "Cruzeiro",    "Atlético-PR",
      "Fluminense",  "Chapecoense",   "Figueirense", "Havaí",
      "Coritiba",    "Goias",         "Joinville",   "Vasco da Gama"};
  int pontos[20] = {70, 62, 56, 50, 50, 50, 49, 48, 47, 44,
                    44, 42, 40, 39, 35, 34, 33, 31, 30, 30};
  int menu = 0;
  while (menu > 0 && menu < 3) {
    int opcao, realpos = 0;
    switch (menu) {
    case 1:
      printf("+----BRASILEIRAO 2015---+");
      for (int i = 0; i < 20; i++)
        printf("%d -  %s - %d", i + 1, times[i], pontos[i]);
      printf("+----FIM---+");
      menu = 666;
      break;
    case 2:
      printf("Digite o a posição do time que deseja simular");
      scanf("%d", &opcao);
      for (int i = 1; i <= 8; i++) {
        realpos = opcao - 1;
        printf("Digite o resultado do %dº jogo do %s. (V, E ou D)", i,
               times[realpos]);
        char jogo;
        scanf("%c", &jogo);
        switch (jogo) {
        case 'V':
          pontos[realpos] += 3;
          break;
        case 'E':
          pontos[realpos]++;
          break;
        case 'D':
          break;
        default:
          printf("Digite o resultado do %dº jogo do %s. V, E ou D)", i,
                 times[realpos]);
          scanf("%c", &jogo);
          break;
        }
      }
      for (int i = 0; i < 20; i++)
        printf("%d -  %s  -  %d", (i + 1), times[i], pontos[i]);
      break;
    }
    printf("Digite 0 para sair");
    scanf("%d", &menu);
  }
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1b0,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x130(%rbp),%rdi
lea    0xeb0(%rip),%rsi
mov    $0x12c,%edx
call   1040 <memcpy@plt>
lea    -0x180(%rbp),%rdi
lea    0xfc8(%rip),%rsi
mov    $0x50,%edx
call   1040 <memcpy@plt>
movl   $0x0,-0x184(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x184(%rbp)
mov    %al,-0x19d(%rbp)
jle    11a1 <main+0x71>
cmpl   $0x3,-0x184(%rbp)
setl   %al
mov    %al,-0x19d(%rbp)
mov    -0x19d(%rbp),%al
test   $0x1,%al
jne    11b4 <main+0x84>
jmp    147a <main+0x34a>
movl   $0x0,-0x18c(%rbp)
mov    -0x184(%rbp),%eax
mov    %eax,-0x1a4(%rbp)
sub    $0x1,%eax
je     11ec <main+0xbc>
jmp    11d8 <main+0xa8>
mov    -0x1a4(%rbp),%eax
sub    $0x2,%eax
je     127c <main+0x14c>
jmp    1452 <main+0x322>
lea    0xf8d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x190(%rbp)
cmpl   $0x14,-0x190(%rbp)
jge    125f <main+0x12f>
mov    -0x190(%rbp),%esi
add    $0x1,%esi
movslq -0x190(%rbp),%rax
lea    -0x130(%rbp),%rdx
imul   $0xf,%rax,%rax
add    %rax,%rdx
movslq -0x190(%rbp),%rax
mov    -0x180(%rbp,%rax,4),%ecx
lea    0xf56(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x190(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x190(%rbp)
jmp    1204 <main+0xd4>
lea    0xf42(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x29a,-0x184(%rbp)
jmp    1452 <main+0x322>
lea    0xf32(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xfc9(%rip),%rdi
lea    -0x188(%rbp),%rsi
mov    $0x0,%al
call   1050 <scanf@plt>
movl   $0x1,-0x194(%rbp)
cmpl   $0x8,-0x194(%rbp)
jg     13e8 <main+0x2b8>
mov    -0x188(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x18c(%rbp)
mov    -0x194(%rbp),%esi
movslq -0x18c(%rbp),%rax
lea    (%rax,%rax,4),%rax
lea    (%rax,%rax,2),%rax
lea    -0x130(%rbp,%rax,1),%rdx
ff
lea    0xefc(%rip),%rdi
xor    %eax,%eax
mov    %al,-0x1a9(%rbp)
call   1030 <printf@plt>
mov    -0x1a9(%rbp),%al
lea    0xf15(%rip),%rdi
lea    -0x195(%rbp),%rsi
call   1050 <scanf@plt>
movsbl -0x195(%rbp),%eax
mov    %eax,-0x1a8(%rbp)
sub    $0x44,%eax
je     138c <main+0x25c>
jmp    132a <main+0x1fa>
mov    -0x1a8(%rbp),%eax
sub    $0x45,%eax
je     136f <main+0x23f>
jmp    133e <main+0x20e>
mov    -0x1a8(%rbp),%eax
sub    $0x56,%eax
jne    1391 <main+0x261>
jmp    1352 <main+0x222>
movslq -0x18c(%rbp),%rax
mov    -0x180(%rbp,%rax,4),%ecx
add    $0x3,%ecx
mov    %ecx,-0x180(%rbp,%rax,4)
jmp    13cf <main+0x29f>
movslq -0x18c(%rbp),%rax
mov    -0x180(%rbp,%rax,4),%ecx
add    $0x1,%ecx
mov    %ecx,-0x180(%rbp,%rax,4)
jmp    13cf <main+0x29f>
jmp    13cf <main+0x29f>
mov    -0x194(%rbp),%esi
movslq -0x18c(%rbp),%rax
lea    -0x130(%rbp),%rdx
imul   $0xf,%rax,%rax
add    %rax,%rdx
lea    0xe68(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe57(%rip),%rdi
lea    -0x195(%rbp),%rsi
mov    $0x0,%al
call   1050 <scanf@plt>
jmp    13d4 <main+0x2a4>
mov    -0x194(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x194(%rbp)
jmp    12a9 <main+0x179>
movl   $0x0,-0x19c(%rbp)
cmpl   $0x14,-0x19c(%rbp)
jge    144d <main+0x31d>
mov    -0x19c(%rbp),%esi
add    $0x1,%esi
movslq -0x19c(%rbp),%rax
lea    -0x130(%rbp),%rdx
imul   $0xf,%rax,%rax
add    %rax,%rdx
movslq -0x19c(%rbp),%rax
mov    -0x180(%rbp,%rax,4),%ecx
lea    0xe1b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x19c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x19c(%rbp)
jmp    13f2 <main+0x2c2>
jmp    1452 <main+0x322>
lea    0xe04(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xdf3(%rip),%rdi
lea    -0x184(%rbp),%rsi
mov    $0x0,%al
call   1050 <scanf@plt>
jmp    117c <main+0x4c>
mov    -0x4(%rbp),%eax
add    $0x1b0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
xor    %eax,%eax
ret

LLVM IR (-O0):
@__const.main.times = [20 x [15 x i8]] [[15 x i8] c"Corinthians\00\00\00\00", [15 x i8] c"Atl\C3\A9tico-MG\00\00\00", [15 x i8] c"Gr\C3\AAmio\00\00\00\00\00\00\00\00", [15 x i8] c"Santos\00\00\00\00\00\00\00\00\00", [15 x i8] c"S\C3\A3o Paulo\00\00\00\00\00", [15 x i8] c"Internacional\00\00", [15 x i8] c"Sport\00\00\00\00\00\00\00\00\00\00", [15 x i8] c"Palmeiras\00\00\00\00\00\00", [15 x i8] c"Ponte Preta\00\00\00\00", [15 x i8] c"Flamengo\00\00\00\00\00\00\00", [15 x i8] c"Cruzeiro\00\00\00\00\00\00\00", [15 x i8] c"Atl\C3\A9tico-PR\00\00\00", [15 x i8] c"Fluminense\00\00\00\00\00", [15 x i8] c"Chapecoense\00\00\00\00", [15 x i8] c"Figueirense\00\00\00\00", [15 x i8] c"Hava\C3\AD\00\00\00\00\00\00\00\00\00", [15 x i8] c"Coritiba\00\00\00\00\00\00\00", [15 x i8] c"Goias\00\00\00\00\00\00\00\00\00\00", [15 x i8] c"Joinville\00\00\00\00\00\00", [15 x i8] c"Vasco da Gama\00\00"]
@__const.main.pontos = [20 x i32] [i32 70, i32 62, i32 56, i32 50, i32 50, i32 50, i32 49, i32 48, i32 47, i32 44, i32 44, i32 42, i32 40, i32 39, i32 35, i32 34, i32 33, i32 31, i32 30, i32 30]
@.str = [26 x i8] c"+----BRASILEIRAO 2015---+\00"
@.str.1 = [14 x i8] c"%d - %s - %d\00"
@.str.2 = [13 x i8] c"+----FIM---+\00"
@.str.3 = [48 x i8] c"Digite o a posi\C3\A7\C3\A3o do time que deseja simular\00"
@.str.4 = [3 x i8] c"%d\00"
@.str.5 = [51 x i8] c"Digite o resultado do %d\C2\BA jogo do %s. (V, E ou D)\00"
@.str.6 = [3 x i8] c"%c\00"
@.str.7 = [50 x i8] c"Digite o resultado do %d\C2\BA jogo do %s. V, E ou D)\00"
@.str.8 = [16 x i8] c"%d - %s - %d\00"
@.str.9 = [19 x i8] c"Digite 0 para sair\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [20 x [15 x i8]]
%3 = alloca [20 x i32]
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i8
%10 = alloca i32
store i32 0, i32* %1
%11 = bitcast [20 x [15 x i8]]* %2 to i8*
%12 = bitcast [20 x i32]* %3 to i8*
store i32 0, i32* %4
br label %13
13: ; preds = %108, %0
%14 = load i32, i32* %4
%15 = icmp sgt i32 %14, 0
br i1 %15, label %16, label %19
16: ; preds = %13
%17 = load i32, i32* %4
%18 = icmp slt i32 %17, 3
br label %19
19: ; preds = %16, %13
%20 = phi i1 [ false, %13 ], [ %18, %16 ]
br i1 %20, label %21, label %111
21: ; preds = %19
store i32 0, i32* %6
%22 = load i32, i32* %4
switch i32 %22, label %108 [
i32 1, label %23
i32 2, label %45
]
23: ; preds = %21
%24 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0))
store i32 0, i32* %7
br label %25
25: ; preds = %40, %23
%26 = load i32, i32* %7
%27 = icmp slt i32 %26, 20
br i1 %27, label %28, label %43
28: ; preds = %25
%29 = load i32, i32* %7
%30 = add nsw i32 %29, 1
%31 = load i32, i32* %7
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds [20 x [15 x i8]], [20 x [15 x i8]]* %2, i64 0, i64 %32
%34 = getelementptr inbounds [15 x i8], [15 x i8]* %33, i64 0, i64 0
%35 = load i32, i32* %7
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds [20 x i32], [20 x i32]* %3, i64 0, i64 %36
%38 = load i32, i32* %37
%39 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i32 %30, i8* %34, i32 %38)
br label %40
40: ; preds = %28
%41 = load i32, i32* %7
%42 = add nsw i32 %41, 1
store i32 %42, i32* %7
br label %25
43: ; preds = %25
%44 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.2, i64 0, i64 0))
store i32 666, i32* %4
br label %108
45: ; preds = %21
%46 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.3, i64 0, i64 0))
%47 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.4, i64 0, i64 0), i32* %5)
store i32 1, i32* %8
br label %48
48: ; preds = %85, %45
%49 = load i32, i32* %8
%50 = icmp sle i32 %49, 8
br i1 %50, label %51, label %88
51: ; preds = %48
%52 = load i32, i32* %5
%53 = sub nsw i32 %52, 1
store i32 %53, i32* %6
%54 = load i32, i32* %8
%55 = load i32, i32* %6
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds [20 x [15 x i8]], [20 x [15 x i8]]* %2, i64 0, i64 %56
%58 = getelementptr inbounds [15 x i8], [15 x i8]* %57, i64 0, i64 0
%59 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.5, i64 0, i64 0), i32 %54, i8* %58)
%60 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i8* %9)
%61 = load i8, i8* %9
%62 = sext i8 %61 to i32
switch i32 %62, label %76 [
i32 86, label %63
i32 69, label %69
i32 68, label %75
]
63: ; preds = %51
%64 = load i32, i32* %6
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds [20 x i32], [20 x i32]* %3, i64 0, i64 %65
%67 = load i32, i32* %66
%68 = add nsw i32 %67, 3
store i32 %68, i32* %66
br label %84
69: ; preds = %51
%70 = load i32, i32* %6
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds [20 x i32], [20 x i32]* %3, i64 0, i64 %71
%73 = load i32, i32* %72
%74 = add nsw i32 %73, 1
store i32 %74, i32* %72
br label %84
75: ; preds = %51
br label %84
76: ; preds = %51
%77 = load i32, i32* %8
%78 = load i32, i32* %6
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds [20 x [15 x i8]], [20 x [15 x i8]]* %2, i64 0, i64 %79
%81 = getelementptr inbounds [15 x i8], [15 x i8]* %80, i64 0, i64 0
%82 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.7, i64 0, i64 0), i32 %77, i8* %81)
%83 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i8* %9)
br label %84
84: ; preds = %76, %75, %69, %63
br label %85
85: ; preds = %84
%86 = load i32, i32* %8
%87 = add nsw i32 %86, 1
store i32 %87, i32* %8
br label %48
88: ; preds = %48
store i32 0, i32* %10
br label %89
89: ; preds = %104, %88
%90 = load i32, i32* %10
%91 = icmp slt i32 %90, 20
br i1 %91, label %92, label %107
92: ; preds = %89
%93 = load i32, i32* %10
%94 = add nsw i32 %93, 1
%95 = load i32, i32* %10
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds [20 x [15 x i8]], [20 x [15 x i8]]* %2, i64 0, i64 %96
%98 = getelementptr inbounds [15 x i8], [15 x i8]* %97, i64 0, i64 0
%99 = load i32, i32* %10
%100 = sext i32 %99 to i64
%101 = getelementptr inbounds [20 x i32], [20 x i32]* %3, i64 0, i64 %100
%102 = load i32, i32* %101
%103 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.8, i64 0, i64 0), i32 %94, i8* %98, i32 %102)
br label %104
104: ; preds = %92
%105 = load i32, i32* %10
%106 = add nsw i32 %105, 1
store i32 %106, i32* %10
br label %89
107: ; preds = %89
br label %108
108: ; preds = %21, %107, %43
%109 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.9, i64 0, i64 0))
%110 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.4, i64 0, i64 0), i32* %4)
br label %13
111: ; preds = %19
%112 = load i32, i32* %1
ret i32 %112
}

LLVM IR (-O2):
define i32 @main() {
ret i32 0
}