Commit 73cbaa28 authored by Jomaro Rodrigues's avatar Jomaro Rodrigues

commit inicial, estruturas dos arquivos feita e 3 capítulos semi-convertidos

parents
\documentclass[apostila.tex]{subfiles}
\begin{document}
\end{document}
\ No newline at end of file
\relax
\catcode `"\active
\select@language{brazil}
\@writefile{toc}{\select@language{brazil}}
\@writefile{lof}{\select@language{brazil}}
\@writefile{lot}{\select@language{brazil}}
\@writefile{toc}{\contentsline {chapter}{\numberline {1}Hist\IeC {\'o}rico}{1}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\@writefile{toc}{\contentsline {chapter}{\numberline {2}Conceitos b\IeC {\'a}sicos}{3}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\@writefile{toc}{\contentsline {section}{\numberline {2.1}Estrutura b\IeC {\'a}sica de um programa em C}{3}}
\@writefile{lol}{\contentsline {lstlisting}{exemplos/estrutura.c}{3}}
\@writefile{lol}{\contentsline {lstlisting}{exemplos/estrutura2.c}{4}}
\@writefile{toc}{\contentsline {section}{\numberline {2.2}Vari\IeC {\'a}veis}{4}}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.2.1}Nomes de Vari\IeC {\'a}veis}{4}}
\@writefile{lot}{\contentsline {table}{\numberline {2.1}{\ignorespaces Tipos de dados num\IeC {\'e}ricos em C.}}{5}}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.2.2}Tipos de Vari\IeC {\'a}veis}{5}}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.2.3}Declara\IeC {\c c}\IeC {\~a}o/Inicializa\IeC {\c c}\IeC {\~a}o}{5}}
\@writefile{toc}{\contentsline {section}{\numberline {2.3}Constantes}{6}}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.1}Literais}{6}}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.2}Simb\IeC {\'o}licas}{6}}
\@writefile{lol}{\contentsline {lstlisting}{exemplos/constantes.c}{6}}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.3}Incluindo bibliotecas}{7}}
\@writefile{toc}{\contentsline {section}{\numberline {2.4}Exerc\IeC {\'\i }cios}{7}}
\@writefile{toc}{\contentsline {chapter}{\numberline {3}Operadores}{9}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\@writefile{toc}{\contentsline {section}{\numberline {3.1}Operador de Atribui\IeC {\c c}\IeC {\~a}o}{9}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.1}Operadores Matem\IeC {\'a}ticos}{9}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.2}Un\IeC {\'a}rios}{9}}
\@writefile{lot}{\contentsline {table}{\numberline {3.1}{\ignorespaces Operadores bin\IeC {\'a}rios}}{11}}
\@writefile{lot}{\contentsline {table}{\numberline {3.2}{\ignorespaces Operadores de atribui\IeC {\c c}\IeC {\~a}o compostos}}{11}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.3}Bin\IeC {\'a}rios}{11}}
\@writefile{toc}{\contentsline {section}{\numberline {3.2}Atribui\IeC {\c c}\IeC {\~a}o Composta}{11}}
\@writefile{toc}{\contentsline {section}{\numberline {3.3}Operadores Relacionais}{11}}
\@writefile{toc}{\contentsline {section}{\numberline {3.4}Operadores L\IeC {\'o}gicos}{12}}
\@writefile{toc}{\contentsline {section}{\numberline {3.5}Operador Condicional}{12}}
\@writefile{toc}{\contentsline {section}{\numberline {3.6}Exerc\IeC {\'\i }cios}{12}}
This diff is collapsed.
File added
\documentclass[a4paper]{book}
\usepackage[brazil]{babel}
\usepackage[utf8]{inputenc}
\usepackage{subfiles}
\usepackage{listings}
\usepackage{verbatim}
\lstset{language=C}
\lstset{literate=
{á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1
{Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1
{à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1
{À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1
{ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1
{Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1
{â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1
{Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1
{œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1
{ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1
{}{{\EUR}}1 {£}{{\pounds}}1
{ã}{{\~a}}1 {õ}{{\~o}}1 {ç}{{\,c}}1
}
\title{Apostila de C}
\author{PET Computação UFPR}
\date{2001}
\begin{document}
\maketitle
\frontmatter
\cleardoublepage
\tableofcontents
\cleardoublepage
\mainmatter
\subfile{historico.tex}
\subfile{conceitos_basicos.tex}
\subfile{operadores.tex}
\backmatter
\end{document}
\ No newline at end of file
\select@language {brazil}
\contentsline {chapter}{\numberline {1}Hist\IeC {\'o}rico}{1}
\contentsline {chapter}{\numberline {2}Conceitos b\IeC {\'a}sicos}{3}
\contentsline {section}{\numberline {2.1}Estrutura b\IeC {\'a}sica de um programa em C}{3}
\contentsline {section}{\numberline {2.2}Vari\IeC {\'a}veis}{4}
\contentsline {subsection}{\numberline {2.2.1}Nomes de Vari\IeC {\'a}veis}{4}
\contentsline {subsection}{\numberline {2.2.2}Tipos de Vari\IeC {\'a}veis}{5}
\contentsline {subsection}{\numberline {2.2.3}Declara\IeC {\c c}\IeC {\~a}o/Inicializa\IeC {\c c}\IeC {\~a}o}{5}
\contentsline {section}{\numberline {2.3}Constantes}{6}
\contentsline {subsection}{\numberline {2.3.1}Literais}{6}
\contentsline {subsection}{\numberline {2.3.2}Simb\IeC {\'o}licas}{6}
\contentsline {subsection}{\numberline {2.3.3}Incluindo bibliotecas}{7}
\contentsline {section}{\numberline {2.4}Exerc\IeC {\'\i }cios}{7}
\contentsline {chapter}{\numberline {3}Operadores}{9}
\contentsline {section}{\numberline {3.1}Operador de Atribui\IeC {\c c}\IeC {\~a}o}{9}
\contentsline {subsection}{\numberline {3.1.1}Operadores Matem\IeC {\'a}ticos}{9}
\contentsline {subsection}{\numberline {3.1.2}Un\IeC {\'a}rios}{9}
\contentsline {subsection}{\numberline {3.1.3}Bin\IeC {\'a}rios}{11}
\contentsline {section}{\numberline {3.2}Atribui\IeC {\c c}\IeC {\~a}o Composta}{11}
\contentsline {section}{\numberline {3.3}Operadores Relacionais}{11}
\contentsline {section}{\numberline {3.4}Operadores L\IeC {\'o}gicos}{12}
\contentsline {section}{\numberline {3.5}Operador Condicional}{12}
\contentsline {section}{\numberline {3.6}Exerc\IeC {\'\i }cios}{12}
\documentclass[apostila.tex]{subfiles}
\begin{document}
\end{document}
\ No newline at end of file
\documentclass[apostila.tex]{subfiles}
\begin{document}
\end{document}
\ No newline at end of file
\documentclass[apostila.tex]{subfiles}
\begin{document}
\end{document}
\ No newline at end of file
\documentclass[apostila.tex]{subfiles}
\begin{document}
\chapter{Conceitos básicos}
\section{Estrutura básica de um programa em C}
Apresentamos abaixo os elementos mais comuns em um programa em C, assim como a apresentação geral
de sua estrutura.
É importante observar que nem todos os elementos são obrigatórios e a ordem de cada declaração não é necessariamente a mesma.
\lstinputlisting{exemplos/estrutura.c}
OBS.: Um bloco de código é delimitado por abre e fecha chaves.
Os comentérios são colocados entre /* */.
Em um segundo exemplo, temos um programa em C completo. Observe como a estrutura desse
programa é parecida com a apresentada anteriormente.
\lstinputlisting{exemplos/estrutura2.c}
\section{Variáveis}
Uma variável é uma localização para armazenagem de dados na memória do computador.
Quando o nome de uma variável aparece em um programa ele
está se referindo, na verdade, aos dados armazenados
nessa localização.
\subsection{Nomes de Variáveis}
Para usar variáveis nos programas em C, devemos saber quais nomes podem ser utilizados. Para tanto,
devemos seguir as seguintes regras:
\begin{itemize}
\item
\item O nome pode conter letras, algarismos e o caractere ' ';
\item O primeiro caractere do nome sempre deve ser uma letra ou o caractere ' ';
\item Letras maiúsculas são diferentes de min'usculas;
\item As palavras-chave da linguagem C não podem ser utilizadas como nomes das variáveis;
\item A escolha de nomes significativos para suas variáveis pode tornar o programa mais claro e fácil de entender.
\end{itemize}
Exemplos:
percent /* válido */
y2x5 fg7h /* válido */
double /* inválido: é uma palavra chave */
9winter /* inválido: inicia com algarismo */
\subsection{Tipos de Variáveis}
As variáveis da linguagem C enquadram-se em uma das seguintes categorias:
ffl Variáveis inteiras, que armazenam valores não-fracionais (ou seja, somente valores inteiros). Há dois tipos de variáveis inteiras:
- variáveis inteiras com sinal, que podem conter valores positivos ou negativos;
- variáveis inteiras sem sinal, que só podem assumir valores positivos.
Operações matemáticas entre variáveis inteiras são, normalmente, muito rápidas.
ffl Variáveis de Ponto Flutuante, que contém valores com uma parte fracional (ou seja, n'umeros reais).
No geral, as operações matemáticas são mais lentas para este tipo de variável.
\begin{table}
\scriptsize
\begin{tabular}{|l|l|l|l|}
Tipo de Variável & Palavra Chave & Bytes & Valores Válidos \\
Caracteres
& char & 1 & -128 a 127 \\
Números inteiros curtos
& short & 2 & -32.768 a 32.767 \\
Números inteiros
& int & 4 & -2.147.483.648 a 2.147.483.647 \\
Caracteres não sinalizados
& unsigned char & 1 & 0 a 255 \\
Números inteiros curtos sem sinal
& unsigned short & 2 & 0 a 65.535 \\
Números inteiros sem sinal
& unsigned long & 4 & 0 a 4.294.967.295 \\
N'umero de ponto flutuante com precisão simples
& float & 4 & 1,2E-38 a 3,4E38 \\
Número de ponto flutuante com precisão dupla
& double & 8 & 2,2E-308 a 1,8E308\\
\end{tabular}
\caption{Tipos de dados numéricos em C.}
\end{table}
\subsection{Declaração/Inicialização}
Antes de poder ser usada por um programa, uma variável deve ser declarada.
A declaração de uma variável informa ao compilador o nome e o tipo de uma variável e,
opcionalmente, inicializa a variável com um determinado valor.
A declaração deve ter o seguinte formato:
\begin{lstlisting}
tipo NomeVariavel;
Exemplo:
/* tres variaveis inteiras */
int count, number, start;
/* variavel de ponto flutuante inicializada com um valor */
float percent=15.3;
\end{lstlisting}
De acordo com o local no programa onde as variáveis são declaradas, elas se classificam em variáveis
globais, se declaradas fora de qualquer função, e variáveis locais, se declaradas dentro de uma função.
As variáveis globais são válidas em qualquer parte do programa e as
variáveis locais apenas dentro do bloco em que foram declaradas.
\section{Constantes}
Uma constante, da mesma forma que uma variável,
é uma localização usada pelo programa para armazenar dados.
Ao contrário da variável, porém,
o valor armazenado em uma constante não pode ser
alterado durante a execução do programa.
A linguagem C possui dois tipos de constantes: literais e simbólicas.
\subsection{Literais}
Constantes literais são os valores digitados diretamente no código-fonte do programa.
Segue alguns exemplos de constantes literais:
\begin{lstlisting}
int count = 20;
float tax_rate = 0.28;
char letter = 'c';
\end{lstlisting}
OBS.: Neste caso, os valores 20, 0.28 e `c' são as constantes literais. Note que para especificar
constantes que são caracteres, deve-se delimitar o valor com aspas simples.
\subsection{Simbólicas}
Constantes simbólicas são constantes representadas por um nome (s'imbolo) no programa.
Para utilizar o valor da constante no programa, podemos usar seu nome, exatamente como usar'iamos
o nome de uma variável. O nome da constante simbólica deve ser especificado somente uma vez, quando
ela é definida. Por exemplo:
\lstinputlisting{exemplos/constantes.c}
A saída será: O perimetro da circunferencia de raio 5 é 31.4159.
\subsection{Incluindo bibliotecas}
Uma biblioteca é uma coleção de declarações de funções e constantes,
que pode ser incluída em um programa e que provê uma série de "comandos" novos.
Para incluir uma biblioteca é utilizado a diretiva include.
As sintaxes possíveis são:
ffl Inclusão de uma biblioteca residente em um diretório padrão:
\begin{lstlisting}
#include <nomearq.h>
\end{lstlisting}
ffl Inclusão de uma biblioteca residente no diretório local:
\begin{lstlisting}
#include "nomearq.h"
\end{lstlisting}
As diretivas acima incluem
2
a biblioteca nomearq no programa.
1
Diretivas de pré-processamento serão melhor detalhadas no capítulo ??.
2
Na realidade, normalmente é realizada a inclusão de um header(cabeçalho) de uma biblioteca. Posteriormente este tópico será esclarecido.
\section{Exercícios}
1. Para cada variável abaixo, determine a forma equivalente para declarar a mesma variável em C.
a) $p \in N$
b) $q \in Q$
c) $r \in R$
d) $s \in Z$
e) sexo ([M]asc/[F]em)
f) tamanho camisa (P/M/G)
2. Qual tipo deveria ser utilizado para uma variável booleana
\footnote{Variável que assume Verdadeiro ou Falso.}?
3. Qual a diferença de uma constante declarada através de DEFINE e uma constante declarada utilizando a palavra-chave const?
4. Faça um programa completo em C que declara todas as variáveis do exercício ??.
\end{document}
\ No newline at end of file
\documentclass[apostila.tex]{subfiles}
\begin{document}
\end{document}
\ No newline at end of file
\documentclass[apostila.tex]{subfiles}
\begin{document}
\end{document}
\ No newline at end of file
\documentclass[apostila.tex]{subfiles}
\begin{document}
\end{document}
\ No newline at end of file
#define PI 3.14159
#define TAM_MAX 30
/* inclusão de bibliotecas */
#include <stdio.h>
#define PI 3.14159
void main()
{
float perimetro;
int raio = 5; /* atribui valor 5 ao raio */
perimetro = PI*(2*raio); /* calcula o perimetro */
printf("O perimetro da circunferencia de raio %d e %f", raio, perimetro);
}
#include <NomeBiblioteca> /* inclusão de bibliotecas */
#define NOMECONSTANTE Valor /* definição de constantes */
tipo função1(parâmetros); /* declaração de funções */
tipo função2(parâmetros);
tipo Variável1; /* declaração de variáveis globais */
tipo Variável2;
int main() /* funçãoo principal */
{
declaração de variáveis;
comandos;
return 0;
}
tipo função1(parâmetros)
{
declaração de variáveis;
comandos;
}
tipo função2(parâmetros)
{
declaração de variáveis;
comandos;
}
/* inclusao das bibliotecas */
#include <stdio.h>
#include <stdlib.h>
/* defini,c~ao de constantes */
#define PI 3.14
/* declaracao de funcoes (prototipos) */
float seno(int angulo);
/* declaracao de variaveis globais */
float raio;
/* corpo de comandos principal */
int main()
{
/* comandos */
}
/* definição (implementacao) de funcoes */
float seno(int angulo)
{
/* corpo da fun,c~ao */
}
\documentclass[apostila.tex]{subfiles}
\begin{document}
\end{document}
\ No newline at end of file
\documentclass[apostila.tex]{subfiles}
\begin{document}
\chapter{Histórico}
A linguagem C foi criada por Dennis M. Ritchie e Ken Thompson no laboratório Bell em 1972, baseada
na linguagem B de Thompson que era uma evolução da antiga linguagem BCPL. B foi nomeada com a
primeira letra de BCPL e C com a segunda. A próxima linguagem progressiva da idéia de C provavelmente se chamaría P.
A definição de C está contida no livro \emph{The C Programming Language},
escrito por Brian W. Kernighan e Dennis M. Ritchie.
Essa linguagem tornou-se vitoriosa como ferramenta na programa,c~ao de qualquer tipo de sistema
(sistemas operacionais, planilhas eletrônicas, processadores de texto, gerenciadores de banco de dados,
processadores gráficos, sistemas de transmissão de dados, para solução de problemas de engenharia ou
física etc.). Como exemplo, o sistema operacional UNIX é desenvolvido em C.
A linguagem de programação C tornou-se rapidamente uma das mais importantes e populares, principalmente por ser muito poderosa, portátil, flexível e pela padronização dos compiladores existentes. Foi
desenvolvida para que o usuário possa planejar programas estruturados e modulares, resultando em um
programa mais legível e documentado. Os programas em C tendem a ser bastante compactos e de rápida execução.
C é uma linguagem amigável e suficientemente estruturada para encorajar bons hábitos de programação, possibilitando também o desenvolvimento de partes separadas de um programa por pessoas
distintas. Essas partes podem ser unidas depois num produto final, o que significa que bibliotecas de
funções podem ser criadas ou usadas sem realmente se conhecer o código de cada uma delas.
Existem muitas outras virtudes de C que você conhecerá ao longo de seu aprendizado.
\end{document}
\ No newline at end of file
\documentclass[apostila.tex]{subfiles}
\begin{document}
\end{document}
\ No newline at end of file
apostila.pdf: *.tex exemplos/*.c
pdflatex apostila.tex > /dev/null
pdflatex apostila.tex > /dev/null
pdflatex apostila.tex > /dev/null
clean:
rm -f *.toc *.aux *.log *.dvi
\documentclass[apostila.tex]{subfiles}
\begin{document}
\end{document}
\ No newline at end of file
\documentclass[apostila.tex]{subfiles}
\begin{document}
\end{document}
\ No newline at end of file
\documentclass[apostila.tex]{subfiles}
\begin{document}
\chapter{Operadores}
Um operador é um símbolo que faz com que uma determinada operação,
ou ação, seja executada com um
ou mais operandos. Um operando é aquilo sobre o qual o operador atua.
Os operadores da linguagem C
enquadram-se em diversas categorias.
\section{Operador de Atribuição}
O operador de atribuição é o sinal '='.
Seu uso em programação é ligeiramente diferente de seu uso na
Matemática normal. Se escrevermos x = y;
em um programa em C, isto significa que o valor de y deve ser atribuído em x,
e não que y é igual a x
como seria de se esperar. Em uma instrução de atribuição,
o lado direito pode ser qualquer expressão e
o lado esquerdo deve necessariamente ser o nome de uma variável.
A sintaxe, portanto, é:
\begin{lstlisting}
variavel = expressao;
\end{lstlisting}
O operador de atribuição também pode ser usado de forma encadeada:
\begin{lstlisting}
bananas = tomate = laranja = 50;
/* atribui o valor 50 a todas estas variaveis */
\end{lstlisting}
\subsection{Operadores Matemáticos}
Os operadores matemáticos são usados para realizar operações matemáticas,
como adição ou subtração.
A linguagem C possui dois operadores matemáticos unários e cinco binários.
\subsection{Unários}
Os operadores matemáticos unários recebem este nome porque exigem
apenas um operando, e são os seguintes:
Operador Símbolo Ação Exemplo
Incremento ++ Incrementa o operando em uma unidade ++x, x++
Decremento $\Gamma \Gamma$ Decrementa o operando em uma unidade $\Gamma \Gamma x$, $x\Gamma \Gamma$
Exemplos:
\begin{lstlisting}
++x; /* equivalente a x = x + 1 */
y--; /* equivalente a y = y - 1 */
\end{lstlisting}
Observe que ambos os operadores podem ser colocados antes do operando
(modo de prefixo) ou depois do operando (modo de sufixo).
Estes dois modos não são equivalentes.
A diferença está no momento em que o incremento ou decremento acontece.
\begin{itemize}
\item No modo de prefixo, os operadores de incremento e decremento
modificam seu operando antes que este seja usado.
\item No modo de sufixo, os operadores de incremento e decremento
modificam seu operando depois que este é usado.
\end{itemize}
Exemplo:
\begin{lstlisting}
x = 10;
y = x++;
\end{lstlisting}
Depois que ambas as instruções forem executadas, x terá o valor 11 e y o valor 10. O valor de x foi
atribuído a y e em seguida o valor de x foi incrementado. Por outro lado, as instruções
\begin{lstlisting}
x = 10;
y = ++x;
\end{lstlisting}
resultam no valor 11 tanto para x como para y, pois x é incrementado e só depois seu valor é atribuído a y.
\begin{lstlisting}
#include <stdio.h>
void main()
{
int a,b;
a = b = 3; /* atribui o valor 3 a "a"e "b"*/
/* Imprime ambas as variaveis e as decrementa usando*/
/* o modo de prefixo para b e de sufixo para a */
printf("n%d %d\n",a--,--b);
printf("n%d %d\n",a--,--b);
printf("n%d %d\n",a--,--b);
}
\end{lstlisting}
A saída será:
\begin{verbatim}
3 2
2 1
1 0
\end{verbatim}
\subsection{Binários}
Operadores binários são aqueles que exigem dois operandos.
Os operadores binários da linguagem C, que
incluem as operações matemáticas mais comuns, são relacionados na tabela ??
\begin{table}
\begin{tabular}{|l|l|l|l|}
Operador & Símbolo & Ação & Exemplo \\
Adição & + & Soma seus dois operandos & x + y \\
Subtração & $\Gamma$ & Subtrai o segundo operando do primeiro & $x \Gamma y$ \\
Multiplicação & * & Multiplica seus dois operandos & x * y \\
Divisão & / & Divide o primeiro operando pelo segundo & x / y \\
Módulo & $\%$ &
Fornece o resto da divisão do primeiro operando pelo segundo &
x $\%$ y \\
\end{tabular}
\caption{Operadores binários}
\end{table}
Os primeiros quatro operadores já são familiares e não apresentarão qualquer problema.
O operador módulo talvez seja novo.
O módulo retorna o resto de uma divisão do primeiro operando pelo segundo.
Exemplo:
100 % 9 é igual a 1
10 % 5 é igual a 0
\section{Atribuição Composta}
Em C, os operadores de atribuição compostos permitem combinar uma
operação matemática binária com uma operação de atribuição de valor.
Em geral, estes operadores usam a seguinte sintaxe (sendo op um
operador binário):
exp1 op= exp2;
que é equivalente a escrever
exp1 = exp1 op exp2;
Os operadores compostos existem para os cinco operadores matemáticos binários descritos anteriormente, conforme ilustra a tabela ??.
Se você escrever será equivalente a
\begin{table}
\begin{tabular}{|c|c|}
x += y & x = x + y \\
x -= y + 1 & x = x - (y + 1) \\
x *= y & x = x * y \\
x /= y - 3 & x = x / (y - 3) \\
x $\%$= y & x = x $\%$ y \\
\end{tabular}
\caption{Operadores de atribuição compostos}
\end{table}
\section{Operadores Relacionais}
São usados para comparar expressões.
Uma expressão que contenha um operador relacional sempre é
avaliada como verdadeira (1) ou falsa (0).
Os seis operadores relacionais da linguagem C são listados na
tabela ??.
Operador Símbolo Pergunta Respondida Exemplo
Igual == Operando 1 é igual ao operando 2? x == y
Maior que ? Operando 1 é maior que o operando 2? x ? y
Menor que ! Operando 1 é menor que o operando 2? x ! y
Maior ou igual a ?= Operando 1 é maior ou igual ao operando 2? x ?= y
Menor ou igual a != Operando 1 é menor ou igual ao operando 2? x != y
Diferente != Operando 1 é diferente do operando 2? x != y
Tabela 3.3: Operadores relacionais