1.a) fp = fopen("nome.ext", "rb")
- abre para leitura um ficheiro binário nome.ext
já existente.
1.b) fp = fopen("nome.ext", "w")
- cria para escrita, ou abre e trunca se já existir, um ficheiro
de texto nome.ext
.
c) fp = fopen("nome.ext", "r+b")
- abre para leitura e escrita um ficheiro binário nome.ext
já existente.
Em qualquer dos casos é devolvido NULL para assinalar
erros.
d) FILE *fp
, admitindo que se incluiu stdio.h
2.a) No ecrã aparece:
prog [ou prog.exe] a b c
2.b) O valor de argc
é 4.
3.a) Deve ser utilizada a segunda linha de código, pois não
há nenhuma maneira de limitar o número de caracteres lidos pela
função gets()
, ao contrário do que acontece com fgets()
.
A chamada a gets()
pode portanto resultar na
atribuição de valores (caracteres) para além do final da
cadeia (matriz de caracteres) nome1
, o que, para
além de ser um erro grave, conduz a resultados indefinidos.
3.b) A função fgets()
coloca na cadeia (se para
tal houver espaço, daí o if no código abaixo!) o
caractere de fim-de-linha ('\n'
), que é descartado
por gets()
. Esse efeito pode ser corrigido com
if(nome2[strlen(nome2)-1] == '\n') nome2[strlen(nome2)-1] = '\0';
admitindo que se incluiu string.h
.
4.a) A variável alunos
consiste numa matriz com
100 estruturas do tipo alunotipo
, cada uma com três
campos: um inteiro numero
, uma matriz de inteiros notas
com três elementos e uma cadeia (matriz de caracteres) nome
com 41 caracteres.
4.b)
int i; for(i = 0; i < 100; i++) printf("Nome: \"%s\"\nNumero: %d\n", alunos[i].nome, alunos[i].numero);
4.c) Para atribuir 20 à terceira nota do décimo aluno pode-se usar a instrução:
alunos[9].notas[2] = 20;
5. O programa imprime
3, 10, 11, 10
6. A chamada func(15)
imprime:
15 7 3 1
7. A execução do programa resulta em:
1 2 3 4 5 10 8 8
8. A função Lremove(Lista *l)
pode ser escrita,
por exemplo:
void *Lremove(Lista *l) { void *dados; Lelemento *corr; /* As condicoes de erro sao: lista nula, lista vazia, ou elemento corrente nulo. */ if(l == 0 || l->inicio == NULL || l->corrente == NULL) return NULL; corr = l->corrente; /* ponteiro para o corrente */ dados = corr->dados; /* guarda dados do corrente */ l->numero--; /* decrementa numero de elementos */ if(corr->seguinte != NULL) /* existe elemento seguinte? */ { corr->seguinte->anterior = corr->anterior; /* corrige anterior do seguinte */ l->corrente = corr->seguinte; /* novo corrente e' o seguinte */ } else /* nao existe elemento seguinte */ l->corrente = corr->anterior; /* novo corrente e' o anterior */ if(corr->anterior != NULL) /* existe elemento anterior? */ corr->anterior->seguinte = corr->seguinte; /* corrige seguinte do anterior */ else /* nao existe elemento anterior */ l->inicio = corr->seguinte; /* novo inicio e' o seguinte */ free(corr); /* liberta elemento ex-corrente */ return dados; /* devolve dados */ }
9. O resultado da execução do programa é:
0 11 2 38 66 2
Página
concebida e mantida por Eng. Manuel Menezes de Sequeira (última actualização 2006/07/07) Copyright © 1996-2001 ISCTE |