Ficha programaçao c
Programa¸ao Imperativa c˜
1
Estado e atribui¸oes c˜
Diga, justificando, qual o output de cada um dos seguintes excertos de c´digo C. o 1. int x, y; x = 3; y = x+1; x = x*y; y = x + y; printf("%d %d\n", x, y); 2. int x, y; x = 0; printf ("%d %d\n", x, y); 3. (assuma que os c´digos ASCII dos caracteres ’A’, ’0’, ’ ’ e ’a’ s˜o respectivamente o a 65, 48, 32 e 97) char a, b, c; a = ’A’; b = ’ ’; c = ’0’; printf ("%c %d\n", a, a); a = a+1; c = c+2; printf ("%c %d %c %d\n", a, a, c, c); c = a + b; printf ("%c %d\n", c, c); 4. int x, y; x = 200; y = 100; x = x+y; y = x-y; x = x-y; printf ("%d %d\n", x, y); 5. char x, y; x = 200; y = 100; x = x+y; y = x-y; x = x-y; printf ("%d %d\n", x, y); 6. int x, y; x = 100; y = 28; x += y ; y -= x ; printf ("%d %d\n", x++, ++y); printf ("%d %d\n", x, y);
1
2
Estruturas de controlo
1. Diga, justificando, qual o output de cada um dos seguintes excertos de c´digo C. o (a) int x, y; x = 3; y = 5; if (x > y) y = 6; printf ("%d %d\n", x, y); (b) int x, y; x = y = 0; while (x != 11) { x = x+1; y += x; } printf ("%d %d\n", x, y); (c) int x, y; x = y = 0; while (x != 11) { x = x+2; y += x; } printf ("%d %d\n", x, y); (d) int i; for (i=0; (i0) { if (n%2 == 0) putchar (’0’); else putchar (’1’); n = n/2; } putchar (’\n’); } int main () { int i; for (i=0;(i0) i=1 r = m + mult (n-1, m); Esta defini¸˜o corresponde ` defini¸˜o recurca a ca else r = 0; siva que se apresenta ` direita. a Apresente ums defini¸˜o iterativa desta ca return r; fun¸˜o. ca } 2. Uma forma alternativa (e muito mais eficiente) consiste em aproveitar a representa¸˜o ca bin´ria dos inteiros (onde a multiplica¸˜o e divis˜o por 2 s˜o pelo menos t˜o eficientes a ca a a a como a adi¸˜o). ca Se analisarmos a defini¸˜o anterior em dois ca int mult (int n, int m) { casos (caso em que o multiplicador ´ par ou e int r; ´ ımpar), obtemos a seguinte defini¸˜o: ca if (n>0) { r = 2 * mult (n>>1, m); Se n ´ par e 2 ∗ (n/2 × m) if (n % 2 != 0) n×m = r = r + m; m + 2 ∗