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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x18(%rbp)
  movl   $0x0,-0x14(%rbp)
  movl   $0x0,-0x10(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0xc(%rbp)
  movl   $0x1,-0x1c(%rbp)
  jmp    L5
L34:
  mov    -0x1c(%rbp),%eax
  mov    %eax,%esi
  lea    D15(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D2(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x28(%rbp),%rax
  mov    %rax,%rsi
  lea    D64(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x24(%rbp),%rax
  mov    %rax,%rsi
  lea    D10(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D10(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    -0x28(%rbp),%eax
  cmp    $0x32,%eax
  jle    L59
  addl   $0x1,-0x18(%rbp)
L59:
  mov    -0x28(%rbp),%eax
  cmp    $0x9,%eax
  jle    L10
  mov    -0x28(%rbp),%eax
  cmp    $0x14,%eax
  jg     L10
  movss  -0x24(%rbp),%xmm0
  movss  -0xc(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0xc(%rbp)
  addl   $0x1,-0x14(%rbp)
L10:
  movss  -0x20(%rbp),%xmm1
  movss  D60(%rip),%xmm0
  comiss %xmm1,%xmm0
  jbe    L6
  addl   $0x1,-0x10(%rbp)
L6:
  addl   $0x1,-0x1c(%rbp)
L5:
  cmpl   $0xf,-0x1c(%rbp)
  jle    L34
  mov    -0x10(%rbp),%eax
  imul   $0x64,%eax,%eax
  movslq %eax,%rdx
  imul   $0xffffffff88888889,%rdx,%rdx
  shr    $0x20,%rdx
  add    %eax,%edx
  sar    $0x3,%edx
  sar    $0x1f,%eax
  sub    %eax,%edx
  pxor   %xmm1,%xmm1
  cvtsi2ssl -0x14(%rbp),%xmm1
  movss  -0xc(%rbp),%xmm0
  divss  %xmm1,%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm0,%xmm2
  movq   %xmm2,%rcx
  mov    -0x18(%rbp),%eax
  movq   %rcx,%xmm0
  mov    %eax,%esi
  lea    D65(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L22
  call   <__stack_chk_fail@plt>
L22:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_label: D15
type: string
name: parse_data
arguments: data_label: D2
type: string
name: parse_data
arguments: data_label: D64
type: string
name: parse_data
arguments: data_label: D43
type: string
name: parse_data
arguments: data_label: D10
type: string
name: parse_data
arguments: data_label: D50
type: string
name: parse_data
arguments: data_label: D60
type: byte[4]
name: parse_data
arguments: data_label: D65
type: string

tool: D15: 
- Pessoa %d:


tool: D2: Idade: 

tool: D64:  %d

tool: D43: Altura (em metros): 

tool: D10:  %f

tool: D50: Peso: 

tool: {"D60": [0x00,0x00,0x20,0x42]}

tool: D65: 
Pessoas acima de 50 anos: %d.
Media de altura das pessoas com 10 a 20 anos: %.2f.
Percentagem de pessoas com peso abaixo de 40kg: %d%%.


assistant: ```c
void main() {
  int i, idade, cont = 0, conth = 0, contp = 0;
  float altura, peso, somah = 0.0;
  for (i = 1; i <= 15; i++) {
    printf("\n- Pessoa %d:\n", i);
    printf("Idade: ");
    scanf(" %d", &idade);
    printf("Altura (em metros): ");
    scanf(" %f", &altura);
    printf("Peso: ");
    scanf(" %f", &peso);
    if (idade > 50)
      cont++;
    if (idade >= 10 && idade <= 20) {
      somah += altura;
      conth++;
    }
    if (peso < 40)
      contp++;
  }
  printf("\nPessoas acima de 50 anos: %d.\n"
         "Media de altura das pessoas com 10 a 20 anos: %.2f.\n"
         "Percentagem de pessoas com peso abaixo de 40kg: %d%%.\n",
         cont, somah / conth, 100 * contp / 15);
}
```