user: Translate the below assembly code into C programming language:

```asm
<calculation_tests>:
  endbr64
  push   %rbp
  lea    D19(%rip),%rbp
  mov    %rbp,%rdi
  sub    $0x30,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  lea    0x1c(%rsp),%rsi
  call   <scanf@plt>
  lea    0x20(%rsp),%rsi
  mov    %rbp,%rdi
  call   <scanf@plt>
  lea    0x24(%rsp),%rsi
  mov    %rbp,%rdi
  call   <scanf@plt>
  movss  0x1c(%rsp),%xmm0
  movss  0x20(%rsp),%xmm1
  movss  0x24(%rsp),%xmm2
  comiss %xmm1,%xmm0
  jbe    L19
  comiss %xmm2,%xmm0
  ja     L51
L19:
  comiss %xmm0,%xmm1
  jbe    L143
  comiss %xmm2,%xmm1
  ja     L26
L143:
  comiss %xmm0,%xmm2
  jbe    L12
  comiss %xmm1,%xmm2
  ja     L62
L12:
  movss  0x4(%rsp),%xmm0
  addss  0xc(%rsp),%xmm0
  lea    D23(%rip),%rdi
  mulss  D13(%rip),%xmm0
  call   <printf@plt>
  movss  0xc(%rsp),%xmm4
  addss  0x8(%rsp),%xmm4
  lea    D28(%rip),%rdi
  movss  0x4(%rsp),%xmm0
  addss  %xmm4,%xmm0
  divss  D3(%rip),%xmm0
  call   <printf@plt>
  movss  0x8(%rsp),%xmm0
  lea    D1(%rip),%rdi
  call   <printf@plt>
  movss  0x4(%rsp),%xmm0
  lea    D62(%rip),%rdi
  call   <printf@plt>
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L103
  add    $0x30,%rsp
  pop    %rbp
  ret
  nopl   0x0(%rax,%rax,1)
L62:
  comiss %xmm0,%xmm1
  jbe    L68
  movss  %xmm1,0xc(%rsp)
  movss  %xmm0,0x8(%rsp)
  movss  %xmm2,0x4(%rsp)
  jmp    L12
L26:
  comiss %xmm2,%xmm0
  jbe    L116
  movss  %xmm0,0xc(%rsp)
  movss  %xmm2,0x8(%rsp)
  movss  %xmm1,0x4(%rsp)
  jmp    L143
  nopl   0x0(%rax)
L51:
  comiss %xmm2,%xmm1
  jbe    L0
  movss  %xmm1,0xc(%rsp)
  movss  %xmm2,0x8(%rsp)
  movss  %xmm0,0x4(%rsp)
  jmp    L19
  nopl   0x0(%rax)
L0:
  movss  %xmm2,0xc(%rsp)
  movss  %xmm1,0x8(%rsp)
  movss  %xmm0,0x4(%rsp)
  jmp    L19
  nopw   0x0(%rax,%rax,1)
L116:
  movss  %xmm2,0xc(%rsp)
  movss  %xmm0,0x8(%rsp)
  movss  %xmm1,0x4(%rsp)
  jmp    L143
  nopw   0x0(%rax,%rax,1)
L68:
  movss  %xmm0,0xc(%rsp)
  movss  %xmm1,0x8(%rsp)
  movss  %xmm2,0x4(%rsp)
  jmp    L12
L103:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_label: D19
type_guessed: string
name: disassemble_data
arguments: data_label: D23
type_guessed: string
name: disassemble_data
arguments: data_label: D13
type_guessed: byte[4]
name: disassemble_data
arguments: data_label: D28
type_guessed: string
name: disassemble_data
arguments: data_label: D3
type_guessed: byte[4]
name: disassemble_data
arguments: data_label: D1
type_guessed: string
name: disassemble_data
arguments: data_label: D62
type_guessed: string

tool: D19: %f

tool: D23: Media com as duas melhores notas: %.1f


tool: {"D13": [0x00,0x00,0x00,0x3f]}

tool: D28: Media com as tres notas: %.1f


tool: {"D3": [0x00,0x00,0x40,0x40]}

tool: D1: Nota mais baixa: %.1f


tool: D62: Nota mais alta: %.1f


assistant: ```c
void calculation_tests() {
  float nota1, nota2, nota3;
  float maior, menor, media, mediatotal, mediamelhor;
  scanf("%f", &nota1);
  scanf("%f", &nota2);
  scanf("%f", &nota3);
  if (nota1 > nota2 && nota1 > nota3) {
    maior = nota1;
    if (nota2 > nota3) {
      media = nota2;
      menor = nota3;
    } else {
      media = nota3;
      menor = nota2;
    }
  }
  if (nota2 > nota1 && nota2 > nota3) {
    maior = nota2;
    if (nota1 > nota3) {
      media = nota1;
      menor = nota3;
    } else {
      media = nota3;
      menor = nota1;
    }
  }
  if (nota3 > nota1 && nota3 > nota2) {
    maior = nota3;
    if (nota2 > nota1) {
      media = nota2;
      menor = nota1;
    } else {
      media = nota1;
      menor = nota2;
    }
  }
  mediamelhor = (media + maior) / 2;
  mediatotal = (menor + media + maior) / 3;
  printf("Media com as duas melhores notas: %.1f\n", mediamelhor);
  printf("Media com as tres notas: %.1f\n", mediatotal);
  printf("Nota mais baixa: %.1f\n", menor);
  printf("Nota mais alta: %.1f\n", maior);
}
```