Índice
- Disciplinas Atuais
- Disciplinas Antigas
Esta página apresenta a errata que fiz para o livro KERNIGHAN,B.W. & RITCHIE,D.M. A Linguagem de Programação C. Padrão ANSI. Rio de Janeiro, Editora Campus, 1990. 289p.. Parece que a Editora Campus não vai mesmo lançar uma edição corrigida do livro. Afinal, depois de anos, ela relança a mesma edição com erros e mais erros de tradução. Quem puder ler o original em inglês, é melhor.
Vamos dividir por capítulos. Vou fazer aos poucos, pois é muita coisa.
4 erros
Pág. 16
c-getchar();
O correto é:
c=getchar();
Pág. 17
Pág. 19
No lugar de }
Deve ser escrito: {
Pág. 28
while ((para[i]= de[i]!='\0')
deveria ser:
while ((para[i]= de[i])!='\0')
5 erros
Pág. 37
#define BELL '\xx7' /* caractere de alerta em ASCII */
O correto é:
#define BELL '\x07' /* caractere de alerta em ASCII */
ou
#define BELL '\x7' /* caractere de alerta em ASCII */
Pág. 40
float eps = 1.0e = 5;
O correto é:
float eps = 1.0e-5;
Pág. 40
if((ano & 4 == 0 && ano & 100 != 0) || ano % 400 == 0)
O correto é:
if((ano % 4 == 0 && ano % 100 != 0) || ano % 400 == 0)
Pág. 46
int o,j;
O correto é:
int i,j;
Pág. 47
while(s[i++]=t[j++])!= '\0') /*copia t */
O correto é (falta uma abertura de parêntesis e a vírgula após o comando while):
while((s[i++]=t[j++])!= '\0') /*copia t */ ;
Pág. 48
Na primeira linha,falta o operador | na frase.
Deve-se distinguir os operadores bit-a-bit & e dos operadores lógicos && e
deve ser escrita:
Deve-se distinguir os operadores bit-a-bit & e**|** dos operadores lógicos && e **||**
no meio da página, a expressão
return (x>>(p+1-n)&~(~0<<n);
falta fechar um parêntesis. Deve ser:
return (x>>(p+1-n))&~(~0<<n);
Pág. 49
x=x*(y+2)
O correto é:
x=x*(y+1)
Pág.50
. esquerda para direita
O o operador correto não é ponto, mas vírgula:
, esquerda para direita
Também , embaixo da tabela, está escrito:
Unários +,- e * têm maior precedência que as formas binárias.
O correto é
Unários &,+,- e * têm maior precedência que as formas binárias.
5 erros
Pág.54
expressão como "z-a;" é...
O correto é:
expressão como "z=a;" é...
Pág.55
if (x<v[meio]
O correto é (erro do original em inglês):
if (x<v[meio])
Pág.60
na segunda linha temos:
como a=z na cadeia…
O corrreto é:
como a-z na cadeia…
Pág.61
do } /* gera digitos em ordem invrtida */
O correto é:
do { /* gera digitos em ordem invrtida */
Pág.62
O correto é:
s[n+1]='\0';
13 erros
Pág.67
while (==lin>0 && (c=getchar())!-EOF && c!='\n')
O correto é:
while (--lim>0 && (c=getchar())!=EOF && c!='\n')
Pág.69
O correto é:
A biblioteca-padrão inclui uma função atof; o arquivo cabeçalho <stdlib.h> a declara.
Nesta mesma página, a função atof está declarada como:
double atof(chars[])
O correto é:
double atof(char s[])
Nesta função temos ainda, no primeiro if:
if (s[i]=='+'\\s[i]=='-')
O correto é:
if (s[i]=='+'||s[i]=='-')
Mais abaixo, temos
val = 10.0;*val + (s[i]-'0');
O correto é:
val = 10.0*val + (s[i]-'0');
Pág.70
Depois do meio da página, temos a expressão:
sum += atof(linha)
O correto é:
soma += atof(linha)
Pág.73
#include <math.h> /* para atof() */
O correto é:
#include <stdlib.h> /* para atof() */
Pág.76
Pág.78
Pág.80
Pág.83
Pág.85
ultimo = esq;
inserir:
for (i=esq+1; i<=dir; i++)
Pág.88
printf("x/y""=%g\n",x/y);
Pág.102
Pág.104
Pág.104
Pág.105
Pág.105
Pág.105
Pág.107
Pág.109
Pág.110
O mesmo em:
void dia_do_mes(int ano, int diaano, int *ames, int *adia)
Pág.111
Pág.112
Pág.114
No terceiro ecoa, em vez de :
prin)f((argv>1)?”%s”:”%s”,*++argv);
o correto é:
printf((argv>1)?”%s “:”%s”,*++argv);
Pág.115
Pág.116