Cábula para C
// definição de variáveis
*********************************************************
int x,y,z ; // variaveis inteiras
short i; //
inteiro curto
long a,b; // variaveis
inteiras tamanho duplo
unsigned y; // inteiros positivos
long unsigned z; // inteiro positivo longo
float w; // real
double ww; // real tamanho
duplo
char c; //
1 caracter
int a=2;
// a variaveis podem ser locais ou globais (definidas antes das
funcoes)
// às variaveis locais é feito o reset quando se sai da
função
// variaveis que mantem os seu valores nas funçoes (static)
static int k=3;
// variaveis globais usadas por rotinas noutras files são
chamadas externas e devem
// ser definidas como tal
extern float x=2.;
// Alguns caracteres constantes
'\n' // linha nova
'\t' // tab
'\\' // backslash
'\'' // sigle quote
'\0' // null : terminaçaõ das strings
//Arrays
***************************************************************
//começam em 0
int arre[10][30];
// Os arrays podem ser passados como argumentos sem precisar de dar o
tamanho
// no caso do tamanho ser necessario vai numa variavel à parte
// as variaveis em arrays passam de umas rotinas para outras
int add_array(int array[], int size)
{ int i;
int total = 0;
for(i = 0; i < size; i++)
total += array[i];
return(total);
}
// Operadores ********************************************
/*
+, - , * , /
*/
y = (m * x) + c // exemplo
// %
// modulo (resto da divisão inteira)
int i1=9;
int i2=2;
int i3=9%2; // i3=1
// abreviaturas
/* i++; ou ++i; é equivalente a i=i+1;
i--; ou --i; é equivalente
a i=i-1; */
int i=9;
int j=2;
int k=i+ ++j; // j=12
int i=9;
int j=2;
int k=i+ j++; // j=11 ! o incremento é
feito depois
/* i+=10; é equivalente
i=i+10;
i-=10; é
equivalente i=i-10;
i*=10; é
equivalente i=i*10;
i/=10; é
equivalente i=i/10; */
// Comparação entre valores 0= falso
diferente 0 verdadeiro
/*
== igual
> maior
< menor
>= maior ou igual
<= menor ou igual
!= diferente
*/
/* Operadores lógicos
&& e
|| ou
! não
*/
// ciclos de controlo
*****************************************
// if
----------------------------------------------------------
if (result >= 45)
printf("Pass\n");
else
printf("Fail\n");
if (result >= 45)
{ printf("Passed\n");
printf("Congratulations\n");
}
else
{ printf("Failed\n");
printf("Good luck in the
resits\n");
}
if (result >= 75)
printf("Passed: Grade A\n");
else if (result >= 60)
printf("Passed: Grade B\n");
else if (result >= 45)
printf("Passed: Grade C\n");
else
printf("Failed\n");
// switch
-----------------------------------------------------
/* Estimate a number as none, one, two, several, many */
int number = 8;
{ switch(number) {
case 0 :
printf("None\n");
break;
case 1 :
printf("One\n");
break;
case 2 :
printf("Two\n");
break;
case 3 :
case 4 :
case 5 :
printf("Several\n");
break;
default :
printf("Many\n");
break;
}
}
// resultado Many !
/* while
------------------------------------------------------------
As an example, here is a function to return the length of a string.
Remember that the string is represented as an array of characters
terminated
by a null character '\0'
*/
int string_length(char string[])
{ int i = 0;
while (string[i] != '\0')
i++;
return(i);
}
// do while -------------------------------------------------------
do
{ printf("Enter 1 for yes, 0 for no
:");
scanf("%d",
&input_value);
} while (input_value != 1 && input_value != 0)
// for --------------------------------------------------
float average(float array[], int count)
{ float total = 0.0;
int i;
for(i = 0; i < count; i++)
total += array[i];
return(total / count);
}
// loop com varios argumentos: for (hi = 100, lo = 0; hi >= lo;
hi--, lo++)
break; // para a execução do loop e sai
continue; // salta para a condição de controlo do loop
goto nome; // salto incondicional
// definição de funções
int funcao(int x[]){
............
return(valor);}
// função sem valor de retorno
void error_line(int line)
{ fprintf(stderr, "Error in input data:
line %d\n", line);
}
//The function would be called as follows
error_line(line_number);
// ******** Pointers ***********
// definicao (referenciao da variavel)
// o pointer contem o endereço de memoria onde se encontra a
variável
int *pi = &i; // pi é o pointer para o
inteiro i
float *px =&x; // px é o pointer para o float x
// derefenciacao do pointer
i =*pi;
// exemplo
fiddle(int x, int *y)
{ printf(" Starting fiddle: x = %d, y = %d\n", x, *y);
x ++;
(*y)++; // como y é um pointer precisa
ser de-referenciado antes de ser incrematado
// o valor da variável para onde aponta
printf("Finishing fiddle: x = %d, y = %d\n", x, *y);
}
main()
{ int i = 0;
int j = 0;
printf(" Starting main : i = %d, j = %d\n", i,
j);
fiddle(i, &j);
printf("Finishing main : i = %d, j = %d\n", i,
j);
}
// arrays e pointers
// arrays e pointers estão ligados. os arrays são um tipo
de pointer. de-referenciar
// o nome do array dá-nos o elemento 0 do array
arr[0] -> *arr
arr[1] -> *(arr+1) etc
// os arrays podem ser passados nas funções mantendo o
valor das variáveis
// na passagem nas funções podemos usar
// int arr[] ou int *arr
//atenção
arr[2]++ é legal mas arr ++ é ilegal!
// INPUT E OUTPUT
#include <stdio.h> // standard package
getchar(); // lê um caracter do keyboard. em caso de erro retorna
EOF
putchar(character); //escreve um caracter no ecrã
// escrita e leitura formatadas
printf()
scanf()
printf("o numero %d\n",n);
scanf()
scanf("%d", &i);
// Strings de controlo
%d inteiro
%f float/double
%c character
%s character string
%e exponencial
%8.2f formato float com 8 caracteres, 2 a seguir ao ponto decimal
%-8.2f a saida vem justificada à direita
// Acesso a files
FILE *outfile; // definição do pointer outfile como
sendo do tipo FILE
outfile = fopen("filename","w"); // abertura para escrita
fprintf(outfile,"um número %d\n",n);
// w write
// r read
// a append