user: 请将以下的汇编代码转换成C语言代码：

```asm
<calculation_tests>:
  endbr64
  push   %rbp
  lea    D40(%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    L82
  comiss %xmm2,%xmm0
  ja     L41
L82:
  comiss %xmm0,%xmm1
  jbe    L87
  comiss %xmm2,%xmm1
  ja     L99
L87:
  comiss %xmm0,%xmm2
  jbe    L27
  comiss %xmm1,%xmm2
  ja     L37
L27:
  movss  0x4(%rsp),%xmm0
  addss  0xc(%rsp),%xmm0
  lea    D24(%rip),%rdi
  mulss  D53(%rip),%xmm0
  call   <printf@plt>
  movss  0xc(%rsp),%xmm4
  addss  0x8(%rsp),%xmm4
  lea    D34(%rip),%rdi
  movss  0x4(%rsp),%xmm0
  addss  %xmm4,%xmm0
  divss  D65(%rip),%xmm0
  call   <printf@plt>
  movss  0x8(%rsp),%xmm0
  lea    D17(%rip),%rdi
  call   <printf@plt>
  movss  0x4(%rsp),%xmm0
  lea    D27(%rip),%rdi
  call   <printf@plt>
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L97
  add    $0x30,%rsp
  pop    %rbp
  ret
  nopl   0x0(%rax,%rax,1)
L37:
  comiss %xmm0,%xmm1
  jbe    L100
  movss  %xmm1,0xc(%rsp)
  movss  %xmm0,0x8(%rsp)
  movss  %xmm2,0x4(%rsp)
  jmp    L27
L99:
  comiss %xmm2,%xmm0
  jbe    L103
  movss  %xmm0,0xc(%rsp)
  movss  %xmm2,0x8(%rsp)
  movss  %xmm1,0x4(%rsp)
  jmp    L87
  nopl   0x0(%rax)
L41:
  comiss %xmm2,%xmm1
  jbe    L149
  movss  %xmm1,0xc(%rsp)
  movss  %xmm2,0x8(%rsp)
  movss  %xmm0,0x4(%rsp)
  jmp    L82
  nopl   0x0(%rax)
L149:
  movss  %xmm2,0xc(%rsp)
  movss  %xmm1,0x8(%rsp)
  movss  %xmm0,0x4(%rsp)
  jmp    L82
  nopw   0x0(%rax,%rax,1)
L103:
  movss  %xmm2,0xc(%rsp)
  movss  %xmm0,0x8(%rsp)
  movss  %xmm1,0x4(%rsp)
  jmp    L87
  nopw   0x0(%rax,%rax,1)
L100:
  movss  %xmm0,0xc(%rsp)
  movss  %xmm1,0x8(%rsp)
  movss  %xmm2,0x4(%rsp)
  jmp    L27
L97:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: label: D40
type_guessed: string
name: extract_symbolic_data
arguments: label: D24
type_guessed: string
name: extract_symbolic_data
arguments: label: D53
type_guessed: byte[4]
name: extract_symbolic_data
arguments: label: D34
type_guessed: string
name: extract_symbolic_data
arguments: label: D65
type_guessed: byte[4]
name: extract_symbolic_data
arguments: label: D17
type_guessed: string
name: extract_symbolic_data
arguments: label: D27
type_guessed: string

tool: D40: %f

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


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

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


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

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


tool: D27: 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);
}
```