Este capítulo contém questões específicas sobre a linguagem C.
Resposta: são palavras que a linguagem de programação fornece aos programadores para a criação de programas. Essas palavras não podem ser utilizadas pelos programadores para nomear variáveis ou funções. Por exemplo, em C, não é possível criar uma variável com nome float, pois este é utilizado para identificar os números em ponto flutuante.
#include <stdio.h> int main() { printf("%d", 5>3>2); return 0; }
É possível executar esse programa? Se não for possível, justifique a sua resposta. Caso seja possível, qual seria o resultado? E o que aconteceria se fosse substituído o valor 2 por 0 nesse programa? Justifique a sua resposta.
#include <stdio.h> int main() { float i; int x; x=2; printf("%d\n", x); x=1/2; printf("%d\n", x); x = 2/4; printf("%d\n", x); x = 2.0/4; printf("%d\n", x); i = 2.0/4.0; printf("%f\n", i); i = 2.0/4; printf("%f\n", i); i = 2/4; printf("%f\n", i); i = 1/2; printf("%f\n", i); return 0; }
COMENTáRIOS: PARA RESOLVER ESSA QUESTãO O ALUNO DEVE TER CONHECIMENTO SOBRE COMO A LINGUAGEM C ENTENDE A DIVISãO DE TIPOS NUMéRICOS.
#include <stdio.h> int main() { int i; float x; i = (float) 2; printf("%d\n", i); i = i / (float) 2; printf("%d\n", i); i = (int) (2/4); printf("%d\n", i); i = (int) 2./ (float) 4; printf("%d\n", i); x = 2.0 / (int) 4.0; printf("%f\n", x); x = (int) 2.0/4; printf("%f\n", x); x = (int) (2.0/4); printf("%f\n", x); x = 2 / (float) 4; printf("%f\n", x); x = (float) (1/2); printf("%f\n", x); x = 1 / (float) 2; printf("%f\n", x); return 0; }
#include <stdio.h> int main(void) { char i; for (i='A'; i<='Z'; i++) printf ("%c", i); printf ("\n"); return 0; }
#include <stdio.h> int main(void) { char i; for (i=65; i<=90; i++) printf ("%c", i); printf ("\n"); return 0; }
#include <stdio.h> int main(void) { int i; for (i='A'; i<='Z'; i++) printf ("%d ", i); printf ("\n"); return 0; }
#include <stdio.h> int main(void) { int i; for (i='A'; i<='Z'; i++) printf ("%d - %c\n", i, i); printf ("\n"); return 0; }
#include <stdio.h> int main(void) { char i; for (i='A'; i<='z'; i++) printf ("%d ", i); printf ("\n"); return 0; }
#include <stdio.h> int main(void) { int a,b; a = 2147483647; b = a + a; printf("%d\n", a); printf("%d\n", b); return 0; }
Ao compilar e executar o programa é obtido os seguintes valores na tela: 2147483647 e -2. O que ocorreu?
COMENTáRIOS: PARA RESPONDER ESSA QUESTãO, é IMPORTANTE SABER QUE O VALOR 2147483647 é O MAIOR VALOR POSSíVEL PARA O TIPO INTEIRO EM C (USANDO 4 BYTES). COLOQUE O MODIFICADOR UNSIGNED ANTES DO TIPO INT E VERIFIQUE A MUDANçA (SERá NECESSáRIO TAMBéM MUDAR A MáSCARA DE IMPRESSãO PARA %U.
#include <stdio.h> int main() { int n; scanf("%d", &n); switch (n) { case 0: printf("Você digitou zero."); break; case 1: case 4: case 9: printf("n é um quadrado perfeito."); break; case 2: printf("n é um número par."); case 3: case 5: case 7: printf("n é um número primo."); break; case 6: case 8: printf("n é um número par."); break; default: printf("Somente números de 1 dígito são permitidos."); break; } return 0; }
#include <stdio.h> int main() { int a; printf("Digite um número positivo:"); scanf("%d", &a); switch (a) { case 1: case 2: case 3: printf("Número de 1 a 3.\n"); case 4: case 5: case 6: printf("Número de 4 a 6.\n"); default: printf("Número digitado é maior que 6.\n"); } return 0; }
a) Existe algum erro no programa que não possa gerar um executável? Se existir, o que está errado?
b) Caso o programa possa ser compilado sem erro, o que seria exibido se o valor digitado pelo usuário fosse igual a 2? Isto estaria correto? Se não estiver, faça as devidas modificações para que as mensagens estejam de acordo com os possíveis valores digitados. Neste caso, considere que o usuário irá digitar um valor positivo.
Resposta: Não faz sentido colocar o comando break após o comando default, pois isto seria desnecessário. Porém, de acordo com os criadores da linguagem (Brian Kerninghan e Dennis Ritchie), isso poderia ser necessário na hipótese do programador adicionar, posteriormente, um caso após este comando [pág. 52 do livro The Programming Language - second edition]. Os autores chamam essa prática de programação defensiva.
#include <stdio.h> int main() { char c; for ( ; ; ) { printf("@"); scanf("%c", &c); if (c == 'a') break; } return 0; }
a) O que faz o comando for ( ; ; )?
b) Execute o programa e verifique como é possível finalizá-lo.
#include <stdio.h> int main() { int i; for (i=0; ;i++) { printf("%d\n", i); } return 0; }
É possível utilizar o comando for sem a condição de parada? Se for possível, o que acontecerá com a execução desse programa?
#include <stdio.h> int main() { int j=0; for ( ;j!=5; ) { printf("%d\n", j); j++; } return 0; }
Resposta: o programa irá apresentar uma sequência de números (de zero a quatro). Neste programa, deve-se observar que o comando for que normalmente tem a inicialização e o incremento (ou decremento) na própria instrução, não precisa ter esses elementos para funcionar. Inclusive, poderia até mesmo não ter nenhuma das suas partes (inicialização, condição de parada e incremento ou decremento) - situação em que estaria em loop eterno.